/* Keep these headers */ #include #include #include #include /* Standard headers - it's recommended to leave them included */ #include #include #include #include #include "screen8bpp.h" #include "tools.h" #include "mem.h" static const uint8_t* screen_buf = (uint8_t*)0xD40000; static const uint8_t* offscreen_ptr = (uint8_t*)0xD52C00; // vram "back buffer" (free to use when LCD is in 8bpp) 76.8k uint8_t* brightness = (uint8_t*)0xF60024; uint8_t minBrightness = 255; uint8_t maxBrightness = 49; // Do NOT set lower, may damage the hardware. uint16_t* palette = (uint16_t*)0xE30200; uint8_t bpp=16; /* Your code here */ uint8_t* getOffscreen() { return offscreen_ptr; } uint8_t getBrightness() { return *brightness; } void setBrightness(uint8_t bright) { *brightness=bright; } void increaseBrightness(uint8_t targetBrightness) { uint8_t i=0; // increase brightness for (i=*brightness; i>=targetBrightness; i--) // yes this is the good direction { *brightness = i; nopwait(2000); } } void fillScreen(uint8_t color) { memset(screen_buf, color, SCR_HEIGHT*SCR_WIDTH*bpp/8); } void fillLines(uint8_t color, uint8_t y1, uint8_t y2) { uint8_t yi=min(y1,y2); uint8_t ys=max(y1,y2); memset(screen_buf+yi*SCR_WIDTH*bpp/8,color,(ys-yi+1)*SCR_WIDTH*bpp/8); } void initPalette() { palette[0] = rgb2color(0, 0, 0); // noir palette[1] = rgb2color(240, 0, 0); // rouge palette[2] = rgb2color(8, 255, 0); // vert palette[3] = rgb2color(255, 255, 0); // jaune palette[4] = rgb2color(0, 0, 255); // bleu palette[5] = rgb2color(240, 0, 255); // rose palette[6] = rgb2color(8, 255, 255); // cyan palette[7] = rgb2color(255, 255, 255); // blanc palette[8] = rgb2color(72, 64, 160); // gris palette[9] = rgb2color(255, 64, 160); // rouge clair palette[10] = rgb2color(72, 248, 160); // vert clair palette[11] = rgb2color(255, 255, 160); // jaune clair palette[12] = rgb2color(128, 128, 255); // bleu clair palette[13] = rgb2color(255, 64, 255); // rose clair palette[14] = rgb2color(200, 255, 255); // cyan clair palette[15] = rgb2color(255, 64, 40); // orange palette[16] = rgb2color(0, 0, 0); palette[17] = rgb2color(0x1C, 0x28, 0x13); palette[18] = rgb2color(0x2D, 0x3C, 0x21); palette[19] = rgb2color(0x45, 0x78, 0x20); palette[20] = rgb2color(0x8B, 0xB6, 0x6D); palette[21] = rgb2color(0xFF, 0xFF, 0xFF); palette[22] = rgb2color(72, 128, 224); // hidden tiles palette[23] = rgb2color(8, 0, 128); // status bar back } void startScreen8bpp() { // 320x240 8bpp fillScreen(0); *brightness=minBrightness; initPalette(); (*(uint8_t*)0xE30018) = 0x27; bpp=8; fillScreen(0); } void endScreen8bpp() { (*(uint8_t*)0xE30018) = 0x2D; bpp=16; } void gc_drawTile(uint8_t* data, uint16_t x, uint16_t y, uint16_t w, uint16_t h, uint8_t searchval, uint8_t replval) { uint8_t* ptr_out = screen_buf; uint8_t* ptr_in = data; uint8_t subst=(searchval!=replval)?1:0; uint8_t i; ptr_out += y*SCR_WIDTH + x; while (h>0) { memcpy(ptr_out, ptr_in, w); if(subst) { for(i=0;i0) { if(cx