The following table shows the standard contents of the ROM header. Most of the structure of the header is defined by the IPL3 routines commonly used in commercial games (which are actually contained in the ROM itself); only a few fields are accessed by IPL2 (which is burned in PIF ROM) and are thus hard-coded for all possible valid N64 ROMs.

Offset Bytes Name Description
0x00 4 PI DOM1 configura flags These flags are used by IPL2 to configure access to the ROM (which is mapped in the PI DOM1 space, see memory map). IPL2 first configure the PI to its slowest speed to be able to read these 4 bytes, and then use them to configure the correct speed to access the ROM.


All known commercial games use 0x80 0x37 0x12 0x40 in these bytes.


These fields could be tuned in replica cartridges to adapt to the actual maximum physical speed that the ROM can be accessed, but please pay attention that many emulators expect to find the 4 "standard" values here and actually use them as a "fixed ID" to detect if the ROM dump was byte-swapped.

0x04 4 Clock override(?) Usually 0
0x08 4 Initial PC Initial PC in RDRAM. IPL3 will jump to this address when it has finished initializing the hardware, to boot the ROM.


The IPL3 for CIC 6103 behaves differently: the value stored here is subtracted by 0x100000 before the jump. For instance, Paper Mario (a game with CIC 6103) contains the value 0x80125C00 in this field, but the actual entry point is 0x80025C00.

0x0C 4 ? ?
0x10 8 CRC Checksum calculated on 1 Mbyte of ROM contents starting from offset 0x1000 (after IPL3). This checksum is computed with a custom algorithm implemented by IPL3 that verifies the integrity of the ROM before booting it. If the checksum fails, IPL3 refuses to boot the ROM and hangs the console.


To see the exact algorithm used by IPL3, see the source code of the chksum64 tool shipped with libdragon.

0x18 8 ? ?
0x20 20 Game name ASCII string that contains the name of the game. Padding Is usually performed with 0x20 (ASCII space).
0x34 4 ? ?
0x38 3 ? ?
0x3B 1 Media format 'N': standard game pak (cartridge)

'D': 64DD disk

'C': expandable game: cartridge part

'E': expandable game: 64DD disk part

'Z': Aleck64 cart

0x3C 2 Game ID Two letter code to identify the game. Normally, these are ASCII uppercase letters.
0x3E 1 Country code An ASCII character that specifies the country this ROM is intended for.
7 Beta G Gateway 64 (NTSC) P European
A Asian H Dutch S Spanish
B Brazilian I Italian U Australian
C Chinese J Japanese W Scandinavian
D German K Korean X European
E North America L Gateway 64 (PAL) Y European
F French N Canadian


0x3F 1 Version? ?
0x40 4032 IPL3 This area contains the IPL3 boot code. Each ROM ships its own IPL3 that is meant to work together with the CIC installed in the ROM. The IPL3 is loaded by IPL2 (which is burned in the PIF ROM) and is executed after checking its checksum.