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. |