Skip to content

Z80 and 6502 boards ​

The boards of 1979 to the mid-1980s run Z80 or 6502 programs, often with several CPUs on one board. Namco and Nintendo boards use timings based on 18.432 MHz and run at about 60.61 Hz. Atari's vector games draw lines with the beam of a vector display. Nintendo's arcade systems reuse NES chips.

BoardYearsMain CPU and clockSoundRefreshProtectionMAME statusGhidra
Namco Galaxian1979Z80 at 3.072 MHzNot covered hereabout 60.61 Hz (computed)None listedIn MAMEZ80 built in
Namco Pac-Man1980Z80 at 3.072 MHzNamco WSGabout 60.61 Hz (computed)None listedIn MAMEZ80 built in
Namco Galaga1981Three Z80s at 3.072 MHzNamco 54xx noiseabout 60.61 Hz (computed)None listedIn MAMEZ80 built in
Nintendo Donkey Kong1981Z80 at 4 MHzIntel 8035 at 6 MHzabout 60.61 Hz (computed)None listedIn MAMEZ80, 8048 built in
Atari Asteroids19796502 at 1.512 MHzPOKEY on Asteroids Deluxeabout 61.5 Hz (computed)None listedIn MAME6502 built in
Sega System 11980sZ80 at 4 MHzSound CPU, two SN76489Aabout 60.10 Hz (computed)Encrypted Z80 parts, MC8123In MAMEZ80 built in (after decryption)
Nintendo VS. System1980sRP2A03In the RP2A03NTSC line countNot covered hereIn MAME6502 built in
Nintendo PlayChoice-101980sZ80 at 4 MHz menu, plus NES hardwareNESnominal 60 HzNot covered hereIn MAMEZ80, 6502 built in

Namco Galaxian, Pac-Man and Galaga ​

Hardware ​

Namco's early boards use the same 18.432 MHz crystal (MAME: galaxian/galaxian.h; galaxian.cpp).

  • Galaxian (1979) uses an 18.432 MHz master clock with a Z80 at 3.072 MHz. Its 384 by 264 totals give about 60.61 Hz (computed). Sidam bootlegs use a 12 MHz crystal instead.
  • Pac-Man (Namco, 1980; Midway licence in the US) has one Z80 at 3.072 MHz and Namco's wavetable sound (WSG). Its screen line is set_raw(18.432 MHz / 3, 384, 0, 288, 264, 0, 224). That gives 288 by 224 visible pixels at about 60.61 Hz (computed) (MAME: pacman/pacman.cpp).
  • Galaga (1981) has three Z80s at 3.072 MHz each. Namco custom chips 51xx (I/O) and 54xx (noise sound) run at 1.536 MHz. They communicate through a 06xx bus interface. The timing matches Pac-Man (MAME: namco/galaga.cpp).

Protection ​

None listed.

Tools ​

Ghidra decodes the Z80 with its built-in module. Unicorn has no Z80 backend. Take ground truth from MAME's debugger and Lua, or from a small Z80 core (CPU families).

Projects to learn from ​

Computer Archeology hosts commented disassemblies of Galaga, with the main, secondary and sound CPUs on separate pages. It also has Frogger, Scramble, Time Pilot, Crazy Climber, Phoenix and Moon Patrol. Its menu has code or hardware pages for Pooyan and The Pit (Computer Archeology: Arcade).

For an exact reimplementation ​

  • Run the port at about 60.61 Hz.
  • On Galaga, run the three CPUs interleaved in the right order. Some of the game's behaviour depends on this timing.
  • Model the 51xx and 54xx custom chips as the CPUs see them.

Nintendo Donkey Kong ​

Hardware ​

Donkey Kong (1981) uses a 61.44 MHz crystal and a 6.144 MHz pixel clock, for about 60.61 Hz (computed). Its Z80 runs at 4 MHz, "verified in schematics". An Intel 8035 at 6 MHz runs the sound program (MAME: nintendo/dkong.h; dkong.cpp).

Protection ​

None listed.

Tools ​

Ghidra has built-in Z80 and 8048 modules. Unicorn has neither.

Projects to learn from ​

Computer Archeology's menu has a Donkey Kong page (Computer Archeology: Arcade).

For an exact reimplementation ​

  • Trace the 8035 sound program as well as the Z80 game program.

Atari Asteroids and the vector games ​

Hardware ​

Asteroids (1979) draws on a vector display. Its master clock is 12.096 MHz, with a 6502 at 1.512 MHz. MAME sets the vector refresh to (12.096 MHz / 4096) / 12 / 4, which is about 61.5 Hz (computed). Lunar Lander divides by 6 instead of 4. Asteroids Deluxe adds a POKEY at master / 8 (MAME: atari/asteroid.cpp).

Protection ​

None listed.

Tools ​

Ghidra decodes the 6502 with its built-in module. Its p-code for ADC is not exact, so do not use Ghidra's emulation as ground truth (CPU families). Unicorn has no 6502 backend.

Projects to learn from ​

  • The historicalsource account holds original assembly source for Asteroids. It includes VECAN.XX, VECMAC.XX and VECINC.XX for the vector generator, with a map file ASTROD.MAP (historicalsource/asteroids).
  • The same account holds Asteroids Deluxe, Battlezone, Black Widow, Gravitar, Lunar Lander, Major Havoc (a disassembly), Quantum, Red Baron, Space Duel, Star Wars and Tempest (GitHub: historicalsource). The repositories give no licence or provenance statement.
  • Computer Archeology has commented disassemblies of Asteroids and Omega Race, and a Tempest page (Computer Archeology: Arcade).

For an exact reimplementation ​

  • A vector game draws a list of beam strokes each frame. Compare these lists before you compare pixels.
  • Run the port at the vector refresh, about 61.5 Hz on Asteroids. Lunar Lander uses a different divisor.

Sega System 1 ​

Hardware ​

Sega System 1 (Flicky, Choplifter and others) uses a Z80 at 4 MHz from a 20 MHz master clock. Its sound CPU and two SN76489A run at 20 / 8 or 20 / 16, depending on the board revision. The screen runs at about 60.10 Hz (computed) (MAME: sega/system1.cpp).

Protection ​

System 1 uses many encrypted Z80 parts (315-5033, 315-5041, 315-5048, 315-5051, 315-5065, 315-5098, 315-5178 and others) and the MC8123 (protection).

Tools ​

Decrypt the program with MAME's model of the part. Then load it as Z80 code in Ghidra.

Projects to learn from ​

None listed yet.

For an exact reimplementation ​

  • Record the board revision. The sound clock divisor depends on it.
  • Use the decryption for the exact encrypted part on the board.

Nintendo VS. System and PlayChoice-10 ​

Hardware ​

Nintendo's arcade systems reuse NES chips. The VS. System uses an RP2A03 CPU and a 2C0x PPU with 341 dots per line and the NTSC line count. Dual-screen versions use two CPUs and two screens (MAME: nintendo/vsnes.cpp). The PlayChoice-10 runs its menu on a Z80 at 4 MHz beside the NES hardware. Both of its screens are set to a nominal 60 Hz (MAME: nintendo/playch10.cpp).

Protection ​

Not covered here.

Tools ​

A VS. game's code is NES code, so NES tools work on it (tools for console work).

Projects to learn from ​

None listed yet.

For an exact reimplementation ​

  • On a dual-screen VS. game, run both CPUs and both screens.
  • The PlayChoice-10 rate is nominal in MAME. Treat it as unknown.

Code: Apache 2.0. Content: CC0 1.0. No game material: bring your own copy.