Williams-MPU auf FPGA-Basis
Hardware-Version v1.3
Software-Version x.30
Bedienungsanleitung
v1.31 23.10.2026
Deutsche Fassung von WillFA7_HWv1_x_user_manual.html. Version française : WillFA7_HWv1_x_manuel_utilisateur.html. Die Kapitelnummern sind in allen drei Fassungen gleich.
Mit WillFA7 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 WillFA7 entstehen!
WillFA7 benutzt ein (günstiges) FPGA, das die Hardware einer Williams-MPU vom Typ SYS3 bis SYS7 nachbildet; die Treiberplatine ist auf der Platine integriert.
Hinweis: Die Spiele „Defender“ und „Star Light“ werden auf der „Standard“-Platine mit Cyclone II nicht unterstützt. Dafür brauchen Sie meine Cyclone-IV-Platine. Mit der Cyclone-IV-Platine werden alle SYS3..SYS7-Spiele unterstützt.
Hinweis: Wenn Sie auch die Soundplatine ersetzen wollen, schauen Sie sich WillFA7S an. Das ist dieselbe MPU mit einer Williams-Soundplatine im selben FPGA, und sie hat eine eigene Anleitung.
Neu mit Software x.30: Die Platine läuft auch ohne SD-Karte, mit den Spiel-ROMs im Flashspeicher der FPGA-Platine (Kapitel 5.3 und 9).
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
Die aktuellen Versionen des SD-Karten-Images und des FPGA-Programms 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)
Original-MPU und Treiberplatine von Williams durch WillFA7 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ß
WillFA7-Platinen haben 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ß.
Hier stellen Sie ein, welches Spiel WillFA7 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 8.
Grundeinstellung ist alles „OFF“.
Mit Dip1 auf „ON“ setzt WillFA7 beim Start das nvram des gewählten Spiels auf Null. Das ist nützlich, wenn Sie den GESAMTEN RAM-Inhalt zurücksetzen wollen, und beim allerersten Start mit Ihrem Spiel.
Mit DIP2 und DIP3 lässt sich die Pulszeit der Spezialspulen einstellen. In der Grundeinstellung (beide OFF) beträgt sie 60 ms, was zum Originalspiel passen sollte. Möglich sind:
OFF – OFF 60 ms
OFF – ON 50 ms
ON – OFF 40 ms
ON – ON 35 ms
Die Auslöseeingänge der Spezialspulen werden im FPGA entprellt. Mit DIP4 auf „OFF“ beträgt der Filter 57 µs, mit DIP4 auf „ON“ 250 µs. Grundeinstellung ist „OFF“.
Mit DIP5 auf „ON“ werden die Rückleitungen der Schaltermatrix im FPGA entprellt. Mit DIP5 auf „OFF“ werden sie ungefiltert durchgereicht, so wie bei Software x.17 und älter. Grundeinstellung ist „OFF“.
Nötig für das Spiel „CONTACT“, weil Spezialspule 6 dort dauerhaft angesteuert werden muss (Relais des beweglichen Ziels), Pin 9 an 2P12.
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
Spieler 2: Wert der an S1 gewählten Spielnummer (Spielauswahl)
Spieler 3: Erstellungsdatum des FPGA-Programms
Spieler 4: Startphase
Credit-Anzeige: Wert der Optionsschalter S2 (Spieloptionen)
Die Versionen .22 bis .2x zeigten auf Spieler 3 und 4 zwei Prüfsummen der Karte. Seit x.30 trägt die Karte keine Prüfsumme mehr, und die beiden Anzeigen zeigen wieder Erstellungsdatum und Startphase.
Siebenstellige Anzeigen. Spiele, die in Anhang A mit
SYS6A oder SYS7 gekennzeichnet sind, hatten
siebenstellige statt sechsstellige Spieleranzeigen. WillFA7 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.
WillFA7 versucht, den Inhalt der SD-Karte zu lesen. 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 .22 bis .2x. Seit x.30 trägt die Karte keine Prüfsumme mehr.
Neu mit x.30: Antwortet keine SD-Karte (Codes 1 bis 4 oben), bleibt WillFA7 nicht stehen, sondern liest die Spiel-ROMs 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.
Grundsätzlich werden die Spieleinstellungen genauso vorgenommen wie mit der Original-MPU. WillFA7 speichert die Spieleinstellungen in einem seriellen EEPROM, für jedes Spiel getrennt. Wegen der anderen Platinenaufteilung gibt es kleine Unterschiede, die unten beschrieben sind.
WillFA7 hat nur eine Diagnose-LED, bietet aber die Taster Data, Enter, Diagnostic und Function mit derselben Funktion wie auf der Originalplatine. Wo sie auf der WillFA7-Platine sitzen, zeigt das Bild unten. Für die Einstellungen schauen Sie in die Anleitung Ihres Williams-Flippers.
Einstellen bei SYS3 mit WillFA7:
Einen „frischen“ Start machen (den Automaten aus- und wieder einschalten)
Den Taster „Diag“ auf WillFA7 drücken, die LED daneben blinkt zweimal
In Tabelle 1 der Spielanleitung nachsehen, welche Funktion geändert werden soll
Den unteren Schalter auf die zu ändernde Funktion stellen
(z. B. Funktion 19 „Maximum Tilts“, indem Dip 4, 7 und 8 auf ON gestellt werden)
Den oberen Schalter auf den zu speichernden Wert stellen
(z. B. auf 1, indem DIP 8 auf ON gestellt wird (Grundeinstellung ist 3))
Zum Speichern „Enter“ drücken; die LED daneben blinkt zur Bestätigung, dass die Änderung übernommen wurde.
Die Werte lassen sich mit „Advance“ in der Münztür prüfen
Die Statusanzeige zeigt „1804“, um anzuzeigen, dass Sie in „Test 4“ sind, und auf der Anzeige von Spieler 1 lässt sich
der Wert für „Readout No.“ 18 (bisheriger Highscore) ablesen
Mit erneutem Druck auf Advance gehen Sie durch die verschiedenen Readouts.
Nach Readout 23 geht es wieder mit Readout 1 (Replay 1) los. Die vollständige Liste steht in Ihrer Spielanleitung!
Einstellungen für SYS4-Spiele werden genauso vorgenommen wie mit der Original-MPU, mit den Tastern Data, Enter, Diagnostic und Function auf der Platine. Wo sie sitzen, zeigt das Bild im Kapitel „System3“.
Ab SYS6 werden die Einstellungen über die Münztür vorgenommen, mit dem Taster Advance und dem Schalter Auto/Manual, genau wie in der Anleitung Ihres Flippers beschrieben. WillFA7 gibt beide Signale genauso an die nachgebildete MPU weiter wie die Originalplatine, der Ablauf ist also unverändert.
SYS7-Spiele werden genauso wie SYS6 über die Münztür eingestellt, siehe oben, nach der Anleitung Ihres Flippers.
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
Das waren früher zwei Kapitel dieser Anleitung. Sie sind auf die Webseite gewandert, weil sich die Download-Links, die Werkzeugversionen und die Download-Seiten von Intel viel öfter ändern als diese Anleitung.
Achten Sie darauf, das FPGA-Programm für Ihre FPGA-Platine zu nehmen - siehe Kapitel 10.
Wegen der Grenzen der Leseroutine im FPGA (sie liest feste Sektornummern, statt nach Dateinamen zu suchen) ist mein SD-Karten-Image (128 MByte) nötig. Sie können es auf eine SD-Karte Ihrer Wahl schreiben.
Steht die Spielauswahl ganz auf „0“, liest WillFA7 das erste ROM-Image ab Sektor 660. Bei meinem 128-MB-WillFA7-Image ist das die Lage der ersten Datei, die man auf eine leere SD-Karte schreibt.
Mein WillFA7-SD-Karten-Image enthält fast alle verfügbaren ROMs. Die Spielliste steht in Anhang A.
Wichtig beim Aktualisieren: Seit Version x.30 verwendet jede Platine wieder die x.20-Karte (12 KByte pro Spiel) - Cyclone II eingeschlossen. Eine Karte, die mit einem x.20-Programm für Cyclone IV lief, läuft unverändert. Eine für .22 erstellte Karte läuft nicht: Schreiben Sie das aktuelle Image.
Das aktuelle Image hat hinter den Spielen einen zweiten Bereich mit den Soundplatinen-ROMs von WillFA7S. Platinen ohne Soundplatine lesen ihn einfach nie.
Das SD-Karten-Image hat einen Platz (Slot) je Spielnummer, ein ROM-Satz lässt sich also austauschen, ohne das FPGA-Programm zu ändern.
Jeder Slot umfasst 24 Sektoren zu 512 Byte, also 12 KByte, und der erste Slot beginnt bei Sektor 660. Der Slot eines Spiels beginnt deshalb bei Sektor 660 + Spielnummer x 24; die Spielnummer ist der an Schalter S1 eingestellte Wert (siehe Anhang A).
| Offset im Slot | Größe | Inhalt |
|---|---|---|
| 0x0000 - 0x2FFF | 12 KByte | Spiel-ROMs, 6 x 2K, von der MPU ab $5000 gesehen |
Die Soundplatinen-ROMs (nur WillFA7S) sind ein eigener Bereich: 40 Sektoren = 20 KByte pro Spiel ab Sektor 1428 + Spielnummer x 40.
Schreiben Sie Ihren ROM-Satz mit einem Sektoreditor an diese Stelle. Er wird als ein Block gelesen und muss vollständig sein. Platinen mit Cyclone IV oder Cyclone 10 nutzen alle 12 KByte Spiel-ROM; Platinen mit Cyclone II haben einen ROM-Block weniger und überspringen die ersten 2 KByte, deshalb laufen die Spiele, die die vollen 12 KByte brauchen (Defender, Star Light), dort nicht. Eine Prüfsumme muss nicht angepasst werden.
Neu mit Software x.30. Das FPGA startet aus einem Flashbaustein auf der FPGA-Platine, und der Platz hinter dem FPGA-Programm reicht für die Spiel-ROMs aller 32 Spiele. Eine Platine mit ROMs im Flash läuft ohne SD-Karte (Kapitel 5.3).
| Platine | Flash | Aufteilung |
|---|---|---|
| Cyclone IV, Cyclone 10, dev_open (2.30 .. 5.30) | EPCS16, 2 MByte | ab 080000h, 32 KByte pro Spiel: 12 KByte Spiel-ROMs, dann die 20 KByte Soundplatinen-ROMs von WillFA7S. Eine Platine ohne Soundplatine liest nur die ersten 12 KByte |
| Cyclone II (1.30) | EPCS4, 512 KByte | ab 030000h, 10 KByte pro Spiel (ein ROM-Block weniger, wie auf der SD-Karte), 32 Spiele bis zum Ende des Flashs. Defender und Star Light laufen hier nicht |
EPCS16 Flash-Adresse 080000h + Spielnummer x 8000h
EPCS4 Flash-Adresse 030000h + Spielnummer x 2800h (Cyclone II)
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 8) und behalten Sie die Image-Datei, oder stecken Sie die Karte in das Kartenlesegerät Ihres PCs.
Die ROM-Datei erzeugen. Im WillFA7-Quellbaum (github.com/bontango/WillFA7) ausführen:
scripts\make_flash_hex.ps1 -Image <image file> -Out variants\<variant>\output_files\willfa7_roms.hex
Für die Cyclone-II-Platine -CycloneII anhängen; das
schreibt die kompakte Aufteilung. Statt -Image nimmt
-SlotFiles die 32 Spieldateien der Karte (benannt nach den
Spielen: hottip, lucky7, ...), in der
Reihenfolge der Spielnummern. Das Skript listet jedes gefundene Spiel
mit seinem Reset-Vektor auf; ein Spiel mit Vektor FFFF ist
leer.
Im Ordner variants\<variant>
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 Datei programmieren, mit Haken bei „Verify“. Auf
der Cyclone-II-Platine ist das ebenfalls eine
.jic, programmiert über JTAG, nicht die übliche
.pof.
Die Variantennamen stehen in Kapitel 10. 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.
Teststand: Der Start aus dem Flash ohne SD-Karte ist auf der Cyclone-II-Platine (1.30) bestätigt. Auf den anderen Platinen wurde der Flash-Rückfall noch nicht in Hardware ausprobiert.
Dasselbe Design läuft auf mehreren FPGA-Platinen, und das FPGA-Programm ist zwischen ihnen nicht austauschbar - die Pinbelegung ist verschieden. Die erste Ziffer der Version auf Spieler-Anzeige 1 beim Start zeigt, welches Programm läuft.
| Version | FPGA-Platine | Release-Datei x.30 | Variante (Quellbaum) |
|---|---|---|---|
| 1.30 | Cyclone II (EP2C5) - „Standard“-Platine | Cyclone_II/WillFA7_v130.pof |
cyclone_ii |
| 2.30 | Cyclone IV v3.x (EP4CE6F17) | Cyclone_IV/FPGA_board_v3.x/willfa7_v230.jic |
cyclone_iv_v3 |
| 3.30 | Cyclone IV v4.x (EP4CE6E22) | Cyclone_IV/FPGA_board_v4.x/willfa7_v330.jic |
cyclone_iv_v4 |
| 4.30 | Cyclone 10 (10CL006) | cyclone_10/willfa7_v430.jic |
cyclone_10 |
| 5.30 | dev_open-Platine mit Cyclone IV (EP4CE6E22) | dev_open/willfa7_v530.jic |
cyclone_iv_dev_open |
| 6.30 | WillFA7S mit Soundplatine - siehe die Anleitung zu WillFA7S | WillFA7S/willfa7_v630.jic |
s_cyclone_iv_v4 |
Die Spiele 30 und 31 (Defender, Star Light) brauchen alle sechs ROM-Blöcke und laufen deshalb nicht auf der Cyclone-II-Platine.
| 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 * |
(*) Cyclone-IV-Platine und SD-Image nötig
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 WillFA7
seine Startmeldung aus, siehe Kapitel 5.1. on = Schalter auf ON.