Configuration Memory: Difference between revisions
No edit summary |
Hardware info |
||
(86 intermediate revisions by 14 users not shown) | |||
Line 1: | Line 1: | ||
= | = ARM11 Kernel Configuration Memory = | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! NAME | ! NAME | ||
Line 5: | Line 5: | ||
! WIDTH | ! WIDTH | ||
|- | |- | ||
| ? | | KERNEL_? | ||
| 0x1FF80000 | | 0x1FF80000 | ||
| 1 | | 1 | ||
|- | |- | ||
| | | KERNEL_VERSIONREVISION | ||
| 0x1FF80001 | | 0x1FF80001 | ||
| 1 | | 1 | ||
|- | |- | ||
| | | KERNEL_VERSIONMINOR | ||
| 0x1FF80002 | | 0x1FF80002 | ||
| 1 | | 1 | ||
|- | |- | ||
| | | KERNEL_VERSIONMAJOR | ||
| 0x1FF80003 | | 0x1FF80003 | ||
| 1 | | 1 | ||
Line 32: | Line 32: | ||
| 0x1FF80010 | | 0x1FF80010 | ||
| 4 | | 4 | ||
|- | |||
| ENVINFO | |||
| 0x1FF80014 | |||
| 1 | |||
|- | |- | ||
| UNITINFO | | UNITINFO | ||
| | | 0x1FF80015 | ||
| 1 | |||
|- | |||
| PREV_FIRM | |||
| 0x1FF80016 | |||
| 1 | | 1 | ||
|- | |- | ||
| KERNEL_CTRSDKVERSION | | KERNEL_CTRSDKVERSION | ||
| 0x1FF80018 | | 0x1FF80018 | ||
| 4 | |||
|- | |||
| FIRMLAUNCHFLAGS | |||
| 0x1FF80020 | |||
| 4 | |||
|- | |||
| APPMEMTYPE | |||
| 0x1FF80030 | |||
| 4 | | 4 | ||
|- | |- | ||
Line 44: | Line 60: | ||
| 0x1FF80040 | | 0x1FF80040 | ||
| 4 | | 4 | ||
|- | |||
| SYSMEMALLOC | |||
| 0x1FF80044 | |||
| 4 | |||
|- | |||
| BASEMEMALLOC | |||
| 0x1FF80048 | |||
| 4 | |||
|- | |||
| FIRM_? | |||
| 0x1FF80060 | |||
| 1 | |||
|- | |||
| FIRM_VERSIONREVISION | |||
| 0x1FF80061 | |||
| 1 | |||
|- | |- | ||
| FIRM_VERSIONMINOR | | FIRM_VERSIONMINOR | ||
| | | 0x1FF80062 | ||
| 1 | | 1 | ||
|- | |- | ||
| FIRM_VERSIONMAJOR | | FIRM_VERSIONMAJOR | ||
| | | 0x1FF80063 | ||
| 1 | | 1 | ||
|- | |- | ||
Line 60: | Line 92: | ||
| 0x1FF80068 | | 0x1FF80068 | ||
| 4 | | 4 | ||
|} | |||
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]]. | |||
Besides mem-region related fields, the data written here by the old 3DS/new 3DS kernels is identical. | |||
= Shared Memory Page For ARM11 Processes = | |||
{| class="wikitable" border="1" | |||
! NAME | |||
! PROCESS VIRTUAL ADDRESS | |||
! WIDTH | |||
|- | |||
| bit0 selects DATETIME_0 or DATETIME_1. | |||
| 0x1FF81000 | |||
| 4 | |||
|- | |||
| RUNNING_HW (1=product, 2=devboard, 3=debugger, 4=capture, 5=?) | |||
| 0x1FF81004 | |||
| 1 | |||
|- | |||
| MCU_HW_INFO | |||
| 0x1FF81005 | |||
| 1 | |||
|- | |||
| 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 | |||
| 32 | |||
|- | |||
| DATETIME_1 | |||
| 0x1FF81040 | |||
| 32 | |||
|- | |||
| WIFI_MACADDR | |||
| 0x1FF81060 | |||
| 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 | |||
| 0x1FF81080 | |||
| 4 | |||
|- | |||
| 3D_LEDSTATE | |||
| 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 | |||
|- | |- | ||
| MENUTID | | MENUTID | ||
Line 68: | Line 161: | ||
| 0x1FF810A8 | | 0x1FF810A8 | ||
| 8 | | 8 | ||
|- | |||
| Signed? Headsets connected? | |||
| 0x1FF810C0 | |||
| 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. 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 = | |||
== 0x1FF80000 / 0x1FF80060 == | |||
Unknown, this is normally value 0. | |||
== KERNEL_VERSIONREVISION / FIRM_VERSIONREVISION == | |||
This is the version-revision for the currently running [[FIRM]]. | |||
== KERNEL_VERSIONMINOR == | |||
This is the version-minor from ((title-version & 0x3FF) >> 4), for the currently running [[FIRM]]. The values from KERNEL_VERSIONMINOR and KERNEL_VERSIONMAJOR can be stored in applications' [[NCCH#CXI|CXI]] exheader. | |||
== FIRM_VERSIONMINOR == | |||
This is the same as KERNEL_VERSIONMINOR. After [[AM:InstallNATIVEFIRM]] checks FIRM_SYSCOREVER, [[AM:InstallNATIVEFIRM]] then compares FIRM_VERSIONMINOR with the NATIVE_FIRM ((title-version & 0x3FF) >> 4), when the latter is larger than FIRM_VERSIONMINOR [[AM:InstallNATIVEFIRM]] will trigger a [[FIRM]] install. | |||
== | == KERNEL_VERSIONMAJOR / FIRM_VERSIONMAJOR == | ||
This is the | This is the version-major for the currently running [[FIRM]]. | ||
The kernel initializes KERNEL_VERSIONMAJOR and SYSCOREVER with the same constant value. | |||
== | == UPDATEFLAG == | ||
Normally this flag is zero. When the ARM11 kernel is booting on non-factory FIRM it will set this flag to 1, when bit0 from the data which field 0x1FF80016 is loaded from is clear, if the following [[PAD]] buttons are pressed: L, R, A, Up. When this flag is set, [[NS]] will launch the [[System_Settings#System_Updater|System Updater]] title instead of [[Home Menu]]. | |||
== | == NSTID == | ||
This field contains the titleID of the first title to launch from CTR-NAND after the [[FIRM]] system processes are loaded. The [[Process_Manager_Services|PM]] module launches this title. If this field titleID is all-zero, the system will not attempt to launch the title. The regular ARM11 kernel sets this to the regular [[NS]] titleID, while the SAFE_MODE ARM11 kernel sets this to the SAFE_MODE NS titleID. The factory FIRM ARM11-kernel sets this to the NS TID from [[Factory_Setup|here]]. | |||
== | == SYSCOREVER == | ||
This field | 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 == | |||
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. | ||
== | == ENVINFO == | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
! Bit | ! Bit | ||
Line 99: | Line 210: | ||
|- | |- | ||
| 0 | | 0 | ||
| Clear for | | Clear for developer unit, set for retail.(See 0x1FF80015) | ||
|- | |- | ||
| 1 | | 1 | ||
| | | IsJtagConnected | ||
|- | |- | ||
| 2-7 | | 2-7 | ||
| ? | |? | ||
|} | |} | ||
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. | |||
=== KERNEL_CTRSDKVERSION / FIRM_CTRSDKVERSION | == 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. | |||
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. | |||
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. | |||
== KERNEL_CTRSDKVERSION / FIRM_CTRSDKVERSION == | |||
This is the CTR-SDK version which was used to build the currently running [[FIRM]]. | This is the CTR-SDK version which was used to build the currently running [[FIRM]]. | ||
=== APPMEMALLOC === | == APPMEMTYPE == | ||
This contains the total size of the memory that can be allocated with the | The value of this field determines the size for APPMEMALLOC. The retail type(value0) is used when the type is not values 2-5. See [[Memory_layout]] for the table of values for this and the mem-region sizes. | ||
== APPMEMALLOC == | |||
This contains the total size of the memory that can be allocated with the APPLICATION [[SVC|memory-region]], see [[Memory_layout|here]]. | |||
== SYSMEMALLOC == | |||
Same as APPMEMALLOC except for the SYSTEM mem-region, see [[Memory_layout|here]]. | |||
== BASEMEMALLOC == | |||
Same as APPMEMALLOC except for the BASE mem-region, see [[Memory_layout|here]]. | |||
= 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 == | |||
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]]. | |||