The Filesystem Table, or FST, is a file present in Wii U disk images and downloaded content that describes the folders and files contained in the image or file.
It seems to be based on the Wii's FST format, but an extra header/cluster section was added.
All numbers are big-endian.
The file is composed of four sections:
- the main header
- a number of secondary headers describing storage clusters
- a number of file and directory entries, beginning with the root directory
- a table of null-terminated names
Size: 0x20 bytes
|Magic||4||0||always "FST" and a null byte|
|Secondary header size||4||4||(not sure)|
|Secondary header count||4||8||Number of secondary headers in the FST|
Each of these entries describe the position of data on disk. For downloaded content, each corresponds to one entry from the TMD.
Size: 0x20 each
Each of these represents a file or a directory.
Size: 0x10 each
|Name Offset||4||0||Offset in bytes of the name of the file from the start of the nametable|
|Offset||4||4||Offset in sectors of the file in its storage cluster (multiply by 32 for byte offset)|
|Size||4||8||Size of the file in bytes|
|Storage cluster index||4||12||this field & 0xff is an index to the list of secondary headers|
If the top bits of the name offset is set (&0xff000000), then this entry is a directory
In this case, the size corresponds to the number of entries this directory contains.
Table of null-terminated filenames.
https://github.com/CarlKenner/dolphin/blob/WiiU/Source/Core/DiscIO/FileSystemWiiU.cpp - A fork of Dolphin by CarlKenner that can read WiiU disk images.
http://blog.delroth.net/2011/06/reading-wii-discs-with-python/ - some information on the Wii's FST format