GPU/External Registers
< GPU
Map
Init Values from nngxInitialize for Top Screen
- 0x1EF00400 = 0x1C2
- 0x1EF00404 = 0xD1
- 0x1EF00408 = 0x1C1
- 0x1EF0040C = 0x1C1
- 0x1EF00410 = 0
- 0x1EF00414 = 0xCF
- 0x1EF00418 = 0xD1
- 0x1EF0041C = 0x1C501C1
- 0x1EF00420 = 0x10000
- 0x1EF00424 = 0x19D
- 0x1EF00428 = 2
- 0x1EF0042C = 0x1C2
- 0x1EF00430 = 0x1C2
- 0x1EF00434 = 0x1C2
- 0x1EF00438 = 1
- 0x1EF0043C = 2
- 0x1EF00440 = 0x1960192
- 0x1EF00444 = 0
- 0x1EF00448 = 0
- 0x1EF0045C = 0x19000F0
- 0x1EF00460 = 0x1c100d1
- 0x1EF00464 = 0x1920002
- 0x1EF00470 = 0x80340
- 0x1EF0049C = 0
More Init Values from nngxInitialize for Top Screen
- 0x1EF00468 = 0x18300000, later changed by GSP module when updating state, framebuffer
- 0x1EF0046C = 0x18300000, later changed by GSP module when updating state, framebuffer
- 0x1EF00494 = 0x18300000
- 0x1EF00498 = 0x18300000
- 0x1EF00478 = 1, doesn't stay 1, read as 0
- 0x1EF00474 = 0x10501
This register controls how the LCD framebuffer is displayed.
0x1EF018E0
Register address | Description |
---|---|
0x1EF018E0 | Buffer Size>>3 |
0x1EF018E8 | Buffer physical address>>3 |
0x1EF018F0 | Writing value 1 here triggers GPU processing for the specified buffer |
These 3 registers are used by GX command 1. This is used for OpenGL commands.
0x1EF00010
Register address | Description |
---|---|
0x1EF000X0 | Buffer physical address>>3 |
0x1EF000X4 | Associated buffer physical address>>3 |
0x1EF000X8 | Buffer size |
0x1EF000XC | The low u16 for this register is overwritten by the GX command u16 parameter |
These registers are used by GX command 2. 0x1EF00010 is used for the GX command buf0 parameters, while 0x1EF00020 is used for the GX command buf1 parameters.
0x1EF00C00
Register address | Description |
---|---|
0x1EF00C00 | VRAM framebuffer physical address>>3 |
0x1EF00C04 | Output framebuffer physical address>>3 |
0x1EF00C08 | Output framebuffer dimensions, used with cmd3 |
0x1EF00C0C | VRAM framebuffer dimensions, used with cmd3 |
0x1EF00C10 | Unknown, used with cmd3 and cmd4 |
0x1EF00C14 | GSP module writes value 0 here prior to writing to 0x1EF00C18, for cmd3 |
0x1EF00C18 | Writing value 1 here triggers GPU processing for the specified buffers |
0x1EF00C20 | Unknown, used with cmd4 |
0x1EF00C24 | Unknown, used with cmd4 |
0x1EF00C28 | Unknown, used with cmd4 |
These registers are used by GX command 3 and 4. For cmd4, *0x1EF00C18 |= 1 is used instead of just writing value 1.
GPU Commands
The buffer for GX command 1 with the registers at 0x1EF018E0 is used for GPU commands including OpenGL commands, each 8-byte entry in the buffer is a command. Cmd+0 is the command parameter, and cmd+4 is the cmdID.
Commands
CommandID | Parameter | Description |
---|---|---|
0x000F0010 | Value is 0x12345678 | This command is always the last command in the buffer. |
0x000F0110 | Value 0x1 | This command is immediately before CmdID 0x000F0010, this is used elsewhere in the buffer as well. |
0x000F0111 | Value 0x1 | This command is immediately before CmdID 0x000F0110, however CmdID 0x000F0110 doesn't always follow this command. |
0x000F0042 | float y vector | This sets Y scaling for the current matrix. |
0x000F0044 | float x vector | This sets X scaling for the current matrix. |
0x000F02C0 | Some ID? | This is used immediately before CmdID 0x00FF02C1. |
0x00FF02C1 | float | The input parameter and the float data following this command seems to be used for vertices. |