A title is an executable installed on the Wii, installed to /title. Titles include the System Menu, IOS, and channels. Each title has a TMD and a ticket that are used for installation and launching. Titles have their contents stored as separate files in a common directory.
Discs are also treated as titles, as they have their own title ID used for save data, as well as an installable channel if they have one.
A Title-ID is a 64-bit number that uniquely identifies a title. The high 32 bits are used to indicate the type of title, and the low 32 bits are used to identify the particular title. The title is installed to /title/HIGHBITS/LOWBITS/.
By convention, a Title-ID may either be written as 16 hex digits (e.g. 0000000100000002 or 00010000525a4445) or in two hexadecimal or ASCII parts (e.g. 1-2 or 10000-RZDE). The ASCII part is often written alone, due to there being no ambiguity with the other high 32 bits.
Types of titles
The upper half of each title ID identifies the type of the title.
Channels come in multiple types; built in ones use 00010002, while ones from the Wii Shop Channel use 00010001. However, this only applies to channels; DLC uses 00010005. Most discs use 00010000, although discs that install channels, as well as the channels installed by those discs, use 00010004.
Finally, titles used internally but are not as essential as system titles, such as rgnsel, use 00010008. These titles behave much like channels, but they are not visible on the System Menu.
Titles are handled by the ES module of IOS. Titles can be launched with the ES_LaunchTitle call, which requires a title ID and a ticket. Signatures are not checked in this case, as it is assumed they are valid if the title got installed to the NAND.
Files related to title A-B are stored under /title/A/B/, where A and B are in hex, padded to 16 characters with leading zeros. The following locations exist:
/content/title.tmd - the TMD for this title
/content/C.app - the content with content ID C, where C is padded like the title ID.
/data/ - save data filesystem. Exact structure depends on the title itself.
Titles are subdivided into contents, which can be referred to both by their content ID and index; while index is used for all purposes surrounding the IOS interface, the ID is used internally in the filesystem and on NUS.
In general, titles start with content indices matching the IDs, but because content IDs are independent of version, when a content requires updating, its ID is replaced with the next available ID. The newer TMD is then changed to use this new content ID for the given index.
Indices themselves are used for both the "boot index" field in the TMD, as well as the ES_OpenContent ioctl.
Types of contents
Each content has a "type" field that can have one of several values:
- Type 0x0001 is a "normal" content.
- Type 0x0002 is a content type seen on a few development discs. It probably uses a hash tree, but disables verification of the h3 tree.
- Type 0x0003 means the content is verified using a hash tree. This is typically used on discs, where the hash tree is the only content.
- Type 0x4001 is used by DLC contents. It seems to mean title installation can still be finished if the content is absent.
- Type 0x8001 is shared between titles. Using this type will cause it to be installed into /shared2 instead of TITLE/content.