Changes

Jump to navigation Jump to search
3,454 bytes added ,  17:09, 22 May 2019
m
no edit summary
Line 1: Line 1: −
For the content of the NCA FS which can be [[Filesystem_services|mounted]], see [[NCA_Content_FS|here]].
+
This is the metadata file that ends in <code>".cnmt{.nca}"</code> or <code>"meta0.ncd"</code>. This seems to replace the TMD format.
   −
For the format of the actual NCA, see [[NCA_Format|here]].
+
There's at least 9 different filenames used for ".cnmt":
 
  −
= Metadata file =
  −
This is the file that ends in <code>".cnmt{.nca}"</code> or <code>"meta0.ncd"</code>. This seems to replace the TMD format.
  −
 
  −
There's at least 7 different filenames used for ".cnmt":
   
* "Application_{lower-case hex titleID}.cnmt"
 
* "Application_{lower-case hex titleID}.cnmt"
 
* "Patch_{lower-case hex titleID}.cnmt"
 
* "Patch_{lower-case hex titleID}.cnmt"
 +
* "AddOnContent_{lower-case hex titleID}.cnmt"
 
* "SystemUpdate_{hex titleID}.cnmt"
 
* "SystemUpdate_{hex titleID}.cnmt"
 
* "SystemData_{lower-case hex titleID}.cnmt"
 
* "SystemData_{lower-case hex titleID}.cnmt"
Line 14: Line 10:  
* "BootImagePackage_{lower-case hex titleID}.cnmt"
 
* "BootImagePackage_{lower-case hex titleID}.cnmt"
 
* "BootImagePackageSafe_{lower-case hex titleID}.cnmt"
 
* "BootImagePackageSafe_{lower-case hex titleID}.cnmt"
 +
* "Delta_{lower-case hex titleID}.cnmt"
   −
It starts with a header:
+
== Header ==
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 23: Line 20:  
|-
 
|-
 
| 0x0
 
| 0x0
| 8
+
| 0x8
 
| Title ID
 
| Title ID
 
|-
 
|-
 
| 0x8
 
| 0x8
| 4
+
| 0x4
| u32 [[Title_list|title-version]]
+
| Version
 
|-
 
|-
 
| 0xC
 
| 0xC
| 1
+
| 0x1
| Type (see [[Content_Manager_services#Title_Types|Title Types]])
+
| [[NCM_services#Title_Types|Meta Type]]
 
|-
 
|-
 
| 0xD
 
| 0xD
| 1
+
| 0x1
|
+
| Unused
 
|-
 
|-
 
| 0xE
 
| 0xE
| 2
+
| 0x2
| Offset to table relative to the end of this 0x20-byte header.
+
| Extended Header Size
 
|-
 
|-
 
| 0x10
 
| 0x10
| 2
+
| 0x2
| Number of content entries
+
| Content Count
 
|-
 
|-
 
| 0x12
 
| 0x12
| 2
+
| 0x2
| Number of meta entries
+
| Content Meta Count
 
|-
 
|-
 
| 0x14
 
| 0x14
| 12
+
| 0x1
|
+
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)
 +
|-
 +
| 0x15
 +
| 0x3
 +
| Unused
 +
|-
 +
| 0x18
 +
| 0x4
 +
| Required Download System Version
 +
|-
 +
| 0x1C
 +
| 0x4
 +
| Unused
 
|}
 
|}
   −
With SystemUpdate, the 4-bytes at offset 0xE are zero, with the entry-count field located at offset 0x12 instead(header size is the same).
+
== SystemUpdate Extended Header ==
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| Extended Data Size
 +
|}
   −
An optional header can follow, depending on the title type.
+
== Application Extended Header ==
 
+
{| class="wikitable" border="1"
At the end of the file following the entries is a 0x20-byte block, presumably a hash.
+
|-
 
+
! Offset
With Patch-format, there's additional data after the end of the entries specified in the header and before the ending hash.
+
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| Patch ID
 +
|-
 +
| 0x8
 +
| 0x4
 +
| Required System Version
 +
|-
 +
| 0xC
 +
| 0x4
 +
| Unused
 +
|}
   −
== Application header ==
+
== Patch Extended Header ==
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 70: Line 103:  
! Description
 
! Description
 
|-
 
|-
| 0x20
+
| 0x0
| 8
+
| 0x8
| Patch Title ID
+
| Application ID
 +
|-
 +
| 0x8
 +
| 0x4
 +
| Required System Version
 +
|-
 +
| 0xC
 +
| 0x4
 +
| Extended Data Size
 
|-
 
|-
| 0x28
+
| 0x10
| 8
+
| 0x8
| Minimum system version
+
| Unused
 
|}
 
|}
   −
== Patch header ==
+
== AddOnContent Extended Header ==
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 86: Line 127:  
! Description
 
! Description
 
|-
 
|-
| 0x20
+
| 0x0
| 8
+
| 0x8
| Original title ID
+
| Application ID
 +
|-
 +
| 0x8
 +
| 0x4
 +
| Required Application Version
 
|-
 
|-
| 0x28
+
| 0xC
| 8
+
| 0x4
| Minimum system version
+
| Unused
 
|}
 
|}
   −
== Add-on content header ==
+
== Delta Extended Header ==
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 102: Line 147:  
! Description
 
! Description
 
|-
 
|-
| 0x20
+
| 0x0
| 8
+
| 0x8
| Application title ID
+
| Application ID
 +
|-
 +
| 0x8
 +
| 0x4
 +
| Extended Data Size
 
|-
 
|-
| 0x28
+
| 0xC
| 8
+
| 0x4
| Minimum application version
+
| Unused
 
|}
 
|}
   −
== Content records ==
+
== Content Records ==
 
  −
Each entry is 0x38 bytes:
      
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 122: Line 169:  
|-
 
|-
 
| 0x0
 
| 0x0
| 32
+
| 0x20
 
| Hash
 
| Hash
 
|-
 
|-
 
| 0x20
 
| 0x20
| 16
+
| 0x10
| NcaId [same as first 16-bytes of hash]
+
| Content ID
 
|-
 
|-
 
| 0x30
 
| 0x30
| 6
+
| 0x6
| Size, same as the output from [[Content_Manager_services#GetEntrySize]].
+
| Size
 
|-
 
|-
 
| 0x36
 
| 0x36
| 1
+
| 0x1
| Type (0=meta, 1=program, 2=data, 3=control, 4=offline-manual [[Internet_Browser|html]], 5=legal [[Internet_Browser|html]], 6=[[NCA_Format|game-update]] RomFS patches?)
+
| Content Type (0=Meta, 1=Program, 2=Data, 3=Control, 4=[[Internet_Browser|HtmlDocument]], 5=[[Internet_Browser|LegalInformation]], 6=[[NCA_Format|DeltaFragment]])
 
|-
 
|-
 
| 0x37
 
| 0x37
| 1
+
| 0x1
|
+
| Id Offset
 +
|}
 +
 
 +
== Content Meta Records ==
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| Title ID
 +
|-
 +
| 0x8
 +
| 0x4
 +
| Version
 +
|-
 +
| 0xC
 +
| 0x1
 +
| [[NCM_services#Title_Types|Meta Type]]
 +
|-
 +
| 0xD
 +
| 0x1
 +
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)
 +
|-
 +
| 0xE
 +
| 0x2
 +
| Unused
 
|}
 
|}
   −
== Meta records ==
+
This is used for SystemUpdate, see here: [[NCM_services#ReadEntryMetaRecords]].
   −
Each entry is 0x10 bytes:
+
== SystemUpdate Extended Data ==
    
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
Line 153: Line 229:  
|-
 
|-
 
| 0x0
 
| 0x0
| 8
+
| 0x4
| Title ID
+
| Version
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Variation Count
 +
|-
 +
| 0x8
 +
| 0x4
 +
| Firmware Variation
 +
|-
 +
| 0xC
 +
| 0x1C * Variation Count
 +
| Unused
 +
|}
 +
 
 +
== Patch Extended Data ==
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x4
 +
| History Count
 +
|-
 +
| 0x4
 +
| 0x4
 +
| Delta History Count
 
|-
 
|-
 
| 0x8
 
| 0x8
| 4
+
| 0x4
| Title version
+
| Delta Count
 +
|-
 +
| 0xC
 +
| 0x4
 +
| Fragment Set Count
 +
|-
 +
| 0x10
 +
| 0x4
 +
| History Content Count
 +
|-
 +
| 0x14
 +
| 0x4
 +
| Delta Content Count
 +
|-
 +
| 0x18
 +
| 0x4
 +
| Unused
 +
|-
 +
| 0x1C
 +
| 0x38 * History Count
 +
| [[CNMT#History_Header|History Headers]]
 +
|-
 +
|
 +
| 0x28 * Delta History Count
 +
| [[CNMT#Delta_History|Delta Histories]]
 +
|-
 +
|
 +
| 0x28 * Delta Count
 +
| [[CNMT#Delta_Header|Delta Headers]]
 +
|-
 +
|
 +
| 0x34 * Fragment Set Count
 +
| [[CNMT#Fragment_Set|Fragment Sets]]
 +
|-
 +
|
 +
| 0x18 * History Content Count
 +
| [[CNMT#Content_Records|History Content Records (Content Records without the Hash entry)]]
 +
|-
 +
|
 +
| 0x38 * Delta Content Count
 +
| [[CNMT#Content_Records|Delta Content Records]]
 +
|-
 +
|
 +
| 0x4 * Fragment Indicator Count (Fragment Set)
 +
| [[CNMT#Fragment_Indicator|Fragment Indicators]]
 +
|}
 +
 
 +
=== History Header ===
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x10
 +
| [[CNMT#Content_Meta_Records|Content Meta Record]]
 
|-
 
|-
 
| 0xC
 
| 0xC
| 1
+
| 0x1
| Type (see [[Content_Manager_services#Title_Types|Title Types]])
+
| [[NCM_services#Title_Types|Meta Type]]
 
|-
 
|-
 
| 0xD
 
| 0xD
| 1
+
| 0x1
| ? bit0 set = don't install?
+
| Attributes (0=None, 1=IncludesExFatDriver, 2=Rebootless)
 
|-
 
|-
 
| 0xE
 
| 0xE
| 2
+
| 0x2
| Unused?
+
| Unused
 +
|-
 +
| 0x10
 +
| 0x20
 +
| Digest
 +
|-
 +
| 0x30
 +
| 0x2
 +
| Content Info Count
 +
|-
 +
| 0x32
 +
| 0x6
 +
| Unused
 +
|}
 +
 
 +
=== Delta History ===
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| Source Patch ID
 +
|-
 +
| 0x8
 +
| 0x8
 +
| Destination Patch ID
 +
|-
 +
| 0x10
 +
| 0x4
 +
| Source Version
 +
|-
 +
| 0x14
 +
| 0x4
 +
| Destination Version
 +
|-
 +
| 0x18
 +
| 0x8
 +
| Download Size
 +
|-
 +
| 0x20
 +
| 0x8
 +
| Unused
 
|}
 
|}
   −
This is used for SystemUpdate, see here: [[Content_Manager_services#GetUpdateTitleList]].
+
=== Delta Header ===
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| Source Patch ID
 +
|-
 +
| 0x8
 +
| 8
 +
| Destination Patch ID
 +
|-
 +
| 0x10
 +
| 0x4
 +
| Source Version
 +
|-
 +
| 0x14
 +
| 0x4
 +
| Destination Version
 +
|-
 +
| 0x18
 +
| 0x2
 +
| Fragment Set Count
 +
|-
 +
| 0x1A
 +
| 0x6
 +
| Unused
 +
|-
 +
| 0x20
 +
| 0x2
 +
| Content Info Count
 +
|-
 +
| 0x22
 +
| 0x6
 +
| Unused
 +
|}
 +
 
 +
=== Fragment Set ===
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x10
 +
| Source Content ID
 +
|-
 +
| 0x10
 +
| 0x10
 +
| Destination Content ID
 +
|-
 +
| 0x20
 +
| 0x6
 +
| Source Size
 +
|-
 +
| 0x26
 +
| 0x6
 +
| Destination Size
 +
|-
 +
| 0x2C
 +
| 0x2
 +
| Fragment Indicator Count
 +
|-
 +
| 0x2E
 +
| 0x1
 +
| Content Type (0=Meta, 1=Program, 2=Data, 3=Control, 4=[[Internet_Browser|HtmlDocument]], 5=[[Internet_Browser|LegalInformation]], 6=[[NCA_Format|DeltaFragment]])
 +
|-
 +
| 0x2F
 +
| 0x1
 +
| Update Type (0=ApplyAsDelta, 1=Overwrite, 2=Create)
 +
|-
 +
| 0x30
 +
| 0x4
 +
| Unused
 +
|}
 +
 
 +
=== Fragment Indicator ===
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x2
 +
| Content Info Index
 +
|-
 +
| 0x2
 +
| 0x2
 +
| Fragment Index
 +
|}
 +
 
 +
== Delta Extended Data ==
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x8
 +
| Source Patch ID
 +
|-
 +
| 0x8
 +
| 0x8
 +
| Destination Patch ID
 +
|-
 +
| 0x10
 +
| 0x4
 +
| Source Version
 +
|-
 +
| 0x14
 +
| 0x4
 +
| Destination Version
 +
|-
 +
| 0x18
 +
| 0x2
 +
| Fragment Set Count
 +
|-
 +
| 0x1A
 +
| 0x6
 +
| Unused
 +
|-
 +
| 0x20
 +
| 0x34 * Fragment Set Count
 +
| [[CNMT#Fragment_Set|Fragment Sets]]
 +
|-
 +
|
 +
| 0x4 * Fragment Indicator Count (Fragment Set)
 +
| [[CNMT#Fragment_Indicator|Fragment Indicators]]
 +
|}
 +
 
 +
== Digest ==
 +
 
 +
Always found at the end of the file.
 +
 
 +
{| class="wikitable" border="1"
 +
|-
 +
! Offset
 +
! Size
 +
! Description
 +
|-
 +
| 0x0
 +
| 0x20
 +
| Digest
 +
|}
23

edits

Navigation menu