00001 #ifndef _PA_Palette
00002 #define _PA_Palette
00003
00004
00005
00006 void PA_LoadSpriteExtPal(u8 screen, u16 palette_number, void* palette);
00007 #define PA_LoadBgExtPal(screen, bg_number, palette) PA_LoadBgPal(screen, bg_number, palette)
00008
00009
00010
00017
00018
00019
00021
00023 #define PAL_BG0 0x05000000
00024 #define PAL_SPRITE0 0x05000200
00025 #define PAL_BG1 0x05000400
00026 #define PAL_SPRITE1 0x05000600
00027
00028 #define REG_BRIGHT 0x0400006C // Brightness
00029
00030
00031
00049 #define PA_LoadPal(palette, source) {\
00050 DMA_Copy((void*)source, (void*)palette, 256, DMA_16NOW);\
00051 if (palette == PAL_SPRITE0) PA_LoadSpritePal(0, 0, (void*)source);\
00052 if (palette == PAL_SPRITE1) PA_LoadSpritePal(1, 0, (void*)source);\
00053 if (palette == PAL_BG0) {u8 itemp; for (itemp = 0; itemp < 4; itemp++) PA_LoadBgPal(0, itemp, (void*)(source));}\
00054 if (palette == PAL_BG1) {u8 itemp; for (itemp = 0; itemp < 4; itemp++) PA_LoadBgPal(1, itemp, (void*)(source));}}
00055
00056
00068 extern inline void PA_Load8bitBgPal(u8 screen, void *Pal){
00069 u32 dest = PAL_BG0 + (screen<<10);
00070 DMA_Copy((void*)Pal, (void*)dest, 256, DMA_16NOW);\
00071 }
00072
00073
00089 #define PA_LoadPal16(palette, n_palette, source) DMA_Copy((void*)source, (void*)(palette + (n_palette << 5)), 16, DMA_16NOW)
00090
00106 #define PA_LoadSprite16cPal(screen, n_palette, palette) PA_LoadPal16((PAL_SPRITE0+(0x400*screen)), (n_palette), palette)
00107
00108
00124 #define PA_RGB(r,g,b) ((1 << 15) + (r) + ((g)<<5) + ((b)<<10))
00125
00139 void PA_SetBrightness(u8 screen, s8 bright);
00140
00141
00142
00151 extern inline void PA_SetPalNeg(u32 palette) {
00152 u16* pal = (u16*)palette;
00153 u16 i;
00154
00155 for (i = 0; i < 256; i++) pal[i] = ~pal[i];
00156 }
00157
00158
00159
00160
00172 extern inline void PA_SetPal16Neg(u32 palette, u8 n_palette) {
00173 u16* pal = (u16*)palette;
00174 u16 i;
00175
00176 for (i = (n_palette << 4); i < ((n_palette + 1) << 4); i++) pal[i] = ~pal[i];
00177 }
00178
00179
00185 void PA_InitSpriteExtPal(void);
00186
00187
00188
00194 void PA_InitBgExtPal(void);
00195
00196
00197
00212 extern inline void PA_LoadSpritePal(u8 screen, u8 palette_number, void* palette)
00213 {
00214 PA_LoadSpriteExtPal(screen, palette_number, palette);
00215 }
00216
00217
00235 void PA_LoadBgPalN(u8 screen, u8 bg_number, u8 pal_number, void* palette);
00236
00237
00252 extern inline void PA_LoadBgPal(u8 screen, u16 bg_number, void* palette){
00253 PA_LoadBgPalN(screen, bg_number, 0, palette);
00254 }
00255
00273 void PA_LoadBgPalN(u8 screen, u8 bg_number, u8 pal_number, void* palette);
00274
00275
00276
00277
00292 #define PA_SetBgPalCol(screen, color_number, colorRGB) BG_PALETTE[color_number + (screen << 9)] = colorRGB
00293
00294
00295
00316 void PA_SetBgPalNCol(u8 screen, u8 bg_number, u8 pal_number, u8 color_number, u16 color);
00317
00318
00319
00320
00321
00333 extern inline void PA_SetBgColor(u8 screen, u16 color){
00334 BG_PALETTE[screen<<9] = color;
00335 }
00336
00337
00355 void PA_SetSpritePalCol(u8 screen, u8 pal_number, u8 color_number, u16 color);
00356
00357
00358
00359
00360 #define PA_AdjustCol(color, bright) color+= bright; if (color < 0) color = 0; if (color > 31) color = 31
00361
00362 void PA_CreatePalBright(u16 *pal, u16 *newpal, s8 bright);
00363
00364 void PA_CreatePalTransition(u16 *pal, u16 *newpal, s8 level, u8 destr, u8 destg, u8 destb);
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00382 extern inline void* PA_GetBgPal(u8 screen, u8 bg_number){
00383 if (screen == 0) return (void*)(VRAM_E + (bg_number << 12));
00384 else return (void*)(VRAM_H + (bg_number << 12));
00385 }
00386
00387
00402
00403
00404
00405
00406
00407 #endif
00408
00409