c't 19/2023
S. 150
Praxis
FPGA-Projekt MiSTer

Konsolen-Kloner

FPGA-Projekt MiSTer mit Retro-Videospielen ausprobiert und optimiert

Beim MiSTer-Projekt bilden Entwickler Retro-Computer und -Spielkonsolen in einem FPGA-Chip akkurat nach. Dadurch sollen sich Spiele wie auf der Originalhardware anfühlen. Wir prüfen dieses Versprechen und zeigen die besten Einstellungen.

Von Dennis Schirrmacher

Alte Videospielkonsolen wie Nintendos SNES oder Segas Mega Drive und Heimcomputer wie der Amiga und C64 locken auch heute noch mit schnell beherrschbaren Games. Sie fordern ob der einfachen Darstellung die Fantasie mehr als aktuelle fotorealistische Pixelmonster. Doch der Retro-Charme ist bedroht: Die Hardware wird immer bröseliger und Defekte sind programmiert. Außerdem sorgen analoge Videoausgänge und flimmernde Monitore für Augenschmerzen. Das MiSTer-Projekt konserviert Retro-Arcade-Automaten, -Computer und -Konsolen in einem Field-Programmable Gate Array (FPGA) und verspricht dank akkurater Hardwareemulation ein unverfälschtes Spielerlebnis.

​​Hinter MiSTer steckt kein einzelner Hersteller, sondern ein reines Open-Source-Projekt, bei dem die Community mit viel Herzblut neben der Software auch Hardwareerweiterungen für das FPGA-Board erstellt. Die Bildsignale der Retro-Konsolen werden korrekt aufgearbeitet digital via HDMI ausgegeben – ein echter Augenschmaus. MiSTer ist übrigens keine Abkürzung, sondern ein Fantasiebegriff. Der Vorgänger heißt MiST. Die Bezeichnung spielt darauf an, dass das ältere FPGA-Board auf Amiga und Atari ST spezialisiert ist. Aus diesen beiden Heimcomputer-Namen leitet sich die ursprüngliche Namensgebung ab.

Links sehen Sie einen nackten MiSTer-Aufbau bestehend aus einem digitalen I/O-Board (oben), FPGA-Board (Mitte) und einem USB-Hub-Board (unten). Wer einen VGA-Ausgang benötigt, greift zum analogen I/O-Board (rechts).
Links sehen Sie einen nackten MiSTer-Aufbau bestehend aus einem digitalen I/O-Board (oben), FPGA-Board (Mitte) und einem USB-Hub-Board (unten). Wer einen VGA-Ausgang benötigt, greift zum analogen I/O-Board (rechts).

Geklonte Hardware

Das Herzstück bildet das FPGA-Board DE10-Nano von Terasic. Darauf rechnet ein Intel/Altera System-on-Chip (SoC) Cyclone V, der neben dem FPGA auch zwei ARM-Cortex-A9-Prozessorkerne enthält. FPGAs finden vor allem in Forschung und Entwicklung Einsatz, um Computerchips zu designen. Das ist deutlich günstiger und effektiver als teure Entwicklungswerkzeuge und eine Fabrik zur Prototypenfertigung.

FPGAs sind programmierbare Hardware: Das „Programm“ sagt nicht nur, welches der rund 110.000 im FGPA des Cyclone V vorhandenen Logikgatter wie mit den anderen verschaltet wird, sondern auch, welche Funktion (AND, XOR, NOT…) es erfüllen soll. Chipentwickler programmieren die einfachen Logikelemente im FPGA via Very High Speed Integrated Circuit Hardware Description Language (VHDL) und bauen so im Extremfall Hardware auf Transistorebene nach. Das klappt aber nicht nur in der Chip-Neuentwicklung richtig gut, sondern auch mit klassischen Heimcomputern und Videospielkonsolen der 8-Bit-, 16-Bit- und sogar einigen Modellen der 32-Bit-Ära [1]. Derzeit kann MiSTer fast 40 Videospielkonsolen, über 60 Heimcomputer und Dutzende Arcade-Automaten via Hardware emulieren.Aktuell reizt die PlayStation 1 das FPGA-Board aus. Eine N64-Hardwareemulation ist in Entwicklung.

​​​​Der große Vorteil dieser Herangehensweise im Vergleich zur Softwareemulation ist die sehr hohe Akkuratesse: Da Amiga, SNES und Co. quasi im FPGA geklont werden, verhalten sich die emulierten Systeme exakt so wie die Originalhardware. Dafür teilen Core-Entwickler den FPGA-Chip in verschiedene Bereiche ein, die dann Komponenten wie CPU und Grafikeinheit der anvisierten Hardware emulieren.

Im Gegensatz zur Softwareemulation kann ein FPGA ungestört arbeiten. Er ist ausschließlich für eine Aufgabe zuständig und soll etwa ein SNES simulieren. Auf einem Windows-System beispielsweise läuft neben dem Emulator noch das komplette Betriebssystem im Hintergrund und immer wieder funken andere Tasks der Emulation dazwischen. Außerdem sind die Speicherzugriffe und Timings beim FPGA so weit optimiert, dass sie nahezu „cycle exact“ zur Original-hardware laufen, also nahezu taktgleich. In der Summe profitiert vor allem die Latenz vom FPGA-Ansatz und die Bildausgabe findet analog wie digital verzögerungsfrei statt (siehe Kasten „MiSTer und Lag“ auf S. 154).

Funktionsweise und Kosten

Die Entwickler aus der Community bilden Computer- und Konsolenklone in „Cores“ ab. Daraus bekommt das FPGA seine Konfiguration, damit es sich wie ein bestimmtes System verhält. Die Cores liegen wie die ROM-Dateien von Spielen auf einer SD-Karte. Auf dem A9-Prozessor läuft ein Minimal-Linux, das unter anderem Eingaben von via USB angeschlossenen Gamepads an den FPGA-Chip durchreicht. Startet man einen Core, wird der FPGA-Chip umprogrammiert und verhält sich im Anschluss etwa wie ein SNES.

​​​​Für den Minimalaufbau müssen Sie etwas weniger als 300 Euro einplanen. Dafür ist lediglich das FPGA-Board DE10-Nano für rund 205 Euro nötig. Wichtige Schnittstellen wie ein HDMI-Ausgang, eine Netzwerk- und Micro-USB-Buchse und ein Micro-SD-Karten-Slot sind direkt mit an Bord. Ferner brauchen Sie ein aufsteckbares RAM-Modul, das für etwa 30 Euro zu haben ist und dann 32 MByte mitbringt. Nehmen Sie aber lieber gleich die 128-MByte-Ausführung für rund 50 Euro, damit das Board auch große Systeme wie das Neo Geo emulieren kann.

​​​​​Um Gamecontroller via USB-Kabel oder Bluetooth-Dongle anzuschließen, brauchen Sie noch einen USB-Hub sowie ein externes 5-Volt-Netzteil, das mindestens 2 Ampere hergibt. Wer viel Peripherie anschließen möchte und dementsprechend mehr Leistung benötigt, sollte mit 4 Ampere rechnen. In unserem Aufbau hat sich das Modell GST25E05 von Meanwell für rund 15 Euro bewährt.

​​​​​Für mehr mehr Flexibilität bei der Peripherie gibt es I/O-Boards in einer digitale und analogen Variante mit weiteren Schnittstellen wie einem VGA- und Toslink-Ausgang zur analogen Video- und digitalen Audioausgabe für rund 40 Euro. Zusätzlich gibt es noch einen USB-Hub-Board (35 Euro) mit sieben USB-Buchsen. Das I/O- und das USB-Hub-Board sind auf die FPGA-Platine maßgeschneidert, sodass man sie in einem Aufbau wie bei einem Sandwich übereinander stapeln kann. Verschiedene Gehäuse runden MiSTer zum fertigen Produkt ab. Die kann man kaufen oder sich Vorlagen für einen 3D-Drucker herunterladen.

​​​​Die Komponenten können Sie einzeln bestellen und selbst zusammenstecken. Wenn Sie keine Lust auf Geschraube haben, bestellen Sie ein fertig zusammengebautes Set in einem Shop. Das geht beispielsweise in Deutschland bei mister-fpga.de oder in Portugal bei ultimatemister.com. In beiden Fällen schlägt die Vollausstattung mit rund 500 Euro zu Buche.

​​​​​Der FPGA-Chip ist passiv gekühlt. Da das Board auf den Industriebetrieb und eine Kerntemperatur von 100 Grad Celsius ausgelegt ist, sollte es bei einem Aufbau ohne Gehäuse und mit natürlicher Konvektion zu keinen Problemen im Betrieb kommen. Das können wir bestätigen: Im Test lief der anspruchsvolle DOS-Core über mehrere Stunden stabil. Die Sets mit I/O-Board bringen dennoch einen kleinen Lüfter mit, der mit einer konstanten Drehzahl läuft. Im Labor haben wir die Lautheit zweier von MiSTer-Shops oft genutzter Lüfter gemessen. Die Ausführung mit RGB-Beleuchtung der Marke Pi-Fan macht sich mit weniger als 0,1 sone – die untere Grenze unseres Geräuschmesssystems – bemerkbar und läuft damit so gut wie lautlos. Beim Noctua-Lüfter haben wir immer noch sehr gute 0,2 sone gemessen; das leicht säuselnde Geräusch stört kaum.

​​Wer möchte, kann in den USA bei misteraddons.com ein vorkonfiguriertes MiSTer-System in einem passiv gekühlten schicken Aluminiumgehäuse mit digitalem I/O-Board mit zweimal 128 MByte RAM kaufen. Das schlägt inklusive Versand aber mit rund 630 Euro plus Zoll zu Buche.

Original-Controller schließen Sie via Daemonbite- oder verzögerungsfrei via SNAC-Adapter an.
Original-Controller schließen Sie via Daemonbite- oder verzögerungsfrei via SNAC-Adapter an.

SD-Karte einrichten

Wenn die Hardware steht, müssen Sie eine SD-Karte mit dem Installations-Image Mr. Fusion vorbereiten. Dafür reicht eine Karte mit 2 GByte. Damit auch ROM-Dateien von Spielen drauf passen, benötigen Sie mehr Speicherplatz. Alternativ können die ROMs auch auf einem USB-Stick oder einer Netzwerkfreigabe liegen.

Laden Sie das aktuelle Mr.-Fusion-Image herunter (siehe ct.de/yv3v). Entpacken Sie das Zip-Archiv und schreiben Sie das Image unter Windows mit dem kostenlosen Tool Win32 Disk Imager oder unter Linux mit dd auf eine mit exFAT formatierte SD-Karte. Da das nur etwas mehr als 100 MByte sind, geht es zügig vonstatten.

​​​​​Im Anschluss stecken Sie die vorbereitete Speicherkarte in den SD-Karten-Slot des FPGA-Boards. Um die Einrichtung fertigzustellen, müssen Sie noch eine Tastatur, einen Bildschirm und ein Ethernetkabel oder ein WLAN-USB-Dongle für die Verbindung zum Internet anschließen. Schalten Sie nun den MiSTer ein. Der Installationsassistent richtet die Speicherkarte automatisch ein und legt unter anderem die für den Betrieb notwendigen Partitionen an. Das dauert rund zwei Minuten.

​​Danach erscheint das MiSTer-Menü mit dem Hinweis „No files!“. Drücken Sie die F12-Taste, um die Systemeinstellungen aufzurufen. Wählen Sie hier „Scripts“ aus und bestätigen Sie die Warnung, dass Skripte aus unbekannten Quellen die Systemsoftware beschädigen können. Wenn Sie ein WLAN-USB-Modul angeschlossen haben, wählen Sie den Menüpunkt „wifi“ aus, um eine Internetverbindung herzustellen. Sobald diese steht, starten Sie das Skript „update“. Es bringt das System auf den aktuellen Stand und installiert automatisch die Cores für verschiedene Heimcomputer und Videospielkonsolen. Da stetig neue Cores und Optimierungen dazukommen, lohnt sich regelmäßiges Aktualisieren. Im MiSTer-Forum (siehe ct.de/yv3v) finden Sie neben vielen Tipps und Tricks auch Informationen zu den Updates. Praktisch ist auch das über eine Internetsuche leicht zu findende update_all-Skript, das automatisch verschiedene Arcade-Automaten-Cores installiert.

​​​​Schließlich taucht wieder das MiSTer-Hauptmenü auf. Schauen Sie sich nun auf der Github-Seite nach weiteren Skripten um (siehe ct.de/yv3v). Dort gibt es etwa welche für das Bluetooth-Pairing in Verbindung mit Bluetooth-USB-Adaptern oder Skripte für den Fernzugriff via FTP, Samba oder SSH. Letzteres ist hilfreich beim Kopieren von Daten auf die MiSTer-Speicherkarte und Sie müssen sie nicht jedes Mal am Computer anschließen. Heruntergeladene Skripte gehören in den „Scripts“-Ordner. Die Sicherheitskopien Ihrer Spiele (ROM-Dateien) kopieren Sie unter „Games“ in den jeweiligen Ordner der simulierten Spielkonsole.

Die Spiele beginnen

Um das Menü und die Spiele mit einem Gamepad steuern zu können, müssen Sie die Tastenbelegung für das Hauptmenü und den jeweiligen Core konfigurieren. Rufen Sie dafür mit F12 die Einstellungen auf und klicken Sie auf „Define joystick buttons“. Folgen Sie den Anweisungen.

Um etwa einen SNES-Titel zu spielen, starten Sie zuerst über „Console“, „SNES“ den Core. Dann wählen Sie den Titel über den obersten Menüpunkt „Load“ aus. Viele Cores bieten wie die Original-Konsolen eine Speicherfunktion. Damit Spiele ihre Stände speichern können, müssen Sie im MiSTer-Overlay-Menü (F12) den Punkt „Autosave“ aktivieren. Achtung: Wenn Sie im Spiel dessen Speicherfunktion nutzen, speichert das MiSTer-System den Spielstand erst auf der SD-Karte, wenn Sie mit F12 erneut das MiSTer-Menü aufrufen. Damit sich Cores die Controller- und Videoausgabe-Anpassungen merken, müssen Sie jede im Menü gemachte Einstellung über den Punkt „Save settings“ speichern.

Das MiSTer-Menü ist nicht hübsch, aber zweckdienlich und Einstellungen gehen schnell von der Hand.
Das MiSTer-Menü ist nicht hübsch, aber zweckdienlich und Einstellungen gehen schnell von der Hand.

Direkte Steuerung

Auch wenn Retrospiele schon in den Standardeinstellungen nahezu perfekt und ohne Verzögerung laufen, kann man mit den richtigen Einstellungen noch mehr Spielspaß herauskitzeln. Damit minimieren Sie die Verzögerung von Gamepad-Eingaben weiter und optimieren die Bildqualität.

​​Damit via USB angeschlossene Gamepads so schnell wie möglich reagieren, müssen Sie unter Scripts „fast_USB_polling_on“ aktivieren. Das verachtfacht die Abfragefrequenz von USB-Geräten auf 1000-mal pro Sekunde (1000 Hertz, Hz). So werden Steuerbefehle noch direkter umgesetzt. Im Test konnten wir bei Titeln, bei denen es auf eine extrem schnelle Reaktion ankommt, wie „Punch-Out!!“ mit dem NES-Core, keine Verzögerung feststellen.

​​Wer Originalcontroller vom Mega Drive & Co. herumliegen hat, kann diese über Daemonbite-USB-Adapter verbinden, die auch mit PCs und Raspberry Pis funktionieren. Um die Latenz von Controllereingaben noch weiter zu senken, gibt es SNAC-Adapter (Serial Native Accessory Converter). Diese hängen Sie an den USB-Anschluss eines I/O-Boards. Nutzt man diesen Anschluss, gehen Controllereingaben nicht über das Linux-System, sondern ohne Umweg direkt an den FPGA. Dann können Sie auch Original-Lightguns vom NES & Co. anschließen und in Verbindung mit einem Röhrenfernseher nutzen. Der Nachteil ist, dass man mit einem via SNAC angebundenem Controller zwar die jeweils zum Controller passende simulierte Spielkonsole steuern, aber das MiSTer-Menü nicht aufrufen kann.

​Mit einem USB-Bluetooth-Adapter können Sie beispielsweise auch einen PlayStation-5-Controller anschließen. Damit das so latenzfrei wie möglich klappt, sollte der Adapter auf den Bluetooth-Chip CSR8510 oder BCM20702 bauen. Solche findet man problemlos über eine Internetsuche. Im Test konnten wir in Verbindung mit einem PS5-Controller beim Spielen keine Verzögerung feststellen. Um vom Gehäuse ausgehenden Interferenzen und somit nicht übermittelten Steuerbefehlen vorzubeugen, sollte der Bluetooth-Adapter an einer USB-Verlängerung hängen. Ein Community-Mitglied hat sich die Mühe gemacht und die Latenz von unzähligen Controllern getestet (siehe ct.de/yv3v).

Bildqualität optimieren

Standardmäßig gibt das FPGA-Board Bildsignale digital via HDMI aus. Insgesamt stehen 14 Auflösungen von 640 × 480 im Bildseitenverhältnis 4:3 bis 2560 × 1440 in 16:9 mit jeweils 50 oder 60 Hertz zur Auswahl. Anpassungen der Auflösung nehmen Sie in der Datei MiSTer.ini auf der SD-Karte vor. ​​​Für die optimale Bildqualität empfehlen wir auch auf einem 4K-Fernseher die 1080p-Auflösung (Full-HD).

Mit speziellen Einstellungen erzielen Sie dann bei vielen Cores, etwa dem für SNES-Emulation, eine pixelperfekte Skalierung (5x-Scaling). Beispielsweise läuft der Titel Super Mario World mit 512 × 224 Pixeln. Fünfmal 224 ist aber 1120 und nicht 1080. Deshalb gibt es in den Core-Einstellungen unter Audio & Video die Option „Vertical Crop 216p (5x)“. Sie vergrößert das Bild vertikal, sodass unten und oben jeweils 20 Pixel verloren gehen. In der Regel verschwinden dadurch aber keine wichtigen grafischen Details. Retrospiele wurden für Röhrenfernseher designt, die ja nach Modell technisch bedingt einen minimal anderen Bildbeschnitt aufweisen. Das hatten die Spielentwickler im Hinterkopf und haben in diesem Overscan genannten Bereich keine wesentlichen Objekte platziert.

Von der pixelperfekten Skalierung profitiert vor allem die Bildschärfe, aber auch via Videofilter zugeschaltete Scanlines zum Simulieren der Röhren-TV-Ästhetik werden pixelgenau über das Bild gelegt. Um das fünffache Scaling zu aktivieren, müssen Sie die MiSTer.ini anpassen. Tragen Sie in die Datei video_mode=8 für die Auflösung 1920 × 1080 ein. Fügen Sie folgende Befehle hinzu:

​​vscale_border=0
vscale_mode=0
forced_scandoubler=0

Dann müssen Sie in der Audio-&-Video-Option eines Cores den Punkt „Scandoubler FX“ auf „None“ stellen. Nun können Sie „216p(5x)“ bei „Vertical Crop“ aktivieren.

​​​Damit das Scrolling so geschmeidig wie möglich läuft, gibt es eine Option, die die Videoausgabe exakt mit der Framerate einer Spielkonsole synchronisiert. Das SNES beispielsweise gibt Videosignale mit 60,1 Hz aus, Capcoms Arcade-System CPS2 wiederum mit 59,6 Hz. Damit MiSTer Videosignale originalgetreu ausgibt, schreiben Sie den Befehl vsync_adjust=2 in die MiSTer.ini. Allerdings schluckt dieser Ansatz im Zuge der Synchronisierung einen Frame, kostet also 17 ms Latenz. Ohne Frameverlust geht es mit vsync_adjust=1. Doch nicht alle Bildschirme unterstützen diese Option ohne Framebuffer und es kommt zu Bildaussetzern. Hier hilft nur ausprobieren.

Manche Spielkonsolen wie der Handheld Wonderswan stellen Spiele mit rund 75 Hz dar. Hier klappt die korrekte Bildausgabe nur über die Variable-Refresh-Rate-Option (VRR). Diese Einstellung kennt man vom PC-Gaming: Dort gibt die Grafikkarte die Bildwiederholrate vor und der Monitor passt sich an. Beim MiSTer geht es aber nicht darum, das durch schwankende Bildwiederholraten ausgelöste Ruckeln auszugleichen, sondern Monitore weit unterhalb oder oberhalb der gängigen 60 Hertz anzusprechen. Wir haben mit folgenden Werten in der MiSTer.ini die Bildausgabe für den VRR-OLED-Fernseher C9 von LG optimiert und so Wonderswan mit der Original-Bildwiederholrate gespielt.

vrr_mode=2
vrr_min_framerate=48
vrr_max_framerate=120
vrr_vesa_framerate=60

​​Ab und an hat bei uns die Synchronisierung der Bildwiederholfrequenz nicht geklappt und SNES-Spiele liefen beispielsweise mit 62,5 statt 60,1 Hz. Den Wert kann man im laufenden Spiel im MiSTer-Menü ablesen, wenn man im Menü auf dem Joypad einmal nach links klickt. Stimmt die Hertzzahl nicht überein, muss man den Core neu starten.

​​​Wer den Scanline-Look alter Röhrenfernseher vermisst, kann nach dem Laden eines Spiels im MiSTer-Menü einmal das Steuerkreuz nach rechts drücken und unter „Video processing“ verschiedene Bildfilter hinzuschalten. Interpolationsfilter lassen die Pixel leicht unschärfer erscheinen. Scanlinefilter sorgen dafür, dass sich der Bildeindruck an den eines Röhren-TVs annähert, der das Bild Zeile für Zeile aufbaut. Shadowmasks-Filter gehen noch einen Schritt weiter und modifizieren die roten, grünen und blauen Farbkanäle, um den Röhren-Look zu perfektionieren.

​​​​Falls Sie im Heimkino Geräte via HDMI CEC (Consumer Electronics Control) steuern, müssen Sie für den MiSTer ein HDMI-Kabel oder Adapter ohne CEC-Funktion einsetzen. Andernfalls blockiert MiSTer die CEC-Steuerung im ganzen Verbund.

Sie können Bildsignale auch ohne analoges I/O-Board analog ausgeben. Dafür brauchen Sie einen kompatiblen HDMI-auf-VGA-Adapter wie den ISY IAD-1007 und aktivieren die Direct-Video-Bildausgabe in der MiSTer.ini mit dem Befehl direct_video=1. Dabei gelingt die Bildausgabe ebenfalls verzögerungsfrei. Achtung: Mit dieser Einstellung gibt der HDMI-Ausgang kein Standard-HDMI-Signal mehr aus, sodass Flachbildschirme nichts mehr zeigen.

Die Videofilter erzeugen unter anderem mit Scanlines einen authentischen Look wie früher auf einem Röhrenfernseher.
Die Videofilter erzeugen unter anderem mit Scanlines einen authentischen Look wie früher auf einem Röhrenfernseher.

Fazit

Das MiSTer-Projekt gefällt uns insgesamt sehr gut. Das Spielgefühl ist vor allem mit Originalcontrollern extrem authentisch und man fühlt sich direkt ins Kinderzimmer zurückversetzt. Darüber hinaus begeistert die aktive Community, die das Projekt am Leben hält und es stetig mit neuen Cores und Verbesserungen ausbaut.

​​​​​Doch ein komplettes MiSTer-Set kostet mit rund 500 Euro vergleichsweise viel. Alternativ erhält man für rund 70 Euro einen Raspberry Pi 4 mit 4 GByte und kann auf Software-Emulation via RetroPie setzen. Eine gewisse Latenz muss man dann allerdings in Kauf nehmen. Weil ein Raspberry Pi 4 genügend Leistungsreserven mitbringt, kann man die Latenz über rechenintensive Ansätze reduzieren. Etwa die Funktion „run_ahead_frames“ synchronisiert die Frameausgabe effektiver mit Steuerungsbefehlen. Im Vergleich zum MiSTer haben wir jedoch selbst dann noch eine minimale Latenz wahrgenommen. Für ambitionierte Retrofans dürfte das immer noch ein K.o.-Kriterium und Grund zum Schwenk auf MiSTer sein. (des@ct.de)

Weitere Infos zum MiSTer-Projekt: ct.de/yv3v

Kommentieren