Difference between revisions of "Config Savegame"

From 3dbrew
Jump to navigation Jump to search
m (Fixes and some adjustments to formatting)
m (Spell some stuff out for clarification)
Line 165: Line 165:
 
|}
 
|}
  
The dev unit TID block only exists on dev units.
+
The developer unit TID block only exists on developer units.
  
 
===Languages===
 
===Languages===

Revision as of 23:26, 10 November 2014

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
0x00050005 0x20 ? Stereo camera settings?
0x00070001 0x1 ? Sound output mode?
0x00080000 0xC00 0x2? WiFi configuration slot 0
0x00080001 0xC00 0x2? WiFi configuration slot 1
0x00080002 0xC00 0x2? WiFi configuration slot 2
0x00090000 0x8 0x2? This contains a u64 ID, used by processes using NWMUDS:Initialize. The first word is the same as LocalFriendCodeSeed, while the latter is a separate random word
0x00090001 0x8 0xE This console-unique u64 used by GenHashConsoleUnique is generated with the LocalFriendCodeSeed and with random data
0x000A0000 0x1C 0xE Username
0x000A0002 0x1 0xA Language
0x000B0000 0x4 0x8 CountryInfo
0x000B0001 0x800 0x2? Country name in UTF-16, every 0x80-bytes is an entry for each language(not all entries are set)
0x000B0002 0x800 0x2? State name in UTF-16, every 0x80-bytes is an entry for each language
0x000C0000 0xC0 ? Restricted photo exchange data, and other info
0x000C0001 0x14 ? Same as above?
0x000D0000 0x4 ? u16 at offset 0x0: EULA Version which was agreed to.
0x000F0000 0x10 0x8? 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
0x000F0004 0x4 0x8? The first u8 is the System-Model value, the last 3-bytes are unknown
0x00110000 0x4 ? 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 0xA? TitleID of the menu to launch, used by NS on dev units (this block can be edited on dev units with Config)
0x00130000 0x4 ? If response is 0x100 then debug mode is enabled.
0x00160000 0x4 0x8? Unknown, first byte is used by config service-cmd 0x00070040. (Unknown whether the last 3-bytes are used)

The developer unit TID block only exists on developer units.

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

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