GOSOF

Gottlieb Soundboard on FPGA

HW 5.x / SW 7.98

manuel d'utilisation

ralf@lisy.dev

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.

Sommaire

Remarque importante

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 !

1. Introduction

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 :

2. Carte

Carte GOSOF v5.00, complète, avec la carte core montée à l'envers
É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

2.1. LED

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.

3. Installation

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.

3.1. System 80 et System 1

La carte a un connecteur pour chaque système, marqués System80 et System1.

4. Réglage des DIP

4.1. S1 : options de la carte son

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.

4.2. S2 : choix du jeu

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.

4.3. S3 : options

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.

5. Tests

Gosof offre plusieurs possibilités de test.

5.1. Bouton de test Gosof

Un appui sur le bouton de test 'Gosof' joue les 30 sons possibles (15 pour les 'petites' cartes son) du jeu configuré.

5.2. Bouton de test Gottlieb

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.

5.3. DIP d'option 4 : mode test

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.

5.4. Test des entrées S5

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.

6. DFPlayer Mini

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.

6.1. Fichiers sur la carte SD

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)

7. Programmation du FPGA

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

8. ROM des jeux

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 :

Placez 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

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.

Annexe A : choix du jeu

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

Annexe B : créer vos propres fichiers de slot

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.

B.1. Le slot détermine la carte son

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.

B.2. Structure du fichier de 4 Ko

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é

B.3. Exemple

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.