Williams-MPU mit integrierter Soundplatine auf FPGA-Basis
Hardware-Version v1.0
Software-Version 6.30
Bedienungsanleitung
v1.31 23.10.2026
Deutsche Fassung von WillFA7S_HWv1_x_user_manual.html. Version française : WillFA7S_HWv1_x_manuel_utilisateur.html. Die Kapitelnummern sind in allen drei Fassungen gleich.
Mit WillFA7S kann man seinen Flipper beschädigen. Da dies ein privates Projekt OHNE kommerzielles Interesse ist, übernimmt der Autor keinerlei Haftung für Schäden, die durch die Verwendung von WillFA7S entstehen!
WillFA7S ist ein WillFA7 mit einer Williams-Soundplatine im selben FPGA. Es bildet die Hardware einer Williams-MPU vom Typ SYS3 bis SYS7 mit der auf der Platine integrierten Treiberplatine nach und, auf demselben Chip, einen zweiten vollständigen Rechner: die Williams-Soundplatine Typ 1 / Typ 2 mit eigenem 6802, eigener PIA, eigenen Programm-ROMs, dem DAC und dem CVSD-Sprachdecoder.
Eine Platine ersetzt also MPU, Treiberplatine und Soundplatine.
Das FPGA ist ein Cyclone IV EP4CE10 - größer als das auf den einfachen WillFA7-Platinen, weil die fünf ROMs der Soundplatine den zusätzlichen Speicher brauchen. Alle SYS3..SYS7-Spiele werden unterstützt, einschließlich „Defender“ und „Star Light“.
Alles, was nicht die Soundplatine betrifft, funktioniert genau wie bei einem WillFA7 - der Adressraum, die Schaltermatrix und ihre Entprellung, Spulen, Lampen, Displays, das Einstellungs-EEPROM, die Startphasen. Was hier nicht erwähnt ist, schlagen Sie in der Anleitung zu WillFA7 nach; es gilt unverändert.
Was brauchen Sie?
Die Möglichkeit, micro-SD-Karten zu lesen und zu beschreiben
Einen PC mit USB-Anschluss, um das FPGA programmieren zu können
Zwei Dinge sind von Anfang an anders, bitte lesen Sie sie, bevor Sie beginnen:
Die SD-Karte ist dieselbe, die jeder WillFA7 benutzt. Seit Software-Version x.30 ist das die x.20-Karte der anderen Platinen, mit einem zweiten Bereich hinter den Spielen, der die ROMs der Soundplatine enthält. Nur WillFA7S liest diesen Bereich. Siehe Kapitel 9.
Es gibt eine weitere DIP-Bank, S5 mit vier Schaltern, für die Optionen der Soundplatine. Siehe Kapitel 4.3.
Das aktuelle WillFA7S-SD-Karten-Image und das FPGA-Programm von lisy.dev laden
Das Image auf eine SD-Karte schreiben
Das FPGA programmieren
Die DIP-Bank „Spielauswahl“ passend zu Ihrem Flipper einstellen (Anhang A)
Die Optionen der Soundplatine an S5 einstellen (Kapitel 4.3) - für die meisten Spiele ist alles „OFF“ richtig
Original-MPU, Treiberplatine und Soundplatine von Williams durch WillFA7S ersetzen
Beim ersten Start mit Ihrem Spiel Options-DIP1 auf ON stellen (nvram initialisieren)
Den Automaten einschalten
Das Spiel zeigt die Williams-PROM-Nummer; warten, bis die „Diag-LED“ ausgeht
Den Automaten ausschalten
Den Automaten einschalten
Viel Spaß
WillFA7S hat dieselben Steckverbinder und dieselben Befestigungslöcher wie die originalen Williams-MPUs, der Tausch dauert also Sekunden. Die Platine kommt an die Stelle, an der vorher die Williams-Treiberplatine saß.
Der Audioausgang der integrierten Soundplatine geht an den Verstärker Ihres Automaten. Die originale Soundplatine wird nicht mehr gebraucht und kann draußen bleiben.
Der Anschluss für eine externe Soundplatine führt die Soundbefehle weiterhin, genau wie bei einem WillFA7. Beides funktioniert gleichzeitig: Was das Spiel an die interne Soundplatine schickt, liegt auch an diesem Anschluss an.
Hier stellen Sie ein, welches Spiel WillFA7S ausführen soll. Das hängt von den ROMs auf der SD-Karte ab. Die vollständige Liste steht in Anhang A, den Aufbau der SD-Karte erklärt Kapitel 9.
Wie bei WillFA7, Grundeinstellung alles „OFF“:
| DIP | Funktion |
|---|---|
| Dip1 | nvram initialisieren - beim allerersten Start mit Ihrem Spiel auf ON stellen |
| Dip2/3 | Pulszeit der Spezialspulen: OFF-OFF 60 ms, OFF-ON 50 ms, ON-OFF 40 ms, ON-ON 35 ms |
| Dip4 | Entprellung der Spezialspulen: OFF = 57 µs, ON = 250 µs |
| Dip5 | Entprellung der Schaltermatrix: ON = entprellt, OFF = ungefiltert durchgereicht |
| Dip6 | kein Schutz für Spezialspule 6 (SOL 22), nötig für das Spiel „CONTACT“ |
Die Anleitung zu WillFA7 beschreibt diese Optionen im Einzelnen.
Diese Bank gibt es bei WillFA7 nicht. Sie richtet die Soundplatine ein, so wie es der Schalter DS1 auf einer originalen Williams-Soundplatine tut. Grundeinstellung ist alles „OFF“ - das ist für die meisten Spiele die richtige Einstellung.
„ON“ wählt Glockentöne (Chimes), „OFF“ synthetische Töne. Das ist derselbe Schalter wie Position 1 von DS1 auf der originalen Soundplatine. Was Ihr Spiel braucht, steht in der Anleitung Ihres Flippers; Glocken verwenden die frühen System-3-Spiele.
„ON“ teilt der Soundplatine mit, dass Sprache vorhanden ist, „OFF“, dass nicht. Sprache haben überhaupt nur Soundplatinen vom Typ 2 - die mit den Sprach-ROMs -, also für ein Spiel ohne Sprache auf „OFF“ lassen.
Nicht benutzt, auf „OFF“ lassen.
Bis Software 6.03 wählte dieser Schalter, woher die Soundbefehle kommen, System 3/4 oder System 6/7. Seit 6.22 leitet die Platine das selbst aus der Spielnummer ab, es gibt also nichts mehr einzustellen. Siehe Kapitel 7.2.
Die Platine hat einen Soundtest-Taster. Dieser Schalter legt fest, was ein Druck darauf bewirkt:
„OFF“ - der Taster wirkt als Testtaster der Soundplatine selbst, genau wie der auf einer originalen Williams-Soundplatine. Die Soundplatine spielt ihren eigenen Testton.
„ON“ - der Taster startet den eingebauten Soundtest von WillFA7S, mit dem Sie alle Soundnummern durchgehen und einzeln abspielen können. Siehe Kapitel 7.4.
Das ist die eine Stelle, über die man stolpert. Bei WillFA7S werden die DIP-Schalter genau einmal gelesen, während der Startphase, und danach gehen die Leitungen, an denen sie hängen, an die Schaltermatrix des Spiels zurück. Sie fortlaufend zu lesen würde die Schaltermatrix stören, während das Spiel läuft.
Also: Nach jeder Änderung an einem DIP-Schalter - Spielauswahl, Optionen oder Optionen der Soundplatine - den Automaten aus- und wieder einschalten. Eine Änderung während des Spiels bewirkt nichts.
Direkt nach dem Einschalten des Flippers geht die LED „ON“ an, und auf den Displays Ihres Flippers erscheint Folgendes:
Spieler 1: Version des laufenden FPGA-Programms - bei WillFA7S beginnt sie mit einer 6
Spieler 2: Wert der an S1 gewählten Spielnummer (Spielauswahl)
Spieler 3: Erstellungsdatum des FPGA-Programms
Spieler 4: Startphase
Credit-Anzeige: die Optionsschalter - die linken beiden Stellen sind die Optionen der Soundplatine S5, die rechten beiden die Spieloptionen S2
Die Versionen 6.03 bis 6.2x zeigten auf Spieler 3 und 4 zwei Prüfsummen der Karte. Seit 6.30 trägt die Karte keine Prüfsumme mehr, und die beiden Anzeigen zeigen dasselbe wie bei jedem WillFA7.
Der Optionswert entsteht so: Jeder Schalter auf „ON“ addiert sein Gewicht.
Das ist dieselbe Zählweise wie bei der Spielauswahl S1 in Anhang A: Dip1 ist immer der, der 1 zählt.
Siebenstellige Anzeigen. Spiele, die in Anhang A mit
SYS6A oder SYS7 gekennzeichnet sind, hatten
siebenstellige statt sechsstellige Spieleranzeigen. WillFA7S erkennt das
an der Spielnummer und verschiebt die Startmeldung entsprechend: Der
Text steht rechtsbündig, die linke Stelle jeder Spieleranzeige bleibt
dunkel, und die Optionen behalten ihren Platz auf der Credit-Anzeige.
Dafür muss nichts eingestellt werden.
WillFA7S liest die Karte zweimal: zuerst die 12 KByte Spiel-ROMs, dann die 20 KByte ROMs der Soundplatine. Schlägt das fehl, geht die rote LED „SD card error“ an, und auf Anzeige 4 erscheint „56“.
Die rote LED blinkt außerdem einen Code, der sagt, was schiefgegangen ist. Zählen Sie die Blinker; nach dem letzten kommt eine Pause von etwa 2 Sekunden, dann wiederholt sich die Gruppe.
| Blinker | Bedeutung |
|---|---|
| 1 | die SPI-Übertragung ist hängen geblieben - Kartenkontakte und Verdrahtung prüfen |
| 2 | die Karte antwortet nicht auf den Reset-Befehl |
| 3 | Kartentyp nicht unterstützt, höchstwahrscheinlich eine sehr alte SD-v1-Karte |
| 4 | die Karte hat ihre Initialisierung nie abgeschlossen |
| 5 | von der Karte kamen keine Daten |
| 6 | die Karte hat einen Lesefehler gemeldet |
| 8 | keine SD-Karte, und der FPGA-Flash enthält keine ROMs für dieses Spiel - siehe 5.3 |
Code 7 (Prüfsumme stimmt nicht) gab es nur in den Versionen 6.03 bis 6.2x. Seit 6.30 trägt die Karte keine Prüfsumme.
Neu mit 6.30: Antwortet keine SD-Karte (Codes 1 bis 4 oben), bleibt WillFA7S nicht stehen, sondern liest die Spiel-ROMs und die ROMs der Soundplatine aus dem Flashspeicher, aus dem das FPGA selbst startet. Das dauert etwa 1,3 Sekunden länger, weil die Platine der Karte zuerst ihre Chance gibt.
Der mit der DIP-Bank „Spielauswahl“ gewählte Code wird von der SD-Karte (oder aus dem Flash, siehe 5.3) gelesen und ausgeführt. Läuft der Code (es kommen regelmäßige Display-Strobes), geht die LED „active“ an. Die Soundplatine startet zusammen mit dem Spiel.
Die Spieleinstellungen werden genau wie bei einem WillFA7 und wie bei der Original-MPU vorgenommen; WillFA7S speichert sie in einem seriellen EEPROM, für jedes Spiel getrennt.
Der Ablauf Schritt für Schritt für System 3 und das Bild mit der Lage der Taster stehen in Kapitel 6 der Anleitung zu WillFA7 - die Taster sitzen hier an denselben Stellen.
Ein Unterschied, solange der Soundtest läuft: Der Taster Diag schaltet durch die Soundnummern, statt den Diagnose-Interrupt auszulösen, und Enter spielt den gewählten Sound, statt eine Einstellung zu speichern. Das gilt nur, solange der Soundtest aktiv ist, siehe Kapitel 7.4.
Die Williams-Soundplatinen von System 3 bis System 7, Typ 1 (nur Sound) und Typ 2 (Sound und Sprache). Im FPGA ist das ein vollständiger Nachbau: ein zweiter Prozessor 6802, eine eigene PIA, 128 Byte RAM, fünf Programm-ROMs zu 4 KByte, der DAC für den Sound und ein CVSD-Decoder HC55564 für die Sprache.
Die fünf ROM-Blöcke werden beim Start zusammen mit den Spiel-ROMs von der SD-Karte gefüllt - deshalb ist die Kartenaufteilung eine andere, siehe Kapitel 9.
Williams hat das im Lauf der Jahre unterschiedlich gemacht:
WillFA7S wählt die richtige Quelle automatisch, anhand der Spielnummer, die Sie an S1 einstellen. Es gibt nichts einzustellen. Bis Software 6.03 war das ein DIP-Schalter; seit 6.22 folgt es der Spielnummer, derselben Grundlage, die auch der Speicherschutz verwendet.
Sound und Sprache werden im FPGA gemischt und verlassen die Platine gemeinsam auf einer Leitung, in einem festen Verhältnis 1:1. Das macht das Original auch, nur dort analog: Das Soundsignal geht zum Sprachmodul hinüber, wird über das 5K-Poti R8 mit der Sprache gemischt und kommt zurück. R8 in Mittelstellung ist die 1:1-Mischung, die hier nachgebaut ist.
Ein Spiel kann also gleichzeitig einen Soundeffekt und Sprache abspielen, wie beim Original.
S5-Dip4 auf „ON“ stellen und neu starten. Dann den Soundtest-Taster auf der Platine drücken:
Solange der Soundtest aktiv ist, übernimmt er die Anzeige, und der Diagnose-Interrupt der MPU ist gesperrt, damit der Taster Diag nicht zwei Dinge gleichzeitig tut.
Mit S5-Dip4 auf „OFF“ wirkt derselbe Taster als Testtaster der Soundplatine selbst, genau wie auf einer originalen Williams-Soundplatine.
Fünf Spiele der Liste verwenden eine Belegung der Soundbefehle, die WillFA7S nicht vollständig nachbildet:
World Cup (2), Contact (3), Disco Fever (4), Phoenix (6) und Warlok (25).
Warlok braucht eine sechste Sound-Select-Leitung, die das Original über die Brücke W12 auf der Soundplatine heranführt. WillFA7S baut den Williams-Latch für Sound und Komma so nach, wie er ist, und dieser Latch führt fünf Leitungen - eine sechste gibt es also nicht weiterzugeben.
World Cup, Contact, Disco Fever und Phoenix sind die frühen System-3-Spiele. Sie ordnen ihre Soundbefehle anders an: Eines der fünf Bits liegt auf einem anderen Eingang der Soundplatine, und zwei Eingänge werden auf High gehalten. Auch diese Belegung ist nicht nachgebaut.
In beiden Fällen laufen die Spiele und lassen sich spielen, aber einige ihrer Sounds sind nicht die richtigen.
Alle anderen Spiele der Liste sind nicht betroffen.
Alles, was Sie brauchen, um die Software auf die Platine zu bringen, steht auf meiner Webseite und wird dort aktuell gehalten:
Dort finden Sie:
das aktuelle FPGA-Programm und das aktuelle SD-Karten-Image zum Herunterladen
wie man das Image auf eine SD-Karte schreibt
welche Programmiersoftware Sie brauchen, wie Sie den Treiber für den USB Blaster installieren und wie Sie das FPGA programmieren
Achten Sie darauf, die WillFA7S-Version des FPGA-Programms zu nehmen - sie zeigt eine Version, die mit 6 beginnt. Das SD-Karten-Image ist dasselbe, das alle WillFA7-Platinen verwenden.
Wegen der Grenzen der Leseroutine im FPGA (sie liest feste Sektornummern, statt nach Dateinamen zu suchen) ist mein SD-Karten-Image nötig. Sie können es auf eine SD-Karte Ihrer Wahl schreiben.
Die Karte hat zwei Bereiche, beide mit einem Platz (Slot) je Spielnummer:
Sektor 660 + Spielnummer x 24 12 KByte Spiel-ROMs, 6 x 2K -> die MPU sieht sie ab $5000
Sektor 1428 + Spielnummer x 40 20 KByte ROMs der Soundplatine, 5 x 4K
Der erste Bereich ist genau die Karte der Platinen ohne Soundplatine, ein Image funktioniert also überall; diese Platinen lesen den zweiten Bereich nie. Eine Prüfsumme gibt es nicht (die Versionen 6.03 bis 6.2x hatten Slots zu 64 KByte mit CRC16 - eine solche Karte startet mit 6.30 nicht).
Das SD-Karten-Image hat einen Slot je Spielnummer, ein ROM-Satz lässt sich also austauschen, ohne das FPGA-Programm zu ändern.
Schreiben Sie Ihren ROM-Satz mit einem Sektoreditor an die beiden oben genannten Stellen: 12 KByte Spiel-ROMs in den ersten Bereich, 20 KByte ROMs der Soundplatine in den zweiten. Jeder Teil wird als ein Block gelesen und muss vollständig sein.
Das FPGA startet aus einem 2-MByte-Flashbaustein (EPCS16) auf der Platine. Das FPGA-Programm selbst belegt davon weniger als 400 KByte; ab Adresse 080000h ist Platz für alle 32 Spiele, je 32 KByte - Spiel-ROMs und ROMs der Soundplatine zusammen:
Flash-Adresse 080000h + Spielnummer x 8000h 12 KByte Spiel-ROMs, dann 20 KByte ROMs der Soundplatine
Die ROMs sind urheberrechtlich geschützt und können deshalb nicht Teil des Downloads sein. Sie legen sie selbst hinein, von Ihrer eigenen SD-Karte:
Beschreiben Sie Ihre SD-Karte wie gewohnt mit dem Image (Kapitel 9) und stecken Sie sie in das Kartenlesegerät Ihres PCs.
Die ROM-Datei erzeugen. Im WillFA7-Quellbaum (github.com/bontango/WillFA7) ausführen:
scripts\make_flash_hex.ps1 -SlotFiles <the 32 game files on the card> -SoundFiles <the 32 sound files> -Out variants\s_cyclone_iv_v4\output_files\willfa7_roms.hex
Die Dateien auf der Karte sind nach den Spielen benannt
(hottip, lucky7, ...), die Sounddateien
genauso mit _s am Ende, in der Reihenfolge der
Spielnummern. Alternativ nimmt -Image <image file>
ein vollständiges Image der Karte. Das Skript listet jedes gefundene
Spiel mit seinem Reset-Vektor auf; ein Spiel mit Vektor
FFFF ist leer.
Im Ordner variants\s_cyclone_iv_v4
quartus_cpf -c willfa7_roms.cof ausführen. Das packt
FPGA-Programm und ROMs in eine Datei,
output_files\willfa7_roms.jic.
willfa7_roms.jic mit dem Quartus Programmer statt
der normalen .jic programmieren, mit Haken bei
„Verify“.
Ab jetzt läuft die Platine ohne SD-Karte. Steckt eine Karte, gewinnt immer die Karte - Sie können also weiterhin andere ROMs von einer Karte ausprobieren, ohne den Flash anzufassen.
Behalten Sie diese Datei für sich. Sie enthält die Spiel-ROMs und darf nicht weitergegeben werden.
| Nr. | S1 | S2 | S3 | S4 | S5 | S6 | Typ | Name |
|---|---|---|---|---|---|---|---|---|
| 0 | off | off | off | off | off | off | SYS3 | Hot Tip |
| 1 | on | off | off | off | off | off | SYS3 | Lucky Seven |
| 2 | off | on | off | off | off | off | SYS3 | World Cup * |
| 3 | on | on | off | off | off | off | SYS3 | Contact * |
| 4 | off | off | on | off | off | off | SYS3 | Disco Fever * |
| 5 | on | off | on | off | off | off | SYS4 | Pokerino |
| 6 | off | on | on | off | off | off | SYS4 | Phoenix * |
| 7 | on | on | on | off | off | off | SYS4 | Flash |
| 8 | off | off | off | on | off | off | SYS4 | Stellar Wars |
| 9 | on | off | off | on | off | off | SYS6 | Tri Zone |
| 10 | off | on | off | on | off | off | SYS6 | Time Warp |
| 11 | on | on | off | on | off | off | SYS6 | Gorgar |
| 12 | off | off | on | on | off | off | SYS6 | Laser Ball |
| 13 | on | off | on | on | off | off | SYS6 | Firepower |
| 14 | off | on | on | on | off | off | SYS6 | Blackout |
| 15 | on | on | on | on | off | off | SYS6 | Scorpion |
| 16 | off | off | off | off | on | off | SYS6A | Algar |
| 17 | on | off | off | off | on | off | SYS6A | Alien Poker |
| 18 | off | on | off | off | on | off | SYS7 | Black Knight |
| 19 | on | on | off | off | on | off | SYS7 | Jungle Lord |
| 20 | off | off | on | off | on | off | SYS7 | Pharaoh |
| 21 | on | off | on | off | on | off | SYS7 | Solar Fire |
| 22 | off | on | on | off | on | off | SYS7 | Barracora |
| 23 | on | on | on | off | on | off | SYS7 | Cosmic Gunfight |
| 24 | off | off | off | on | on | off | SYS7 | Varkon |
| 25 | on | off | off | on | on | off | SYS7 | Warlok * |
| 26 | off | on | off | on | on | off | SYS7 | Time Fantasy |
| 27 | on | on | off | on | on | off | SYS7 | Joust |
| 28 | off | off | on | on | on | off | SYS7 | Firepower II |
| 29 | on | off | on | on | on | off | SYS7 | Laser Cue |
| 30 | off | on | on | on | on | off | SYS7 | Defender |
| 31 | on | on | on | on | on | off | SYS7 | Star Light |
(*) die Soundunterstützung ist bei diesen Spielen unvollständig, siehe Kapitel 7.5
Die Spalte Typ sagt auch, mit welchen
Spieleranzeigen das Spiel kam: SYS3, SYS4 und
SYS6 sind sechsstellig, SYS6A (Algar und Alien
Poker) und SYS7 sind siebenstellig. Danach richtet WillFA7S
seine Startmeldung aus, siehe Kapitel 5.1. on = Schalter auf ON.