Williams MPU with integrated sound board, based on FPGA
Hardware version v1.0
Software Version 6.30
user manual
v1.31 23.10.2026
German version: WillFA7S_HWv1_x_Bedienungsanleitung.html. French version: WillFA7S_HWv1_x_manuel_utilisateur.html. The chapter numbering is the same in all three.
By using WillFA7S it is possible to damage your pinball machine. As this is a private project with NO commercial interest the author accepts no liability for any damage that may arise by using WillFA7S!
WillFA7S is a WillFA7 with a Williams sound board built into the same FPGA. It emulates the hardware of a Williams MPU type SYS3 up to SYS7 with the driverboard integrated on the PCB and, on the same chip, a second complete computer: the Williams sound board type 1 / type 2 with its own 6802, its own PIA, its own program roms, the DAC and the CVSD speech decoder.
So one board replaces the MPU, the driver board and the sound board.
The FPGA is a Cyclone IV EP4CE10 - bigger than the one on the plain WillFA7 boards, because the five sound board roms need the extra memory. All SYS3..SYS7 games are supported, including 'Defender' and 'Star Light'.
Everything that is not about the sound board works exactly as on a WillFA7 - the address space, the switch matrix and its debouncing, solenoids, lamps, displays, the settings eeprom, the boot phases. If something is not mentioned here, look it up in the WillFA7 manual; it applies unchanged.
What do you need?
Possibility to read/write micro SD cards
A PC with an USB port in order to be able to program the FPGA
Two things are different from the very start, please read them before you begin:
The SD card is the same one every WillFA7 uses. Since software version x.30 that is the x.20 card of the other boards, with a second area behind the games that holds the sound board roms. Only WillFA7S reads that area. See chapter 9.
There is one more DIP bank, S5 with four switches, for the sound board options. See chapter 4.3.
Download the latest WillFA7S SD card image and the FPGA program from lisy.dev
Write the image to a SD card
Program the FPGA
Configure switch 'game select' according to your pinball ( Appendix A )
Set the sound board options on S5 ( chapter 4.3 ) - for most games all 'OFF' is right
Replace your original Williams MPU, Driverboard and sound board with WillFA7S
On first boot with your game set option DIP1 to ON ( init nvram)
Switch the game ON
Game will show Williams prom number, wait until 'Diag LED' goes off
Switch the game OFF
Switch the Game ON
Enjoy
WillFA7S has the same connectors and the same mounting holes as the original Williams MPUs, so replacing the board can be done in seconds. The board needs to be placed at the former location of the Williams driverboard.
The audio output of the integrated sound board goes to the amplifier of your machine. The original sound board is no longer needed and can stay out.
The connector for an external sound board still carries the sound commands, exactly as on a WillFA7. Both work at the same time: whatever the game sends to the internal sound board is also present on that connector.
Here you can select what game WillFA7S should run. This depends on the roms placed on the SD card. See Appendix A for a full list and chapter 9 for the structure of the SD card content.
Identical to WillFA7, default all 'OFF':
| DIP | Function |
|---|---|
| Dip1 | init nvram - set to ON for the very first boot with your game |
| Dip2/3 | pulse time of the special solenoids: OFF-OFF 60ms, OFF-ON 50ms, ON-OFF 40ms, ON-ON 35ms |
| Dip4 | special solenoid debounce: OFF = 57µs, ON = 250µs |
| Dip5 | switch matrix debounce: ON = debounced, OFF = passed through unfiltered |
| Dip6 | no protection on spec. sol 6 (SOL 22), needed for the game 'CONTACT' |
The WillFA7 manual describes these in detail.
This bank does not exist on a WillFA7. It sets up the sound board, the same way the DS1 switch does on an original Williams sound board. Default setting is all 'OFF' - that is the right setting for most games.
'ON' selects chime notes, 'OFF' selects synthesized sounds. This is the same switch as position 1 of DS1 on the original sound board. Which one your game wants is written in the manual of your pinball machine; the early System 3 games are the ones that use chimes.
'ON' tells the sound board that speech is present, 'OFF' that it is not. Only type 2 sound boards - the ones with the speech roms - have speech at all, so leave this 'OFF' for a game without speech.
Not used, leave it 'OFF'.
Up to software 6.03 this switch selected where the sound commands come from, System 3/4 or System 6/7. Since 6.22 the board works that out from the game number by itself, so there is nothing left to set. See chapter 7.2.
The board has a sound test push button. This switch decides what pressing it does:
'OFF' - the button acts as the test button of the sound board itself, exactly like the one on an original Williams sound board. The sound board plays its own test sound.
'ON' - the button starts the built-in sound test of WillFA7S, with which you can step through all sound numbers and play them one by one. See chapter 7.4.
This is the one thing that catches people out. On WillFA7S the DIP switches are read exactly once, during the boot phase, and then the lines they sit on are handed back to the switch matrix of the game. Reading them continuously would disturb the switch matrix while the game runs.
So: after changing any DIP switch - game select, options or sound board options - switch the machine off and on again. A change during the game has no effect.
Immediately after switching on the pinball the 'ON' Led will go on and you will see the following output on the display of your pinball machine:
Player 1: version of the FPGA program running - it starts with a 6 on WillFA7S
Player 2: value of selected game on S1 (game select)
Player 3: build date of the FPGA program
Player 4: boot phase
Credit Display: the option switches - the left two digits are the sound board options S5, the right two the game options S2
Versions 6.03 to 6.2x showed two checksums of the card on player 3 and 4. Since 6.30 the card carries no checksum any more, and the two displays show the same as on every WillFA7.
The option value is formed like this: each switch that is 'ON' adds its weight.
This is the same counting as the game select switch S1 in appendix A: Dip1 is always the one that counts 1.
Seven digit displays. Games marked
SYS6A or SYS7 in appendix A came with seven
digit player displays instead of six. WillFA7S knows this from the game
number and moves the boot message accordingly: the text stands right
aligned, the leftmost digit of each player display stays dark, and the
options keep their place on the credit display. Nothing has to be set
for this.
WillFA7S reads the card twice: first the 12 KByte of game roms, then the 20 KByte of sound board roms. If this fails the red LED 'SD card error' will go ON and '56' will be shown on display 4.
The red LED also blinks a code that tells you what went wrong. Count the blinks; after the last one there is a pause of about 2 seconds, then the group repeats.
| Blinks | Meaning |
|---|---|
| 1 | the SPI transfer stalled - check the card contacts and the wiring |
| 2 | the card does not answer the reset command |
| 3 | card type not supported, most likely a very old SD v1 card |
| 4 | the card never finished its initialisation |
| 5 | no data arrived from the card |
| 6 | the card reported a read error |
| 8 | no SD card, and the FPGA flash holds no roms for this game - see 5.3 |
Code 7 (checksum mismatch) existed with versions 6.03 to 6.2x only. Since 6.30 the card carries no checksum.
New with 6.30: if no SD card answers (codes 1 to 4 above), WillFA7S does not stop there but reads the game roms and the sound board roms from the flash memory the FPGA itself boots from. This takes about 1.3 seconds longer, because the board first gives the card its chance.
The code indicated by the Dip switch 'game select' is read from the SD card (or from the flash, see 5.3) and executed. If the code runs ( regular display strobes are present) the 'active' LED will go ON. The sound board starts together with the game.
Game settings are made exactly as on a WillFA7 and as on the original MPU; WillFA7S uses a serial EEPROM to store them individually per game.
The step by step procedure for System 3 and the picture with the button locations are in chapter 6 of the WillFA7 manual - they are the same board positions here.
One difference while the sound test runs: the Diag button steps through the sound numbers instead of triggering the diagnostic interrupt, and Enter plays the selected sound instead of storing a setting. That lasts only as long as the sound test is active, see chapter 7.4.
The Williams sound boards of System 3 to System 7, type 1 (sound only) and type 2 (sound and speech). Inside the FPGA this is a full rebuild: a second 6802 processor, its own PIA, 128 byte of ram, five 4 KByte program roms, the DAC for the sound and a HC55564 CVSD decoder for the speech.
The five rom blocks are filled from the SD card at boot, together with the game roms - which is why the card layout is different, see chapter 9.
Williams did this differently over the years:
WillFA7S picks the right source automatically, from the game number you set on S1. There is nothing to configure. Up to software 6.03 this was a DIP switch; since 6.22 it follows the game number, the same source of truth the memory protection uses.
Sound and speech are mixed inside the FPGA and leave the board together on one line, in a fixed 1:1 ratio. That is what the original does too, only there it happens in the analog domain: the sound signal goes over to the speech module, is mixed with the speech through the 5K pot R8 and comes back. R8 in its middle position is the 1:1 mix that is built here.
A game can therefore play a sound effect and speech at the same time, as on the original.
Set S5-Dip4 to 'ON' and restart. Then press the sound test button on the board:
While the sound test is active it takes over the display, and the diagnostic interrupt of the MPU is blocked so that the Diag button does not do two things at once.
With S5-Dip4 to 'OFF' the same button acts as the test button of the sound board itself, exactly like on an original Williams sound board.
Five games in the list use a sound command layout that WillFA7S does not reproduce completely:
World Cup (2), Contact (3), Disco Fever (4), Phoenix (6) and Warlok (25).
Warlok needs a sixth sound select line, which the original brings over with the jumper W12 on the sound board. WillFA7S rebuilds the Williams sound and comma latch as it is, and that latch carries five lines - so there is no sixth line to pass on.
World Cup, Contact, Disco Fever and Phoenix are the early System 3 games. They arrange their sound commands differently: one of the five bits sits on another input of the sound board, and two inputs are held high. That layout is not rebuilt either.
In both cases the games run and play, but some of their sounds will not be the right ones.
Everything else in the list is unaffected.
Everything you need to get the software onto the board is described on my website, and it is kept up to date there:
You will find there:
the latest FPGA program and the latest SD card image for download
how to write the image to a SD card
which programmer software you need, how to install the driver for the USB Blaster and how to program the FPGA
Make sure you take the WillFA7S version of the FPGA program - it shows a version starting with 6. The SD card image is the same one all WillFA7 boards use.
Due to limitations of the SD card read routine in the FPGA (it does read fix sector numbers instead of looking for filenames) it is necessary to use my SD-card image. You can write the image to a SD-card of your choice.
The card holds two areas, both with one slot per game number:
sector 660 + game number x 24 12 KByte game roms, 6 x 2K -> the MPU sees them from $5000 on
sector 1428 + game number x 40 20 KByte sound board roms, 5 x 4K
The first area is exactly the card of the boards without a sound board, so one image works everywhere; those boards never read the second area. There is no checksum (versions 6.03 to 6.2x had 64 KByte slots with a CRC16 - such a card does not boot on 6.30).
The SD card image holds one slot per game number, so a rom set can be exchanged without changing the FPGA program.
Write your rom set to the two positions given above with a sector editor: 12 KByte of game roms into the first area, 20 KByte of sound board roms into the second. Each part is read as one block and has to be complete.
The FPGA boots from a 2 MByte flash chip (EPCS16) on the board. The FPGA program itself takes less than 400 KByte of it; from address 080000h on there is room for all 32 games, 32 KByte each - the game roms and the sound board roms together:
flash address 080000h + game number x 8000h 12 KByte game roms, then 20 KByte sound board roms
The roms are copyrighted, so they cannot be part of the download. You put them there yourself, from your own SD card:
Write your SD card with the image as usual (chapter 9) and put it into the card reader of your PC.
Build the rom file. In the WillFA7 source tree (github.com/bontango/WillFA7) run
scripts\make_flash_hex.ps1 -SlotFiles <the 32 game files on the card> -SoundFiles <the 32 sound files> -Out variants\s_cyclone_iv_v4\output_files\willfa7_roms.hex
The files on the card are named after the games (hottip,
lucky7, ...) and the sound files the same with
_s at the end, in game order. Alternatively
-Image <image file> takes a complete image of the
card. The script lists every game it found with its reset vector; a game
shown with vector FFFF is empty.
In the folder variants\s_cyclone_iv_v4 run
quartus_cpf -c willfa7_roms.cof. This puts the FPGA program
and the roms into one file,
output_files\willfa7_roms.jic.
Program willfa7_roms.jic with the Quartus Programmer
instead of the normal .jic, with 'Verify' ticked.
From now on the board runs without SD card. With a card in the slot the card always wins, so you can still try other roms from a card without touching the flash.
Keep that file to yourself. It contains the game roms and must not be passed on.
| No | S1 | S2 | S3 | S4 | S5 | S6 | type | Name |
|---|---|---|---|---|---|---|---|---|
| 0 | off | off | off | off | off | off | SYS3 | Hot Tip |
| 1 | on | off | off | off | off | off | SYS3 | Lucky Seven |
| 2 | off | on | off | off | off | off | SYS3 | World Cup * |
| 3 | on | on | off | off | off | off | SYS3 | Contact * |
| 4 | off | off | on | off | off | off | SYS3 | Disco Fever * |
| 5 | on | off | on | off | off | off | SYS4 | Pokerino |
| 6 | off | on | on | off | off | off | SYS4 | Phoenix * |
| 7 | on | on | on | off | off | off | SYS4 | Flash |
| 8 | off | off | off | on | off | off | SYS4 | Stellar Wars |
| 9 | on | off | off | on | off | off | SYS6 | Tri Zone |
| 10 | off | on | off | on | off | off | SYS6 | Time Warp |
| 11 | on | on | off | on | off | off | SYS6 | Gorgar |
| 12 | off | off | on | on | off | off | SYS6 | Laser Ball |
| 13 | on | off | on | on | off | off | SYS6 | Firepower |
| 14 | off | on | on | on | off | off | SYS6 | Blackout |
| 15 | on | on | on | on | off | off | SYS6 | Scorpion |
| 16 | off | off | off | off | on | off | SYS6A | Algar |
| 17 | on | off | off | off | on | off | SYS6A | Alien Poker |
| 18 | off | on | off | off | on | off | SYS7 | Black Knight |
| 19 | on | on | off | off | on | off | SYS7 | Jungle Lord |
| 20 | off | off | on | off | on | off | SYS7 | Pharaoh |
| 21 | on | off | on | off | on | off | SYS7 | Solar Fire |
| 22 | off | on | on | off | on | off | SYS7 | Barracora |
| 23 | on | on | on | off | on | off | SYS7 | Cosmic Gunfight |
| 24 | off | off | off | on | on | off | SYS7 | Varkon |
| 25 | on | off | off | on | on | off | SYS7 | Warlok * |
| 26 | off | on | off | on | on | off | SYS7 | Time Fantasy |
| 27 | on | on | off | on | on | off | SYS7 | Joust |
| 28 | off | off | on | on | on | off | SYS7 | Firepower II |
| 29 | on | off | on | on | on | off | SYS7 | Laser Cue |
| 30 | off | on | on | on | on | off | SYS7 | Defender |
| 31 | on | on | on | on | on | off | SYS7 | Star Light |
(*) sound support is incomplete for these games, see chapter 7.5
The type column also says which player displays the
game came with: SYS3, SYS4 and
SYS6 are six digit, SYS6A (Algar and Alien
Poker) and SYS7 are seven digit. WillFA7S places its boot
message according to that, see chapter 5.1.