ZX Spectrum

ZX Spectrum Retro-Spiele-Programmierung

Wenn du ein Kind der 1980er Jahre bist, erinnerst du dich vielleicht an den Sinclair ZX Spectrum. Er war ein erschwinglicher Heimcomputer, der an ein Farbfernsehgerät angeschlossen werden konnte und Kompaktkassetten als Massenspeicher nutzte.

Mein erster Computer war ein Sinclair ZX-81. Ich habe darauf BASIC und auch Z80-Assembler gelernt. Bald wurde der ZX-81 durch einen ZX Spectrum ersetzt. Ich habe viel programmiert, alle möglichen Tools und ein paar Demos geschrieben. Ich wollte immer zusammen mit meinen Freunden ein Spiel schreiben, aber als Teenager fehlte uns die nötige Ausdauer, um so ein Projekt zu Ende zu bringen. Als ich dann meinen Amiga 500 bekam, verlor ich schnell jedes Interesse an meinem guten alten Spectrum.

Aber es ist nie zu spät… Ich habe gerade ein winzig kleines Spielprojekt namens Coredump gestartet, geschrieben in Z80-Assembler für den guten alten ZX Spectrum. Warum? Einfach weil ich es kann. Weil ich es immer wollte. Und weil Retro-Programmierung auch eine Menge Spaß bedeutet!

Dieser erste Artikel handelt von der Toolchain, die ich verwende. Ich werde weitere Artikel hinzufügen, während das Spiel wächst und (hoffentlich) eines Tages fertiggestellt wird.

Damals in den 80er Jahren war die Assembler-Programmierung auf dem ZX Spectrum eine sehr mühsame Aufgabe. Ich musste mich mit Kassettenbändern (und ihrem sehr langsamen Zugriff) herumschlagen, einem Assembler, der bereits etwas von dem knappen RAM verbrauchte, und ich hatte keine Tools, die den Entwicklungsprozess vereinfachten. Wenn ich einen Fehler machte und der Spectrum abstürzte, musste ich den Assembler, den Quellcode und die Ressourcen neu von der Kassette laden. Oft verlor ich auch einen Teil meiner Arbeit, denn im Umgang mit Kassetten ist das Speichern eines Quellcodes viel mehr Arbeit, als nur Strg-S zu drücken, also riskierte ich lieber, die Änderungen nach einem Absturz neu eintippen zu müssen.

Heute ist es viel einfacher, Retro-Software zu schreiben. Ich kann sie auf meinem Linux-Rechner entwickeln, der sehr schnell ist und viel Speicherplatz hat. Ich verwende einen modernen Texteditor und viele mächtige Tools. Zum Testen muss ich nur eine Snapshot-Datei assemblieren und sie auf einem Emulator ausführen, was weniger als eine Sekunde dauert. Wenn der Emulator abstürzt, geht keine Arbeit verloren.

Das sind die Tools, die ich zum Programmieren verwende. Alle davon sind für Linux und MacOS verfügbar, einige auch für Windows.

  • Fuse ist ein exzellenter ZX-Spectrum-Emulator mit einem sehr präzisen Timing.
  • Ein ordentlicher Editor. Ich habe mit Atom angefangen, aber jetzt benutze ich Eclipse, weil es besser zu meinem Workflow passt. Nimm einfach deinen Lieblingseditor.
  • zasm ist ein netter Z80-Cross-Assembler, der auch in der Lage ist, SNA-Dateien zu generieren, die auf dem Emulator laufen.
  • Multipaint ist ein Open-Source-Zeichenprogramm, das mit den Einschränkungen der ZX-Spectrum-Grafik umgehen kann (und glaub mir, es gibt Einschränkungen). Es hat sich für die Erstellung von Sprites und Tiles als nicht so nützlich erwiesen, weil es keine präzise Kontrolle über die Papier- und Tintenfarbe bietet, die in der generierten Bildschirmdatei verwendet wird.
  • Daher verwende ich auch Gimp zum Pixeln von Sprites und Tiles. Vielleicht werde ich später auch Inkscape nutzen.
  • Tiled ist ein exzellenter Map-Editor. Ich benutze ihn, um die Welt meines Spiels zu entwerfen.
  • Einige selbstgeschriebene Hilfsprogramme konvertieren die Grafiken und die Welt in das Binärformat, das im Spiel verwendet wird. Ich verwende Java für diese Tools, einfach weil ich mich mit Java am besten auskenne. Es gibt keinen technischen Grund dafür, nimm einfach die Sprache, mit der du dich am wohlsten fühlst.
  • Zu guter Letzt verwende ich ant, um alle Teile zusammenzufügen und die Snapshot-Datei auszuführen.

Die Hardware des ZX Spectrum ist sehr einfach und leicht zu verstehen (was auch bedeutet, dass du viele Dinge ohne Hardware-Unterstützung machen musst). Der Z80-Prozessor hat einen einfachen Befehlssatz. Retro-Programmierung ist also nicht nur etwas für die Älteren, sondern auch für die junge Generation, die sich für einen ersten Einstieg auf die Hardware-Ebene von Computern interessiert. Es macht auch Spaß, das Maximum aus einer begrenzten und langsamen Hardware herauszuholen.

Es gibt eine Menge Dokumentation im Netz:

  • World of Spectrum hat viel Hardware-Dokumentation in der Rubrik references.
  • Ein kurzer Überblick über alle Z80-Befehle und ihre Timings.
  • Ein kommentiertes ROM-Disassembly bietet einen ersten Blick auf den Z80-Assembler und enthält auch einige nützliche Funktionen (wie Multiplikation; der Z80 selbst bietet keine Multiplikations- oder Divisionsbefehle).

Als ich anfing, nach Ressourcen für den ZX Spectrum zu suchen, war ich überrascht, wie aktiv die Retro-Szene ist. Es gibt viele Blogs, die Tutorials anbieten, die Hardware-Tricks erklären, und es gibt sogar eine Demoszene, die dir Dinge zeigt, von denen du nie gedacht hättest, dass sie auf dieser Maschine möglich sind. Immerhin ist der Speccy jetzt fast 35 Jahre alt und war selbst zu seiner Zeit nicht für eine leistungsstarke Hardware berühmt.

Special: Emulatoren

Dass die Computergenerationen immer leistungsfähiger werden, hat einen interessanten Nebeneffekt: Es ist dadurch möglich, dass ein moderner Computer einen alten Computer vollständig simuliert, Spezialhardware eingeschlossen. Man spricht dann davon, dass der alte Computer emuliert wird. Die dazugehörige Software heißt Emulator.

Dieses Special beschäftigt sich mit einer Auswahl der Emulatoren, die es für Fedora gibt.

Quelle

Ein paar Emulatoren stehen bereits in Fedora Extras oder im Freshrpms-Repository zur Verfügung. Die wahren Sahnestücke aber gibt es in dem eher unbekannten Dribble-Repository. Mit einem kleinen Handgriff wird yum das neue Repository bekannt gemacht:

rpm -ivh http://dribble.org.uk/repo/dribble-release-5-1.noarch.rpm

Als erstes sollte man sich nun ein Emulator-Menü in der Gnome-Startleiste anlegen:

yum install dribble-menus

Dort findet man dann alle Emulatoren, die man sich von Dribble installiert hat.

Das war bereits die Vorbereitung. Bevor ich nun die Emulatoren vorstelle, möchte ich noch einen kleinen Haken an der Sache ansprechen.

Woher mit der Firmware?

Ein Emulator stellt quasi nur eine virtuelle Hardware zur Verfügung, und ist damit nur die halbe Miete. Jeder Computer braucht eine Firmware oder ein Betriebssystem, so auch die Emulatoren, die für gewöhnlich eine Kopie des Original-ROMs benötigen. Hier macht jedoch meistens der Hersteller noch seine Urheberrechte geltend, so dass man sie nicht einfach zusammen mit dem Emulator verteilen kann.

Wenn man Glück hat, hat der Hersteller mittlerweile eine nicht kommerzielle Nutzung erlaubt. In Fedora darf die Firmware dann zwar immer noch nicht aufgenommen werden, da die Distribution strikt nur freie, quelloffene Software verwendet. Repositories wie Dribble bieten aber die Firmware an, wenn möglich. Das ist - wie gesagt - legal, da der Hersteller die Firmware für nicht kommerzielle Zwecke freigegeben hat.

Ist das nicht der Fall, gibt es eigentlich nur einen legalen Weg: Man muss das zu emulierende Gerät selbst im Original besitzen. Dann darf man die Firmware oder das Betriebssystem auslesen und auf dem Emulator verwenden, solange das Originalgerät weiter im Eigentum bleibt (und ganz streng genommen auch währenddessen nicht angeschaltet wird). Oft gibt es aber auch die Möglichkeit, die benötigten Dateien käuflich zu erwerben. Ein gewisses Restrisiko bleibt dann, weil man nicht weiß, ob und wie stabil der Emulator schließlich mit den Originaldateien arbeitet.

Eine dritte, etwas ungewöhnliche Möglichkeit ist, dass die Firmware quelloffen nachprogrammiert wurde. Das ist zum Beispiel der Fall beim Atari ST-Emulator, weshalb er auch in Fedora Extras zu finden ist.

Von Schwarzkopien sollte man dagegen absehen. Die Emulatoren werden von vielen Herstellern mit Argwohn beobachtet und mehr geduldet als gemocht. Wenn sie den Eindruck bekommen, dass dadurch ihre Rechte verletzt werden, könnte der Frieden schnell vorbei sein.

Jetzt aber genug der Theorie! Schauen wir uns ein paar Emulatoren näher an.

Apple Macintosh

Der erste Emulator ist schon ein Leckerbissen. Mit dem SheepShaver lässt sich ein Apple Macintosh emulieren. Unterstützt wird MacOS 7.5.2 bis 9.0.4, allerdings kein MacOS X. Installieren kann man ihn von Freshrpms per

yum --enablerepo=freshrpms install SheepShaver

Wer noch einen echten Mac Classic sein Eigen nennt, kann nun dessen Betriebssystem für den SheepShaver verwenden. Es ist vielleicht sogar möglich, die Festplatte des Originals in den Linux-PC einzubauen und zu benutzen. Es gibt aber auch die Möglichkeit, von Apple kostenlos die Installationsdateien für MacOS 7.5.3 herunterzuladen und zu installieren. Die Frage ist, wieviel man noch damit anfangen kann, denn MacOS 7.5.3 ist mittlerweile schon ziemlich betagt.

Der Name SheepShaver ist übrigens eine Verballhornung von ShapeShifter, dem ersten Software-Mac-Emulator für den Amiga.

Amiga

Apropos Amiga: Auch dieses klassische System lässt sich emulieren. Die Software dafür heißt UAE. Ursprünglich stand die Abkürzung für “Unusable Amiga Emulator”, und das nicht zu Unrecht, denn selbst sehr schnelle PCs reichten in den 1990ern nicht aus, um nur das Basismodell Amiga 500 mitsamt seiner komplexen Hardware in Echtzeit zu emulieren. Zwischenzeitlich hat sich aber viel getan, so dass heutzutage selbst ein durchschnittlicher PC einen schnelleren Amiga emuliert als das damalige Spitzenmodell mit 68060-Prozessor. UAE steht mittlerweile auch für “Ubiquitous Amiga Emulator”.

Installiert wird UAE aus dem Dribble-Repository per:

yum install e-uae

Auch hier fehlt das Betriebssystem, das so genannte Kickstart-ROM. Wer einen Amiga besitzt, kann mit Software aus dem Aminet selbst eine Kickstart-Datei erzeugen. Eine andere Möglichkeit ist, sich einen kommerziellen Amiga-Emulator zu besorgen, der die Kickstart-Datei enthalt. Meistens findet man die begehrte Datei aber auch auf Amiga-Spielesammlungen für den PC, die in vielen Software-Shops erhältlich sind. Die Sammlungen sind preiswerter und bringen außerdem gleich noch “Futter” für den Emulator mit.

Atari ST

Auch für den damaligen Erzrivalen des Amiga, dem Atari ST, gibt es einen Emulator. Er heißt hatari und steht sogar im Fedora Extras-Repository zur Verfügung:

yum install hatari

Als Betriebssystem kommt hier das quelloffene EmuTOS zum Einsatz. Damit ist hatari tatsächlich zu 100% Open Source.

Commodore C64 und seine Geschwister

Gleich eine ganze Armee von Emulatoren bringt vice, vom C64 und C128 bis hin zu ganz alten Schätzchen wie dem Commodore PET. Installiert wird vice aus dem Dribble-Repository per:

yum install vice

Leider scheint es aber ein Problem mit dem Sound zu geben; ich bekomme jedenfalls immer eine Fehlermeldung, dass alsa nicht ansprechbar ist. Gerade beim C64 mit seinem legendären Synthesizer-Chip SID ist das tragisch.

ZX Spectrum

Auch wenn der C64 zweifellos der populärste Heimcomputer der 1980er war, gab es noch Alternativen. Eine war der Sinclair ZX Spectrum. Natürlich gibt es auch dafür einen Emulator, genannt FUSE (Free Unix Spectrum Emulator). Der Emulator selbst liegt im Extras-Repository, allerdings ohne die notwendigen ROM-Dateien. Diese können vom Dribble-Repository nachinstalliert werden. Folgende Zeile installiert den kompletten Emulator mit ROMs und verschiedenen Tools:

yum install fuse-emulator fuse-emulator-roms fuse-emulator-utils

Emuliert werden verschiedene Modelle wie der ZX Spectrum 48k, der ZX Spectrum 128k oder die baugleichen Geräte von Timex und Pentagon.

MAME

Ein wahrer Spezialist unter den Emulatoren ist MAME, der Multiple Arcade Machine Emulator. Sinn dieser Software ist, Spielhallen-Computer zu emulieren. Eine nicht gerade leichte Aufgabe, denn sehr häufig wurde die Hardware des Geräts für das Spiel maßgeschneidert.

Der Emulator steht im Freshrpms-Repository und wird wie folgt installiert:

yum --enablerepo=freshrpms install gxmame xmame xmame-roms

Um mit MAME spielen zu können, braucht man die ROMs der Originalsysteme. Diese sind ziemlich schwer auf legalem Weg zu beschaffen, denn eigentlich muss man dazu das System (oder wenigstens dessen ROM-Bausteine) besitzen. Wenigstens drei Spiele, deren ROMs von den Eigentümern freigegeben wurden, werden mit dem xmame-roms-Paket mitinstalliert.

Weitere Emulatoren

Dribble bietet noch eine Vielzahl an weiteren Emulatoren, zum Beispiel für Gameboy, Gamecube, NES, Nintendo 64 oder für MSX-Homecomputer. Viel Spaß beim Ausprobieren!