ROM File Documentation


Summary

A Nintendo 64 Game ROM File is an image (an exact binary copy) of the read-only memory chip inside an N64 cartridge: the whole game in one file, loaded by an emulator to play it without the console. Open a .rom in an N64 emulator such as Project64 or RetroArch (Mupen64Plus core). The .rom extension is generic, so it must match the right system, and N64 dumps come in three byte orders (.z64, .v64, .n64). Note: .rom is also used for device firmware/BIOS images, which are not games.

Technical details

FeatureValue
Full nameNintendo 64 Game ROM File (read-only memory image)
File extension.rom (N64 also uses .z64, .n64, .v64)
MIME typeapplication/octet-stream
Format typeRaw binary dump of a cartridge ROM chip
DeveloperN/A — generic; content depends on the source cartridge
Console (this page)Nintendo 64 (1996–2002)
IntroducedWith console emulation (1990s onward)
N64 byte ordersBig-endian (z64), byte-swapped (v64), little-endian (n64)
N64 header magic (z64)80 37 12 40
N64 header magic (v64)37 80 40 12
N64 header magic (n64)40 12 37 80
Open standardNo — system-specific internal layout
ContainsCartridge header, program code and assets, mapper info (some systems)
N64 emulatorsProject64, RetroArch (Mupen64Plus), Mupen64Plus, OpenEmu (Mac)
Byte-swap toolsTool64, Ucon64, RetroArch
Also used byMotherboard BIOS/UEFI, GPU vBIOS, option ROMs, device firmware
Not for disc gamesPlayStation/Dreamcast use .iso/.bin/.cue/.chd
Related extensions.z64, .n64, .v64, .smc, .sfc, .nes, .gba, .bin
Specificationn64dev.org/romformats.html
File signature (N64 byte orders)
80 37 12 40 (.z64, big-endian — native N64 order)

Offset 0, first 4 bytes of the N64 cartridge header. The same 32-bit value appears rearranged in the two other dump orders: 37 80 40 12 for a byte-swapped .v64 (Doctor V64 dumps, each 16-bit pair swapped) and 40 12 37 80 for a little-endian .n64. The three are the identical game with the bytes in a different order, so an emulator that expects one order rejects the others until the file is byte-swapped. Note that .rom is generic: a ROM from another console (NES starts with 4E 45 53 1A, “NES\x1A”) or a firmware/BIOS image has an entirely different header, so identify by system, not by the extension.

What is a ROM file?

“ROM” means read-only memory, the chip inside a cartridge that permanently holds a game's code and data. A Nintendo 64 Game ROM File is a ROM image or ROM dump: an exact binary copy of that chip's contents, extracted (“dumped”) from an N64 cartridge so the game can run in software. An emulator recreates the console's hardware in a program and loads the ROM image as if it were the inserted cartridge, letting the game run on a PC, phone or handheld without the original N64.

Two things about the .rom extension shape this whole page. First, it is generic: a .rom file is just raw bytes whose meaning depends entirely on which system produced it, so an N64 ROM, an NES ROM and a motherboard BIOS can all wear the same extension while being completely different inside. Second, even within the N64 alone, a dump can exist in three different byte orders. This page centres on the N64 case because that is what most people mean by an N64 .rom, while flagging the generic and firmware meanings where they matter.

The N64 cartridge header

An N64 ROM begins with a 64-byte cartridge header, and its first four bytes are effectively a signature that also reveals the dump's byte order. In the native big-endian layout the file opens with 80 37 12 40. The header goes on to record clock rate, the program counter (the entry point where the CPU begins executing), a release field, a CRC pair used to check the ROM's integrity, the internal game title in ASCII, and a game/media code.

N64 header (native big-endian, first fields)
 offset 0x00  80 37 12 40   endianness indicator / magic
 offset 0x04  clock rate
 offset 0x08  program counter (entry point)
 offset 0x0C  release
 offset 0x10  CRC1
 offset 0x14  CRC2
 offset 0x20  internal cartridge title (ASCII, up to 20 bytes)
 offset 0x3B  cartridge / media code

After the header comes the boot code and then the game's program and assets, exactly as they sat on the cartridge chip. An emulator reads the header to learn where execution starts and to sanity-check the image, then maps the rest into the emulated N64 address space and begins running from the entry point.

Three byte orders: z64, v64 and n64

N64 dumping tools did not all agree on byte order, which is why the same game exists in three interchangeable layouts, usually distinguished by extension:

ExtensionOrderFirst 4 bytes
.z64Big-endian (native)80 37 12 40
.v64Byte-swapped (16-bit pairs)37 80 40 12
.n64Little-endian40 12 37 80

All three hold the identical game; only the ordering of the bytes differs. The .z64 form is the N64's native big-endian order. The .v64 form (from Doctor V64 backup units) swaps each 16-bit pair. The .n64 form is fully little-endian. An emulator that expects one order will refuse or mis-run the others, which is the usual reason an otherwise-valid N64 ROM “won't load.” The fix is a byte-swap with a tool such as Tool64 or Ucon64, or an emulator that auto-detects order from those first four bytes. Because it is only a reordering, the conversion is lossless: no data is added or removed. A caution worth keeping in mind is that the actual byte order does not always match the extension a file was given.

Why .rom is generic: other consoles and no header

Every system stored its games differently, so a raw .rom means nothing until you know the source console. Many platforms therefore use their own extensions instead: SNES uses .smc/.sfc, NES uses .nes (the iNES format, which starts with the ASCII bytes 4E 45 53 1A, “NES\x1A”), Game Boy Advance uses .gba, and Sega Genesis uses .bin/.md. The bare .rom name tends to be used generically, or by systems such as ColecoVision, MSX and Atari where the dump is often headerless raw bytes with no identifying marker at all. The upshot is that a .rom file is identified by the system it came from and the emulator that reads it, not by the extension, and a multi-system front-end like RetroArch or OpenEmu can try the appropriate core when the origin is unclear.

Cartridge ROMs are not disc images

Disc-based consoles (PlayStation, Dreamcast, GameCube) do not use ROMs. Their games are disc images: .iso, .bin/.cue or .chd. This is why “convert a ROM to ISO” is not a real operation: a cartridge dump and an optical-disc image are different media with different structures, and you cannot turn one into the other. You simply use the correct emulator for whichever you have. In the same way, “convert a ROM to EXE” is impossible: a ROM is machine code for the console's CPU (the N64's is a MIPS R4300i), not a Windows program, so it only runs inside an emulator that interprets that instruction set. Sites advertising a ROM-to-EXE converter are bogus.

The other .rom: firmware and BIOS images

A large, entirely separate audience meets .rom as a firmware or BIOS image: a motherboard BIOS/UEFI, a graphics card's video BIOS (vBIOS), router firmware, or an add-in card's option ROM loaded by the system firmware at boot. These are not games and have their own headers and layouts. The distinction carries a real hazard. Flashing a firmware .rom to hardware writes it onto the chip, and flashing the wrong image, or one meant for a different revision of the device, can permanently brick the motherboard, GPU or router. If a .rom came from a hardware vendor's support page rather than an emulation source, treat it as firmware and confirm it matches your exact model before flashing anything.

References