Skip to content

Williams and Midway ​

Williams built 6809 boards for Defender and Robotron. Midway's Y, T and W-units ran their games on the TMS34010 graphics CPU at the slowest refresh of the late 2D boards. Much of the original assembly source for these games is now public. Midway Zeus, the later 3D board, runs its game on a TI DSP with a custom 3D controller.

BoardYearsMain CPU and clockSoundRefreshProtectionMAME statusGhidra
Williams 68091980 onMC6809E at 1 MHzM6802 or M6808 sound CPUabout 60.10 Hz (computed)None listedIn MAMEBuilt in (MC6800 module)
Midway Y-unit1988 onTMS34010 at 40, 48 or 50 MHzWilliams CVSD or ADPCM, Z80 at 4 MHz, MSM6295about 54.71 Hz (computed)None listedIn MAMEExtension
Midway T-unit1992 onTMS34010 at 50 MHzDCS (2K variant)Not covered hereNone listedIn MAMEExtension
Midway W-unit1994 onTMS34010DCS (8K variant) on an ADSP-2105 at 10 MHzNot covered herePIC16C57In MAMEExtension (TMS34010); none built in for the ADSP
Midway Zeus1997 onTI TMS32C032 DSP at 60 MHzNot covered hereNot covered hereNone listedImperfect (2018 talk)None built in

Williams 6809 boards ​

Hardware ​

Williams' 6809 hardware ran Defender (1980) and Robotron 2084 (1982, Williams and Vid Kidz) (MAME: williams/williams.cpp).

  • The MC6809E runs at 1 MHz.
  • The pixel clock is 8 MHz. Totals of 512 by 260 give about 60.10 Hz (computed).
  • Early games use an M6802 sound CPU. Later ones use an M6808.
  • The memory map puts a blitter at CA00 to CA07. The driver notes that "Stargate and Defender do not have blitter".
  • A watchdog is at CBFF.
  • 1K by 4 bits of battery-backed CMOS RAM at CC00 to CFFF holds settings and high scores.

Protection ​

None listed.

Tools ​

Ghidra's MC6800 module holds the 6809 spec (CPU families). Unicorn has no 6809 backend. Take ground truth from MAME's debugger and Lua, or from a small 6809 core.

Projects to learn from ​

The repository descriptions are short game blurbs. The repositories give no licence or provenance statement. No primary source shows an official release of the Defender or Robotron source by Williams or Eugene Jarvis. GameFrame's rule against game material means a project does not copy this source into its own repository. Treat it as third-party evidence (Legal).

For an exact reimplementation ​

  • Load the CMOS settings and high scores as an input to each test (practices).
  • Model the blitter on games that have it. Defender and Stargate do not.
  • The source shows what the programmers meant. It may not match the final revision, so use the shipped ROM for exact behaviour.

Midway Y-unit and Z-unit ​

Hardware ​

The Y-unit ran Smash TV (1990) and Mortal Kombat. NARC (1988) ran on the related Z-unit (MAME: williams/midyunit.cpp).

  • The TMS34010 graphics CPU runs at 40 MHz on "slow" games: Smash TV, Trog and High Impact.
  • It runs at 48 MHz on "fast" games: NARC, MK, Total Carnage and Strike Force.
  • It runs at 50 MHz on Terminator 2.
  • Sound is Williams CVSD or ADPCM. The ADPCM sets have a Z80 at 4 MHz and an MSM6295.
  • Standard-resolution timing uses 506 by 289 totals, about 54.71 Hz (computed).

MAME sets the TMS34010's input clock. The chip's effective instruction rate is a fraction of that clock (not confirmed).

Protection ​

None listed.

Tools ​

  • The Ghidra_TMS34010 extension adds the TMS34010. Its completeness is not confirmed.
  • Ghidra has no built-in TMS34010 module. Unicorn has none either. Use MAME to produce ground truth.

Projects to learn from ​

  • Smash TV's source includes ADJUST.ASM, AUDIT.ASM, DEMO.ASM, DIAG.ASM, HSTD.ASM for the high-score table, and a MAKEFILE (historicalsource/smashtv).
  • The historicalsource account also holds NARC, Total Carnage and Trog (GitHub: historicalsource).

For an exact reimplementation ​

  • Run the port at about 54.71 Hz. At 60 Hz a port shows about 317 more frames per minute (practices).
  • Record which clock the game uses: 40, 48 or 50 MHz.
  • Rebuild attract mode, audits, adjustments and diagnostics. They are separate modules in the source.

Midway T-unit ​

Hardware ​

The T-unit ran Mortal Kombat (1992) and NBA Jam (1993). It runs the TMS34010 at 50 MHz with a 4 MHz pixel clock. Sound is DCS (2K variant) (MAME: williams/midtunit.cpp).

Protection ​

None listed.

Tools ​

As for the Y-unit.

Projects to learn from ​

  • NBA Jam's source includes ATTRACT.ASM, AUDIT.ASM, ADJUST.ASM, DIAG.ASM, DIPSW.EQU, DIPEQU.ASM and batch build files (historicalsource/nba-jam).
  • The historicalsource account also holds Mortal Kombat II, NBA Jam Tournament Edition, NBA Hangtime, Open Ice and Revolution X (GitHub: historicalsource).

For an exact reimplementation ​

  • Read the DIP switch equates in the source as a list of settings to record per test.
  • Model the DCS sound board as a second program.

Midway W-unit ​

Hardware ​

The W-unit ran Mortal Kombat 3 (1994) and WWF WrestleMania (1995). It adds an ADSP-2105 at 10 MHz for DCS sound (8K variant) (MAME: williams/midwunit.cpp).

Protection ​

The board has a PIC16C57 security chip. Ghidra has a built-in PIC module (protection).

Tools ​

As for the Y-unit. Ghidra has no built-in ADSP-21xx module.

Projects to learn from ​

None listed beyond the T-unit sources.

For an exact reimplementation ​

  • Check whether MAME runs the PIC16C57's dumped program or a simulation.
  • The ADSP-2105 sound program uses a different instruction set. Trace it separately.

Midway Zeus ​

Hardware ​

Midway Zeus (1997) ran Mortal Kombat 4 and Invasion. Its main CPU is a TI TMS32C032 DSP at 60 MHz. The Zeus chip is a Midway custom 3D controller. It has 512 registers in the CPU's address space and 16 MB of Wave RAM in two banks (MAME wiki, Midway Zeus). Zeus 2 renders to a 32 bpp framebuffer with a different register layout (Aaron Giles, December 2007 log). A 2018 talk describes Zeus as a microcoded VLIW design at 66 MHz (Reverse Engineering Zeus Part 1 (siliconpr0n, 2018)).

Protection ​

None listed.

Tools ​

  • The 2018 talk calls MAME's support imperfect. The driver's current flags are unknown.
  • Ghidra has no built-in TMS320 module. Unicorn has none either.

Projects to learn from ​

  • Aaron Giles used Cruis'n Exotica and The Grid as his Zeus 2 test cases.
  • The siliconpr0n talk on reverse engineering Zeus.

For an exact reimplementation ​

  • Game logic runs on a DSP. Plan for a TMS320 disassembler or a small core.
  • Check MAME's Zeus output against another record before trusting it as ground truth.

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