MCPcopy Create free account
hub / github.com/devkitPro/libctru / gspHardwareInit

Function gspHardwareInit

libctru/source/services/gspgpu.c:47–154  ·  view source on GitHub ↗

Hardware initialization for first-time GSP users (matching official software).

Source from the content-addressed store, hash-verified

45
46// Hardware initialization for first-time GSP users (matching official software).
47static 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);

Callers 1

gspInitFunction · 0.85

Calls 2

gspWriteGxRegFunction · 0.85
gspWriteGxRegMaskedFunction · 0.85

Tested by

no test coverage detected