← All spotlightsPrograms / Games

Spotlight › ARCADE

ARCADE

Seven arcade games from 1975 to 1982, played on their boards' own programs. Each board's program was translated to 8086 code before ARCADE shipped, so a 4.77 MHz IBM PC plays Space Invaders at the arcade's speed.

No game comes with it. You add the ROM sets you own, and ARCADE checks every chip before it plays one.

The cabinet, VGA
The ARCADE window on the os8088 desktop. A blue marquee reads ARCADE in yellow lights. Below it a list of seven games, Space Invaders, Space Invaders Part II, Lunar Rescue, Gun Fight, Sea Wolf, Q*bert and Pac-Man, each with its maker and year and the word READY. Q*bert is highlighted, and a framed picture of its pyramid is beside the list, with its keys to the right. Red buttons along the bottom read PLAY, ADD ROMS and SETTINGS, and READY 7 OF 7.
The cabinet: every game READY, and the last picture Q*bert left.
Arcade boards
7
Space Invaders on a 4.77 MHz PC
59.4-59.9 frames/s
ROM bytes on the disk
0

01 / Boards and ROMs

An arcade game is a board and a program

An arcade game was a cabinet with a circuit board inside. The board was a small computer built for one game. It had a processor, some memory, a circuit that drew the picture, and wires to the coin slot and the controls.

The game itself was a program stored in ROM chips, read-only memory fitted to the board. Copy those chips into files and you have a ROM set. MAME, the long-running arcade emulator, names each set and each chip, and those names are how ARCADE knows a set.

ARCADE plays seven boards: Space Invaders (Taito, 1978), Space Invaders Part II and Lunar Rescue (Taito, 1979), Gun Fight (Midway, 1975), Sea Wolf (Midway, 1976), Q*bert (Gottlieb, 1982) and Pac-Man (Namco, 1980). Five of them ran on an Intel 8080, the chip before the 8086. Pac-Man ran on a Zilog Z80. Q*bert ran on an Intel 8088, the same processor as the IBM PC.

Each game runs its board's own program, not a copy written to look like it. ARCADE supplies the rest of the board: the picture, the sound, the coin slot and the controls.

02 / The games

The games, coined and started

Full screen, captured from os8088 running in QEMU. Q*bert is in the next section.

Space Invaders
Space Invaders full screen. Five rows of white invaders march above four green shields, one already chipped. The player's green base is at the bottom left, with a shot in flight above it. The score reads 0010.
Space Invaders, with the cabinet's green overlay over the shields and the base.
Space Invaders Part II
Space Invaders Part II full screen in colour. Rows of green, cyan and magenta invaders above four red shields, each marked 1. SCORE-1 in cyan, TAITO in red and SCORE-2 in yellow across the top, a high score of 05000 in green, and CREDIT 0 in magenta at the bottom.
Space Invaders Part II, in the board's own colours.
Lunar Rescue
Lunar Rescue full screen. A yellow mother ship hangs at the top under a FUEL 800 readout. Small asteroids in several colours drift across the black sky. At the bottom, green hills flank three landing pads marked 50, 100 and 150, with stranded astronauts standing beside them.
Lunar Rescue: land on a pad, carry the astronauts up to the mother ship.
Gun Fight
Gun Fight full screen in black and white. Two cowboys face each other across the screen with guns drawn, a cactus standing between them. Each player's score, 0, is at the top with the round's timer, 64, between them, and six bullets per gunman are lined up along the bottom.
Gun Fight: a duel for two players at one keyboard.
Pac-Man
Pac-Man full screen. The blue maze with its dots and four flashing power pellets. Pac-Man, yellow, heads up the left side, Pinky is above him, Blinky at the top right, and Inky and Clyde wait in the ghost house. The score is 200, with two spare lives and a cherry at the bottom.
Pac-Man, the board's tall screen standing upright in the middle.
Sea Wolf
Sea Wolf full screen in black and white. A wavy line of sea runs across the top with a ship on it, a larger warship below it, and three mines further down. TIME 67 and SCORE 000 sit near the bottom above a row of lamps: four torpedoes, then READY, then RELOAD.
Sea Wolf through the periscope, with the cabinet's lamps drawn under the picture.

03 / Translated ahead of time

Translated ahead of time, not emulated

Why a 4.77 MHz PC can keep up with a 1978 arcade board.

An emulator usually imitates the board's processor while the game runs. It reads each of the game's instructions, works out what it means, and then does it. Every game instruction costs many instructions on the machine doing the imitating. That is fine on a modern computer and too much for an IBM PC.

ARCADE does that work once, before the program ships. A translator read each board's whole program and wrote matching 8086 code, one game instruction at a time. Space Invaders came to 4,366 of them. When you play, the PC runs that code directly. Nothing reads or decodes a game instruction while the game runs.

That only works because an arcade program is small and never changes. Space Invaders is 8KB. Its program is never swapped for another and never rewritten while it runs.

Checked against a model

A second, simpler emulator of the Space Invaders board was written to check the translation. The two ran side by side for 600 frames and compared the processor's registers at every game instruction: 2,293,923 instructions, all in agreement.

The board's speed

The board's interrupts come from the PC's own timer, so the game keeps its time even when the PC is slow. On a 4.77 MHz IBM PC, Space Invaders delivers 59.4 to 59.9 frames a second. The real board made 59.54.

No ROM in the program

The translated code ships with the board's own bytes left out, as holes. When you pick a game, ARCADE reads your ROM file, checks its checksum and fills the holes. ARCADE.O88 is 193KB with all seven boards.

Sound

With a Sound Blaster every sound plays at once, mixed. Space Invaders' sounds are synthesised for this program, not recorded. Pac-Man's three voices are its own sound chip, played sample by sample. An AdLib plays the voices on its FM chip, and otherwise the PC speaker plays one sound at a time.

Q*bert, the cabinet's view
Q*bert's pyramid in play, the same picture as in the gallery, with four cubes turned yellow and Q*bert standing on the last.
Twice as wide and 15/8 as tall as the board's own screen.

Q*bert needs no translation

Q*bert's board used a 5 MHz Intel 8088. That is the PC's own processor, so its program runs as it is, in a 64KB block of the PC's memory. A short list of patches changes a few addresses, so that the game's writes to its hardware land where ARCADE can read them, and so that the game hands control back once a frame.

The game itself needs about a tenth of a 4.77 MHz 8088. The picture is the expensive part. So on an 8088 the game keeps its full speed, 61.5 frames a second against the board's 61.42, and the screen catches up in steps: it redraws 26 to 29 small patches of changed tiles a second. A 286 draws every frame.

04 / What it does not do

What it does not do

No games included

There is no ROM on the disk and none in the os8088 source. The games belong to Taito, Midway, Gottlieb (now Sony Pictures Entertainment) and Bandai Namco. Each set must match the chips ARCADE was made for, checked chip by chip. ARCADE plays these seven boards and no others.

Pac-Man is for a 286

On an XT, Pac-Man runs a frame or two a second. A 16 MHz 286 gets most of its speed. Pac-Man and Q*bert need VGA. The other five also play on Hercules and CGA, in black and white as the board drew them.

Full screen only

Games play full screen, never in a window, and there are no save states. If a game reaches code the translator never saw, it stops and says where, rather than guessing.

Some sounds are missing

Q*bert's sound board runs live only on a 386 or faster, and its speech is not spoken. On an 8088 or a 286, Q*bert is silent. Lunar Rescue's end-of-level tunes are not played.

05 / Run ARCADE

Run ARCADE

  1. The disk

    The release zip carries ARCADE in PROGRAMS/ARCADE, in all four disk sizes. On the 286 kernel, use 1440K/286-PLUS/PROGRAMS/ARCADE or 1200K/286-PLUS/PROGRAMS/ARCADE, which keeps ARCADE's memory above the first megabyte where the machine has it.

  2. Your ROM sets

    Open ARCADE.O88 and choose Game > Add ROM sets.... Pick a MAME set you own, such as invaders.zip or qbert.zip. ARCADE checks each chip and writes one file, such as QBERT.ROM, beside the zip. A split Pac-Man needs puckman.zip in the same folder. It is done once per set.

  3. Play

    Choose a game and press Enter. 5 or C is a coin, 1 and 2 are the starts, the arrows move and Space fires; each game's card lists its own keys. P pauses, F1 shows the game's card, and Esc goes back to the cabinet with the game waiting.