Line 26: |
Line 26: |
| |- | | |- |
| | style="background: green" | Yes | | | style="background: green" | Yes |
− | | CFG_DEBUGUNIT | + | | CFG_DEBUGCTL |
| | 0x10000004 | | | 0x10000004 |
| | 4 | | | 4 |
Line 35: |
Line 35: |
| | 0x10000008 | | | 0x10000008 |
| | 1 | | | 1 |
− | | TwlProcess9 | + | | Boot9, Process9, TwlProcess9 |
| |- | | |- |
| | style="background: green" | Yes | | | style="background: green" | Yes |
− | | [[#CFG_CARDCONF|CFG_CARDCONF]] | + | | [[#CFG_CARDCTL|CFG_CARDCTL]] |
| | 0x1000000C | | | 0x1000000C |
| | 2 | | | 2 |
− | | | + | | Process9 |
| |- | | |- |
| | style="background: green" | Yes | | | style="background: green" | Yes |
− | | | + | | [[#CFG_CARDSTATUS|CFG_CARDSTATUS]] |
| | 0x10000010 | | | 0x10000010 |
| | 1 | | | 1 |
− | | | + | | Process9 |
− | |-
| |
− | | style="background: green" | Yes
| |
− | | ?
| |
− | | 0x10000011
| |
− | | 1
| |
− | |
| |
| |- | | |- |
| | style="background: green" | Yes | | | style="background: green" | Yes |
− | | ? | + | | CFG_CARDCYCLES0 |
| | 0x10000012 | | | 0x10000012 |
| | 2 | | | 2 |
− | | | + | | Boot9, Process9 |
| |- | | |- |
| | style="background: green" | Yes | | | style="background: green" | Yes |
− | | ? | + | | CFG_CARDCYCLES1 |
| | 0x10000014 | | | 0x10000014 |
| | 2 | | | 2 |
− | | | + | | Boot9, Process9 |
| |- | | |- |
| | style="background: green" | Yes | | | style="background: green" | Yes |
Line 134: |
Line 128: |
| | | |
| 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. |
− |
| |
− | It is not possible to set any other bits.
| |
| | | |
| == CFG_SYSPROT11 == | | == CFG_SYSPROT11 == |
Line 169: |
Line 161: |
| |} | | |} |
| | | |
− | == CFG_CARDCONF == | + | == 0x10000008 == |
| {| class="wikitable" border="1" | | {| class="wikitable" border="1" |
| ! Bit | | ! Bit |
| ! Description | | ! Description |
| + | ! Used by |
| |- | | |- |
| | 1-0 | | | 1-0 |
− | | Gamecard active controller select (0=NTRCARD, 1=?, 2=CTRCARD1, 3=CTRCARD2) | + | | ? |
| + | | |
| + | |- |
| + | | 3-2 |
| + | | AES related? Value 3 written after write to AES_CTL. |
| + | | Boot9, Process9, TwlProcess9 |
| + | |- |
| + | | 31-4 |
| + | | Reserved |
| + | | |
| + | |} |
| + | |
| + | == CFG_CARDCTL == |
| + | {| class="wikitable" border="1" |
| + | ! Bit |
| + | ! Description |
| + | ! Used by |
| + | |- |
| + | | 1-0 |
| + | | Gamecard active controller select (0=NTRCARD, 1=?, 2=CTRCARD0, 3=CTRCARD1) |
| + | | Process9 |
| |- | | |- |
| | 8 | | | 8 |
− | | ? | + | | Enable gamecard eject IRQ, maybe? |
| + | | Process9 |
| |} | | |} |
| | | |
| Depending on the gamecard controller that has been selected, one of the following gamecard registers will become active: | | Depending on the gamecard controller that has been selected, one of the following gamecard registers will become active: |
| * Selecting NTRCARD will activate the register space at [[NTRCARD|0x10164000]]. | | * Selecting NTRCARD will activate the register space at [[NTRCARD|0x10164000]]. |
− | * Selecting CTRCARD1 will activate the register space at [[CTRCARD|0x10004000]]. | + | * Selecting CTRCARD0 will activate the register space at [[CTRCARD|0x10004000]]. |
− | * Selecting CTRCARD2 will activate the register space at [[CTRCARD|0x10005000]]. | + | * Selecting CTRCARD1 will activate the register space at [[CTRCARD|0x10005000]]. |
| | | |
− | == 0x10000010 == | + | == CFG_CARDSTATUS == |
− | When a gamecard isn't inserted, this register value is 0x01.
| + | {| class="wikitable" border="1" |
| + | ! Bit |
| + | ! Description |
| + | ! Used by |
| + | |- |
| + | | 0 |
| + | | Cartridge-slot empty (0=inserted, 1=empty) |
| + | | Process9 |
| + | |- |
| + | | 3-2 |
| + | | ? |
| + | | Process9 |
| + | |} |
| | | |
| == CFG_EXTMEMCNT9 == | | == CFG_EXTMEMCNT9 == |
− | This register is New3DS-only. Only bit0 is writable: 0 = disable New3DS ARM9 memory at 0x08100000 size 0x80000, 1 = enable. | + | This register is New3DS-only. |
| | | |
− | This bit is set by New3DS ARM9-kernel crt0.
| + | {| class="wikitable" border="1" |
− | | + | ! Bit |
− | The data in this extended memory doesn't change when disabling the memory, then re-enabling the memory. Reading this extended memory while disabled results in zeros.
| + | ! Description |
| + | ! Used by |
| + | |- |
| + | | 0 |
| + | | Hide extended ARM9 memory (0=hidden, 1=shown) |
| + | | Kernel9 (New3DS) |
| + | |- |
| + | | 31-1 |
| + | | Reserved |
| + | | |
| + | |} |
| | | |
| == CFG_MPCORECFG == | | == CFG_MPCORECFG == |