XCI: Difference between revisions

RE'd from GameCardWriter
Line 1: Line 1:
=Header=
= Header =
The header is 0x200-bytes, at Gamecard+0.
The header is 0x200-bytes at offset 0 in the Gamecard.


{| class="wikitable" border="1"
{| class="wikitable" border="1"
Line 10: Line 10:
| 0x0
| 0x0
| 0x100
| 0x100
| RSA-2048 PKCS #1 signature over the data from 0x100 - 0x200.
| RSA-2048 PKCS #1 signature over the XCI header (data from 0x100 to 0x200)
|-
|-
| 0x100
| 0x100
Line 18: Line 18:
| 0x104
| 0x104
| 0x4
| 0x4
| Offset of Secure partition (Size of non-secure data?), in Media Units (0x200 bytes for switch gamecarts)
| Write Size (size of non-secure data in Media Units which are 0x200 bytes)
|-
|-
| 0x108
| 0x108
Line 30: Line 30:
| 0x10D
| 0x10D
| 0x1
| 0x1
| Cartridge Size. 0xF8 = 2 GB, 0xF0 = 4 GB, 0xE0 = 8 GB, 0xE1 = 16 GB, 0xE2 = 32 GB
| Gamecard Type (0xFA = 1GB, 0xF8 = 2GB, 0xF0 = 4GB, 0xE0 = 8GB, 0xE1 = 16GB, 0xE2 = 32GB)
|-
|-
| 0x10E
| 0x10E
Line 38: Line 38:
| 0x10F
| 0x10F
| 0x1
| 0x1
| ?
| Gamecard Options (bit0 = AutoBoot, bit1 = HistoryErase)
|-
|-
| 0x110
| 0x110
Line 46: Line 46:
| 0x118
| 0x118
| 0x8
| 0x8
| Size of the Gamecart, in Media Units
| Gamecard Size (in Media Units which are 0x200 bytes)
|-
|-
| 0x120
| 0x120
| 0x10
| 0x10
| ?
| Gamecard Initial Data IV (reversed)
|-
|-
| 0x130
| 0x130
| 0x8
| 0x8
| Offset of HFS0 FS partition
| HFS0 partition offset
|-
|-
| 0x138
| 0x138
| 8
| 0x8
| HFS0 Header size
| HFS0 header size
|-
|-
| 0x140
| 0x140
Line 82: Line 82:
| 0x18C
| 0x18C
| 0x4
| 0x4
| Offset of Secure partition (Size of non-secure data?), in Media Units, again.
| Duplicate Write Size (size of non-secure data in Media Units which are 0x200 bytes)
|-
|-
| 0x190
| 0x190
| 0x70
| 0x70
| Encrypted data/hashes of some kind
| Gamecard Initial Data (AES-128-CBC encrypted)
|}
|}


= Cert =
= Cert =
This is for the CERT, located at Gamecard + 0x7000 (always?). This matches exactly the output from fsp-srv IDeviceOperator cmd 206 "GetGameCardDeviceCertificate".
This is for the CERT, located at Gamecard + 0x7000 (always?). This matches exactly the output from fsp-srv IDeviceOperator cmd 206 "GetGameCardDeviceCertificate".


Line 191: Line 190:
The string table is 00-padded to align the start of raw filedata with a sector/media unit boundary (usually?).
The string table is 00-padded to align the start of raw filedata with a sector/media unit boundary (usually?).


=Typical Cartridge Layout=
= Typical Cartridge Layout =
Observed gamecarts contain three partitions: "update", "normal", and "secure".
Observed gamecards contain three partitions: "update", "normal", and "secure".


The update partition (Gamecard partition 0 for fsp-srv cmd 31) contains .cnmt.nca + .nca files for the entire system update required to play the game. Launch day carts contain a full copy of 1.0 ncas, newer carts contain newer sysupdate NCAs etc.
The update partition (Gamecard partition 0 for fsp-srv cmd 31) contains .cnmt.nca + .nca files for the entire system update required to play the game. Launch day carts contain a full copy of 1.0 ncas, newer carts contain newer sysupdate NCAs etc.
Line 201: Line 200:


The entire rest of the gamecard after the secure partition ends is all FF padding.
The entire rest of the gamecard after the secure partition ends is all FF padding.
[4.0.0+] The "normal" partition is now empty and a new partition "logo" was added.