GOSOF

Gottlieb Soundboard on FPGA

HW 5.x / SW 7.98

user manual

ralf@lisy.dev

v1.01 04.11.2026

German version: GOSOF_HW5x_Bedienungsanleitung.html. French version: GOSOF_HW5x_manuel_utilisateur.html. The chapter numbering is the same in all three.

Table of contents

Important remark

By using GOSOF 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 GOSOF!

1. Introduction

GOSOF is a 100% hobby project: a replacement for the Gottlieb System 1 and System 80 soundboards, built around an FPGA that runs the original sound ROMs.

Version 5 differs from the earlier boards in two ways:

2. PCB

GOSOF v5.00 PCB, complete, with the core board mounted upside down
Part Function
S1 (8 poles) SB options
S2 (6 poles) game select
S3 (4 poles) options
TEST Gosof sound test
TEST Gottlieb test switch of the original board, or version announcement
S5 / K2 input test
D1, D2 LEDs
R1 speech volume
R5 sound volume
Audio1 DFPlayer Mini
K1 programming connector (JTAG)
K5 5 jumpers, close for System 1

2.1. LEDs

The LED on the DFPlayer Mini goes ON while speech or music is playing. The LEDs of the core board are hidden, because the board is mounted upside down.

3. Installation

The Gosof board has the same connectors and the same mounting holes as the original Gottlieb soundboards, so replacing the board can be done in seconds.

Gosof fits Gottlieb 'export' and 'non export' versions.

Note: In case you exchange your export version soundcard for Gosof and choose the 'speech' version, you need to replace your MPU ROM! Games with export versions of Gottlieb soundcards have ROMs installed which can only play 15 different sounds, whereas the speech soundboard can play up to 31 different sounds.

3.1. System 80 and System 1

The PCB has one connector for each system, marked System80 and System1.

4. DIP switch settings

4.1. S1: SB options

This DIP switch bank has the same functionality as the DIP switch bank on your original soundboard. Take a look at your Gottlieb manual.

For 'small' soundboards which have only two DIP switches, use DIP switches 1 and 2 of the bank (usually OFF). For 'big' soundboards it is the complete DIP bank. Usually you have to switch ON DIP 5 and 6 (speech and background sound enable). DIP 7 and 8 are not used.

4.2. S2: game select

Each program can emulate a number of different Gottlieb soundcards. With this DIP switch bank you select which game will be emulated. For a complete list take a look at Appendix A.

4.3. S3: options

DIP ON OFF
1 CPU clock 1020 kHz CPU clock 892 kHz
2 speech from the DFPlayer Mini (MP3) speech from the Votrax SC-01 emulation (MA-216 games only)
3 'Gottlieb' test button acts as the test switch of the original board 'Gottlieb' test button plays the version announcement
4 test mode, see chapter 5.3 normal operation

With DIP 1 you can adjust the CPU clock and with it the pitch of the tones.

5. Testing

Gosof provides several options for testing.

5.1. Gosof test button

By pressing the 'Gosof' test button, Gosof will play all possible 30 sounds (15 in case of 'small' soundboards) for the configured game.

5.2. Gottlieb test button

With option DIP 3 ON, the 'Gottlieb' test button acts like the test switch of the original soundboard.

With option DIP 3 OFF, it plays the version announcement: "This is Gosof version 7.98 from lisy dot dev". This also works without a DFPlayer Mini.

5.3. Option DIP 4: test mode

With option DIP 4 ON, the sound number to play (the signal from the CPU) is spoken by the DFPlayer Mini instead of playing the specific sound. Pressing the 'Gosof' test button with this option ON will say the numbers from 1 to 31.

5.4. Input test S5

K2 connects the five sound inputs from the CPU to the button S5. Put a jumper on one position of K2 and press S5 to activate that input, without the CPU board. D1 lights up while the input is active.

6. DFPlayer Mini

Gosof uses a small device, the DFPlayer Mini, for sound that comes from files. The files are stored on a standard micro SD card in the player.

You need the DFPlayer Mini for:

Gottlieb games with speech are: Mars, Volcano, Black Hole, Devil's Dare, Rocky, Striker, Q*Bert's Quest and Caveman. These are the MA-216 games, for which the Votrax emulation (option DIP 2 OFF) can produce the speech without a DFPlayer Mini.

6.1. Files on the SD card

A ZIP file containing all speeches is provided on lisy.dev. Just extract the ZIP archive and copy its content to a micro SD card. The speech folders look like this:

10 - Mars
12 - Volcano
14 - Black Hole
18 - Devils Dare
20 - Rocky
23 - Striker
25 - Q*Bert's Quest
63 - Caveman
64 - Test (numbers)

7. Programming the FPGA

The configuration flash on the core board needs to be programmed through the connector marked 'Programming' (K1). The current FPGA software is on the repository server: https://lisy.dev/swrep/soundboards

You need:

Program the file GOSOF80_HW5.x_v7.98.jic in JTAG mode. After programming, switch the power off and on again.

This file contains no game ROMs, because they are copyrighted. With this file alone D1 blinks and there is no sound. Add the ROMs as described in the next chapter.

Have a look at the documentation on the web page: https://lisy.dev/documentation-01.html

8. Game ROMs

The ROMs share the configuration flash with the FPGA program, so you program one .jic file that contains both. The flash has 64 slots of 4 KB, one per setting of DIP bank S2.

The script add_roms_to_jic.ps1 copies your ROMs into the released .jic and writes a new one. It runs on any Windows PC with the built-in Windows PowerShell. You need neither Quartus nor the source code, only:

Put everything into one folder, open a command prompt there and type one of these commands:

powershell -ExecutionPolicy Bypass -File add_roms_to_jic.ps1 -Jic GOSOF80_HW5.x_v7.98.jic -Image Gosof_Image_v1.21.img
powershell -ExecutionPolicy Bypass -File add_roms_to_jic.ps1 -Jic GOSOF80_HW5.x_v7.98.jic -RomDir roms

The script writes GOSOF80_HW5.x_v7.98_roms.jic and lists the slot, soundboard and reset vector for each game. Program this file as described in chapter 7. Do not distribute it, because it contains the ROMs. The released .jic stays unchanged.

The script stops with ERROR if the .jic is damaged or does not match HW 5.x. It shows a WARNING if a file does not look like a program for the soundboard of its slot. This usually means the file is in the wrong slot or was put together in the wrong order. Check it against Appendix B before you program the board.

To see which slots of a .jic hold a game:

powershell -ExecutionPolicy Bypass -File add_roms_to_jic.ps1 -Jic GOSOF80_HW5.x_v7.98_roms.jic -List

If D1 blinks after programming, there is no ROM for the game selected on S2.

Appendix A: game select

S1 to S6 in this table are the switches 1 to 6 of the DIP switch bank S2 on the PCB. The games are the ones of the GOSOF SD image v1.21, in the slots where add_roms_to_jic.ps1 -Image puts them. Slot = the slot in the flash, see Appendix B. The soundboard of a game follows from its slot.

S1 S2 S3 S4 S5 S6 Game Slot
off off off off off off Mars 0
on off off off off off Volcano 1
off on off off off off Black Hole 2
on on off off off off Devils Dare 3
off off on off off off Rocky 4
on off on off off off Striker 5
off on on off off off Q*Bert's Quest 6
on on on off off off Caveman 7
off off off on off off Haunted House 8
on off off on off off Spirit 9
off on off on off off Krull 10
on on off on off off Goin'Nuts 11
off off on on off off Super Orbit 12
on off on on off off Royal Flush Deluxe 13
off on on on off off Amazon Hunt 14
on on on on off off Punk! 15
off off off off on off Panthera 16
on off off off on off Spiderman 17
off on off off on off Circus 18
on on off off on off Counterforce 19
off off on off on off Star Race 20
on off on off on off James Bond 21
off on on off on off Timeline 22
on on on off on off Force II 23
off off off on on off Pink Panther 24
on off off on on off Volcano 25
off on off on on off Black Hole 26
on on off on on off Eclipse 27
off off on on on off Devils dare 28
off off off off off on Rack'Em UP 32
on off off off off on Ready... Aim... Fire! 33
off on off off off on Jacks to Open 34
on on off off off on Touchdown 35
off off on off off on Alien Star 36
on off on off off on The Games 37
off on on off off on El Dorado City of Gold 38
on on on off off on Ice Fever 39
off off off on off on Bounty Hunter 40
on off off on off on Chicago Triple Play 41
off on off on off on Tag Team Pinball 42
off off off off on on Totem 48
on off off off on on Hulk 49
off on off off on on Genie 50
on on off off on on Buck Rogers 51
off off on off on on Torch 52
on off on off on on Roller Disco 53
off on on off on on Asteroid Annie 54

Appendix B: making your own slot files

With -RomDir, add_roms_to_jic.ps1 takes one file of exactly 4096 bytes per game. The file name starts with the slot number (00 to 63), followed by _, -, a space or a dot. This appendix describes how to build such a file from the original ROMs of a soundboard. You need your own copy of the ROMs. They are not provided with GOSOF.

B.1. The slot decides the soundboard

The slot is the setting of DIP bank S2: count 1 for S1 ON, 2 for S2 ON, 4 for S3 ON, 8 for S4 ON, 16 for S5 ON and 32 for S6 ON. The slot also tells GOSOF which soundboard to emulate. This affects the address decoding, the interrupts and the inputs, so a game only runs in a slot of its own soundboard type:

Slot Soundboard Games in the SD image v1.21 Free slots
0 to 7 MA-216 (System 80, speech) 0 to 7 none
8 to 15 MA-309 (System 80) 8 to 15 none
16 to 31 MA-55 (System 80) 16 to 28 29 to 31
32 to 47 MA-490 (System 80A) 32 to 42 43 to 47
48 to 63 System 1 48 to 54 55 to 63

Within its range a game can go into any slot, with these exceptions:

A file in a slot of the wrong type does not start; the script then shows a WARNING.

B.2. Layout of the 4 KB file

The FPGA has two 2 KB ROMs. The first 2 KB of the slot file go into ROM 1, the second 2 KB into ROM 2. What has to be in them depends on the soundboard. Areas marked "unused" are never read; fill them with FF.

MA-216 and MA-309 (two 2 KB ROMs, PinMAME names xxx-s1.snd and xxx-s2.snd):

Offset in the file Content CPU address
0000 to 07FF xxx-s1.snd 7000 to 77FF
0800 to 0FFF xxx-s2.snd 7800 to 7FFF

MA-55 and System 1 (one 1 KB game ROM, plus the 1 KB ROM inside the 6530 RRIOT of the soundboard):

Offset in the file Content CPU address
0000 to 03FF game ROM, e.g. 652.snd (MA-55) or 429.snd (System 1) 0400 to 07FF (and 0800 to 0BFF)
0400 to 07FF unused
0800 to 0BFF 6530 ROM: 6530sy80.bin for MA-55, 6530sys1.bin for System 1 0C00 to 0FFF
0C00 to 0FFF unused

The 6530 ROM holds the start of the program, so it must be the one of the right system.

MA-490 (one 2 KB ROM, e.g. 685-s.snd):

Offset in the file Content CPU address
0000 to 07FF game ROM 0800 to 0FFF
0800 to 0FFF unused

B.3. Example

In a command prompt in the folder with the ROM files, first make two filler files of 1 KB and 2 KB with FF:

powershell -Command "[IO.File]::WriteAllBytes('ff1k', [byte[]](,0xFF * 1024))"
powershell -Command "[IO.File]::WriteAllBytes('ff2k', [byte[]](,0xFF * 2048))"
mkdir roms

Then put the files together with copy /b. The order of the parts is the order in the tables above:

copy /b 666-s1.snd + 666-s2.snd roms\00_mars.bin
copy /b 669-s1.snd + 669-s2.snd roms\08_hauntedhouse.bin
copy /b 652.snd + ff1k + 6530sy80.bin + ff1k roms\16_panthera.bin
copy /b 685-s.snd + ff2k roms\32_rackemup.bin
copy /b 429.snd + ff1k + 6530sys1.bin + ff1k roms\48_totem.bin

Every file in roms must have exactly 4096 bytes. Then add them to the .jic as described in chapter 8. For each game, the script shows where the 6502 reset vector points. If there is no program start, it shows a warning, for example:

slot 40  MA-490    reset 2902  40_hauntedhouse.bin
          WARNING: no program start found for a MA-490 (reset vector 2902) - wrong slot, or file put together wrongly? See appendix B.

This check catches a wrong slot type and parts in the wrong order. It cannot tell whether the file belongs to the game you meant, so set S2 according to the slot number of the file name.