Funkamateur 07/88 |
Für denjenigen, der den "AC1" für die Entwicklung von
Maschinenprogrammen nutzen möchte oder sich in die
Assemblerprogrammierung einarbeiten will, wird hier ein komplettes
Mini-Entwicklungssystem vorgestellt.
Pate stand das Programm EDITOR des MC80.20 vom VEB ELEKTRONIK Gera. Es
wurden weitestgehend die
ursprünglichen Kommandos beibehalten. Wer schon den MC80 kennt,
wird über die zusätzlichen Kommandos
begeistert sein.
Die Darstellung von 32 x 64 Zeichen auf dem Bildschirm des "AC1"
eröffnet weitergehende Möglichkeiten.
Das Programmsystem "OCEAC1" hat einen Funktionsumfang, der etwa die
Programme "AC1-Monitor", "EDAS-4" und
weitere Komponenten umfaßt.
Das Monitorprogramm ist noch für die Kassettenarbeit erforderlich.
Für andere Monitorvarianten braucht
keine Anpassung zu erfolgen, da "OCEAC1" eine eigene Bildschirm- und
Tastatursteuerung besitzt.
Vorteile des "OCEAC1" gegenüber "EDAS-4" bestehen im schnellen
Wechsel zwischen den einzelnen
Arbeitsregimen Quellkodeeingabemodus, Testmodus und RAM-Funktionen.
Dabei kann der gesamte Adreßraum
des Speicherbereiches von 64 K genutzt werden, soweit er nicht von
"OCEAC1" selbst oder von der
mitgeführten Markentabelle belegt ist.
Schon mit der ersten Ausbaustufe von 16 K RAM-Speichererweiterung ab
Adresse 4000H lassen sich
anspruchsvolle Programme schreiben. Newcomer in der Maschinensprache
werden die Möglichkeiten, die
"OCEAC1" bietet, bald zu schätzen wissen.
Das System "OCEAC1" besteht aus folgenden
Komponenten:
- Assembler zum Übersetzen der U 880-Mnemonik in Maschinenkode
- Reassembler zur Rückübersetzung in die Mnemonik des U 880
- Testsystem
- Speichermodifikation
Besonderheiten:
- Jeder eingegebene Befehl wird sofort in den Maschinenkode
übersetzt und auf Syntaxfehler kontrolliert.
- Außer dem Maschinenkode ist noch eine Markentabelle vorhanden,
die Definitionen und Referenzen für
eine symbolische Adressierung vermerkt.
- Es wird kein Quellprogramm gespeichert. Der im Speicher eingetragene
Maschinenkode läßt sich zusammen
mit den Informationen aus der Markentabelle reassemblieren und als
Quelltext auf dem Bildschirm darstellen.
- Der Maschinenkode kann sofort getestet werden.
- Eine Kommentierung ist nicht vorgesehen.
- Der Reassembler kann nicht zwischen Befehlen und Daten unterscheiden.
Er reassembliert Daten genauso
wie Befehle. Daten- und Befehlsblöcke sollten deshalb im Programm
getrennt werden.
Die Funktionen des "OCEAC1" sind durch verschiedene Betriebsarten
realisiert.
- Anzeigemodus
- Quellkodemodifikation
- Testmodus
- Speichermodifikation (RAM)
Alle Kommandos sind Ein-Tasten-Kommandos, d.h., nach Betätigung
der Taste führt der "AC1" das Kommando
sofort aus. Sind weitere Parameter notwendig, werden diese über
die Tastatur eingegeben und mit CR
abgeschlossen. Fehlbedienungen kann man korrigieren (Taste OFF "Ctrl.C)
Aus dem Anzeigemodus ruft das System die anderen Betriebsarten auf. Die
Rückkehr erfolgt durch Betätigen
der Taste OFF in den Anzeigemodus. Nochmaliges Betätigen der Taste
OFF führt in die Aufrufschleife des
MONITOR.
Startadresse ist 4000H. Soll ein vorhandenes
Programm modifiziert werden, so ist es vorher im Speicher
bereitzustellen. Das Programm meldet sich mit "OCE" und der Adresse der
Markentabelle.
OCE MTD adr
Als adr schlägt das Programm beim erstmaligen Aufruf 7020H vor.
Die Adreßangabe kann man mit CR bestätigen.
Falls sich die Markentabelle auf einem anderen Speicherplatz befindet
bzw. dort angelegt werden soll,
gibt das Programm die neue Adresse an. Diese Eintragung bleibt dann
auch für einen erneuten Programmstart
erhalten.
Vor der Markentabelle müssen noch 20H Speicherplätze als
Arbeitsbereich für "OCEAC1" zur Verfügung stehen.
Wird im laufe der Quellkodeeingabe eine Marke vereinbart oder auf eine
Marke zugegriffen, erfolgt eine
Eintragung in die Markentabelle. Es können maximal 127 Marken
vereinbart werden. Die Überwachung des
Überlaufens der Markentabelle in ein anderes Programm oder in
einen nicht existierenden Speicherbereich
ist nicht vorgesehen.
Man kann sich aber jederzeit mit Hilfe der RAM-Funktion über die
Belegung der Markentabelle informieren. Nach Programmstart befindet
sich "OCEAC1" im Anzeigemodus.
Im Anzeigemodus wird der aktuelle Speicherinhalt reassembliert und angezeigt. Die erste Zeile enthält neben dem Programmnamen die hexadezimale Adresse des aktuellen Befehls und die Angabe der voranstehenden Globalmarke mit ihrer Adresse. Die mit "*" gekennzeichnete Seite enthält den aktuellen, zur Bearbeitung vorgesehenen Befehl.
DOWN - Übergang zum nächsten Befehl
N - 32maliges Ausführen des Kommandos DOWN
+ - Anzeige ab nächster Speicheradresse. Damit ist die
Suche eines Befehlsanfangs zwischen
Datenblöcken möglich. Der erste Befehl eines Programmblocks
sollte mit einer Marke gekennzeichnet sein.
UP - Übergang zum voranstehenden Befehl
Z - 32maliges Ausführen des Kommandos UP
- - Anzeige ab voranstehender Speicheradresse. Damit ist die
Anzeige in Richtung niedrigerer
Adressen veränderbar, ohne daß eine voranstehende
Globalmarke erforderlich ist.
A - Anzeige ab der davorstehenden Globalmarke.
Als Globalmarke bezeichnet man eine Marke, die als drittes Zeichen
einen Buchstaben enthält.
Die Kommandos UP, Z und A bewirken, daß zuerst nach einer
voranstehenden Globalmarke gesucht wird. Von
da ausgehend ermittelt das Programm fortlaufend den nächsten
Befehl. Ein Befehlsblock benötigt deshalb am
Anfang immer eine Globalmarke. Existiert im Bereich von 255 Byte vor
der aktuellen Adresse keine
Globalmarke, kommen die Kommandos UP und Z nicht zur Ausführung.
G - Kommando zur direkten Positionierung.
Durch Parameterangaben gibt es folgende Varianten:
G CR - Anzeige ab Programmende
G O CR - Anzeige der mit EXT vereinbarten Marken
G adr CR - Anzeige ab adr
L - Anzeige ab Programmzählerstand vor dem letzten Schritt
im Testmodus.
B - Kommando zum Programmbinden.
Die Bindeoperation bezieht sich auf den gesamten Adreßraum von 64
KByte. Alle symbolischen Angaben werden
anhand der Markentabelle durch absolute (hexadezimal angezeigte) Werte
ersetzt und in den Maschinenkode
eingetragen. Damit ist der Maschinenkode auf der gebundenen Adresse
lauffähig. Nichtdefinierte Symbole
zeigt das Programm mit dem Namen und der Adresse, von der aus ein
Zugriff erfolgt, auf dem Bildschirm an.
Ist bei relativen Sprungbefehlen die Sprungdistanz zu groß,
erfolgt die Anzeige der Adresse des
Sprungbefehls. Nach den Fehlerausschriften ist eine Taste zu
betätigen, um die Bindeoperation fortzuführen.
Bindekommando-Varianten:
B CR - Binden des Programms auf den aktuellen Speicherbereich,
d.h., auf den Bereich ab
Anzeigeadresse.
B adr CR - Binden des Programms, so daß der aktuelle
Befehl der angegebenen Adresse lauffähig ist.
Dazu erfolgt eine Umrechnung der Markenwerte. Das gilt nicht für
mit EXT vereinbarte Marken. Sie behalten
ihren Wert (externe Eintrittsadresse aus anderen Programmodulen). Die
Eintragungen der Markentabelle
bleiben erhalten.
S - Streichen (Löschen) von Befehlen
S CR - Streichen des aktuellen Befehls
S adr CR - Streichen der Befehle ab aktueller Adresse bis
ausschließlich adr. Wenn adr kleiner
als die aktuelle Adresse ist, verweigert das Programm die
Befehlsausführung.
E - Einfügekommando
Der Bereich ab aktueller Adresse bis Programmende verschiebt sich mit
Marken in Richtung Speicherende.
Damit steht ab aktueller Adresse ein Bereich für Eingaben zur
Verfügung. Ab Programmende muß freier
Speicherraum vorhanden sein, sonst wird das Kommando nicht
ausgeführt.
E CR - Einfügen eines Bytes (NOP-Befehl).
E adr CR - Einfügen ab aktueller Adresse bis
ausschließlich adr, wenn adr größer als die aktuelle
Adresse ist.
M - Verschiebekommando (Programmverschiebung mit Marken). Der
angegebene Programmbereich verschiebt
sich auf den Bereich ab Anzeigeadresse. Das Kommando kommt nur zur
Ausführung, wenn der Freibereich ab
Anzeigeadresse genügend groß ist, d.h., mit 00H oder FFH
belegt ist. Dadurch verhindert man ein
versehentliches Zerstören von Programmteilen.
Der ehemalige Programmbereich füllt sich mit FFH.
M adr CR
CR - Der Programmbereich ab adr bis Programmende wird auf den Bereich
der Anzeigeadresse
verschoben.
M adr1 CR
adr2 CR Der Programmbereich von adr1 bis ausschließlich adr2 wird
auf den Bereich der Anzeigeadresse
verschoben.
V - Markenumrechnung
Wenn nur das erstellte Maschinenprogramm im Speicher verschoben wurde,
beziehen sich die Eintragungen
der Markentabelle auf den ursprünglichen Speicherbereich. Um die
Markentabelle dem neuen Speicherbereich
zuzuordnen, benutzt man das Kommando V.
V adr CR - Umrechnen der Marken im Bereich von adr bis
Programmende auf den aktuellen Anzeigebereich.
V adr1 CR
adr2 CR - Umrechnen der Marken im Bereich von adr1 bis
ausschließlich adr2 auf den Bereich ab
Anzeigeadresse.
O - Kommando zur Quellprogrammausgabe
Das Programm ab Anzeigeadresse bis Programmende wird ab adr als
Quellprogramm in den RAM ausgegeben.
Die Zeilentrennung erfolgt durch CR, LF. Den Abschluß des
Quellprogramms bildet die Kodierung 03H.
O adr CR - Das Programm wird ab adr als Quelle in den RAM
geschrieben.
I - Kommando zur Quellprogrammeingabe
Das Quellprogramm ab Adresse adr im RAM wird in den Bereich ab
Anzeigeadresse übernommen. Die Quelle
muß den gleichen Bedingungen wie im Quellkodeeingabemodus
genügen. Eventuelle Fehler korrigiert man
durch Tastatureingaben. Die Programmübernahme erfolgt zeilenweise
mit paralleler Darstellung auf dem
Bildschirm.
I adr CR - Quellprogrammeingabe
Die Kommandos O und I eignen sich vorteilhaft zum Vervielfachen von
Programmabschnitten.
P - Kommando zum Ausdruck der
Reassemblerliste
Zur Ausgabe gelangt die Speicheradresse, gefolgt vom Maschinenkode.
Danach erscheint der reassemblierte
Befehl analog der Darstellung im Anzeigemodus des "OCEAC1" unter
Einbeziehung von Informationen aus der
Markentabelle. Alle Zeichen erscheinen parallel mit auf dem Bildschirm,
wobei die gerade zum Drucker
übertragene Zeile mit "*" gekennzeichnet ist. Sind alle Zeilen bis
ausschließlich der Endadresse übertragen,
erwartet das Programm eine Angabe zum Seitenvorschub. Die Taste "F"
löst einen Seitenvorschub aus.
Danach kehrt das Programm, wie bei der Eingabe jedes anderen Zeichens,
in den Anzeigemodus des "OCEAC1"
zurück.
P adr CR - Die Endadresse adr ist absolut oder symbolisch
anzugeben. Gibt man keine Endadresse an,
gilt das Programmende (mindestens 4mal FFH) als Endadresse.
Aus dem Anzeigemodus erfolgt der Aufruf anderer
Betriebsarten durch folgende Ein-Tasten-Kommandos:
Q - Kommando zum Eintritt in den Quellkodeeingabemodus,
R - Kommando zum Aufruf der Speichermodifikation (RAM),
T - Kommando zum Eintritt in den Testmodus,
K - Kommando für direkte Maschinenkodeeingabe,
H - Definition der aktuellen Adresse als Haltepunkt im
Testmodus.
Der Eingabebereich beginnt ab Kursorposition. Der
Kursor zeigt auf das Markenfeld. Eine Marke besteht aus
drei Zeichen, von denen das erste Zeichen ein Buchstabe sein muß.
Die Trennung Markenfeld - Operationsfeld
erfolgt durch mindestens ein Leerzeichen oder einen Tabulator.
Das Zeichen ":" als Trennzeichen kann entfallen. Leerzeichen
oder Tabulator sind auch einzugeben,
wenn keine Marke verwendet wird. Zwischen Operationskode und Operanden
muß ein Leerzeichen als
Trennzeichen stehen. Kommentare sind nicht möglich. Der angezeigte
Befehl ist korrigierbar. Dabei ist ein
Überschreiben von einem Befehl durch einen Befehl mit einer
größeren Byteanzahl unbedingt zu vermeiden.
Anderenfalls erfolgt eine Zerstörung des oder der nächsten
Befehle. Eintragungen in der Markentabelle
werden nicht gelöscht und führen beim Binden zur
Zerstörung von Programmteilen. Folgende Schritte sind
erforderlich:
- Streichen des alten Befehls (Kommando S),
- Schaffen eines genügend großen Freibereiches entsprechend
der Byteanzahl des neuen Befehls (Kommando E),
- Eingabe des neuen Befehls.
Die Quellkodeeingabe ist durch CR abzuschließen. Es erfolgt die
Übersetzung des Befehls. Liegt ein
Syntaxfehler vor, markiert "OCEAC1" dies vor dem Befehl wie folgt:
F - Operations- oder Operandenfehler
M - Marke schon vorhanden
O - Offset bei relativen Sprüngen zu groß (tritt nur
auf, wenn das Sprungfeld absolut angegeben
wird).
Der Maschinenkode wird bei syntaktisch richtigen Befehlen ab
Anzeigeadresse gespeichert. Die
Speicherbelegung und der reassemblierte Befehl werden zur Kontrolle auf
dem Bildschirm angezeigt.
Der aktuelle Befehl ist durch das Zeichen "+" markiert. Durch
nochmaliges Betätigen der Taste CR
wird das Programm ab dem folgenden Befehl angezeigt und es kann eine
Quellkodeeingabe oder eine
Korrektur für diesen Befehl erfolgen. Das Betätigen
irgendeiner anderen Taste führt in den Anzeigemodus
zurück.
Neben den U 880-Mnemoniks werden folgende Pseudooperationen verarbeitet:
DB n - Definition eines Bytes mit dem Inhalt n
DW nn - Definition eines Wortes (Doppelbyte) mit dem Wert nn
DM "text" - Definition der Zeichenkette text
mar: EXT adr - Definition der externen Marke mar mit der Adresse
adr
Pseudobefehle werden als solche nicht reassembliert. Auf dem Bildschirm
erscheint der entsprechende
Maschinenbefehl. Die Zahleneingabe kann dezimal oder hexadezimal
erfolgen. Hexadezimalzahlen müssen
mit einer Ziffer beginnen und mit H enden (z.B. 0AF7H). Der Reassembler
verwendet für die Ausschrift
ein hexadezimales Standardformat. Anstelle der Zahlen können auch
Marken stehen. Einer Marke kann ein
Offset im Bereich von -128...+127 folgen. Das Zeichen "#" (mit der
wahlweisen Angabe eines Offsets) steht
für den Wert des Speicherplatzzuweisungszählers. Bei der
Assemblierung trägt das Programnm sofort den
Wert des Zuweisungszählers ein. Eine Reassemblierung der Angabe
erfolgt nicht.
K - Direkte Maschinenkodeeingabe
Es besteht die Möglichkeit, den Maschinenkode ohne Aufruf der
RAM-Funktion direkt einzugeben oder zu
modifizieren. Auch hier ist darauf zu achten, daß Befehle nicht
überschrieben werden. Auf jeder Zeile
kann man bis zu vier Byte hexadezimal eingeben. Dieses Kommando
ermöglicht dem Programmierer, schnell
geringfügige Änderungen im Programm vorzunehmen, ohne erst in
den Quelleingabemodus zu gehen.
Der Abschluß der Eingaben durch CR bewirkt das Eintragen der
eingegebenen Bytes ab aktueller Adresse
und Rückkehr in den Anzeigemodus. Der Abschluß durch die
Taste OFF führt ohne Änderung in den
Anzeigemodus zurück.
- Anzeige der Speicherbelegung (hex oder als Zeichen)
- Speichereingabe (hex oder Zeichen)
- Kopieren eines Speicherbereiches in einen anderen Bereich
- Vergleich zweier Speicherbereiche
- Suchen nach einem oder mehreren Byte in einem Speicherbereich
- Speicherbereich ausdrucken
Alle Funktionseingaben erfolgen durch Ein-Tasten-Kommandos.
Erforderliche Parameter werden über die
Tastatur eingegeben und mit CR abgeschlossen.
Die Adreßangabe auf dem BS links oben kennzeichnet die aktuelle
Adresse innerhalb des angezeigten
Speicherbereiches, d.h. die durch den Kursor angewählte Adresse.
M - Kommando zum Kopieren eines
Speicherbereichs
M adr1 CR adr2 CR
Der Speicherbereich von adr1 bis ausschließlich adr2 wird auf den
Speicherbereich ab Anzeigeadresse
verglichen. Die Anzahl der Differenzen kommt auf dem Display zur
Anzeige. Die aktuelle Adresse weist auf
die erste Nichtübereinstimmung. Im Eingabebereich steht der Wert
aus dem Vergleichsbereich (Anzeige
durch adr1).
Die Arbeit kann durch eines der folgenden Kommandos fortgesetzt werden:
CR - Der im Eingabefeld stehende Wert aus dem Vergleichsbereich
wird auf die aktuelle Adresse
eingetragen (dadurch vermindert sich die Anzahl der Differenzen um
eins) und der Vergleich setzt sich fort.
V - Fortsetzen des Speichervergleichs.
OFF - Abbruch des Vergleichs.
Ist keine Differenz zwischen beiden Speicherbereichen aufgetreten, bzw.
ist der Vergleich vollständig
durchgeführt, gelangt man durch Betätigen einer beliebigen
Taste in den Anzeigemodus.
L - Kommando zur Suche einer Datenfolge im
Speicher
L adr1 CR adr2 CR
Die durch adr1 bis ausschließlich adr2 gekennzeichnete Datenfolge
wird im Speicher ab aktueller Adresse
bis Speicherende gesucht. Findet das Programm die Datenfolge, erscheint
sie mit der aktuellen
Anzeigeadresse.
CR - Fortsetzung des Suchvorganges.
OFF - Abbruch des Suchvorganges; es wird der Bereich vor
Ausführung des L-Kommandos angezeigt.
ODT ermöglicht den schritt- oder
abschnittweisen Test von Programmen oder den Test im Echtzeitlauf.
Im Haltepunkt kommen die Registerinhalte und der Befehl zur Anzeige.
Eine Registermodifikation ist möglich.
Der Aufruf des Testsystems erfolgt mit dem Kommando T. Durch
Betätigen der Taste OFF wird das Testsystem
verlassen und in den Azeigemodus von "OCEAC1" zurückgekehrt.
T - Abarbeiten des aktuellen Befehls und
Protokollierung der Registerinhalte im Haltepunkt.
Der Haltepunkt ist üblicherweise der nächste vom Programm
auszuführende Befehl (Schrittbetrieb). Wurde
durch das Kommando H im Anzeigemodus von "CEAC1" ein spezieller
Haltepunkt definiert, erfolgt eine
Programmabarbeitung bis zu diesem Haltepunkt. Dieser ist danach
gelöscht.
N - Abarbeiten des aktuellen Befehls und Protokollierung der
Registerinhalte im Haltepunkt.
Haltepunkt ist dabei der im Programm auf dem nächsten
Speicherplatz stehende Befehl. Dieser muß im
allgemeinen nicht mit dem nächsten abzuarbeitenden Befehl
identisch sein. Dadurch ist ein
abschnittsweiser Test von Unterprogrammen oder Programmschleifen
möglich. Das abschnittsweise Testen
kann man durch die Taste OFF abbrechen. In diesem Fall wird der letzte
bearbeitete Befehl protokolliert
und es kann mit einem neuen Kommando fortgesetzt werden.
L - Direktes Abarbeiten des Programms (Echtzeitlauf). Es erfolgt
keine Protokollierung während
der Abarbeitung. Der Befehl RST 7 (Kode FFH) wirkt als
Softwarehaltepunkt. Nach Abarbeitung von RST 7
wird der Echtzeitlauf abgebrochen und der nächste Befehl
protokolliert. Soll mit Softwarehaltepunkten
gearbeitet werden, so sind diese zusätzlich in das Programm
einzufügen (RST 7) und anschließend wieder
zu streichen.
R - Ändern der Registerinhalte durch Überschreiben.
Das Kommando schließt mit CR oder OFF ab.
CR bestätigt die neuen Inhalte, während der Abschluß
mit OFF im Sinne einer Fehlerquittung den
ursprünglichen Zustand wieder herstellt. Es können nur die
Register AF, BC, DE, HL, IX und IY modifiziert
werden.
X - Registertausch
Der Hauptregistersatz wird gegen den Nebenregistersatz ausgetauscht.
Die Nebenregisterinhalte kommen
zur Anzeige und lassen sich gegebenenfalls modifizieren und
rücktauschen. Es kann auch eine Weiterarbeit
mit dem nunmehr aktuellen Registersatz erfolgen.
Bei der Programmabarbeitung unter der Regie des
Testsystems (Kommando T und N) wird das Programm nach
jedem Befehl durch einen vom Testsystem initialisierten Interrupt
unterbrochen, um in der
Interruptserviceroutine die Haltepunktbedingung zu
überprüfen. Dadurch arbeitet das Programm etwa
200 bis 500mal langsamer als im Echtzeitlauf.
Das zu testende Programm muß folgende Forderungen erfüllen:
- keine Veränderung des I-Registers
- kein Verlassen des Interruptmodus IM2
- Der vom Testsystem benutzte CTC-Kanal 2 und dessen
Interruptverbindungsadresse (188CH) darf nicht
verändert werden.
- Vom zu testenden Programm dürfen der Bildschirminhalt und die
Arbeitszellen des Betriebssystems
nicht verändert werden.
- Nach einer Interruptannahme oder nach dem Befehl DI läuft das zu
testende Programm im Echtzeitlauf,
bis einschließlich dem Befehl nach EI. Die abgearbeiteten Befehle
werden nicht protokolliert.
- Wird mit dem Testsystem gearbeitet, ist eine Verbindung von M1
(Pin 14 CTC) nach CLK2 (Pin 21 CTC) zu schalten.
Das Mini-Entwicklungssystem enthält bereits einen Druckertreiber zur Ansteuerung der K 1520-OEM-Baugruppe K 6028 (PIO). Die Einbindung anderer Treiber ist über den Sprungverteiler leicht möglich. Die Anschlußadresse des Treibers zur Druckerausgabe ist auf 5D43H und 5044H eingetragen. Die Ausgabe erfolgt zeichenweise über Register A.
Benutzt wird der gleiche Treiber wie vom
"AC1"-Texteditor bekannt, mit Auto-Repeat und Shift-Lock.
Nimmt "OCEAC1" nach dem Start keine Zeichen an, ist die Shiftebene mit
Ctrl.R umzuschalten.
Die Kommandoeingaben erfolgen nur mit Großbuchstaben.
Das für einen Abdruck zu umfangreiche Programm ist gegen
Einsendung einer Kassette über den ACC Berlin
(s. Heft 4/88, S.173) beziehbar.
647 KByte |
Arbeitsblatt |