Changes

Jump to navigation Jump to search
641 bytes added ,  02:47, 9 May 2020
Line 38: Line 38:  
| 0x18000000
 
| 0x18000000
 
| 0x00600000
 
| 0x00600000
| VRAM (divided in two banks, VRAM and VRAMB)
+
| VRAM (divided in two areas VRAM A and B, four banks in total)
 
|-
 
|-
 
| style="background: red" | No
 
| style="background: red" | No
Line 80: Line 80:  
* Writes value <code>0xFFFF</code> to 32-bit register <code>0x17E10000</code>+<code>0x77C</code>.
 
* Writes value <code>0xFFFF</code> to 32-bit register <code>0x17E10000</code>+<code>0x77C</code>.
 
* Waits for bit 0 in 32-bit register <code>0x17E10000</code>+<code>0x730</code> to become clear.
 
* Waits for bit 0 in 32-bit register <code>0x17E10000</code>+<code>0x730</code> to become clear.
* Writes value <code>0x0<code> to 32-bit register <code>0x17E10000</code>+<code>0x0</code>.
+
* Writes value <code>0x0</code> to 32-bit register <code>0x17E10000</code>+<code>0x0</code>.
 
* Clears bit 0 in 32-bit register <code>0x17E10000</code>+<code>0x100</code>.
 
* Clears bit 0 in 32-bit register <code>0x17E10000</code>+<code>0x100</code>.
   Line 152: Line 152:  
| 0xFFF00000
 
| 0xFFF00000
 
| 0x00004000
 
| 0x00004000
| Data TCM (Mapped during bootrom)
+
| Data TCM (Mapped during bootrom). Enabled at the time Boot9 jumps to FIRM, however Kernel9+arm9loader disables it.
 
|-
 
|-
 
| style="background: green" | Yes
 
| style="background: green" | Yes
Line 366: Line 366:  
| RO
 
| RO
 
|}
 
|}
 +
 +
===[[Bootloader|Boot9]]===
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Region
 +
!  Address
 +
!  Size
 +
!  Privileged-mode data permissions
 +
!  User-mode data permissions
 +
!  Privileged-mode instruction permissions
 +
!  User-mode instruction permissions
 +
|-
 +
| 0
 +
| 0x20000000
 +
| 0x08000000
 +
| None
 +
| None
 +
| None
 +
| None
 +
|-
 +
| 1
 +
| 0x10000000
 +
| 0x10000000
 +
| RW
 +
| RW
 +
| None
 +
| None
 +
|-
 +
| 2
 +
| 0x08000000
 +
| 0x00100000
 +
| RW
 +
| RW
 +
| None
 +
| None
 +
|-
 +
| 3
 +
| 0x08000000
 +
| 0x00000400
 +
| RW
 +
| RW
 +
| RO
 +
| RO
 +
|-
 +
| 4
 +
| 0xFFF00000
 +
| 0x00004000
 +
| RW
 +
| RW
 +
| None
 +
| None
 +
|-
 +
| 5
 +
| 0x07FF8000
 +
| 0x00008000
 +
| RW
 +
| RW
 +
| RO
 +
| RO
 +
|-
 +
| 6
 +
| 0xFFFF0000
 +
| 0x00010000
 +
| RO
 +
| RO
 +
| RO
 +
| RO
 +
|-
 +
| 7
 +
| 0x1FFFE000
 +
| 0x00000800
 +
| RW
 +
| RW
 +
| None
 +
| None
 +
|}
 +
 +
* Instruction cachable bits = 0x40(only enabled for region6).
 +
* Data cachable bits = 0x44(only enabled for region2 and region6).
 +
* Data bufferable bits = 0x44(only enabled for region2 and region6).
 +
 +
These are the same for both Old3DS/New3DS.
    
==ARM9 ITCM==
 
==ARM9 ITCM==
Line 391: Line 473:  
|  
 
|  
 
| 0x3800
 
| 0x3800
| 0x4
+
| 0x100
| This is always 0xDEADB00F.
+
| This is the first 0x90 bytes of [[OTP_Registers#Plaintext_OTP|plaintext OTP]] when OTP hash verification is successful. The remaining 0x70 bytes are cleared.
|-
  −
| 0x01FFB804
  −
|
  −
| 0x3804
  −
| 0x4
  −
| This is the u32 DeviceId.
  −
|-
  −
| 0x01FFB808
  −
|
  −
| 0x3808
  −
| 0x10
  −
| This is the fall-back keyY used for movable.sed keyY when movable.sed doesn't exist in NAND(the last two words here are used on retail for generating console-unique TWL keydata/etc). This is also used for "LocalFriendCodeSeed", etc.
  −
|-
  −
| 0x01FFB818
  −
|
  −
| 0x3818
  −
| 0x1
  −
| ?
  −
|-
  −
| 0x01FFB819
  −
|
  −
| 0x3819
  −
| 0x1
  −
| This is the [[CTCert]] issuer type: 0 = retail "Nintendo CA - G3_NintendoCTR2prod", non-zero = dev "Nintendo CA - G3_NintendoCTR2dev".
  −
|-
  −
| 0x01FFB81A
  −
|
  −
| 0x381A
  −
| 0x6
  −
| ?
  −
|-
  −
| 0x01FFB820
  −
|
  −
| 0x3820
  −
| 0x4
  −
| This is the CTCert ECDSA exponent, this is byte-swapped when *((u8*)(0x01FFB800+0x18)) is >=5.
  −
|-
  −
| 0x01FFB824
  −
|
  −
| 0x3824
  −
| 0x2
  −
| ?
  −
|-
  −
| 0x01FFB826
  −
|
  −
| 0x3826
  −
| 0x1E
  −
| This is the CTCert ECDSA privk.
  −
|-
  −
| 0x01FFB844
  −
|
  −
| 0x3844
  −
| 0x3C
  −
| This is the CTCert ECDSA signature.
   
|-
 
|-
 
| 0x01FFB880
 
| 0x01FFB880
 
|  
 
|  
| 0x3880
+
| 0x3890
| 0x80
+
| 0x70
| This is all-zero.
+
| This is all zeros; boot ROM does not reveal the console-specific keys or the OTP hash in ITCM.
 
|-
 
|-
 
| 0x01FFB900
 
| 0x01FFB900
Line 464: Line 492:  
| 0x3B00
 
| 0x3B00
 
| 0x200
 
| 0x200
| This is the 0x200-bytes from the plaintext NAND firm partition FIRM header, read by bootrom.
+
| This is the 0x200-bytes from the plaintext FIRM header for the FIRM which was loaded by [[Bootloader|Boot9]]. This is the only location Boot9 uses for storing the loaded FIRM headers internally, it's not stored anywhere else.
 
|-
 
|-
 
| 0x01FFBD00
 
| 0x01FFBD00
Line 553: Line 581:  
| 0xB90
 
| 0xB90
 
| Uninitialized memory.
 
| Uninitialized memory.
0x01FFFC00 size 0x100-bytes starting with [[9.5.0-22|9.5.0-X]] is the FIRM header used during FIRM-launching.
+
|-
 +
| 0x01FFFC00
 +
|
 +
| 0x7C00
 +
| 0x100
 +
| Starting with [[9.5.0-22|9.5.0-X]] is the FIRM header used during FIRM-launching.
 
|}
 
|}
   Line 573: Line 606:  
* [[Virtual address mapping New3DS v9.0]]
 
* [[Virtual address mapping New3DS v9.0]]
 
* [[Virtual address mapping New3DS v9.2]]
 
* [[Virtual address mapping New3DS v9.2]]
 +
* [[Virtual address mapping New3DS v11.1]]
    
=ARM11 Detailed physical memory map=
 
=ARM11 Detailed physical memory map=
Line 604: Line 638:  
FCRAM is partitioned into three regions of memory (APPLICATION, SYSTEM, and BASE). Most applications can only allocate memory from one of these regions (which is encoded in the [[NCCH/Extended_Header#ARM11_Kernel_Flags|process kernel flags]]). There is a fixed set of possible size of each memory region, determined by the APPMEMTYPE value in [[Configuration_Memory#APPMEMTYPE|configuration memory]] (which in turn is set up according to the [[FIRM#FIRM_Launch_Parameters|firmware launch parameters]]).
 
FCRAM is partitioned into three regions of memory (APPLICATION, SYSTEM, and BASE). Most applications can only allocate memory from one of these regions (which is encoded in the [[NCCH/Extended_Header#ARM11_Kernel_Flags|process kernel flags]]). There is a fixed set of possible size of each memory region, determined by the APPMEMTYPE value in [[Configuration_Memory#APPMEMTYPE|configuration memory]] (which in turn is set up according to the [[FIRM#FIRM_Launch_Parameters|firmware launch parameters]]).
   −
Support for APPMEMTYPEs 6 and 7 was implemented in [[NS]] with [[8.0.0-18]]. These configurations are only supported in the [[New_3DS]] ARM11-kernel, and are in fact the only ones supported there at all. Applications only get access to the larger memory regions when this is specified in their [[NCCH/Extended Header#New3DS System Mode|extended header]].
+
Support for APPMEMTYPEs 6 and 7 (and 8?) was implemented in [[NS]] with [[8.0.0-18]]. These configurations are only supported in the [[New_3DS]] ARM11-kernel, and are in fact the only ones supported there at all. Applications only get access to the larger memory regions when this is specified in their [[NCCH/Extended Header#New3DS System Mode|extended header]].
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 655: Line 689:  
| 0x01400000
 
| 0x01400000
 
|-
 
|-
| 6 (This is the default on New3DS. With [[New_3DS]] kernel this is the type used when the value is not 7)
+
| 6 and 8 (6 is the default on New3DS. With [[New_3DS]] kernel this is the type used when the value is neither 7 nor 8)
 
| 0x0
 
| 0x0
 
| 0x07C00000(124MB)
 
| 0x07C00000(124MB)
Line 977: Line 1,011:  
  0xFFFF9004 Pointer to the current KProcess instance
 
  0xFFFF9004 Pointer to the current KProcess instance
 
  0xFFFF9008 Pointer to the current KScheduler instance
 
  0xFFFF9008 Pointer to the current KScheduler instance
 +
0xFFFF900C Pointer to the current KSchedulableInterruptEventLinkedList instance
 
  0xFFFF9010 Pointer to the last KThread to encounter an exception
 
  0xFFFF9010 Pointer to the last KThread to encounter an exception
  
516

edits

Navigation menu