Configuration Memory: Difference between revisions

Neobrain (talk | contribs)
Hardware info
 
(16 intermediate revisions by 8 users not shown)
Line 33: Line 33:
| 4
| 4
|-
|-
| UNITINFO
| ENVINFO
| 0x1FF80014
| 0x1FF80014
| 1
| 1
|-
|-
| BOOT_FIRM
| UNITINFO
| 0x1FF80015
| 0x1FF80015
| 1
| 1
Line 47: Line 47:
| KERNEL_CTRSDKVERSION
| KERNEL_CTRSDKVERSION
| 0x1FF80018
| 0x1FF80018
| 4
|-
| FIRMLAUNCHFLAGS
| 0x1FF80020
| 4
| 4
|-
|-
Line 90: Line 94:
|}
|}


This memory page is [[Memory_layout|read-only]] for ARM11 processes. This memory and the kernel code for it only exists under NATIVE_FIRM/SAFE_MODE_FIRM.
This memory page is mapped as "shared device" (it is thus uncached) and [[Memory_layout|read-only]] for ARM11 processes. This memory and the kernel code for it only exists under NATIVE_FIRM/SAFE_MODE_FIRM.


The FIRM_* fields are by default identical to the KERNEL_* fields. However, the FIRM_* fields can be overridden via FIRM-launch parameters, see [[FIRM|here]].
The FIRM_* fields are by default identical to the KERNEL_* fields. However, the FIRM_* fields can be overridden via FIRM-launch parameters, see [[FIRM|here]].
Line 106: Line 110:
| 4
| 4
|-
|-
| RUNNING_HW (1=product, 2=devboard, 3=debugger, 4=capture)
| RUNNING_HW (1=product, 2=devboard, 3=debugger, 4=capture, 5=?)
| 0x1FF81004
| 0x1FF81004
| 1
| 1
Line 114: Line 118:
| 1
| 1
|-
|-
| DATETIME_0 {(u64)MillisecondsSinceFirstJan1900,(u64)SystemTickLastTimeThisWasUpdated,(u32)unk,(u32)unk,(u32)unk,(u32)unk}
| DATETIME_0 {(u64)MillisecondsSinceFirstJan1900,(u64)SystemTickLastTimeThisWasUpdated,(u32)unk(set to 0xFFB0FF0 by PTM),(u32)Set to 0 by PTM,(u32)Set to 0 by PTM,(u32)set to 0 by PTM}
| 0x1FF81020
| 0x1FF81020
| 32
| 32
Line 130: Line 134:
| 1
| 1
|-
|-
| WIFI_? Likely wifi hardware related, NWM module initializes this. Regular Old3DS value = 0x00, regular New3DS value = 0x02.
| NETWORK_STATE The network state displayed by [[Home Menu]]. 2: Internet, 3/4/6: Local, 7: Disabled, Everything else: Enabled
| 0x1FF81067
| 0x1FF81067
| 1
| 1
Line 144: Line 148:
| BATTERY_LEDSTATE
| BATTERY_LEDSTATE
| 0x1FF81085
| 0x1FF81085
| 1
|-
| PTM sets bit0 to 1 when it has done writing MCU-originating hw info to [[#RUNNING_HW|RUNNING_HW]], [[#MCU_HW_INFO|MCU_HW_INFO]]. There are no other bits.
| 0x1FF81086
| 1
| 1
|-
|-
Line 159: Line 167:
|}
|}


This memory page is normally read-only for ARM11 processes, write-access is [[Memory_layout|determined]] by the process exheader kernel "shared page writing" flag. This memory only exists under NATIVE_FIRM/SAFE_MODE_FIRM.
This memory page is normally read-only for ARM11 processes, write-access is [[Memory_layout|determined]] by the process exheader kernel "shared page writing" flag. It is mapped as "shared device" (it is thus uncached) in both cases.
 
This memory only exists under NATIVE_FIRM/SAFE_MODE_FIRM.


= ARM11 Kernel Config Fields =
= ARM11 Kernel Config Fields =
Line 177: Line 187:
== KERNEL_VERSIONMAJOR / FIRM_VERSIONMAJOR ==
== KERNEL_VERSIONMAJOR / FIRM_VERSIONMAJOR ==
This is the version-major for the currently running [[FIRM]].
This is the version-major for the currently running [[FIRM]].
The kernel initializes KERNEL_VERSIONMAJOR and SYSCOREVER with the same constant value.


== UPDATEFLAG ==
== UPDATEFLAG ==
Line 192: Line 204:
Normally this is the same as SYSCOREVER. This used by [[AM:InstallNATIVEFIRM]] for comparing with the NATIVE_FIRM titleID-low. When the low u8 from the NATIVE_FIRM titleID-low is larger than FIRMSYSCOREVER, [[AM:InstallNATIVEFIRM]] will trigger FIRM installing. When that u8 is not larger than FIRM_SYSCOREVER, and these two values don't match, [[AM:InstallNATIVEFIRM]] will return an error.
Normally this is the same as SYSCOREVER. This used by [[AM:InstallNATIVEFIRM]] for comparing with the NATIVE_FIRM titleID-low. When the low u8 from the NATIVE_FIRM titleID-low is larger than FIRMSYSCOREVER, [[AM:InstallNATIVEFIRM]] will trigger FIRM installing. When that u8 is not larger than FIRM_SYSCOREVER, and these two values don't match, [[AM:InstallNATIVEFIRM]] will return an error.


== UNITINFO ==
== ENVINFO ==
{| class="wikitable" border="1"
{| class="wikitable" border="1"
!  Bit
!  Bit
Line 201: Line 213:
|-
|-
| 1
| 1
| Set for debug units
| IsJtagConnected
|-
|-
| 2-7
| 2-7
Line 207: Line 219:
|}
|}


Bit1 in this field is set by the ARM11 kernel when ARM debug CP14 DSCR bit14 is set. [[NS]] loads the menu TID from MENUTID when bits 1-7 of this field are clear. [[ErrDisp]] will display development error info when bit0 is clear.
Bit1 in this field is set by the ARM11 kernel when ARM debug CP14 DSCR bit14 is set (halting debug-mode enabled). [[NS]] loads the menu TID from MENUTID when bits 1-7 of this field are clear. [[ErrDisp]] will display development error info when bit0 is clear.
 
== UNITINFO ==
{| class="wikitable" border="1"
!  Value
!  Boot Env
|-
| 0
| Prod
|-
| 1
| Dev
|-
| 2
| Debugger
|-
| 3
| Firm
|}
 
The ARM11 loads the value of [[CONFIG_Registers#CFG_UNITINFO|CFG_UNITINFO]] from 0x1FFFFFF0+1 during startup, which is written by the ARM9 during ARM9<>ARM11 kernel sync.


== 0x1FF80015 ==
When this field is zero, bit0 for ENVINFO is set for retail. When this field is non-zero, bit0 for ENVINFO is clear for dev/debug units, and an ARM11 kernel state flag which enables debugging is set. JTAG is only enabled for debugger and "firm" modes (bit1).
The ARM11 loads this value from 0x1FFFFFF0+1 during startup, which is written by the ARM9 during ARM9<>ARM11 kernel sync.


When this field is zero, bit0 for UNITINFO is set for retail. When this field is non-zero, bit0 for UNITINFO is clear for dev/debug units, and an ARM11 kernel state flag which enables debugging is set. Bit1 means JTAG connected.
== PREV_FIRM ==
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0
| Cold Boot
|-
| 1
| Reset from CTR mode
|-
| 3
| Reset from TWL mode
|-
| 5
| Reset from NTR mode
|-
| 7
| Reset from AGB mode
|}


== 0x1FF80016 ==
The ARM11 loads this value from 0x1FFFFFF0+2 during startup, which is written by the ARM9 during ARM9<>ARM11 kernel sync.
The ARM11 loads this value from 0x1FFFFFF0+2 during startup, which is written by the ARM9 during ARM9<>ARM11 kernel sync.


Line 235: Line 284:


= Shared Memory Page Fields =
= Shared Memory Page Fields =
== RUNNING_HW ==
Converted from [[#MCU_HW_INFO|MCU_HW_INFO]] (names extracted from TestMenu) by PTM, depending on whether or not the system is a N3DS/N2DS or not:
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0
| Invalid (unknown)
|-
| 1
| PRODUCT
|-
| 2
| TS_BOARD
|-
| 3
| KMC_DEBUGGER
|-
| 4
| KMC_CAPTURE
|-
| 5
| IS_DEBUGGER
|-
| 6
| SNAKE_PRODUCT
|-
| 7
| SNAKE_IS_DEBUGGER
|-
| 8
| SNAKE_IS_CAPTURE
|-
| 9
| SNAKE_KMC_DEBUGGER
|}
== MCU_HW_INFO ==
Converted to [[#RUNNING_HW|RUNNING_HW]] by PTM.
{| class="wikitable" border="1"
!  Value
!  Description
|-
| 0
| PRODUCT
|-
| 1
| TS_BOARD
|-
| 2
| KMC_DEBUGGER
|-
| 4
| KMC_CAPTURE
|-
| 5
| IS_DEBUGGER
|-
| 6
| IS_CAPTURE (N3DS only)
|}


== WIFI_MACADDR ==
== WIFI_MACADDR ==
This is the WiFi MAC address for the 3DS. This is initialized by the [[NWM_Services|NWM]] module, it's unknown where the MAC address written here was originally loaded from.
This is the WiFi MAC address for the 3DS. This is initialized by the [[NWM_Services|NWM]] module and is loaded from the WiFi card's EEPROM.


== 3D_SLIDERSTATE ==
== 3D_SLIDERSTATE ==
Line 246: Line 360:
== 3D_LEDSTATE ==
== 3D_LEDSTATE ==
When non-zero, the 3D LED is disabled. See [[GSPGPU:SetLedForceOff]].
When non-zero, the 3D LED is disabled. See [[GSPGPU:SetLedForceOff]].
== BATTERY_LEDSTATE ==
Bit[0] is set when the adapter is connected. Bit[1] is set when the battery is charging. Bit[2:4] is the value of [[PTM:GetBatteryLevel|battery level]]. If the connection bit is set but the charging bit is clear, it means the battery is already fully charged but still with adapter connected.


== MENUTID ==
== MENUTID ==