Dieses "Spiel" entstand im November 2004 und wurde in Assembler geschrieben. Die ausführbare Datei ist nur 2 KiB (=2048 Byte) groß und benötigt zur Ausführung kein Betriebssystem, sondern kann direkt im BIOS von einer Diskette gestartet werden. Ziel des Spiels ist es, die von oben nach unten fliegenden gegnerischen Raumschiffe abzuschießen und selbst nicht getroffen zu werden.
Und wieso das Ganze? Nun, sonderlich interessant ist das Spiel mit Sicherheit nicht - hier galt eher: "Der Weg ist das Ziel": Ein Programm, welches ohne Betriebssystem läuft und nur 2 KiB benötigt und damit selbst auf eine altmodische 3,5 Zoll Diskette über 700x passen würde.
Etwa 12 Jahre später habe ich den Code noch einmal überarbeitet. Da Disketten inzwischen fast gar nicht mehr vorhanden sind, lässt sich das Spiel nun auch von USB Stick aus starten. Außerdem wurde der BIOS Parameter Block hinzugefügt, dieser ist ein Speicherbereich im Bootsektor, an dem sich vorher Code befand. Leider wird dieser Bereich von einigen BIOSen überschrieben oder manipuliert, um eine vermeintliche Kompatibilität zu erreichen. Um diese zusätzlichen Daten unterzubringen musste natürlich an anderer Seite eingespart werden. Es konnten noch einige Stellen im Code optimiert werden, so dass trotz des zusätzlichen Speicherbedarfs des BIOS Parameter Blocks von etwa 30 Byte über 100 weitere Bytes eingespart wurden. Diese wurden derzeit mit NOPs aufgefüllt, die Datei ist daher immer noch 2048 Byte groß. Die Spielmechanik wurde nicht verändert. Außerdem ist das Spiel gerade auf modernen CPUs energiesparsamer geworden, da der CPU zwischen zwei Frames in einen Schalfmodus überführt wird.
dd if=2016-spiel.bin of=device
Der Parameter device ist z.B. durch /dev/fd0 für eine Diskette oder /dev/sd? für einen USB Stick zu ersetzen, wobei das ? für das konkrete Laufwerk steht. ACHTUNG: Mit dem Befehl dd lassen sich sehr schnell Festplatten löschen. Vorher ist auf jeden Fall zu prüfen, ob man das richtige Device ausgewählt hat. Das Device darf außerdem nicht gemountet sein. Theoretisch ist es sogar möglich, dass Spiel von der Festplatte booten zu lassen.
Viel einfacher und ungefährlicher dagegen ist der Test in einem Emulator wie qemu:
qemu-system-x86_64 -fda 2016-spiel.bin
Auch unter Bochs und VirtualBox ist das Spiel lauffähig.
Das Übersetzen des Quellcodes in die Binärdatei geschieht mit meinem Lieblingsassembler NASM (Netwide Assembler):
nasm -f bin -o 2016-spiel.bin 2016-spiel.asm
Im Gegensatz zu C oder C++ ist x86 ASM nicht standardisiert und die Notation weicht von Assembler zu Assembler teilweise erheblich ab. Ein Übersetzen mit einem anderen Assembler wird deshalb nicht möglich sein.
Bitte beachten: Das Spiel steht unter einer MIT Lizenz, kann also salopp gesprochen von jedermann verwendet, modifiziert und wieder veröffentlicht werden. Ich stelle diese Software so bereit wie sie ist und hafte für keine Schäden! Die Verwendung geschieht auf eigene Gefahr! Die Software selbst sollte keine Schreibversuche auf irgendein Gerät unternehem, beim hantieren mit Tools wie dd lassen sich jedoch schnell durch kleine Unachtsamkeiten Festplatten oder andere Datenträger überschreiben. Nicht umsonst wird dd für manche als Abkürzung für "disk destroyer" verstanden. Ich empfehle daher zunächst den Betrieb in einem Emulator wie qemu.
Das Programm läuft auf einem PC, ohne auf ein Betriebssystem wie Windows oder Linux angewiesen zu sein. Das BIOS lädt von der Diskette oder USB Stick automatisch den ersten Sektor (die ersten 512 Byte) und prüft, ob die letzten zwei Bytes der Signatur 0xAA55 entsprechen. Ist dies der Fall, so wird der Inhalt des Sektors ausgeführt.
Innerhalb dieses Bootsektors werden die restlichen 3 Sektoren nachgeladen und der Grafikmodus mit 320x200 Pixeln und 256 Farben gestartet. Die Bilder und die Schrift befinden sich in einem leicht komprimierten Format in der Datei vor und werden daher zunächst entpackt. Anschließend wird das Spiel gestartet.
Das gesamte Programm arbeitet im alten 16 Bit Real Modus, der selbst von den modernsten Intel und AMD Prozessoren noch unterstützt wird. In der 2016er Variante dieses Spiels wurde außerdem ein HLT Befehl eingeführt, der nach jedem Zeichenvorgang des Bildschirms den Prozessor bis zum nächsten Bild ruhen lässt, um Energie zu sparen. In der 2004er Version lief der Prozessor die gesamte Zeit auf Volllast.
Minimalanforderung ist ein 80186er CPU, etwa 256 KiB Ram, VGA Grafik mit 320x200 Pixel, 256 Farben, Diskettenlaufwerk
Ein solcher Computer dürfte etwa Mitte bis Ende der 1980er modern gewesen sein.
Impressum | Datenschutzerklärung | [*]: externer Link | thilo.ackermann@gmail.com