Difference between revisions of "RomFS"
Jump to navigation
Jump to search
Line 38: | Line 38: | ||
| 0x08 | | 0x08 | ||
| 0x4 | | 0x4 | ||
− | | | + | | Level 1 size |
|- | |- | ||
| 0x14 | | 0x14 | ||
Line 58: | Line 58: | ||
| 0x44 | | 0x44 | ||
| 0x4 | | 0x4 | ||
− | | | + | | Level 3 size |
|- | |- | ||
| 0x4C | | 0x4C | ||
Line 73: | Line 73: | ||
|} | |} | ||
− | level1offset = align(0x5C, 8). | + | level1offset = align(0x5C, 8). |
− | + | level3offset = align(Level1offset, level1blocksize). | |
− | + | ||
The block hash from the header hashes the second block at 0x2000. | The block hash from the header hashes the second block at 0x2000. |
Revision as of 01:58, 2 September 2012
Overview
RomFS or Read-Only Filesystem is part of the NCCH format, and is used as external file storage.
RomFS can be used:
- in conjunction with the ExeFS of a NCCH
- to contain the game manual accessible from the Home Menu
- to contain the DLP Child CIA
- or to contain game cartridge update data
(There may be more implementations in the future)
Format
All of the content (including the header) in RomFS appears to be aligned to 0x1000 byte blocks, the first block starts at 0x1000. Starting with the second block, every block begins with a SHA-256 hash. This hashes the whole 0x1000-byte block following this block. For the last block, this hash hashes the first block at 0x1000. The total RomFS filesize is always at least 0x4000.
The RomFS header is 0x80 bytes long and following is known about the structure:
START | SIZE | DESCRIPTION |
---|---|---|
0x00 | 0x4 | Magic "IVFC" |
0x04 | 0x4 | Magic number 0x10000 |
0x08 | 0x4 | Level 1 size |
0x14 | 0x4 | 2nd content size |
0x1C | 0x4 | Level 1 block size, in log2. |
0x2C | 0x4 | 3rd content size |
0x34 | 0x4 | Level 2 block size, in log2. |
0x44 | 0x4 | Level 3 size |
0x4C | 0x4 | Level 3 block size, in log2. |
0x58 | 0x4 | Optional info size. |
0x60 | 0x20 | Second block hash |
level1offset = align(0x5C, 8). level3offset = align(Level1offset, level1blocksize).
The block hash from the header hashes the second block at 0x2000.