Changes

3,424 bytes removed ,  22:52, 3 May 2019
→‎VSXE File System Metadata: Migrate to Inner FAT
Line 69: Line 69:  
The number 126 is probably from some kind of other capacity of 128 with <code>&quot;.&quot;</code> and <code>&quot;..&quot;</code> entries reserved. It is theorized that this is to keep a FAT directory table, with 0x20 bytes for each entry, in one 0x1000 cluster. The motivation is unclear.
 
The number 126 is probably from some kind of other capacity of 128 with <code>&quot;.&quot;</code> and <code>&quot;..&quot;</code> entries reserved. It is theorized that this is to keep a FAT directory table, with 0x20 bytes for each entry, in one 0x1000 cluster. The motivation is unclear.
   −
== VSXE File System Metadata ==
+
== VSXE Filesystem ==
   −
The inner data of <code>00000000/00000001</code> consists of the following components
+
This is one variant of the [[Inner FAT|FAT filesystem]]. Please refer to its page for the description of the filesystem. In general, device file <code>00000000/00000001</code> contains the metadata of the filesystem, while other device files (except for the Quota file) contains normal sub-files
 
  −
* VSXE header
  −
* Directory Hash Table
  −
* File Hash Table
  −
* File Allocation Table
  −
* Data region
  −
** Directory Entry Table
  −
** File Entry Table
  −
 
  −
=== VSXE Header ===
  −
 
  −
{| class="wikitable" border="1"
  −
! Offset
  −
! Length
  −
! Description
  −
|-
  −
| 0x00
  −
| 4
  −
| Magic &quot;VSXE&quot;
  −
|-
  −
| 0x04
  −
| 4
  −
| Magic 0x30000
  −
|-
  −
| 0x08
  −
| 8
  −
| File system Information offset (0x138)
  −
|-
  −
| 0x10
  −
| 8
  −
| Image size in blocks
  −
|-
  −
| 0x18
  −
| 4
  −
| Image block size
  −
|-
  −
| 0x1C
  −
| 4
  −
| Padding
  −
|-
  −
| 0x20
  −
| 8
  −
| Unknown
  −
|-
  −
| 0x28
  −
| 4
  −
| 'Action' made on most recently mounted Extdata image
  −
|-
  −
| 0x2C
  −
| 4
  −
| Unknown
  −
|-
  −
| 0x30
  −
| 4
  −
| D of most recently mounted Extdata image
  −
|-
  −
| 0x34
  −
| 4
  −
| Unknown
  −
|-
  −
| 0x38
  −
| 0x100
  −
| Mount path, from most recently mounted Extdata image
  −
|-
  −
|
  −
 
  −
|
  −
 
  −
| Below is File system Information, which is assumed following the same layout as [[Savegames#SAVE_Header]]
  −
|-
  −
| 0x138
  −
| 4
  −
| Unknown
  −
|-
  −
| 0x13C
  −
| 4
  −
| Data region block size
  −
|-
  −
| 0x140
  −
| 8
  −
| Directory hash table offset
  −
|-
  −
| 0x148
  −
| 4
  −
| Directory hash table bucket count
  −
|-
  −
| 0x14C
  −
| 4
  −
| Padding
  −
|-
  −
| 0x150
  −
| 8
  −
| File hash table offset
  −
|-
  −
| 0x158
  −
| 4
  −
| File hash table bucket count
  −
|-
  −
| 0x15C
  −
| 4
  −
| Padding
  −
|-
  −
| 0x160
  −
| 8
  −
| File allocation table offset
  −
|-
  −
| 0x168
  −
| 4
  −
| File allocation table entry count
  −
|-
  −
| 0x16C
  −
| 4
  −
| Padding
  −
|-
  −
| 0x170
  −
| 8
  −
| Data region offset
  −
|-
  −
| 0x178
  −
| 4
  −
| Data region block count (= File allocation table entry count)
  −
|-
  −
| 0x17C
  −
| 4
  −
| Padding
  −
|-
  −
| 0x180
  −
| 4
  −
| Directory entry table starting block
  −
|-
  −
| 0x184
  −
| 4
  −
| Directory entry table block count
  −
|-
  −
| 0x188
  −
| 4
  −
| Maximum directory count
  −
|-
  −
| 0x18C
  −
| 4
  −
| Padding
  −
|-
  −
| 0x190
  −
| 4
  −
| File entry table starting block
  −
|-
  −
| 0x194
  −
| 4
  −
| File entry table block count
  −
|-
  −
| 0x198
  −
| 4
  −
| Maximum file count
  −
|-
  −
| 0x19C
  −
| 4
  −
| Padding
  −
|}
  −
 
  −
* All &quot;offsets&quot; are relative to the beginning of VSXE image. All &quot;starting block index&quot; are relative to the beginning of data region.
  −
 
  −
=== File Allocation Table &amp; Data Region ===
  −
 
  −
These function in the same way as [[Savegames#File Allocation Table|the file allocation in savegames]]. However, the only two &quot;files&quot; allocated in the data region are the directory entry table and file entry table, so the data region is usually pretty small, and the file allocation table is unchanged once created and has no free blocks. Thus, the offset and size of directory / file entry table can be found directly by <code>offset = entry_table_starting block * data_region_block_size + data_region_offset</code> and <code>size = entry_table_block_count * data_region_block_size</code>
  −
 
  −
=== Directory Hash Table &amp; File Hash Table ===
  −
 
  −
These function in the same way as [[Savegames#Directory Hash Table &amp; File Hash Table|those in savegames]]
  −
 
  −
=== Directory Entry Table ===
  −
 
  −
This functions in the same way as [[Savegames#Directory Entry Table|the one in savegames]]. It lists all virtual directories in this extdata.
  −
 
  −
=== File Entry Table ===
  −
 
  −
This functions in a similar way as [[Savegames#File Entry Table|the one in savegames]]. It lists all virtual files in this extdata. However, the format of a (non-dummy) file entry is a little bit modified:
  −
 
  −
{| class="wikitable" border="1"
  −
! Offset
  −
! Length
  −
! Description
  −
|-
  −
| 0x00
  −
| 4
  −
| Parent directory index in directory entry table
  −
|-
  −
| 0x04
  −
| 16
  −
| ASCII file name
  −
|-
  −
| 0x14
  −
| 4
  −
| Next sibling file index. 0 if this is the last one
  −
|-
  −
| 0x18
  −
| 4
  −
| Padding
  −
|-
  −
| 0x1C
  −
| 4
  −
| <s>First block index in data region</s> '''Always 0x80000000 because unused'''
  −
|-
  −
| 0x20
  −
| 8
  −
| <s>File size</s> '''Unique identifier'''
  −
|-
  −
| 0x28
  −
| 4
  −
| Padding?
  −
|-
  −
| 0x2C
  −
| 4
  −
| Index of the next file in the same hash table bucket. 0 if this is the last one
  −
|}
      
Each non-dummy file entry corresponds to a device file. The path to the device file is generated by the following computation:
 
Each non-dummy file entry corresponds to a device file. The path to the device file is generated by the following computation:
242

edits