This page describes the address range accessible from the ARM11, used to configure the basic GPU functionality. For information about the internal registers used for 3D rendering, see GPU/Internal Registers.
Map #
Address mappings for the external registers. GSPGPU:WriteHWRegs takes these addresses relative to 0x1EB00000.
User VA | PA | Length | Name | Comments |
---|---|---|---|---|
0x1EF00000 | 0x10400000 | 4 | Hardware ID | Bit2: new model |
0x1EF00004 | 0x10400004 | 4 | ? | |
0x1EF00010 | 0x10400010 | 16 | Memory Fill1 “PSC0” | GX command 2 |
0x1EF00020 | 0x10400020 | 16 | Memory Fill2 “PSC1” | GX command 2 |
0x1EF00030 | 0x10400030 | 4 | VRAM bank control | Bits 8-11 = bank[i] disabled; other bits are unused. |
0x1EF00034 | 0x10400034 | 4 | GPU Busy | Bit26 = PSC0, bit27 = PSC1, Bit30 = PPF, Bit31 = P3D |
0x1EF00050 | 0x10400050 | 4 | ? | Writes 0x22221200 on GPU init. |
0x1EF00054 | 0x10400054 | 4 | ? | Writes 0xFF2 on GPU init. |
0x1EF000C0 | 0x104000C0 | 4 | Backlight control | Writes 0x0 to allow backlights to turn off, 0x20000000 to force them always on. |
0x1EF00400 | 0x10400400 | 0x100 | Framebuffer Setup “PDC0” (top screen) | |
0x1EF00500 | 0x10400500 | 0x100 | Framebuffer Setup “PDC1” (bottom) | |
0x1EF00C00 | 0x10400C00 | ? | Transfer Engine “DMA” | |
0x1EF01000/0x10401000 - 0x1EF01C00/0x10401C00 maps to GPU internal registers. These registers are usually not read/written directly here, but are written using the command list interface below (corresponding to the GPUREG_CMDBUF_* internal registers) | ||||
0x1EF01000 | 0x10401000 | 0x4 | ? | Writes 0 on GPU init and before the Command List is used |
0x1EF01080 | 0x10401080 | 0x4 | ? | Writes 0x12345678 on GPU init. |
0x1EF010C0 | 0x104010C0 | 0x4 | ? | Writes 0xFFFFFFF0 on GPU init. |
0x1EF010D0 | 0x104010D0 | 0x4 | ? | Writes 1 on GPU init. |
0x1EF014?? | 0x104014?? | 0x14 | “PPF” ? | |
0x1EF018E0 | 0x104018E0 | 0x14 | Command List “P3D” |
Memory Fill #
User VA | Description |
---|---|
0x1EF000X0 | Buffer start physaddr >> 3 |
0x1EF000X4 | Buffer end physaddr >> 3 |
0x1EF000X8 | Fill value |
0x1EF000XC | Control. bit0: start/busy, bit1: finished, bit8-9: fill-width (0=16bit, 1=3=24bit, 2=32bit) |
Memory fills are used to initialize buffers in memory with a given value, similar to memset. A memory fill is triggered by setting bit0 in the control register. Doing so aborts any running memory fills on that filling unit. Upon completion, the hardware unsets bit0 and sets bit1 and fires interrupt PSC0.