ROM Header

Standard header
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.

Advanced Homebrew ROM Header
The Advanced Homebrew ROM Header format is a convention that has been agreed upon in the N64 homebrew community to add additional information in the header, using unused fields. The goal of this convention is to let homebrew ROMs declare the correct saveype and controllers that are expected to play the game. The format has been introduced by the EverDrive 64 flashcard and has been later enhanced by the homebrew community.

This is useful because emulators normally work using a game database which matches games using checksum to find out which savetype and controllers are expected by the game, to help gamers play the game. For instance, when a N64 emulator detects that a Perfect Dark ROM is loaded, it will automatically emulate a 16Kb EEPROM to save the game (that was the original support present in the physical cartridge for the original game), and will possibly also emulate a preinstalled Transfer PAK, as the accessory can be used with the game. This is done purely by matching the Perfect Dark ROM checksum in a database, so a homebrew game, which would probably not be present in game databases, would suffer from non-working saves and possibly wouldn't be able to use special controllers or accessories.

Instead, by using the Advanced Hombrew ROM Header, emulators can automatically configure the required emulated hardware as expected without having to keep any additional database, by simply decoding specific fields of the ROM header. In addition to emulators, also development flashcarts and loaders can use this format to automatically configure the correct savetype when the ROM is loaded.

Support by emulators
Emulators not listed here do not support the advanced homebrew ROM header format.

Support by flashcarts
Support by flashcarts can vary depending on the USB loader being used and/or the flashcart operating system. Notice that flashcarts can emulate a specific savetype but have nothing to do with controllers, so the maximum expected support is related to savetype.