SYSFPGA - A Williams all-in-one Design & Multigame

System FPGA

After messing around with CPLDs to implement hardware compatible with the original Williams hardware, then building separate CPU, ROM and I/O boards, the next logical step was to integrate as much as possible into a single larger logic device. While retaining the overall design goal of an original CPU and keeping the display and hardware timings the same as the original equipment, otherwise I might as well just use an emulator...

So it was time to use an FPGA. Selection of a device was pretty easy as I wanted 5v tolerant inputs and the best device for my needs is the Xilinx Spartan II series. There's the downside of needing two supply voltages of 3.3v and 2.5v but that's only a PCB routing issue. The device used on these boards is an XC2S50, which is cost effective and fits all the logic which was required.

The end result is designed to support all the first generator hardware with the FPGA handling system clocking, display generation, support for the special-chip 'blitters', ( SC01 and SC02 ),  ROM/RAM/NVRAM address decoding and the PIA's.

WSF ( williams system FPGA ) supports all the first generation Williams hardware which shared a close common base. The supported games are Defender, Stargate, Joust, Robotron, Bubbles, Splat, Sinistar and Blaster. Although Blaster is more of a generation 1 "plus-a-bit" in terms of what the hardware can do.   Out of that list Sinistar is the oddball as it has a vertical screen, so it's included only to complete the set and for use in a vertical cabinet as a replacement for an original boardset. Although there's nothing to stop it being used in a JAMMA cab.

One of the design goals was to allow for the use of the SysFGPA as a straight replacement for an original boardset. To do this I've also built a couple of different JAMMA to Williams harness adapters specifically for the board. They plug into the original harness and seamlessly allow the use of the board in a dedicated cabinet. I've personally been testing in a dedicated Defender cabinet and, although I might be biased, I can't tell the difference.

Sound support is handled by an Atmel AVR emulating a 6800 cpu and the 6821 PIA from the original soundboard. The 6800 is a simple micro-controller so the AVR can handles op-code execution cycle-for-cycle identically to the original.  Plus there's a header for running an original soundboard in case someone really didn't want to go with the on board sound. The sound micro-controller also performs the CVSD decoding of the speech in Sinistar.

NVRAM is handled by an Ferroelectric RAM, it has all the characteristics of an SRAM but is non-volatile in nature and does not require a battery. It's an 8k x 8 device and a couple of other parts can work in it's place, the Dallas DS1225 or the Simtek STK16C68.

The Beta test board v0.01

SYSFPGA beta test board


Feature List

  • Runs original unmodified game code
  • Non-emulated. Game code runs on an original 6809 CPU
  • VGA monitor support - jumper enabled
  • Game selection menu can be disabled for boot to single game mode
  • No battery for non-volatile memory
  • Video blanking at side and top of screen ( no video noise )
  • 49 way joystick support ( Blaster & Sinistar only )
  • External soundboard support
  • Upright or Cocktail mode supported ( with flip screen )
  • JAMMA pinout connector + 2 addition buttons per player
  • Multi-WMS pinout option using only 6 button input
  • Separate Horizontal & Vertical sync outputs
  • Configuration options for Bubbles, Robotron & Splat joysticks
  • Hold 1P & 2P start button to return to game select menu
  • Optional dedicated return to menu button
  • Optional Sinistar support, enable or disable from menu
  • Only 5V power supply is required


System Options Setup

Holding down the 1P & 2P start buttons at first boot, or selecting SETUP from the main menu, allows changing of the board hardware options.

What are the options ?

Option Name




Testing VGA mode


Game or Menu

Select the game the hardware boots into.

After self test it can either display the selection menu or start a specific game up automatically.



Set the type of cabinet the game is running in.

Sinistar and Blaster do not support a cocktail mode.


 OFF/1,2,4 seconds 

How many seconds the 1P + 2P start buttons should be held down before the game restarts back at the selection menu



After 10 minutes of inactivity on the menu, the game goes in to the running ostrich screen saver mode. 
Moving the joysticks or any button clears the screen saver



Forces the game to skip the ‘rug pattern’ self test when a game starts.



Enable use of a 49 way joystick  with blaster or sinistar.
When OFF the behavior of a 49 way joystick is simulated using the standard 8 way stick and passed to the game.

When enabled the sysfpga expects a 49-way Williams or Midway/Happ joystick to be connected to the pin header on the board.




STANDARD MODE – 1P and 2P joystick plus player 1 buttons 1 through 6 are used.

MULTI_WMS mode the button schem uses 1P joystick 2P joystick and player 1 buttons 1,2 & 3 and player 2 buttons 1,2 & 3.



In upright mode player 2 stick is used for the up/down/left/right firing for Robotron.

Buttons mode, player 1 button 1,2,3,4 is used for firing.

This option has no effect in cocktail mode.



In upright mode player 2 stick is used for the up/down/left/right throw for splat.
HOWEVER this is only useful in a 1 player game as in a 2 player game their stick control the throwing (!) 

This option has no effect in cocktail mode



Use either the left side, 1P joystick or right side 2P joystick for bubbles



Sinistar joystick is rotated 90 degrees.  This is to allow play in a horizontal cabinet.
NOTE: The screen is not rotated !!




WHEN PRESSED – soon as the 1P start or 2P start buttons are pressed the button press it passed to the game immediately.

ON RELEASE – when the 1P or 2P button is pressed it’s passed to the game ONLY when the button is released.

This stops credits being used when 1P + 2P are held down to return to the start menu.




Holding the button down for 5 seconds resets all the menu values to their defaults.




Test screen for showing state of all inputs, used for testing joystick & button wiring.




Allows games & the setup screen to be disabled from showing on the start menu.


Game Specific Pinouts

This grid shows the JAMMA pinout of the board and the game controls.

  • In cocktail mode the option "ROBOTRON 1P FIRE" and "SPLAT 1P FIRE" have no effect. The player two inputs follow the normal input for.. player 2.
  • In upright mode most only Joust and Splat use player 2 inputs, the other games expect player 1 & 2 to use the same controls.
  • Sinistar & Blaster when the when 49 way stick is 'OFF' then the standard 8-way joystick input is translated into a 49 way directions for the game.


What's Next ?

  • Nothing new at the minute….


A few video captures

These videos are captured s-video output from one my RGB to NTSC video encoder boards using a generic Philips SAA7130 based PCI capture card.

Options Menu