Gottlieb Soundboard on FPGA
HW 5.x / SW 7.98
Bedienungsanleitung
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.
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!
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:
| 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 |
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.
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.
Die Platine hat für jedes System einen Stecker, beschriftet mit System80 und System1.
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.
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.
| 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.
Gosof bietet mehrere Testmöglichkeiten.
Ein Druck auf den 'Gosof'-Testtaster spielt alle möglichen 30 Sounds (15 bei 'kleinen' Soundboards) des eingestellten Spiels.
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.
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.
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.
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.
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)
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
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:
.jic, z. B.
GOSOF80_HW5.x_v7.98.jicadd_roms_to_jic.ps1, das neben der .jic
auf https://lisy.dev/swrep/soundboards
liegt (und im Ordner scripts von https://github.com/bontango/Gosof80)Gosof_Image_v1.21.img) oder
als eine 4-KB-Datei je Spiel, aufgebaut wie in Anhang B
beschriebenLegen 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
-Image übernimmt alle Spiele des SD-Karten-Images. Ihre
Slots stehen in Anhang A.-RomDir übernimmt die Slotdateien im Ordner
roms. Jeder Dateiname beginnt mit der Slotnummer, z. B.
00_mars.bin oder 24_pinkpanther.bin. Dateien
mit anderen Namen werden ignoriert.-RomDir ersetzen dann die Spiele aus dem Image.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.
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 |
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.
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.
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 |
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.