User Tools


This is an old revision of the document!


EEPROM Memory Map

Mario Kart 64 uses a 512 byte EEPROM unit to save time trial records and the selected sound mode. A mirror of EEPROM data is kept at 8018EB90 in RAM.

Top level structure

Offset Length Description
0x000 24 Luigi raceway record set
0x018 24 Moo Moo Farm record set
0x030 24 Koopa Troopa Beach record set
0x048 24 Kalimari Desert record set
0x060 24 Toad's Turnpike record set
0x078 24 Frappe Snowland record set
0x090 24 Choco Mountain record set
0x0A8 24 Mario Raceway record set
0x0C0 24 Wario Stadium record set
0x0D8 24 Sherbet Land record set
0x0F0 24 Royal Raceway record set
0x108 24 Bowser's Castle record set
0x120 24 D.K's Jungle Parkway record set
0x138 24 Yoshi Valley record set
0x150 24 Banshee Boardwalk record set
0x168 24 Rainbow Road record set
0x180 4 50cc trophy information
0x181 4 100cc trophy information
0x182 4 150cc trophy information
0x183 4 Extra trophy information
0x184 1 Audio setting
0x185 1 Unused, padding
0x186 2 Checksum of 0x180-0x184
0x188 48 Copies of all 1st records
0x1B8 6 Unknown (Padding?)
0x1BE 2 Unknown (Checksum?)
0x1C0 48 Another 16 records (What for?)
0x1F0 6 Unknown (Padding?)
0x1F6 2 Unknown (Checksum?)
0x1FC 1 Copy of audio setting (0x184)
0x1FD 1 Copy of Unknown (Unused padding?) (0x185)
0x1FE 2 Copy of Unknown (Checksum?) (0x186)

Course record set

For each course, there is a 24 byte structure that contains the five best completion records and the best lap record. There is an additional byte which indicates whether or not any records have been saved for the set, and another byte which could be a checksum.

Offset Length Description
0x000 3 1st record
0x003 3 2nd record
0x006 3 3rd record
0x009 3 4th record
0x00C 3 5th record
0x00F 3 Best lap record
0x012 1 Records exist (00 or 01)
0x013 4 Unknown (Unused?)
0x017 1 Unknown (Checksum?)

Record Format

Record entries are 24 bits each and are stored with little endian byte ordering:

tttttttt tttttttt cccctttt

Where t is a 20 bit value for the completion time in centiseconds and c is a 4 bit ID of the character used in the trial. If a record has a time greater than or equal to 100 minutes, it is not displayed.

Valid character IDs for c are as follows:

ID Character
0 MARIO
1 LUIGI
2 YOSHI
3 TOAD
4 D.K.
5 WARIO
6 PEACH
7 BOWSER
8 (none)

The default value applied to record entries is 0xC02709, which is 100 minutes and Mario as the character selection.

Checksums

0x186

0x186 is a checksum of offsets 0x180-0x184 and is computed by procedure at 800B492C and 0x187 is computed by procedure at 800B49E4

EEPROM[0x186] = (EEPROM[0x180] + 1 + ((EEPROM[0x181] + 1) * 2) + 1 + ((EEPROM[0x182] + 1) * 3) + 2 + ((EEPROM[0x183] + 1) * 4) + 3 + ((EEPROM[0x184] + 1) * 5) + 4) & 0xFF
EEPROM[0x187] = (EEPROM[0x186] + 0x5A) & 0xFF

References