IO Registers
Overview
Old3DS | A9/A11 | Category | Physaddr | Used by | Comments |
---|---|---|---|---|---|
Yes | A9 | CONFIG Registers | 0x10000000 | Boot9, Process9 | |
Yes | A9 | IRQ Registers | 0x10001000 | Boot9, Process9, Kernel9 | ARM9 Interrupt Masking |
Yes | A9 | NDMA Registers | 0x10002000 | Boot9, Process9 | DMA Engine |
Yes | A9 | TIMER Registers | 0x10003000 | Boot9, Process9 | |
Yes | A9 | CTRCARD Registers | 0x10004000 / 0x10005000 | Process9 | |
Yes | A9 | EMMC Registers | 0x10006000 / 0x10007000 | Boot9, Process9 | 0x10007000 is apparently not used on retail |
Yes | A9 | PXI Registers | 0x10008000 | Boot9, Process9 | |
Yes | A9 | AES Registers | 0x10009000 | Boot9, Process9 | |
Yes | A9 | SHA Registers | 0x1000A000 | Boot9, Process9 | |
Yes | A9 | RSA Registers | 0x1000B000 | Boot9, Process9 | |
Yes | A9 | XDMA Registers | 0x1000C000 | Boot9, Kernel9 | CoreLinkā¢ DMA-330. Info |
Yes | A9 | SPICARD Registers | 0x1000D800 | Process9 | |
Yes | ? | CONFIG Registers | 0x10010000 | Process9 | |
Yes | ? | CONFIG Registers | 0x10011000 | Process9 | |
Yes | ? | ? | 0x10012000 | Kernel9, NewKernel9Loader | Top secret. |
Yes | ? | ? | 0x10018000 | TwlProcess9 | Used to setup the ARM7 core for AGB/TWL |
Yes | ? | 0x10100000 | |||
Yes | A11/A9 | HASH Registers | 0x10101000 | Filesystem services | |
Yes | A11/A9 | ? | 0x10102000 | Never used? | |
Yes | A11/A9 | CSND Registers / DSP | 0x10103000 | TwlBg, Codec Services, CSND Services, DSP Services | Sound Hardware |
Yes | A11/A9 | ? | 0x10110000 | ||
Yes | A11/A9 | ? | 0x10111000 | TwlBg | |
Yes | A11/A9 | ? | 0x10120000 | ||
Yes | A11/A9 | ? | 0x10121000 | Mirror of 0x10120000? | |
Yes | A11/A9 | ? | 0x10122000 | NWM Services | WIFIĀ ? |
Yes | A11/A9 | ? | 0x10123000 | NWM Services | WIFIĀ ? |
No | A11/A9 | MVD Registers | 0x10130000 | MVD Services | |
No | A11/A9 | MVD Registers | 0x10131000 | MVD Services | |
No | A11/A9 | MVD Registers | 0x10132000 | MVD Services | |
Yes | A11/A9 | 0x10140000 | Process9, Boot11, Kernel11, TwlBg, DSP Services, NWM Services, SPI Services | Power management | |
Yes | A11/A9 | PDN Registers / CODEC Registers | 0x10141000 | Process9, Boot11, Kernel11, TwlBg, Codec Services, NWM Services, SPI Services, PDN Services | Power management |
Yes | A11/A9 | SPI Registers | 0x10142000 | TwlBg, SPI Services | |
Yes | A11/A9 | SPI Registers | 0x10143000 | TwlBg | Only used under TWL_FIRM? |
Yes | A11/A9 | I2C Registers | 0x10144000 | Boot11, Kernel11, TwlBg, I2C Services | |
Yes | A11/A9 | CODEC Registers | 0x10145000 | TwlBg, Codec Services | |
Yes | A11/A9 | HID Registers | 0x10146000 | Boot11, Kernel11, TwlBg, HID Services | See PAD. |
Yes | A11/A9 | GPIO Registers | 0x10147000 | Boot11, TwlBg, GPIO Services | |
Yes | A11/A9 | I2C Registers | 0x10148000 | TwlBg, I2C Services | |
Yes | A11/A9 | SPI Registers | 0x10160000 | Boot9, TwlBg, SPI Services | |
Yes | A11/A9 | I2C Registers | 0x10161000 | Boot11, TwlBg, I2C Services | |
Yes | A11/A9 | MIC Registers | 0x10162000 | MIC Services | |
Yes | A11/A9 | PXI Registers | 0x10163000 | Boot11, Kernel11, TwlBg, PXI Services | |
Yes | A11/A9 | NTRCARD Registers | 0x10164000 | Boot9, Process9 | |
Yes | A11/A9 | MP Registers | 0x10165000 | MP Services | |
Yes | A11/A9 | MP Registers | 0x10170000 | MP Services | NTR WIFI Registers, see GBATek. |
Yes | A11/A9 | MP Registers | 0x10171000 | MP Services | NTR WIFI Registers (mirror) |
Yes | A11/A9 | 0x10172000 | NTR WIFI Unused? | ||
Yes | A11/A9 | 0x10173000 | NTR WIFI Unused? | ||
Yes | A11/A9 | MP Registers | 0x10174000 | MP Services | NTR WIFI RAM |
Yes | A11/A9 | MP Registers | 0x10175000 | NTR WIFI RAM | |
Yes | A11/A9 | MP Registers | 0x10176000 | NTR WIFI Registers (mirror) | |
Yes | A11/A9 | MP Registers | 0x10177000 | NTR WIFI Registers (mirror) | |
Yes | A11/A9 | MP Registers | 0x10178000 - 0x10180000 | MP Services | Wifi WS1 Region |
Yes | A11 | CDMA | 0x10200000 | Boot11, Kernel11 | CoreLinkā¢ DMA-330. Info |
Yes | A11 | ? | 0x10202000 | TwlBg, Kernel11, GSP Services | |
Yes | A11 | DSP | 0x10203000 | ||
? | A11 | MVD Registers | 0x10207000 | MVD Services | New3DS only? |
Yes | A11 | GPU? | 0x1020F000 | TwlBg, GSP Services | |
Yes | A11 | HASH Registers | 0x10301000 | Filesystem services | |
Yes | A11 | ? | 0x10322000 | NWM Services | |
Yes | A11 | ? | 0x10323000 | NWM Services | |
? | A11 | MVD Registers | 0x10330000 | MVD Services | New3DS only? |
? | A11 | MVD Registers | 0x10331000 | MVD Services | New3DS only? |
? | A11 | MVD Registers | 0x10332000 | MVD Services | New3DS only? |
Yes | A11 | LCD Registers | 0x10400000 | Boot11, Kernel11, GSP Services | |
Yes | A11 | LCD Registers | 0x10420000 | GSP Services |
IO registers starting at physical address 0x10200000 are not accessible from the ARM9(which includes all LCD/GPU registers).
ARM11 kernel virtual address mappings for these registers varies for different builds.
0x10012000
Keys seem to be stored here? Access to this region is disabled once the ARM9 writes 0x2 to REG_SYSPROT9. Before writing that bit, the ARM9 copies the low u32 for the TWL keydata to +0x100(and high u32 keydata to +0x104 with New3DS). On devunits(UNITINFO!=0) ARM9 uses the first 8-bytes from 0x10012000 for the TWL keydata.
Originally the above TWL keyinit + region disable was done by Kernel9. However, with the New_3DS FIRM ARM9 binary this is now done in the FIRM ARM9 binary loader, which also uses the 0x10012000 region for key generation.