Nascom Journal

  

September 1982 · Ausgabe 9

Seite(n) für Einsteiger

von Günter Böhm

NASBUG/​Nassys

Immer noch geistern Unmengen von Programmen herum, die ursprünglich für das Betriebssystem NASBUG T2 oder T4 geschrieben wurden. Die meisten Leser haben aber inzwischen auf Nassys umgestellt, und da verwundert es nicht, daß der Wunsch geäußert wird, doch einmal zu erklären, wie man ein Programm für das neue Betriebssystem umschreibt. Dies soll hiermit geschehen. Was sind eigentlich die grundsätzlichen Unterschiede zwischen den Betriebssystemen NASBUG und Nassys?

1. Die NASBUG-Programme können bei C50 beginnen (und tun es auch meist, um die Kapazität des Speichers der Grundversion Nascom1 voll auszunutzen). Nassys benötigt aber selbst einen Speicher bis C7F, weshalb die Programme erst ab C80 beginnen können. Ein NASBUG Programm muß also zunächst verschoben werden. Wer einen Disassembler besitzt (NASDIS), kann den Maschinencode (das sind diese unendlichen Reihen von Ziffern und Buchstaben ) disassemblieren und dadurch in eine lesbarere Form umwandeln. Der so entstandene Assemblertext kann mit Hilfe eines Assemblers (ZEAP oder ASM) durch einfaches Umschreiben der Ursprungsadresse (ORG=origin=Ursprung) auf eine beliebige Adresse gelegt werden. Noch schöner ist es selbstverständlich, wenn ein Programm schon im Assembler vorliegt. Die Möglichkeit, relativ einfach Veränderungen an einem Programm vorzunehmen, ist auch der Grund, weshalb wir Programme bevorzugt in dieser Form veröffentlichen. Was macht man aber, wenn man weder Disassembler noch Assembler besitzt? In ersterem Fall bleibt nichts anderes übrig, als in mühsamer Kleinarbeit unter Benutzung des Z80 Manuals den Maschinencode Stück für Stück in Assembler zu übersetzen. Die einfachste Art., das Programm dann per Hand zu verschieben, ohne unnötige Fehler zu machen, wäre dann wohl, vor jede Adresse eine 1 zu schreiben, Dadurch ist das Programm, was seine Lage im Speicher betrifft, mit Nassys lauffähig.

Zum besseren Verständnis hier ein praktisches Beispiel:

Maschinencode (Hexdump)

 0C50  3E FE
 0C52  32 03 0F
 0C55  3E 05
 0C57  32 07 0F
 0C5A  EF 1E 00
 0C5D  21  5F 0F
 0C60  11 CA 0B
 0C60  11 CA 0B
 0C63  01 0C 00
0C66 CD 01 0D

(Bis auf die letzte Zeile ist das Hexdump dem Morsetrainer von Herrn Toss entnommen. Die weiteren Beispiele stammen aus demselben Programm).

Disassemblierter Text:

0C50 LD A,-2
0C52 LD(F03),A; (Wer den Original-Quelltext besitzt liest hier LD (Klang+1),A. Durch den Namen, der der Adresse gegeben wurde (Label), wird das Programm verständlicher. Man weiß dann sofort, daß diese Speicheradresse etwas mit der Tonausgabe zu tun haben muß).

0C55 LD A, 5
0C57 LD (F07),A
0C5A RST 40 ; (Die RE­START Befehle springen an eine bestimmte Adresse im Monitor. Zum Glück sind sie bei allen Nascom Betriebssystemen gleich und bereiten keine Schwierigkeiten. RST 40 ruft die Stringausgabe auf den Bildschirm auf (PRS=Print String).

0C5B 1E (T4 Clear Screen; das lautet bei Nassys 0C. Unterschiedlich ist auch 1F – New Line, das bei Nassys 0D heißen muß. Alle anderen Bildschirmsteuerbefehle sind gleich).

0C5C 00 Ende des Strings. ZEAP würde beide Befehle als DEFW (Definiere Wort) 1E darstellen.

0C5D LD HL,F5F (im Original LD HL,Titel)
0C60 LD DE,0BCA
0C63 LD BC,12
0C66 LDIR
0C68 Call 0D01 (rufe Unterprogramm)

Durch die Eingabe ORG L1000 würde der Assembler die Adressen automatisch verschieben:

0C50 = 1000
0C52 = 1002
0C55 = 1005 und so weiter.

Die vorgeschlagene Änderung per Hand ergäbe:

0C50 = 1C50

0C52 = 1C52 und so weiter (man denkt sich eben immer die EINS dazu).

So geschieht das auf dem Papier. Liegt das Hexlisting auf Cassette vor, so kann es eingelesen und durch einen „COPY“-Befehl leicht verlegt werden. Im Beispiel:

CC50 1C50 XXXX

Seite 14 von 28