GOSOF

Gottlieb Soundboard on FPGA

HW 5.x / SW 7.98

Bedienungsanleitung

ralf@lisy.dev

v1.01 04.11.2026

Deutsche Fassung von GOSOF_HW5x_user_manual.html. Version française : GOSOF_HW5x_manuel_utilisateur.html. Die Kapitelnummern sind in allen drei Fassungen gleich.

Inhalt

Wichtiger Hinweis

Mit GOSOF kann Ihr Flipper beschädigt werden. Da es sich um ein privates Projekt OHNE kommerzielles Interesse handelt, übernimmt der Autor keine Haftung für Schäden, die durch den Einsatz von GOSOF entstehen!

1. Einleitung

GOSOF ist ein reines Hobbyprojekt: ein Ersatz für die Soundboards von Gottlieb System 1 und System 80, aufgebaut um ein FPGA, das die originalen Sound-ROMs ausführt.

Version 5 unterscheidet sich in zwei Punkten von den früheren Platinen:

2. Platine

GOSOF-Platine v5.00, bestückt, mit kopfüber gestecktem Core-Board
Bauteil Funktion
S1 (8-polig) Soundboard-Optionen
S2 (6-polig) Spielauswahl
S3 (4-polig) Optionen
TEST Gosof Soundtest
TEST Gottlieb Testschalter der Originalplatine oder Versionsansage
S5 / K2 Eingangstest
D1, D2 LEDs
R1 Lautstärke Sprache
R5 Lautstärke Sound
Audio1 DFPlayer Mini
K1 Programmierstecker (JTAG)
K5 5 Jumper, für System 1 schließen

2.1. LEDs

Die LED auf dem DFPlayer Mini leuchtet, solange Sprache oder Musik spielt. Die LEDs des Core-Boards sind nicht zu sehen, weil das Board kopfüber steckt.

3. Einbau

Die Gosof-Platine hat dieselben Stecker und dieselben Befestigungslöcher wie die originalen Gottlieb-Soundboards. Der Tausch ist in Sekunden erledigt.

Gosof passt für die Gottlieb-Versionen 'export' und 'non export'.

Hinweis: Wenn Sie eine Export-Soundkarte gegen Gosof tauschen und die 'Sprach'-Version wählen, müssen Sie das MPU-ROM tauschen! Spiele mit Export-Soundkarten haben ROMs, die nur 15 verschiedene Sounds abspielen können, das Sprach-Soundboard dagegen bis zu 31.

3.1. System 80 und System 1

Die Platine hat für jedes System einen Stecker, beschriftet mit System80 und System1.

4. DIP-Schalter

4.1. S1: Soundboard-Optionen

Diese DIP-Bank hat dieselbe Funktion wie die DIP-Bank auf Ihrem originalen Soundboard. Sehen Sie dazu im Gottlieb-Handbuch nach.

Bei 'kleinen' Soundboards mit nur zwei DIP-Schaltern nehmen Sie die Schalter 1 und 2 der Bank (meist OFF). Bei 'großen' Soundboards gilt die ganze Bank. Meist müssen DIP 5 und 6 auf ON stehen (Sprache und Hintergrundsound an). DIP 7 und 8 werden nicht benutzt.

4.2. S2: Spielauswahl

Jedes Programm kann mehrere verschiedene Gottlieb-Soundkarten nachbilden. Mit dieser DIP-Bank wählen Sie, welches Spiel nachgebildet wird. Die vollständige Liste steht in Anhang A.

4.3. S3: Optionen

DIP ON OFF
1 CPU-Takt 1020 kHz CPU-Takt 892 kHz
2 Sprache vom DFPlayer Mini (MP3) Sprache aus der Votrax-SC-01-Emulation (nur MA-216-Spiele)
3 'Gottlieb'-Testtaster wirkt wie der Testschalter der Originalplatine 'Gottlieb'-Testtaster spielt die Versionsansage
4 Testmodus, siehe Kapitel 5.3 Normalbetrieb

Mit DIP 1 stellen Sie den CPU-Takt und damit die Tonhöhe ein.

5. Testen

Gosof bietet mehrere Testmöglichkeiten.

5.1. Gosof-Testtaster

Ein Druck auf den 'Gosof'-Testtaster spielt alle möglichen 30 Sounds (15 bei 'kleinen' Soundboards) des eingestellten Spiels.

5.2. Gottlieb-Testtaster

Mit Options-DIP 3 ON wirkt der 'Gottlieb'-Testtaster wie der Testschalter des originalen Soundboards.

Mit Options-DIP 3 OFF spielt er die Versionsansage: "This is Gosof version 7.98 from lisy dot dev". Das geht auch ohne DFPlayer Mini.

5.3. Options-DIP 4: Testmodus

Mit Options-DIP 4 ON spricht der DFPlayer Mini die Nummer des angeforderten Sounds (das Signal von der CPU), statt den Sound zu spielen. Ein Druck auf den 'Gosof'-Testtaster sagt in diesem Modus die Zahlen von 1 bis 31.

5.4. Eingangstest S5

K2 verbindet die fünf Sound-Eingänge von der CPU mit dem Taster S5. Stecken Sie einen Jumper auf einen Platz von K2 und drücken Sie S5, um diesen Eingang ohne CPU-Platine zu aktivieren. D1 leuchtet, solange der Eingang aktiv ist.

6. DFPlayer Mini

Gosof nutzt für Töne aus Dateien ein kleines Modul, den DFPlayer Mini. Die Dateien liegen auf einer normalen Micro-SD-Karte im Player.

Den DFPlayer Mini brauchen Sie für:

Gottlieb-Spiele mit Sprache sind: Mars, Volcano, Black Hole, Devil's Dare, Rocky, Striker, Q*Bert's Quest und Caveman. Das sind die MA-216-Spiele, für die die Votrax-Emulation (Options-DIP 2 OFF) die Sprache auch ohne DFPlayer Mini erzeugen kann.

6.1. Dateien auf der SD-Karte

Eine ZIP-Datei mit allen Sprachdateien gibt es auf lisy.dev. Entpacken Sie das ZIP-Archiv und kopieren Sie den Inhalt auf eine Micro-SD-Karte. Die Sprachordner sehen so aus:

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. FPGA programmieren

Der Konfigurationsflash auf dem Core-Board wird über den Stecker 'Programming' (K1) programmiert. Die aktuelle FPGA-Software liegt auf dem Repository-Server: https://lisy.dev/swrep/soundboards

Sie brauchen:

Programmieren Sie die Datei GOSOF80_HW5.x_v7.98.jic im JTAG-Modus. Schalten Sie danach die Versorgung aus und wieder ein.

Diese Datei enthält keine Spiel-ROMs, weil diese urheberrechtlich geschützt sind. Mit dieser Datei allein blinkt D1 und es kommt kein Ton. Fügen Sie die ROMs wie im nächsten Kapitel beschrieben hinzu.

Weitere Dokumentation auf der Webseite: https://lisy.dev/documentation-01.html

8. Spiel-ROMs

Die ROMs teilen sich den Konfigurationsflash mit dem FPGA-Programm. Sie programmieren deshalb eine .jic-Datei, die beides enthält. Der Flash hat 64 Slots zu je 4 KB, einen für jede Einstellung der DIP-Bank S2.

Das Skript add_roms_to_jic.ps1 kopiert Ihre ROMs in die veröffentlichte .jic und schreibt eine neue. Es läuft auf jedem Windows-PC mit der eingebauten Windows PowerShell. Sie brauchen weder Quartus noch den Quellcode, nur:

Legen Sie alles in einen Ordner, öffnen Sie dort eine Eingabeaufforderung und geben Sie einen dieser Befehle ein:

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

Das Skript schreibt GOSOF80_HW5.x_v7.98_roms.jic und zeigt für jedes Spiel Slot, Soundboard und Reset-Vektor an. Programmieren Sie diese Datei wie in Kapitel 7 beschrieben. Geben Sie sie nicht weiter, sie enthält die ROMs. Die veröffentlichte .jic bleibt unverändert.

Das Skript bricht mit ERROR ab, wenn die .jic beschädigt ist oder nicht zu HW 5.x passt. Es zeigt eine WARNING, wenn eine Datei nicht wie ein Programm für das Soundboard ihres Slots aussieht. Meist liegt die Datei dann im falschen Slot oder ist in der falschen Reihenfolge zusammengesetzt. Prüfen Sie sie anhand von Anhang B, bevor Sie die Platine programmieren.

So sehen Sie, welche Slots einer .jic ein Spiel enthalten:

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

Blinkt D1 nach dem Programmieren, gibt es für das mit S2 gewählte Spiel kein ROM.

Anhang A: Spielauswahl

S1 bis S6 in dieser Tabelle sind die Schalter 1 bis 6 der DIP-Bank S2 auf der Platine. on/off und die Spielnamen sind wie in der englischen Fassung belassen. Die Spiele sind die des GOSOF-SD-Images v1.21, in den Slots, in die add_roms_to_jic.ps1 -Image sie schreibt. Slot = der Slot im Flash, siehe Anhang B. Das Soundboard eines Spiels ergibt sich aus seinem Slot.

S1 S2 S3 S4 S5 S6 Spiel 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

Anhang B: Eigene Slotdateien erstellen

Mit -RomDir nimmt add_roms_to_jic.ps1 je Spiel eine Datei von genau 4096 Byte. Der Dateiname beginnt mit der Slotnummer (00 bis 63), gefolgt von _, -, einem Leerzeichen oder einem Punkt. Dieser Anhang beschreibt, wie Sie eine solche Datei aus den Original-ROMs eines Soundboards bauen. Sie brauchen Ihre eigene Kopie der ROMs. Sie werden mit GOSOF nicht mitgeliefert.

B.1. Der Slot bestimmt das Soundboard

Der Slot ist die Einstellung der DIP-Bank S2: Zählen Sie 1 für S1 ON, 2 für S2 ON, 4 für S3 ON, 8 für S4 ON, 16 für S5 ON und 32 für S6 ON. Der Slot legt auch fest, welches Soundboard GOSOF nachbildet. Davon hängen Adressdekodierung, Interrupts und Eingänge ab, deshalb läuft ein Spiel nur in einem Slot seines eigenen Soundboard-Typs:

Slot Soundboard Spiele im SD-Image v1.21 Freie Slots
0 bis 7 MA-216 (System 80, Sprache) 0 bis 7 keine
8 bis 15 MA-309 (System 80) 8 bis 15 keine
16 bis 31 MA-55 (System 80) 16 bis 28 29 bis 31
32 bis 47 MA-490 (System 80A) 32 bis 42 43 bis 47
48 bis 63 System 1 48 bis 54 55 bis 63

Innerhalb seines Bereichs kann ein Spiel in jeden Slot, mit diesen Ausnahmen:

Eine Datei in einem Slot des falschen Typs startet nicht; das Skript zeigt dann eine WARNING.

B.2. Aufbau der 4-KB-Datei

Das FPGA hat zwei ROMs zu 2 KB. Die ersten 2 KB der Slotdatei kommen in ROM 1, die zweiten 2 KB in ROM 2. Was darin stehen muss, hängt vom Soundboard ab. Als „unbenutzt“ markierte Bereiche werden nie gelesen; füllen Sie sie mit FF.

MA-216 und MA-309 (zwei ROMs zu 2 KB, PinMAME-Namen xxx-s1.snd und xxx-s2.snd):

Offset in der Datei Inhalt CPU-Adresse
0000 bis 07FF xxx-s1.snd 7000 bis 77FF
0800 bis 0FFF xxx-s2.snd 7800 bis 7FFF

MA-55 und System 1 (ein Spiel-ROM mit 1 KB, dazu das 1-KB-ROM im 6530-RRIOT des Soundboards):

Offset in der Datei Inhalt CPU-Adresse
0000 bis 03FF Spiel-ROM, z. B. 652.snd (MA-55) oder 429.snd (System 1) 0400 bis 07FF (und 0800 bis 0BFF)
0400 bis 07FF unbenutzt
0800 bis 0BFF 6530-ROM: 6530sy80.bin für MA-55, 6530sys1.bin für System 1 0C00 bis 0FFF
0C00 bis 0FFF unbenutzt

Das 6530-ROM enthält den Programmstart, es muss also das des richtigen Systems sein.

MA-490 (ein ROM mit 2 KB, z. B. 685-s.snd):

Offset in der Datei Inhalt CPU-Adresse
0000 bis 07FF Spiel-ROM 0800 bis 0FFF
0800 bis 0FFF unbenutzt

B.3. Beispiel

Legen Sie in einer Eingabeaufforderung im Ordner mit den ROM-Dateien zuerst zwei Fülldateien mit 1 KB und 2 KB FF an:

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

Dann setzen Sie die Dateien mit copy /b zusammen. Die Reihenfolge der Teile ist die der Tabellen oben:

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

Jede Datei in roms muss genau 4096 Byte haben. Fügen Sie sie dann wie in Kapitel 8 beschrieben in die .jic ein. Für jedes Spiel zeigt das Skript, wohin der Reset-Vektor des 6502 zeigt. Findet es keinen Programmstart, gibt es eine Warnung aus (die Ausgabe des Skripts ist englisch), zum Beispiel:

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.

Diese Prüfung erkennt einen falschen Slot-Typ und Teile in falscher Reihenfolge. Ob die Datei zu dem gemeinten Spiel gehört, kann sie nicht erkennen. Stellen Sie S2 deshalb nach der Slotnummer im Dateinamen ein.