Jetzt konnte ich ausprobieren, wie gut eine Re-Implementierung des C64 auf einem FPGA funktioniert. Es wird dabei der C64 nicht in Software nachgebildet, sondern die Funktion des gesamten Rechners wird auf einem FPGA neu implementiert. Es gibt verschiedene Projekte, die Rechner per FPGA nachbilden, wie z.B. C-One, Turbo Chameleon 64, FPGA-64, MEGA65, Commodore 64 on FPGA und ein paar weitere. Einige davon sind auf den C64 fixiert, andere erlauben es auch andere Rechner nachzubilden.
MIST Board Projekt
Ich habe mich für das MIST Board entschieden, das vollständig aufgebaut bei der polnischen Firma Lotharek gekauft werden kann (siehe auch hier). Mit 199 EUR ist es zwar nicht ganz günstig, bietet aber eine Unterstützung für mehrere Systeme, die über sogenannte FPGA-Cores nachgebildet werden:
Computer: Acorn Archimedes (in Arbeit), Amiga (AGA in Beta-Status), Amstrad CPC, Apple II+, Atari ST, Atari 800, Commodore 64, Commodore VIC-20, MSX, ZX Spectrum, ZX81
Konsolen: Atari 2600, Atari 5200, Bally Astrocade, Chip8, Colecovision, Sega Master System, NES, PC Engine, VideoPac
Arcades: Galaxian, Moon Patrol, Pacman, Pengo, Space Invaders
Der MIST wird von Lotharek in einem kleinen Metallgehäuse geliefert, welches über zahlreiche Anschlüsse verfügt: Micro USB-Anschluss (für die Stromversorgung und zum Flashen per USB-Kabel), VGA-Monitoranschluss, drei Signal-LEDs, drei Taster, 3,5 mm Stereo-Klinkenstecker (Audio-Out), Ein-/Ausschalter, SD-Karten Anschluss, zwei DB9-Stecker (für Joysticks) und vier USB-Anschlüsse (für Tastatur, Maus, Joysticks und Gamepads).
Wer noch etwas basteln möchte, der kann sich das Platinenlayout von der Projektseite besorgen, die Platine selbst ätzen und anschließend bestücken. Diese Arbeit habe ich mir diesmal erspart.
Betrieb des MIST Boards
Zum Betrieb des MIST Boards wird mindestens ein geeigneter VGA-Monitor (dazu später), eine Tastatur, ein USB-Netzteil (der MIST kann aufgrund der geringen Stromaufnahme auch aus einem USB-Anschluss versorgt werden) und eine Speicherkarte (am Besten 1-2 GB groß, es werden prinzipiell aber auch größere Karten unterstützt, wenn auch nicht zwangsweise vom verwendeten Core) benötigt. Je nach nachgebildeten System ist auch eine USB-Maus sinnvoll, z.B. beim Atari ST oder Amiga. Die Atari ST oder Amiga Maus können derzeit nicht verwendet werden. Leider gibt es derzeit keine Lösung die Originaltastaturen an dem MIST zu betreiben. Schön wäre ein einfacher USB-Adapter, der es ermöglichen würde z.B. eine C64- oder Atari-ST Tastatur an den MIST anzuschließen.
Aufgrund der vorhandenen Implementierung liefern einzelne Cores nicht ganz VGA-konforme Signale. So liefern die Cores im PAL-Betrieb 50 Hz, VGA setzt aber mindestens 56 Hz voraus. Auch liegen die 15 kHz des TV-Modus einiger weniger Cores weit unter den VGA-Anforderungen von mindestens 31,5 kHz. Entweder man hat Glück und der eigene Monitor verträgt diese geringen Frequenzen oder das Bild läuft durch (siehe Bild). Im letzteren Fall sollte man versuchen den Core auf NTSC (60 Hz) umzuschalten (ggf. auch den MIST noch ein oder zweimal neu booten). Teilweise muss auch noch ein geeignetes ROM (z.B. ein amerikanisches TOS für den Atari ST) verwendet werden. Ich setze einen etwas älteren Samsung SyncMaster 193T am MIST ein, der im NTSC Modus ganz gut funktioniert, im PAL Modus aber meistens nur ein flackerndes Bild liefert. Auf der Projektseite gibt es eine (sehr kurze) Liste von getesteten Monitoren.
Konfiguration
Die Konfiguration ist sehr einfach: Von der Projektseite lädt man den gewünschten Core herunter und legt ihn, ggf. zusammen mit einem Image des Betriebssystems, auf einer SD-Karte ab. Dazu kommt noch die Software, die je nach Core als Disketten-Image oder einzelne Programmdatei vorliegen muss.
Für die Implementierung des C64 benötigt man nur eine einzelne Datei: Den C64 Core. Derzeit ist der Core in der Version fpga64_140710_r298.rbf aktuell. Legt man diesen unbenannt in core.rbf auf der Speicherkarte ab, lädt das MIST Board ihn direkt nach dem Einschalten automatisch. Die C64-Programme landen als *.PRG Datei auf der Speicherkarte. Die populären D64 Disketten-Images werden leider nicht unterstützt. Mit dem kostenlosen Tool DirMaster können Programme aber sehr leicht aus einem D64 oder T64-Image extrahiert werden.
Die C64-Implementierung
Hat man den C64-Core (und ggf. einige Programme) auf der SD-Karte abgelegt, muss die Karte nur noch in den MIST eingelegt und dieser eingeschaltet werden. Nach ein paar Sekunden sollte dann der C64 Bildschirm erscheinen.
Die Implementierung des C64 ist erstaunlich gut gelungen, wenn auch mit einigen Einschränkungen. Viele Programme laufen problemlos, es ist aber nicht möglich Programme, die aus mehreren Dateien bestehen, zu starten. Das liegt darin begründet, dass über das OSD (On Screen Display, mit F12 oder der mittleren MIST Taste aufrufbar) nur eine einzelne PRG-Datei ausgewählt werden kann, die dann direkt in den Speicher injiziert und damit gestartet wird. Hier ist das MIST Board also längst nicht so flexibel, wie ein herkömmlichen C64-Emulator in Software, der praktisch alles lesen kann.
Die Video- und Soundausgabe ist gut und auch die klassischen Joystick-Anschlüsse funktionieren. Es sollen auch einige USB-Joysticks und USB-Pads funktionieren, was ich mangels Peripherie nicht testen konnte. Auf der Projektseite gibt es dazu eine Aufstellung.
Falls der Bildschirm flackert wird der verwendete Monitor die 50 Hz des PAL Modus vermutlich nicht vertragen. Mit dem OSD kann auf NTSC (60 Hz) umgeschaltet werden und nicht vergessen über das OSD diese Einstellung zu speichern, damit beim nächsten Start direkt der NTSC Modus verwendet wird. Leider funktionieren aufgrund des etwas „kaputten“ Timings auch im NTSC-Modus noch längst nicht alle Monitore problemlos. Wer dann das VGA-Signal mit einem Adapter noch auf HDMI umsetzen möchte, wird ständig Bildaussetzer haben. Es gibt aber für ca. 25-30 EUR eine Lösung: Ein „CGA/EGA/YUV to VGA“ Umsetzer wandelt das etwas untertaktete VGA-Signal in ein sauberes VGA-Signal. Danach kann dieses mit einem „VGA auf HDMI“-Wandler in ein HDMI-Signal gewandelt werden. Diesen Umweg benötigt man aber nur für den C64 Core. Alle anderen Cores liefern ein sauberes VGA-Signal.
Die Belegung der Tastatur ist auch gut gelungen, diese ist aber natürlich nicht so komfortabel wie eine original C64-Tastatur, falls man Sonderzeichen verwenden möchte.
Fazit
Die Re-Implementierung des C64 per FPGA ist eine interessante Lösung. Auf einer einzigen SD-Karte kann man die Cores verschiedenster Systeme mit zig Programmen unterbringen und komfortabel zwischen diesen wechseln. Das Retro-Feeling ist bei einer FPGA Nachbildung meiner Meinung nach höher als bei einem Windows-Rechner mit Software-Emulator. Aber man muss auch mit einigen Einschränkungen leben, wie z.B. der sehr eingeschränkten Unterstützung von Dateiformaten.
Die nachfolgende Tabelle zeigt die Stärken und Schwächen der C64 Re-Implementierung auf dem MIST Board im Vergleich zum Emulator per Software auf dem Raspberry Pi (mit Keyrah-Interface) bzw. einem Windows PC, z.B. mit VICE:
Bereich | MIST | Emulator (Raspberry Pi mit Keyrah V2) | Emulator (Windows) |
Vollständigkeit der Emulation bzw. Implementierung | o [1] | ++ | ++ |
Videoausgabe | + [2] | ++ | ++ |
Audioausgabe | + [3] | Â ++ | Â ++ |
Kompatibilität | o [4] | ++ | ++ |
Kosten | — (199 EUR) | o (ca. 65 EUR) | ++ (kostenlos) |
Retro-Feeling | + | ++ [5] | o |
- [1] Keine Unterstützung von virtuellen Diskettenlaufwerken (D64), Tapes (T64) oder Cartridges.
- [2] Mögliche Probleme mit nicht 100% konformen VGA-Signal.
- [3] Keine Auswahl verschiedener SID-Typen.
- [4] Nur einzelne PRG-Dateien werden unterstützt, keine „Mehrteiler“.
- [5] Umbau im C64-Gehäuse mit Tastatur-Interface.
Die Nachbildung eines Rechners per FPGA ist trotz der obigen Wertung sehr interessant und es macht Spaß sich damit zu beschäftigen. Ich habe auch die anderen Cores bereits ausprobiert und werde bestimmt in den kommenden Wochen über meine Erfahrungen berichten.
Bild: Platine – MIST Board Projekt
Der aktuelle C64-Core bildet auch die Floppy 1541 nach und kann damit fast alle c64-Programme nutzen.
Was man zu den Bildschirmen dazu sagen sollte: Ja, nicht jeder Bildschirm laeuft am Mist, weil es das Originaltiming verwendet. Aber: Wenn es erstmal geht, dann ist die Darstellung viel besser als bei allen Emulatoren. Vor allem butterweiches horizontales Scrolling ist die Koenigsdisziplin. Ein C64, der mit 50 Bildern pro Sekunde fluessig scrollt kann einfach nicht sauber auf einem 60Hz-Bildschirm dargestellt werden.
Ich habe gerade ein Update zu dem Bericht aus dem Mai gepostet. Die Möglichkeit D64 Images zu laden, macht den Core jetzt endlich brauchbar. Das Video-Timing scheint jetzt auch besser zu sein.
http://8bit-museum.de/das-mist-board-klassische-computer-per-fpga-neu-implementiert-teil-4/