Difference between revisions of "Config Savegame"
Jump to navigation
Jump to search
(Parental Restrictions PIN/Answer) |
(→Configuration blocks: Add an update config blocks based on a savegame sample) |
||
Line 61: | Line 61: | ||
| 0x00000000 | | 0x00000000 | ||
| 0x2 | | 0x2 | ||
+ | | 0xC | ||
+ | | Config savegame version? | ||
+ | |- | ||
+ | | 0x00010000 | ||
+ | | 0x1 | ||
+ | | 0xC | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x00020000 | ||
+ | | 0x134 | ||
+ | | 0xC | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x00030000 | ||
+ | | 0x1 | ||
+ | | 0xC | ||
| ? | | ? | ||
− | |||
|- | |- | ||
| 0x00030001 | | 0x00030001 | ||
Line 68: | Line 83: | ||
| 0xE | | 0xE | ||
| User time offset (read by CECD) | | User time offset (read by CECD) | ||
+ | |- | ||
+ | | 0x00030002 | ||
+ | | 0x8 | ||
+ | | 0xC | ||
+ | | ? | ||
|- | |- | ||
| 0x00040000 | | 0x00040000 | ||
| 0x10 | | 0x10 | ||
− | | | + | | 0xC |
| ? (read by HID) | | ? (read by HID) | ||
|- | |- | ||
| 0x00040001 | | 0x00040001 | ||
| 0x1C | | 0x1C | ||
− | | | + | | 0xC |
| ? (read by HID) | | ? (read by HID) | ||
|- | |- | ||
| 0x00040002 | | 0x00040002 | ||
| 0x12 | | 0x12 | ||
− | | | + | | 0xC |
| ? (read by HID) | | ? (read by HID) | ||
|- | |- | ||
| 0x00040003 | | 0x00040003 | ||
| 0xC | | 0xC | ||
− | | | + | | 0xC |
| ? (read by HID) | | ? (read by HID) | ||
+ | |- | ||
+ | | 0x00050000 | ||
+ | | 0x2 | ||
+ | | 0xC | ||
+ | | ? | ||
|- | |- | ||
| 0x00050001 | | 0x00050001 | ||
| 0x2 | | 0x2 | ||
− | | | + | | 0xC |
| ? (read by GSP) | | ? (read by GSP) | ||
|- | |- | ||
| 0x00050002 | | 0x00050002 | ||
| 0x38 | | 0x38 | ||
− | | | + | | 0xC |
| ? (read by GSP) | | ? (read by GSP) | ||
|- | |- | ||
| 0x00050003 | | 0x00050003 | ||
| 0x20 | | 0x20 | ||
− | | | + | | 0xC |
| ? (read by GSP) | | ? (read by GSP) | ||
+ | |- | ||
+ | | 0x00050004 | ||
+ | | 0x20 | ||
+ | | 0xC | ||
+ | | ? | ||
|- | |- | ||
| 0x00050005 | | 0x00050005 | ||
| 0x20 | | 0x20 | ||
− | | | + | | 0xE |
| Stereo display settings | | Stereo display settings | ||
|- | |- | ||
| 0x00050006 | | 0x00050006 | ||
| 0x2 | | 0x2 | ||
+ | | 0xC | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x00050007 | ||
+ | | 0x4 | ||
+ | | 0xC | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x00050008 | ||
+ | | 0x10C | ||
+ | | 0xC | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x00050009 | ||
| 0x8 | | 0x8 | ||
+ | | 0xC | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x00060000 | ||
+ | | 0x96 | ||
+ | | 0xC | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x00070000 | ||
+ | | 0x214 | ||
+ | | 0xE | ||
| ? | | ? | ||
|- | |- | ||
| 0x00070001 | | 0x00070001 | ||
| 0x1 | | 0x1 | ||
− | | | + | | 0xE |
| Sound output mode (mono/stereo/surround)? | | Sound output mode (mono/stereo/surround)? | ||
|- | |- | ||
| 0x00080000 | | 0x00080000 | ||
| 0xC00 | | 0xC00 | ||
− | | | + | | 0xC |
| WiFi configuration slot 0 | | WiFi configuration slot 0 | ||
|- | |- | ||
| 0x00080001 | | 0x00080001 | ||
| 0xC00 | | 0xC00 | ||
− | | | + | | 0xC |
| WiFi configuration slot 1 | | WiFi configuration slot 1 | ||
|- | |- | ||
| 0x00080002 | | 0x00080002 | ||
| 0xC00 | | 0xC00 | ||
− | | | + | | 0xC |
| WiFi configuration slot 2 | | WiFi configuration slot 2 | ||
|- | |- | ||
| 0x00090000 | | 0x00090000 | ||
| 0x8 | | 0x8 | ||
− | | | + | | 0xE |
| This contains a u64 ID, used by processes using [[NWMUDS:InitializeWithVersion]]. The first word is the same as [[CfgS:GetLocalFriendCodeSeed|LocalFriendCodeSeed]], while the latter is a separate word. | | This contains a u64 ID, used by processes using [[NWMUDS:InitializeWithVersion]]. The first word is the same as [[CfgS:GetLocalFriendCodeSeed|LocalFriendCodeSeed]], while the latter is a separate word. | ||
|- | |- | ||
Line 142: | Line 197: | ||
| 0x8 | | 0x8 | ||
| 0xE | | 0xE | ||
− | | This console-unique u64 used by [[Cfg:GenHashConsoleUnique|GenHashConsoleUnique]] is generated with the LocalFriendCodeSeed and with random data | + | | Same content as 0x0009000? This console-unique u64 used by [[Cfg:GenHashConsoleUnique|GenHashConsoleUnique]] is generated with the LocalFriendCodeSeed and with random data |
+ | |- | ||
+ | | 0x00090002 | ||
+ | | 0x4 | ||
+ | | 0xE | ||
+ | | ? | ||
|- | |- | ||
| 0x000A0000 | | 0x000A0000 | ||
Line 156: | Line 216: | ||
| 0x000A0002 | | 0x000A0002 | ||
| 0x1 | | 0x1 | ||
− | | | + | | 0xE |
| Language | | Language | ||
− | |||
|- | |- | ||
| 0x000B0000 | | 0x000B0000 | ||
| 0x4 | | 0x4 | ||
− | | | + | | 0xE |
| CountryInfo | | CountryInfo | ||
|- | |- | ||
| 0x000B0001 | | 0x000B0001 | ||
| 0x800 | | 0x800 | ||
− | | | + | | 0xE |
| Country name in UTF-16, every 0x80-bytes is an entry for each language, in the order of the Language table below (not all entries are set) | | Country name in UTF-16, every 0x80-bytes is an entry for each language, in the order of the Language table below (not all entries are set) | ||
|- | |- | ||
| 0x000B0002 | | 0x000B0002 | ||
| 0x800 | | 0x800 | ||
− | | | + | | 0xE |
| State name in UTF-16, every 0x80-bytes is an entry for each language | | State name in UTF-16, every 0x80-bytes is an entry for each language | ||
|- | |- | ||
Line 183: | Line 242: | ||
| 0x000C0000 | | 0x000C0000 | ||
| 0xC0 | | 0xC0 | ||
− | | | + | | 0xE |
| Restricted photo exchange data, and other info (includes a mirror of Parental Restrictions PIN/Secret Answer) | | Restricted photo exchange data, and other info (includes a mirror of Parental Restrictions PIN/Secret Answer) | ||
|- | |- | ||
| 0x000C0001 | | 0x000C0001 | ||
| 0x14 | | 0x14 | ||
− | | | + | | 0xE |
| Same as above? | | Same as above? | ||
+ | |- | ||
+ | | 0x000C0002 | ||
+ | | 0x200 | ||
+ | | 0xE | ||
+ | | ? | ||
|- | |- | ||
| 0x000D0000 | | 0x000D0000 | ||
| 0x4 | | 0x4 | ||
− | | | + | | 0xE |
| u16 at offset 0x0: [[SMDH#EULA_Version|EULA Version]] which was agreed to. | | u16 at offset 0x0: [[SMDH#EULA_Version|EULA Version]] which was agreed to. | ||
+ | |- | ||
+ | | 0x000E0000 | ||
+ | | 0x1 | ||
+ | | 0xE | ||
+ | | ? | ||
|- | |- | ||
| 0x000F0000 | | 0x000F0000 | ||
| 0x10 | | 0x10 | ||
− | | | + | | 0xC |
| Unknown, used by [[NS]] on dev-units for [[SVC|svcKernelSetState]], where Type is 6. During NS startup on debug-units, NS compares the u32 from +8 in this config-block with the [[Configuration_Memory#APPMEMTYPE|APPMEMTYPE]]. When those don't match NS starts a FIRM-launch (with the same FIRM titleID as the currently running one) to boot into a FIRM with the APPMEMTYPE value from this config-block | | Unknown, used by [[NS]] on dev-units for [[SVC|svcKernelSetState]], where Type is 6. During NS startup on debug-units, NS compares the u32 from +8 in this config-block with the [[Configuration_Memory#APPMEMTYPE|APPMEMTYPE]]. When those don't match NS starts a FIRM-launch (with the same FIRM titleID as the currently running one) to boot into a FIRM with the APPMEMTYPE value from this config-block | ||
+ | |- | ||
+ | | 0x000F0001 | ||
+ | | 0x8 | ||
+ | | 0xC | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x000F0003 | ||
+ | | 0x1 | ||
+ | | 0xC | ||
+ | | ? | ||
|- | |- | ||
| 0x000F0004 | | 0x000F0004 | ||
| 0x4 | | 0x4 | ||
− | | | + | | 0xC |
| The first u8 is the System-Model [[Cfg:GetSystemModel|value]], the last 3-bytes are unknown | | The first u8 is the System-Model [[Cfg:GetSystemModel|value]], the last 3-bytes are unknown | ||
|- | |- | ||
Line 210: | Line 289: | ||
| 0xC | | 0xC | ||
| The first u8 indicates whether network updates are enabled. (However, NIM only checks this flag with developer UNITINFO). | | The first u8 indicates whether network updates are enabled. (However, NIM only checks this flag with developer UNITINFO). | ||
+ | |- | ||
+ | | 0x000F0006 | ||
+ | | 0x28 | ||
+ | | 0xC | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x00100000 | ||
+ | | 0x2 | ||
+ | | 0xC | ||
+ | | ? | ||
|- | |- | ||
| 0x00100001 | | 0x00100001 | ||
Line 215: | Line 304: | ||
| 0xC | | 0xC | ||
| Stores Parental Restrictions PIN/Secret Answer and other info | | Stores Parental Restrictions PIN/Secret Answer and other info | ||
+ | |- | ||
+ | | 0x00100002 | ||
+ | | 0x1 | ||
+ | | 0xC | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x00100003 | ||
+ | | 0x10 | ||
+ | | 0xC | ||
+ | | ? | ||
|- | |- | ||
| 0x00110000 | | 0x00110000 | ||
| 0x4 | | 0x4 | ||
− | | | + | | 0xC |
| The low u16 indicates whether the system setup is required, such as when the system is booted for the first time or after doing a [[System Settings|System Format]]: 0 = setup required, non-zero = no setup required | | The low u16 indicates whether the system setup is required, such as when the system is booted for the first time or after doing a [[System Settings|System Format]]: 0 = setup required, non-zero = no setup required | ||
|- | |- | ||
| 0x00110001 | | 0x00110001 | ||
| 0x8 | | 0x8 | ||
− | | | + | | 0xC |
| TitleID of the menu to launch, used by [[NS]] on dev units (this block can be edited on dev units with [[3DS Development Unit Software#Config|Config]]) | | TitleID of the menu to launch, used by [[NS]] on dev units (this block can be edited on dev units with [[3DS Development Unit Software#Config|Config]]) | ||
|- | |- | ||
| 0x00120000 | | 0x00120000 | ||
| 0x8 | | 0x8 | ||
− | | | + | | 0xC |
| ? (read by HID) | | ? (read by HID) | ||
|- | |- | ||
| 0x00130000 | | 0x00130000 | ||
| 0x4 | | 0x4 | ||
− | | | + | | 0xE |
| If response is 0x100 then debug mode is enabled. | | If response is 0x100 then debug mode is enabled. | ||
+ | |- | ||
+ | | 0x00150000 | ||
+ | | 0x4 | ||
+ | | 0xE | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x00150001 | ||
+ | | 0x8 | ||
+ | | 0xC | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x00150002 | ||
+ | | 0x4 | ||
+ | | 0xE | ||
+ | | ? | ||
|- | |- | ||
| 0x00160000 | | 0x00160000 | ||
| 0x4 | | 0x4 | ||
− | | | + | | 0xE |
| Unknown, first byte is used by config service-cmd [[Config_Services|0x00070040]]. (Unknown whether the last 3-bytes are used) | | Unknown, first byte is used by config service-cmd [[Config_Services|0x00070040]]. (Unknown whether the last 3-bytes are used) | ||
+ | |- | ||
+ | | 0x00170000 | ||
+ | | 0x4 | ||
+ | | 0xE | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x00180000 | ||
+ | | 0x4 | ||
+ | | 0xC | ||
+ | | ? | ||
+ | |- | ||
+ | | 0x00180001 | ||
+ | | 0x18 | ||
+ | | 0xC | ||
+ | | ? | ||
|- | |- | ||
| 0x00190000 | | 0x00190000 | ||
| 0x1 | | 0x1 | ||
− | | | + | | 0xC |
| Unknown. NFC-module checks for value1/non-value1. | | Unknown. NFC-module checks for value1/non-value1. | ||
|} | |} |
Revision as of 19:47, 22 November 2016
This page describes the format of the Cfg NAND savegame. These blocks can be accessed with the Cfg service commands.
Structure of save-file "/config"
Offset | Size | Description |
---|---|---|
0x0 | 0x2 | Total entries |
0x2 | 0x2 | Data entries offset |
0x4 | 0x4558 | Block entries |
0x455C | Data for the entries |
The filesize for this /config file is 0x8000-bytes.
Configuration block entry
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | BlkID |
0x4 | 0x4 | Offset to the data for this block when size is >4, otherwise this word is the data for this block |
0x8 | 0x2 | Size |
0xA | 0x2 | Flags |
Configuration blocks
BlkID | Size | Flags | Description |
---|---|---|---|
0x00000000 | 0x2 | 0xC | Config savegame version? |
0x00010000 | 0x1 | 0xC | ? |
0x00020000 | 0x134 | 0xC | ? |
0x00030000 | 0x1 | 0xC | ? |
0x00030001 | 0x8 | 0xE | User time offset (read by CECD) |
0x00030002 | 0x8 | 0xC | ? |
0x00040000 | 0x10 | 0xC | ? (read by HID) |
0x00040001 | 0x1C | 0xC | ? (read by HID) |
0x00040002 | 0x12 | 0xC | ? (read by HID) |
0x00040003 | 0xC | 0xC | ? (read by HID) |
0x00050000 | 0x2 | 0xC | ? |
0x00050001 | 0x2 | 0xC | ? (read by GSP) |
0x00050002 | 0x38 | 0xC | ? (read by GSP) |
0x00050003 | 0x20 | 0xC | ? (read by GSP) |
0x00050004 | 0x20 | 0xC | ? |
0x00050005 | 0x20 | 0xE | Stereo display settings |
0x00050006 | 0x2 | 0xC | ? |
0x00050007 | 0x4 | 0xC | ? |
0x00050008 | 0x10C | 0xC | ? |
0x00050009 | 0x8 | 0xC | ? |
0x00060000 | 0x96 | 0xC | ? |
0x00070000 | 0x214 | 0xE | ? |
0x00070001 | 0x1 | 0xE | Sound output mode (mono/stereo/surround)? |
0x00080000 | 0xC00 | 0xC | WiFi configuration slot 0 |
0x00080001 | 0xC00 | 0xC | WiFi configuration slot 1 |
0x00080002 | 0xC00 | 0xC | WiFi configuration slot 2 |
0x00090000 | 0x8 | 0xE | This contains a u64 ID, used by processes using NWMUDS:InitializeWithVersion. The first word is the same as LocalFriendCodeSeed, while the latter is a separate word. |
0x00090001 | 0x8 | 0xE | Same content as 0x0009000? This console-unique u64 used by GenHashConsoleUnique is generated with the LocalFriendCodeSeed and with random data |
0x00090002 | 0x4 | 0xE | ? |
0x000A0000 | 0x1C | 0xE | Username |
0x000A0001 | 0x2 | 0xE | Birthday (u8 month, u8 day) |
0x000A0002 | 0x1 | 0xE | Language |
0x000B0000 | 0x4 | 0xE | CountryInfo |
0x000B0001 | 0x800 | 0xE | Country name in UTF-16, every 0x80-bytes is an entry for each language, in the order of the Language table below (not all entries are set) |
0x000B0002 | 0x800 | 0xE | State name in UTF-16, every 0x80-bytes is an entry for each language |
0x000B0003 | 0x4 | 0xE | Pair of 16-bit values, meaning unknown but related to address (ZIP code?) |
0x000C0000 | 0xC0 | 0xE | Restricted photo exchange data, and other info (includes a mirror of Parental Restrictions PIN/Secret Answer) |
0x000C0001 | 0x14 | 0xE | Same as above? |
0x000C0002 | 0x200 | 0xE | ? |
0x000D0000 | 0x4 | 0xE | u16 at offset 0x0: EULA Version which was agreed to. |
0x000E0000 | 0x1 | 0xE | ? |
0x000F0000 | 0x10 | 0xC | Unknown, used by NS on dev-units for svcKernelSetState, where Type is 6. During NS startup on debug-units, NS compares the u32 from +8 in this config-block with the APPMEMTYPE. When those don't match NS starts a FIRM-launch (with the same FIRM titleID as the currently running one) to boot into a FIRM with the APPMEMTYPE value from this config-block |
0x000F0001 | 0x8 | 0xC | ? |
0x000F0003 | 0x1 | 0xC | ? |
0x000F0004 | 0x4 | 0xC | The first u8 is the System-Model value, the last 3-bytes are unknown |
0x000F0005 | 0x4 | 0xC | The first u8 indicates whether network updates are enabled. (However, NIM only checks this flag with developer UNITINFO). |
0x000F0006 | 0x28 | 0xC | ? |
0x00100000 | 0x2 | 0xC | ? |
0x00100001 | 0x94 | 0xC | Stores Parental Restrictions PIN/Secret Answer and other info |
0x00100002 | 0x1 | 0xC | ? |
0x00100003 | 0x10 | 0xC | ? |
0x00110000 | 0x4 | 0xC | The low u16 indicates whether the system setup is required, such as when the system is booted for the first time or after doing a System Format: 0 = setup required, non-zero = no setup required |
0x00110001 | 0x8 | 0xC | TitleID of the menu to launch, used by NS on dev units (this block can be edited on dev units with Config) |
0x00120000 | 0x8 | 0xC | ? (read by HID) |
0x00130000 | 0x4 | 0xE | If response is 0x100 then debug mode is enabled. |
0x00150000 | 0x4 | 0xE | ? |
0x00150001 | 0x8 | 0xC | ? |
0x00150002 | 0x4 | 0xE | ? |
0x00160000 | 0x4 | 0xE | Unknown, first byte is used by config service-cmd 0x00070040. (Unknown whether the last 3-bytes are used) |
0x00170000 | 0x4 | 0xE | ? |
0x00180000 | 0x4 | 0xC | ? |
0x00180001 | 0x18 | 0xC | ? |
0x00190000 | 0x1 | 0xC | Unknown. NFC-module checks for value1/non-value1. |
The developer unit TID block only exists on developer units.
Stereo Display Settings
All values are hard-coded in cfg module.
Offset | Size | Value | Description |
---|---|---|---|
0x0 | 4 | 62.0f | assumed pupillary distance in mm? |
0x4 | 4 | 289.0f | assumed distance in mm between player's eyes and upper screen? |
0x8 | 4 | 76.80f | width in mm of (old) 3DS upper screen (doesn't vary for different models?) |
0xC | 4 | 46.08f | height in mm of (old) 3DS upper screen (doesn't vary for different models?) |
0x10 | 4 | 10.0f | |
0x14 | 4 | 5.0f | |
0x18 | 4 | 55.58f | |
0x1C | 4 | 21.57f |
Languages
ID | Description |
---|---|
0 | JP |
1 | EN |
2 | FR |
3 | DE |
4 | IT |
5 | ES |
6 | ZH |
7 | KO |
8 | NL |
9 | PT |
10 | RU |
11 | TW |
CountryInfo
Byte | Description |
---|---|
0 | ? |
1 | ? |
2 | ? |
3 | Country code, same as DSi/Wii country codes. Value 0xFF is invalid. |
0x000A0000 Block
Byte | Description |
---|---|
0x0-0x13 | UTF-16 username, with no NULL-terminator. |
0x14-17 | Usually zero? |
0x18-0x1B | u32 NGWord version the username was last checked with. If this value is less than the u32 stored in the NGWord CFA "romfs:/version.dat", the system then checks the username string with the bad-word list CFA again, then updates this field with the value from the CFA |
LCD display config
There seems to be some sort of LCD display configuration stored in this cfg. When using the cfg-save from an Old3DS on a New3DS without formatting the cfg first, the bottom-screen display is somewhat off(which is fixed by formatting the cfg-save).