Table Of ContentFranzis Computer-Praxis
Rolf-Dieter Klein
Basic-Interpreter
Funktionsweise und Implementierung
in 8080/z -80-Computern
Mit 43 Abbildungen
Franzis!l
In der Reihe
Franzis Computer-Praxis
sind erschienen:
Klein, Mikrocomputersysteme
Klein, Mikrocomputer Hard- und Softwarepraxis
Klein, Z-80-Applikationsbuch
Plate, Pascal: Einführung - Programmentwicklung - Strukturen
CIP-Kurztitelaufnahme der Deutschen Bibliothek
Klein, Rolf-Dieter:
Basic-Interpreter: Funktionsweise u. Implementierung in 8080/Z-80-Computern / Rolf-Dieter
Klein. - München: Franzis, 1981.
(Franzis-Computer-Praxis)
ISBN 3-7723-6941-3
© 1982 Franzis-Verlag GmbH, München
Sämtliche Rechte, besonders das Übersetzungsrecht, an Text und Bildern vorbehalten.
Fotomechanische Vervielfältigungen nur mit Genehmigung des Verlages.
Jeder Nachdruck - auch auszugsweise - und jegliche Wiedergabe der Bilder sind
verboten.
Satz: SatzStudio Pfeifer, Germering
Druck: Franzis-Druck GmbH, Karlstraße 35, 8000 München 2
Printed in Germany . Imprime en Allemagne
ISBN 3 -7723-6941-3
Vorwort
Basic ist als Programmiersprache wohl je Einführung Über die unterschiedliche Ar
dermann geläufig, der sich mit Mikrocom beitsweise von Interp~etern-undCompller
putern beschäftigt. S~ho~bi~her wurde wlr(rdas';~RiYitBa'sjc,jaiinand eInes fT2""
vi~l Ü~erBasic gesc~ileben"'~'die'"A;t'd';r stings und Syntaxdiagramme ausführlich
Piog~amm"ieiung;die ~'e~s~hied enen Dia behandelt. Dann folgt ein Abschnitt, der
lekte, aber kaum ej}Vasjjber die Realisi~ insbesondere den Z80-Besitzern gilt: ein
rung V()nB~~i~=rr;'terpret;;;~-Hie;:sorrntin 12-K Byte-Basic mit sehr leistungsfähigem
-CintK16gHchkelr'gegeoen'werd en, hinter Befehlssatz, und schließlich für Z8000-Be
die Kulissen zu sehen und nicht nur in der sitzer das RDK-Basic als Z8000-Variante,
Lage zu sein, in Basic programmieren zu wobei hingegen der Rest des Buchs Über
können, sondern auch einen Basic-Inter wiegend in 8080-Maschinensprache ge
p~eter selbst zu~chreiDenoder~derthi~~ schrie ben ist.
'erwertern,
DeschrTebe;:;'enjnt~rpreterzu Auch für Leser, die keinen der genann
umzubaue'no~ereigine:laeenliTI1;rufUgen ten Prozessoren besitzen, ist es leicht, die
zu"kÖ-;;~e~. 'D~~~h'da'~be~~ereVersÜindr1is Programme zu verstehen und ggf. für den
der Wifkungsweise eines Interpreters wird eigenen Prozessor aufzubereiten.
der Leser auch in der Lage sein, Basic-Pro Aber auch Leser, die sich "nur" in die
gramme wirkungsvoller zu schreiben und Assem biersprache einarbeiten wollen, wer
manche Eigenheiten besser zu verstehen. den in den Listings viele Tricks und Kniffe
Das Buch gliedert sich im Prinzip in kennenlernen und Einblick in die Program
vier Absclinitte: Nach einer prinzipiellen mierung gewinnen.
Rolf-Dieter Klein
5
Wichtiger Hinweis
Die in diesem Buch wiedergegebenen Schaltungen und Verfahren werden ohne Rück
sicht auf die Patentlage mitgeteilt. Sie sind ausschließlich für Amateur- und Lehrzwecke
bestimmt und dürfen nicht gewerblich genutzt werden.
Alle Schaltungen und technischen Angaben in diesem Buch wurden vom Autor mit
größter Sorgfalt erarbeitet bzw. zusammengestellt und unter Einschaltung wirksamer
Kontrollrnaßnahmen reproduziert. Trotzdem sind Fehler nicht ganz auszuschließen. Der
Verlag sieht sich deshalb gezwungen, darauf hinzuweisen, daß er weder eine Garantie
noch die juristische Verantwortung oder irgendeine Haftung für Folgen, die auf fehler
hafte Angaben zurückgehen, übernehmen kann. Für die Mitteilung eventueller Fehler sind
Autor und Verlag jederzeit dankbar.
6
I
Inhalt
1 Mikrocomputer und Basic ................................ . 9
2 RealisierungsmögIichkeiten von Basic . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.1 Der Interpreter ....................................... . 10
2.2 Der Compiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3 Teilübersetzung als Komprorniß . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 29
3 RDK-Basic .......................................... . 31
3.1 Ein "Tiny Basic" und dessen Einsatz ......................... . 31
3.2 Hardware bei Z80 und Z8000 zum Betrieb des Tiny Basic ........... . 31
3.3 Realisierung des Basic-Interpreters . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.3.1 IjO-Routinen ........................................ . 66
3.3.2 Einfache zeichenverarbeitende Routinen ...................... . 67
3.3.3 Analyse von arithmetischen Ausdrücken . . . . . . . . . . . . . . . . . . . . . . . 70
3.3.4 Befehlsabarbeitung .................................... . 77
3.3.5 Basic-Programmbeispiele. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
3.3.6 ErweiterungsmögIichkeiten des Basic-Interpreters ................ . 93
3.3.6.1 FIießkomma-Arithmetik .................................. . 93
3.3.6.2 Floppy-Anschluß ...................................... . 101
3.3.6.3 Graphik-Erweiterungen .................................. . 101
4 12-KByte-Basic für Z80 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 103
4.1 Anpassung des Basic-Interpreters . . . . . . . . . . . . . . . . . . . . . . . . . . .. 115
4.2 12-KByte-Basic-Befehlsbeschreibung. . . . . . . . . . . . . . . . . . . . . . . . .. 116
4.3 Programmbeispiel ELIZA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 125
5 Anhang. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 129
5.1 Z8000-Basic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 129
5.1 .1 Z 8000-Monitor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 163
5.1.2 Der Basic-Interpreter. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 164
5.2 Literaturverzeichnis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 164
5.3 Glossar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 165
Sachverzeichnis. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 177
7
1 Mikrocomputer und Basic
B.A.S.LC. (Beginners All Purpose Symbol kamen sogar s12~:zi~pe Basic-R~chner wie
ic Instruction Code) wurde 1962 von J ohn ~~Rl~J. .f .~It_.~~~~~XE~~§]~us~~h~;;us.
Kemeny und Thomas Kurtz "e:funden". ~eiMi!cr9forn pute~-N ~uerlt\ViskluI1geI1
Wegen der leichten Erlernbarfiir'und~(re; gi~L.~~. . I1 ~e.fmf!t~i:s~h:9.n:~Shne)1 ~I~en:.dii
einfachen Realisierung wurde es sehr zl!g~n<ir!g~!1 •.1 3.e.~iS-I.ßtt!IJ>E~ter. Basic be
schnell bei Mikrocomputern als Program sitZt 'neben dem großen Vorteil der leich
miersprache eingesetzt und ist jetzt in ten Erlernbarkeit auch den Vorteil, daß
einer Vielzahl von Dialekten und Erweite Programmtests schnell durchgeführt wer
rungen auf dem Markt. den können und mit wenig Aufwand ein
lauffähiges Programm erstellt werden kann.
g,~~lS~,~~.13~.gi!Jn;. .< !eE.Mikro com Pllter~e
schIchte kamenB.a~ls-.Inte.I'PEet~r auf. Sie
wareitzun1ichst sehr einfach und mit vie In den folgenden Kapiteln wird gezeigt,
len Einschränkungen versehen. Basic wur wie es möglich ist, einen Basic-Interpreter
de dann immer weiter ausgebaut, und es zu konstruieren.
9
2 Realisierungsmöglichkeiten von Basic
Der Mikrocomputer hat die Aufgabe, die Basic", und es soll hier wirklich nur das
eingegebenen Basic-Kommandos und Pro Prinzip verdeutlicht werden.
gramme zu verstehen und auszuführen.
Dafür gibt es im Prinzip drei Möglichkei-
ten: ,.. "~=.,"~,,. ~ '.~ .,.,,,.·.o,"=,~~ Die Befehle lauten im einzelnen:
Im ersten Fall versteht der Computer
LOAD (adr) La Laden des auf der
die Basic-Befehle unmittelbar und führt
Adresse "adr" stehen-
sofort, nachdem er~erne;"iraehl verstan
den Wertes in den
den hat, diesen aus. Dies nennt man Inter
Akkumulator.
pretation. Das dazugehörige Maschine!'ip";o
STORE adr Sa Der Inhalt des Akku-
gramrr!wird InterpEtl!tlE genannt.
Dann gibt 'es noch die Möglichkeit die mulators wird auf die
Adresse "adr" gespei-
Basic-Befehle in ein Ma§cllinenprugramm
cher(
umzuvl'ande1fi··una dann auszuführen. Es
~lrdda~~ ein Compiler benötigt. Die dritte ADD (adr) Aa Zum Inhalt des Akku-
Art stellt gewisse:;:maß~n eine Mischung aus mulators wird der In-
In terp!~t.tl!'"1l!!.d.G2!!!r>gtl.r dar, d'IesasTc:·e halt des auf der Adres-
"
:sel'ehle werden in meist.ein ~xte langtlAb se "adr" stehenden
kürzungen ("Token;;','int~rn~Darstellung) Wertes addiert. Das
umgewandelt, und diese werden nach Ergebnis steht also
"RUN" interpretiert. Im folgenden sollen im Akku.
diese drei Arten anhand von kurzen Bei
NEG Nd Der Inhalt des Akku-
spielen weiter verdeutlicht werden.
mulators wird bitwei-
se komplementiert.
"d" steht für
"dummy" und be-
2.1 Der Interpreter
sitzt keine Bedeutung,
muß allerdings vor-
Ein Basic-Befehl wird erkannt und dann
handen sein.
sofort ausgeführt. Um die Arbeitsweise
eines Interpreters besser verstehen zu kön JUMP adr Ja Sprung auf die Adres-
nen, soll eine kleine Programmiersprache se "adr" im Pro-
erfunden werden, für die ein Interpreter gramm teil, dort wird
gebaut wird. der nächste Befehl
Die Programmiersprache besteht aus ausgeführt.
einbuchstabigen Befehlen, die von einem JMPNZ adr Ia Falls der Inhalt des
weiteren Byte, dem Operanden gefolgt Akkumulators un-
sind. Sie ähnelt damit zwar mehr einer As gleich Null ist, wird
sembiersprache für einen Prozessor, als ei auf die Adresse "adr"
ner höheren Programmiersprache, doch im Programmteil ge-
sonst wären wir ja schon bei dem "RDK- sprungen.
10
2.1 Der Interpreter
OUTHEX (adr) Oa Der Inhalt der Spei und Programm teile auch vom Programm
cherzelle auf "adr" fiernlchfeITeicl1bäfslrid:~DÖchdas ·is'fähn
in sedezimaler (hexa lieh zuBasic, denn dort kann imNorr6'al~
dezimaler) Form auf (atlalicnrücht vom Progra~~aus~~fdas
die Konsole ausgege P~ogr;~~~~ibst zugegrrtfenweraen~ Eln
ben. Programm in unserer Programmsprache
sieht z.B. wie folgt aus:
GETHEX (adr) Ga Von der Konsole wird
ein sedezimaler (hexa
G~$ G~l L~~ A~l S$$ O~~ H$~
dezimaler) Wert geholt
(Parameter in Sedezimal)
und auf die Speicher
zelle "adr" geschrie
Ein Speicherauszug (sedezimal) sieht wie
ben.
folgt aus:
CRLF Cd Es wird ein Carriage
Return Line Feed 47 ~~ 47 $1 4C ~~ 41 ~l 53 ~~ 4F ~$ 48 ~~
(CRLF, Wagenrück
laufjZeilenvorschub) Das Programm bewirkt das Einlesen zweier
an die Konsole ausge Zahlen, addiert diese, dann wird die Summe
geben. "d" steht ausgegeben und das Programm mit einem
wieder für "dummy", Halt beendet.
da bei CRLF keine
Abb. }.1-1 zeigt die Hauptschleife des
zusätzlichen Parame
Interpreterprogramms. Als erstes wird der
ter nötig sind.
Programmzähler mit einem Startwert vor
ZEICH(adr) Za Der Inhalt der Spei- besetzt. Von dieser Adresse wird nach dem
cherzelle "adr" wird erstmaligen Start des Interpreters der erste
als ASCII-Zeichen in Befehl geholt.
terpretiert und dann Nun beginnt die eigentliche Schleife. Es
auf der Konsole aus wird der Befehl vom Speicher geholt. Da
gegeben. bei wird hier die Befehlskurzbezeichnung
HALT Hd Das Programm ist be sowie der darauf folgende Datenwert gela
endet und es wird den. Daher ist es auch nötig, im Programm
ein Stop ausgeführt. immer einen Parameter mit anzugeben,
"d" steht für auch wenn der Befehl selbst ihn gar nicht
"dummy", da kein benötigt, zum Beispiel beim HALT-Befehl.
weiterer Parameter Der Programmzähler wird dann erhöht -
nötig ist. in unserem Fall um den Wert zwei, da ein
Befehl zwei Speicheradressen belegt. Es
folgt nun die Abfrage auf die einzelnen Be
Die hypothetische Maschine mit dem obi
fehle. Trifft einer der Fälle zu, so wird das
gen Befehlssatz besitzt einen Akkumulator
dazugehörige Teilprogramm angesprungen.
und kann 256 Bytes Programm und 256
Wurde kein Befehl erkannt, so wird auf
Bytes Daten adressieren.
eine Fehlerroutine gesprungen.
Ein Programm wird durch Hintereinan
derschreiben der obigen Befehle gebildet. Abb. 2.1-2 zeigt die einzelnen Teilpro
Dabei werden Parameter in binärer Form gramme. Bei LOAD zum Beispiel wird der
direkt hinter das Befehlswort geschrieben. Parameter des Befehls als Adresse interpre
Eine Besonderheit ist, daß Daten adreß tiert und der Inhalt dieser Speicherzelle
mäßig vom Programm völlig getrennt sind wird in den Akkumulator geladen. Beim
11
2 Realisierungsmöglichkeiten von Basic
Abb. 2.1-1 Hauptschleife
des Interpreters
lade Befehl
Speichere Befehl
Addieren
Negieren
Sprung unbedingt
Abb. 2.1-2 Teilprogramme des Interpreters
Sprung, wenn nicht 0
Hex Ausgabe
STORE-Befehl ist es entsprechend umge
kehrt. Beim Sprungbefehl JUMP wird der
>-:....------ Hex Eingabe Parameter direkt in den Programmzähler
gespeichert und damit der Sprung ausge
führt. Beim bedingten Sprung wird zuvor
noch der Akkumulatorinhalt auf Null ge
Carriage return
testet und der Sprung ausgeführt falls der
Inhalt ungleich Null ist.
Beim HALT-Befehl wird die Programm
Zeichenausgabe
ausführung gestoppt und eine Meldung
auf der Konsole ausgegeben. Es wird an
schließend gewartet bis eine Taste betätigt
Halt der CPU
wurde und dann der Interpreter von neuem
gestartet (Rücksetzstart). Tritt ein Fehler
auf, so geschieht genau das Gleiche. Es
wird nur eine andere Meldung ausgegeben.
12