Title Database: Difference between revisions

Wwylele (talk | contribs)
Migrate to Inner FAT
TimmSkiller (talk | contribs)
Restructure a bit to have a proper ToC
 
(7 intermediate revisions by 2 users not shown)
Line 69: Line 69:
|-
|-
| 0x08
| 0x08
| 0x78
| 0x4
| Version (always 0)
|-
| 0xC
| 0x74
| Reserved
| Reserved
|}
|}


For ticket.db different pre header is used:
For ticket.db, a different pre-header is used:


{| class="wikitable"
{| class="wikitable"
Line 87: Line 91:
| 0x04
| 0x04
| 0x04
| 0x04
| Unknown (always 0x00000001 ?)
| Version (always 1)
|-
|-
| 0x08
| 0x08
| 0x04
| 0x08
| Unknown
| Reserved
|-
| 0x0C
| 0x04
| Unknown (0x30 smaller than previous one)
|}
|}


Line 125: Line 125:
| SD Card title.db
| SD Card title.db
| TEMPTDB
| TEMPTDB
|-
| (unused, likely supposed to be SD card import.db)
| SDMCIDB
|}
|}


Line 131: Line 134:
This is a variant of [[Inner FAT|FAT filesystem]]. It consists one "root" directory and multiple "files". Each "file" is one title info entry described below.
This is a variant of [[Inner FAT|FAT filesystem]]. It consists one "root" directory and multiple "files". Each "file" is one title info entry described below.


== Title Info Entry ==
=== Title Info Entry ===


An entry contains information taken from both the application NCCH file(s) and TMD.
An entry contains information taken from both the application NCCH file(s) and TMD.
Line 137: Line 140:
{| class="wikitable"
{| class="wikitable"
|-
|-
! Start
! Start !! Length !! Description
! Length
|-
! Description
| 0x0 || 0x8 || u64, Title Size
|-
| 0x8 || 0x4 || u32, Title Type from TMD (usually 0x40)
|-
| 0xC || 0x2 || u16, Title Version
|-
|-
| 0x0
| 0xE || 0x2 || u16, Content index for Download Play Child content
| 8
| Title Size
|-
|-
| 0x8
| 0x10 || 0x2 || u16, Content index for Instruction Manual content
| 4
| Title Type(usually 0x40)
|-
|-
| 0xC
| 0x12 || 0x2 || u16, Content index for Old3DS update partition (even though this is unused because digital titles don't have update partitions)
| 4
| Title Version
|-
|-
| 0x10
| 0x14 || 0x4 || TMD file ID (the ID part in <code>{ID}.tmd</code> inside the title folder)
| 4
| Flags_0
|-
|-
| 0x14
| 0x18 || 0x4 || CMD file ID (the ID part in <code>{ID}.cmd</code> inside the title folder)
| 4
| TMD Content ID
|-
|-
| 0x18
| 0x1C || 0x4 || save file ID (the ID part in <code>{ID}.sav</code> inside the title/data folder)
| 4
| CMD Content ID
|-
|-
| 0x1c
| 0x20 || 0x8 || u64, extdata ID (zero if title does not use extdata)
| 4
| Flags_1
|-
|-
| 0x20
| 0x28 || 0x1 || bool, has public.sav (DSiWare only)
| 4
| ExtdataID low (zero if title doesn't use Extdata)
|-
|-
| 0x24
| 0x29 || 0x1 || bool, has private.sav (DSiWare only)
| 4
| Reserved
|-
|-
| 0x28
| 0x2A || 0x1 || bool, has banner.sav (DSiWare only)
| 8
| Flags_2
|-
|-
| 0x30
| 0x2B || 0x1 || bool, requires moving public/private/banner.new to public/private/banner.sav (DSiWare only) (see [[AMPXI:WriteTWLSavedata]])
| 0x10
| Product Code
|-
|-
| 0x40
| 0x2C || 0x1 || u8, CMD format version (see [[Titles#Data_Structure|Title Data Structure]])
| 0x10
| Reserved
|-
|-
| 0x50
| 0x2D || 0x1 || bool, is user DSiWare title (as in, does not have system title bit set, see [[Title_list#TWL_(DSi)_Titles|TWL (DSi) Titles]] for more information)
| 0x4
| Unknown
|-
|-
| 0x54
| 0x2E || 0x2 || u16, New3DS update partition content index (even though this is unused because digital titles don't have update partitions)
| 0x2c
| Reserved
|}
 
For ticket.db title info contains a small header and actual ticket data:
{| class="wikitable"
|-
|-
! Start
| 0x30 || 0x10 || Product code (first 12 bytes of raw .nds for DSiWare, which is the game title)
! Length
! Description
|-
|-
| 0x0
| 0x40 || 0x8 || u64, ordering number. Used in some code paths to find the "latest" added entry, but this value is never written and always 0.
| 4
| Unknown (always 0x00000001?)
|-
|-
| 0x4
| 0x48 || 0x1 || bool, is temporary (true for DLP child titles added into tmp_i/tmp_t.db)
| 4
| Ticket data size X (=0x530)
|-
|-
| 0x8
| 0x49 || 0x1 || u8, [[Application_Manager_Services#ImportTitleContextState|ImportTitleContextState]]
| X
| [[Ticket|Ticket]] data
|}
 
==== Flags_0 ====
 
{| class="wikitable"
|-
|-
! Index
| 0x4A || 0x1 || bool, overwrite (set when reinstalling an existing title)
! Description
|-
|-
| 0
| 0x4B || 0x1 || Reserved
| Electronic Manual
|-
|-
| 1
| 0x4C || 0x4 || Content ID for content index 0, 0xFFFFFFFF if not applicable
| ?
|-
|-
| 2
| 0x50 || 0x4 || u32, random value generated during title installation (See [[CTXT]])
| ?
|-
|-
| 3
| 0x54 || 0x2C || Reserved
| ?
|}
|}


==== Flags_1 ====
=== Ticket Info Entry ===
For ticket.db entries, there is a header indicates ticket count (as a Title ID can have more than one ticket installed). Then each entry contains the size, followed by the actual ticket data.


{| class="wikitable"
{| class="wikitable"
|+ Header
|-
|-
! Index
! Start
! Length
! Description
! Description
|-
|-
| 0
| 0x0
| SD Save Data
| 4
| Amount of tickets X
|-
|-
| 1
| 0x4
| ?
| X * (size of tickets + 4)
|-
| Ticket entries
| 2
| ?
|-
| 3
| ?
|}
|}
==== Flags_2 ====
{| class="wikitable"
{| class="wikitable"
|+ Ticket entry
|-
|-
! Index
! Start
! Length
! Description
! Description
|-
|-
| 0
| 0x0
| DSiWare Related (Visibility on Home Menu/Export Flag?)
|-
| 1
| ?
|-
| 2
| ?
|-
| 3
| ?
|-
| 4
| 4
| Found with DSiWare Titles and titles with an 'Application' Title ID
| Ticket data size X (often 0x350 but some DLC tickets may be larger)
|-
|-
| 5
| 0x4
| DSiWare Related (Visibility on Home Menu/Export Flag?)
| X
|-
| [[Ticket|Ticket]] data
| 6
| ?
|-
| 7
| ?
|}
|}