IO Registers

Revision as of 15:07, 3 November 2014 by Plutooo (talk | contribs)

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 Camera Registers 0x10102000 Camera Services y2r
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 Camera Registers 0x10120000 Camera Services
Yes A11/A9 Camera Registers 0x10121000 Camera Services 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 NTR WIFI WS1 Region
Yes A11 CDMA 0x10200000 Boot11, Kernel11 CoreLinkā„¢ DMA-330. Info
Yes A11 ? 0x10202000 TwlBg, Kernel11, GSP Services
Yes A11 DSP 0x10203000 DSP Services
? A11 MVD Registers 0x10207000 MVD Services New3DS only?
Yes A11 GPU? 0x1020F000 TwlBg, GSP Services
Yes A11 MIRROR 0x10300000-0x10400000 Mirror of 0x10100000-0x10200000 (faster bus?), CDMA wants these addr's
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. For ARM11 user mode applications you have:

physaddr = virtaddr - 0x1EC00000 + 0x10100000

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.