#321 – CGA Emulatoren

Ernsthaft – was gibt es schöneres, als ein altes Videospiel auf einem monochromen Bildschirm zu zocken? „Nichts“ würde der Enthusiast sagen, „so ziemlich alles andere auf der Welt“ jeder normale Mensch! 😛

Im Verlauf der letzten (bereits über 300!) Beiträge haben wir uns schon mit drei PC-Systemen beschäftigt, welche ausschließlich Texte und Grafiken auf einem monochromen Bildschirm ausgeben. Zum einen wäre da der DTK Tech-1260-PC aus Artikel 233, der adb 8088 Computer aus Artikel 282 und zu guter Letzt der Philips-Rechner, welchen wir uns erst kürzlich in Artikel 309 angesehen haben.

Ich kann euch nicht sagen, was mich an dieser stark veralteten Technik so begeistert. Vom „Spielerischen“ gibt eine Vielzahl dieser alten, einfarbigen Games nicht wirklich viel her und ich würde lügen, wenn ich behaupten würde, dass ein DOS-Spiel im EGA- oder VGA-Grafikmodus nicht wesentlich angenehmer zu spielen ist. Dennoch hat dieser monochrome Hercules-Grafikmodus etwas faszinierendes. Vielleicht ist es einfach die Tatsache, dass man überhaupt Grafiken mit Hardware darstellen kann, welche eigentlich nur für die Textausgabe gedacht ist? Wer weiß. 🙂

Schon klar, der Herr retrololo steht mal wieder auf veraltetes Zeug – das ist nun wirklich nichts neues. Um was geht es denn jetzt heute eigentlich? So sehr ich diese einfarbige Bildausgabe schätze, so schwierig ist es, geeignete Programme und Spiele für diesen speziellen Grafikmodus zu finden, denn leider wurde der Hercules-Standard nicht von allen Entwicklerstudios unterstützt. Viele Spiele der frühen Achtziger waren für den vierfarbigen CGA-Grafikmodus mit 320×200 Bildpunkten (oder alternativ 640×200 Bildpunkten bei 2 Farben) konzipiert und sind so leider nicht mit monochromen Grafikkarten und Monitoren kompatibel.

Fun Fact: Das Bild habe ich mir aus Artikel 238 geklaut. Für gewöhnlich bin ich kein Fan davon, Bilder oder Grafiken in mehreren Beiträgen zu verwenden, aber ich mache in diesem Fall mal eine Ausnahme weil ich finde, es passt so gut zur Thematik! 😉

Ihr glaubt mir nicht? Hier haben wir Beweisstück A: Der Defender-Klon „Striker“ von 1985 verweigert beim Start direkt mal den Dienst und teilt uns mit, dass wir keine CGA-Grafikkarte verbaut haben.

Schade, dabei wäre ich gerne etwas Helikopter geflogen. Noch wollen wir nicht aufgeben! Im Endeffekt müsste das Spiel schon laufen, denn tatsächlich ertönt – sofern wir die gut gemeinte Hinweismeldung ignorieren und trotzdem versuchen, das Spiel ohne installierte CGA-Grafikkarte zu starten – die Titelmelodie aus dem PC Speaker! Es wird lediglich keine Grafik angezeigt.

Ok, das bedeutet also, dass das Spiel prinzipiell läuft – eine gute Nachricht! Dass wir kein Bild angezeigt bekommen, ist eigentlich logisch. Beim Start des Spiels versucht das Programm die Spielgrafiken an eine bestimmte Adresse in den Grafikspeicher der CGA-Grafikkarte zu laden (welche wir ja nicht verbaut haben). Zwar besitzt auch die monochrome Hercules-Karte einen Grafikspeicher, leider ist dieser von der Struktur her anders aufgebaut. Während vierfarbige CGA-Grafiken an der Speicheradresse 0xb8000 abgelegt werden, sind monochrome Hercules-Grafiken bei Adresse 0xb0000 zu finden.

Fun Fact: Tatsächlich verwenden Hercules-Grafikkarten einen 64 kB großen Speicherbereich, während CGA-Karten sich mit lediglich 16 kB Grafikspeicher zufrieden geben. Das liegt daran, dass Hercules-Karten mehr Platz für die Textausgabe in einer höheren Auflösung benötigen, da im Vergleich zu CGA unterschiedlichste Zeichensätze (z.B. thailändische Schriftzeichen) unterstützt werden. Nutzloses Wissen mit retrololo – Folge 4711! 😛

Und selbst, wenn die beiden Grafikstandards die gleiche Speicheradresse für Grafiken verwenden würden, könnte die monochrome Hercules-Karte trotzdem nichts mit den vierfarbigen CGA-Grafiken anfangen, da das Format der einzelnen Pixel (z.B. Auflösung und Farbanzahl) je nach Standard unterschiedlich ist. Mist! 🙁

Not so fun Fact: Für die Nerds unter euch – der Hercules-Standard arbeitet mit 2 Farben in einer Auflösung von 720×348, CGA dagegen mit vier Farben bei 320×200 Bildpunkten. Gerade im Textmodus fällt der Unterschied auf, denn je nach Standard besteht ein Zeichen aus einer unterschiedlichen Anzahl an Pixeln.

Das klingt alles erst mal recht kompliziert, aber im Endeffekt bräuchten wir eigentlich „nur“ ein Programm, welches die geschriebenen Grafiken zur Laufzeit im Speicher an der Adresse 0xb8000 ausliest, diese in ein Hercules-kompatibles Format (von vier Farben auf zwei Farben) konvertiert und an die Adresse 0xb0000 in den Speicher schreibt, sodass die monochrome Grafikkarte diese anzeigen kann. Die gute Nachricht: Solche Programme existieren tatsächlich und sie werden unter dem Begriff „CGA Emulatoren“ zusammengefasst! 🙂

Heute wollen wir einen kurzen Blick auf ein paar dieser Emulatoren werfen, um zu prüfen, ob wir unseren monochromen PCs nicht doch noch ein paar Tricks entlocken können. Den Anfang macht „UniCGA“.

Das 1991 von einem Dänen entwickelten Programm lässt sich über den Parameter „ucga -s“ starten und nistet sich anschließend als TSR-Programm resident im Speicher ein.

Anschließend können wir es nochmal mit „Striker“ probieren. Tatsächlich lässt sich das Spiel jetzt starten und wir können uns auf eine Mission mit dem Helikopter wagen:

Was auffällt ist, dass unser Fluggefährt doch recht langsam durch die Gegend fliegt. Das ist schade, weil das Spiel wohl nativ (im CGA-Modus) selbst mit einer 5 MHz 8088-CPU laufen müsste, aber scheinbar frisst die Software-Emulation so viel Performance, dass wir uns mit einem ruckeligen Hubschrauber zufrieden geben müssen. Ebenso schaltet UniCGA scheinbar während der Laufzeit den grafischen Modus auch für MS-DOS-Systemroutinen ein. Das hat zur Folge, dass das Betriebssystem sowie alle Befehle (wie z.B. ein „DIR“ zum Anlisten eines Verzeichnisses) deutlich langsamer laufen, als im standardmäßigen Textmodus und die Schrift gestaucht aussieht. Unschön!

Zur Verteidigung von UniCGA muss man sagen, dass es auch einen „Hardware-Emulation“-Modus besitzt. Einige Hercules-kompatible Grafikkarten (z.B. ATI Graphics Solution) boten bestimmte Modi zur hardwareseitigen CGA-Emulation an. Dabei kamen einige Tricks wie z.B. das Anpassen der Auflösung auf den monochromen CGA-Modus (640×400) sowie die Ausgabe von bis zu 16 verschiedenen Graustufen über die Anpassung der Spannungspegel des Videosignals zum Einsatz.

Definitiv clevere Konzepte, aber da wir so eine Karte nicht besitzen, müssen wir nach einer Softwarelösung Ausschau halten. Wir können es z.B. mal mit dem CGA-Emulator „SimCGA“ (Version 4.2 von 1989) probieren.

Ein Vorteil der Software ist, dass sie den Textmodus für das Betriebssystem erhält und wir so auch nach Start des Programms (Aufruf von „SIMCGA.COM“) noch gewohnt schnell durch MS-DOS (und ohne Veränderung der Schriftart) browsen können. Auch Striker läuft damit wesentlich schneller – fast sogar etwas zu schnell für meinen Geschmack! 😉

Das Bild ist zentrierter als bei UniCGA und wesentlich schärfer, doch leider entstehen bei der Bewegung des Helikopters ziemlich hässliche „Ghosting-Effekte“ (Nachleuchten von Objekten auf dem Bildschirm). Echt schade, denn ansonsten läuft der Emulator eigentlich recht gut! 🙁

Gleiches gilt für „HGCIBM“, einem weiteren CGA-Emulator aus dem Jahre 1987. Bei HGCIBM handelt es sich um ein kommerzielles Produkt, welches von der Firma Athena Digital vertrieben wurde.

Mit „hgcibm /e“ lässt sich das Programm im Speicher installieren.

Anschließend läuft das Spiel Striker ebenfalls sehr flüssig, doch leider auch mit den gleichen hässlichen Ghosting-Effekten wie bei SimCGA.

Scheinbar ist dieser „Ghosting-Effekt“ ein generelles Thema bei den Emulatoren, denn mit dem gleichen Problem wartet „HERC.COM“, ein minimalistischer CGA-Emulator auf.

HERC setzt sogar noch einen drauf und zerschießt uns direkt nach Start der Software unsere Zeichenausgabe unter MS-DOS. Statt des aktuellen Pfads und des Eingabeprompts sehen wir nur noch ein blinkendes Zeichen auf dem Bildschirm. Schafft man es irgendwie trotzdem, das Spiel zu starten, läuft Striker anschließend auch nicht besser oder schlechter als z.B. mit SimCGA oder HGCIBM. Ein Punkt, der für HERC.COM spricht, ist, dass es nur wenige Byte im Arbeitsspeicher belegt. Alle anderen Emulatoren benötigen mindestens ein paar Kilobyte.

Not so fun Fact: Es ist gar nicht so einfach sich zum Starten des Spiels komplett „blind“ durch die Verzeichnisse zu manövrieren! Hier muss man die DOS-Befehle sowie den Aufbau, bzw. die Dateistruktur der Festplatte des jeweiligen PCs wirklich gut im Kopf haben! 😀

So ein Mist – jetzt haben wir schon so viel Software getestet, aber leider war noch kein perfekt funktionierender Emulator dabei. Tatsächlich habe ich an dieser Stelle noch einige Zeit recherchiert und konnte mit „EMU0“ einen weiteren Emulator finden, welcher tatsächlich ohne Ghosting auskommt und trotzdem flüssig läuft. Damit das klappt, wird einfach jede zweite Bildzeile durch eine schwarze Scanline ersetzt. So bleibt das Bild halbwegs intakt und das Spiel läuft flüssig, ohne dass bewegliche Objekte wie z.B. der Hubschrauber auf dem Bildschirm nachleuchten.

Also eine perfekte Lösung? Leider nein, denn einerseits zerstört EMU0 den Textmodus von MS-DOS und andererseits wird auch das Bild nach Beenden des Programms überlagert. Ich vermute, dass der Grafikspeicher nicht ordentlich geleert oder an falscher Stelle eingelesen wird. Dadurch treten – je nach dem – welche Anwendung man zuvor gestartet hat – permanent optische Fehler auf:

Not so fun Fact: Angeblich soll es noch eine bessere Version von EMU0 geben, welche aber auf echter Hardware nicht lauffähig ist, da sie die Bildfrequenz von 50 auf 60 Hertz steigert und die meisten Hercules-fähigen, monochromen Monitore nur mit 50 Hertz laufen. Ganz toll! xD

Seufz, es wird nicht besser oder? Auch ein letzter Versuch mit dem Tool „MONO.COM“ bringt keinen Erfolg. Diesmal sieht es so aus, als würde die Software versuchen, unseren Monitor in einer Frequenz zu betreiben, mit der er nicht klar kommt. Als Ergebnis sehen wir ein permanent durchlaufendes, flimmerndes Bild. Nicht wirklich akzeptabel!

Ich gebe es auf. Tatsächlich gäbe es noch eine Vielzahl an weiterer CGA-Emulationssoftware, mit der wir uns beschäftigen könnten, aber man muss wissen wann ein Kampf verloren ist! 😛

Fun Fact: Einige Leute mit mehr Zeit und Energie (die mutmaßlichen „Enthusiasten“) haben sogar eigene Menüs zum automatischen Aufruf der ganzen CGA-Emulatoren gebastelt. So lässt sich je nach Bedarf das geeignete Programm zur Emulation eines Spiels per Knopfdruck starten – echt nice! 🙂

Ok, wenn ich ehrlich bin ist die Situation gar nicht so schlimm, wie ich es hier beschrieben habe. Viele Spiele laufen tatsächlich mit einigen der genannten Programme ohne Probleme. Manchmal hilft es, eine Kombination verschiedener Emulatoren einzusetzen. Im Falle von Striker bin ich z.B. darauf gekommen, dass man zuerst mit UniCGA den Grafikspeicherbereich leeren muss („unicga -f“ und danach „unicga -u“), um anschließend mit Hilfe des EMU0-Programms (bzw. dem Befehl „emu0 80“) das Spiel ohne Fehler und Probleme laufen lassen zu können. Echt wild, aber funktioniert!

Fun Fact: Wer hätte gedacht, dass wir das Spiel in Kombination mit UniCGA – dem ersten von uns getesteten Emulator – dann doch noch zum Laufen bekommen? Zufälle gibt’s! 😀

Als kleine „Belohnung“ nach der ganzen Testerei gibt es nun noch ein paar Screenshots von Spielen, die sich mit Hilfe der CGA-Emulatoren auf unseren monochromen Maschinen zum Laufen bringen lassen. Was haltet ihr z.B. von „PC-Man“? Der Pac-Man-Klon von 1982 lässt sich erstaunlich gut spielen und steht seinem Arcade-Vorbild maximal in Sachen Farbe etwas nach. 😉

Gleiches gilt für „Zaxxon“, welches eventuell dem ein oder anderen Veteranen vielleicht noch aus der Spielhalle bekannt sein könnte. In dem Shoot ‘em up von 1984 steuern wir ein Raumschiff durch eine isometrische Festung und versuchen dabei, so viele Gegner wie möglich auszuschalten.

Not so fun Fact: Wie man unschwer erkennen kann, wurde das Bild exakt in dem Augenblick geknipst, in welchem ich schnurstracks mit meinem Raumschiff gegen eine Wand (bzw. in einen Elektrozaun) gerauscht bin. Ich schiebe das jetzt ganz dreist mal auf den anspruchsvollen Schwierigkeitsgrad! 😛

Ihr wolltet schon immer mal als Barkeeper arbeiten? In „Tapper“ – ebenfalls aus dem Jahre 1984 – könnt ihr genau das tun. Als ziemlich gestresster Schankwirt gilt es, einen gefühlt nicht endenden Strom an durstigen Gästen mit Hopfenkaltschalen zu versorgen. Ich gebe es offen zu – ich bin furchtbar in diesem Spiel! Ich weiß nicht, ob das an meinen nachlassenden Reflexen liegt, oder an der Tatsache, dass ich mich für gewöhnlich auf der anderen Seite des Tresens befinde! 😉

Denkt man an CGA-Spiele, fällt vielen vermutlich der Klassiker „Alley Cat“ von 1983 ein. Das vom leider viel zu früh verstorbenen Spieldesigner Bill Williams erdachte Jump-‘n’-run wurde 1984 für MS-DOS portiert (im Original für Atari 800 entwickelt) und gilt nicht nur auf Grund des (für die damalige Zeit) abwechslungsreichen Gameplays zurecht als eines der besten CGA-Spiele überhaupt.

Zu guter Letzt bekommen wir in „Karateka“ von Jordan Mechner noch ordentlich eins auf die Mütze. Das bereits 1984 für den Apple II erschienene Kampfspiel kam zwei Jahre später im DOS-Universum an und setzte als erstes Videospiel der Welt auf Rotoskopie. Den Nerds unter euch wird der Name „Mechner“ vielleicht vom Plattform-Klassiker „Prince of Persia“ bekannt vorkommen, welches auf die gleiche Technik setzte, um möglichst flüssige Bewegungsabläufe des Prinzen darstellen zu können.

Fun Fact: Zum Thema Rotoskopie: Das Verfahren wurde, bzw. wird eigentlich bei der Erstellung von Animationsfilmen angewandt. Dabei werden Bewegungsabläufe von echten Schauspielern gefilmt und anschließend Bild für Bild digital nachgezeichnet. Mechner war der Erste, der das Verfahren auch für die Erstellung von Computerspielen verwendete. Nutzloses Wissen mit retrololo – Folge 4712! 😛

Genug gespielt, es wird Zeit den kleinen Ausflug durch die Welt der CGA-Emulatoren zu beenden. Was haben wir heute gelernt? Jeder Emulator ist anders und auch jedes Spiel wurde unterschiedlich programmiert. Ergo lassen sich mit solchen Werkzeugen auch nicht alle Spiele (oder nur mit massiven Einschränkungen) überlisten. Software, welche an den BIOS-Routinen vorbeigeht und direkt mit der CGA-Hardware kommuniziert, wird auch mit einem Emulator nicht funktionieren. Auch ist es abhängig vom Monitor und der verbauten Hercules-Grafikkarte, welche Spiele sich zum Laufen überreden lassen. Fakt ist: Jedes Stück Software tickt anders und es gibt gefühlt hunderte Abhängigkeiten und Inkompatibilitäten. Ich überlasse hiermit die weitere Forschung dem „Zukunfts-retrololo“ – oder noch besser: Jemandem anderen, der mehr Zeit und Lust hat, sich in das Thema hinein zu fuchsen…

In diesem Sinne – bis die Tage, ciao!

Write a comment