Configuration Memory: Difference between revisions

No edit summary
Hardware info
 
(36 intermediate revisions by 12 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 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]].


Besides mem-region related fields, the data written here by the Old3DS/New3DS kernels is identical.
Besides mem-region related fields, the data written here by the old 3DS/new 3DS kernels is identical.


= Shared Memory Page For ARM11 Processes =
= Shared Memory Page For ARM11 Processes =
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 125: Line 129:
| 0x1FF81060
| 0x1FF81060
| 6
| 6
|-
| WIFI_LINKLEVEL Ranges from 0-3; 0 stands for no or a poor network connection; 3 stands for a good connection. This corresponds with the number of wifi bars displayed by [[Home Menu]].
| 0x1FF81066
| 1
|-
| NETWORK_STATE The network state displayed by [[Home Menu]]. 2: Internet, 3/4/6: Local, 7: Disabled, Everything else: Enabled
| 0x1FF81067
| 1
|-
|-
| 3D_SLIDERSTATE
| 3D_SLIDERSTATE
Line 132: Line 144:
| 3D_LEDSTATE
| 3D_LEDSTATE
| 0x1FF81084
| 0x1FF81084
| 1
|-
| BATTERY_LEDSTATE
| 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 142: Line 162:
| 8
| 8
|-
|-
| signed ? HeadsetsConnected?
| Signed? Headsets connected?
| 0x1FF810C0
| 0x1FF810C0
| 1
| 1
|}
|}


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 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 165: 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 174: Line 198:
== SYSCOREVER ==
== SYSCOREVER ==
This field is initialized by the ARM11 kernel, this is the programID-low of the running FIRM. When launching [[NCCH#CXI|CXIs]], the value stored here must match the core version field stored in the CXI exheader. If they do not match, the [[Process_Manager_Services|PM]] module will refuse to launch the ARM11 process.
This field is initialized by the ARM11 kernel, this is the programID-low of the running FIRM. When launching [[NCCH#CXI|CXIs]], the value stored here must match the core version field stored in the CXI exheader. If they do not match, the [[Process_Manager_Services|PM]] module will refuse to launch the ARM11 process.
With [[Factory_Setup|factory]] NATIVE_FIRM, this is set to 0x0, even though the FIRM programID-low is 0x2. However, the factory system-titles have core-version set to 0x2. Hence, this config-mem SYSCOREVER field might not be used by factory system processes?


== FIRM_SYSCOREVER ==
== FIRM_SYSCOREVER ==
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 184: Line 210:
|-
|-
| 0
| 0
| Clear for dev unit, set for retail.(See 0x1FF80015)
| Clear for developer unit, set for retail.(See 0x1FF80015)
|-
|-
| 1
| 1
| Set for debug units
| IsJtagConnected
|-
|-
| 2-7
| 2-7
| ?
|?
|}
|}


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.


== 0x1FF80015 ==
== UNITINFO ==
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.
{| 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.
 
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).
 
== 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
|}
 
The ARM11 loads this value from 0x1FFFFFF0+2 during startup, which is written by the ARM9 during ARM9<>ARM11 kernel sync.


== 0x1FF80016 ==
This originates from the low 8-bits of register [[CONFIG|0x10010000]]. When bit0 is set, the ARM11 kernel will not set the UPDATEFLAG to value 1.
This originates from the low 8-bits of register [[CONFIG|0x10010000]]. When bit0 is set, the ARM11 kernel will not set the UPDATEFLAG to value 1.


Line 218: Line 285:
= Shared Memory Page Fields =
= Shared Memory Page Fields =


== WIFI_MACADDR ==
== RUNNING_HW ==
This is the wifi MAC address for this 3DS. This is initialized by the [[NWM_Services|NWM]] module, it's unknown where the the MAC address written here was originally loaded from.
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:
 
== 3D_SLIDERSTATE ==
This float contains the state of the 3D slider. The range of this float is value 0.0f for "off", and 1.0f for max.
 
This is written/updated by [[HID_Services|HID]] module.
 
== 3D_LEDSTATE ==
When non-zero, the 3D LED is disabled. See [[GSPGPU:SetLedForceOff]].
 
== MENUTID ==
Unknown, contains the menu TID(used by [[NS]]).
 
== ACTIVEMENUTID ==
This contains the titleID of the currently running menu launched by [[NS]].


= NATIVE_FIRM Versions =
{| class="wikitable" border="1"
{| class="wikitable" border="1"
System version
Value
Old3DS title-version
Description
!  Old3DS hex title contentID
!  Kernel/FIRM version (Old3DS/New3DS)
|-
|-
| [[Factory_Setup|Factory]] FIRM
| 0
|
| Invalid (unknown)
|  
| 2.3-0
|-
|-
| [[1.0.0-0]]
| 1
| v432
| PRODUCT
| 00
| 2.27-0
|-
|-
| [[1.1.0-1]]
| 2
| v1472
| TS_BOARD
| 02
| 2.28-0
|-
|-
| [[2.0.0-2]]
| 3
| v2516
| KMC_DEBUGGER
| 09
| 2.29-7
|-
|-
| [[2.1.0-3]]
| 4
| v3553
| KMC_CAPTURE
| 0B
| 2.30-18
|-
|-
| [[2.2.0-X]]
| 5
| v4595
| IS_DEBUGGER
| 0F
| 2.31-40
|-
|-
| [[3.0.0-5]]
| 6
| v5647
| SNAKE_PRODUCT
| 18
| 2.32-15
|-
|-
| [[4.0.0-7]]
| 7
| v6677
| SNAKE_IS_DEBUGGER
| 1D
| 2.33-4
|-
|-
| [[4.1.0-8]]
| 8
| v7712
| SNAKE_IS_CAPTURE
| 1F
| 2.34-0
|-
|-
| [[5.0.0-11]]
| 9
| v8758
| SNAKE_KMC_DEBUGGER
| 25
|}
| 2.35-6
 
== MCU_HW_INFO ==
 
Converted to [[#RUNNING_HW|RUNNING_HW]] by PTM.
 
{| class="wikitable" border="1"
!  Value
!  Description
|-
|-
| [[5.1.0-11]]
| 0
| v9792
| PRODUCT
| 26
| 2.36-0
|-
|-
| [[6.0.0-11]]
| 1
| v10833
| TS_BOARD
| 29
| 2.37-0
|-
|-
| [[6.1.0-11]]
| 2
| v11872
| KMC_DEBUGGER
| 2A
| 2.38-0
|-
|-
| [[7.0.0-13]]
| 4
| v12916
| KMC_CAPTURE
| 2E
| 2.39-4
|-
|-
| [[7.2.0-17]]
| 5
| v13956
| IS_DEBUGGER
| 30
| 2.40-0
|-
|-
| [[8.0.0-18]]
| 6
| v15047
| IS_CAPTURE (N3DS only)
| 37
| 2.44-6
|-
| [[8.1.0-0_New3DS]]
|
|
| 2.45-5
|-
| [[9.0.0-20]]
| v17120
| 38
| 2.46-0
|}
|}


The above kernel/FIRM versions are in the format: <KERNEL_VERSIONMAJOR>.<KERNEL_VERSIONMINOR>-<KERNEL_VERSIONREVISION>.
== WIFI_MACADDR ==
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 ==
This float contains the state of the 3D slider. The range of this float is value 0.0f for "off", and 1.0f for max.
 
This is written/updated by [[HID_Services|HID]] module.
 
== 3D_LEDSTATE ==
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 ==
Unknown, contains the menu TID (used by [[NS]])
 
== ACTIVEMENUTID ==
This contains the titleID of the currently running menu launched by [[NS]].
 
= NATIVE_FIRM Versions =
 
See [[FIRM#NATIVE_FIRM|FIRM]].