Weltraumschlacht SPACE
BASIC auf 8-Bit Homecomputern war schon etwas ganz anderes als ein programmierbarer Taschenrechner, der gerade mal Zahlen anzeigen und allenfalls das Display zum Blinken bringen konnte. 40x25 Zeichen Bildschirm füllen sich aber unter BASIC vergleichsweise langsam. Die Wünsche wachsen schnell in den Himmel, die Möglichkeiten bleiben begrenzt. Bis dann irgendwer (wahrscheinlich mein hervorragender Mathematik- und Physiklehrer Gerhard Fuchsenberger) irgendwas gehört hat, es gäbe da was, Maschinensprache, das Schnellste was geht und überhaupt...
SYS 1024
hieß das digitale Sesam öffne dich. Hexadezimale Gedichte im achtsilbigen Blankvers. Es dauert Tage, bis ich die Grundidee von Maschinencode mit Hilfe von Chuck Peddles "Programming the 6502" wenigstens halbwegs verstanden hatte. Dann konnte ich endlich mit wenigen hexadezimalen Zahlen mit einem blitzschnellen Wisch den Bildschirm putzen. Diese kurze Schleife war auch der Anfangspunkt für das hier gezeigte Weltraumspiel. Neue Programme schreibt am besten auf einem leeren Bildschirm.
Das Programm bietet eine rudimentäre 3D-Grafik. Ein Sternenfeld in Fluchtpunktperspektive, durch das man hindurchfliegt. Gelegentlich kommt ein gegnerisches Raumschiff entgegen, das es mit einem Fadenkreuz abzuschießen gilt. Trifft man nicht, verliert man einen kleinen Anteil der Schutzschilde und sind die auf null, ist das Spiel zu Ende und man hat verloren. Schießt man statt dessen alle Gegner ab, ist ebenfalls Schluss, aber man hat immerhin gewonnen. Keine voreiligen Hoffnungen: Man verliert immer. Denn mit jedem abgeschossenen Gegner wird das Spiel schneller. So schnell, dass man irgendwann keine Chance mehr hat. Das Beste, was ich je erreicht habe, waren 9 verbliebene Gegner.
Um schon vorher zu erfahren, ob der nächste Gegner links unterhalb oder in der Mitte oberhalb vorbeifliegt, gibt es einen Radarschirm, auf den man jederzeit umschalten kann.
Das Spiel ist 100% Maschinenprache. Kein Assembler, denn einen solchen hatte ich nicht zur Verfügung, wußte noch nicht einmal, dass es so was überhaupt gibt Deswegen ist das ganze Programm von Hand übersetzt und im Hexdump eingegeben. Überlebt hat nur ein langer Ausdruck auf grün-weißes Computerpapier, erstellt am letzten Schultag im Juni 1982. Gut 35 Jahre später habe ich die Zahlenkolonnen erneut eingetippt und siehe da: Eine Seite fehlt. Glücklicherweise nur ein Teil mit dem PETSCII Code der Bildschirmgrafik, der leicht zu rekonstruieren war. Jetzt geht es wieder!
Einige meiner damaligen Idiotien zeigen sich im Disassembler:
- Wegen einer irrationalen Abneigung gegen negative Hexadezimalzahlen sind alle bedingten Rückwärtssprünge als absolute Sprünge ausgeführt. Solche Befehle kennt der 6502 aber gar nicht. Also invertiert man die Sprungbedingung und überspringt mit einem Offset von +3 den absolut codierten Rückwärtssprung.
- Die indirekten Adressierungsarten über die Zeropage des Prozessors hatte ich noch nicht verdaut. Indirekte LDA und STA Befehle gibt es daher nicht sondern sind als selbstmodifizierender Code ausgeführt. Die Absolutadresse wird direkt im Programmcode hinter dem Opcode des Befehls berechnet. Aus heutiger Sicht ein Unding: Weder ROM fähig noch in schreibgeschützten Code-Segmenten unterzubringen. Aber wozu hat der 6502 denn eine Neumann Architektur, wenn nicht dafür? Wer etwas dagagen hat, kann auf Systeme mit Havard Architektur ausweichen.
Download
- Download von SPACE als Disk Image
- Learning English Part I - A short description of the space battle game
Screenshots
Probleme
Ein kleines Problem:
- Die Tasturbelegung entspricht 100% dem Originalspiel von 1982. Es benutzt den Ziffernblock zur Bewegung des Fadenkreuzes, weswegen auf den meisten Notebooks der Zifferblock mit irgendeiner Fn-Taste aktiviert werden muß. Dann ist aber die Taste "M" zum Umschalten auf den Radardschirm nicht mehr erreichbar. Möglicherweise ändere ich das noch.