<?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=Valentinvanelslande</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=Valentinvanelslande"/>
	<link rel="alternate" type="text/html" href="https://www.3dbrew.org/wiki/Special:Contributions/Valentinvanelslande"/>
	<updated>2026-04-09T12:55:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=MCURTC:SetInfoLEDPattern&amp;diff=20707</id>
		<title>MCURTC:SetInfoLEDPattern</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=MCURTC:SetInfoLEDPattern&amp;diff=20707"/>
		<updated>2018-06-05T01:05:41Z</updated>

		<summary type="html">&lt;p&gt;Valentinvanelslande: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x003B0640]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Animation&lt;br /&gt;
|-&lt;br /&gt;
| 2-9&lt;br /&gt;
| u8[32] Red pattern&lt;br /&gt;
|-&lt;br /&gt;
| 10-17&lt;br /&gt;
| u8[32] Green pattern&lt;br /&gt;
|-&lt;br /&gt;
| 18-25&lt;br /&gt;
| u8[32] Blue pattern&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
This is used for controlling (including blinking) the notification LED. MCU module uses [[I2C_Services|I2C]] service command 0x001100C2 to write the input 0x64-bytes to MCU [[I2C]] register 0x2D.&lt;br /&gt;
&lt;br /&gt;
=Animation=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  u8 delay&lt;br /&gt;
!  u8 smoothing&lt;br /&gt;
!  u8 loop_delay&lt;br /&gt;
!  u8 ???&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;delay = seconds * 0x10&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Since this data is represented in a u8, the precision is 1/16th of a second (0x01) and the maximum delay time is 15.9375 seconds (0xFF).&lt;br /&gt;
&lt;br /&gt;
If set to 0x00, only the first value of the pattern is played. (?)&lt;br /&gt;
| The lower the value is, the less smoothing is applied to the pattern. Here is a visual approximation of how the smoothing works: [https://i.imgur.com/ZxdPbIw.png Smooth function.]&lt;br /&gt;
| &#039;&#039;loop_delay = seconds * 0x10&#039;&#039;&lt;br /&gt;
Since this data is represented in a u8, the precision is 1/16th of a second (0x01) and the maximum delay time is 15.875 seconds (0xFE).&lt;br /&gt;
&lt;br /&gt;
If set to 0x00, there is no loop delay.&lt;br /&gt;
&lt;br /&gt;
If set to 0xFF, the pattern is played only once.&lt;br /&gt;
| ???&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Valentinvanelslande</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=NEWSS:SetInfoLEDPattern&amp;diff=20706</id>
		<title>NEWSS:SetInfoLEDPattern</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=NEWSS:SetInfoLEDPattern&amp;diff=20706"/>
		<updated>2018-06-04T15:12:01Z</updated>

		<summary type="html">&lt;p&gt;Valentinvanelslande: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Request=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code [0x000E0040]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| u32 array index, internally this is handled as an u8. When a certain state field is zero, news-module internally sets bit0 in this index, otherwise bit0 is cleared.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Response=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index Word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Header code&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Result code&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Description=&lt;br /&gt;
This uses the input array index value to load data from an array, the loaded data is then used with [[PTMSYSM:SetInfoLEDPattern]].&lt;br /&gt;
&lt;br /&gt;
The array index is not validated at all. Using out-of-bounds values &#039;&#039;should not be attempted at all&#039;&#039;, since invalid data with [[PTMSYSM:SetInfoLEDPattern]] can cause a [[MCU_Services|brick]].&lt;/div&gt;</summary>
		<author><name>Valentinvanelslande</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Extdata&amp;diff=20672</id>
		<title>Extdata</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Extdata&amp;diff=20672"/>
		<updated>2018-04-12T20:49:31Z</updated>

		<summary type="html">&lt;p&gt;Valentinvanelslande: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page describes the format and encryption of extdata, &amp;amp;quot;extra data&amp;amp;quot; stored on SD card and NAND, at:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;nand/data/&amp;amp;lt;ID&amp;amp;gt;/extdata/&amp;amp;lt;ExtdataID-High&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sdmc/Nintendo 3DS/&amp;amp;lt;ID0&amp;amp;gt;/&amp;amp;lt;ID1&amp;amp;gt;/extdata/&amp;amp;lt;ExtdataID-High&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ExtdataID-High is always 00000000 for SD, and always 00048000 for NAND. Regular apps can only mount SD extdata using the same extdataID which is stored in the CXI exheader. Therefore, regular apps which have the exheader extdataID set to zero can&#039;t use extdata. This restriction doesn&#039;t apply for shared extdata with extdataID high bitmask 0x48000 stored on NAND. System apps with a certain access right can mount arbitrary extdata. All NAND extdata is shared extdata, while all SD extdata is normal extdata.&lt;br /&gt;
&lt;br /&gt;
All data in this page is little-endian. All &amp;amp;quot;unused / padding&amp;amp;quot; fields can contain uninitialized data unless otherwise specified.&lt;br /&gt;
&lt;br /&gt;
= Format =&lt;br /&gt;
&lt;br /&gt;
To avoid confusion, the terms &#039;&#039;&#039;device directory / file&#039;&#039;&#039; and &#039;&#039;&#039;virtual directory / file&#039;&#039;&#039; are used with the following meanings:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Device directory / file&#039;&#039;&#039; are the real directory / file stored on SD / NAND that can be seen under path &amp;lt;code&amp;gt;nand/data/&amp;amp;lt;ID&amp;amp;gt;/extdata/&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;sdmc/Nintendo 3DS/&amp;amp;lt;ID0&amp;amp;gt;/&amp;amp;lt;ID1&amp;amp;gt;/extdata/&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &#039;&#039;&#039;Virtual directory / file&#039;&#039;&#039; are directory / file stored inside extdata virtual file system, which can be seen by applications in the mounted extdata archives.&lt;br /&gt;
&lt;br /&gt;
An extdata consists of several device directories and files, which forms a file system consisting of multiple virtual directories and files.&lt;br /&gt;
&lt;br /&gt;
An extdata with ID &amp;lt;code&amp;gt;ExtdataId&amp;lt;/code&amp;gt; has the following device files:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;.../extdata/&amp;amp;lt;ExtdataID-High&amp;amp;gt;/&amp;amp;lt;ExtdataId-Low&amp;amp;gt;/Quota.dat&amp;lt;/code&amp;gt; (optional)&lt;br /&gt;
* &amp;lt;code&amp;gt;.../extdata/&amp;amp;lt;ExtdataID-High&amp;amp;gt;/&amp;amp;lt;ExtdataId-Low&amp;amp;gt;/&amp;amp;lt;SubDirID&amp;amp;gt;/&amp;amp;lt;SubFileID&amp;amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
&lt;br /&gt;
* All device files are [[DISA and DIFF|DIFF containers]]. &#039;&#039;&#039;All format description below is about the inner content of the containers&#039;&#039;&#039;. Please unwrap these files first according to the DIFF format description before reading them using the extdata format description below.&lt;br /&gt;
* &amp;lt;code&amp;gt;Quota.dat&amp;lt;/code&amp;gt; is only observed existing for NAND shared extdata.&lt;br /&gt;
* &amp;lt;code&amp;gt;&amp;amp;lt;SubDirID&amp;amp;gt;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;lt;SubFileID&amp;amp;gt;&amp;lt;/code&amp;gt; are 8-digit hex strings.&lt;br /&gt;
* Device file with &amp;lt;code&amp;gt;SubDirID = SubFileID = 00000000&amp;lt;/code&amp;gt; doesn&#039;t exist. Other ID combinations can exists.&lt;br /&gt;
* Device file with &amp;lt;code&amp;gt;SubDirID = 00000000&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;SubFileID = 00000001&amp;lt;/code&amp;gt; is the VSXE metadata file and must exist.&lt;br /&gt;
* Other files, besides &amp;lt;code&amp;gt;Quota.dat&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;00000000/00000001&amp;lt;/code&amp;gt;, are normal sub files, are these device files one-to-one correspond to virtual files. They contain raw virtual file data in the DIFF inner content.&lt;br /&gt;
* &amp;lt;code&amp;gt;SubDirID = 00000000&amp;lt;/code&amp;gt; is usually the only one device directory that can be seen. See [[#Device Directory Capacity]] for more information.&lt;br /&gt;
&lt;br /&gt;
== Quota File ==&lt;br /&gt;
&lt;br /&gt;
The inner data of &amp;lt;code&amp;gt;Quota.dat&amp;lt;/code&amp;gt; is 0x48 bytes with the following format. The exact function of this file is unclear.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Magic &amp;amp;quot;QUOT&amp;amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Magic 0x30000&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 4&lt;br /&gt;
| 0x1000, block size?&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C&lt;br /&gt;
| 4&lt;br /&gt;
| Always 126. Probably device directory capacity. See the [[#Device Directory Capacity]] more information.&lt;br /&gt;
|-&lt;br /&gt;
| ...&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
| The meaning of other fields is unknown&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Device Directory Capacity ==&lt;br /&gt;
&lt;br /&gt;
A device directory in an extdata (a &amp;lt;code&amp;gt;&amp;amp;lt;SubDirID&amp;amp;gt;&amp;lt;/code&amp;gt; directory) seems to have a maximum number of device files it can contain. For SD extdata, this maximum number seems to be hard-coded as 126. For NAND extdata, the number is probably indicated by a field in Quota.dat, which is, again, always 126 as observed. 3DS FS tries to put all device files in the device directory &amp;lt;code&amp;gt;00000000&amp;lt;/code&amp;gt; if possible, and only when more than 126 files needed to add, a second device directory &amp;lt;code&amp;gt;00000001&amp;lt;/code&amp;gt; and so on are created. However, few extdata have such amount of files to store, so the behavior lacks of use cases to confirm.&lt;br /&gt;
&lt;br /&gt;
The number 126 is probably from some kind of other capacity of 128 with &amp;lt;code&amp;gt;&amp;amp;quot;.&amp;amp;quot;&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;&amp;amp;quot;..&amp;amp;quot;&amp;lt;/code&amp;gt; entries reserved. It is theorized that this is to keep a FAT directory table, with 0x20 bytes for each entry, in one 0x1000 cluster. The motivation is unclear.&lt;br /&gt;
&lt;br /&gt;
== VSXE File System Metadata ==&lt;br /&gt;
&lt;br /&gt;
The inner data of &amp;lt;code&amp;gt;00000000/00000001&amp;lt;/code&amp;gt; consists of the following components&lt;br /&gt;
&lt;br /&gt;
* VSXE header&lt;br /&gt;
* Directory Hash Table&lt;br /&gt;
* File Hash Table&lt;br /&gt;
* File Allocation Table&lt;br /&gt;
* Data region&lt;br /&gt;
** Directory Entry Table&lt;br /&gt;
** File Entry Table&lt;br /&gt;
&lt;br /&gt;
=== VSXE Header ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Magic &amp;amp;quot;VSXE&amp;amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 4&lt;br /&gt;
| Magic 0x30000&lt;br /&gt;
|-&lt;br /&gt;
| 0x08&lt;br /&gt;
| 8&lt;br /&gt;
| File system Information offset (0x138)&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 8&lt;br /&gt;
| Image size in blocks&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Image block size&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 8&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 4&lt;br /&gt;
| &#039;Action&#039; made on most recently mounted Extdata image&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 4&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x30&lt;br /&gt;
| 4&lt;br /&gt;
| D of most recently mounted Extdata image&lt;br /&gt;
|-&lt;br /&gt;
| 0x34&lt;br /&gt;
| 4&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x38&lt;br /&gt;
| 0x100&lt;br /&gt;
| Mount path, from most recently mounted Extdata image&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
| Below is File system Information, which is assumed following the same layout as [[Savegames#SAVE Header&lt;br /&gt;
|-&lt;br /&gt;
| 0x138&lt;br /&gt;
| 4&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x13C&lt;br /&gt;
| 4&lt;br /&gt;
| Data region block size&lt;br /&gt;
|-&lt;br /&gt;
| 0x140&lt;br /&gt;
| 8&lt;br /&gt;
| Directory hash table offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x148&lt;br /&gt;
| 4&lt;br /&gt;
| Directory hash table bucket count&lt;br /&gt;
|-&lt;br /&gt;
| 0x14C&lt;br /&gt;
| 4&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x150&lt;br /&gt;
| 8&lt;br /&gt;
| File hash table offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x158&lt;br /&gt;
| 4&lt;br /&gt;
| File hash table bucket count&lt;br /&gt;
|-&lt;br /&gt;
| 0x15C&lt;br /&gt;
| 4&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x160&lt;br /&gt;
| 8&lt;br /&gt;
| File allocation table offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x168&lt;br /&gt;
| 4&lt;br /&gt;
| File allocation table entry count&lt;br /&gt;
|-&lt;br /&gt;
| 0x16C&lt;br /&gt;
| 4&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x170&lt;br /&gt;
| 8&lt;br /&gt;
| Data region offset&lt;br /&gt;
|-&lt;br /&gt;
| 0x178&lt;br /&gt;
| 4&lt;br /&gt;
| Data region block count (= File allocation table entry count)&lt;br /&gt;
|-&lt;br /&gt;
| 0x17C&lt;br /&gt;
| 4&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x180&lt;br /&gt;
| 4&lt;br /&gt;
| Directory entry table starting block&lt;br /&gt;
|-&lt;br /&gt;
| 0x184&lt;br /&gt;
| 4&lt;br /&gt;
| Directory entry table block count&lt;br /&gt;
|-&lt;br /&gt;
| 0x188&lt;br /&gt;
| 4&lt;br /&gt;
| Maximum directory count&lt;br /&gt;
|-&lt;br /&gt;
| 0x18C&lt;br /&gt;
| 4&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x190&lt;br /&gt;
| 4&lt;br /&gt;
| File entry table starting block&lt;br /&gt;
|-&lt;br /&gt;
| 0x194&lt;br /&gt;
| 4&lt;br /&gt;
| File entry table block count&lt;br /&gt;
|-&lt;br /&gt;
| 0x198&lt;br /&gt;
| 4&lt;br /&gt;
| Maximum file count&lt;br /&gt;
|-&lt;br /&gt;
| 0x19C&lt;br /&gt;
| 4&lt;br /&gt;
| Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* All &amp;amp;quot;offsets&amp;amp;quot; are relative to the beginning of VSXE image. All &amp;amp;quot;starting block index&amp;amp;quot; are relative to the beginning of data region.&lt;br /&gt;
&lt;br /&gt;
=== File Allocation Table &amp;amp;amp; Data Region ===&lt;br /&gt;
&lt;br /&gt;
These function in the same way as [[Savegames#File Allocation Table|the file allocation in savegames]]. However, the only two &amp;amp;quot;files&amp;amp;quot; allocated in the data region are the directory entry table and file entry table, so the data region is usually pretty small, and the file allocation table is unchanged once created and has no free blocks. Thus, the offset and size of directory / file entry table can be found directly by &amp;lt;code&amp;gt;offset = entry_table_starting block * data_region_block_size + data_region_offset&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;size = entry_table_block_count * data_region_block_size&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Directory Hash Table &amp;amp;amp; File Hash Table ===&lt;br /&gt;
&lt;br /&gt;
These function in the same way as [[Savegames#Directory Hash Table &amp;amp;amp; File Hash Table|those in savegames]]&lt;br /&gt;
&lt;br /&gt;
=== Directory Entry Table ===&lt;br /&gt;
&lt;br /&gt;
This functions in the same way as [[Savegames#Directory Entry Table|the one in savegames]]. It lists all virtual directories in this extdata.&lt;br /&gt;
&lt;br /&gt;
=== File Entry Table ===&lt;br /&gt;
&lt;br /&gt;
This functions in a similar way as [[Savegames#File Entry Table|the one in savegames]]. It lists all virtual files in this extdata. However, the format of a (non-dummy) file entry is a little bit modified:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Offset&lt;br /&gt;
! Length&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x00&lt;br /&gt;
| 4&lt;br /&gt;
| Parent directory index in directory entry table&lt;br /&gt;
|-&lt;br /&gt;
| 0x04&lt;br /&gt;
| 16&lt;br /&gt;
| ASCII file name&lt;br /&gt;
|-&lt;br /&gt;
| 0x14&lt;br /&gt;
| 4&lt;br /&gt;
| Next sibling file index. 0 if this is the last one&lt;br /&gt;
|-&lt;br /&gt;
| 0x18&lt;br /&gt;
| 4&lt;br /&gt;
| Padding&lt;br /&gt;
|-&lt;br /&gt;
| 0x1C&lt;br /&gt;
| 4&lt;br /&gt;
| &amp;lt;s&amp;gt;First block index in data region&amp;lt;/s&amp;gt; &#039;&#039;&#039;Always 0x80000000 because unused&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x20&lt;br /&gt;
| 8&lt;br /&gt;
| &amp;lt;s&amp;gt;File size&amp;lt;/s&amp;gt; &#039;&#039;&#039;Unique identifier&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| 0x28&lt;br /&gt;
| 4&lt;br /&gt;
| Padding?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2C&lt;br /&gt;
| 4&lt;br /&gt;
| Index of the next file in the same hash table bucket. 0 if this is the last one&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Each non-dummy file entry corresponds to a device file. The path to the device file is generated by the following computation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;// See previous section about this capacity&lt;br /&gt;
const uint32_t device_dir_capacity = 126;&lt;br /&gt;
&lt;br /&gt;
// entry index is the index in the file entry table, with the first dummy entry as&lt;br /&gt;
// index = 0, which is never used for a real file.&lt;br /&gt;
// file_index = 1 is reserved for the VSXE Filesystem Metadata itself, so real files&lt;br /&gt;
// started from file_index = 2.&lt;br /&gt;
uint32_t file_index = entry_index + 1;&lt;br /&gt;
&lt;br /&gt;
uint32_t SubDirID = file_index / device_dir_capacity;&lt;br /&gt;
uint32_t SubFileID = file_index % pdevice_dir_capacity;&lt;br /&gt;
&lt;br /&gt;
char extdata_path[...]; // &amp;amp;quot;.../extdata/&amp;amp;lt;ExtdataID-High&amp;amp;gt;/&amp;amp;lt;ExtdataId-Low&amp;amp;gt;&amp;amp;quot;&lt;br /&gt;
char device_path[...]; // output path&lt;br /&gt;
sprintf(device_path, &amp;amp;quot;%s/%08x/%08x&amp;amp;quot;, extdata_path, SubDirID, SubFileID);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
When mounting extdata, the unique identifier is used to match the ID stored in subfile&#039;s [[DISA and DIFF#DIFF header|DIFF header]]. If the ID doesn&#039;t match, mounting will fail.&lt;br /&gt;
&lt;br /&gt;
== Virtual File System Structure ==&lt;br /&gt;
&lt;br /&gt;
When extdata is created, these are &#039;&#039;always&#039;&#039; created regardless of whether the title actually uses them.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/icon&amp;lt;/code&amp;gt; This virtual file contains the extdata icon displayed in data management. This icon can only be written to by titles when creating extdata, titles would have to recreate extdata to change the icon. This file can&#039;t be read directly, instead it is read via FS:ReadExtSaveDataIcon.&lt;br /&gt;
* &amp;lt;code&amp;gt;/user/&amp;lt;/code&amp;gt; This virtual directory contains the title&#039;s actual extdata files.&lt;br /&gt;
* &amp;lt;code&amp;gt;/boss/&amp;lt;/code&amp;gt; This virtual directory can contain SpotPass content. SpotPass content can only be downloaded to this &amp;lt;code&amp;gt;/boss&amp;lt;/code&amp;gt; virtual directory.&lt;br /&gt;
&lt;br /&gt;
User extdata and SpotPass extdata use separate mount points at &amp;lt;code&amp;gt;/user&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/boss&amp;lt;/code&amp;gt;. Therefore one mount can&#039;t access the other virtual directory, and also can&#039;t access &amp;lt;code&amp;gt;/icon&amp;lt;/code&amp;gt;.(The title&#039;s SpotPass extdata can be mounted by the title itself, if it uses SpotPass)&lt;br /&gt;
&lt;br /&gt;
Other optional but notable directories include:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/user/ExBanner&amp;lt;/code&amp;gt; This virtual directory can optionally store extended banners. When this is available, this banner is displayed instead of the CXI ExeFS banner. &amp;lt;code&amp;gt;COMMON.bin&amp;lt;/code&amp;gt; stores the common exbanner, while &amp;lt;code&amp;gt;&amp;amp;lt;regionlang_code&amp;amp;gt;.bin&amp;lt;/code&amp;gt; stores an optional separate region/language specific banner.(regionlang_code can be &amp;amp;quot;JPN_JP&amp;amp;quot;, &amp;amp;quot;USA_EN&amp;amp;quot;, etc)&lt;br /&gt;
&lt;br /&gt;
== SD Extdata ==&lt;br /&gt;
Usually the ExtdataID low is in the format &#039;00&amp;lt;Unique ID&amp;gt;&#039;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! JPN ExtdataID&lt;br /&gt;
! USA ExtdataID&lt;br /&gt;
! EUR ExtdataID&lt;br /&gt;
! Description&lt;br /&gt;
! Extdata images&lt;br /&gt;
|-&lt;br /&gt;
| 00000082&lt;br /&gt;
| 0000008f&lt;br /&gt;
| 00000098&lt;br /&gt;
| [[Home Menu]] extdata, this contains home-menu savedata and cached icons for applications.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 00000200&lt;br /&gt;
| 00000210&lt;br /&gt;
| 00000220&lt;br /&gt;
| [[System_Settings|System Settings]] extdata added with [[2.0.0-2]].&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 00000207&lt;br /&gt;
| 00000217&lt;br /&gt;
| 00000227&lt;br /&gt;
| [[Mii Maker]], contains an ExBanner&lt;br /&gt;
| [https://dl.dropbox.com/u/20520664/extdata00000217.zip cleartext]&lt;br /&gt;
|-&lt;br /&gt;
| 00000208&lt;br /&gt;
| 00000218&lt;br /&gt;
| 00000228&lt;br /&gt;
| Streetpass Mii Plaza&lt;br /&gt;
| 11 mb big!&lt;br /&gt;
|-&lt;br /&gt;
| 00000209&lt;br /&gt;
| 00000219&lt;br /&gt;
| 00000229&lt;br /&gt;
| [[eShop]], contains store music in AAC format.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0000020b&lt;br /&gt;
| 0000021b&lt;br /&gt;
| 0000022b&lt;br /&gt;
| Nintendo Zone&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0000020d&lt;br /&gt;
| 0000021d&lt;br /&gt;
| 0000022d&lt;br /&gt;
| Face Raiders, likely contains an ExBanner&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 000002cc&lt;br /&gt;
| 000002cd&lt;br /&gt;
| 000002ce&lt;br /&gt;
| [[Home Menu]] theme&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| 000004aa&lt;br /&gt;
| 000004ab&lt;br /&gt;
| Nintendo Video Extra Data&lt;br /&gt;
This is where the video files are stored, and [[Nintendo_Video|includes]] the thumbnail, the description, and possibly some checksum info in each video file stored in the extdata images. There are always 9 files within the subdirectory &amp;quot;00000000&amp;quot; of this folder, even without any videos downloaded. The files are &amp;quot;00000001&amp;quot; - &amp;quot;00000009&amp;quot;, and &amp;quot;00000003&amp;quot; - &amp;quot;00000008&amp;quot; have the same filesize of 50.7 MB. It is possible to restore the older videos by overwriting all the files within this directory. Provided of course you have made a backup of the files before hand, by copying all the files within this directory to your computer. As far I&#039;m aware its not possible to mix and match the files in order to get certain videos in one grouping, ie. having all 3 Zelda orchestral recordings in one group of 4 Nintendo videos.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
|00000306&lt;br /&gt;
|00000308&lt;br /&gt;
|00000307&lt;br /&gt;
|Mario Kart 7&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 0000030b&lt;br /&gt;
| 0000030d&lt;br /&gt;
| 0000030c&lt;br /&gt;
| Nintendogs + Cats&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 00000326&lt;br /&gt;
| 00000326&lt;br /&gt;
| 00000326&lt;br /&gt;
| Pokédex 3D&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 00000305&lt;br /&gt;
| 0000032d&lt;br /&gt;
| 0000033c&lt;br /&gt;
| Super Street Fighter IV 3D&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 00000328&lt;br /&gt;
| 00000358&lt;br /&gt;
| 0000033b&lt;br /&gt;
| Ridge Racer 3D&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| 0000034d&lt;br /&gt;
| 00000402&lt;br /&gt;
| Samurai Warriors Chronicles&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| 0000034f&lt;br /&gt;
| 0000038a&lt;br /&gt;
| Dead or Alive Dimensions&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 00000481&lt;br /&gt;
| N/A&lt;br /&gt;
| N/A&lt;br /&gt;
| Monster Hunter Tri G (Download-Quests)&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| 00000517&lt;br /&gt;
| 00000518&lt;br /&gt;
| Swapnote&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0000055d&lt;br /&gt;
| 0000055d&lt;br /&gt;
| 0000055d&lt;br /&gt;
| Pokémon X&amp;lt;br&amp;gt;Pokémon Y&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| 00000725&lt;br /&gt;
| 00000724&lt;br /&gt;
| Ambassador Certificate&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 000007af&lt;br /&gt;
| New Super Mario Bros. 2&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| 00000863&lt;br /&gt;
| 00000864&lt;br /&gt;
| Animal Crossing: New Leaf&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| 00000a85&lt;br /&gt;
| 00000a86&lt;br /&gt;
| Professor Layton and the Miracle Mask&amp;lt;br&amp;gt;Professor Layton and the Azran Legacy&lt;br /&gt;
German Version ExtdataID is 00000a87&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00000b4f&lt;br /&gt;
| Fullblox / Crashmo&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00000ba9&lt;br /&gt;
| Pokémon Mystery Dungeon: Gates to Infinity&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00000c24&lt;br /&gt;
| Denpa men&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 00000c73&lt;br /&gt;
| 00000c73&lt;br /&gt;
| 00000c73&lt;br /&gt;
| Save Data Transfer Tool&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00000d9a&lt;br /&gt;
| Donkey Kong Country™&amp;lt;br&amp;gt;Returns 3D: Trailer&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00000ea6&lt;br /&gt;
| Etrian Odyssey IV&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| 00000edf&lt;br /&gt;
| 00000ee0&lt;br /&gt;
| Super Smash Bros. for Nintendo 3DS&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| 00000f14&lt;br /&gt;
| 00000f1e&lt;br /&gt;
| Phoenix Wright: Ace Attorney - Dual Destinies&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| 00001007&lt;br /&gt;
| 00001005&lt;br /&gt;
| Professor Layton vs Phoenix Wright: Ace Attorney&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00001062&lt;br /&gt;
| Nintendo Pocket Football Club&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 0000111c&lt;br /&gt;
| Yoshi&#039;s New Island&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00001131&lt;br /&gt;
| Fantasy Life&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 000011c5&lt;br /&gt;
| 000011c5&lt;br /&gt;
| 000011c5&lt;br /&gt;
| Pokémon Omega Ruby&amp;lt;br&amp;gt;Pokémon Alpha Sapphire&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 000012ca&lt;br /&gt;
| Mario vs. Donkey Kong: Tipping Stars&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00001499&lt;br /&gt;
| Korg DSN-12&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 000014f2&lt;br /&gt;
| Animal Crossing: Happy Home Designer&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 000014d1&lt;br /&gt;
| 000014d1&lt;br /&gt;
| 000014d1&lt;br /&gt;
| [[Home Menu]] badge&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00001632&lt;br /&gt;
| Fullblox / Stretchmo&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00001646&lt;br /&gt;
| Pokémon Rumble World&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 00001648&lt;br /&gt;
| 00001648&lt;br /&gt;
| 00001648&lt;br /&gt;
| Pokémon Sun&amp;lt;br&amp;gt;Pokémon Moon&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0000165c&lt;br /&gt;
| 0000165c&lt;br /&gt;
| 0000165c&lt;br /&gt;
| [[Home Menu]] saved theme layouts&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00001678&lt;br /&gt;
| Yo-kai Watch&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 000018fa&lt;br /&gt;
| Phoenix Wright: Ace Attorney - Spirit of Justice&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 0000198f&lt;br /&gt;
| Animal Crossing: New Leaf - Welcome amiibo&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00001a05&lt;br /&gt;
| Super Mario Maker&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 00001a2e&lt;br /&gt;
| Swapdoodle&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== NAND Shared Extdata ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  ExtdataID&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0xe0000000&lt;br /&gt;
| Home Menu attempts to open this archive during boot, if [[FS:OpenArchive]] doesn&#039;t return an error Home Menu seems to then launch the [[System Transfer]] application. Home Menu doesn&#039;t actually use this archive at all except for checking whether it exists.&lt;br /&gt;
|-&lt;br /&gt;
|  0xf0000001&lt;br /&gt;
|  NAND JPEG/MPO files and phtcache.bin from the camera application are stored here. This also contains UploadData.dat.&lt;br /&gt;
|-&lt;br /&gt;
|  0xf0000002&lt;br /&gt;
|  NAND M4A files from the sound application are stored here&lt;br /&gt;
|-&lt;br /&gt;
|  0xf0000009&lt;br /&gt;
|  Used for [[BOSS_Services|SpotPass]] content storage for [[News_Services|notifications]].&lt;br /&gt;
|-&lt;br /&gt;
|  0xf000000b&lt;br /&gt;
|  Contains idb.dat, idbt.dat, gamecoin.dat, ubll.lst, CFL_DB.dat, and CFL_OldDB.dat. These files contain cleartext [[Mii_Maker|Miis]] and some data relating (including cached ICN data) to Play/Usage Records.&lt;br /&gt;
|-&lt;br /&gt;
|  0xf000000c&lt;br /&gt;
|  Contains bashotorya.dat and bashotorya2.dat.&lt;br /&gt;
|-&lt;br /&gt;
|  0xf000000d&lt;br /&gt;
|  Home Menu SpotPass content data [[BOSS_Services|storage]].&lt;br /&gt;
|-&lt;br /&gt;
|  0xf000000e&lt;br /&gt;
|  Contains [[VersionList|versionlist.dat]], used by Home Menu for the software update notification added with [[7.0.0-13]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Shared Extdata 0xf000000b gamecoin.dat ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Magic number: 0x4F00&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x2&lt;br /&gt;
| Total Play Coins&lt;br /&gt;
|-&lt;br /&gt;
| 0x6&lt;br /&gt;
| 0x2&lt;br /&gt;
| Total Play Coins obtained on the date stored below. When the below date does not match the current date, this field is reset to zero, then the date(and other fields) are updated. Once this value is &amp;gt;=10, no more Play Coins can be obtained until the current date changes.&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Total step [[PTM:GetTotalStepCount|count]] at the time a new Play Coin was obtained.&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Step count for the day the last Play Coin was obtained, for that day&#039;s step count(same as the step count displayed by home-menu when this file was updated).&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x2&lt;br /&gt;
| Year&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0x1&lt;br /&gt;
| Month&lt;br /&gt;
|-&lt;br /&gt;
| 0x13&lt;br /&gt;
| 0x1&lt;br /&gt;
| Day&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The above date stores the last time new Play Coin(s) were obtained. The contents of this file is updated by home-menu. [[PTM:GetTotalStepCount]] is not checked constantly, after home-menu boot this is only checked when waking from sleep-mode. Each time home-menu updates the contents of this file, home-menu will set the Play Coin total to 300 if it&#039;s higher than the 300 Play Coin limit.&lt;br /&gt;
&lt;br /&gt;
[[Home Menu]] loads this file / opens this archive during [[Home Menu|startup]]. When accessing this file fails, like when the file/archive is corrupted(or at least on older system-versions), the result is a brick due to Home Menu using [[SVC|svcBreak]]. [[User:Yellows8|Yellows8]] bricked a 3DS this way due to corruption via invalid [[FSFile:Write]] flush flags. When opening this extdata archive(0xf000000b) fails, Home Menu executes svcBreak.&lt;br /&gt;
&lt;br /&gt;
==== Shared Extdata 0xf000000b ubll.lst ====&lt;br /&gt;
List of blocked users.&lt;br /&gt;
&lt;br /&gt;
Empty space is filled with 0xC-long sequences of 00 00 ... 07&lt;br /&gt;
&lt;br /&gt;
=== Tools ===&lt;br /&gt;
&lt;br /&gt;
* [https://github.com/wwylele/3ds-save-tool 3ds-save-tool] - Extract/verifies extdata&lt;/div&gt;</summary>
		<author><name>Valentinvanelslande</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Filesystem_services&amp;diff=20669</id>
		<title>Filesystem services</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Filesystem_services&amp;diff=20669"/>
		<updated>2018-04-10T12:10:29Z</updated>

		<summary type="html">&lt;p&gt;Valentinvanelslande: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Services]]&lt;br /&gt;
&lt;br /&gt;
= Services =&lt;br /&gt;
== Filesystem service &amp;quot;fs:USER&amp;quot; ==&lt;br /&gt;
You can at most have 32 FS archive handles.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version &lt;br /&gt;
!  Description&lt;br /&gt;
!   scope=&amp;quot;col&amp;quot; width=&amp;quot;400&amp;quot; | Required [[NCCH/Extended_Header|exheader]] access info bitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0x000100C6&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:Dummy1|Dummy1]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x040100C4&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:Control|Control]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08010002&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:Initialize|Initialize]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x080201C2&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:OpenFile|OpenFile]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08030204&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:OpenFileDirectly|OpenFileDirectly]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08040142&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:DeleteFile|DeleteFile]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08050244&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:RenameFile|RenameFile]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08060142&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:DeleteDirectory|DeleteDirectory]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08070142&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:DeleteDirectoryRecursively|DeleteDirectoryRecursively]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08080202&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:CreateFile|CreateFile]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08090182&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:CreateDirectory|CreateDirectory]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x080A0244&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:RenameDirectory|RenameDirectory]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x080B0102&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:OpenDirectory|OpenDirectory]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x080C00C2&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:OpenArchive|OpenArchive]]&lt;br /&gt;
| Each archive ID code has separate access info bitmasks, if it has any&lt;br /&gt;
|-&lt;br /&gt;
| 0x080D0144&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:ControlArchive|ControlArchive]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x080E0080&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:CloseArchive|CloseArchive]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x080F0180&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:Obsoleted_2_0_FormatThisUserSaveData|Obsoleted_2_0_FormatThisUserSaveData]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08100200&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:Obsoleted_3_0_CreateSystemSaveData|Obsoleted_3_0_CreateSystemSaveData]]&lt;br /&gt;
| 0x4, for when the input saveID doesn&#039;t match the exheader saveID&lt;br /&gt;
|-&lt;br /&gt;
| 0x08110040&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:Obsoleted_3_0_DeleteSystemSaveData|Obsoleted_3_0_DeleteSystemSaveData]]&lt;br /&gt;
| 0x1004, for when the input saveID doesn&#039;t match the exheader saveID&lt;br /&gt;
|-&lt;br /&gt;
| 0x08120080&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetFreeBytes|GetFreeBytes]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08130000&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetCardType|GetCardType]]&lt;br /&gt;
| 0x1017&lt;br /&gt;
|-&lt;br /&gt;
| 0x08140000&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetSdmcArchiveResource|GetSdmcArchiveResource]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08150000&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetNandArchiveResource|GetNandArchiveResource]]&lt;br /&gt;
| 0x1007&lt;br /&gt;
|-&lt;br /&gt;
| 0x08160000&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetSdmcFatfsError|GetSdmcFatfsError]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08170000&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:IsSdmcDetected|IsSdmcDetected]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08180000&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:IsSdmcWritable|IsSdmcWritable]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08190042&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetSdmcCid|GetSdmcCid]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x081A0042&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetNandCid|GetNandCid]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x081B0000&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetSdmcSpeedInfo|GetSdmcSpeedInfo]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x081C0000&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetNandSpeedInfo|GetNandSpeedInfo]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x081D0042&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetSdmcLog|GetSdmcLog]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x081E0042&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetNandLog|GetNandLog]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x081F0000&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:ClearSdmcLog|ClearSdmcLog]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08200000&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:ClearNandLog|ClearNandLog]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08210000&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:CardSlotIsInserted|CardSlotIsInserted]]&lt;br /&gt;
| 0x1017&lt;br /&gt;
|-&lt;br /&gt;
| 0x08220000&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:CardSlotPowerOn|CardSlotPowerOn]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08230000&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:CardSlotPowerOff|CardSlotPowerOff]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08240000&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:CardSlotGetCardIFPowerStatus|CardSlotGetCardIFPowerStatus]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08250040&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:CardNorDirectCommand|CardNorDirectCommand]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08260080&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:CardNorDirectCommandWithAddress|CardNorDirectCommandWithAddress]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08270082&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:CardNorDirectRead|CardNorDirectRead]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x082800C2&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:CardNorDirectReadWithAddress|CardNorDirectReadWithAddress]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08290082&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:CardNorDirectWrite|CardNorDirectWrite]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x082A00C2&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:CardNorDirectWriteWithAddress|CardNorDirectWriteWithAddress]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x082B00C2&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:CardNorDirectRead_4xIO|CardNorDirectRead_4xIO]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x082C0082&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:CardNorDirectCpuWriteWithoutVerify|CardNorDirectCpuWriteWithoutVerify]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x082D0040&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:CardNorDirectSectorEraseWithoutVerify|CardNorDirectSectorEraseWithoutVerify]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x082E0040&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetProductInfo|GetProductInfo]]&lt;br /&gt;
| 0x1005&lt;br /&gt;
|-&lt;br /&gt;
| 0x082F0040&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetProgramLaunchInfo|GetProgramLaunchInfo]]&lt;br /&gt;
| 0x1005&lt;br /&gt;
|-&lt;br /&gt;
| 0x08300182&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:Obsoleted_3_0_CreateExtSaveData|Obsoleted_3_0_CreateExtSaveData]]&lt;br /&gt;
| 0xC, for when the input extdataID doesn&#039;t match the exheader extdataID&lt;br /&gt;
|-&lt;br /&gt;
| 0x08310180&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:Obsoleted_3_0_CreateSharedExtSaveData|Obsoleted_3_0_CreateSharedExtSaveData]]&lt;br /&gt;
| 0x1005&lt;br /&gt;
|-&lt;br /&gt;
| 0x08320102&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:Obsoleted_3_0_ReadExtSaveDataIcon|Obsoleted_3_0_ReadExtSaveDataIcon]]&lt;br /&gt;
| 0x100D, for when the input extdataID doesn&#039;t match the exheader extdataID&lt;br /&gt;
|-&lt;br /&gt;
| 0x08330082&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:Obsoleted_3_0_EnumerateExtSaveData|Obsoleted_3_0_EnumerateExtSaveData]]&lt;br /&gt;
| 0x1005&lt;br /&gt;
|-&lt;br /&gt;
| 0x08340082&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:Obsoleted_3_0_EnumerateSharedExtSaveData|Obsoleted_3_0_EnumerateSharedExtSaveData]]&lt;br /&gt;
| 0x1005&lt;br /&gt;
|-&lt;br /&gt;
| 0x08350080&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:Obsoleted_3_0_DeleteExtSaveData|Obsoleted_3_0_DeleteExtSaveData]]&lt;br /&gt;
| 0x100D, for when the input extdataID doesn&#039;t match the exheader extdataID&lt;br /&gt;
|-&lt;br /&gt;
| 0x08360080&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:Obsoleted_3_0_DeleteSharedExtSaveData|Obsoleted_3_0_DeleteSharedExtSaveData]]&lt;br /&gt;
| 0x1005&lt;br /&gt;
|-&lt;br /&gt;
| 0x08370040&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:SetCardSpiBaudRate|SetCardSpiBaudRate]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08380040&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:SetCardSpiBusMode|SetCardSpiBusMode]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x08390000&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:SendInitializeInfoTo9|SendInitializeInfoTo9]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x083A0100&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetSpecialContentIndex|GetSpecialContentIndex]]&lt;br /&gt;
| 0x1005&lt;br /&gt;
|-&lt;br /&gt;
| 0x083B00C2&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetLegacyRomHeader|GetLegacyRomHeader]]&lt;br /&gt;
| 0x1015&lt;br /&gt;
|-&lt;br /&gt;
| 0x083C00C2&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetLegacyBannerData|GetLegacyBannerData]]&lt;br /&gt;
| 0x1015&lt;br /&gt;
|-&lt;br /&gt;
| 0x083D0100&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:CheckAuthorityToAccessExtSaveData|CheckAuthorityToAccessExtSaveData]]&lt;br /&gt;
| 0x44&lt;br /&gt;
|-&lt;br /&gt;
| 0x083E00C2&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:QueryTotalQuotaSize|QueryTotalQuotaSize]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x083F00C0&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:Obsoleted_3_0_GetExtDataBlockSize|Obsoleted_3_0_GetExtDataBlockSize]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08400040&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:AbnegateAccessRight|AbnegateAccessRight]]&lt;br /&gt;
|?&lt;br /&gt;
|-&lt;br /&gt;
| 0x08410000&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:DeleteSdmcRoot|DeleteSdmcRoot]]&lt;br /&gt;
| 0x1005&lt;br /&gt;
|-&lt;br /&gt;
| 0x08420040&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:DeleteAllExtSaveDataOnNand|DeleteAllExtSaveDataOnNand]]&lt;br /&gt;
| 0x1005&lt;br /&gt;
|-&lt;br /&gt;
| 0x08430000&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:InitializeCtrFileSystem|InitializeCtrFileSystem]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08440000&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:CreateSeed|CreateSeed]]&lt;br /&gt;
| 0x2&lt;br /&gt;
|-&lt;br /&gt;
| 0x084500C2&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetFormatInfo|GetFormatInfo]]&lt;br /&gt;
|?&lt;br /&gt;
|-&lt;br /&gt;
| 0x08460102&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetLegacyRomHeader2|GetLegacyRomHeader2]]&lt;br /&gt;
| 0x1015&lt;br /&gt;
|-&lt;br /&gt;
| 0x08470180&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:Obsoleted_2_0_FormatCtrCardUserSaveData|Obsoleted_2_0_FormatCtrCardUserSaveData]]&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| 0x08480042&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetSdmcCtrRootPath|GetSdmcCtrRootPath]]&lt;br /&gt;
| 0x100D&lt;br /&gt;
|-&lt;br /&gt;
| 0x08490040&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetArchiveResource|GetArchiveResource]]&lt;br /&gt;
|?&lt;br /&gt;
|-&lt;br /&gt;
| 0x084A0002&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:ExportIntegrityVerificationSeed|ExportIntegrityVerificationSeed]]&lt;br /&gt;
| 0x4000&lt;br /&gt;
|-&lt;br /&gt;
| 0x084B0002&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:ImportIntegrityVerificationSeed|ImportIntegrityVerificationSeed]]&lt;br /&gt;
| 0x4000&lt;br /&gt;
|-&lt;br /&gt;
| 0x084C0242&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:FormatSaveData|FormatSaveData]]&lt;br /&gt;
| 0x6, in some cases this write isn&#039;t needed however&lt;br /&gt;
|-&lt;br /&gt;
| 0x084D0102&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetLegacySubBannerData|GetLegacySubBannerData]]&lt;br /&gt;
| 0x1015&lt;br /&gt;
|-&lt;br /&gt;
| 0x084E0342&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:UpdateSha256Context|UpdateSha256Context]]&lt;br /&gt;
| 0x5&lt;br /&gt;
|-&lt;br /&gt;
| 0x084F0102&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:ReadSpecialFile|ReadSpecialFile]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08500040&lt;br /&gt;
|?&lt;br /&gt;
| [[FS:GetSpecialFileSize|GetSpecialFileSize]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08510242&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[FS:CreateExtSaveData|CreateExtSaveData]]&lt;br /&gt;
| Shared extdata: 0x101005. Regular extdata in certain cases: 0xC&lt;br /&gt;
|-&lt;br /&gt;
| 0x08520100&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[FS:DeleteExtSaveData|DeleteExtSaveData]]&lt;br /&gt;
| Shared extdata: 0x101005. Regular extdata in certain cases: 0x10100D&lt;br /&gt;
|-&lt;br /&gt;
| 0x08530142&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[FS:ReadExtSaveDataIcon|ReadExtSaveDataIcon]]&lt;br /&gt;
| 0x10100D (this doesn&#039;t apply in certain cases, however)&lt;br /&gt;
|-&lt;br /&gt;
| 0x085400C0&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[FS:GetExtDataBlockSize|GetExtDataBlockSize]]&lt;br /&gt;
| 0x10100D (this doesn&#039;t apply in certain cases, however)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08550102&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[FS:EnumerateExtSaveData|EnumerateExtSaveData]]&lt;br /&gt;
| 0x101005&lt;br /&gt;
|-&lt;br /&gt;
| 0x08560240&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[FS:CreateSystemSaveData|CreateSystemSaveData]]&lt;br /&gt;
| 0x4 (this doesn&#039;t apply in certain cases, however)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08570080&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[FS:DeleteSystemSaveData|DeleteSystemSaveData]]&lt;br /&gt;
| 0x1004 (this doesn&#039;t apply in certain cases, however)&lt;br /&gt;
|-&lt;br /&gt;
| 0x08580000&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[FS:StartDeviceMoveAsSource|StartDeviceMoveAsSource]]&lt;br /&gt;
| 0x2004&lt;br /&gt;
|-&lt;br /&gt;
| 0x08590200&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[FS:StartDeviceMoveAsDestination|StartDeviceMoveAsDestination]]&lt;br /&gt;
| 0x2004&lt;br /&gt;
|-&lt;br /&gt;
| 0x085A00C0&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[FS:SetArchivePriority|SetArchivePriority]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x085B0080&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[FS:GetArchivePriority|GetArchivePriority]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x085C00C0&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[FS:SetCtrCardLatencyParameter|SetCtrCardLatencyParameter]]&lt;br /&gt;
| 0xE&lt;br /&gt;
|-&lt;br /&gt;
| 0x085D01C0&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[FS:SetFsCompatibilityInfo|SetFsCompatibilityInfo]]&lt;br /&gt;
| 0x100001&lt;br /&gt;
|-&lt;br /&gt;
| 0x085E0040&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[FS:ResetCardCompatibilityParameter|ResetCardCompatibilityParameter]]&lt;br /&gt;
| 0xE&lt;br /&gt;
|-&lt;br /&gt;
| 0x085F0040&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[FS:SwitchCleanupInvalidSaveData|SwitchCleanupInvalidSaveData]]&lt;br /&gt;
| 0x12004&lt;br /&gt;
|-&lt;br /&gt;
| 0x08600042&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[FS:EnumerateSystemSaveData|EnumerateSystemSaveData]]&lt;br /&gt;
| 0x2004&lt;br /&gt;
|-&lt;br /&gt;
| 0x08610042&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[FS:InitializeWithSdkVersion|InitializeWithSdkVersion]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08620040&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[FS:SetPriority|SetPriority]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08630000&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[FS:GetPriority|GetPriority]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08640000&lt;br /&gt;
| [[3.0.0-5]]&lt;br /&gt;
| [[FS:Obsoleted_4_0_GetNandInfo|Obsoleted_4_0_GetNandInfo]]&lt;br /&gt;
| Stubbed, this returns an error&lt;br /&gt;
|-&lt;br /&gt;
| 0x08650140&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| [[FS:SetSaveDataSecureValue|SetSaveDataSecureValue]]&lt;br /&gt;
| 0x121004 (in certain cases this doesn&#039;t apply, however)&lt;br /&gt;
|-&lt;br /&gt;
| 0x086600C0&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| [[FS:GetSaveDataSecureValue|GetSaveDataSecureValue]]&lt;br /&gt;
| 0x121004 (in certain cases this doesn&#039;t apply, however)&lt;br /&gt;
|-&lt;br /&gt;
| 0x086700C4&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| [[FS:ControlSecureSave|ControlSecureSave]]&lt;br /&gt;
| 0x121004&lt;br /&gt;
|-&lt;br /&gt;
| 0x08680000&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| [[FS:GetMediaType|GetMediaType]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x08690000&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| [[FS:Obsoleted_4_0_GetNandEraseCount|Obsoleted_4_0_GetNandEraseCount]]&lt;br /&gt;
| Stubbed, this returns an error.&lt;br /&gt;
|-&lt;br /&gt;
| 0x086A0082&lt;br /&gt;
| [[4.0.0-7]]&lt;br /&gt;
| [[FS:ReadNandReport|ReadNandReport]]&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x086B00C2&lt;br /&gt;
|?&lt;br /&gt;
|?&lt;br /&gt;
| 00121004&lt;br /&gt;
|-&lt;br /&gt;
| 0x086C00C2&lt;br /&gt;
|?&lt;br /&gt;
|?&lt;br /&gt;
| 00121004&lt;br /&gt;
|-&lt;br /&gt;
| 0x086D0040&lt;br /&gt;
|?&lt;br /&gt;
|?&lt;br /&gt;
| 00020004&lt;br /&gt;
|-&lt;br /&gt;
| 0x086E00C0&lt;br /&gt;
|Related to Secure Value? Used in Pokemon Sun/Moon.&lt;br /&gt;
|?&lt;br /&gt;
|None?&lt;br /&gt;
|-&lt;br /&gt;
| 0x086F0040&lt;br /&gt;
|Related to Secure Value? Used in Pokemon Sun/Moon.&lt;br /&gt;
|?&lt;br /&gt;
| 0xE&lt;br /&gt;
|-&lt;br /&gt;
| 0x087000C2&lt;br /&gt;
|?&lt;br /&gt;
|?&lt;br /&gt;
|None?&lt;br /&gt;
|-&lt;br /&gt;
| 0x08710100&lt;br /&gt;
|?&lt;br /&gt;
|?&lt;br /&gt;
| 0xC&lt;br /&gt;
|-&lt;br /&gt;
| 0x087201C0&lt;br /&gt;
|?&lt;br /&gt;
|?&lt;br /&gt;
| 00080004&lt;br /&gt;
|-&lt;br /&gt;
| 0x087300C0&lt;br /&gt;
|?&lt;br /&gt;
|?&lt;br /&gt;
| 00080004&lt;br /&gt;
|-&lt;br /&gt;
| 0x08740000&lt;br /&gt;
|?&lt;br /&gt;
|?&lt;br /&gt;
| 00080004&lt;br /&gt;
|-&lt;br /&gt;
| 0x08750140&lt;br /&gt;
|?&lt;br /&gt;
|?&lt;br /&gt;
|None?&lt;br /&gt;
|-&lt;br /&gt;
| 0x087600C0&lt;br /&gt;
|?&lt;br /&gt;
|?&lt;br /&gt;
|None?&lt;br /&gt;
|-&lt;br /&gt;
| 0x08770100&lt;br /&gt;
|?&lt;br /&gt;
|?&lt;br /&gt;
|?&lt;br /&gt;
|-&lt;br /&gt;
| 0x087800C0&lt;br /&gt;
|?&lt;br /&gt;
|?&lt;br /&gt;
|?&lt;br /&gt;
|-&lt;br /&gt;
| 0x087900C2&lt;br /&gt;
| ?&lt;br /&gt;
| Same as GetLegacyBannerData, except for the last parameter this passes u8 value 0x1 instead of 0x0, for the FSPXI command.&lt;br /&gt;
| 0x00101015&lt;br /&gt;
|-&lt;br /&gt;
| 0x087A0180&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| [[FS:AddSeed|AddSeed]]&lt;br /&gt;
| 0x00200000&lt;br /&gt;
|-&lt;br /&gt;
| 0x087B....&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| Wrapper for the code internally used for command &amp;lt;0x087A....&amp;gt;.&lt;br /&gt;
| 0x00200000&lt;br /&gt;
|-&lt;br /&gt;
| 0x087C....&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| Eventually calls same code as command &amp;lt;0x087A....&amp;gt;.&lt;br /&gt;
| 0x00200000&lt;br /&gt;
|-&lt;br /&gt;
| 0x087D0000&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| GetNumSeeds. Writes the number of seeds to cmdreply[2]&lt;br /&gt;
| 0x00200000&lt;br /&gt;
|-&lt;br /&gt;
| 0x087E0042&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| Eventually calls same code as command &amp;lt;0x087A....&amp;gt;. Writes a list of titleIDs to the outbuf, this is for titles with content-lock-seed(s) stored in SEEDDB. (u32 total_titleids_probably, ((Size&amp;lt;&amp;lt;4)  &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; 12), outbufptr)&lt;br /&gt;
| 0x00200000&lt;br /&gt;
|-&lt;br /&gt;
| 0x087F....&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| ?&lt;br /&gt;
| 0x00200000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0880....&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| Eventually calls same code as command &amp;lt;0x087A....&amp;gt;.&lt;br /&gt;
| 0x00200000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0881....&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| Eventually calls same code as command &amp;lt;0x087A....&amp;gt;.&lt;br /&gt;
| 0x00200000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0882....&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| Eventually calls same code as command &amp;lt;0x087A....&amp;gt;.&lt;br /&gt;
| 0x00200000&lt;br /&gt;
|-&lt;br /&gt;
| 0x08830000&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| Writes an output value to cmdreply[2].&lt;br /&gt;
| 0x00200000&lt;br /&gt;
|-&lt;br /&gt;
| 0x08840042&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| Eventually calls same code as command &amp;lt;0x087A....&amp;gt;.&lt;br /&gt;
| 0x00200000&lt;br /&gt;
|-&lt;br /&gt;
| 0x0885....&lt;br /&gt;
| [[9.6.0-24|9.6.0-X]]&lt;br /&gt;
| ?&lt;br /&gt;
| 0x00200000&lt;br /&gt;
|-&lt;br /&gt;
| 0x088600C0&lt;br /&gt;
| [[11.1.0-34|11.1.0-X]]&lt;br /&gt;
| [[FS:CheckUpdatedDat|CheckUpdatedDat]]&lt;br /&gt;
| 0x00080000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: The question marks from Dummy1 to GetSpecialFileSize on the &amp;quot;available since system version&amp;quot; field are mainly there because I think that most of these are necessary for the main system to function, so theoretically that would mean that since the creation of the 3DS these were available, or since launch if that makes more sense. But because of the peculiar nature of some of the functions, they will remain question marks until they can be confirmed 100%.&lt;br /&gt;
&lt;br /&gt;
When access rights are required for a command, at least one of the bits in the process access info specified in the above table for the command must be set. Error 0xD9004676 is returned when a process attempts to use a command which it doesn&#039;t have access rights for the command. The exheader access info field is all zero&#039;s for most applications. Note that the permissions listed in the above table is for system-version v2.x, therefore permission bit(s) added with newer FIRM may be missing from this.&lt;br /&gt;
&lt;br /&gt;
Each session for fs:USER has separate permissions, initially these are set to all zero&#039;s for new fs:USER sessions. The permissions/etc for fs:USER sessions are initialized via [[FS:Initialize]](loaded from the user process exheader).&lt;br /&gt;
&lt;br /&gt;
== Filesystem service &amp;quot;fs:LDR&amp;quot; ==&lt;br /&gt;
This service is identical to fs:USER, except [[FS:OpenArchive]] archive 0x2345678E can only be accessed with fs:LDR.&lt;br /&gt;
&lt;br /&gt;
== ProgramRegistry service &amp;quot;fs:REG&amp;quot; ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000100C6&lt;br /&gt;
| [[FSReg:Dummy1|Dummy1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x040103C0&lt;br /&gt;
| [[FSReg:Register|Register]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04020040&lt;br /&gt;
| [[FSReg:Unregister|Unregister]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x040300C0&lt;br /&gt;
| [[FSReg:GetProgramInfo|GetProgramInfo]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04040100&lt;br /&gt;
| [[FSReg:LoadProgram|LoadProgram]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04050080&lt;br /&gt;
| [[FSReg:UnloadProgram|UnloadProgram]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x04060080&lt;br /&gt;
| [[FSReg:CheckHostLoadId|CheckHostLoadId]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Only two sessions can be opened for this service at a time, hence no other processes can use this due to [[Process_Manager_Services|pm-module]] and [[Loader_Services|loader]] using this.&lt;br /&gt;
&lt;br /&gt;
=File and directory access=&lt;br /&gt;
==Files==&lt;br /&gt;
File session handles obtained via [[FS:OpenFile]] et al can be used to access files through a service-like interface, despite not being an actual service registered using [[SRV:RegisterService]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000100C6&lt;br /&gt;
| [[FSFile:Dummy1|Dummy1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x040100C4&lt;br /&gt;
| [[FSFile:Control|Control]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08010100&lt;br /&gt;
| [[FSFile:OpenSubFile|OpenSubFile]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x080200C2&lt;br /&gt;
| [[FSFile:Read|Read]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08030102&lt;br /&gt;
| [[FSFile:Write|Write]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08040000&lt;br /&gt;
| [[FSFile:GetSize|GetSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08050080&lt;br /&gt;
| [[FSFile:SetSize|SetSize]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08060000&lt;br /&gt;
| [[FSFile:GetAttributes|GetAttributes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08070040&lt;br /&gt;
| [[FSFile:SetAttributes|SetAttributes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08080000&lt;br /&gt;
| [[FSFile:Close|Close]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08090000&lt;br /&gt;
| [[FSFile:Flush|Flush]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x080A0040&lt;br /&gt;
| [[FSFile:SetPriority|SetPriority]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x080B0000&lt;br /&gt;
| [[FSFile:GetPriority|GetPriority]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x080C0000&lt;br /&gt;
| [[FSFile:OpenLinkFile|OpenLinkFile]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x0C010100&lt;br /&gt;
| [[FSFile:GetAvailable|GetAvailable]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Directories==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Command Header&lt;br /&gt;
!  Available since system version&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x000100C6&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[FSDir:Dummy1|Dummy1]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x040100C4&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[FSDir:Control|Control]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08010042&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[FSDir:Read|Read]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08020000&lt;br /&gt;
| [[1.0.0-0]]&lt;br /&gt;
| [[FSDir:Close|Close]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08030040&lt;br /&gt;
| ?&lt;br /&gt;
| [[FSDir:SetPriority|SetPriority]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x08040000&lt;br /&gt;
| ?&lt;br /&gt;
| [[FSDir:GetPriority|GetPriority]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Archives =&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  ArchiveId&lt;br /&gt;
!  Description&lt;br /&gt;
!  Accessible via [[Filesystem_services|FS]]&lt;br /&gt;
!  Accessible via [[Filesystem_services_PXI|FSPXI]]&lt;br /&gt;
!  Only accessible by Process9 internally&lt;br /&gt;
!  Requires binary [[FS:OpenFile|Lowpath]]&lt;br /&gt;
!  Required exheader FS access info bitmask&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000003&lt;br /&gt;
| SelfNCCH (including [[#RomFS|RomFS]])&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000004&lt;br /&gt;
| SaveData (the saveID/mediatype for this is loaded from data originally from the user process&#039; exheader)&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000006&lt;br /&gt;
| ExtSaveData&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| 0x100D, when the input extdataID isn&#039;t listed in the exheader.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000007&lt;br /&gt;
| Shared ExtSaveData&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| None&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000008&lt;br /&gt;
| SystemSaveData&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| 0x4, when the input saveID doesn&#039;t match the exheader system-saveID.&lt;br /&gt;
|-&lt;br /&gt;
| 0x00000009&lt;br /&gt;
| SDMC&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| 0x8E&lt;br /&gt;
|-&lt;br /&gt;
| 0x0000000A&lt;br /&gt;
| SDMC Write-Only&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| 0x808E&lt;br /&gt;
|-&lt;br /&gt;
| 0x12345678&lt;br /&gt;
| ExtSaveData for BOSS&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| 0x44&lt;br /&gt;
|-&lt;br /&gt;
| 0x12345679&lt;br /&gt;
| CARD SPI FS&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| 0x16&lt;br /&gt;
|-&lt;br /&gt;
| 0x1234567B&lt;br /&gt;
| ExtSaveData, and ExtSaveData for BOSS&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1234567C&lt;br /&gt;
| SystemSaveData&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x1234567D&lt;br /&gt;
| NAND RW&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| 0x800&lt;br /&gt;
|-&lt;br /&gt;
| 0x1234567E&lt;br /&gt;
| NAND RO&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| 0x200&lt;br /&gt;
|-&lt;br /&gt;
| 0x1234567F&lt;br /&gt;
| NAND RO Write FS&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x12345680&lt;br /&gt;
| Unknown. There&#039;s code for this in spider v9.9, but that code isn&#039;t actually used.&lt;br /&gt;
| Yes&lt;br /&gt;
| ?&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x12345681&lt;br /&gt;
| Unknown. Accessed by FS service.&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| No&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x12345682&lt;br /&gt;
| Unknown. There&#039;s code for this in spider v9.9, but that code isn&#039;t actually used.&lt;br /&gt;
| Yes&lt;br /&gt;
| ?&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x2345678A&lt;br /&gt;
| Used for accessing general NCCH data. With FSPXI this also allows savedata access.&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| 0x1005&lt;br /&gt;
|-&lt;br /&gt;
| 0x2345678B&lt;br /&gt;
| ?&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2345678C&lt;br /&gt;
| Used internally to access [[Title_Database|/dbs]] files?&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2345678D&lt;br /&gt;
| ?&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x2345678E&lt;br /&gt;
| FSPXI: Similar to archive 0x2345678A. For fs:LDR(used by the &amp;quot;loader&amp;quot; FIRM ARM11-process), only ExeFS. Not accessible with fs:USER.&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| None, see description.&lt;br /&gt;
|-&lt;br /&gt;
| 0x567890AB&lt;br /&gt;
| NAND CTR FS&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x567890AC&lt;br /&gt;
| TWL PHOTO&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x567890AD&lt;br /&gt;
| TWLS (DSi Sound stores recordings here). This is mapped to the FAT12 image stored in the file at [[Twln/shared2/0000]].&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| ?&lt;br /&gt;
|-&lt;br /&gt;
| 0x567890AE&lt;br /&gt;
| NAND TWL FS&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| 0x100&lt;br /&gt;
|-&lt;br /&gt;
| 0x567890AF&lt;br /&gt;
| NAND W FS&lt;br /&gt;
| Yes&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| 0x100&lt;br /&gt;
|-&lt;br /&gt;
| 0x567890B0&lt;br /&gt;
| ?&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| 0x567890B1&lt;br /&gt;
| Gamecard SaveData (for check). This is a wrapper for UserSaveDataForCheck: the OpenArchive code for that is called with archive-lowpath TID=0/mediatype=2(gamecard).&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| 0x567890B2&lt;br /&gt;
| UserSaveData (for check). This is the same as the regular SaveData archive, except with this the savedata ID and mediatype is loaded from the input archive lowpath.&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| 0x6&lt;br /&gt;
|-&lt;br /&gt;
| 0x567890B4&lt;br /&gt;
| Similar to 0x567890B2 but can only access Accessible Save specified in [[NCCH/Extended_Header#Storage_Info|exheader]]?&lt;br /&gt;
| Yes&lt;br /&gt;
| No&lt;br /&gt;
| No&lt;br /&gt;
| Yes&lt;br /&gt;
| ?&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Archives listed as not requiring a binary lowpath, use lowpath type [[FS:OpenFile|empty]].&lt;br /&gt;
&lt;br /&gt;
The above permission bitmasks are from v2.x, see the above Services section for how these are handled.&lt;br /&gt;
&lt;br /&gt;
Archives CTR NAND, NAND RO Write FS, TWL NAND, NAND W FS, and CARD SPI FS require the corresponding process exheader access control mount flag to be set, in the exheader for any of the currently running ARM11 processes, for [[Filesystem_services_PXI|FSPXI]]. The access rights checked by [[Filesystem services|FS]] module for archive mounting with fs:USER, are stored in the process&#039; exheader accessinfo.&lt;br /&gt;
&lt;br /&gt;
The CARDSPI archive allows access to the gamecard CARD1 raw savedata flash(aka &amp;quot;cardspi:/&amp;quot; in [[FIRM|Process9]]), the file lowpath must be WCHAR &amp;quot;/&amp;quot;. The &amp;quot;NAND W FS&amp;quot; archive allows access to the raw NAND image(aka &amp;quot;wnand:/&amp;quot; in Process9), the file lowpath must be WCHAR &amp;quot;/&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
= Filenames and Paths =&lt;br /&gt;
PathType:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| -1&lt;br /&gt;
| Returned internally by Process9, when errors occur it seems(in particular when no nul-terminator was found in the input path). The data ptr is set to NULL.&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| INVALID - Specifies an invalid path&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| EMPTY - Specifies an empty path&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| BINARY - Non-text based path. Meaning is per-archive&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| ASCII - Text-based path with 7-bit ASCII characters padded to 8-bits each (signed char)&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| UTF16 - Text-based path with UTF-16 characters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
In IPC requests, sizes of ASCII and UTF16 paths must include space for the null-terminator. &lt;br /&gt;
&lt;br /&gt;
== Binary LowPath ==&lt;br /&gt;
The format of the data that a binary LowPath points to is custom per archive.&lt;br /&gt;
&lt;br /&gt;
=== SelfNCCH File Path Data Format ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 &lt;br /&gt;
| Type:&lt;br /&gt;
* 0x0: RomFS&lt;br /&gt;
* 0x1: error 0xD9004676&lt;br /&gt;
* 0x2: ExeFS&lt;br /&gt;
* 0x3: Error 0xE0E046BE.&lt;br /&gt;
* 0x4: FS-module crashes on this&lt;br /&gt;
* 0x5: Update RomFS?&lt;br /&gt;
|-&lt;br /&gt;
| 1-2&lt;br /&gt;
| File name for ExeFS (&amp;quot;icon&amp;quot;/&amp;quot;banner&amp;quot;/&amp;quot;logo&amp;quot;). &amp;quot;.code&amp;quot; is not allowed&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note that ExeFS files only support reading from offset=0 and with size=file_size. &lt;br /&gt;
&lt;br /&gt;
=== SystemSaveData Archive Path Data Format ===&lt;br /&gt;
==== FS ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 &lt;br /&gt;
| [[Mediatypes|Mediatype]] (must be zero for NAND)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| saveid&lt;br /&gt;
|}&lt;br /&gt;
The file/directory lowpath is a text lowpath in the [[Savegames|savegame]] filesystem.&lt;br /&gt;
&lt;br /&gt;
==== FSPXI ====&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 &lt;br /&gt;
| u8 [[Mediatypes|Mediatype]] (must be zero for NAND)&lt;br /&gt;
|}&lt;br /&gt;
The file lowpath is a binary lowpath containing the u64 saveid, however the high word of the saveid is always zero. The mounted file is the cleartext savegame image. Up to 32 SystemSaveData image files can be opened under a single mounted FSPXI archive.&lt;br /&gt;
&lt;br /&gt;
=== UserSaveDataForCheck Archive Path Data Format ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 &lt;br /&gt;
| [[Mediatypes|Mediatype]] (must be non-zero)&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Lower word saveid&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Upper word saveid&lt;br /&gt;
|}&lt;br /&gt;
The file/directory lowpath for this FS archive is a text path in the [[Savegames|savegame]] filesystem.&lt;br /&gt;
&lt;br /&gt;
=== 0x567890B4 Archive Path Data Format ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 &lt;br /&gt;
| [[Mediatypes|Mediatype]]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;Lower_word_saveid &amp;gt;&amp;gt; 8&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt; ?&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Unknown. Game calculate this using formula &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;0xFFFFFF00 | unknown_b&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== ExtSaveData Archive Path Data Format ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0 &lt;br /&gt;
| [[Mediatypes|Mediatype]]&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Lower word saveid&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Upper word saveid&lt;br /&gt;
|}&lt;br /&gt;
For FS, the file/directory lowpath is a text path in the [[extdata]] filesystem. For FSPXI, the file lowpath is a text path relative to the &amp;quot;/extdata/&amp;lt;ExtdataIDHigh&amp;gt;/&amp;lt;ExtdataIDLow&amp;gt;&amp;quot; directory on SD/NAND, for the cleartext extdata image to mount.&lt;br /&gt;
&lt;br /&gt;
=== 0x2345678A Archive Path Data Format ===&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Lower word programID&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Upper word programID&lt;br /&gt;
|-&lt;br /&gt;
| 2 &lt;br /&gt;
| ([[Mediatypes|Mediatype]] &amp;amp; 0xFF) | (uninitialized_data? &amp;amp; 0xFFFFFF00)&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| Number of something? Hardcoded per-archive, 0 for ExeFS, 200 for area:, 100 for rate:, 40 for eula:, etc.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
File lowpath:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| 0 for NCCH data, 1 for savedata. The latter is only valid for FSPXI. Value 2 is allowed via archive 0x3, it&#039;s unknown what this is.&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TMD content index / NCSD partition index.&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Type: 0=romfs(0 for non-NCCH as well), 1=exefs &amp;quot;.code&amp;quot;(?), 2=exefs &amp;quot;icon&amp;quot;/&amp;quot;banner&amp;quot;/&amp;quot;logo&amp;quot;, 3=unknown, 4=unknown, 5=unknown.&lt;br /&gt;
|-&lt;br /&gt;
| 3-4&lt;br /&gt;
| Filename for ExeFS.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The 0x14-byte lowpath is all-zero for accessing the title&#039;s main RomFS.&lt;br /&gt;
&lt;br /&gt;
=== [[RomFS]] ===&lt;br /&gt;
&lt;br /&gt;
Archives 0x3 and 0x2345678E both allow for accessing the [[RomFS#Level_3_Format|level-3 IVFC images]] for RomFS access. The main CXI RomFS is accessible via an all-zero 0xc-byte binary file-lowpath. The update RomFS can be accessed with the first u32 in the binary file-lowpath being set to 0x5. The user must handle parsing the filesystem used in the exposed image itself.&lt;br /&gt;
&lt;br /&gt;
With FSPXI the returned data for RomFS is the entire RomFS section from the NCCH, starting at the IVFC header.&lt;br /&gt;
&lt;br /&gt;
The 0x3 archive is an interface for the 0x2345678E archive with the current process programID+mediatype. The file lowpath is 3-words. These words are written to 0x2345678E-archive file_lowpath+0, with the rest of that lowpath set to all-zero(lowpath is different from archive 0x2345678A). File lowpath:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Index word&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| See above. The only values which FS-module doesn&#039;t allow to be used here are:&lt;br /&gt;
* 0x1: Error 0xE0E046BE.&lt;br /&gt;
* 0x3: Error 0xE0E046BE.&lt;br /&gt;
* 0x4: FS-module executes svcBreak when using this.&lt;br /&gt;
|-&lt;br /&gt;
| 1-2&lt;br /&gt;
| See above. Not validated by FS-module.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=SEEDDB=&lt;br /&gt;
With [[9.6.0-24|9.6.0-X]] new [[System_SaveData]] with saveID 0001000F was added, this seems to be handled by FS-module itself, probably via the new service-cmds added to fsuser. [[Home Menu]] and [[NIM_Services|NIM]] module have access to those commands.&lt;br /&gt;
&lt;br /&gt;
The SEEDDB savedata contains the title-unique seed-data used for the new [[NCCH]] keyY generation added with FIRM [[9.6.0-24|9.6.0-X]].&lt;br /&gt;
&lt;br /&gt;
= Common Types =&lt;br /&gt;
== MediaType ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| NAND&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| SD&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Game Card&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SystemMediaType ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| CTR NAND&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| TWL NAND&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| SD&lt;br /&gt;
|-&lt;br /&gt;
| 3&lt;br /&gt;
| TWL Photo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== OpenFlags ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Bit&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0&lt;br /&gt;
| Read&lt;br /&gt;
|-&lt;br /&gt;
| 1&lt;br /&gt;
| Write&lt;br /&gt;
|-&lt;br /&gt;
| 2&lt;br /&gt;
| Create&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Is Directory&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| Is Hidden&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| Is Archive&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| Is Read-Only&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== WriteOption ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| Flush&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| Update Time Stamp&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x1&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 0x1&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DirectoryEntry ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x20C&lt;br /&gt;
| UTF-16 Entry Name&lt;br /&gt;
|-&lt;br /&gt;
| 0x20C&lt;br /&gt;
| 0xA&lt;br /&gt;
| 8.3 short filename name&lt;br /&gt;
|-&lt;br /&gt;
| 0x216&lt;br /&gt;
| 0x4&lt;br /&gt;
| 8.3 short filename extension&lt;br /&gt;
|-&lt;br /&gt;
| 0x21A&lt;br /&gt;
| 0x1&lt;br /&gt;
| Always 1&lt;br /&gt;
|-&lt;br /&gt;
| 0x21B&lt;br /&gt;
| 0x1&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x21C&lt;br /&gt;
| 0x4&lt;br /&gt;
| [[Filesystem_services#Attributes|Attributes]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x220&lt;br /&gt;
| 0x8&lt;br /&gt;
| Entry Size&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ArchiveResource ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x4&lt;br /&gt;
| Sector byte-size&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Cluster byte-size&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x4&lt;br /&gt;
| Partition capacity in clusters&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Available free space in clusters&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProgramInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x8&lt;br /&gt;
| Program ID&lt;br /&gt;
|-&lt;br /&gt;
| 0x8&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[Filesystem_services#MediaType|Media Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x9&lt;br /&gt;
| 0x7&lt;br /&gt;
| Padding&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ProductInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x10&lt;br /&gt;
| Product Code&lt;br /&gt;
|-&lt;br /&gt;
| 0x10&lt;br /&gt;
| 0x2&lt;br /&gt;
| Company Code&lt;br /&gt;
|-&lt;br /&gt;
| 0x12&lt;br /&gt;
| 0x2&lt;br /&gt;
| Remaster Version&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== IntegrityVerificationSeed ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x10&lt;br /&gt;
|  AES-CBC MAC over a SHA256 hash, which hashes the first 0x110-bytes of the cleartext SEED.&lt;br /&gt;
|-&lt;br /&gt;
|  0x10&lt;br /&gt;
|  0x120&lt;br /&gt;
|  The [[nand/private/movable.sed]], encrypted with AES-CTR using the above MAC for the counter.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== ExtSaveDataInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[Filesystem_services#MediaType|Media Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x8&lt;br /&gt;
| Save ID&lt;br /&gt;
|-&lt;br /&gt;
| 0xC&lt;br /&gt;
| 0x4&lt;br /&gt;
| Reserved&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SystemSaveDataInfo ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 0x1&lt;br /&gt;
| [[Filesystem_services#MediaType|Media Type]]&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 0x1&lt;br /&gt;
| Unknown&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 0x2&lt;br /&gt;
| Reserved&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 0x4&lt;br /&gt;
| Save ID&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SecureValueSlot ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x1000&lt;br /&gt;
| SD Application&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CardSpiBaudRate ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 512KHz&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 1MHz&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| 2MHz&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| 4MHz&lt;br /&gt;
|-&lt;br /&gt;
| 0x4&lt;br /&gt;
| 8MHz&lt;br /&gt;
|-&lt;br /&gt;
| 0x5&lt;br /&gt;
| 16MHz&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== CardSpiBusMode ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x0&lt;br /&gt;
| 1-bit&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| 4-bit&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== SpecialContentType ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Value&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
| 0x1&lt;br /&gt;
| Update&lt;br /&gt;
|-&lt;br /&gt;
| 0x2&lt;br /&gt;
| Manual&lt;br /&gt;
|-&lt;br /&gt;
| 0x3&lt;br /&gt;
| DLP Child&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== DeviceMoveContext ==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!  Offset&lt;br /&gt;
!  Size&lt;br /&gt;
!  Description&lt;br /&gt;
|-&lt;br /&gt;
|  0x0&lt;br /&gt;
|  0x10&lt;br /&gt;
|  IVs&lt;br /&gt;
|-&lt;br /&gt;
|  0x10&lt;br /&gt;
|  0x10&lt;br /&gt;
|  Encrypt Parameter&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Errors=&lt;br /&gt;
See [[Filesystem_services_PXI]].&lt;/div&gt;</summary>
		<author><name>Valentinvanelslande</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Configuration_Memory&amp;diff=20629</id>
		<title>Configuration Memory</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Configuration_Memory&amp;diff=20629"/>
		<updated>2018-03-03T16:05:17Z</updated>

		<summary type="html">&lt;p&gt;Valentinvanelslande: &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;
| 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)&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;
| DATETIME_0 {(u64)MillisecondsSinceFirstJan1900,(u64)SystemTickLastTimeThisWasUpdated,(u32)unk,(u32)unk,(u32)unk,(u32)unk}&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;
= 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, it&#039;s unknown where the MAC address written here was originally loaded from.&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>Valentinvanelslande</name></author>
	</entry>
	<entry>
		<id>https://www.3dbrew.org/w/index.php?title=Configuration_Memory&amp;diff=20628</id>
		<title>Configuration Memory</title>
		<link rel="alternate" type="text/html" href="https://www.3dbrew.org/w/index.php?title=Configuration_Memory&amp;diff=20628"/>
		<updated>2018-03-03T15:54:11Z</updated>

		<summary type="html">&lt;p&gt;Valentinvanelslande: &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;
| 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)&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;
| DATETIME_0 {(u64)MillisecondsSinceFirstJan1900,(u64)SystemTickLastTimeThisWasUpdated,(u32)unk,(u32)unk,(u32)unk,(u32)unk}&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]]. Enabled: 0, Internet: 2&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;
= 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, it&#039;s unknown where the MAC address written here was originally loaded from.&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>Valentinvanelslande</name></author>
	</entry>
</feed>