Skip to main content

Arcade (MAME)

Full MAME is far too large for a microcontroller, but the classic 8-bit arcade boards are within reach, the same class of work as the home consoles in More Systems.

TierBoardsState
🟢 Runs at full speedPac-Man, 1942, 1943, Robby Roto, the Exidy boards and similar Z80 / 6502 / 8080 boards of 1978–8557–60 fps
🟡 Runs near full speed68000 boards: Seibu (Blood Bros.), Video System (Aero Fighters), Capcom CPS1, Sega System 16, Neo Geo MVS (unencrypted sets up to ~50 MB)47–60 game frames a second (2026-10-14: CPS1 Final Fight 60, Street Fighter II 52-53, Knights 52 in a fight)
🔴 NoCPS2, encrypted Neo Geo sets (KOF '99 and later), boards with two 68000 (OutRun: played through Cannonball instead), 3D boardsCPU load, encryption this MAME version lacks, 3D hardware

Where we are (2026-10-04)​

The speeds below were updated on 2026-10-14.

The arcade emulator is mame-go: MAME 0.37b5 (the mame2000 code base) compiled with only the chosen drivers, a retro-go app on its own 2 MB partition. Launcher tabs Arcade (MAME) (/sd/roms/arcade/), Neo Geo (/sd/roms/neogeo/, with neogeo.zip) and Capcom CPS-1 (/sd/roms/cps1/).

Board familyGames checked on the boardIn play
Namco / Capcom / Exidy / Bally 8-bitPac-Man, 1942, 1943, Robby Roto, Targ, Spectar, Side Trak, Hard Hat, Circus, Crash, Rip Cord, Robot Bowl, Starfire, Fire One57–60 fps (1943: about 25 drawn)
Galaga, Donkey Kong (Jr, 3), Galaxian, Moon Cresta, Frogger, Scramblecompiled, never tested: no ROMs at hand
Seibu, Video System (68000)Blood Bros. 60 fps; Aero Fighters 47–57about 20 drawn
Neo Geo MVS16 sets load; Metal Slug 58 fps; Metal Slug 2 and KOF '95 52–55sprites and large samples paged from the card
Capcom CPS1in 2 min of fighting (2026-10-14): Final Fight 60, Street Fighter II CE 52-53, Knights of the Round 52; Carrier Air Wing, Ghouls'n Ghosts start and savelayers in 16-line bands in internal RAM, covered tiles skipped
Sega System 16Golden Axe 54; Alien Syndrome 58; Wonder Boy III 57first runs on 2026-10-04; Shinobi, Altered Beast not tried

What stops the 68000 boards short of 60 drawn frames, and what was tried, is in the Arcade 60 fps plan.

What the app does besides running the games:

  • ROM sets are matched to a driver by file names and CRCs, so modern sets with renamed files load, whatever the zip is called. Sets MAME 0.37b5 does not know do not (Fantasy Zone II fantzn2x, encrypted Neo Geo sets).
  • Save states from the retro-go menu and Resume from the launcher. A state loads only in the firmware that wrote it. On the Neo Geo a save has no preview picture (no screenshot in its band mode).
  • Hiscores on the card (hiscore.dat in /sd/retro-go/mame/mame2000/).
  • Loading percentage under the loading logo (the hourglass until 2026-10-10); after another arcade game was played, "game cache NN%" while the flash cache is rewritten.
  • Launch times: 9 to 13 s for the same game again, 20 to 28 s after a different arcade game (the 4 MB flash cache holds one game). The first launch of a Neo Geo game converts its sprites to the card (minutes).
  • Audio at 32000 Hz like every app; SELECT is the coin, START is start.

What was done, in short​

  1. The app (2026-09-26): MAME 0.37b5 with selected drivers; driver tables const in flash so they cost no internal RAM; sets matched by CRC.
  2. 16-bit boards: graphics larger than 256 KB decoded on demand into a tile cache instead of expanded in memory; ROM regions of 256 KB and more served memory-mapped from a 4 MB flash partition; the 68000's vblank wait loops skipped.
  3. Neo Geo (2026-09-27): sprites converted once to a file on the card and read through a page cache, samples in flash or paged from the card, so games of 30 to 50 MB fit in 8 MB of PSRAM; exact save states.
  4. CPS1 (2026-09-27/29): graphics streamed from the zip into the flash cache; sound board on the second core.
  5. Speed (2026-10-02/04): the Arcade 60 fps plan: band rendering, branch-free display scaler, exact idle skips, 16 kHz sound mix, the CPS1's frame handed to the display task.
  6. Sega System 16 (2026-10-04): a subset of the 0.37b5 driver (one 68000, Z80, YM2151), generated by mame-go/tools/system16_subset.py.

The dated record of all of this, with every measurement, is in the repository: docs/archived/arcade-mame-log.md.

How it fits the console​

  • Flash: the app has a 2 MB partition (1.93 MB used) and a 4 MB data partition, mamerom, for the large read-only regions of the game being played. The 16 MB are full: 64 KB left.
  • PSRAM (8 MB): program, work memory and caches; graphics and samples too large for it are paged from the card (Neo Geo) or kept in the flash partition.
  • Internal RAM is the scarce resource: 0 to 5 KB free while Metal Slug runs, which is why driver tables are const and the whole component's .bss is in PSRAM.
  • Controls: the 12 buttons cover joystick, 1–3 fire buttons, coin (SELECT) and START.
  • Proof of a change: pictures and sound compared frame by frame on a PC harness (scripts/neogeo_frames.py), then measured on the board.

Board families, not single games​

Every arcade game runs on a specific board, and many games share the same one: the Capcom CPS1 board, for example, runs Street Fighter II, Final Fight, Ghouls'n Ghosts and dozens more. Feasibility is decided per board family; if v3 runs the board, it runs nearly all of its games. The few exceptions inside a family are ROM sets too large for the PSRAM or a special chip on one title.

How to tell which board and CPU a game uses: look the game up on the Arcade Database (adb.arcadeitalia.net) or the Killer List of Videogames (arcade-museum.com), or run mame -listxml <game>. Rule of thumb: a Z80, 6502, 8080 or 6809 at up to ~4 MHz, 1978–85, is classic and fits v3; a 68000 (CPS1, Sega System 16, Neo Geo) is the 16-bit tier, at the limit or beyond.

Classic games (8-bit boards)​

CPUGames
Intel 8080 / 8085Space Invaders (Taito, 1978), Lunar Rescue (Taito, 1979), Phoenix (Amstar, 1980, 8085)
Zilog Z80Galaxian (Namco, 1979), Pac-Man (Namco, 1980), Crazy Climber (Nichibutsu, 1980), Galaga (Namco, 1981), Donkey Kong (Nintendo, 1981), Frogger (Konami, 1981), Scramble (Konami, 1981), Lady Bug (Universal, 1981), Ms. Pac-Man (Midway, 1982), Donkey Kong Jr. (Nintendo, 1982), Dig Dug (Namco, 1982), Xevious (Namco, 1982), Pengo (Sega, 1982), Zaxxon (Sega, 1982), Mr. Do! (Universal, 1982), Time Pilot (Konami, 1982), Pooyan (Konami, 1982), Moon Patrol (Irem, 1982), Popeye (Nintendo, 1982), Mario Bros. (Nintendo, 1983), Bomb Jack (Tehkan, 1984), 1942 (Capcom, 1984), Commando (Capcom, 1985)
MOS 6502Super Breakout (Atari, 1978), Asteroids (Atari, 1979, vector), Lunar Lander (Atari, 1979, vector), Missile Command (Atari, 1980), Centipede (Atari, 1981), Tempest (Atari, 1981, vector), BurgerTime (Data East, 1982)
Motorola 6809Defender, Robotron: 2084, Joust (Williams): same era and weight, a different CPU to emulate

Vector games (Asteroids, Tempest, Lunar Lander) drew lines instead of pixels: they emulate fine but need a line rasteriser on top.