PA_16c.h

Aller à la documentation de ce fichier.
00001 #ifndef _PA_16C
00002 #define _PA_16C
00003 
00004 #ifdef __cplusplus
00005 extern "C" {
00006 #endif
00007 
00014 #include "PA9.h"
00015 
00016 #include "PA_Palette.h"
00017 
00018 
00019 // Pointers...
00020 extern u16 *PA_Draw16[2];
00021 extern u32 *PA_Draw1632[2];
00022 
00023 extern u32 Blank[130000>>2];
00024 
00025 typedef struct{
00026        s32 NLetters;
00027        struct{
00028               s16 X, X2, Y;
00029        }Letter[2048];
00030 } LetterPos16c;
00031 extern LetterPos16c PA_16cLetterPos;
00032 
00033 
00034 
00035 #define PA_LoadPal16c(palette, source)   DMA_Copy(source, (void*)palette, 16, DMA_16NOW);
00036 #define PA_16cPos(x, y) (((x>>3)*26*8) + y + 8)
00037 ALWAYSINLINE void PA_16c8X8(u8 screen, s16 x, s16 y, u32 *image);
00038 
00039        extern u32 *c16_tiles[10];
00040        extern u16 *c16_maps[10];
00041        extern u8 *pa16cdefaultsize[10];
00042        extern u8 c16policeheight[10];
00043        
00044 ALWAYSINLINE void PA_16c8X8Color(u8 screen, s16 x, s16 y, u32 *image, u8 color){  
00045    x += 8; y += 8;
00046    u16 temp = (x&7)<<2;
00047    u16 pos = PA_16cPos(x, y);
00048    PA_Draw1632[screen][pos] |= (image[0]<<temp)*color;
00049    PA_Draw1632[screen][pos+1] |= (image[1]<<temp)*color;
00050    PA_Draw1632[screen][pos+2] |= (image[2]<<temp)*color;
00051    PA_Draw1632[screen][pos+3] |= (image[3]<<temp)*color;
00052    PA_Draw1632[screen][pos+4] |= (image[4]<<temp)*color;   
00053    PA_Draw1632[screen][pos+5] |= (image[5]<<temp)*color;
00054    PA_Draw1632[screen][pos+6] |= (image[6]<<temp)*color;
00055    PA_Draw1632[screen][pos+7] |= (image[7]<<temp)*color;  
00056    pos += (26*8); // Next columns
00057    temp = 32-temp;
00058    PA_Draw1632[screen][pos] |= (image[0]>>temp)*color;
00059    PA_Draw1632[screen][pos+1] |= (image[1]>>temp)*color;
00060    PA_Draw1632[screen][pos+2] |= (image[2]>>temp)*color;
00061    PA_Draw1632[screen][pos+3] |= (image[3]>>temp)*color;
00062    PA_Draw1632[screen][pos+4] |= (image[4]>>temp)*color;   
00063    PA_Draw1632[screen][pos+5] |= (image[5]>>temp)*color;
00064    PA_Draw1632[screen][pos+6] |= (image[6]>>temp)*color;
00065    PA_Draw1632[screen][pos+7] |= (image[7]>>temp)*color;      
00066 } 
00067 
00068  
00069 
00070 ALWAYSINLINE void PA_Plot8Pixels(u8 screen, u16 pos, u16 temp, u32 color){
00071    PA_Draw1632[screen][pos] |= (color<<temp);
00072    PA_Draw1632[screen][pos+(26*8)] |= (color>>(32-temp));   
00073 }  
00074 
00075 ALWAYSINLINE void PA_16c16X16Letter(u8 screen, s16 x, s16 y, u8 letter, u8 size, u8 color)
00076 {  
00077        u16 firstpos = ((letter&31)<<1)+((letter >> 5)<<7);
00078        PA_16c8X8Color(screen, x, y, (c16_tiles[size]+(c16_maps[size][firstpos]<<3)), color);
00079        PA_16c8X8Color(screen, x, y+8, (c16_tiles[size]+(c16_maps[size][firstpos+64]<<3)), color);
00080        firstpos ++;
00081        PA_16c8X8Color(screen, x+8, y, (c16_tiles[size]+(c16_maps[size][firstpos]<<3)), color);
00082        PA_16c8X8Color(screen, x+8, y+8, (c16_tiles[size]+(c16_maps[size][firstpos+64]<<3)), color);      
00083 }  
00084 
00085 extern inline void PA_16c8X8Letter(u8 screen, s16 x, s16 y, u8 letter, u8 size, u8 color){  
00086        PA_16c8X8Color(screen, x, y, (c16_tiles[size]+(c16_maps[size][letter]<<3)), color);
00087 }  
00088 
00089 
00108 void PA_Init16cBgEx(u8 screen, u8 bg, u8 npalette);
00109 
00110 
00111 
00123 extern inline void PA_Init16cBg(u8 screen, u8 bg){
00124        PA_Init16cBgEx(screen, bg, 0);
00125 }
00126 
00127 
00128 
00129 
00130 
00139 extern inline void PA_16cErase(u8 screen){
00140        DMA_Copy(Blank, PA_Draw1632[screen], 26*8*34, DMA_32NOW)
00141 }
00142 
00143 
00144 
00150 extern inline void PA_Dual16cErase(void){
00151        PA_16cErase(0); PA_16cErase(1);
00152 }
00153 
00154 
00166 extern inline void PA_InitComplete16c(u8 bg, void *Palette){
00167        PA_LoadPal16c(PAL_BG0, Palette);
00168        PA_LoadPal16c(PAL_BG1, Palette);   
00169        PA_Init16cBg(0, bg); PA_Init16cBg(1, bg);
00170 }
00171 
00172 
00173 
00174 
00207 s16 PA_16cText(u8 screen, s16 basex, s16 basey, s16 maxx, s16 maxy, char* text, u8 color, u8 size, s32 limit);
00208 
00209 
00221 #define PA_16cCustomFont(c16_slot, c16_font){\
00222        c16_maps[c16_slot] = (u16*)(void*)c16_font##_Map;              \
00223        c16_tiles[c16_slot] = (u32*)(void*)c16_font##_Tiles;    \
00224        pa16cdefaultsize[c16_slot] = (u8*)c16_font##_Sizes;     \
00225        c16policeheight[c16_slot] = c16_font##_Height;\
00226 }
00227 
00228 
00246 ALWAYSINLINE void PA_16cPutPixel(u8 screen, s16 x, s16 y, u32 color){
00247    x += 8; y += 8;
00248    u16 temp = (x&7)<<2;
00249    u16 pos = PA_16cPos(x, y);
00250    PA_Draw1632[screen][pos] |= (color<<temp);
00251 }
00252 
00253 
00271 ALWAYSINLINE void PA_16c8X4(u8 screen, s16 x, s16 y, u32 *image){  
00272    x += 8; y += 8;
00273    u16 temp = (x&7)<<2;
00274    u16 pos = PA_16cPos(x, y);
00275    PA_Draw1632[screen][pos] |= (image[0]<<temp);
00276    PA_Draw1632[screen][pos+1] |= (image[1]<<temp);
00277    PA_Draw1632[screen][pos+2] |= (image[2]<<temp);
00278    PA_Draw1632[screen][pos+3] |= (image[3]<<temp);
00279    pos += (26*8); // Next columns
00280    temp = 32-temp;
00281    PA_Draw1632[screen][pos] |= (image[0]>>temp);
00282    PA_Draw1632[screen][pos+1] |= (image[1]>>temp);
00283    PA_Draw1632[screen][pos+2] |= (image[2]>>temp);
00284    PA_Draw1632[screen][pos+3] |= (image[3]>>temp);
00285 }  
00286 
00287 
00305 ALWAYSINLINE void PA_16c8X6(u8 screen, s16 x, s16 y, u32 *image){  
00306    
00307    x += 8; y += 8;
00308    u16 temp = (x&7)<<2;
00309    u16 pos = PA_16cPos(x, y);
00310    PA_Plot8Pixels(screen, pos, temp, image[0]);
00311    PA_Plot8Pixels(screen, pos+1, temp, image[1]);  
00312    PA_Plot8Pixels(screen, pos+2, temp, image[2]);   
00313    PA_Plot8Pixels(screen, pos+3, temp, image[3]); 
00314    PA_Plot8Pixels(screen, pos+4, temp, image[4]);
00315    PA_Plot8Pixels(screen, pos+5, temp, image[5]);  
00316 }  
00317 
00318 
00336 ALWAYSINLINE void PA_16c8X8(u8 screen, s16 x, s16 y, u32 *image){  
00337    x += 8; y += 8;
00338    u16 temp = (x&7)<<2;
00339    u16 pos = PA_16cPos(x, y);
00340    PA_Draw1632[screen][pos] |= (image[0]<<temp);
00341    PA_Draw1632[screen][pos+1] |= (image[1]<<temp);
00342    PA_Draw1632[screen][pos+2] |= (image[2]<<temp);
00343    PA_Draw1632[screen][pos+3] |= (image[3]<<temp);
00344    PA_Draw1632[screen][pos+4] |= (image[4]<<temp);   
00345    PA_Draw1632[screen][pos+5] |= (image[5]<<temp);
00346    PA_Draw1632[screen][pos+6] |= (image[6]<<temp);
00347    PA_Draw1632[screen][pos+7] |= (image[7]<<temp);  
00348    pos += (26*8); // Next columns
00349    temp = 32-temp;
00350    PA_Draw1632[screen][pos] |= (image[0]>>temp);
00351    PA_Draw1632[screen][pos+1] |= (image[1]>>temp);
00352    PA_Draw1632[screen][pos+2] |= (image[2]>>temp);
00353    PA_Draw1632[screen][pos+3] |= (image[3]>>temp);
00354    PA_Draw1632[screen][pos+4] |= (image[4]>>temp);   
00355    PA_Draw1632[screen][pos+5] |= (image[5]>>temp);
00356    PA_Draw1632[screen][pos+6] |= (image[6]>>temp);
00357    PA_Draw1632[screen][pos+7] |= (image[7]>>temp);      
00358 }  
00359 
00360 
00361 
00362 ALWAYSINLINE void PA_16c16X8(u8 screen, s16 x, s16 y, u32 *image){  
00363    x += 8; y += 8;
00364    u16 temp = (x&7)<<2;
00365    u16 pos = PA_16cPos(x, y);
00366    u8 i;
00367    for (i = 0; i < 2; i++){
00368           PA_Plot8Pixels(screen, pos, temp, image[0]);
00369           PA_Plot8Pixels(screen, pos+1, temp, image[1]);  
00370           PA_Plot8Pixels(screen, pos+2, temp, image[2]);   
00371           PA_Plot8Pixels(screen, pos+3, temp, image[3]); 
00372           PA_Plot8Pixels(screen, pos+4, temp, image[4]);
00373           PA_Plot8Pixels(screen, pos+5, temp, image[5]);  
00374           PA_Plot8Pixels(screen, pos+6, temp, image[6]);   
00375           PA_Plot8Pixels(screen, pos+7, temp, image[7]);       
00376           pos+=26*8;
00377           image+=8;     
00378        }
00379 } 
00380 
00381 
00382 
00383 ALWAYSINLINE void PA_16c16X12(u8 screen, s16 x, s16 y, u32 *image){  
00384    
00385    x += 8; y += 8;
00386    u16 temp = (x&7)<<2;
00387    u16 pos = PA_16cPos(x, y);
00388    u8 i;
00389    for (i = 0; i < 2; i++){
00390           PA_Plot8Pixels(screen, pos, temp, image[0]);
00391           PA_Plot8Pixels(screen, pos+1, temp, image[1]);  
00392           PA_Plot8Pixels(screen, pos+2, temp, image[2]);   
00393           PA_Plot8Pixels(screen, pos+3, temp, image[3]); 
00394           PA_Plot8Pixels(screen, pos+4, temp, image[4]);
00395           PA_Plot8Pixels(screen, pos+5, temp, image[5]);  
00396           PA_Plot8Pixels(screen, pos+6, temp, image[6]);   
00397           PA_Plot8Pixels(screen, pos+7, temp, image[7]);       
00398           PA_Plot8Pixels(screen, pos+8, temp, image[16]);
00399           PA_Plot8Pixels(screen, pos+9, temp, image[17]);  
00400           PA_Plot8Pixels(screen, pos+10, temp, image[18]);   
00401           PA_Plot8Pixels(screen, pos+11, temp, image[19]);        
00402           pos+=26*8;
00403           image+=8;     
00404        }
00405 } 
00406 
00407 ALWAYSINLINE void PA_16c16X16(u8 screen, s16 x, s16 y, u32 *image){  
00408    
00409    x += 8; y += 8;
00410 
00411    u16 temp = (x&7)<<2;
00412    u16 pos = PA_16cPos(x, y);
00413    u8 i;
00414    for (i = 0; i < 2; i++){
00415           PA_Plot8Pixels(screen, pos, temp, image[0]);
00416           PA_Plot8Pixels(screen, pos+1, temp, image[1]);  
00417           PA_Plot8Pixels(screen, pos+2, temp, image[2]);   
00418           PA_Plot8Pixels(screen, pos+3, temp, image[3]); 
00419           PA_Plot8Pixels(screen, pos+4, temp, image[4]);
00420           PA_Plot8Pixels(screen, pos+5, temp, image[5]);  
00421           PA_Plot8Pixels(screen, pos+6, temp, image[6]);   
00422           PA_Plot8Pixels(screen, pos+7, temp, image[7]);       
00423           PA_Plot8Pixels(screen, pos+8, temp, image[16]);
00424           PA_Plot8Pixels(screen, pos+9, temp, image[17]);  
00425           PA_Plot8Pixels(screen, pos+10, temp, image[18]);   
00426           PA_Plot8Pixels(screen, pos+11, temp, image[19]); 
00427           PA_Plot8Pixels(screen, pos+12, temp, image[20]);
00428           PA_Plot8Pixels(screen, pos+13, temp, image[21]);  
00429           PA_Plot8Pixels(screen, pos+14, temp, image[22]);   
00430           PA_Plot8Pixels(screen, pos+15, temp, image[23]);               
00431           pos+=26*8;
00432           image+=8;     
00433        }
00434 }  
00435 
00436 
00457 ALWAYSINLINE void PA_16c8Xi(u8 screen, s16 x, s16 y, u32 *image, u8 i)
00458 {  
00459        x += 8; y += 8;
00460        u16 temp = ((x)&7)<<2;
00461        u16 temp2 = 32-temp;
00462        u16 pos = PA_16cPos(x, y);
00463        u16 pos2 = pos + 208; // Next columns
00464        u8 j=0;
00465        while (j<i)
00466        {
00467               PA_Draw1632[screen][pos++] |= (image[j & 0x000F]<<temp);
00468               PA_Draw1632[screen][pos2++] |= (image[j & 0x000F]>>temp2);
00469               ++j;
00470        }
00471 }  
00472 
00473 
00474 
00475 
00476 
00477 extern inline void PA_16cLetter(u8 screen, s16 x, s16 y, char letter, u8 size, u8 color){
00478        if (c16policeheight[size]<=8) PA_16c8X8Letter(screen, x, y, letter, size, color);
00479        //(u32*)(c16_font[size]+(letter<<3))
00480        else PA_16c16X16Letter(screen, x, y, letter, size, color);
00481        //(u32*)(c16_font[size]+(letter<<5))
00482 }
00483 
00484 
00505 void PA_16cClearZone(u8 screen, s16 x1, s16 y1, s16 x2, s16 y2);
00506 
00507 
00508 
00523 extern inline u8 PA_16cGetPixel(u8 screen, s16 x, s16 y){
00524        x += 8; y += 8;
00525    u16 temp = (x&7)<<2;
00526    u16 pos = PA_16cPos(x, y);
00527    return (PA_Draw1632[screen][pos]&(15<<temp))>>temp;
00528 }
00529 
00530 
00531 
00532  // end of 16c
00534 
00535 
00536 
00537 
00538 #ifdef __cplusplus
00539 }
00540 #endif
00541 
00542 
00543 
00544 
00545 
00546 
00547 
00548 
00549 #endif
00550 
00551 
00552 
00553 

Généré le Tue Jan 30 23:10:49 2007 pour PAlib par  doxygen 1.3.9.1