Savegames: Difference between revisions
Moosehunter (talk | contribs) |
Moosehunter (talk | contribs) Remap Storage |
||
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? | |||
|- | |||
|} | |} | ||