Retro Tech
Arcade ROM Hacking: How Hard It Really Is, and Where to Start

Part 7 of the thread The emulation bench
- Text and simple values are a weekend. New mechanics are months. Know which one you're signing up for.
- A hex editor and the MAME debugger get you surprisingly far before you touch any assembly.
- Learn on well-documented older boards: Pac-Man and Donkey Kong era, Neo Geo, Capcom's CPS1.
- Always work on a copy of a ROM you own, and keep the original untouched.
Changing an arcade game sounds like wizardry until you open one in a hex editor and find the high score names sitting there in plain text. Some changes really are that simple. Others need you to read and write assembly for a CPU from 1981. Most of the frustration people have with ROMA copy of a game cartridge's contents in a single file. It's what an emulator actually plays.More: Keep One Copy of Each Game in Your ROM Backups, by Region hacking comes from not knowing which kind of change they're attempting.
So here's how I'd size it up, and where I'd start.
How hard is what you want to do?
| Change | Difficulty | Time |
|---|---|---|
| Text, like high score names or messages | Easy | Hours |
| Sprite and graphics edits | Easy to medium | Days |
| Replacing sounds | Medium | Days to weeks |
| Difficulty and game values | Medium | Weeks |
| New mechanics | Hard | Months |
| A full overhaul | Expert | Months to years |
The jump in the middle of that table is the jump from finding data to understanding code. Text, graphics and a lot of simple values are data: you find them, change them and put them back. Changing how the game behaves means reading the program itself.
The beginner end
What you can change: text, simple graphics like a title screen, and basic values like starting lives, difficulty or scoring, once you've found where they're stored.
What you need:
- A ROM of the game, from a board you own
- A hex editor. HxD is the one I'd use on Windows
- MAME, to test your changes, and its built-in debugger to watch memory while the game runs
- Comfort with hexadecimal, which is easier than it sounds
The MAME debugger is the underrated one. You can watch memory change as you lose a life or gain points, and that tells you exactly which byte to go looking for in the ROM.
Tip
Start by changing the high score table's default names. It's text, it's easy to find, you see the result on the attract screen right away, and it teaches you the whole edit, rebuild and test loop.
The middle ground
Graphics and sound get more involved because they aren't stored as pictures and audio files. They're tiles in whatever format that board's hardware expects.
- Graphics: extract the tile data, edit it in a tile editor like TileMolester, and put it back in the same format.
- Sound: find and extract the samples, which usually needs a tool made for that game or sound chip, then edit or replace them.
You'll need to learn how that particular game lays out its data. The community has usually documented the popular ones.
The deep end
Changing mechanics, adding features or doing a full overhaul means:
- Assembly language for that board's CPU
- Reverse engineering to understand what the original code does
- A disassembler like Ghidra or IDA Pro
- A debugger, and patience
- An understanding of the hardware: the CPU, the memory map, and the limits of the board
This is real programming on hardware with no safety net, and it's where the months go.
The best hardware to learn on
Easier:
- Early '80s boards, the Pac-Man and Donkey Kong era. Simple hardware, heavily documented, and a lot of people have been here before you.
- Neo Geo. Well documented with a big community.
- Capcom's CPS1, a long-time favorite for ROM hacking.
Harder:
- Newer arcade hardware, with encryption, custom chips, thin documentation and copy protection. Not where you want to learn.
Heads up
Keep a clean copy of every original ROM before you change a single byte. Arcade ROM sets are checked against checksums, and MAME will complain about modified files. That's fine for testing, but you want the untouched original to go back to.
A path that works
- Pick a well-documented classic.
- Change some text in a hex editor and see it in MAME.
- Try a palette swap or a sprite edit.
- Use the debugger to find and change a value like starting lives.
- Join the MAME forums and the communities around your game, and read everything they've documented.
- Only then open a disassembler.
And keep notes as you go. Future you won't remember which offset was the lives counter. Along the way it helps to know hex, binary, how memory addressing works, some assembly, and how the game's ROMs are organized.
The legal side
Work on ROMs from boards you own, and be careful about sharing. Distributing modified copies of someone else's game is legally murky; the usual practice in the hacking community is to share patches, which only contain your changes, rather than the finished ROM.
I've been doing a version of this on the console side with Genesis ROM Workshop, which pulls palettes, tiles and text out of Genesis ROMs, and a lot of the ideas carry straight over. If you want somewhere to actually play your creations, the 4:3 arcade cabinet is my setup for that. And before you start chopping up files, preserving your own collection covers keeping clean originals.
- The Golden Age of Arcades, 1978 to 1983Retro Tech