ROM, or read-only memory, is a term used to refer to the game code (binary)written to or extracted from the N64 cartridge.
There are three different versions of the game, meaning there are three original game ROMs. Each was released to a different part of the world.
- NGEE - NTSC North American Release
- NGEJ - NTSC Japanese Release
- NGEP - PAL European Release
Although each game is virtually identical in content, the language files and code locations make each incompatible with the others. As a result, patches made for one version ROM will not function on the others.
Note that whenever a ROM is editted, generally it creates a new, incompatible version.
ROMs can be identified using the data at the start of the binary. There are four common ways that this is done.
A four-[byte] identifier code is found at offset 0x3B in the file. This indicates the format, name, and region the game was designed for.
- The first byte indicates the type of ROM
- N indicates a N64 cartridge
- C indicates a N64 cartridge designed to use a 64DD expansion disk
- D indicates a 64DD disk image
- E indicates a 64DD expansion disk
- The second and third byte form a 2-letter ID for the game
- The last byte indicates the region and language for the game
The four-byte code is used primarily to match up save data to specific cartridges.
Each ROM has a unique checksum value. The checksum is found at 0x10 in the ROM's header. This is calculated from the first megabyte (MB) of game data and from the CIC-chip checksum value.
This value is very important. It is recalculated and tested when the game is first loaded. Also, many emulators match cheat lists to the game's unique checksum value. As a result, whenever a change is made to the ROM image it is required to recalculate the checksum in order to ensure the game will run.
It only reflects the 1st MB of game data however. Any changes made after this point will not affect the game checksum. This can cause problems with incompatibility, as all the stage, music, and image data are not within the first MB of ROM. Applying multiple patches may result in incompatibility.
The final method, used by certain emulators and by GoodN64, is to create a MD5 checksum of the ROMs contents. Although there is nothing implicitly wrong with this method, in application, these are treated as completely new and unique files and require unique settings.