Line 578:
Line 578:
|
|
| End
| End
+
|}
+
+
== Remap Storage ==
+
+
Remap Storage is used to remap segments of data from virtual offsets to physical offsets. This allows extending the save file without having to relocate existing data.
+
+
Each Remap Storage has three components: [[#Remap storage header|a header]], a remapping table, and the main data storage.
+
+
A remap storage can contain a varying number of segments, each representing a chunk of contiguous virtual storage. A segment can be composed of one or more entries. Each of these entries are mapped from their virtual locations to their physical locations by entries in the remapping table. A physical offset corresponds to that offset in the main data storage.
+
+
When a segment is extended a new remapping entry is appended to the end of the physical storage, allowing expansion without relocating the existing entries.
+
+
Each virtual offset has two parts, a segment index and an offset. The size of these sections is controlled by the remap header.
+
+
Example: 0x3000000000000100<br />
+
If 4 bits were reserved for the segment index, the offset would be split like this, representing offset 0x100 of segment 3.<br />
+
Segment index: 0x3 Offset: 0x000000000000100
+
+
=== Remapping Entry ===
+
+
{| class="wikitable"
+
|-
+
! Start
+
! Length
+
! Description
+
|-
+
| 0x00
+
| 8
+
| Virtual offset
+
|-
+
| 0x08
+
| 8
+
| Physical offset
+
|-
+
| 0x10
+
| 8
+
| Size
+
|-
+
| 0x18
+
| 4
+
| Alignment
+
|-
+
| 0x1c
+
| 4
+
| Padding?
+
|-
|}
|}