Title Database: Difference between revisions
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 | ||
| | | 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 | ||
| | | Version (always 1) | ||
|- | |- | ||
| 0x08 | | 0x08 | ||
| | | 0x08 | ||
| | | Reserved | ||
|} | |} | ||
| 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 | |||
|- | |- | ||
| | | 0xE || 0x2 || u16, Content index for Download Play Child content | ||
| | |||
| | |||
|- | |- | ||
| | | 0x10 || 0x2 || u16, Content index for Instruction Manual content | ||
| | |||
| | |||
|- | |- | ||
| | | 0x12 || 0x2 || u16, Content index for Old3DS update partition (even though this is unused because digital titles don't have update partitions) | ||
| | |||
| | |||
|- | |- | ||
| | | 0x14 || 0x4 || TMD file ID (the ID part in <code>{ID}.tmd</code> inside the title folder) | ||
| | |||
| | |||
|- | |- | ||
| | | 0x18 || 0x4 || CMD file ID (the ID part in <code>{ID}.cmd</code> inside the title folder) | ||
| | |||
| | |||
|- | |- | ||
| | | 0x1C || 0x4 || save file ID (the ID part in <code>{ID}.sav</code> inside the title/data folder) | ||
| | |||
| | |||
|- | |- | ||
| | | 0x20 || 0x8 || u64, extdata ID (zero if title does not use extdata) | ||
| | |||
| | |||
|- | |- | ||
| | | 0x28 || 0x1 || bool, has public.sav (DSiWare only) | ||
| | |||
| | |||
|- | |- | ||
| | | 0x29 || 0x1 || bool, has private.sav (DSiWare only) | ||
| | |||
| | |||
|- | |- | ||
| | | 0x2A || 0x1 || bool, has banner.sav (DSiWare only) | ||
| | |||
| | |||
|- | |- | ||
| | | 0x2B || 0x1 || bool, requires moving public/private/banner.new to public/private/banner.sav (DSiWare only) (see [[AMPXI:WriteTWLSavedata]]) | ||
| | |||
| | |||
|- | |- | ||
| | | 0x2C || 0x1 || u8, CMD format version (see [[Titles#Data_Structure|Title Data Structure]]) | ||
| | |||
| | |||
|- | |- | ||
| | | 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) | ||
| | |||
| | |||
|- | |- | ||
| | | 0x2E || 0x2 || u16, New3DS update partition content index (even though this is unused because digital titles don't have update partitions) | ||
| | |||
| | |||
| | |||
|- | |- | ||
| 0x30 || 0x10 || Product code (first 12 bytes of raw .nds for DSiWare, which is the game title) | |||
|- | |- | ||
| | | 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. | ||
| | |||
| | |||
|- | |- | ||
| | | 0x48 || 0x1 || bool, is temporary (true for DLP child titles added into tmp_i/tmp_t.db) | ||
| | |||
| | |||
|- | |- | ||
| | | 0x49 || 0x1 || u8, [[Application_Manager_Services#ImportTitleContextState|ImportTitleContextState]] | ||
| | |||
| [[ | |||
|- | |- | ||
| 0x4A || 0x1 || bool, overwrite (set when reinstalling an existing title) | |||
|- | |- | ||
| | | 0x4B || 0x1 || Reserved | ||
| | |||
|- | |- | ||
| | | 0x4C || 0x4 || Content ID for content index 0, 0xFFFFFFFF if not applicable | ||
| | |||
|- | |- | ||
| | | 0x50 || 0x4 || u32, random value generated during title installation (See [[CTXT]]) | ||
| | |||
|- | |- | ||
| | | 0x54 || 0x2C || Reserved | ||
| | |||
|} | |} | ||
=== | === 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 | |||
|- | |- | ||
! | ! Start | ||
! Length | |||
! Description | ! Description | ||
|- | |- | ||
| | | 0x0 | ||
| | | 4 | ||
| Amount of tickets X | |||
|- | |- | ||
| | | 0x4 | ||
| | | X * (size of tickets + 4) | ||
| | | Ticket entries | ||
|} | |} | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ Ticket entry | |||
|- | |- | ||
! | ! Start | ||
! Length | |||
! Description | ! Description | ||
|- | |- | ||
| | | 0x0 | ||
| 4 | | 4 | ||
| | | Ticket data size X (often 0x350 but some DLC tickets may be larger) | ||
|- | |- | ||
| | | 0x4 | ||
| | | X | ||
| | | [[Ticket|Ticket]] data | ||
| | |||
|} | |} | ||