/****************************************/ /* Virtual Screen */ /****************************************/ #include "gba.h" #include "back.h" #include "back.c" void init_screen(void); void wait(int); hword* bcolor = (hword*) BG_PALETTE; // Screen definition screen plane[ 1 ] = { { (hword*) VRAM_MAP(16), (hword*) VRAM_TILE(0), 0, 0 } // Page 0 }; int main() { int key, xoff = 0, yoff = 0; // Key status, x-offset, y-offset // Initialize screen init_screen(); // Key scan loop while (1) { key = gba_reg(KEY_STA); if ((key & KEY_ALL) == KEY_ALL) continue; key = key ^ KEY_ALL; if (key & KEY_UP) { if (yoff == 0) continue; yoff--; gba_reg(BG0_VOFFSET) = yoff; } else if (key & KEY_DOWN) { if (yoff == (256 - (20 * 8))) continue; yoff++; gba_reg(BG0_VOFFSET) = yoff; } else if (key & KEY_RIGHT) { if (xoff == (256 - (30 * 8))) continue; xoff++; gba_reg(BG0_HOFFSET) = xoff; } else if (key & KEY_LEFT) { if (xoff == 0) continue; xoff--; gba_reg(BG0_HOFFSET) = xoff; } wait(80); }; } void init_screen(void) { int i; // Initialize palette for (i = 0; i < 256; i++) bcolor[ i ] = back_pal[ i ]; // Setup tiles for background for (i = 0; i < 8 * 2 * 32; i++) plane[ 0 ].tile[ i ] = back_data[ 2 * i ] + (back_data[ 2 * i + 1] << 8); // Setup the map for background for (i = 0; i < 32 * 32; i++) plane[ 0 ].map[ i ] = back[ i ]; // Start LCD display gba_reg(BG0_CTL) = LCD_SIZE00 | LCD_COLOR256 | LCD_BGTILE(0) | LCD_BGMAP(16); gba_reg(LCD_CTL) = LCD_BG0 | LCD_MODE0; } void wait(int time) { int i, j; for (i = 0; i < time; i++) for (j = 0; j < time; j++) ; }