ROM headers and zip files
A copier header is a small block of metadata added to the front of a ROM by old backup devices: 512 bytes on SNES, 16 bytes on NES. It shifts every byte in the file, so a patch built for a headered ROM will not apply cleanly to an unheadered one. The patcher detects headers and offers to add or remove them.
What is a copier header?
In the cartridge era, backup devices such as the Super Wild Card and Game Doctor wrote a small metadata block at the start of every dump. It records things the copier needed, like the ROM size and mapping mode. The game data begins after it.
That block is not part of the game. But because it sits at the front, it pushes every subsequent byte forward by its own length. A patch that writes to offset 0x8000 in an unheadered ROM needs to write to 0x8200 in a headered one.
| System | Extensions | Header size | ROM size multiple |
|---|---|---|---|
| SNES copier | .sfc, .smc, .swc, .fig | 512 bytes | 256 KB |
| iNES (NES) | .nes | 16 bytes | 1 KB |
| fwNES (Famicom Disk System) | .fds | 16 bytes | 65500 bytes |
| Atari Lynx | .lnx | 64 bytes | 1 KB |
How to tell if your ROM has a header
Check the file size. A clean SNES ROM is a whole number of kilobytes; a headered one is that plus 512 bytes, so a 1,049,088-byte file is a headered 1 MB ROM. The patcher does this arithmetic for you and shows a checkbox when it finds a header, or when your ROM is a candidate for having one added.
Should you remove the header or keep it?
It depends on what the patch author used. Most modern SNES patches target unheadered ROMs, since No-Intro, the main preservation database, catalogues them without headers. Older patches from the copier era often expect a header.
The patch itself decides. If the readme does not say, try one way, and if the checksum does not match, try the other. Formats with validation tell you immediately which is right, because the patcher will not apply them until the checkbox is set the way the patch expects.
Working with zip files
You can hand the patcher a zip in either field and it will look inside. If the archive contains several patches, you get a list to pick from. Entries inside an archive are sorted by their file extension rather than by their contents, so a patch stored under an unusual extension may not be spotted.
One case does not work: dropping an archive that holds both a ROM and a patch onto the page will do nothing, because the patcher cannot guess which file belongs in which field. Select the same zip through the ROM field and again through the patch field instead, and each one picks out the right entry.
Only zip is handled. For .rar and .7z archives, extract them first with a desktop tool.
Frequently asked questions
How do I know if my SNES ROM has a header?
Look at the file size. An unheadered SNES ROM is a whole number of kilobytes. A headered one is 512 bytes larger, so the size ends in a spare half-kilobyte. The patcher checks this automatically and shows a header checkbox when it detects one.
Does removing the header damage the ROM?
No. The header is copier metadata, not game data. Removing it gives you the raw ROM, which is what modern emulators and preservation databases expect anyway. Your original file is not modified either way.
Do GBA and Genesis ROMs have copier headers?
No. The header question applies mainly to SNES, NES, Famicom Disk System and Atari Lynx dumps. GBA, Genesis and N64 ROMs do not carry them, so a failing patch on those systems points to a different cause.
Can I patch a ROM that is inside a zip?
Yes. Select the zip directly. The patcher extracts what it needs without you unpacking anything.