Line 11:
Line 11:
| style="background: green" | Yes
| style="background: green" | Yes
| A9
| A9
β
| [[CONFIG Registers]]
+
| [[CONFIG9 Registers]]
| 0x10000000
| 0x10000000
| Boot9, Process9
| Boot9, Process9
Line 28:
Line 28:
| 0x10002000
| 0x10002000
| Boot9, Process9
| Boot9, Process9
β
| DMA Engine
+
| AHB DMA Engine
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
Line 48:
Line 48:
| [[EMMC Registers]]
| [[EMMC Registers]]
| 0x10006000 / 0x10007000
| 0x10006000 / 0x10007000
β
| Boot9, Process9
+
| Boot9, Process9, NewKernel9Loader
β
| 0x10007000 is normally not enabled on retail, all-zeros when read.
+
| SD(IO) controller 1 and 3. 3 is normally mapped to ARM11.
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
Line 62:
Line 62:
| [[AES Registers]]
| [[AES Registers]]
| 0x10009000
| 0x10009000
β
| Boot9, Process9
+
| Boot9, Process9, NewKernel9Loader
|
|
|-
|-
Line 69:
Line 69:
| [[SHA Registers]]
| [[SHA Registers]]
| 0x1000A000
| 0x1000A000
β
| Boot9, Process9
+
| Boot9, Process9, NewKernel9Loader
|
|
|-
|-
Line 81:
Line 81:
| style="background: green" | Yes
| style="background: green" | Yes
| A9
| A9
β
| [[XDMA Registers]]
+
| [[Corelink DMA Engines|XDMA Registers]]
| 0x1000C000
| 0x1000C000
| Boot9, Kernel9
| Boot9, Kernel9
β
| [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0424d/index.html CoreLinkβ’ DMA-330] (single-channel).
+
| [http://infocenter.arm.com/help/topic/com.arm.doc.subset.primecell.system/index.html CoreLinkβ’ DMA-330 r0p0] (AXI busmaster, two channels, uses 32-bit bus width instead of 64).
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
Line 94:
Line 94:
|-style="border-top: double"
|-style="border-top: double"
| style="background: green" | Yes
| style="background: green" | Yes
β
|?
+
| A9
| [[CONFIG Registers]]
| [[CONFIG Registers]]
| 0x10010000
| 0x10010000
Line 101:
Line 101:
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
β
|?
+
| A9
| PRNG Registers
| PRNG Registers
| 0x10011000
| 0x10011000
β
| Process9
+
| Boot9, Process9
| Used as entropy-source for seeding random number generators.
| Used as entropy-source for seeding random number generators.
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
β
| ?
+
| A9
β
| ?
+
| [[OTP Registers]]
| 0x10012000
| 0x10012000
β
| Kernel9, NewKernel9Loader
+
| Boot9, Kernel9, NewKernel9Loader
| Top secret.
| Top secret.
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
β
|?
+
| A9
β
|?
+
| [[ARM7|ARM7 Registers]]
| 0x10018000
| 0x10018000
| TwlProcess9
| TwlProcess9
Line 122:
Line 122:
|-style="border-top: double"
|-style="border-top: double"
| style="background: green" | Yes
| style="background: green" | Yes
β
|?
+
| A11/A9
β
|?
+
| TMIO SD(IO) controller 3
| 0x10100000
| 0x10100000
β
|?
+
|
β
|?
+
| NWM references this controller but doesn't have access to it.
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
Line 133:
Line 133:
| 0x10101000
| 0x10101000
| [[Filesystem services]]
| [[Filesystem services]]
β
|
+
| These registers function the same as the [[SHA Registers]], with the exception of the FIFO being located at 0x10301000.
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
β
| [[Camera Registers]]
+
| [[Y2R Registers]]
| 0x10102000
| 0x10102000
| [[Camera Services]]
| [[Camera Services]]
Line 144:
Line 144:
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
β
| [[CSND Registers]] / DSP
+
| [[CSND Registers]]
| 0x10103000
| 0x10103000
| TwlBg, [[Codec Services]], [[CSND Services]], [[DSP Services]]
| TwlBg, [[Codec Services]], [[CSND Services]], [[DSP Services]]
β
| Sound hardware. For DSP regs, see the "DSi XpertTeak" section in [http://problemkaputt.de/gba.htm no$gba] help.
+
| Sound hardware.
|-style="border-top: double"
|-style="border-top: double"
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
β
|?
+
| [[MTX_Registers|LgyFb bottom screen]]
| 0x10110000
| 0x10110000
β
|?
+
| TwlBg
β
|?
+
| IO registers used to access legacy output framebuffer, as well as configure the upscaling filter.
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
β
|?
+
| [[MTX_Registers|LgyFb top screen]]
| 0x10111000
| 0x10111000
| TwlBg
| TwlBg
β
|
+
| IO registers used to access legacy output framebuffer, as well as configure the upscaling filter.
|-style="border-top: double"
|-style="border-top: double"
| style="background: green" | Yes
| style="background: green" | Yes
Line 179:
Line 179:
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
β
|?
+
| [[WIFI Registers]]
| 0x10122000
| 0x10122000
| [[NWM Services]]
| [[NWM Services]]
β
| WIFI?
+
| WIFI SDIO bus registers
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
β
|?
+
| ?
| 0x10123000
| 0x10123000
| [[NWM Services]]
| [[NWM Services]]
Line 214:
Line 214:
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
β
|?
+
| [[CONFIG11 Registers]]
| 0x10140000
| 0x10140000
| Process9, Boot11, Kernel11, TwlBg, [[DSP Services]], [[NWM Services]], [[SPI Services]]
| Process9, Boot11, Kernel11, TwlBg, [[DSP Services]], [[NWM Services]], [[SPI Services]]
β
| Power management. Possibly "DSi New Shared WRAM" control @ offset0, see section in [http://problemkaputt.de/gba.htm no$gba] help.
+
| System configuration.
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
β
| [[PDN Registers]] / [[CODEC Registers]]
+
| [[PDN Registers]]
| 0x10141000
| 0x10141000
| Process9, Boot11, Kernel11, TwlBg, [[Codec Services]], [[NWM Services]], [[SPI Services]], [[PDN Services]]
| Process9, Boot11, Kernel11, TwlBg, [[Codec Services]], [[NWM Services]], [[SPI Services]], [[PDN Services]]
Line 237:
Line 237:
| [[SPI Registers]]
| [[SPI Registers]]
| 0x10143000
| 0x10143000
β
| TwlBg
+
| TwlBg, dmnt Module
β
| Only used under TWL_FIRM?
+
| Debugger related?
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
Line 245:
Line 245:
| 0x10144000
| 0x10144000
| Boot11, Kernel11, TwlBg, [[I2C Services]]
| Boot11, Kernel11, TwlBg, [[I2C Services]]
β
|
+
| 3DS I2C interface (MCU + Cameras + LCD)
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11/A9
| A11/A9
β
| [[CODEC Registers]]
+
| [[I2S Registers]]
| 0x10145000
| 0x10145000
β
| TwlBg, [[Codec Services]]
+
| TwlBg, AgbBg, [[Codec Services]]
β
|
+
| Sound input/output lines
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
Line 258:
Line 258:
| [[HID Registers]]
| [[HID Registers]]
| 0x10146000
| 0x10146000
β
| Boot11, Kernel11, TwlBg, [[HID Services]], dlp Services
+
| Boot9, Boot11, Kernel11, TwlBg, [[HID Services]], dlp Services
| See [[PAD]].
| See [[PAD]].
|-
|-
Line 273:
Line 273:
| 0x10148000
| 0x10148000
| TwlBg, [[I2C Services]]
| TwlBg, [[I2C Services]]
β
|
+
| 3DS I2C interface (Gyro + IR)
|-style="border-top: double"
|-style="border-top: double"
| style="background: green" | Yes
| style="background: green" | Yes
Line 287:
Line 287:
| 0x10161000
| 0x10161000
| Boot11, TwlBg, [[I2C Services]]
| Boot11, TwlBg, [[I2C Services]]
β
| See [http://problemkaputt.de/gba.htm no$gba] help for some clues maybe.
+
| TWL I2C interface (MCU + Cameras)
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
Line 382:
Line 382:
| style="background: green" | Yes
| style="background: green" | Yes
| A11
| A11
β
| CDMA
+
| [[Corelink DMA Engines|CDMA]]
| 0x10200000
| 0x10200000
| Boot11, Kernel11
| Boot11, Kernel11
β
| [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0424d/index.html CoreLinkβ’ DMA-330]. Not used on New3DS.
+
| [http://infocenter.arm.com/help/topic/com.arm.doc.subset.primecell.system/index.html CoreLinkβ’ DMA-330 r0p0] (eight channels). Only used by bootrom on New3DS.
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
| A11
| A11
β
| ?
+
| FCRAM configuration
| 0x10201000
| 0x10201000
β
|
+
| TwlBg, Kernel11 (dead code)
|
|
|-
|-
Line 406:
Line 406:
| 0x10203000
| 0x10203000
| [[DSP Services]]
| [[DSP Services]]
β
|
+
| see the "DSi XpertTeak" section in [http://problemkaputt.de/gba.htm no$gba] help.
β
|-
+
|-style="border-top: double"
β
| style="background: green" | Yes
+
| style="background: red" | No
| A11
| A11
| ?
| ?
| 0x10204000
| 0x10204000
+
| ?
|
|
β
|
+
|-
β
|-style="border-top: double"
| style="background: red" | No
| style="background: red" | No
| A11
| A11
β
| CDMA
+
| [[Corelink DMA Engines|CDMA]]
| 0x10206000
| 0x10206000
| NewKernel11
| NewKernel11
β
| CDMA was moved here on New 3DS. [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0424d/index.html CoreLinkβ’ DMA-330].
+
| [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0424d/index.html CoreLinkβ’ DMA-330 r1p2] (eight channels). This is the DMA engine actually being used by the New3DS ARM11 kernel.
|-
|-
| style="background: red" | No
| style="background: red" | No
Line 434:
Line 434:
| 0x1020F000
| 0x1020F000
| TwlBg, [[GSP Services]]
| TwlBg, [[GSP Services]]
β
| [http://infocenter.arm.com/help/topic/com.arm.doc.ddi0422a/CHDGHIID.html CoreLinkβ’ NIC-301 r1p0].
+
| [https://developer.arm.com/documentation/ddi0422/d/programmers-model/register-summary CoreLinkβ’ NIC-301 r1p2].
|-style="border-top: double"
|-style="border-top: double"
| style="background: green" | Yes
| style="background: green" | Yes
| A11
| A11
β
| MIRROR
+
| AHB (or AXI?) FIFOs region
β
| 0x10300000-0x10400000
+
| 0x10300000-0x10340000
|
|
β
| Mirror of 0x10100000-0x10200000 (faster bus?), CDMA wants these addresses
+
| Pages present in this region correspond to the same respective devices in the 0x10100000-0x10140000 region but don't hold the same registers. They hold the FIFOs instead: the HASH FIFO register is located at 0x10301000. The LgyFb scaler data FIFO are located at 0x10310000 (top) and 0x10311000 (bot), etc. Needed for DMA.
|-style="border-top: double"
|-style="border-top: double"
| style="background: green" | Yes
| style="background: green" | Yes
| A11
| A11
β
| [[GPU Registers]]
+
| [[GPU/External_Registers|GPU Registers]]
| 0x10400000
| 0x10400000
| Boot11, Kernel11, [[GSP Services]]
| Boot11, Kernel11, [[GSP Services]]
Line 455:
Line 455:
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:
physaddr = virtaddr - 0x1EC00000 + 0x10100000
physaddr = virtaddr - 0x1EC00000 + 0x10100000
β
β
=0x10012000=
β
Keys seem to be stored here? Access to this region is disabled once the ARM9 writes 0x2 to [[CONFIG|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.
β
β
{| class="wikitable" border="1"
β
! Offset
β
! Size
β
! Description
β
|-
β
| 0x0
β
| 0x8
β
| On development units ([[CONFIG|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 [[FIRM|ARM9-loader]].
β
|-
β
| 0x8
β
| 0xF8
β
| ?
β
|-
β
| 0x100
β
| 0x8
β
| Before writing REG_SYSPROT9 bit1, the ARM9 copies the 8-byte TWL-keydata to here.
β
|}