FABGL Library Beispielprogramme für TTGO ESP32 VGA32 Board: Firmware flashen und ausprobieren
Im letzten Artikel hatte ich erklärt, wie man den Serial Port Treiber für das TTGO ESP32 VGA32 Board installiert und generell eine Firmware flasht.Heute wollen wir uns einmal anschauen, was die FabGL-Library so alles an Beispielprogrammen mitbringen. Ich lade die Beispielprogramme, ändere ggf. den Source-Code, wenn sie bei mir nicht ganz gewünscht laufen sollte und probiere sie aus.
Dazu will ich zu jeder Firmware ein kleines Video machen und euch das Beispielprogramm vorführen - wozu es gut ist und wie es funktioniert. Und es könnte sein, dass ich das eine oder andere Mal ein wenig in Retro-Nostalgie schwelge und die eine oder andere Anekdote aus der Computer-Steinzeit erzähle.
Tipps zu Einsatzzwecken und wie man eine Firmware noch anders nutzen kann, sollen natürlich auch nicht fehlen. Die meisten Informationen werden in den Videos untergebracht sein, aber natürlich gibt es hier auch eine kurze Beschreibung und die Links und geänderten Source-Code-Teile, auf die in den Videos eingegangen wird.
Let's test!
Also frisch ans Werk. Wer das hier gesagte nachspielen will, sollte das passende TTGO ESP32 VGA32 Board bereits vor sich liegen haben und sich meine Vorstellung TTGO ESP32 VGA32 Board mit PS/2 Mouse/Keyboard und mehr durchgelesen haben. Und er sollte schon einmal eine Firmware damit geflasht haben. Eine Anleitung, wie das genau geht, gibt es hier.Firmware Altair 8800 Emulator
Diese Firmware emuliert einen Altair 8800 Homecomputer, wie er 1975 von MITS für 400 bis 500 US$ (Äquivalent heute ca. 2500 €) auf den Markt gebracht wurde. Normalerweise, also in der Grundausstattung, wurde ein Altair über Kippschalter und Status-LED programmiert, die auch gleichzeitig die Ausgabeeinheit war.Ein Beispiel wie der Altair aussieht, findet ihr im Wikipedia-Link unten. Da findet ihr auch einen Link auf mein Breadboard-Computer-Projekt mit 6502 CPU, das vom Prinzip ähnlich funktioniert und auch aussieht - viele LEDs und Schalterchen.
Der hier vorliegende Emulator benutzt allerdings schon einen Monitor zur Ausgabe und eine Tastatur zur Eingabe - wie komfortabel. Und es ist schon CP/M, ein altes Betriebssystem und Vorläufer von DOS, installiert. Ja, sogar ein Basic-Interpreter von Microsoft läuft hier. Was ein Wahnsinn.
Links zum Thema:
- Mein Breadboard-Computer mit 6502 CPU ähnelt einem Altair in der Grundausstattung mit den vielen LEDs
- Der Altair 8800 bei Wikipedia
- Das Betriebssystem CP/M bei Wikipedia
Demonstrations-Video:
Firmware Ansi VT100 Terminal
Als Computer noch Großrechner hießen und so groß wie Kleiderschränke waren und sündhaft teuer, so teuer, dass sie sich kein Privatmensch leisten konnte, hatte man eine einzige große Recheneinheit und viele Terminals. Ein Terminal war eigentlich einfach nur eine ziemlich dumme Duo aus Tastatur und Monitor und ein bisschen Hardware dazwischen, das auf der Tastatur eingegebene Zeichen an den Großrechner übertrug, der dann rechnete und das Ergebnis wieder über Kabel zurück schickte und auf dem Monitor darstellte.Die serielle Datenübertragungstechnik benutzen wir noch heute. Zwischendrin wurde die Terminal-Hardware günstiger und die Terminals schlauer: sie konnten zuerst mit VT52, dann mit VT100/Ansi Steuerbefehle, so genannte Escape-Codes entgegen nehmen, um auf dem Bildschirm etwas in Farbe, fett oder blinkend dazustellen. Vorher war alles einfach nur schwarz/weiß auf dem Bildschirm mit 80 x 25 Zeichen.
Rechner, die nicht im selben oder Nachbarraum stehen, vielleicht sogar in einer anderen Stadt oder Land, wurden ebenfalls über ein serielles Protokoll angebunden, doch gab es noch einen Zwischenschritt, mit einem Gerät, dass die serielle Daten in Töne umwandelt, die dann über die Telefonleitung übertragen wurden. Das Gerät nennt sich Modem (Modulator/Demodulator) und schaffte anfangs gerade mal Lesegeschwindigkeit, später wurde es dann aber immer schneller.
Unter Hobbyisten breitete sich ein Hobby namens Datenfernübertragung (DFÜ) aus, und sogenannte "SysOps" (System Operators) hängten ihre Computer ans Telefonnetz, so dass andere darauf zugreifen konnten, sich gegenseitig Nachrichten schreiben usw. In Deutschland war der Begriff "Mailbox" dafür geläufig, in den USA eher der Begriff BBS (Bulletin Board System).
Auch ich war Sysop zu dieser Zeit und hatte eine Mailbox. Hier könnt ihr einen Blick darauf werfen, wie das aussah. Übrigens alles selbst programmiert. Warum ich das an dieser Stelle erwähne? Weil ich auch in die Mailbox VT100/Ansi einprogrammiert habe, damit die User (die Benutzer) etwas mehr Farbe und Komfort auf dem Bildschirm hatten.
Später schlossen sich dann die Mailbox-Betreiber zu Netzen zusammen (Z-Netz, Fido etc.), um die geschriebenen Nachrichten untereinander auszutauschen. Das war Ende der Achtziger / Anfang der Neunziger. So konnte man mit Menschen aus dem selben Land oder sogar weltweit persönliche Nachrichten ("PMs" (Personal Messages)) austauschen oder öffentlich diskutieren.
Nachläufer der Mailbox-Szene ist das Internet und das World Wide Web ("WWW"). Aus den schwarzen Brettern (Bulletin Boards) wurden dann im Internet die News-Groups (NNTPS-Prookoll) bzw. später dann die Foren (Web, HTTP-Protokoll). Und aus den PMs wurde e-mail.
Irgendwann waren die Übertragungsraten so hoch, dass man auch ganze Grafiken übertragen konnte, ohne ewig warten zu müssen. Das WWW war geboren. Die Sysops lernten HTML und machten ihre Mailboxen zu und eine Website auf.
Und heute sind die Übertragungsraten so hoch, dass sich die Leute Videos in HD ohne Ruckeln anschauen können. Das ist Fortschritt.
Links zum Thema:
Demonstrations-Video:
Firmware Classic Racer
Hier gibt es nicht viel zu zu sagen. Es ist ein einfaches Autorennspiel in 320x200 Auflösung, bei der ich ein bisschen tricksen musste, damit ich ein Video aufnehmen konnte: VGAController.setResolution(VGA_640x480_60Hz);
//VGAController.setResolution(VGA_320x200_75Hz, 320, 200);
Demonstrations-Video:
Firmware Collision Detection
Auch nichts besonderes. Ein Programmbeispiel, wie man Kollisionen zwischen Sprites erkennt und dabei den Hintergrund außen vor läßt. Eher etwas für LEute, die mal selbst ein Spiel programmieren wollen. DisplayController.setResolution(VGA_640x400_60Hz);
//DisplayController.setResolution(VGA_320x200_75Hz);
Firmware File Browser
Dies ist auch nichts besonderes anzuschauen, aber der Source-Code dürfte einem Zeigen, wie man auf die Micro-SD-Karte zugreift. Oder als Test, dass sie funktioniert.Demonstrations-Video:
Firmware Graphical User Interface (GUI)
Die Library bringt auch eine komplette GUI mit, mir den aus Windows bekannten Steuerelementen: TextBox und Label, Button, ListBox, ComboBox, Checkbox, Radio Buttons, Slider. Hier kann man die Elemente allesamt ausgiebig testen und herausfinden, wie sie genau funktionieren.Im Source-Code findet man Beispiel-Code, wie man die Elemente mit der Library einbindet.
Demonstrations-Video:
Firmware Hardware Test
Hier kann man Farben, Sound und SD-Karte testen. Aber auch den WiFi-Chip des ESP32 und die freien GPIO-Pins, zum Beispiel, indem man eine LED anschließt und schaut, ob sie leuchtet.Die Vesa-Auflösung bei 75 Hz wollte mein Aufnahmegerät nicht, aber mit
DisplayController.setResolution(VGA_640x480_60Hz);
//DisplayController.setResolution(VESA_640x480_75Hz, 570, 390);
Demonstrations-Video:
Firmware Network Terminal (Telnet)
Die Network Terminal ist ähnlich zu dem Ansi-Terminal, nur verbindet es sich nicht über die serielle Schnittstelle (USB), sondern kann via WiFi auf das Internet zugreifen. Und zwar mit dem Programm Telnet, das benutzt wird.Telnet wird heute nicht mehr so sehr benutzt, da man ihm nachsagt, unsicher zu sein. Aber ich finde noch einen Server, mit dem ich mich verbinden kann und tatsächlich wird Text ausgetauscht.
Mit Tastatur hat man so ein Telnet-Terminal für unterwegs. Man braucht dann nur noch einen VGA-Monitor.
Demonstrations-Video:
Firmware Multitasking Multiuser CP/M Emulator
Zuerst bekam ich einen Fehler beim Flashen, dass der Speicherplatz auf dem ESP32 nicht ausreicht. Ich musste erst unter Werkzeuge / Partition Scheme "Huge App" einstellen, womit es dann ging.Im Grunde genommen kann diese Firmware das gleiche wie das CP/M Beim Altair 8800 Emulator. Aber es kommt noch einmal Funktionalität oben drauf: neue Befehle und die Möglichkeit, mehrere Terminal-Sessions parallel geöffnet zu halten und mit den Funktionstasten zwischen ihnen hin und her zu schalten. Allerdings wird hier der Speicher des ESP32 schnell knapp und das Board führt einen Reset durch, was natürlich den totalen Datenverlust in den Sessions nach sich zieht.
Aber es gibt es paar lustige Progrämmchen wie Say, einen Sprachsynthesizer, mit dem ich ein bisschen rumspiele.
Danach spiele ich ein bisschen mit mbasic (da frühe Microsoft Basic) herum und finde auch ein paar alte Beispiel-Basic-Programme von IBM. Spaßig ist CatChum (von Yahoo Software, hat aber wohl nichts mit der Suchmaschine zu tun), ein Pac Man-Clone, der den Spielbildschirm über Escape-Sequenzen in ASCII-Art zeichnet.
Oder Gorilla.bas, was ebenfalls über Terminal-Grafik läuft und ein Artillerie / Worms - Clonse ist, bei dem zwei Spieler gegeneinander antreten und versuchen gegenseitig abzuschießen, indem sie Winkel und Geschwindigkeit eingeben. Ein ganz einfaches Spiel, das aber trotzdem viel Spaß bringen kann zu zweit.
Links zum Thema:
Demonstrations-Video:
Firmware PC Emulator
Auch die PC Emulator Firmware benötigt das "Huge App"-Modell. Also Ich unter Werkzeuge / Partition Scheme "Huge App" einstellen, damit man es flashen kann.Danach hat man eine große Auswahl an Betriebssystemen, die emuliert werden können:
- FreeDOS (floppy 1.44MB)
- MS-DOS 3.31 (floppy 1.44MB)
- CP/M 86 + Turbo Pascal 3 (floppy 1,44MB)
- Linux ELKS 0.4.0 (floppy 1,44MB)
- FreeDOS (HDD 8MB)
- DOS Programs and Games (HDD 20MB)
- DOS Programming Tools (HDD 20MB)
- Windows 3.0 (HDD 20MB)
- GEM 3.13 (HDD 8MB)
- GEOS 2.0 (HDD 20MB)
- MS-DOS 5.00 (HDD 8MB)
- MS-DOS 6.22 (HDD 8MB)
- SvarDOS (HDD (HDD 10MB)
Firmware PC Emulator - Mit dem WLAN verbinden
Dazu muss man sich aber erst die jeweiligen Disketten-Images aus dem Internet herunterladen. Und dazu muss man sein WiFi konfigurieren und SSID und Passwort eingeben. Nur leider findet er bei mir mein WLAN nicht.Nach ein paar Minuten Code-Analyse finde ich die Stelle, die ich ändern muss, damit es doch noch klappt. Ich schreibe meine WLAN-Credentials einfach hardcore in den Source-Code:
if (!connected) {
char SSID[32] = "CNW24";
char psw[32] = "xxxxxxxxxxxxxxxx";
if (true) { // (preferences.getString("SSID", SSID, sizeof(SSID)) && preferences.getString("WiFiPsw", psw, sizeof(psw))) {
Demonstrations-Video:
Firmware PC Emulator - FreeDOS (Floppy)
FreeDOS ist ein freies DOS. MS-DOS unterliegt streng genommen immer noch dem Copyright von Microsoft und braucht eine Lizenz (sprich die Original-Disketten), will man es benutzen. Die braucht man bei FreeDOS nicht. Trotzdem kann FreeDOS eigentlich alles, was MS-DOS auch konnte und ein Stückchen mehr hier und da wie zum Beispiel Dateinamenvervollständigung mit der Tab-Taste.Hier finden wir auch wieder BASIC-Interpreter von Microsoft: QBasic und GWBasic. Nach ein bisschen probieren finde ich heraus, wie man die binären .bas-Dateien zum Laufen bringt.
Dummerweise schaltet er bei allen Programmen in den 320x200 Pixel-VGA-Modus, den ich nicht aufnehmen und euch zeigen kann.
Von "DONKEY.BAS" allerdings habe ich ein Foto gemacht, denn das ist ein Stück Computer-Geschichte, hat es doch Bill Gates selbst (zusammen mit Neil Konzen) in 1981 geschrieben, um IBM die Vorzüge von Microsoft Basic zu demonstrieren, damit es Teil von PC DOS wird.
Auf das Spiel angesprochen, sagte Bill Gates 2001:
Actually, it was myself and Neil Thompson [sic] at four in the morning with this prototype IBM PC sitting in this small room. IBM insisted that we had to have a lock on the door and we only had this closet that had a lock on it, so we had to do all our development in there and it was always over 100 degrees, but we wrote late at night a little application to show what the Basic built into the IBM PC could do. And so that was Donkey.bas. It was at the time very thrilling.
Ein Esel kommt in dem Spiel allerdings nicht vor. Es handelt sich vielmehr um ein einfaches Autorennspiel.
Eigentlich saßen ich und Neil Thompson [sic] um vier Uhr morgens mit diesem Prototypen eines IBM-PCs in diesem kleinen Raum. IBM bestand darauf, dass wir ein Schloss an der Tür haben mussten, und wir hatten nur dieses Kämmerchen, das ein Schloss hatte, also mussten wir unsere gesamte Entwicklung dort drinnen machen, und es war immer über 37 °C Grad heiß, aber wir schrieben spät in der Nacht eine kleine Anwendung, um zu zeigen, was ein in den IBM PC eingebautes Basic leisten konnte. Und das war dann Donkey.bas. Damals war das sehr aufregend.
Demonstrations-Video:
Firmware MS-DOS 3.31 (Floppy)
MS-DOS 3.31 ist eine ältere Version, die sich nicht groß von FreeDOS 7.10 unterscheidet, eben nur weniger Funktionalität hat. Ich werfe trotzdem auf historischen Gründen einen Blick hinein.Demonstrations-Video:
Firmware MS-DOS 6.22 (HDD)
Auch zu MS-DOS 6.22 ist nicht viel zu sagen. Es ist die mir neueste MS-DOS-Version, mit auch ich sehr lange gearbeitet habe. Der Funktionsumfang ähnelt FreeDOS 7.10, ein paar mir wichtige Dinge fehlen aber noch (die Tab-Taste). Aber statten wir dem langjährigen treuen Begleiter doch einen kurzen Besuch ab, der guten alten Zeiten wegen.Demonstrations-Video:
Firmware DOS Programs and Games (HDD)
Mit MS-DOS 6.22 kommen mir die ganzen Spiele in den Sinn, die darunter mit einer VGA-Karte liefen wie DOOM oder Commander Keen. Während ich überlegen, wie ich solch ein Spiel auf die SD-Karte bekomme und ob ich es davon starten kann, fällt mir auf, dass es eine Firmware "DOS Programs and Games" gibt, die wohl auch ein paar Spiele- und Anwendungssoftware enthalten dürfte. Das wird gleich mal ausgetestet.Nachdem ich mir angeschaut habe, wie damals Word und Excel funktionierten, nämlich nicht gerade aufregend, lasse ich ein paar Benchmarks laufen und erfahre, dass unser ESP32 mit dem Emulator ungefähr auf dem Niveau eines 8086 XT ist in Sachen Rechengeschwindigkeit. Die Micro-SD-Karte rennt natürlich jeder Festplatte aus den alten DOS-Tagen davon.
Es gibt auch ein paar Spiele, die haben aber keine tolle Auflösung und nur CGA-Auflösung von 320x200, die ich nicht aufnehmen kann. Darum kann ich sie euch auch nicht zeigen. Aber keine Angst: ihr verpasst nicht wirklich etwas.
Demonstrations-Video:
Firmware Windows 3.0
Meine Bemühungen, Windows 3.0 so zu laufen zu bringen, dass man es mit der Video Capture Card aufnehmen kann, schlagen fehl. Denn mehr als die mitgelieferte Herkules-Grafik scheint nicht drin zu sein.Also bleibt mir nichts anderes übrig, als den alten VGA-Monitor anzuschließen und das Geschehen abzufilmen. Das ist von Bild und Ton natürlich nicht optimal.
Ich zeige in dem Video unten noch ein mal das Dilemma mit der Herkules-Auflösung, aber ich schätze, dass geht nicht anders, denn da schon damit ist das System nicht gerade schnell. Bei 640x480-VGA würde man wahrscheinlich nur noch warten.
Also nehmen wir mit schwarz/weiß-Darstellung vorlieb und probieren ein paar Programme aus. Beim Schach stürzt Windows gleich mal an und friert ein, so dass ich neu starten muss. Danach probiere ich lieber das mitgelieferte Reversi, das ich auch prompt gewinne. Und auch eine Runde Solitaire darf nicht fehlen, die ich allerdings nicht abschließen kann. Hätte ich mal eingestellt, dass jedesmal nur eine statt drei Karten gegeben werden.
Danach spiele ich Bago, was irgendein Spiel mit Wortwürfeln ist, bei dem man englischen Wörter aus den Buchstaben aneinander reihen muss. Das ist wohl von Boggle von Parker Brothers, das 1972 erschien, abgeschaut. Sogar die Sanduhr wird als solche dargestellt.
Danach werfe ich noch einen Blick auf das alte Excel bei Windows 3.0, das heute immer noch ähnlich aussieht und funktioniert. Natürlich kann das heutige Excel viel mehr. Aber schon die alte Version taugte zum Rechnen.
Demonstrations-Video:
Firmware GEM 3.13 (HDD)
Leider kann ich auch GEM nicht direkt aufnehmen und muss abfilmen. Für GEM 3.13 startet zuerst MS-DOS (wie damals auch für Windows 95) und darauf dann GEM/3. Die Einschaltmeldung sagt Release 3.13 vom 14. April 1989, (c) 1989 Digital Research.Auch GEM läuft in Herkules-Auflösung und sieht ein bisschen vollgepackter und nicht ganz so aufgeräumt wie Windows 3.0 aus. Dafür läuft es ein wenig flüssiger. So groß anders ist GEM auch nicht: es gibt ein paar Standard-Applikationen: Taschenrechner, rudimentäres Zeichenprogramm, Uhr und Spiele - in diesem Fall Tetris.
Demonstrations-Video:
Firmware GEOS 2.0 (HDD)
Leider trifft auch hier dasselbe wie bei GEM zu: GEOS lässt sich nicht direkt aufnehmen und ich muss mal wieder abfilmen.GEOS startet als "Ensemble 2.0" von Geoworks, Copyright 1990-1994 Geoworks. Der Dateimanager heißt hier "Geomanager". Na, da fühl sich der Geocacher doch gleich heimisch, obwohl GOES nichts mit Geografie oder so zu tun hat, sondern ein weiteres Fenster-Betriebssystem ist.
Auch GEM läuft in Herkules-Auflösung und sieht ein bisschen besser von der Grafik aus. Es ist auch ein wenig jünger. Selbst ein "America Online"-Icon gibt es schon. Und es sind hier wieder die Standard-Applikatione vertreten: Taschenrechner, Uhr, rudimentäres Zeichenprogramm. Der Taschenrechner macht richtig was her. Dafür ist die Uhr nur digital. Als Spiel gibt es wieder Solitaire, wieder mit besser aussehender Grafik. Und Tetris ist auch dabei.
Demonstrations-Video:
Firmware SvarDOS (HDD)
Noch nicht angeschaut habe ich SvarDOS, von dem ich auch nie etwas gehört habe. Aber so wie es aussieht, ist es einfach ein DOS mit ein paar erweiterten Befehlen. Ich gebe FreeDOS trotzdem den Vorzug.Demonstrations-Video:
Firmware Linux ELKS 0.4.0 (Floppy)
Nur der Vollständigkeit halber schaue ich mir auch noch die Linux von ELKS in Version 0.4 an. Und wie erwartet gibt es hier die üblichen Shell und Linux Befehle.Demonstrations-Video:
Firmware Songs
Hinter dem Beispiel "Songs" verbirgt sich der SoundChip Simulator (by Carles Oriol 2020). Um das Video aufnehmen zu können, muss ich die Bildschirmwiederholfrequenz auf 60 Hz stellen, 70 Hz mag er anscheinend nicht. Aber mit 640x400 kommt er klar:// VGAController.setResolution(VGA_640x400_70Hz);
VGAController.setResolution(VGA_640x400_60Hz);
Demonstrations-Video:
Firmware SoundChip Simulator
Beim "SoundChipSimulator" (vom selben Programmierer wie das letzte Beispiel) geht es mehr um Sound-Effekte, wie sie in Spielen vorkommen. Um das Video aufnehmen zu können, muss ich wieder die Bildschirmwiederholfrequenz auf 60 Hz stellen:// VGAController.setResolution(VGA_640x400_70Hz);
VGAController.setResolution(VGA_640x400_60Hz);
Demonstrations-Video:
Firmware Space Invaders
Kommen wir endlich zu dem Space Invaders, dass wir schon in dem Mini-Video auf der Seite von AliExpress als Beispiel gesehen hatten. Da freue ich mich schon die ganze Zeit drauf. Allerdings ist es wieder für 320x200 konfiguriert, was ich ja leider nicht aufnehmen kann.Ich wühle mich also ein bisschen durch den Source-Code auf GitHub ...
fabgl::VGADirectController DisplayController;
--> FabGL/src/dispdrivers/vgadirectcontroller.cpp
--> void VGADirectController::setResolution(VGATimings const& timings, int viewPortWidth, int viewPortHeight, bool doubleBuffered)
#include "vgadirectcontroller.h"
#include "displaycontroller.h"
#include "dispdrivers/vgabasecontroller.h"
--> https://github.com/fdivitto/FabGL/blob/master/src/dispdrivers/vgabasecontroller.h
/**
* @brief Sets current resolution using linux-like modeline.
*
* Modeline must have following syntax (non case sensitive):
*
* "label" clock_mhz hdisp hsyncstart hsyncend htotal vdisp vsyncstart vsyncend vtotal (+HSync | -HSync) (+VSync | -VSync) [DoubleScan | QuadScan] [FrontPorchBegins | SyncBegins | BackPorchBegins | VisibleBegins] [MultiScanBlank]
*
* In fabglconf.h there are macros with some predefined modelines for common resolutions.
* When MultiScanBlank and DoubleScan is specified then additional rows are not repeated, but just filled with blank lines.
*
* @param modeline Linux-like modeline as specified above.
* @param viewPortWidth Horizontal viewport size in pixels. If less than zero (-1) it is sized to modeline visible area width.
* @param viewPortHeight Vertical viewport size in pixels. If less then zero (-1) it is sized to maximum allocable.
* @param doubleBuffered if True allocates another viewport of the same size to use as back buffer. Make sure there is enough free memory.
*
* Example:
*
* // Use predefined modeline for 640x480@60Hz
* VGAController.setResolution(VGA_640x480_60Hz);
*
* // The same of above using modeline string
* VGAController.setResolution("\"640x480@60Hz\" 25.175 640 656 752 800 480 490 492 525 -HSync -VSync");
*
* // Set 640x382@60Hz but limit the viewport to 640x350
* VGAController.setResolution(VGA_640x382_60Hz, 640, 350);
*
*/
void setResolution(char const * modeline, int viewPortWidth = -1, int viewPortHeight = -1, bool doubleBuffered = false);
virtual void setResolution(VGATimings const& timings, int viewPortWidth = -1, int viewPortHeight = -1, bool doubleBuffered = false);
// DisplayController.setResolution(VGA_320x200_75Hz);
DisplayController.setResolution(VGA_640x400_60Hz, 320, 200);
Aber mir soll das so reichen. Gesteuert wird mit den Cursortasten und geballert mit der Leertaste, die man übrigens auch halten kann für Dauerfeuer.
Darstellung und Sound kopieren den Arcade-Klassiker nahezu perfekt und es kommt so richtig Retro-Feeling auf. Naja, okay, Joystick und flimmernder Screen würden noch fehlen.
Let's Play!
Demonstrations-Video:
Firmware Sprites
Sprites ist eine kleine Demo, wie man Sprites, also kleine, bewegte Grafiken auf dem Pfad einer Sinus-Kurve bewegen kann. Nicht sonderlich interessant anzusehen, aber für Programmierer von Spielen eventuell nützlich. Um das Dargestellte aufnehmen zu können, muste ich wieder eine Zeile im Quellcode ändern: //DisplayController.setResolution(VGA_320x200_75Hz);
DisplayController.setResolution(VGA_640x400_60Hz, 320, 200);
Firmware VIC 20 Emulator
Der Commodore VIC20, in Deutschland unter dem Namen VC20 (für Volkscomputer 20) verkauft, war mein 2. Computer, wie man hier nachlesen kann. Er hatte den MOS 6520 als CPU eingebaut, die ich übrigens auch in meinem Breadboard-Computer verbaut habe.Die Überreste des VC20 habe ich noch heute. Außer der Hauptplatine und einer Speichererweiterung ist allerdings nicht mehr viel da. Keine Datasette, keine Floppy, nicht mal mehr Gehäuse und Tastatur. Für die fehlende Tastatur habe ich inzwischen Abhilfe mittels eines ESP8266 und einer selbstentworfenen Schaltung mit MT8808 8x8 Analog Switch Array geschaffen, so dass ich über WLAN Befehle auf einer virtuellen Tastatur eingeben kann.
Ihr seht: mit dem Commodore VC20 verbindet mich so einiges, darum war ich auch sehr gespannt, was der VIC 20 Emulator zu bieten hat.
Doch als erstes hieß es für mich, eine vernünftig aufnehmbare Bildschirmauflösung zu finden. Das beste Ergebnis erzielte ich mit
DisplayController.begin();
//orig. DisplayController.setResolution(VGA_256x384_60Hz);
DisplayController.setResolution(VGA_640x400_60Hz, 256, 384);
Beim Hochfahren zeigt uns das VGA32-Board gleich eine große Auswahl an Spielen:
- Arukanoido 24K.PRG
- Astro Panic.PRG
- Blue Star.PRG
- Dragonnihg.PRG
- Frogget 07 16K.PRG
- KweepoutMc 3K.PRG
- Nibbler 3K.PRG
- Omega Furv 16K.PRG
- Poovan 16K.PRG
- Popeve 32K.PRG
- Pulse.PRG
- Quikman 8K.PRG
- Spikes 16K.PRG
- Splatform 8K.PRG
- Tammerfors.PRG
- Tank Battalion 16K.PRG
- Tetris+ 3K.PRG
Nach einer Runde in Nostalgie schwelgen mit einem kurzen Test, was noch von Basic bei mir hängengeblieben ist, geht es dann doch wieder ins Haupt-Menü (F12 drücken) und ans Spielen. Die meisten Spiele sind recht einfach, manche grafisch schon recht gut für den VC20 und viele machen einfach Spaß trotz ihrer Einfachheit. Und mit Einfachheit meine ich hier Einfachheit der Spielregeln und nicht, dass es einfach ist, die Spiele zu gewinnen oder überhaupt zu spielen. Die sind zum Teil ganz schön happig.
Links zum Thema:
- Meine VC20 (und C64) bzw. was davon übrig ist
- Meine Computer Historie - der VC20 war mein 2. Computer
- Mein Breadboard-Computer mit 6502 CPU
- ESP8266 mit MT8808 8x8 Analog Switch Array als VC20/C64-Tastatur-Emulator über WLAN
- der VC20 bei Wikipedia
- Commodore BASIC bei Wikipedia
Demonstrations-Video: