SOL Computerspiele

Computerspiele für CP/M-Maschinen vorzugsweise in BASIC gibt es etliche (z.B. hier).

Für ein älteres Computermodell (SOL-20, gebaut zwischen 1977 und 1979 von der Processor Technology Corporation) habe ich im Internet einige Spiele gefunden, die alle in Assembler geschrieben sind. (Eine gute Seite für diese Maschine ist A Sol-20 Web Page). Die Programme basieren zwar nicht auf CP/M, sind aber einfach zu portieren.

Mehr Spiele und andere Software für SOL finden sich hier. Die Spiele sind übrigens alle in Intel 8080-Mnemonic geschrieben. Zum Wandeln in Z80 Code gibt es aber z.B. das Programm XIZ.COM. (Hier mit dem Gegenstück XZI.COM als XIZI-3.LBR)

SOL-Computer

Diese Maschine unterscheidet sich vom JOYCE dadurch, dass sich der Videobereich im normalen Arbeitsspeicher befindet. Dadurch kann durch ein einfaches Schreiben in den Speicher ein Zeichen dargestellt werden. Durch ein einfaches Lesen kann demnach auch der Inhalt des Bildschirms ermittelt werden.
Dies ist beim JOYCE gänzlich anders. Ich habe deshalb den Videospeicher des SOL in den normalen Speicherbereich des JOYCE gelegt. Dadurch kann durch einfaches Lesen der Inhalt des Bildschirmspeichers ermittelt werden. Ein Schreiben in diesen Speicher allein genügt nicht - Zeichen müssen auch noch auf den Bildschirm ausgegeben werden undzwar an die richtige Stelle. Für die Analyse von SOL-Programmen habe ich einen Simulator geschrieben.
Eine weitere Besonderheit ist, dass der SOL über Sonderzeichen verfügt, die der JOYCE nicht besitzt.

Ich habe versucht, die Spiele auf den JOYCE mit wenig Aufwand zu portieren. Die Vorgehensweise war dabei wie folgt:

Hier zunächst einige Hilfsdateien:
SOLVDM.LIB Eine Definitionsdatei für SOL. Hier sind die Hexwerte für die SOL-Zeichen sowie die Macros für die RST-Befehle definiert. Außerdem findet sich hier die Anweisung .request solcpm, die die nachfolgenden Routinen beim Linken automatisch lädt. Diese Datei sollte mit include solvdm.lib in das zu assemblierende Spiel eingelesen werden.
SOLCPM.MAC Eine Sammlung von Routinen für
 
die SOL Zeichendefinitionen Tabellen für die neuen Zeichen und Routinen zum verändern der Zeichenmatizen.
einige SOL Routinen Routinen für den Zugriff auf den Bildschirmspeicher.
einige JOYCE Routinen Dies sind Routinen für die Bildschirmsteuerung, wie Cursorpositionierung, Bildschirm löschen.
einige CP/M basierende Routinen Routinen für die Tastatureingabe und Bildschirmausgabe.
Hier nun die von mir angepassten und am JOYCE getesteten SOL-Quelldateien:

CHASE.MAC
Dies ist ein klassisches Spiel. Der Spieler steckt in einem Raum mit elektrischen Wänden und elektrischen Hürden. Das Spiel wird noch durch Zombie-Roboter erschwert, die den Spieler fangen wollen. Für jeden Zug des Spielers machen die Roboter ebenfalls einen Zug. Ziel des Spiels ist, den Robotern zu entkommen, ohne selber in die elektrischen Hürden zu geraten. Gleichzeitig muss versucht werden, die Roboter in den Hürden zu vernichten.
PONG.MAC
Tennis - was sonst?
Es gibt drei Spielemodi:
  1. Solo
  2. Aufwärmspiel
  3. Spiel gegen den Computer
TARGET.MAC
In diesem Spiel steht der Spieler an einer festen Stelle am linken Bildschirmrand und versucht mittels einer beliebigen Taste, ein bewegliches Ziel am rechten Bildschirmrand abzuschießen. Das Spiel ist ziemlich sinnlos.
PIRANHA.MAC
Ein nettes kleines Spiel. Kleine Piranhas (als Sternchen '*') schwimmen herum und wenn der Spieler sie berührt, stirbt er. Je länger der Spieler überlebt, desto mehr Punkte gibt es. Die Fische verhalten sich unterschiedlich: manchmal treten sie als Schwarm auf, manchmal schwimmen sie nur vorbei.
Wird eine Kontrolltaste zweimal betätigt, erhöht sich die Geschwindigkeit.
DEFLECT.MAC
Deflect ist ein Spiel mit ein oder drei Zielen, in die ein Spielstein mittels Deflektoren (/ und \) gelenkt wird. Es ist eine Spielzeit vorgegeben, innerhalb der der Stein vernichtet werden muss.
ROBOT.MAC
Dies ist kein wirkliches Spiel, sondern lediglich die Demonstration für die Bewegung einer Figur innerhalb abgesteckter Grenzen.
GALAXY.MAC
Sternenschießen - Ein logisches Puzzle, das aus der gegebenen Konstellation den Zielstand erreicht. Das Spiel enthält eine kleine abrufbare Hilfe.
Die oben aufgeführten Programme liegen auf der SOL-20 Web Page als 8080-Quelldateien (.ASM), die folgenden Programme als Binärdateien (.ENT1) vor. Die Dateien sind aber keine „echten" Binärdateien sondern im ASCII-Format, ähnlich dem DUMP-Listing. Z.B.:
ENTER 0000
0000: 00 00 00 00 C3 5A 06 19 D2 20 45 20 D6 20 45 20
    ....
    ....
0DD0: 00 00/
Das Synchronisationselement ENTER kann auch EN sein. Die folgende Startadresse besteht aus einer bis vier hexadezimalen Ziffern.
Um diese in eine Binärdatei zu wandeln, habe ich ein Programm zur Wandlung geschrieben, hier als (MALLARD-)BASIC- und hier als (TURBO-)PASCAL-Version.
Beim WEB-Download wird das Zeilenende oft wie bei Unix als Line Feed (0X0A) und nicht wie bei CP/M als Carriage Return/Line Feed (0X0D 0X0A) übertragen. Ebenfalls fehlte oft das Zeichen für End of File (0X1A). Dadurch konnte das PASCAL-Programm abstürzen. Hier findet sich eine korrigierte (TURBO-)PASCAL-Version.
Bei der Diassemblierung finden sich Adressen im Bereich des SOL-Video-Speichers. Dieser Speicher ist aufgebaut aus 16 Zeilen à la 64 Spalten, er beginnt bei Adresse 0xCC00 und endet bei Adresse 0xCFFF. Zur Berechnung der Koordinaten (Zeile und Spalte) aus der Video-Adresse habe ich ebenfalls ein kleines Programm geschrieben, hier als (MALLARD-)BASIC- und hier als (TURBO-)PASCAL-Version.
SREVERSI.MAC
(Disassembliertes Original)
Ziel des Spiels ist es, die eigenen Steine so zu setzen, dass sie gegnerische Steine entlang einer geschlossenen Linie (horizontal, vertikal oder diagonal) einschließen. Dadurch werden die Steine des Gegners in eigene Steine umgewandelt.
1. 2006 stand ein Artikel in der Usegroup comp.os.cpm, in dem Bill Sudbrink ein Programm vorstellte, dass eine .ENT-Datei in den Speicher lädt und dort ausführt.
Ebenfalls 2006 stellte Emmanuel Roche ("French Luser") in dieser Usegroup einen "ENT-to-COM File Converter" vor, geschrieben in BASIC (hier korrigiert).