Gottlieb Soundboard on FPGA
HW 5.x / SW 7.98
manuel d'utilisation
v1.01 04.11.2026
Version française de GOSOF_HW5x_user_manual.html. Deutsche Fassung: GOSOF_HW5x_Bedienungsanleitung.html. La numérotation des chapitres est la même dans les trois versions.
L'utilisation de GOSOF peut endommager votre flipper. Comme il s'agit d'un projet privé SANS intérêt commercial, l'auteur décline toute responsabilité pour les dommages pouvant résulter de l'utilisation de GOSOF !
GOSOF est un projet 100 % amateur : un remplacement des cartes son Gottlieb System 1 et System 80, construit autour d'un FPGA qui exécute les ROM son d'origine.
La version 5 diffère des cartes précédentes sur deux points :
| Élément | Fonction |
|---|---|
| S1 (8 pôles) | options de la carte son |
| S2 (6 pôles) | choix du jeu |
| S3 (4 pôles) | options |
| TEST Gosof | test des sons |
| TEST Gottlieb | interrupteur de test de la carte d'origine, ou annonce de version |
| S5 / K2 | test des entrées |
| D1, D2 | LED |
| R1 | volume de la voix |
| R5 | volume du son |
| Audio1 | DFPlayer Mini |
| K1 | connecteur de programmation (JTAG) |
| K5 | 5 cavaliers, à fermer pour System 1 |
La LED du DFPlayer Mini s'allume pendant la lecture de voix ou de musique. Les LED de la carte core ne sont pas visibles, car la carte est montée à l'envers.
La carte Gosof a les mêmes connecteurs et les mêmes trous de fixation que les cartes son Gottlieb d'origine. Le remplacement se fait en quelques secondes.
Gosof convient aux versions Gottlieb 'export' et 'non export'.
Remarque : si vous remplacez une carte son de version export par Gosof et choisissez la version 'voix', vous devez remplacer la ROM de la MPU ! Les jeux équipés de cartes son export ont des ROM qui ne peuvent jouer que 15 sons différents, alors que la carte son avec voix peut en jouer jusqu'à 31.
La carte a un connecteur pour chaque système, marqués System80 et System1.
Ce banc DIP a la même fonction que le banc DIP de votre carte son d'origine. Consultez votre manuel Gottlieb.
Pour les 'petites' cartes son qui n'ont que deux interrupteurs DIP, utilisez les interrupteurs 1 et 2 du banc (en général OFF). Pour les 'grandes' cartes son, c'est le banc complet. En général, il faut mettre les DIP 5 et 6 sur ON (voix et son de fond activés). Les DIP 7 et 8 ne sont pas utilisés.
Chaque programme peut émuler plusieurs cartes son Gottlieb différentes. Avec ce banc DIP, vous choisissez le jeu émulé. La liste complète se trouve à l'annexe A.
| DIP | ON | OFF |
|---|---|---|
| 1 | horloge CPU 1020 kHz | horloge CPU 892 kHz |
| 2 | voix depuis le DFPlayer Mini (MP3) | voix depuis l'émulation Votrax SC-01 (jeux MA-216 seulement) |
| 3 | le bouton de test 'Gottlieb' agit comme l'interrupteur de test de la carte d'origine | le bouton de test 'Gottlieb' joue l'annonce de version |
| 4 | mode test, voir le chapitre 5.3 | fonctionnement normal |
Le DIP 1 règle l'horloge du CPU et donc la hauteur des sons.
Gosof offre plusieurs possibilités de test.
Un appui sur le bouton de test 'Gosof' joue les 30 sons possibles (15 pour les 'petites' cartes son) du jeu configuré.
Avec le DIP d'option 3 sur ON, le bouton de test 'Gottlieb' agit comme l'interrupteur de test de la carte son d'origine.
Avec le DIP d'option 3 sur OFF, il joue l'annonce de version : "This is Gosof version 7.98 from lisy dot dev". Cela fonctionne aussi sans DFPlayer Mini.
Avec le DIP d'option 4 sur ON, le DFPlayer Mini prononce le numéro du son demandé (le signal venant du CPU) au lieu de jouer le son. Un appui sur le bouton de test 'Gosof' dans ce mode énonce les nombres de 1 à 31.
K2 relie les cinq entrées son venant du CPU au bouton S5. Placez un cavalier sur une position de K2 et appuyez sur S5 pour activer cette entrée, sans la carte CPU. D1 s'allume tant que l'entrée est active.
Gosof utilise un petit module, le DFPlayer Mini, pour les sons provenant de fichiers. Les fichiers sont stockés sur une carte micro SD standard dans le lecteur.
Le DFPlayer Mini est nécessaire pour :
Les jeux Gottlieb avec voix sont : Mars, Volcano, Black Hole, Devil's Dare, Rocky, Striker, Q*Bert's Quest et Caveman. Ce sont les jeux MA-216, pour lesquels l'émulation Votrax (DIP d'option 2 sur OFF) peut produire la voix sans DFPlayer Mini.
Un fichier ZIP contenant toutes les voix est disponible sur lisy.dev. Décompressez l'archive ZIP et copiez son contenu sur une carte micro SD. Les dossiers de voix se présentent ainsi :
10 - Mars
12 - Volcano
14 - Black Hole
18 - Devils Dare
20 - Rocky
23 - Striker
25 - Q*Bert's Quest
63 - Caveman
64 - Test (numbers)
La flash de configuration de la carte core se programme par le connecteur marqué 'Programming' (K1). Le logiciel FPGA actuel se trouve sur le serveur de dépôt : https://lisy.dev/swrep/soundboards
Il vous faut :
Programmez le fichier GOSOF80_HW5.x_v7.98.jic en mode
JTAG. Après la programmation, coupez puis rétablissez
l'alimentation.
Ce fichier ne contient aucune ROM de jeu, car elles sont protégées par le droit d'auteur. Avec ce seul fichier, D1 clignote et il n'y a pas de son. Ajoutez les ROM comme décrit au chapitre suivant.
Consultez la documentation sur le site web : https://lisy.dev/documentation-01.html
Les ROM partagent la flash de configuration avec le programme FPGA ;
vous programmez donc un seul fichier .jic qui contient les
deux. La flash compte 64 slots de 4 Ko, un pour chaque réglage du banc
DIP S2.
Le script add_roms_to_jic.ps1 copie vos ROM dans le
.jic publié et en écrit un nouveau. Il fonctionne sur tout
PC Windows avec le Windows PowerShell intégré. Vous n'avez besoin ni de
Quartus ni du code source, seulement :
.jic publié, par exemple
GOSOF80_HW5.x_v7.98.jicadd_roms_to_jic.ps1, qui se trouve à côté du
.jic sur https://lisy.dev/swrep/soundboards
(et dans le dossier scripts de https://github.com/bontango/Gosof80)Gosof_Image_v1.21.img), soit sous forme d'un fichier de 4
Ko par jeu, construit comme décrit à l'annexe BPlacez le tout dans un même dossier, ouvrez-y une invite de commandes et tapez l'une de ces commandes :
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 reprend tous les jeux de l'image de carte SD.
Leurs slots sont indiqués à l'annexe
A.-RomDir reprend les fichiers de slot du dossier
roms. Chaque nom de fichier commence par le numéro de slot,
par exemple 00_mars.bin ou 24_pinkpanther.bin.
Les fichiers portant d'autres noms sont ignorés.-RomDir remplacent alors les jeux de l'image.Le script écrit GOSOF80_HW5.x_v7.98_roms.jic et affiche
pour chaque jeu le slot, la carte son et le vecteur de reset. Programmez
ce fichier comme décrit au chapitre 7. Ne le diffusez pas, car il
contient les ROM. Le .jic publié reste inchangé.
Le script s'arrête avec ERROR si le .jic
est endommagé ou ne correspond pas à HW 5.x. Il affiche un
WARNING si un fichier ne ressemble pas à un programme pour
la carte son de son slot. En général, le fichier est alors dans le
mauvais slot ou a été assemblé dans le mauvais ordre. Vérifiez-le à
l'aide de l'annexe B avant de programmer la carte.
Pour voir quels slots d'un .jic contiennent un jeu :
powershell -ExecutionPolicy Bypass -File add_roms_to_jic.ps1 -Jic GOSOF80_HW5.x_v7.98_roms.jic -List
Si D1 clignote après la programmation, il n'y a pas de ROM pour le jeu choisi sur S2.
S1 à S6 dans ce tableau sont les interrupteurs 1 à 6 du banc DIP
S2 de la carte. on/off et les
noms des jeux sont repris tels quels de la version anglaise. Les jeux
sont ceux de l'image de carte SD GOSOF v1.21, dans les slots où
add_roms_to_jic.ps1 -Image les place. Slot = le slot dans
la flash, voir l'annexe B. La
carte son d'un jeu découle de son slot.
| S1 | S2 | S3 | S4 | S5 | S6 | Jeu | 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 |
Avec -RomDir, add_roms_to_jic.ps1 prend un
fichier d'exactement 4096 octets par jeu. Le nom du fichier commence par
le numéro de slot (00 à 63), suivi de
_, -, d'une espace ou d'un point. Cette annexe
explique comment construire un tel fichier à partir des ROM d'origine
d'une carte son. Il vous faut votre propre copie des ROM. Elles ne sont
pas fournies avec GOSOF.
Le slot est le réglage du banc DIP S2 : comptez 1 pour S1 sur ON, 2 pour S2 sur ON, 4 pour S3 sur ON, 8 pour S4 sur ON, 16 pour S5 sur ON et 32 pour S6 sur ON. Le slot indique aussi à GOSOF quelle carte son émuler. Cela détermine le décodage d'adresses, les interruptions et les entrées ; un jeu ne fonctionne donc que dans un slot de son propre type de carte son :
| Slot | Carte son | Jeux de l'image SD v1.21 | Slots libres |
|---|---|---|---|
| 0 à 7 | MA-216 (System 80, voix) | 0 à 7 | aucun |
| 8 à 15 | MA-309 (System 80) | 8 à 15 | aucun |
| 16 à 31 | MA-55 (System 80) | 16 à 28 | 29 à 31 |
| 32 à 47 | MA-490 (System 80A) | 32 à 42 | 43 à 47 |
| 48 à 63 | System 1 | 48 à 54 | 55 à 63 |
Dans sa plage, un jeu peut aller dans n'importe quel slot, avec ces exceptions :
Un fichier placé dans un slot du mauvais type ne démarre pas ; le
script affiche alors un WARNING.
Le FPGA possède deux ROM de 2 Ko. Les 2 premiers Ko du fichier de slot vont dans la ROM 1, les 2 Ko suivants dans la ROM 2. Leur contenu dépend de la carte son. Les zones marquées « inutilisé » ne sont jamais lues ; remplissez-les avec FF.
MA-216 et MA-309 (deux ROM de 2 Ko, noms PinMAME
xxx-s1.snd et xxx-s2.snd) :
| Offset dans le fichier | Contenu | Adresse CPU |
|---|---|---|
| 0000 à 07FF | xxx-s1.snd |
7000 à 77FF |
| 0800 à 0FFF | xxx-s2.snd |
7800 à 7FFF |
MA-55 et System 1 (une ROM de jeu de 1 Ko, plus la ROM de 1 Ko intégrée au 6530 RRIOT de la carte son) :
| Offset dans le fichier | Contenu | Adresse CPU |
|---|---|---|
| 0000 à 03FF | ROM du jeu, par exemple 652.snd (MA-55) ou
429.snd (System 1) |
0400 à 07FF (et 0800 à 0BFF) |
| 0400 à 07FF | inutilisé | |
| 0800 à 0BFF | ROM 6530 : 6530sy80.bin pour MA-55,
6530sys1.bin pour System 1 |
0C00 à 0FFF |
| 0C00 à 0FFF | inutilisé |
La ROM 6530 contient le début du programme ; elle doit donc être celle du bon système.
MA-490 (une ROM de 2 Ko, par exemple
685-s.snd) :
| Offset dans le fichier | Contenu | Adresse CPU |
|---|---|---|
| 0000 à 07FF | ROM du jeu | 0800 à 0FFF |
| 0800 à 0FFF | inutilisé |
Dans une invite de commandes ouverte dans le dossier des fichiers ROM, créez d'abord deux fichiers de remplissage de 1 Ko et 2 Ko contenant FF :
powershell -Command "[IO.File]::WriteAllBytes('ff1k', [byte[]](,0xFF * 1024))"
powershell -Command "[IO.File]::WriteAllBytes('ff2k', [byte[]](,0xFF * 2048))"
mkdir roms
Assemblez ensuite les fichiers avec copy /b. L'ordre des
parties est celui des tableaux ci-dessus :
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
Chaque fichier de roms doit faire exactement 4096
octets. Ajoutez-les ensuite au .jic comme décrit au
chapitre 8. Pour chaque jeu, le script
indique où pointe le vecteur de reset du 6502. S'il ne trouve pas de
début de programme, il affiche un avertissement (les messages du script
sont en anglais), par exemple :
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.
Ce contrôle détecte un mauvais type de slot et des parties dans le mauvais ordre. Il ne peut pas savoir si le fichier appartient au jeu voulu ; réglez donc S2 d'après le numéro de slot du nom de fichier.