Difference between revisions of "IO Registers"
Jump to navigation
Jump to search
Line 437: | Line 437: | ||
|} | |} | ||
− | IO registers starting at physical address 0x10200000 are not accessible from the ARM9 (which includes all LCD/GPU registers). | + | IO registers starting at physical address 0x10200000 are not accessible from the ARM9 (which includes all LCD/GPU registers). It seems IO registers below physical address 0x10100000 are not accessible from the ARM11 bus. |
ARM11 kernel virtual address mappings for these registers varies for different builds. For ARM11 user mode applications you have: | ARM11 kernel virtual address mappings for these registers varies for different builds. For ARM11 user mode applications you have: |
Revision as of 07:03, 3 March 2015
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 (single-channel). |
Yes | A9 | SPICARD Registers | 0x1000D800 | Process9 | |
Yes | ? | CONFIG Registers | 0x10010000 | Process9 | |
Yes | ? | PRNG Registers | 0x10011000 | Process9 | Used as entropy-source for seeding random number generators. |
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. For DSP regs, see the "DSi XpertTeak" section in no$gba help. |
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. Possibly "DSi New Shared WRAM" control @ offset0, see section in no$gba help. |
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, dlp 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 | See no$gba help for some clues maybe. |
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 |
? | A11 | CDMA | 0x10200000 | Boot11, Kernel11 | On old 3DS this is CoreLink™ DMA-330. On the New 3DS it is unknown what this is. |
Yes | A11 | LCD Registers | 0x10202000 | TwlBg, Kernel11, GSP Services | |
Yes | A11 | DSP Registers | 0x10203000 | DSP Services | |
? | A11 | CDMA | 0x10206000 | NewKernel11 | CDMA was moved here on New 3DS. CoreLink™ DMA-330. |
? | A11 | MVD Registers | 0x10207000 | MVD Services | New 3DS only? |
Yes | A11 | AXI | 0x1020F000 | TwlBg, GSP Services | CoreLink™ NIC-301 r1p0. |
Yes | A11 | MIRROR | 0x10300000-0x10400000 | Mirror of 0x10100000-0x10200000 (faster bus?), CDMA wants these addresses | |
Yes | A11 | GPU Registers | 0x10400000 | Boot11, Kernel11, GSP Services |
IO registers starting at physical address 0x10200000 are not accessible from the ARM9 (which includes all LCD/GPU registers). It seems IO registers below physical address 0x10100000 are not accessible from the ARM11 bus.
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.
Originally the console-unique 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.
Offset | Size | Description |
---|---|---|
0x0 | 0x8 | On development units (UNITINFO!=0) ARM9 uses the first 8-bytes from 0x10012000 for the TWL keydata. This doesn't seem to be used by NATIVE_FIRM on retail, besides New3DS key-generation in the ARM9-loader. |
0x8 | 0xF8 | ? |
0x100 | 0x8 | Before writing REG_SYSPROT9 bit1, the ARM9 copies the 8-byte TWL-keydata to here. |