72 arcade machines · 4 consoles · 2 computers · 1977–1996

Retro gaming, transpiled.

MAME History runs the classics in your browser, compiled straight from MAME's own source. No plugins, no native build, nothing to install. Bring a ROM once, insert a coin.

72arcade machines
4consoles
2computers
1977–1996years covered
0ROMs bundled. Yours stay on your machine.
49years of nostalgia. Free with every coin.
Space Invaders flyerSpace InvadersTaito / Midway · 1978Defender flyerDefenderWilliams · 1980Donkey Kong flyerDonkey KongNintendo of America · 1981Qix flyerQixTaito America · 1981Jungle King flyerJungle KingTaito · 1982Q*bert flyerQ*bertGottlieb · 1982Zig Zag flyerZig Zagbootleg (LAX) · 1982Track & Field flyerTrack & FieldKonami · 1983Commando flyerCommandoCapcom · 1985Bubble Bobble flyerBubble BobbleTaito · 1986Shinobi flyerShinobiSega · 1987Metal Slug - Super Vehicle-001 flyerMetal Slug - Super Vehicle-001Nazca · 1996
Three rooms

Arcade, Consoles and Computers.

The same compiler, three kinds of machine. Each room is a shelf you walk up to: arcade boards take a ROM set, consoles and computers take the software their real hardware took.

Controllers

Keyboard, or the real thing.

Every machine takes the keyboard out of the box. Plug in a USB pad or fight stick and it takes that too, with the controls legend on the game naming whichever you are holding.

Always onKeyboard

The same keys on every cabinet; the game's own legend shows any title that differs.

1START2345COIN67890QWERTYUIOPALPSMPDHPFGHJKLZFIRE 2LKXFIREMKCFIRE 3HKVBNMSpaceFIREMOVEMOVEMOVEMOVE

every cabinet   six-button fighters: punches on the home row, kicks below

Control is never bound: macOS takes Ctrl+Arrow for itself.

Plug and playGamepad, fight stick, spinner & trackball

🕹Works with the FightBox R10-ProUnofficial. We build and test on one; FightBox is not affiliated with MAME History.

Any pad the browser recognises as a Standard Gamepad works: the top row is the punches (light, medium, heavy), the bottom row the kicks, the first small button starts and the second inserts a coin. A second pad is player two. The spinner and trackball reach the browser as a mouse, and every dial and trackball machine takes them at MAME's own sensitivity, smoothed across the frame the way MAME does it.

STARTCOINTRACKBALLmouseleftdownrightupLPXMPYHPRBLKAMKBHKRTSPINNERmouse

Press any button after the game opens: browsers keep a pad hidden until it is touched. Games with fewer buttons fold the bottom row onto the top. On a spinner or trackball game, click the screen to capture the pointer so the cursor stays put; Esc lets go.

Between visits

The machine is never turned off.

Drop your ROM set once and it stays in your own browser, so the next visit skips the drop screen and boots straight into the game. The machine keeps what it wrote down while you played, too: 64 machines keep their high-score tables, and 13 machines keep the battery-backed RAM their settings and bookkeeping live in.

Which bytes those are comes from MAME itself — the operator memory each board declares, and the score tables MAME's own hiscore data names — so a machine remembers the same things the real one did. Your dump, your scores and your settings stay in your browser and never reach a server; Forget ROM and Clear memory on the game page throw either away.

Save states

Stop anywhere. Pick it up later.

Every machine can be captured mid-game and put back exactly as it was: every register, every byte of RAM, every timer. Shift+F7 saves and F7 loads the newest; the deck under the screen keeps a shelf of them with a picture of each moment.

Saves live in your own browser and never leave it. A save loads only into the machine that made it: the same game, the same ROM set, the same build.

Two player

Take the other joystick, wherever you are.

Press 2 player beside the title and you get a link to send somebody. They open it, bring their own copy of the same ROM set, and take player two: two browsers, a machine each, running the same game frame for frame.

You both use the controls you already know: your own arrows and fire buttons drive your own player, so nobody has to learn a second set. Coin and start are the cabinet's, as they are on the real thing.

Your machines talk to each other directly, not through us — there is no server in the middle and nothing to sign up for. All that crosses is which control moved and when; no ROM and no game data ever leaves either browser. Both machines restart together when the game begins, so high scores are set aside for the duration.

How it works

Built by MAMEKIT, a compiler for MAME source.

MAMEKIT treats MAME's source as an archival technical record. It reads a driver, keeps every fact tied to the line it came from, and generates a self-contained web app. No hand-written chip ports, no Emscripten build of MAME.

MAME sourceC++ drivers plus the macro and opcode DSLs, read as they are.
Source-preserving ASTMAME-specific parsing that never loses where a fact came from.
Knowledge graphMachines, chips, ports, screens and sound, each with provenance.
Typed IRMachine, handler, CPU, device, video and audio lowered to typed intermediate forms.
Generated web appJSON for data, JavaScript for behaviour, hosted by a generic browser runtime.

What this is not: it is not MAME, it is not bug-for-bug compatible with MAME, and it is not a substitute for it. Generated machines are a derivative work of the MAME source they were compiled from, and each one carries that driver's own licence and copyright holders. Credit shown for a driver comes from MAME's own headers and MAMEDEV's published release notes, never from commit history. For anything beyond the machines here, use MAME.