ROM Naming Schemes, Decoded
For anyone wondering and especially when you’re running Recalbox on a thin client
for example: browse any ROM set and you’ll run into filenames that look like line noise - Sonic the Hedgehog (UE) [!].bin, Metal Gear Solid (USA) (Disc 1).cue.
Those brackets aren’t random, they’re a whole taxonomy for how a file was dumped, verified and possibly hacked.
Here’s what the major schemes actually encode.
GoodTools
GoodTools (GoodNES, GoodGen, GoodSNES, …) is the oldest of the bunch, written by Cowering in the early 2000s for cartridge-based consoles.
It appends terse bracketed flags straight after the game name:
| |
| Flag | Meaning |
|---|---|
[!] | Verified good dump |
[a] | Alternate version of an existing dump |
[b] | Bad dump (corrupted or misread) |
[f] | Fixed to run on a copier/emulator |
[h] | Hacked (changed header, region-patched, etc.) |
[o] | Overdump, extra junk data appended |
[p] | Pirate copy |
[t] | Has a trainer/cheat menu baked in |
[T+xx] / [T-xx] | Fan translation added/removed, xx is the language |
Region is a letter soup glued in parentheses before the flags: U USA, E Europe, J Japan, UE both, JUE effectively worldwide.
GoodTools is largely retired now. Its CRC32-based hash sets turned out to have a fair number of misclassified “good” dumps, which is exactly the problem the next scheme was built to fix.
No-Intro
No-Intro grew out of frustration with GoodTools’ accuracy and became the de facto standard for cartridge and handheld ROMs.
Instead of cramming everything into cryptic brackets, it uses a fixed, human-readable field order:
| |
Only Title and Region are required. A typical entry:
| |
The project maintains curated DAT files (hash lists) that tools like RomVault or clrmamepro use to verify a dump matches a known-good source, byte for byte. That verification-by-hash-list approach, not the naming itself, is what makes No-Intro trusted where GoodTools wasn’t.
Redump
Redump does for optical media what No-Intro does for cartridges: CD, DVD and Blu-ray based games (PS1/PS2/PS3, Saturn, Dreamcast, PC games, …). It reuses the same Title (Region) (Languages) (Version) skeleton, since accurate disc dumping needs correct sector-by-sector reads (.bin/.cue or .iso) plus checks against known error patterns from the pressing itself, not just a checksum.
| |
The (Disc N) suffix is the one addition No-Intro doesn’t usually need, since multi-disc releases are common on optical media and rare on cartridges.
TOSEC
TOSEC (The Old School Emulation Center) casts a much wider net: any retrocomputing software or firmware, not just console games. Its field order is the most granular of the three:
| |
| |
That extra structure (publisher, copyright status like freeware/shareware/commercial, media label) makes sense once you remember TOSEC also catalogs home computer software where “who published it” and “what license” aren’t as fixed as on a licensed console cartridge.
How they compare
| Scheme | Scope | Verification | Naming style |
|---|---|---|---|
| GoodTools | Cartridge consoles | CRC32, known inaccurate | Terse bracket flags |
| No-Intro | Cartridge & handheld consoles | Curated DAT hash lists | Structured, readable fields |
| Redump | Optical media | DAT hash lists + disc error checks | Same as No-Intro, plus disc number |
| TOSEC | Any retro computer/console software | Best-effort, broader and less centralized | Most verbose field set |
And arcade sets are their own thing
MAME romsets don’t try to be readable at all. A set is named after its internal driver codename (sf2, mk2, pacman), not the game’s box title, because arcade boards are emulated per-driver and the filename has to match what the driver expects. If you want the actual title, you look it up in MAME’s own metadata, not the filename.
Next time you see [!] or (Disc 2) in a ROM filename, you’ll know exactly which cataloging project it came from and how much to trust it. 🕹️