Inner FAT: Difference between revisions

Wwylele (talk | contribs)
Embed diagrams
Added Tools section
 
(One intermediate revision by one other user not shown)
Line 484: Line 484:


<pre>uint32_t GetBucket(
<pre>uint32_t GetBucket(
     char name[16 or 8], // For savegame/extdata, this takes all 16 bytes including trailing zeros; For title database, this is the 8-byte title ID
     uint8_t name[16 or 8], // For savegame/extdata, this takes all 16 bytes including trailing zeros; For title database, this is the 8-byte title ID
     uint32_t parent_dir_index,
     uint32_t parent_dir_index,
     uint32_t bucket_count
     uint32_t bucket_count
Line 499: Line 499:
}
}
</pre>
</pre>


== File Allocation Table ==
== File Allocation Table ==
Line 554: Line 553:


For extdata, because only two "files" (directory and file entry tables) are allocated in the data region, and their size never changes once the extdata is created, they are guaranteed continuous in the data region, and the FAT degenerates to two big nodes. Therefore, instead of going through FAT, the offset and size of directory / file entry table can be found directly by offset = entry_table_starting block * data_region_block_size + data_region_offset and size = entry_table_block_count * data_region_block_size.
For extdata, because only two "files" (directory and file entry tables) are allocated in the data region, and their size never changes once the extdata is created, they are guaranteed continuous in the data region, and the FAT degenerates to two big nodes. Therefore, instead of going through FAT, the offset and size of directory / file entry table can be found directly by offset = entry_table_starting block * data_region_block_size + data_region_offset and size = entry_table_block_count * data_region_block_size.
==Tools==
https://github.com/wwylele/3ds-save-tool