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 Unknown (Unused padding?)
0x184 1 Audio setting
0x185 1 Unknown (Unused padding?)
0x186 2 Unknown (Checksum?)
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 3 Records exist (00 or 01)
0x013 4 Unknown (Unused?)
0x017 1 Unknown (Checksum?)

Record Format

Record entries are 24 bits each and are formatted in the following manner:

tttttttt tttttttt cccc tttt

Where t is a 20 bit little endian value for the completion time and c is a 4 bit ID of the character used in the trial. The game seems to display the time as ((t / 6000) * 10000) + (t % 6000) in decimal notation, with the literal digits split into minutes, seconds, and centiseconds (e.g. a t value of 1234 will simply display 00'12“34 and a value of 65536 will display 10'55”36). 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 Name
0 MARIO
1 LUIGI
2 YOSHI
3 TOAD
4 D.K.
5 WARIO
6 PEACH
7 BOWSER
8 (none, unused)
9 (none, default)

The default value applied to record entries is 0xC02709, which is 100 minutes and no character.