Hardware initialization for first-time GSP users (matching official software).
| 45 | |
| 46 | // Hardware initialization for first-time GSP users (matching official software). |
| 47 | static void gspHardwareInit(void) |
| 48 | { |
| 49 | // Some GPU-internal init registers |
| 50 | gspWriteGxReg(0x1000, 0); |
| 51 | gspWriteGxReg(0x1080, 0x12345678); |
| 52 | gspWriteGxReg(0x10C0, 0xFFFFFFF0); |
| 53 | gspWriteGxReg(0x10D0, 1); |
| 54 | gspWriteGxReg(0x1914, 1); // homebrew addition: make sure GPUREG_START_DRAW_FUNC0 starts off in configuration mode |
| 55 | |
| 56 | // Top screen LCD configuration, see https://www.3dbrew.org/wiki/GPU/External_Registers#LCD_Source_Framebuffer_Setup |
| 57 | |
| 58 | // Top screen sync registers: |
| 59 | gspWriteGxReg(0x0400, 0x1C2); |
| 60 | gspWriteGxReg(0x0404, 0xD1); |
| 61 | gspWriteGxReg(0x0408, 0x1C1); |
| 62 | gspWriteGxReg(0x040C, 0x1C1); |
| 63 | gspWriteGxReg(0x0410, 0); |
| 64 | gspWriteGxReg(0x0414, 0xCF); |
| 65 | gspWriteGxReg(0x0418, 0xD1); |
| 66 | gspWriteGxReg(0x041C, (0x1C5 << 16) | 0x1C1); |
| 67 | gspWriteGxReg(0x0420, 0x10000); |
| 68 | gspWriteGxReg(0x0424, 0x19D); |
| 69 | gspWriteGxReg(0x0428, 2); |
| 70 | gspWriteGxReg(0x042C, 0x192); |
| 71 | gspWriteGxReg(0x0430, 0x192); |
| 72 | gspWriteGxReg(0x0434, 0x192); |
| 73 | gspWriteGxReg(0x0438, 1); |
| 74 | gspWriteGxReg(0x043C, 2); |
| 75 | gspWriteGxReg(0x0440, (0x196 << 16) | 0x192); |
| 76 | gspWriteGxReg(0x0444, 0); |
| 77 | gspWriteGxReg(0x0448, 0); |
| 78 | |
| 79 | // Top screen fb geometry |
| 80 | gspWriteGxReg(0x045C, (400 << 16) | 240); // dimensions |
| 81 | gspWriteGxReg(0x0460, (0x1C1 << 16) | 0xD1); |
| 82 | gspWriteGxReg(0x0464, (0x192 << 16) | 2); |
| 83 | |
| 84 | // Top screen framebuffer format (initial) |
| 85 | gspWriteGxReg(0x0470, 0x80340); |
| 86 | |
| 87 | // Top screen unknown reg @ 0x9C |
| 88 | gspWriteGxReg(0x049C, 0); |
| 89 | |
| 90 | // Bottom screen LCD configuration |
| 91 | |
| 92 | // Bottom screen sync registers: |
| 93 | gspWriteGxReg(0x0500, 0x1C2); |
| 94 | gspWriteGxReg(0x0504, 0xD1); |
| 95 | gspWriteGxReg(0x0508, 0x1C1); |
| 96 | gspWriteGxReg(0x050C, 0x1C1); |
| 97 | gspWriteGxReg(0x0510, 0xCD); |
| 98 | gspWriteGxReg(0x0514, 0xCF); |
| 99 | gspWriteGxReg(0x0518, 0xD1); |
| 100 | gspWriteGxReg(0x051C, (0x1C5 << 16) | 0x1C1); |
| 101 | gspWriteGxReg(0x0520, 0x10000); |
| 102 | gspWriteGxReg(0x0524, 0x19D); |
| 103 | gspWriteGxReg(0x0528, 0x52); |
| 104 | gspWriteGxReg(0x052C, 0x192); |
no test coverage detected