diff --git a/arm11/source/hw/gpulcd.c b/arm11/source/hw/gpulcd.c index 431733b..c04f847 100644 --- a/arm11/source/hw/gpulcd.c +++ b/arm11/source/hw/gpulcd.c @@ -19,6 +19,9 @@ #include #include +#include "arm/timer.h" + +#include "hw/mcu.h" #include "hw/gpulcd.h" /* LCD Configuration Registers */ @@ -48,7 +51,7 @@ void LCD_Deinitialize(void) { *REG_LCD(0x244) = 0; *REG_LCD(0xA44) = 0; - *REG_LCD(0x00C) = 0; + *REG_LCD(0x00C) = 0x10001; *REG_LCD(0x014) = 0; } @@ -147,76 +150,82 @@ void GPU_SetFramebufferMode(u32 screen, u8 mode) void GPU_Init(void) { + if (*REG_GPU_CNT == 0x1007F) { + MCU_PushToLCD(false); + + LCD_Deinitialize(); + *REG_GPU_CNT = 0x10001; + TIMER_WaitTicks(CLK_MS_TO_TICKS(40)); + } + LCD_Initialize(0x20); - if (*REG_GPU_CNT != 0x1007F) { - *REG_GPU_CNT = 0x1007F; - *GPU_PDC(0, 0x00) = 0x000001C2; - *GPU_PDC(0, 0x04) = 0x000000D1; - *GPU_PDC(0, 0x08) = 0x000001C1; - *GPU_PDC(0, 0x0C) = 0x000001C1; - *GPU_PDC(0, 0x10) = 0x00000000; - *GPU_PDC(0, 0x14) = 0x000000CF; - *GPU_PDC(0, 0x18) = 0x000000D1; - *GPU_PDC(0, 0x1C) = 0x01C501C1; - *GPU_PDC(0, 0x20) = 0x00010000; - *GPU_PDC(0, 0x24) = 0x0000019D; - *GPU_PDC(0, 0x28) = 0x00000002; - *GPU_PDC(0, 0x2C) = 0x00000192; - *GPU_PDC(0, 0x30) = 0x00000192; - *GPU_PDC(0, 0x34) = 0x00000192; - *GPU_PDC(0, 0x38) = 0x00000001; - *GPU_PDC(0, 0x3C) = 0x00000002; - *GPU_PDC(0, 0x40) = 0x01960192; - *GPU_PDC(0, 0x44) = 0x00000000; - *GPU_PDC(0, 0x48) = 0x00000000; - *GPU_PDC(0, 0x5C) = 0x00F00190; - *GPU_PDC(0, 0x60) = 0x01C100D1; - *GPU_PDC(0, 0x64) = 0x01920002; - *GPU_PDC(0, 0x68) = VRAM_START; - *GPU_PDC(0, 0x6C) = VRAM_START; - *GPU_PDC(0, 0x70) = 0x00080340; - *GPU_PDC(0, 0x74) = 0x00010501; - *GPU_PDC(0, 0x78) = 0x00000000; - *GPU_PDC(0, 0x90) = 0x000003C0; - *GPU_PDC(0, 0x94) = VRAM_START; - *GPU_PDC(0, 0x98) = VRAM_START; - *GPU_PDC(0, 0x9C) = 0x00000000; + *REG_GPU_CNT = 0x1007F; + *GPU_PDC(0, 0x00) = 0x000001C2; + *GPU_PDC(0, 0x04) = 0x000000D1; + *GPU_PDC(0, 0x08) = 0x000001C1; + *GPU_PDC(0, 0x0C) = 0x000001C1; + *GPU_PDC(0, 0x10) = 0x00000000; + *GPU_PDC(0, 0x14) = 0x000000CF; + *GPU_PDC(0, 0x18) = 0x000000D1; + *GPU_PDC(0, 0x1C) = 0x01C501C1; + *GPU_PDC(0, 0x20) = 0x00010000; + *GPU_PDC(0, 0x24) = 0x0000019D; + *GPU_PDC(0, 0x28) = 0x00000002; + *GPU_PDC(0, 0x2C) = 0x00000192; + *GPU_PDC(0, 0x30) = 0x00000192; + *GPU_PDC(0, 0x34) = 0x00000192; + *GPU_PDC(0, 0x38) = 0x00000001; + *GPU_PDC(0, 0x3C) = 0x00000002; + *GPU_PDC(0, 0x40) = 0x01960192; + *GPU_PDC(0, 0x44) = 0x00000000; + *GPU_PDC(0, 0x48) = 0x00000000; + *GPU_PDC(0, 0x5C) = 0x00F00190; + *GPU_PDC(0, 0x60) = 0x01C100D1; + *GPU_PDC(0, 0x64) = 0x01920002; + *GPU_PDC(0, 0x68) = VRAM_START; + *GPU_PDC(0, 0x6C) = VRAM_START; + *GPU_PDC(0, 0x70) = 0x00080340; + *GPU_PDC(0, 0x74) = 0x00010501; + *GPU_PDC(0, 0x78) = 0x00000000; + *GPU_PDC(0, 0x90) = 0x000003C0; + *GPU_PDC(0, 0x94) = VRAM_START; + *GPU_PDC(0, 0x98) = VRAM_START; + *GPU_PDC(0, 0x9C) = 0x00000000; - for (u32 i = 0; i < 256; i++) - *GPU_PDC(0, 0x84) = 0x10101 * i; + for (u32 i = 0; i < 256; i++) + *GPU_PDC(0, 0x84) = 0x10101 * i; - *GPU_PDC(1, 0x00) = 0x000001C2; - *GPU_PDC(1, 0x04) = 0x000000D1; - *GPU_PDC(1, 0x08) = 0x000001C1; - *GPU_PDC(1, 0x0C) = 0x000001C1; - *GPU_PDC(1, 0x10) = 0x000000CD; - *GPU_PDC(1, 0x14) = 0x000000CF; - *GPU_PDC(1, 0x18) = 0x000000D1; - *GPU_PDC(1, 0x1C) = 0x01C501C1; - *GPU_PDC(1, 0x20) = 0x00010000; - *GPU_PDC(1, 0x24) = 0x0000019D; - *GPU_PDC(1, 0x28) = 0x00000052; - *GPU_PDC(1, 0x2C) = 0x00000192; - *GPU_PDC(1, 0x30) = 0x00000192; - *GPU_PDC(1, 0x34) = 0x0000004F; - *GPU_PDC(1, 0x38) = 0x00000050; - *GPU_PDC(1, 0x3C) = 0x00000052; - *GPU_PDC(1, 0x40) = 0x01980194; - *GPU_PDC(1, 0x44) = 0x00000000; - *GPU_PDC(1, 0x48) = 0x00000011; - *GPU_PDC(1, 0x5C) = 0x00F00140; - *GPU_PDC(1, 0x60) = 0x01C100d1; - *GPU_PDC(1, 0x64) = 0x01920052; - *GPU_PDC(1, 0x68) = VRAM_START; - *GPU_PDC(1, 0x6C) = VRAM_START; - *GPU_PDC(1, 0x70) = 0x00080300; - *GPU_PDC(1, 0x74) = 0x00010501; - *GPU_PDC(1, 0x78) = 0x00000000; - *GPU_PDC(1, 0x90) = 0x000003C0; - *GPU_PDC(1, 0x9C) = 0x00000000; + *GPU_PDC(1, 0x00) = 0x000001C2; + *GPU_PDC(1, 0x04) = 0x000000D1; + *GPU_PDC(1, 0x08) = 0x000001C1; + *GPU_PDC(1, 0x0C) = 0x000001C1; + *GPU_PDC(1, 0x10) = 0x000000CD; + *GPU_PDC(1, 0x14) = 0x000000CF; + *GPU_PDC(1, 0x18) = 0x000000D1; + *GPU_PDC(1, 0x1C) = 0x01C501C1; + *GPU_PDC(1, 0x20) = 0x00010000; + *GPU_PDC(1, 0x24) = 0x0000019D; + *GPU_PDC(1, 0x28) = 0x00000052; + *GPU_PDC(1, 0x2C) = 0x00000192; + *GPU_PDC(1, 0x30) = 0x00000192; + *GPU_PDC(1, 0x34) = 0x0000004F; + *GPU_PDC(1, 0x38) = 0x00000050; + *GPU_PDC(1, 0x3C) = 0x00000052; + *GPU_PDC(1, 0x40) = 0x01980194; + *GPU_PDC(1, 0x44) = 0x00000000; + *GPU_PDC(1, 0x48) = 0x00000011; + *GPU_PDC(1, 0x5C) = 0x00F00140; + *GPU_PDC(1, 0x60) = 0x01C100d1; + *GPU_PDC(1, 0x64) = 0x01920052; + *GPU_PDC(1, 0x68) = VRAM_START; + *GPU_PDC(1, 0x6C) = VRAM_START; + *GPU_PDC(1, 0x70) = 0x00080300; + *GPU_PDC(1, 0x74) = 0x00010501; + *GPU_PDC(1, 0x78) = 0x00000000; + *GPU_PDC(1, 0x90) = 0x000003C0; + *GPU_PDC(1, 0x9C) = 0x00000000; - for (u32 i = 0; i < 256; i++) - *GPU_PDC(1, 0x84) = 0x10101 * i; - } + for (u32 i = 0; i < 256; i++) + *GPU_PDC(1, 0x84) = 0x10101 * i; }