Neulich habe ich den vielleicht schnellsten Einstieg in eine Altair Simulation beschrieben (Altair Simulation) Nun mangelt es dem beschriebenen System mit dem 8k-Basic an jeglichem Speichermedium und damit natürlich auch einer praktischen Nutzbarkeit, da man wohl nicht jedes mal ein Programm neu eintippen möchte.
Diesen Mangel möchte ich heute beheben. Dafür wollen wir das Disk-Basic 5.0 nutzen, das man auch auf der Website von Peter Schorn findet (Altair Programming Languages).
Grundsätzlich braucht man für eine Simulation die Software in einer Form, mit der SIMH etwas anfangen kann. Je nach Rechner können das Disketten-, Festplatten-, Tape- oder Binär-Dateien sein. Für das Disk-Basic 5.0 gibt es die Software als Binärdatei (disbas50.bin). Dann brauchen wir noch eine Diskette zum Speichern der Programme, die wir erstellen wollen (disbas50.dsk) und eine SIMH-Kommando-Datei (disbas50). Bei mir sieht das dann so aus:
Dazu natürlich noch den eigentlichen Simulator altairz80.exe oder altairz80_x86-64.exe
Der Schwerpunkt liegt diesmal darauf, im Detail zu verstehen, was das Kommando-Skript disbas50 im Detail eigentlich tut, weil das einiges darüber verrät, wie der Simulator funktioniert. Dazu habe ich das Listing so kommentiert, dass jedes Kommando in seiner Verwundung beschrieben wird.
;*
; SIMH-Altair Konfigurationsscript für das Altair BASIC 5.0 von Peter Schorn https://schorn.ch/altair.html
; Kommentare von Meinolf Koshors https://blog.koshors.de
; Die Zeilen mit den Kommandos habe ich der Lesbarkeit halber auf Großbuchstaben umgesetzt
;*
; Es handelt sich hier um eine Folge von SIMH-Kommandos, die sequentiell abgearbeitet werden
; Alle Kommandos können prinzipiell auch im Simulator manuell ausgeführt werden
; Zeilen, die mit einem Semikolon beginnen sind Kommentare
;*
; Erst einmal die Maschine zurücksetzen, damit alles im Ausgangszustand ist.
; Der Speicher ist damit komplett leer –>
RESET CPU
; Für basic50 benutzen wir die original Altair CPU, ein Intel 8080 Prozessor –>
SET CPU 8080
; Damit der Computer sich mit seiner Umwelt unterhalten kann, brauchen wir eine Schnittstelle
; der Altair wurde mit einer Serial-IO-Ccard (SIO) ausgeliefert, die wir jetzt konfigurieren
; Wenn hier keine andere Verbindung, etwa zu einem Terminal-Programm wie PuTTY hergestellt wird
; dient die Konsole des Simulators auch als Ausgabemedium für den Rechner
; Alle Zeichen in Großbuchstaben –>
SET SIO UPPER
; ANSI Zeichensatz –>
SET SIO ANSI
; Im Original dieses Scripts wird das Altair Boot-ROM aktiviert. Damit stimmt die obige Behauptung,
; dass der Speicher komplett leer ist nicht mehr. Von FF00 bis FFFF liegt die Boot-Routine im Speicher.; SET CPU ALTAIRROM
; In diesem Beispiel füllen wir jedoch den Speicher mit der Software, indem wir mit SIMH-Mittel
; (LOAD, s. u.)den Binärcode direkt in den Speicher schrieben. Da wir also gar nicht von Diskette booten wollen,
; wird das BOOT-ROM auch nicht benötigt. –>
SET CPU NOALTAIRROM
; Viele Kommandos in SIMH können abgekürzt werden. Ein Beispiel dafür ist d = = deposit
; Das Kommando deposit speichert einen Wert in ein Register oder eine Speicherzelle
; Hier bewirkt „D TRACKS[0-7] 77“, dass höchste Spurnummer für alle 8 Laufwerke (0-7) auf 77 gesetzt wird –>
D TRACKS[0-7] 77
; „at“ als Abkürzung für „Attach“ hängt die Disk 0 an und ordnet die Datei disbas50.dsk als medium zu,
; d. H. es wird eine – bereits beschriebene oder leere – virtuelle Floppy Disk eingelegt –>
AT DSK DISBAS50.DSK
; Der echte Altair hatte ein Frontpanel mit einer Schalterreihe, die Speicherinhalte manipulieren konnten
; Im Original dieses Scripts wird mit dem Kommando d = deposit das Register SR für die Frontpanel-Schalter auf 8 gesetzt
; Das wird aber für BASIC 5.0 nicht benötigt und ist darum hier auskommentiert
; D SR 8
; Nun wird die Binärdatei disbas50.bin in den Hauptspeicher unseres simulierten Altair Computers geladen
; Bisher ist unser Rechner vollkommen leer und hat auch kein Betriebssystem. Darum wird der Maschinen Code für Basic 5.0 auf diesen Weg geladen
; Der Ladebefehl beginnt mit Speicherstelle 0 und schreibt Byte für Byte aus der Datei fortlaufend in den Hauptspeicher
; Die Binärdatei ist einfach eine Folge von Bytes (0-255) und ansonsten fortmatfrei. Mit einem Hex-Editor kann man sich die anschauen und auch verändern
LOAD DISBAS50.BIN 0
; Und jetzt gehts los: „g“ steht für „go“. Das Kommando befiehlt der CPU endlich loszulaufen. Der Wert nach dem GO – hier 0 – wird in den Program-Counter PC
; geschrieben. Das ist ein Prozessorregister, in dem jeweils die Adresse des nächsten ausführbaren Befehls steht
; geschrieben und dann läuft der Prozessor los
G 0
; Die folgenden Zeilen sind die Ausgabe des BASIC 5.0 nach dem Start. Es lassen sich beim Start Parameter anpassen ; und sinnevolle Eingaben zum Ausprobieren werden gezeigt. Das ist – außer beim Drucker – immer Enter ;*
;
; MEMORY SIZE?
; LINEPRINTER? C
; HIGHEST DISK NUMBER?
; HOW MANY FILES?
; HOW MANY RANDOM FILES?
;
; 42880 BYTES FREE
; ALTAIR BASIC 5.0 [14JUL78]
; [DISK EXTENDED VERSION]
; COPYRIGHT 1978 BY MITS INC.
;
; OK
; Nun sind wir im Basic und müssen das Diskettenlaufwerk nutzbar machen ;*
; MOUNT 0
; OK
; Der Befehl FILES zeigt an, was sich auf der Diskette befindet – beim ersten Versuch das Systemprogramm PIP ;*
; FILES
; PIP
; OK
; Mit LOAD holt man ein Programm – hier PIP in den Speicher und kann sich das mit LIST anzeigen lassen ;*
; LOAD „PIP“
; OK
Mit den drei Dateien im Verzeichnis starten wir SIMH und führen die Kommandodatei mit DO DISBAS50 aus
Der Load-Befehl meldet, dass er 23901 Bytes an Maschinen-Code geladen hat.
Die folgenden Fragen beantworten wir mit [Enter],C,[Enter],[Enter],[Enter] und schon meldet sich Basic zur Stelle und meldet, dass wir nich reichlich Platz für Programm und Daten zur Verfügung haben – nämlich etwas mehr als 40 kByte
Jetzt müssen wir dem Basic noch mitteilen, dass wir ein Diskettenlaufwerk zur Verfügung haben. Das tut der Befehl MOUNT mit Angabe des Laufwerks (0 ist das erste).
Damit ist unser Basic bereit zum Programmieren. Zum Vergleich tippen wir das Programm zur Berechnung von e noch mal ein – ich habe das dazu noch leicht modifiziert.
Und starten das Programm mit RUN. Bei 17 Iterationen stimmt der ermittelte Wert an allen Stellen im Rahmen der numerischen Genauigkeit dieser Basic-Version überein.
Mit den klassischen SAVE- und LOAD-Befehlen kann man das Programm jetzt speichern und nach einem Neustart auch wieder laden
Der Befehl FILES listet den Inhalt der Diskette
Soviel für heute – viel Spaß beim Ausprobieren!