Skip to content

Sega 2D boards ​

Sega's 68000 boards of the late 1980s ran beat 'em ups and sprite-scaling games. Many of them encrypt the program inside a custom 68000, the FD1089 or the FD1094. System 18 has one of the few refresh rates in MAME marked "verified on pcb". Sega System 1, the earlier Z80 board, is on the Z80 and 6502 page.

BoardYearsMain CPU and clockSoundRefreshProtectionMAME statusGhidra
System 16B1988 (Altered Beast)68000 at 10 MHzZ80 at 5 MHz, YM2151 at 4 MHzabout 60.05 Hz (computed)FD1089A, FD1089B, FD1094, MC8123, 8751In MAME68000 built in (after decryption)
System 18Not covered here68000 at 10 MHzZ80 at 8 MHz, YM3438, RF5C6857.23 Hz (measured)Not covered hereIn MAME68000 built in
X BoardNot covered here (After Burner)Two 68000s at 12.5 MHzNot covered hereabout 59.64 Hz (computed)Not covered hereIn MAME68000 built in
Y Board1988Three 68000s at 12.5 MHzNot covered herenominal 60 HzNot covered hereIn MAME68000 built in

System 16B ​

Hardware ​

System 16B ran Altered Beast (1988). It uses a 68000 at 10 MHz, a Z80 at 5 MHz, a YM2151 at 4 MHz and a 315-5195 memory mapper. It shows 320 by 224 at about 60.05 Hz (computed) (MAME: sega/segas16b.cpp).

Protection ​

System 16B configurations in MAME include FD1089A, FD1089B, FD1094, an MC8123 sound Z80 and an Intel 8751 protection MCU. The protection page describes each cipher.

  • The FD1094 decrypts program-space words only. It has 256 internal states that the program can switch.
  • The FD1089 encrypts opcodes and data. Fewer than 128 bytes of its internal RAM are enough to decrypt a whole game.

Tools ​

  • Ghidra's 68000 module and Unicorn's M68K backend work on the program after decryption (CPU families).
  • Follow MAME's fd1094.cpp and fd1089.cpp to decrypt the program.
  • The Intel 8751 MCU has a built-in Ghidra 8051 module.

Projects to learn from ​

None listed yet.

For an exact reimplementation ​

  • Record which encrypted CPU the set uses.
  • On an FD1094 game, take ground truth from a running emulator. A static decrypt needs the state of each code region.
  • Model the 315-5195 memory mapper as the game programs it.

System 18 ​

Hardware ​

System 18 has a 68000 at 10 MHz, a Z80 at 8 MHz, a YM3438 and an RF5C68 PCM chip. Its refresh is 57.23 Hz, "verified on pcb" (MAME: sega/segas18.cpp).

Protection ​

Not covered here.

Tools ​

As for System 16B.

Projects to learn from ​

None listed yet.

For an exact reimplementation ​

  • Run the port at 57.23 Hz. MAME's value for this rate was measured on a real board.

X Board ​

Hardware ​

The X Board ran After Burner and other sprite-scaling games (MAME: sega/segaxbd.cpp).

  • Two 68000s run at 12.5 MHz from a 50 MHz master clock.
  • The board also has a 315-5248 multiplier and a 315-5250 compare and timer chip.
  • The screen shows 320 by 224 at about 59.64 Hz (computed).
  • Some games add Z80s at 8 MHz for link and motor control.

Protection ​

Not covered here.

Tools ​

As for System 16B.

Projects to learn from ​

None listed yet.

For an exact reimplementation ​

  • Model the 315-5248 multiplier and the 315-5250 chip as the CPUs see them. The game logic uses their results.
  • Run both 68000s interleaved.
  • On a game with link or motor Z80s, record what those CPUs send and receive.

Y Board ​

Hardware ​

The Y Board ran Galaxy Force 2 and Power Drift (both 1988). It runs three 68000s at 12.5 MHz. MAME sets its refresh to a nominal 60 Hz with set_refresh_hz(60). Its rate is not derived from raw timing (MAME: sega/segaybd.cpp).

Protection ​

Not covered here.

Tools ​

As for System 16B.

Projects to learn from ​

None listed yet.

For an exact reimplementation ​

  • Treat the Y Board's refresh rate as unknown. Measure it from a board or a recording before relying on it.
  • Run the three 68000s interleaved.

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