|   |   | 
| 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.
 |  | 
|  | 
 |  | 
|  | The first 0x100-bytes here are console-unique.
 |  | 
|  | 
 |  | 
|  | {| 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.
 |  | 
|  | |}
 |  |