Advertisement
Guest User

routines.h

a guest
Mar 25th, 2013
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.27 KB | None | 0 0
  1. // sprite drawing routine
  2. void CopySpriteNbit(const unsigned char* data, int x, int y, int width, int height, color_t* palette, unsigned int bitwidth) {
  3.    color_t* VRAM = (color_t*)0xA8000000;
  4.    VRAM += (LCD_WIDTH_PX*y + x);
  5.    int offset = 0;
  6.    unsigned char buf;
  7.    for(int j=y; j<y+height; j++) {
  8.       int availbits = 0;
  9.       for(int i=x; i<x+width;  i++) {
  10.          if (!availbits) {
  11.             buf = data[offset++];
  12.             availbits = 8;
  13.          }
  14.          color_t this = ((color_t)buf>>(8-bitwidth));
  15.          *VRAM = palette[(color_t)this];
  16.          VRAM++;
  17.          buf<<=bitwidth;
  18.          availbits-=bitwidth;
  19.       }
  20.       VRAM += (LCD_WIDTH_PX-width);
  21.    }
  22. }
  23.  
  24. // alpha sprite
  25. void CopySpriteNbitMasked(const unsigned char* data, int x, int y, int width, int height, const color_t* palette, color_t maskColor, unsigned int bitwidth) {
  26.    color_t* VRAM = (color_t*)0xA8000000;
  27.    VRAM += (LCD_WIDTH_PX*y + x);
  28.    int offset = 0;
  29.    unsigned char buf;
  30.    for(int j=y; j<y+height; j++)  
  31.    {
  32.       int availbits = 0;
  33.       for(int i=x; i<x+width;  i++)  
  34.       {
  35.          if (!availbits)  
  36.          {
  37.             buf = data[offset++];
  38.             availbits = 8;
  39.          }
  40.          color_t this = ((color_t)buf>>(8-bitwidth));
  41.          color_t color = palette[this];
  42.          if(color != maskColor)
  43.          {
  44.             *VRAM = color;
  45.          }
  46.          VRAM++;
  47.          buf<<=bitwidth;
  48.          availbits-=bitwidth;
  49.       }
  50.       VRAM += (LCD_WIDTH_PX-width);
  51.    }
  52. }
  53.  
  54. // getkey
  55. int PRGM_GetKey(void) {
  56.   unsigned char buffer[12];
  57.   PRGM_GetKey_OS( buffer );
  58.   return ( buffer[1] & 0x0F ) * 10 + ( ( buffer[2] & 0xF0 ) >> 4 );
  59. }
  60.  
  61. // floor
  62. float floor2(int x) {
  63.    return ((int)x) - (x < 0);
  64. }
  65.  
  66. //fills a rectangular area of (width,height) with upper-left
  67. //corner at (x,y) with color color
  68. void fillArea(int x, int y, int width, int height, color_t color) {
  69.    //only use lower two bytes of color
  70.    char* VRAM = (char*)0xA8000000;
  71.    VRAM += 2*(LCD_WIDTH_PX*y + x);
  72.    for(int j=y; j<y+height; j++) {
  73.       for(int i=x; i<x+width;  i++) {
  74.          *(VRAM++) = (color&0x0000FF00)>>8;
  75.          *(VRAM++) = (color&0x000000FF);
  76.       }
  77.       VRAM += 2*(LCD_WIDTH_PX-width);
  78.    }
  79. }
  80.  
  81. // make 16-bit RGB color
  82.  
  83.  
  84. int makeColor(int r, int g, int b) {
  85.    return ((r / 8) << 11) | ((g / 4) << 5) | (b / 8);
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement