Funkamateur 01 bis 04/87 |
Wenn man selbst Maschinenprogramme mit dem "AC1" entwickeln will, so
ist dafür ein Assembler sehr hilfreich. Er
verhindert zumindest die syntaktischen Fehler, spart Zeit und erlaubt
eine ordentliche Dokumentation der Programme.
Ist ein Drucker vorhanden, kann man sich auch das Assembler-Listing
ausdrucken lassen. Dann ist es sicher etwas
leichter, möglichst schnell die gemachten Denkfehler zu finden.
Angeregt und unterstützt von Jürgen, Y23LA, wurde der
Editor/Assembler nach [1]
weiter analysiert, für den
"AC1" angepaßt und mit einer speicherökonomischeren
Quellstruktur versehen, außerdem der Kommandoumfang
und damit der Service um etliche Befehle erweitert. Auch das Anlegen
und Verarbeiten einer Unterprogrammbibliothek
wird durch die neu geschaffene Möglichkeit der
Sekundärquellenverarbeitung unterstützt. Einen ersten
Eindruck über
die Leistungsfähigkeit dieses etwa 5 KByte langen Programms
vermittelt sicher auch das in [2]
abgedruckte Listing
zur Prüfsummenroutine für den "AC1", das mit EDAS*4 erstellt
wurde.
EDAS*4 enthält einen Zweilauf-Assembler, der bei entsprechender
Option den erzeugten Maschinenkode gleich auf den
zugehörenden Speicherplatz lädt. Er verarbeitet die Mnemoniks
größtenteils entsprechend der Syntax, wie
sie z.B. der U-880-Assembler unter dem UDOS-Betriebssystem akzeptiert [3], [4]. Eine
Aufstellung der
verwendeten
Mnemoniks wird am Ende dieses Beitrages gegeben. Die erstellten
Quelltexte sind mit dem "AC1"-Monitor auf Kassette
abspeicherbar und frei verschiebbar. Die Argumentzellen werden beim
Verlassen von EDAS*4 entsprechend geladen.
EDAS*4 erfordert einen erweiterten "AC1" (32 Zeilen, Kleinbuchstaben,
Speichererweiterung ab 4000H).
Nicht zuletzt um dem Anbieten wenig helfender
"Nachnutzungs-Werbeartikel" wirkungsvoll zu begegnen, wird es bei
diesem Beitrag einmal anders gemacht. Das heißt, nachfolgend wird
das vollständige Listing (leider lassen sich
bespielte Kassetten immer noch nicht drucken!) und eine
Kurzbeschreibung in Form eines
Arbeitsblattes veröffentlicht.
Eine ausführlichere Beschreibung folgt in der
weiteren Fortsetzung des Beitrages. Die beiden
Teile des Arbeitsblattes veröffentlichen wir in der Ausgabe 2/1987
unserer Zeitschrift. Vorerst kann man das
Listing eintippen, die Eintippfehler suchen und anhand der
Arbeitsblätter gleich losprobieren. Wer mit der Kurzbeschreibung
(Arbeitsblatt), die als Gedächtnisstütze gedacht ist, nicht
klar kommt, muß auf die nachfolgende ausführliche
Beschreibung warten.
Viel Spaß beim Eintippen wünschen Y27XO, Y23LA und Y21SO.
[1] | ZEAP 2.0 - 4K-Assembler/Editor, NAS - Elektronische Halbleiter GmbH, München |
[2] | Heyder, F.: Falsche Bytes - schnell gefunden, FUNKAMATEUR 35 (1986) H.11, S.565/566 |
[3] | Claßen - Oefler: Wissensspeicher
Mikrorechnerprogrammierung, VEB Verlag Technik, Berlin 1986 |
[4] | Barthold, H., Bäurich, H.: Mikroprozessoren -
Mikroelektronische Schaltkreise und ihre Anwendung, Amateurreihe electronica, Band 222/223 und 224/225, Militärverlag der DDR, Berlin 1985 |
355 KByte | 331 KByte | 332 KByte |
Teil 1 | Teil 2 | Teil 3 |
291 KByte | 310 KByte | 65 KByte |
Teil 4 | Teil 5 | Teil 6 |
Nachfolgend wird genauer auf die Anwendung der
einzelnen Kommandos des EDAS*4 eingegangen. Allerdings kann und soll
es nicht Aufgabe dieses Beitrages sein, das Programmieren in
Maschinensprache selbst zu erläutern.
EDAS*4 besteht aus zwei Teilen. Die zeilenorientierte Editorkomponente
von EDAS*4 gestattet es, Quellprogramme in
mnemonischer Darstellung zu erstellen und zu verändern, sowie die
Programme mit Kommentar zu versehen. Der
Assemblerteil erzeugt aus einer solchen Quelle ein Assemblerlisting.
Und wenn die entsprechenden Optionsbits gesetzt
sind, kann der zugehörende Maschinenkode in den Speicher geladen
(auch mit Offset) und eine Symboltabelle erzeugt
werden. Syntaktische Fehler werden angezeigt. In Zusammenarbeit mit dem
"AC1"-Monitor ist damit ein leichter und
schneller Wechsel zwischen Editieren, Assemblieren und Testen von
Maschinenprogrammen möglich. Da die erstellten
Quellen im RAM stehen und gerade bei Maschinenprogrammen Fehler
auftreten können, die diese dann zerstören, gilt
auch hier: erst Abspeichern - dann Testen.
Die vorliegende Version ist für den Amateurcomputer "AC1" mit
Speichererweiterung (min. 16 KByte), 32 Zeilen/Bild
und Zeichengenerator mit Kleinbuchstaben vorgesehen. Das Programm
selbst belegt den Speicher von 4000H bis 544FH,
sowie den Speicher von 5450H bis 55FFH für Merkzellen. Der
restliche RAM kann als Quelltextspeicher, auch als
Editierpuffer bezeichnet, zugewiesen werden. Die mit EDAS*4 erzeugten
Quelltexte sind frei verschiebbar, d.h.,
ein Quelltext kann z.B. bei einer späteren Weiterbearbeitung an
eine andere Stelle im Speicher gebracht werden,
als die, wo er erzeugt wurde. Es ist nur wichtig, daß dann der
zugewiesene Editierpufferanfang mit dem Anfang des
Quelltextes wieder übereinstimmt. Gegenüber dem Vorbild
werden in EDAS*4-Quelltexten Leerzeichen komprimiert
abgelegt. Damit erhöht sich der Umfang des in einem Zug
erstellbaren Maschinenkodes auf etwa 4 KByte bei voll
aufgerüstetem RAM-Speicher, wobei hier natürlich auch der
Umfang der Kommentare eine Rolle spielt. Für die
meisten Anwendungen dürfte das jedoch ausreichen, sonst muß
man das Programm in mehreren Teilen erzeugen.
Man sollte übrigens ausführlicher kommentieren, sonst
passiert es leicht, daß man nach längerer Zeit nicht mehr
versteht, was man da programmiert hat.
Das Abspeichern und Einlesen der Quelltexte von Kassette erfolgt mit
Hilfe des Monitors. Beim Verlassen des
Assemblers werden zur Unterstützung die Argumentzellen mit den
Daten der Quelle geladen, so daß einfach mit
S: Name abgespeichert werden kann. Um den Bedienkomfort zu
erhöhen, verwendet EDAS*4 eigene Routinen für
Bildschirm und Tastatur. Die Eingabe ist mit einer Auto-Repeat-Funktion
versehen, d.h., nach längerem Drücken
wird eine Taste automatisch wiederholt. Bei der Kommentareingabe geht
die Tastatur automatisch in den
Schreibmaschinenmodus (Großbuchstaben bei Shift, sonst
Kleinbuchstaben) über.
Das Programm verfügt über einen Kalt- und
einen Warmstart (Restart mit alten Parametern). Der Ansprung erfolgt
mit "E" oder "J" aus dem Monitor. Nach dem Laden des Programms ist
immer erst ein Kaltstart auszuführen, da der
Puffer vereinbart und die Merkzellen initialisiert werden müssen.
Kaltstart: J 4000 AAAA EEEE (CR)
Warmstart: J 4003 (CR)
Werden Endadresse bzw. Anfangs- und Endadresse weggelassen, so wird
folgende Vorzugsbelegung eingestellt:
AAAA - 6000H; EEEE - BFFFH
Diese kann durch Verändern der RAM-Zellen 4006H bis 4009H an die
jeweiligen Gegebenheiten angepaßt werden.
Nach dem Laden einer Quelle ist ein Kaltstart auszuführen, wobei
die der Quelle entsprechende
Editierpufferanfangsadresse mit angegeben werden muß.
Anschließend reaktiviert man die Quelle mit "Y".
Hat man EDAS*4 mit "Q" verlassen, so genügt zur Weiterarbeit ein
Warmstart.
Nach dem Start wird der Bildschirm gelöscht. In den obersten zwei
Zeilen erscheint auf dem Bildschirm:
AC1-EDITOR/ASSEMBLER FREE: END: SEC:
Die Statusinformationen haben folgende Bedeutung:
FREE - Erster freier Speicher nach dem Quelltext. Nach einem Kaltstart
wird eine um 6 Bytes höhere Adresse als
die eingegebene Anfangsadresse angezeigt. Die ersten 5 Bytes (Quellkopf
enthalten Informationen über die Länge
der Quelle.
END - Erster freier Speicher nach dem Maschinenkode (wird nach jedem
Assemblerlauf angezeigt).
SEC - Anfangsadresse der Sekundärquelle (wird nach deren
Vereinbarung angezeigt).
Das Promptsymbol von EDAS*4, das Zeichen zur Eingabebereitschaft, ist
ein blinkender Kursor (Tiefstrich).
Der Kursor blinkt am linken Anschlag der zweiten Zeile von unten. Wenn
nicht anders angegeben, führt CTRL-C zum
vorzeitigen Abbruch des gerade aktuellen Kommandos.
Dazu ist die Arbeit mit dem Editor/Assembler zu
beenden und in den Monitor zu springen ("Q" cr). Die Argumentzellen
des Monitors werden dabei automatisch mit den Daten zum Abspeichem des
Quelltextes geladen.
Abspeichern - S aaaa FREE aaaa Name oder S: Name; aaaa als
drittes Argument dient der Kennzeichnung des
Editierpufferanfangs, als Hilfe für den Kaltstart. Einlesen - L
oder L offset -. Die Quelltexte sind nicht
adreßgebunden. Beim Verschieben oder Laden muß der Anfang
beim Kaltstart mit angegeben werden, da sonst ein
Reaktivieren nicht möglich ist.
Der Editor dient zum Eingeben und Verändern
von Quelltexten. Jede Quelltextzeile hat eine Zeilennummer, nach der
sie in den Quelltext eingeordnet wird, analog den Programmzeilen in
einem BASIC-Programm. Die Zeilennummer darf
hierbei zwischen 0001 und 9999 liegen, führende Nullen sind nicht
notwendig. Eine Quelltextzeile hat folgendes
Format:
Zeilen-Nr. Marke Befehl Operand(en) ;Kommentar
nnnn mmmmmm bbbb ooooo...ooo ; xxxxxxxxx
Die einzelnen Elemente sind durch mindestens ein Leerzeichen, besser
durch den speziellen Tabulator von EDAS*4
(CTRL-W) zu trennen. Wird keine Marke vereinbart, so sind zwischen der
Zeilennummer und dem Befehl mindestens
zwei Leerzeichen zu setzen, auch hier ist CTRL-W besser. Damit wird die
Übersichtlichkeit der Quelle verbessert.
Durch die Komprimierung der Leerzeichen erhöht diese
Übersichtlichkeit nicht den Speicherbedarf des Quelltextes.
Eine Marke kann maximal aus sechs Zeichen bestehen. Zwischen der
Zeilennummer und der Marke darf nur ein
Leerzeichen stehen. Ein Abschluß der Marke mit einem Doppelpunkt
wird nicht unterstützt. Bei 6stelligen Marken
ist das auch nicht zulässig. Der Marke folgt dann der
Maschinenbefehl oder eine Assembleranweisung. Nachfolgend
ist es möglich, zur besseren Dokumentation, die Zeile mit einem
Kommentar zu versehen. Dieser beginnt immer mit
einem Semikolon. Die Tastatur geht dann bis zum Zeilenabschluß
mit "cr" automatisch in den Schreibmaschinenmodus
über. Der Kommentar kann auch auf der ersten Markenstelle
beginnen. Das ist z.B. für Überschriften günstig.
Die Quelltext- und Kommandoeingabe erfolgt immer in der vorletzten
Zeile. Ein Verlassen dieser ist nicht möglich.
Das Ende der Eingabezeile entspricht nicht dem Ende der
Bildschirmzeile, sondern ist so weit vorgezogen, daß bei
der nachfolgenden Assemblierung nichts abgeschnitten wird. Bis zum
Zeilenschluß mit "cr" kann die Zeile mit Hilfe
der Kursorfunktionen in die gewünschte Form gebracht werden. Die
Stellung des Kursors in der Zeile beim
Zeilenabschluß ist gleichgültig.
Die Kommandos für den Editor bestehen aus
einem Buchstaben und entsprechenden Argumenten (wenn notwendig).
Die Kennbuchstaben müssen am linken Bildrand stehen, die Argumente
werden durch Leerzeichen voneinander getrennt.
Folgende Kommandos stehen im Editor zur Verfügung:
Zeichenkettensuche
/STRING/ - Eingabe der zu suchenden Zeichenkette.
F - Listen der Zeilen, in denen die zuvor in Schrägstriche
gestellte und eingegebene Zeichenkette
enthalten ist.
Damit lassen sich z.B. bestimmte Befehle, Marken und ähnliches im
gesamten Quelltext suchen.
Seitengröße auf Bildschirm einstellen
H h - Setzen der Seitengröße auf h (hex.).
H - Setzen der Seitengröße auf 25 Zeilen.
H 0 - Setzen auf kontinuierliche Ausgabe.
Nach der Ausgabe von h Zeilen auf dem Bildschirm wird die Ausgabe
unterbrochen und nach dem Drücken einer Taste
um jeweils eine weitere Seitengröße fortgesetzt. Nach dem
Start ist die Seitengröße auf 25 Zeilen festgelegt.
Automatische Zeilennummerierung
I - ab Zeile 10 Schrittweite 10.
I a - ab Zeile a Schrittweite 10.
I a s - ab Zeile a Schrittweite s.
Wie in BASIC-Interpretern der Auto-Befehl, gestattet das "I"-Kommando
eine Eingabe mit automatischer
Zeilennummernerzeugung. Der Kursor befindet sich bei der
Zeileneröffnung immer auf der ersten Markenposition.
Beendet wird dieses Kommando, in dem die letzte Zeilennummer wieder
gelöscht wird, z.B. mit CTRL-R.
Ausgabeverzögerung setzen
J h - Setzen einer Schirmausgabeverzögerung (h 1..FF).
J 0 - Rücksetzen der Verzögerung.
K h - Wie J, aber nur bei Druckerausgabe.
Mit dem "J"- bzw. "K"-Kommando läßt sich die Geschwindigkeit
der Bildschirm bzw. Druckerausgabe steuern, in dem
entsprechend dem Argument h nach jedem cr gewartet wird. Nach dem Start
sind beide Verzögerungen ausgeschaltet.
Neunumerierung der gesamten Quelle
R - 1. Zeile 10 Schrittweite 10.
R a - Zeile a Schrittweite 10.
R a s - Zeile a Schrittweite S.
Zur Verbesserung der Form bzw. zum Platzschaffen für
Einfügungen kann hiermit die gesamte Quelle mit neuen
Zeilennummern versehen werden.
Neunumerierung ab Zeile bis Quellende
N a s - ab Zeile a mit einer Lücke von s Zeilen zur
vorhergehenden a Zeile.
Dieses Kommando ist immer dann nützlich, wenn man noch
nachträglich etwas in die Quelle einfügen muß und
dafür
Platz benötigt.
Anzeige des Quelltextes auf dem Schirm
V - Anzeige des gesamten Quelltextes.
V a - Anzeige ab Zeile a bis zum Ende.
V a e - Anzeige ab Zeile a bis Zeile e.
Hiermit kann man den Quelltext ganz oder teilweise auf dem Schirm
ausgeben.
Anzeige des Quelltextes ab Marke
M Marke - Anzeige des Quelltexte, ab Marke bis Ende.
Dieses Kommando dient ebenfalls zur Anzeige des Quelltextes, wobei hier
ab der angegebenen Marke begonnen wird.
Löschen von Quelltextzeilen
X a e - Streichen der Zeilen ab a bis e einschließlich.
Mit diesem Kommando können eingegebene Quelltextzeilen wieder
gelöscht werden. Dieses Kommando wird nur dann
ausgeführt, wenn beide Argumente angegeben sind, sonst erfolgt
eine Fehlermeldung.
Reaktivieren eines vorhandenen Quelltextes
Y - Reaktivieren des Editierpuffers. Hiermit kann ein im
Speicher vorhandener Quelltext nach einem
Kaltstart von EDAS*4 wieder aktiviert werden. Das ist notwendig, wenn
eine Quelle von Kassette geladen wurde
oder wenn nach einem eventuellen Systemabsturz die Quelle noch erhalten
geblieben ist. Ein Reaktivieren ist
jedoch nur so lange möglich, wie noch keine Quellzeile eingegeben
wurde. Außerdem muß natürlich der Anfang
des vereinbarten Editierpuffers mit dem Anfang des Quelltextes
übereinstimmen.
Ändern einer Quellzeile
Z - Korrigiere in zuletzt eingegebener Zeile.
Z x - Korrigiere in Zeile x.
Kursorsteuerung:
CTRL - I ==>
CTRL - H <==
CTRL - E Einfügen
CTRL - S Streichen
CTRL - R Rückwärtslöschen
CTRL - T Kursor hinter Zeilennummer
CTRL - W spezieller Tabulator
Mit diesem Kommando kann man mit Hilfe der oben genannten Funktionen
nach Belieben in der ausgewählten Zeile
ändern. Wird die Zeilennummer selbst damit geändert, so
bleibt die Zeile aber auch unter der vorhergehenden
Nummer im Quelltext. Damit ist es z.B. möglich, Zeilen zu doppeln.
Die Kursorfunktionen sind natürlich
während der gesamten Arbeit mit EDAS*4 nutzbar, nicht nur im
"Z"-Kommando. Der spezielle Tabulator ist so
eingeteilt, daß man die einzelnen Elemente einer Quellzeile
übersichtlich spaltenweise ablegen kann.
Ansprung des assemblierten Programms
G - direkter Ansprung des assemblierten Programms zur Adresse,
die mit ENT markiert wurde. Voraussetzung zur Ausführung dieses
Kommandos sind ein Assemblerlauf mit gesetztem Bit 1 und eine
ENT-Anweisung
im Quelltext. Vor Ausführung dieses Kommandos empfiehlt es sich,
die aktuelle Quelle auf Kassette zu sichern,
da man nie sicher ist, ob sich nicht doch ein Fehler im Programm
befindet.
Beenden der Arbeit mit EDAS*4
Q - Rücksprung zum Monitor.
Dieses Kommando übergibt die Steuerung wieder dem "AC1"-Monitor,
zuvor wurden die Argumentzeilen Arg1 bis Arg3
so geladen, daß der Quelltext einfach mit S: name abgespeichert
werden kann. EDAS*4 ist nun jederzeit wieder
über einen Warmstart zu aktivieren. Alle vor dem Verlassen
eingestellten Parameter bleiben erhalten, natürlich
vorausgesetzt, es wurde nichts durch eine Speichermanipulation
zerstört. Soweit das EDAS*4 selbst betrifft,
merkt er das durch seine Prüfsumme und kehrt sofort zum Monitor
zurück. Dann muß man EDAS*4 neu von der Kassette
laden. Wenn man Glück hat und der Quelltext ist erhalten
geblieben, so läßt er sich mit "Y" reaktivieren.
Teile einer EDAS-Quelle verschieben
C a e x - Verschiebe von Zeile a bis Zeile e nach Zeile x und
folgende.
Hiermit kann man Teilstücke des Quelltextes nachträglich an
eine andere Stelle in der Quelle bringen. Die Zeilen
von a bis e werden ab der Zeile x mit der Schrittweite 1 neu plaziert.
Die nachfolgenden drei Kommandos zum Arbeiten mit einer Zweitquelle
gestatten es, eine Unterprogrammbibliothek
anzulegen und dann die entsprechenden Unterprogramme, nachdem sie von
Kassette geladen wurden, unverändert
oder modifiziert, ganz oder teilweise, in die aktuelle Quelle
einzufügen.
Vereinbaren einer Zweit-Quelle (SEC)
S a e - Puffervereinbarung für die Zweitquelle von aaaa bis
eeee (hexadezimal).
Vor dieser Vereinbarung muß sich ab aaaa bereits eine Quelle oder
mindestens ein Quellkopf befinden. Hinter
SEC: erscheint aa, die Anfangsadresse des Zweitquellenpuffers. Man
muß darauf achten, daß sich der
Zweitquellenpuffer nicht mit dem aktuellen Quellpuffer oder mit EDAS*4
selbst überschneidet. Hierbei darf
eeee auch größer sein als das Ende einer von Kassette
eingelesenen Zweitquelle, will man diese dann noch
erweitern, so ist es auch erforderlich.
Editieren in der Zweit-Quelle
E - Austausch aktuelle Quelle gegen Zweit-Quelle
Hiermit wird EDAS*4 der Pufferbereich der Zweitquelle zugewiesen, so
daß nun in dieser gearbeitet werden kann.
Ein weiteres "E" macht diese Zuweisung dann wieder
rückgängig. Die Angaben hinter FREE: und SEC: geben dabei
immer Auskunft, in welcher Quelle gerade gearbeitet wird. Hinter FREE:
steht immer der erste freie
Speicherplatz in der aktuellen Quelle, hinter SEC: wird der Anfang der
zuletzt eingestellten Zweitquelle
angegeben.
Einfügen einer Zweit-Quelle
T a e x - Plaziere die Zeilen a bis e der Zweitquelle ab Zeile x
in der aktuellen Quelle.
Dieses Kommando ermöglicht es, die gesamte Zweitquelle oder Teile
davon in die aktuelle Quelle einzufügen.
Bei längeren Quelltexten kann das ohne weiteres längere Zeit
beanspruchen. Ist das Kommando ausgeführt,
so erscheint wieder der blinkende Kursor.
Kommandos des Assemblers
Der Assembler in EDAS*4 hat die Aufgabe, aus dem erstellten
Quellprogramm den entsprechenden lauffähigen
Maschinenkode für den Mikroprozessor U 880 D zu erzeugen. Der
Quelltext wird hierbei einer Syntaxkontrolle
unterzogen und auftretende Fehler werden angezeigt. EDAS*4 erzeugt ein
formatiertes, übersichtliches
Assemblerlisting, das bei Vorhandensein eines Druckers dann auch
abgeheftet werden kann. Die Übergabe zum
Drucker ist so gestaltet, daß jeder den bei ihm vorhandenen
Drucker leicht anpassen kann. Der Assembler ist
ein Zweilauf-Assembler, d.h., zur Erzeugung des Maschinenkodes wird der
Quelltext zweimal durchlaufen.
Im ersten Lauf wird u.a. eine Syntaxkontrolle durchgeführt und
eine Markentabelle erstellt. Im zweiten Lauf
werden dann der Maschinenkode erzeugt und das Listing ausgegeben.
Einige Funktionen des Assemblers sind durch
sogenannte Optionsbits steuerbar. Im Anfangszustand nach dem Start,
wenn noch keins dieser Bits gesetzt ist,
wird nur ein Assemblerlisting auf dem Bildschirm erzeugt. Am Ende des
Assemblerlaufes wird die Summe der
gefundenen Fehler dem Listing angefügt.
Um mit möglichst wenig Speicherplatz auszukommen, verwenden
Assembler und Editor die vorletzte Bildschirmzeile
als Zwischenspeicher. Dadurch ist das Arbeiten des Assemblers auch im
Lauf 1 auf dem Bildschirm zu verfolgen.
So kommt man bei längeren Quellen wenigstens nicht auf den
Gedanken, das Programm sei abgestürzt. Da das
jeweilige Zeilenende mit 0AH gekennzeichnet bzw. aufgefüllt wird,
erscheint auf dem Bildschirm dann auch
kurzzeitig das dementsprechende Muster (wenn ein
2-KByte-Zeichengenerator eingesetzt ist). Der Assembler
verfügt über folgende Kommandos:
Quelltext assemblieren
A - Assembliere den gesamten Quelltext.
A a - Assembliere von Zeile a bis Ende.
A a e - Assembliere von Zeile a bis Zeile e.
Entsprechend den Optionsbits und den Argumenten wird der Assemblerlauf
durchgeführt. Ist das Druckbit gesetzt
und nur eine teilweise Assemblierung angewiesen, so wird die gesamte
Quelle assembliert, aber nur der angegebene
Teil als Liste ausgegeben, so daß man bei längeren Quellen
auch nur Auszüge drucken kann.
Quelltext assemblieren, nur Fehler ausgeben
W (a e) - Argumente analog dem "A"-Kommando.
Zur Fehlerkorrektur ist es übersichtlicher, wenn nur die
fehlerhaften Zeilen aufgelistet werden, die man dann
leicht mit dem "Z"-Kommando berichtigen kann.
Maschinenkode um Hexwert verschoben im Speicher ablegen
P hhhh - Der vom Assembler erzeugte Maschinenkode wird auf den
vorgesehenen Speicherplatz + hhhh
(Offset-Hex) geladen.
Dieses Kommando muß vor dem entsprechenden Assemblerlauf gegeben
werden. Hiermit kann man auch Programme
assemblieren, die sonst reservierte Speicherbereiche von EDAS*4
zerstören würden. Mit dem "T"-Befehl des
Monitors sind sie dann auf den Speicherplatz zu bringen, auf dem sie
laut Listing lauffähig sind.
Assembleroptionen setzen/rücksetzen
O x - Setze Assembler-Option mit Maske (1 Byte).
+x - Ergänze Option (nur bitweise).
-x - Streiche Option (nur bitweise).
Bit 0 +01 - Unterdrücke Assemblerlisting; fehlerhafte Zeilen
werden trotzdem ausgegeben.
Bit 1 +02 - Maschinenkode in Speicher laden; nur wenn dieses Bit
gesetzt ist, wird der Maschinenkode im
zugehörenden Speicher abgelegt.
Bit 2 +04 - Assemblerlisting zur Druckerschnittstelle; das
Assemblerlisting wird zeichenweise der
Druckerschnittstelle übergeben.
Bit 4 + 10 - Erzwinge 2. Lauf bei Fehlern im 1. Lauf; im Normalfall
wird bei Fehlern im Lauf 1 an dessen Ende
der Assembler abgebrochen.
Bit 5 +20 - Relative Sprungdistanzen sind absolut angegeben; hiermit
kann z.B. der Sprungangabe bei
SYPS K 1520 entsprochen werden (z.B. JR marke-$).
Bit 7 + 80 - Ausgabe einer Symboltabelle; im Anschluß an den
zweiten Assemblerlauf wird eine alphabetisch
geordnete Liste aller verwendeten Symbole erzeugt, die auch deren Werte
und die Zeilen, in denen sie definiert
wurden, enthält.
Mit dem "O"-Kommando läßt sich der Assembler steuern. Zum
besseren Verständnis noch zwei Beispiele dafür:
erste Eingabe
O86 - Maschinenkode zum Speicher, Ausgabe der Symboltabelle und
Listing zum Drucker.
zweite Eingabe
-04 - Drucker ausschalten, d.h. nur noch Maschinenkode zum
Speicher und Ausgabe der Symboltabelle.
In der folgenden Ausgabe beenden wir die ausführlichere Beschreibung mit der Kommentierung der Fehlermeldungen und Hinweisen zum Druckeranschluß, um Listings auszugeben. Eine Tabelle mit allen Mnemoniks zum U 880 D in der Syntax von EDAS*4 erscheint in einer der folgenden Ausgaben.
Werden bei der Arbeit mit EDAS*4 syntaktische oder
Bedienfehler gemacht, so quittiert EDAS*4 das mit einer
Fehlermeldung. Logische Fehler im Quellprogramm kann EDAS*4
natürlich nicht erkennen! Eine Fehlermeldung hat
die Form, Error xx" wobei xx eine zweistellige Zahl ist, die die Art
des Fehlers angibt. Bedienfehler werden
sofort nach der falschen Kommandoeingabe angezeigt. Die meisten
Syntaxfehler werden bereits im ersten
Assemblerlauf erkannt und angezeigt, und wenn es nicht
ausdrücklich durch das Optionsbit 4 verlangt wurde,
wird auch der Assembler nach dem ersten Lauf gestoppt. Alle
fehlerhaften Zeilen wurden nach oben geschoben,
so daß alle auf dem Bildschirm zu sehen sind, sofern die
Zeilenzahl ausreicht. Hierbei steht immer am Anfang
der Zeile die Fehlermeldung, danach folgt die fehlerhafte Quellzeile
selbst. Erkennt der Computer den
Fehler erst im zweiten Assemblerlauf, so stoppt er diesen Lauf nicht,
sondern fügt nach der fehlerhaften
Anweisung eine Zeile ein, die die Fehlermeldung enthält.
Außerdem wird am Ende des Assemblerlaufes immer die
Zahl der gefundenen Fehler ausgegeben. Hat man den Fehler im Listing
auf dem Bildschirm übersehen, so kann man
sich mit "W" nur die Fehler auflisten lassen. EDAS*4 kennt die
folgenden 26 verschiedenen Fehlermeldungen.
Error 00 - Speicherüberlauf
Die soeben eingegebene Quellzeile würde den vereinbarten
Editierpuffer überschreiten. Die Zeile wurde nicht
übernommen.
Error 01 - Zeilennummerüberlauf
Bei der Neunumerierung des Quelltextes wurde die Zeilennummer
größer als 9999. Daraufhin wurde die
Quelle ab Zeile 1 in Schritten zu 1 neu numeriert.
Error 02 - Überlauf im I-Mode
Im I-Kommando wurde die Zeilennummer größer als 9999, das
I-Kommando wurde abgebrochen.
Error 03 - nicht existierende Zeile
Mit dem Z-Kommando wurde versucht, eine nicht existierende Zeile
aufzurufen.
Error 04 - illegaler GO-Befehl
Ein G-Kommando wurde aufgerufen, bei dem folgende Bedingungen nicht
vollständig erfüllt waren:
- Option "Maschinenkode zum Speicher" gesetzt,
- Assembleroffset = 0,
- Assembleranweisung ,ENT' im Quelltext.
Error 05 - Reaktivieren des Puffers nicht möglich
Beim Aufruf des V-Kommandos wurde im Editierpuffer keine alte
EDAS-Quelle gefunden. Der Editierpuffer
bleibt unverändert. Ein Reaktivieren des vorherigen Inhalts ist
nicht möglich.
Error 06 - Inkrement ist 0
Das Zeileninkrement ist Null, das Kommando wird nicht ausgeführt.
Error 07 - Zeilennummerbereich nicht ausreichend
Der Zeilennummerbereich reicht für die verlangte Manipulation des
Quelltextes nicht aus, die Operation wird
abgebrochen.
Error 08 - unzulässige Argumenteingabe Beim C-Befehl
überlappen sich Quell- und Zielbereich, d.h., das
Argument befindet sich zwischen x und e. Das ist nicht möglich.
Error 09 - Zweitquelle fehlt
Es wurde ein Befehl zur Arbeit mit der Zweitquelle aufgerufen, ohne
daß diese bereits vereinbart war.
Error 10 - illegale Befehlszeile
Eine Marke ist länger als 6 Zeichen bzw. eine Mnemonik ist
länger als 4 Zeichen oder sie fehlt ganz.
Die Zeile wird ignoriert.
Error 20 - unbekannte Mnemonik
Im Feld für den Operationskode steht eine Abkürzung, die
nicht als Mnemonik vereinbart ist, die Zeile wird
ignoriert.
Error 21 - Kontext-Fehler
Die Kombination von Mnemonik und Operandentyp ist unzulässig oder
das Mnemonik zu kurz, die Zeile wird
ignoriert.
Error 22 - Indexregister-Fehler
IX oder IY werden so verwendet, wie es nur für HL zugelassen ist
oder bei einem IP (IX) bzw. IP (IY) ist
der Offset nicht Null. Die Zeile wird ignoriert.
Error 23 - Wert bzw. Distanz zu groß
Ein 8-Bit-Operand ist größer als 255 oder kleiner als -128,
oder eine Indexregisterdistanz ist nicht im
Bereich -128...+127, oder Offset für einen relativen Sprung ist
nicht im Bereich -126...+129, oder die
Nummer bei den BIT-, RES-, SET-Befehlen ist nicht im Bereich 0...7,
oder die Adresse beim Restart-Befehl ist
unzulässig, oder der Mode der IM-Anweisung ist nicht 0, 1 oder 2.
Von dem in Frage kommenden Wert wird der
Teil abgeschnitten, der im zulässigen Bereich liegt und der
Assemblerlauf fortgesetzt.
Error 24 - zu viele Register
Register sind in dieser Anweisung nicht zugelassen oder es sind zu
viele Register im Operandenteil, die Zeile
wird ignoriert.
Error 25 - unzulässige Operandenkombination
Die Kombination der Operandentypen ist unzulässig, die Zeile wird
ignoriert.
Error 26 - illegales Zeichen
Im Operandenfeld befindet sich ein Zeichen, dessen Bedeutung in der
Syntax der Assemblersprache nicht zulässig
ist, die Zeile wird ignoriert.
Error 27 - illegaler Operand
Die Kombination eines Registers mit einer Marke oder einer Konstante
ist in diesem Zusammenhang nicht erlaubt,
die Zeile wird ignoriert.
Error 28 - Klammer-Fehler
In einer Assembleranweisung befindet sich eine linke Klammer, oder mehr
als eine linke Klammer befinden sich
in einem Befehlsoperanden, die Zeile wird ignoriert.
Error 30 - Marke nicht gefunden
Das in dem Ausdruck verwendete Symbol befindet sich in keiner
Quellzeile in der Markenspalte. Das Symbol wird
so behandelt, als wenn es den Wert Null hätte, die Assemblierung
wird fortgesetzt.
Error 31 - Marke doppelt definiert.
Das Symbol im Markenfeld wurde zuvor schon einmal definiert bzw. es ist
ein Registename. Die Zeile wird
ignoriert.
Error 40 - Pseudo-Befehl-Fehler
In einer Assembleranweisung (Pseudobefehl) befinden sich zu viele oder
zu wenig Operanden, die Zeile wird
ignoriert.
Error 41 - illegale Vorwärtsreferenz
Ein Markensymbol in einer EQU-, ORG- oder DEFS-Assembleranweisung wird
erst definiert, nach dem diese
bereits abgearbeitet worden ist, die Zeile wird ignoriert.
Error 61 - Bereichsüberschreitung
Der durch den Assemblerlauf erzeugte Maschinenkode würde EDAS*4
oder den Editierpuffer überschreiben.
Die Abspeicherung des Maschinenkodes wurde abgebrochen.
Error 99 - illegales Kommando
Ein unzulässiges Kommando oder eine falsch gestaltete Quellzeile
wurde eingegeben. Die Zeileneingabe wurde
ignoriert.
Um die fehlerhafte Assemblierung durch teilweise Veränderungen von
EDAS*4, wie sie beispielsweise bei
Speicherfehlern auftreten können, zu vermeiden, bildet EDAS*4
selbständig eine Prüfsumme zu sich selbst.
Im Fehlerfall erfolgt die Ausschrift "Error" und EDAS*4 springt zum
Monitor zurück. Außerdem werden die
Argumentzellen mit den Daten der aktuellen Quelle geladen. Wenn der
Quellkopf nicht zerstört wurde, kann
man diese erst einmal auf Kassette abspeichern und dann in Ruhe den
Fehler im Speicher suchen.
Wie vorangehend bereits erwähnt, bietet EDAS*4
auch die Möglichkeit, das Listing mit einem Drucker auszugeben.
Dazu muß an zwei Stellen ein Sprung zu den entsprechenden
Routinen eingetragen werden.
- Druckerinitialisierung
Diese Routine wird je Assemblerlauf mit gesetztem Druckbit einmal zu
Beginn aufgerufen. Sie dient solchen
Operationen wie Seitenvorschub und Null-Setzen des Seitenzählers.
Wer das nicht braucht, kann hier auch
den Sprung auf MS30 belassen. Ansonsten trägt man auf Adresse
5440H den Sprung zu seiner Initialisierung ein.
- Einzelzeichenausgabe
Der Sprung zu dieser Routine befindet sich auf der Adresse 400AH. Die
Listingzeilen werden zeichenweise im
Akku an diese Schnittstelle übergeben. Die eigenen Routinen
dürfen außer dem Akku keine Register verändern
und müssen mit RET beendet werden. Es empfiehlt sich, EDAS*4 mit
dem eigenen Druckeranschluß zu versehen
und dann erneut auf Kassette abzuspeichern, und dann mit dieser
Arbeitsversion zu arbeiten. Ein nachträglicher
Eintrag der Sprünge und ein nachfolgender Warmstart funktionieren
nicht, das Listing erscheint nach wie vor nur
auf dem Schirm.
Damit ist die Beschreibung von EDAS*4 beendet. Wir wünschen allen
viel Spaß bei der Arbeit mit diesem
Assembler/Editor. Eine Tabelle mit allen Mnemoniks zum U 880 D in der
Syntax von EDAS*4 erscheint in
einer der nächsten Ausgaben des FUNKAMATEUR.