WillFA7

Williams-MPU auf FPGA-Basis

Hardware-Version v1.3

Software-Version x.30

Bedienungsanleitung

ralf@lisy.dev

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.

Inhaltsverzeichnis

Wichtiger Hinweis

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!

1. Einführung

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?

2. Schnellstart

  1. Die aktuellen Versionen des SD-Karten-Images und des FPGA-Programms von lisy.dev laden

  2. Das Image auf eine SD-Karte schreiben

  3. Das FPGA programmieren

  4. Die DIP-Bank „Spielauswahl“ passend zu Ihrem Flipper einstellen (Anhang A)

  5. Original-MPU und Treiberplatine von Williams durch WillFA7 ersetzen

  6. Beim ersten Start mit Ihrem Spiel Options-DIP1 auf ON stellen (nvram initialisieren)

    1. Den Automaten einschalten

    2. Das Spiel zeigt die Williams-PROM-Nummer; warten, bis die „Diag-LED“ ausgeht

    3. Den Automaten ausschalten

  7. Den Automaten einschalten

  8. Viel Spaß

3. Einbau

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ß.

4. DIP-Schalter-Einstellungen

4.1. DIP-Bank S1: Spielauswahl

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.

4.2. DIP-Bank S2: Optionen

Grundeinstellung ist alles „OFF“.

4.2.1. S2-Dip1 -> nvram initialisieren

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.

4.2.2. S2-Dip2 & Dip3 Pulszeit

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

4.2.3. S2-Dip4 -> Entprellung der Spezialspulen

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“.

4.2.4. S2-Dip5 -> Entprellung der Schaltermatrix

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“.

4.2.5. S2-Dip6 kein Schutz für Spezialspule 6 (SOL 22)

Nötig für das Spiel „CONTACT“, weil Spezialspule 6 dort dauerhaft angesteuert werden muss (Relais des beweglichen Ziels), Pin 9 an 2P12.

5. Startvorgang

5.1. Phase 1: Startmeldung

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.

5.2. Phase 2: SD-Karte lesen

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.

5.3. Betrieb ohne SD-Karte

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.

5.4. Phase 3: das Spiel läuft an

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.

6. Spieleinstellungen

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.

6.1. System3

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!

6.2. System4

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“.

6.3. System6

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.

6.4. System7

SYS7-Spiele werden genauso wie SYS6 über die Münztür eingestellt, siehe oben, nach der Anleitung Ihres Flippers.

7. Software, SD-Karten-Image und das FPGA programmieren

Alles, was Sie brauchen, um die Software auf die Platine zu bringen, steht auf meiner Webseite und wird dort aktuell gehalten:

https://lisy.dev/documentation-01.html

Dort finden Sie:

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.

8. Aufbau der SD-Karte

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.

8.1. Das WillFA7-Image

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.

8.2. Eigene ROMs verwenden

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.

9. Spiel-ROMs im FPGA-Flash

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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

10. Platinenvarianten

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.

Anhang A Spielauswahl

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.