Changes

Jump to navigation Jump to search
1,663 bytes added ,  01:57, 1 July 2020
Line 33: Line 33:  
| 4
 
| 4
 
|-
 
|-
| UNITINFO
+
| ENVINFO
 
| 0x1FF80014
 
| 0x1FF80014
 
| 1
 
| 1
 
|-
 
|-
| ?
+
| UNITINFO
 
| 0x1FF80015
 
| 0x1FF80015
 
| 1
 
| 1
 
|-
 
|-
| ?
+
| PREV_FIRM
 
| 0x1FF80016
 
| 0x1FF80016
 
| 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
 
|-
 
|-
| DATETIME_0 {(u64)MillisecondsSinceFirstJan1900,(u64)SystemTickLastTimeThisWasUpdated,(u32)unk,(u32)unk,(u32)unk,(u32)unk}
+
| RUNNING_HW (1=product, 2=devboard, 3=debugger, 4=capture, 5=?)
 +
| 0x1FF81004
 +
| 1
 +
|-
 +
| MCU_HW_INFO
 +
| 0x1FF81005
 +
| 1
 +
|-
 +
| ? (Set by PTM) Possibe values are 2, 4, 6, 7, 8 and 9
 +
| 0x1FF81006
 +
| 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
 
| 0x1FF81020
 
| 32
 
| 32
Line 117: Line 133:  
| 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 124: Line 148:  
| 3D_LEDSTATE
 
| 3D_LEDSTATE
 
| 0x1FF81084
 
| 0x1FF81084
 +
| 1
 +
|-
 +
| BATTERY_LEDSTATE
 +
| 0x1FF81085
 +
| 1
 +
|-
 +
| On startup, and under certain conditions, NS will continuously call svcSleepThread(1000*1000) as long as bit0 of this field is clear. ptmInitialize() sets this after writing MCU unit info to sharedmem.
 +
| 0x1FF81086
 
| 1
 
| 1
 
|-
 
|-
Line 134: Line 166:  
| 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 157: Line 191:  
== 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 ==
Normally this flag is zero. When the ARM11 kernel is booting 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]].
+
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 ==
 
== 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.
+
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 ==
 
== 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 176: Line 214:  
|-
 
|-
 
| 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 (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
 
|}
 
|}
   −
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.
+
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).
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 it's a debugger unit.
+
 
 +
== 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 211: Line 290:     
== WIFI_MACADDR ==
 
== WIFI_MACADDR ==
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.
+
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 220: Line 299:  
== 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 ==
Unknown, contains the menu TID(used by [[NS]]).
+
Unknown, contains the menu TID (used by [[NS]])
    
== ACTIVEMENUTID ==
 
== ACTIVEMENUTID ==
Line 228: Line 310:     
= NATIVE_FIRM Versions =
 
= NATIVE_FIRM Versions =
{| class="wikitable" border="1"
  −
!  System version
  −
!  Old3DS title-version
  −
!  Old3DS hex title contentID
  −
!  Kernel/FIRM version (Old3DS/New3DS)
  −
|-
  −
| [[1.0.0-0]]
  −
| v432
  −
| 00
  −
| 2.27-0
  −
|-
  −
| [[1.1.0-1]]
  −
| v1472
  −
| 02
  −
| 2.28-0
  −
|-
  −
| [[2.0.0-2]]
  −
| v2516
  −
| 09
  −
| 2.29-7
  −
|-
  −
| [[2.1.0-3]]
  −
| v3553
  −
| 0B
  −
| 2.30-18
  −
|-
  −
| [[2.2.0-X]]
  −
| v4595
  −
| 0F
  −
| 2.31-40
  −
|-
  −
| [[3.0.0-5]]
  −
| v5647
  −
| 18
  −
| 2.32-15
  −
|-
  −
| [[4.0.0-7]]
  −
| v6677
  −
| 1D
  −
| 2.33-4
  −
|-
  −
| [[4.1.0-8]]
  −
| v7712
  −
| 1F
  −
| 2.34-0
  −
|-
  −
| [[5.0.0-11]]
  −
| v8758
  −
| 25
  −
| 2.35-6
  −
|-
  −
| [[5.1.0-11]]
  −
| v9792
  −
| 26
  −
| 2.36-0
  −
|-
  −
| [[6.0.0-11]]
  −
| v10833
  −
| 29
  −
| 2.37-0
  −
|-
  −
| [[6.1.0-11]]
  −
| v11872
  −
| 2A
  −
| 2.38-0
  −
|-
  −
| [[7.0.0-13]]
  −
| v12916
  −
| 2E
  −
| 2.39-4
  −
|-
  −
| [[7.2.0-17]]
  −
| v13956
  −
| 30
  −
| 2.40-0
  −
|-
  −
| [[8.0.0-18]]
  −
| v15047
  −
| 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>.
+
See [[FIRM#NATIVE_FIRM|FIRM]].
516

edits

Navigation menu