Line 8:
Line 8:
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
−
| [[#CFG_SYSPROT9|CFG_SYSPROT9]]
+
| [[#CFG9_SYSPROT9|CFG9_SYSPROT9]]
| 0x10000000
| 0x10000000
| 1
| 1
Line 14:
Line 14:
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
−
| [[#CFG_SYSPROT11|CFG_SYSPROT11]]
+
| [[#CFG9_SYSPROT11|CFG9_SYSPROT11]]
| 0x10000001
| 0x10000001
| 1
| 1
Line 20:
Line 20:
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
−
| [[#CFG_RST11|CFG_RST11]]
+
| [[#CFG9_RST11|CFG9_RST11]]
| 0x10000002
| 0x10000002
| 1
| 1
Line 26:
Line 26:
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
−
| CFG_DEBUGCTL
+
| CFG9_DEBUGCTL
| 0x10000004
| 0x10000004
| 4
| 4
Line 38:
Line 38:
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
−
| [[#CFG_CARDCTL|CFG_CARDCTL]]
+
| [[#CFG9_CARDCTL|CFG9_CARDCTL]]
| 0x1000000C
| 0x1000000C
| 2
| 2
Line 44:
Line 44:
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
−
| [[#CFG_CARDSTATUS|CFG_CARDSTATUS]]
+
| [[#CFG9_CARDSTATUS|CFG9_CARDSTATUS]]
| 0x10000010
| 0x10000010
| 1
| 1
Line 50:
Line 50:
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
−
| CFG_CARDCYCLES0
+
| CFG9_CARDCYCLES0
| 0x10000012
| 0x10000012
| 2
| 2
Line 56:
Line 56:
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
−
| CFG_CARDCYCLES1
+
| CFG9_CARDCYCLES1
| 0x10000014
| 0x10000014
| 2
| 2
Line 74:
Line 74:
|-
|-
| style="background: red" | No
| style="background: red" | No
−
| [[#CFG_EXTMEMCNT9|CFG_EXTMEMCNT9]]
+
| [[#CFG9_EXTMEMCNT9|CFG9_EXTMEMCNT9]]
| 0x10000200
| 0x10000200
| 1
| 1
Line 80:
Line 80:
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
−
| [[#CFG_MPCORECFG|CFG_MPCORECFG]]
+
| [[#CFG9_MPCORECFG|CFG9_MPCORECFG]]
| 0x10000FFC
| 0x10000FFC
| 4
| 4
Line 86:
Line 86:
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
−
| [[#CFG_BOOTENV|CFG_BOOTENV]]
+
| [[#CFG9_BOOTENV|CFG9_BOOTENV]]
| 0x10010000
| 0x10010000
| 4
| 4
Line 92:
Line 92:
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
−
| [[#CFG_UNITINFO|CFG_UNITINFO]]
+
| [[#CFG9_UNITINFO|CFG9_UNITINFO]]
| 0x10010010
| 0x10010010
| 1
| 1
Line 98:
Line 98:
|-
|-
| style="background: green" | Yes
| style="background: green" | Yes
−
| [[#CFG_TWLUNITINFO|CFG_TWLUNITINFO]]
+
| [[#CFG9_TWLUNITINFO|CFG9_TWLUNITINFO]]
| 0x10010014
| 0x10010014
| 1
| 1
Line 104:
Line 104:
|}
|}
−
== CFG_SYSPROT9 ==
+
== CFG9_SYSPROT9 ==
−
CFG_SYSPROT9 is used to permanently disable certain security-sensitive ARM9 memory areas until the next hard reset.
+
CFG9_SYSPROT9 is used to permanently disable certain security-sensitive ARM9 memory areas until the next hard reset.
{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 125:
Line 125:
|}
|}
−
On Old 3DS, NATIVE_FIRM reads CFG_SYSPROT9 to know whether it has previously initialized the TWL console-unique keys using the OTP data. After setting the TWL console-unique keys, NATIVE_FIRM sets CFG_SYSPROT9 bit 1 to disable the OTP area. In subsequent FIRM launches prior to the next reset, NATIVE_FIRM will see that the OTP area is disabled, and skip this step.
+
On Old 3DS, NATIVE_FIRM reads CFG9_SYSPROT9 to know whether it has previously initialized the TWL console-unique keys using the OTP data. After setting the TWL console-unique keys, NATIVE_FIRM sets CFG9_SYSPROT9 bit 1 to disable the OTP area. In subsequent FIRM launches prior to the next reset, NATIVE_FIRM will see that the OTP area is disabled, and skip this step.
On New 3DS, the above is instead done by the [[FIRM#New_3DS_FIRM|Kernel9 loader]]. In addition to using the OTP data for initializing the TWL console-unique keys, the Kernel9 loader will generate the decryption key for NATIVE_FIRM. The final keyslot for NATIVE_FIRM is preserved, so that at a non-reset FIRM launch, the keyslot can be reused, since the OTP would then be inaccessible.
On New 3DS, the above is instead done by the [[FIRM#New_3DS_FIRM|Kernel9 loader]]. In addition to using the OTP data for initializing the TWL console-unique keys, the Kernel9 loader will generate the decryption key for NATIVE_FIRM. The final keyslot for NATIVE_FIRM is preserved, so that at a non-reset FIRM launch, the keyslot can be reused, since the OTP would then be inaccessible.
−
== CFG_SYSPROT11 ==
+
== CFG9_SYSPROT11 ==
{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 145:
Line 145:
|}
|}
−
== CFG_RST11 ==
+
== CFG9_RST11 ==
{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 180:
Line 180:
|}
|}
−
== CFG_CARDCTL ==
+
== CFG9_CARDCTL ==
{| class="wikitable" border="1"
{| class="wikitable" border="1"
! Bit
! Bit
Line 200:
Line 200:
* Selecting CTRCARD1 will activate the register space at [[CTRCARD|0x10005000]].
* Selecting CTRCARD1 will activate the register space at [[CTRCARD|0x10005000]].
−
== CFG_CARDSTATUS ==
+
== CFG9_CARDSTATUS ==
{| class="wikitable" border="1"
{| class="wikitable" border="1"
! Bit
! Bit
Line 215:
Line 215:
|}
|}
−
== CFG_EXTMEMCNT9 ==
+
== CFG9_EXTMEMCNT9 ==
This register is New3DS-only.
This register is New3DS-only.
Line 232:
Line 232:
|}
|}
−
== CFG_MPCORECFG ==
+
== CFG9_MPCORECFG ==
Identical to [[PDN#PDN_MPCORE_CFG|PDN_MPCORE_CFG]].
Identical to [[PDN#PDN_MPCORE_CFG|PDN_MPCORE_CFG]].
−
== CFG_BOOTENV ==
+
== CFG9_BOOTENV ==
This register is used to determine what the previous running FIRM was. Its value is kept following an MCU reboot. Its initial value (on a cold boot) is 0. NATIVE_FIRM [[Development_Services_PXI|sets it to 1]] on shutdown/FIRM launch. [[Legacy_FIRM_PXI|LGY FIRM]] writes value 3 here when launching a TWL title, and writes value 7 when launching an AGB title.
This register is used to determine what the previous running FIRM was. Its value is kept following an MCU reboot. Its initial value (on a cold boot) is 0. NATIVE_FIRM [[Development_Services_PXI|sets it to 1]] on shutdown/FIRM launch. [[Legacy_FIRM_PXI|LGY FIRM]] writes value 3 here when launching a TWL title, and writes value 7 when launching an AGB title.
NATIVE_FIRM will only launch titles if this is not value 0, and will only save the [[Flash_Filesystem|AGB_FIRM savegame]] to SD if this is value 7.
NATIVE_FIRM will only launch titles if this is not value 0, and will only save the [[Flash_Filesystem|AGB_FIRM savegame]] to SD if this is value 7.
−
== CFG_UNITINFO ==
+
== CFG9_UNITINFO ==
This 8-bit register is value zero for retail, non-zero for dev/debug units.
This 8-bit register is value zero for retail, non-zero for dev/debug units.
−
== CFG_TWLUNITINFO ==
+
== CFG9_TWLUNITINFO ==
In the console-unique TWL key-init/etc function the ARM9 copies the u8 value from REG_UNITINFO to this register.
In the console-unique TWL key-init/etc function the ARM9 copies the u8 value from REG_UNITINFO to this register.
This is also used by TWL_FIRM Process9.
This is also used by TWL_FIRM Process9.