<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.3dbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=PSI</id>
	<title>3dbrew - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.3dbrew.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=PSI"/>
	<link rel="alternate" type="text/html" href="https://www.3dbrew.org/wiki/Special:Contributions/PSI"/>
	<updated>2026-04-15T22:20:13Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Configuration_Memory&amp;diff=21304</id>
		<title>Configuration Memory</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Configuration_Memory&amp;diff=21304"/>
		<updated>2020-06-23T21:19:59Z</updated>

		<summary type="html">&lt;p&gt;PSI: Add information on where the MAC address comes from.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ARM11 Kernel Configuration Memory =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  NAME&lt;br /&gt;
!  PROCESS VIRTUAL ADDRESS&lt;br /&gt;
!  WIDTH&lt;br /&gt;
|-&lt;br /&gt;
| KERNEL_?&lt;br /&gt;
| 0x1FF80000&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| KERNEL_VERSIONREVISION&lt;br /&gt;
| 0x1FF80001&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| KERNEL_VERSIONMINOR&lt;br /&gt;
| 0x1FF80002&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| KERNEL_VERSIONMAJOR&lt;br /&gt;
| 0x1FF80003&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| UPDATEFLAG&lt;br /&gt;
| 0x1FF80004&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| NSTID&lt;br /&gt;
| 0x1FF80008&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| SYSCOREVER&lt;br /&gt;
| 0x1FF80010&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| ENVINFO&lt;br /&gt;
| 0x1FF80014&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| UNITINFO&lt;br /&gt;
| 0x1FF80015&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| PREV_FIRM&lt;br /&gt;
| 0x1FF80016&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| KERNEL_CTRSDKVERSION&lt;br /&gt;
| 0x1FF80018&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| FIRMLAUNCHFLAGS&lt;br /&gt;
| 0x1FF8001C&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| APPMEMTYPE&lt;br /&gt;
| 0x1FF80030&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| APPMEMALLOC&lt;br /&gt;
| 0x1FF80040&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| SYSMEMALLOC&lt;br /&gt;
| 0x1FF80044&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| BASEMEMALLOC&lt;br /&gt;
| 0x1FF80048&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| FIRM_?&lt;br /&gt;
| 0x1FF80060&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| FIRM_VERSIONREVISION&lt;br /&gt;
| 0x1FF80061&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| FIRM_VERSIONMINOR&lt;br /&gt;
| 0x1FF80062&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| FIRM_VERSIONMAJOR&lt;br /&gt;
| 0x1FF80063&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| FIRM_SYSCOREVER&lt;br /&gt;
| 0x1FF80064&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| FIRM_CTRSDKVERSION&lt;br /&gt;
| 0x1FF80068&lt;br /&gt;
| 4&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This memory page is mapped as &amp;quot;shared device&amp;quot; (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.&lt;br /&gt;
&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
Besides mem-region related fields, the data written here by the old 3DS/new 3DS kernels is identical.&lt;br /&gt;
&lt;br /&gt;
= Shared Memory Page For ARM11 Processes =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  NAME&lt;br /&gt;
!  PROCESS VIRTUAL ADDRESS&lt;br /&gt;
!  WIDTH&lt;br /&gt;
|-&lt;br /&gt;
| bit0 selects DATETIME_0 or DATETIME_1.&lt;br /&gt;
| 0x1FF81000&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| RUNNING_HW (1=product, 2=devboard, 3=debugger, 4=capture, 5=?)&lt;br /&gt;
| 0x1FF81004&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| MCU_HW_INFO&lt;br /&gt;
| 0x1FF81005&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| ? (Set by PTM) Possibe values are 2, 4, 6, 7, 8 and 9&lt;br /&gt;
| 0x1FF81006&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 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}&lt;br /&gt;
| 0x1FF81020&lt;br /&gt;
| 32&lt;br /&gt;
|-&lt;br /&gt;
| DATETIME_1&lt;br /&gt;
| 0x1FF81040&lt;br /&gt;
| 32&lt;br /&gt;
|-&lt;br /&gt;
| WIFI_MACADDR&lt;br /&gt;
| 0x1FF81060&lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| 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]].&lt;br /&gt;
| 0x1FF81066&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| NETWORK_STATE The network state displayed by [[Home Menu]]. 2: Internet, 3/4/6: Local, 7: Disabled, Everything else: Enabled&lt;br /&gt;
| 0x1FF81067&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 3D_SLIDERSTATE&lt;br /&gt;
| 0x1FF81080&lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| 3D_LEDSTATE&lt;br /&gt;
| 0x1FF81084&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| BATTERY_LEDSTATE&lt;br /&gt;
| 0x1FF81085&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| 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.&lt;br /&gt;
| 0x1FF81086&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| MENUTID&lt;br /&gt;
| 0x1FF810A0&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| ACTIVEMENUTID&lt;br /&gt;
| 0x1FF810A8&lt;br /&gt;
| 8&lt;br /&gt;
|-&lt;br /&gt;
| Signed? Headsets connected?&lt;br /&gt;
| 0x1FF810C0&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This memory page is normally read-only for ARM11 processes, write-access is [[Memory_layout|determined]] by the process exheader kernel &amp;quot;shared page writing&amp;quot; flag. It is mapped as &amp;quot;shared device&amp;quot; (it is thus uncached) in both cases.&lt;br /&gt;
&lt;br /&gt;
This memory only exists under NATIVE_FIRM/SAFE_MODE_FIRM.&lt;br /&gt;
&lt;br /&gt;
= ARM11 Kernel Config Fields =&lt;br /&gt;
&lt;br /&gt;
== 0x1FF80000 / 0x1FF80060 ==&lt;br /&gt;
Unknown, this is normally value 0.&lt;br /&gt;
&lt;br /&gt;
== KERNEL_VERSIONREVISION / FIRM_VERSIONREVISION ==&lt;br /&gt;
This is the version-revision for the currently running [[FIRM]].&lt;br /&gt;
&lt;br /&gt;
== KERNEL_VERSIONMINOR ==&lt;br /&gt;
This is the version-minor from ((title-version &amp;amp; 0x3FF) &amp;gt;&amp;gt; 4), for the currently running [[FIRM]]. The values from KERNEL_VERSIONMINOR and KERNEL_VERSIONMAJOR can be stored in applications&#039; [[NCCH#CXI|CXI]] exheader.&lt;br /&gt;
&lt;br /&gt;
== FIRM_VERSIONMINOR ==&lt;br /&gt;
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 &amp;amp; 0x3FF) &amp;gt;&amp;gt; 4), when the latter is larger than FIRM_VERSIONMINOR [[AM:InstallNATIVEFIRM]] will trigger a [[FIRM]] install.&lt;br /&gt;
&lt;br /&gt;
== KERNEL_VERSIONMAJOR / FIRM_VERSIONMAJOR ==&lt;br /&gt;
This is the version-major for the currently running [[FIRM]].&lt;br /&gt;
&lt;br /&gt;
The kernel initializes KERNEL_VERSIONMAJOR and SYSCOREVER with the same constant value.&lt;br /&gt;
&lt;br /&gt;
== UPDATEFLAG ==&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
== NSTID ==&lt;br /&gt;
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]].&lt;br /&gt;
&lt;br /&gt;
== SYSCOREVER ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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?&lt;br /&gt;
&lt;br /&gt;
== FIRM_SYSCOREVER ==&lt;br /&gt;
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&#039;t match, [[AM:InstallNATIVEFIRM]] will return an error.&lt;br /&gt;
&lt;br /&gt;
== ENVINFO ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Clear for developer unit, set for retail.(See 0x1FF80015)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| IsJtagConnected&lt;br /&gt;
|-&lt;br /&gt;
| 2-7&lt;br /&gt;
|?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== UNITINFO ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Boot Env&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Prod&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Dev&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Debugger&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Firm&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
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&amp;lt;&amp;gt;ARM11 kernel sync.&lt;br /&gt;
&lt;br /&gt;
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 &amp;quot;firm&amp;quot; modes (bit1).&lt;br /&gt;
&lt;br /&gt;
== PREV_FIRM ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Cold Boot&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Reset from CTR mode&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Reset from TWL mode&lt;br /&gt;
|-&lt;br /&gt;
| 5&lt;br /&gt;
| Reset from NTR mode&lt;br /&gt;
|-&lt;br /&gt;
| 7&lt;br /&gt;
| Reset from AGB mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The ARM11 loads this value from 0x1FFFFFF0+2 during startup, which is written by the ARM9 during ARM9&amp;lt;&amp;gt;ARM11 kernel sync.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== KERNEL_CTRSDKVERSION / FIRM_CTRSDKVERSION ==&lt;br /&gt;
This is the CTR-SDK version which was used to build the currently running [[FIRM]].&lt;br /&gt;
&lt;br /&gt;
== APPMEMTYPE ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== APPMEMALLOC ==&lt;br /&gt;
This contains the total size of the memory that can be allocated with the APPLICATION [[SVC|memory-region]], see [[Memory_layout|here]].&lt;br /&gt;
&lt;br /&gt;
== SYSMEMALLOC ==&lt;br /&gt;
Same as APPMEMALLOC except for the SYSTEM mem-region, see [[Memory_layout|here]].&lt;br /&gt;
&lt;br /&gt;
== BASEMEMALLOC ==&lt;br /&gt;
Same as APPMEMALLOC except for the BASE mem-region, see [[Memory_layout|here]].&lt;br /&gt;
&lt;br /&gt;
= Shared Memory Page Fields =&lt;br /&gt;
&lt;br /&gt;
== WIFI_MACADDR ==&lt;br /&gt;
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&#039;s EEPROM.&lt;br /&gt;
&lt;br /&gt;
== 3D_SLIDERSTATE ==&lt;br /&gt;
This float contains the state of the 3D slider. The range of this float is value 0.0f for &amp;quot;off&amp;quot;, and 1.0f for max.&lt;br /&gt;
&lt;br /&gt;
This is written/updated by [[HID_Services|HID]] module.&lt;br /&gt;
&lt;br /&gt;
== 3D_LEDSTATE ==&lt;br /&gt;
When non-zero, the 3D LED is disabled. See [[GSPGPU:SetLedForceOff]].&lt;br /&gt;
&lt;br /&gt;
== BATTERY_LEDSTATE ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== MENUTID ==&lt;br /&gt;
Unknown, contains the menu TID (used by [[NS]])&lt;br /&gt;
&lt;br /&gt;
== ACTIVEMENUTID ==&lt;br /&gt;
This contains the titleID of the currently running menu launched by [[NS]].&lt;br /&gt;
&lt;br /&gt;
= NATIVE_FIRM Versions =&lt;br /&gt;
&lt;br /&gt;
See [[FIRM#NATIVE_FIRM|FIRM]].&lt;/div&gt;</summary>
		<author><name>PSI</name></author>
	</entry>
</feed>