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
| Feature | Value |
|---|---|
| Full name | Nintendo 64 Game ROM File (read-only memory image) |
| File extension | .rom (N64 also uses .z64, .n64, .v64) |
| MIME type | application/octet-stream |
| Format type | Raw binary dump of a cartridge ROM chip |
| Developer | N/A — generic; content depends on the source cartridge |
| Console (this page) | Nintendo 64 (1996–2002) |
| Introduced | With console emulation (1990s onward) |
| N64 byte orders | Big-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 standard | No — system-specific internal layout |
| Contains | Cartridge header, program code and assets, mapper info (some systems) |
| N64 emulators | Project64, RetroArch (Mupen64Plus), Mupen64Plus, OpenEmu (Mac) |
| Byte-swap tools | Tool64, Ucon64, RetroArch |
| Also used by | Motherboard BIOS/UEFI, GPU vBIOS, option ROMs, device firmware |
| Not for disc games | PlayStation/Dreamcast use .iso/.bin/.cue/.chd |
| Related extensions | .z64, .n64, .v64, .smc, .sfc, .nes, .gba, .bin |
| Specification | n64dev.org/romformats.html |
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:
| Extension | Order | First 4 bytes |
|---|---|---|
.z64 | Big-endian (native) | 80 37 12 40 |
.v64 | Byte-swapped (16-bit pairs) | 37 80 40 12 |
.n64 | Little-endian | 40 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
- n64dev.org — N64 ROM format reference
- Emulation General Wiki — Emulators & ROM formats
- Project64 — N64 emulator
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.