Difference between revisions of "MOTHER 3:SRAM map"
|Line 51:||Line 51:|
==Bank 4 (04000-05FFF)==
==Bank 4 (04000-05FFF)==
This bank contains the slot 1 data.
This bank contains the slot 1 data. is mirrored at bank 7
Revision as of 18:37, 13 July 2013
This is the SRAM map for MOTHER 3. A MOTHER 3 save file contains data for two file slots.
The SRAM is divided into 16 banks of 0x1000 bytes each. All banks that are in use begin with the 4-byte header
02 00 4D 33
This is convenient, since we can seed the checksum with a value of 0x334F and begin summing at 0x006, rather than having to manually skip over the checksum bytes at 0x004.
Each bank that's in use has a 16-bit checksum complement at the 4th and 5th byte. There's an exception for bank 0: this checksum is located at 0x0F0 instead, and it only takes into account the data stored from 0x000 to 0x0EF.
The checksum is calculated by summing each 16-bit value in the bank (not including the checksum itself), and the complementing it with 0xFFFF. For example, if the bank started with the bytes
02 00 4D 33 xx xx 91 B7 3F 02 7C 0C ...
Then the checksum would start off by summing
0002 + 334D + B791 + 023F + 0C7C + ...
If any checksum is incorrect, the game will delete the entire save data.
Bank 0 (00000-00FFF)
This bank contains some general overhead data. It is mirrored at bank 1.
- 00000-00003 (004) = Standard header
- 00004-00015 (012) = Unclassified data
- 00016-00019 (004) = Slot 1 current party. Must be in sync with the party bytes at 0x008 in bank 4.
- 0001A-00067 (04E) = Unclassified data
- 00068-00068 (001) = Slot 1 flag. Zero if there is no save file in slot 1, non-zero otherwise
- 00069-00079 (011) = Unclassified data
- 0007A-0007D (004) = Slot 2 current party. Must be in sync with the party bytes at 0x008 in bank 10.
- 0007E-000CB (04E) = Unclassified data
- 000CC-000CC (001) = Slot 2 flag. Zero if there is no save file in slot 2, non-zero otherwise
- 000CD-000CF (003) = Unclassified data
- 000D0-000D7 (008) = "mother3 " in ASCII
- 000D8-000EF (018) = Unclassified data
- 000F0-000F1 (002) = Checksum complement
- 000F2-00FFF (F0E) = Unused
Bank 1 (01000-01FFF)
This bank is a mirror of bank 0.
Banks 2 and 3 (02000-03FFF)
Unclassified; most likely unused, as these banks are missing the standard header and checksum.
Bank 4 (04000-05FFF)
This bank contains the slot 1 data. It is mirrored at bank 7.
- 04000-04003 (004) = Standard header
- 04004-04005 (002) = Checksum complement
- 04006-04007 (002) = Unclassified data
- 04008-0400B (004) = Current party. Mirrored at 0x00016 in bank 0.