home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Vectronix 2
/
VECTRONIX2.iso
/
FILES_07
/
IDEAL.ZIP
/
IDEAL
/
IDEAL.DOC
next >
Wrap
Text File
|
1988-01-17
|
49KB
|
979 lines
07201030303800
1
2
F0110030
9[...................................................]001
Ç.end ;Anleitung zum I ntegrierten
D ebugger
E ditor
A ssembler
L inker
diese Anleitung können Sie neben Ihrem Programm im Speicher halten:
- mit [HOME] [HOME] an das Ende Ihres Programmtextes gehen
- noch eine Zeile runter (Cursortasten)
- mit LOAD BLOCK (Tasten [SHIFT]-[F7] [SHIFT]-[F8]) Anleitung
hinzuladen - erscheint in Negativschrift
*** DER DEBUGGER
------------
Im normalen Arbeitsablauf des Programmierens in Assembler ist das "Debuggen"
(übersetzt: entkäfern, als "bug" wird ein Programmfehler bezeichnet) der letzte
Schritt. Allerdings ist der Zeitaufwand für das Debuggen enorm: bis zu 70% der
gesamten Programmierzeit gehen für das Debuggen "drauf" - einer der wesentlich-
sten Vorteile einer hohen Programmiersprache ist es, da₧ diese Zeit drastisch
verkürzt wird.
Aus diesem Grund ist ein Debugger ein sehr wichtiges Teilstück eines Assembler-
entwicklungspaketes. Der Debugger im IDEAL zählt zu den leistungsfähigsten
am Markt.
Im Debugger landen Sie automatisch nach dem Starten des IDEAL-Paketes. Unter der
Startmeldung steht eine Zahl (z.B. $78cd4). Diese Zahl stellt die erste freie,
benutzbare Adresse hinter dem IDEAL-Paket dar, und ist ein Vorschlag des De-
buggers an Sie, ab dieser Adresse zu programmieren. Sie müssen diesem Vorschlag
nicht folgen, es ist leicht möglich, die Adresse abzuändern:
Fahren Sie mit der Taste "Cursor links" auf die Adresse 78cd4 und ändern Sie
auf die gewünschte andere Adresse (nehmen wir einmal 70000) ab. Den Doppelpunkt,
der nach der Adresse folgt, dürfen Sie dabei nicht überschreiben.
Jetzt wollen wir die ersten Befehle des Debuggers ausprobieren. Als Beispiel
nehmen wir einen Befehl, den jeder Debugger hat: den DUMP-Befehl. DUMP gibt
einen Speicherbereich in hexadezimaler Form und zusätzlich als ASCII aus.
Probieren Sie es einfach aus. Geben Sie in die Zeile, wo schon unsere geänderte
Adresse 70000 steht, zusätzlich noch D 70000 ein und drücken Sie RETURN. (Dabei
ist es unerheblich, ob Sie ein gro₧es oder ein kleines D verwenden). IDEAL gibt
jetzt einen Bildschirm voll "Hexdump" aus: am Anfang der Zeile sehen Sie Adres-
sen (die Zeile auf dem Bildschirm enthält die Inhalte der 16 Bytes, die ab dieser
Adresse folgen), dann die Inhalte der Speicherzellen, und zum Schlu₧ die 16
Bytes nochmals, und zwar diesmal in ASCII-Form.
Wenn Sie sich nur für die Speicherzellen 70000-70040 interessieren, müssen Sie
das dem DUMP-Befehl mitteilen. Geben Sie in diesem Fall folgendes ein:
D 70000,70040 (CR)
In diesem Fall werden nur noch die Speicherstellen $70000-$70040 ausgegeben.
Nehmen wir einmal an, Sie haben im Speicherbereich $70000-$70040 einen Daten-
satz Ihres Programms mit Bestellnummer, Preis, Lagerbestand etc.
Wenn Sie jetzt den Inhalt dieses Speicherbereichs ändern wollen, entweder, weil
er durch einen Programmfehler falsch ist und Sie "reparieren" wollen, oder weil
Sie wissen wollen, wie Ihr Programm auf solch geänderte Daten reagiert, können
Sie mit dem IDEAL wie folgt vorgehen:
Benutzen Sie die Cursortasten, um an diejenige Stelle im Hexdump zu
kommen, die Sie ändern wollen, ändern Sie im Hexdump die falschen Bytes ab, und
drücken Sie zur Bestätigung (CR)- schon wird die ganze geänderte Zeile in den
Speicher geschrieben, und die Änderung ist damit ausgeführt. Die Möglichkeit,
mit den Cursortasten auf dem Bildschirm herumfahren zu können und durch Druck
auf (CR) die Zeile, in der der Cursor steht, übernehmen zu können, nennt man
"Screen-Editing".
Wenn Sie nur ein einziges Byte im Speicher (z.B.die Adresse $74000 auf $ff) ab-
Çändern wollen, ist es umständlich, zuerst D 74000 (CR) einzugeben, und dann mit
dem Cursor in die erste Zeile zu fahren und (CR) zu drücken. Es geht auch ein-
facher:
-ändern Sie die Adresse, die am Anfang der Cursorzeile steht, auf $74000:
-tippen Sie "," zum Zeichen, da₧ jetzt ein Dump kommt
-und geben Sie dann das Byte (oder die Bytefolge, getrennt durch Kommata) ein,
das Sie ändern wollen, in unserem Beispiel: $ff oder nur FF. (Zahlen ohne An-
gabe irgendeiner Zahlbasis werden im Debugger als Hex-Zahlen behandelt).
Wenn Sie sich ein Dump auf den Bildschirm geben lassen, werden Sie erkennen,
da₧ jeweils hinter Adresse und Doppelpunkt (der steht immer da und dient
zur Kennzeichnung "hier hört die Adresse auf") ein Komma steht. Dieses Komma
sagt dem Debugger beim Einlesen der Zeile, da₧ die nun folgenden Daten in den
Speicher geschrieben werden sollen.
Warnung!
Die Information in ASCII, die nach jeder Dumpzeile ausgegeben wird, ist nur
informativ, d.h., Änderungen in der ASCII-Information werden bei (CR) nicht in
den Speicher übernommen!
Dennoch ist der Dump-Befehl in der Lage, Informationen auch in ASCII auszuwerten.
Die Unterscheidung, ob die ASCII-Information nur informativ oder aber in den
Speicher zu übernehmen ist, geschieht anhand des Kommas: wenn vor der ASCII-
Information ein Komma ist, wird sie in den Speicher übernommen, ist keines davor,
nicht. Das klingt vielleicht kompliziert, ist es aber nicht, wie die folgenden
Beispiele zeigen:
$74000:,54,55,55,55,55,55,55,55,55,55,55,55,55,55,55,55 "TUUUUUUUUUUUUUUU"
Das ist ein normales Dump, wie es vom D-Befehl ausgegeben wird. Die ASCII-
Information ist informativ, weil hinter der letzten 00 kein Komma mehr steht.
Wenn Sie dort ein Komma einsetzen, werden insgesamt 32 Bytes übernommen, nämlich
die 16 Bytes in Hexzahlen, die am Anfang stehen, und dann die 16 Byte ASCII-In-
formation (nochmal das Gleiche). Diese Fähigkeit können Sie dazu ausnützen,
Zeilen auch in gemischter Form einzugeben, etwa so:
$74000:,80,"ich",0,"bin",0,"intelligent",0,"!",0
Am Beispiel des DUMP-Befehls haben wir Ihnen jetzt den allgemeinen Umgang mit
dem Debugger erläutert. Wir wollen jetzt voll in die Materie einsteigen, und
fangen deshalb mit den Zahlensystemen an.
Im IDEAL können Sie an fast allen Stellen Zahlen oder Argumente in verschiedenen
Zahlensystemen eingeben. So ist es in vielen Fällen praktisch, Zahlargumente
nicht nur in Hexadezimal, sondern auch im üblichen Zehnersystem eingeben zu
können. IDEAL erlaubt die Eingabe von Zahlen und Argumenten in Hexadezimal,
Dezimal, Oktal, Binär und ASCII. Um zu kennzeichnen, in welchem Zahlensystem
ein Argument gedacht ist (so kann das Zeichen "1" jedem der oben beschriebenen
Zahlsysteme angehören), müssen Sie ein Kennzeichen davorsetzen. Diese Kennzeichen
sind wie folgt:
$ (oder gar nichts) für Hexadezimal
. für Dezimal
@ für Oktal
% für Binär
"" für ASCII (hier kann oft auch das '-Zeichen verwendet werden)
So bedeutet die Zahl .10000 dezimal zehntausend, %101 steht für dezimal 5,und
10000 steht für hexadezimal 10000 (65536 dezimal).
Es folgt eine Auflistung der Debuggerbefehle:
*-Befehl
Um die Adresse zu ändern, an der Sie gerade sind (diejenige Adresse, die bei
einem (CR) in einer leeren Zeile ausgegeben wird), haben Sie, wie bereits be-
kannt, die Möglichkeit, diese Zahl auf dem Bildschirm zu ändern. Es ist aber
auch möglich, das mit Hilfe des *-Befehls zu erreichen. Die Syntax ist einfach:
* <neue Adresse>
A-Befehl
Der A-Befehl ruft den eingebauten Two-Pass-Assembler des IDEAL auf. Zuerst mu₧
im Editor ein Sourcecode erstellt werden, der dann mit Hilfe des A-Befehls
Çübersetzt wird. Die genaue Erklärung kommt im "ASSEMBLER"-Teil dieser Anleitung.
B-Befehl (Breakpoints)
Der Debugger gestattet das Setzen von insgesamt 7 verschiedenen sog. Breakpoints.
Das sind Stellen, an denen die Programmausführung stoppt, die Register ausge-
geben werden, und der Benutzer analysieren kann, was geschehen ist. Der B-Befehl
gibt die momentanen Inhalte der Breakpoints aus, lä₧t Änderungen zu oder löscht
alle Breakpoints. Die Syntax ist:
B -gibt alle Breakpoints auf dem Bildschirm aus
B C - löscht alle Breakpoints
B <Breakpointnummer> : <n> -setzt einen Breakpoint auf Adresse <n>
C-Befehl (Call a Subroutine - Aufrufen eines Unterprogramms)
Der C-Befehl entspricht im Wesentlichen dem bekannten GO-Befehl der meisten
Debugger. Er ruft ein Maschinenprogramm auf. Die einfachste Syntax ist:
C <Adresse>
In diesem Fall wird das Assemblerprogramm ab der Adresse <Adresse> ausgeführt.
Achtung! Die Kontrolle über das Geschehen im Rechner wird auf diese Weise dem
aufgerufenen Programm überlassen - dieses kann, ohne da₧ der Debugger das ver-
hindern kann, den Rechner zum Abstürzen bringen, das GEM (wenn es im RAM steht)
mit Nullen überschreiben oder Ähnliches.
Beim Aufruf werden dem Assemblerprogramm alle Register, der Stackpointer, das
Statusregister und der Supervisorstackpointer (wie man diese ändern kann,finden
Sie beim X-Befehl) übergeben. Auf dem Stack liegt zuoberst eine Rücksprung-
adresse, die in den Debugger zeigt, d.h., das Assemblerprogramm kann -und soll-
mit einem RTS-Befehl aufhören.
Der Call-Befehl bietet auch noch einige andere Optionen. So ist es in den meisten
Fällen von Nutzen, das Programm nur bis zu einer bestimmten Adresse ausführen
zu lassen. Nehmen wir einmal an, Sie wollten Ihr Programm, das ab der Adresse
$40b7c steht, ausführen, aber nur bis zur Adresse $410c0. In diesem Fall geben
Sie dem Debugger folgendes Kommando:
C 40b7c,410c0
Das Programm wird aufgerufen, und wenn es an der Speicherstelle $410c0 mit der
Ausführung angelangt ist, wird es gestoppt, und die Register zu diesem Zeitpunkt
werden angezeigt. Weil die Rücksprungadresse aber noch auf dem Stack liegt, ist
der Stackpointer um ein Langwort erniedrigt, und sollte manuell korrigiert wer-
den. Diese Arbeit können Sie sich durch Verwendung des G-Befehls (siehe dort)
ersparen.
Wenn Sie nur "C",d.h. keine Adresse dahinter, angeben, so wird das Programm ab
der derzeitigen Position des ProgramCounter (PC) der 68000 ausgeführt. Es wird
allerdings nur genau der eine einzige Befehl, der dort steht, ausgeführt; danach
bricht "C" ab und meldet (wie Trace, ein C etwa auf einen NOP-Befehl entspricht
genau einem T auf diesen NOP-Befehl) die Register. Im Unterschied zu T kann
der eine ausgeführte Befehl ein Unterprogrammaufruf sein. In diesem Fall wird
das ganze Unterprogramm aufgerufen! Sie können also "C" ohne Adresse ersetzen
durch "G ,<Adresse des nach dem aktuellen Befehls folgenden Befehls>".(vgl. G-
Befehl).
Die vierte der möglichen Syntaxen ist das
C ,<Adresse>
In diesem Fall wird das Programm ab der derzeitigen Position des PC ausgeführt
und, sobald die Ausführung die Adresse <Adresse> erreicht hat, abgebrochen.
Das Abbrechen beim C-Befehl funktioniert, indem automatisch ein Breakpoint (und
zwar Nr. 7) gesetzt wird.
Beim C-Befehl ist es besonders oft sinnvoll, anstatt fester Adressen symbolische
(Labelnamen) zu verwenden. Der Debugger ermöglicht das Weiterverwenden von im
Assembler assemblierten Labels, oder auch das Arbeiten von mit Labels auf Disk
geschriebenen .PRG-Files. Dabei wird jeder Labelname von einem . (Dezimalpunkt)
eingeleitet. Beispiele für Labelnamen sind:
.start
._start
.ausgabe
Ç.sinus
etc. Dabei werden Labels mit mehr als 8 Zeichen Länge nicht unterstützt.
D-Befehl (Dump)
Dieser Befehl gibt einen Speicherbereich aus. Die Syntax ist:
D <Adresse> gibt ab der Adresse einen Bildschirm voll Daten aus
D <Adresse1>,<Adresse2> gibt von Adresse1 bis Adresse2 Daten aus
D gibt ab der letzten ausgegebenen Adresse aus.
Genaueres entnehmen Sie bitte der Einleitung.
E-Befehl (Editor und Execute Program)
Eigentlich besteht der E-Befehl aus zwei Befehlen. Zum einen ruft E den in
IDEAL eingebauten Editor auf, zum anderen kann man mit E lauffähige Programme
von Disk in den Speicher einladen. Kommen wir zunächst zum einfachsten:
E (ohne weitere Parameter)
Der eingebaute Editor wird aufgerufen.
E <name>
Ein Programm mit dem Namen <name> wird eingeladen, es wird eine Basepage ein-
gerichtet und es werden die Adressen reloziert-kurz, es wird alles das gemacht,
was beim Anklicken eines Programmes auch gemacht wird. Allerdings wird das Pro-
gramm nicht gestartet. Natürlich mu₧ das mit E geladene Programm auch wirklich
ausführbar sein, also vom Typ .PRG, .TTP oder .TOS sein.
Die Adresse, an die hingeladen werden soll, kann nicht beeinflu₧t werden.
Ebenfalls ist es nicht möglich, zweimal hintereinander ein Programm mit E zu
laden, weil GEMDOS hier gewisse Restriktionen setzt. Sie müssen also den IDEAL
verlassen und neu starten, um wieder E name machen zu können. Allerdings kann
ein mit E eingeladenes und anschlie₧end mit G gestartetes Programm seinerseits
weitere Programme nachladen.
F-Fill memory (Speicher füllen)
Mit dem Fill-Kommando können Sie Speicherbereiche mit irgendwelchen Werten
füllen. Die allgemeine Syntax ist:
F <Startadresse>,<Endadresse>,<Daten>
Zum Beispiel:
F a0000,b0000,0
Hier wird der Speicherbereich von $a0000 bis $b0000 (nur beim 520 ST+ vorhanden)
mit Nullen beschrieben.
F a0000,b0000,4000
Derselbe Speicherbereich wird mit dem Word $4000 beschrieben.
F a0000,b0000,4000000c
Derselbe Speicherbereich wird mit lauter Langwörtern $4000000c gefüllt.
Fill lä₧t auch noch andere Datenparameter zu. Es ist zum Beispiel möglich,
den Speicher mit ASCII-Zeichenfolgen zu füllen, zum Beispiel ganz romantisch:
F a0000,b0000,"ich liebe Dich!"
Sehr häufig mu₧ man ganze Speicherbereiche mit irgendwelchen Assemblerbefehlen
füllen (normalerweise NOP oder ILLEGAL-Anweisungen). Auch dies wird vom FILL-
Befehl unterstützt. Um einen Assemblerbefehl zu charakterisieren, müssen Sie
ein Ausrufezeichen voranstellen, etwa:
F a0000,b0000,!nop
In diesem Fall wird der Speicherbereich mit dem Hexcode gefüllt, der dem Befehl
NOP entspricht.
Es sind auch komplizierte Ausdrücke möglich, etwa so:
F a0000,b0000,!move.b $00040204,$fffff808
G - Go (Programm aufrufen)
Go entspricht ganz genau dem Befehl C. Der einzige Unterschied ist, da₧ G keine
Rücksprungadresse auf dem Stack ablegt, das aufgerufene Programm also nicht mit
einem RTS-Befehl aufhören darf. Zweckmä₧igerweise wird man an den Schlu₧ des
Programmes eine ILLEGAL-Anweisung stellen. Das Ausführen einer unerlaubten Op-
eration (wie ILLEGAL) führt im 68000 zu einer Ausnahmebehandlung (Exception).
Der Debugger fängt sämtliche Exceptions (es gibt noch einige andere, wie Bus-
Fehler, Adressfehler, CHK-Exception,.....) ab und gibt im Falle einer Exception
Çeinen entsprechenden Text aus, z.B.
ENCOUNTERED THE ILLEGAL INSTRUCTION
TRAPV EXCEPTION
DIVISION BY ZERO EXCEPTION
ADRESS ERROR, WRITING (oder reading) AT .....,TRYING TO EXECUTE ......
H-Hunt (to hunt, engl, jagen: Hunt durchsucht Speicherbereiche)
Die Syntax von H entspricht der von F, nur da₧ der Speicherbereich nicht mit
den Daten gefüllt wird, sondern da₧ die Daten im entsprechenden Speicherbereich
gesucht werden. Gefundene Adressen werden ausgegeben. Beispiele sind:
H 60000,60200,0 -durchsucht den Speicherbereich $60000-$60200 nach Nullen
H .400000,.400500,%1000 0000 -durchsucht den Speicherbereich dezimal 400000
bis dez.400500 nach binär 10000000 (=128dez)
H 60000,60200,40aa -durchsucht den Speicherbereich nach dem Word $40aa
H 60000,60200,$4a004a01
H 60000,60250,"ich liebe Dich"
H 60000,60250,!nop -es wird nach NOP-Befehlen gesucht.
I-Information
Der I-Befehl gibt einige Informationen zum derzeit bearbeiteten Programm aus.
So zum Beispiel die Anfangsadresse des Sourcecodes im Speicher (die erste freie
Adresse hinter dem Debugger selber), die Anfangsadresse der Labeltabelle nach
dem Assemblieren, den Anfang des fertig assemblierten Programms, die Anfänge
des DATA- und BSS-Segments (siehe Assemblerteil) und die letzte vom Programm
benutzte Adresse. Diese Angaben sind rein informativ, d.h., sie können nicht
geändert werden. Sinnvoll ist I vor allem in Verbindung zum E-Befehl, da I erste
Aufschlüsse über Länge und Struktur des geladenen Programmes liefert.
K-Kill
Mit dem K-Befehl können Sie, ähnlich wie mit dem E-Befehl, wieder zwei grundver-
schiedene Dinge bewirken: löschen eines Disk-programmes, und löschen des Source-
textes. Den Sourcetext löschen Sie einfach mit
k "s"
Ein Programm auf Diskette können Sie mit
k <name>
löschen. Beispiel:
K ideal.prg
löscht den IDEAL.PRG von der eingelegten Diskette (ein ziemlich irreversibler
Vorgang, den Sie in dieser Form besser nicht ausprobieren sollten).
L-List
Der L-Befehl disassembliert einen Speicherbereich. Die Syntax entspricht dem
D-Befehl:
L - disassembliert ab der letzten disassemblierten Adresse
L <Adresse> - disassembliert ab der angegebenen Adresse (einen Bildschirm voll)
L <Adresse>,<Adresse> - disassembliert von Adresse1 bis Adresse2.
Das ausgegebene Format kann genau gleich wieder eingegeben werden: Sie können
im disassemblierten Listing mit dem Cursor Korrekturen vornehmen und durch
die Taste <CR> übernehmen.
Im disassemblierten Listing erscheinen auch die symbolischen Adressen (falls
welche vorhanden sind). Es handelt sich somit um einen symbolischen Disassembler.
Im Zusammenhang mit L ist die Möglichkeit, die symbolischen Adressen an jeder
Stelle einsetzen zu können, von gro₧er Bedeutung. Es ist möglich, z.B.
L ._start
einzugeben!
M-MOVE (Speicherbereiche kopieren)
Der M-Befehl kopiert einen Speicherbereich an eine andere Stelle im Speicher.
So können Sie zum Beispiel den Bereich von $78000-$7ffff an die Stelle $68000
(bis $6ffff) kopieren, indem Sie einfach
M 78000,7ffff,68000
Çeingeben. Allgemein ist die Syntax also:
M Startadresse,Endadresse,Zieladresse
Move ist intelligent, das hei₧t, da₧ das Kopieren in sich überlappende RAM-Be-
reiche immer funktioniert:
M 70000,70100,70102 und
M 70000,70100,6fffe
funktioniert jedesmal wie erwartet.
N - Names (Diskdirectory)
Der N-Befehl gibt das Directory der Diskstation A: aus. Syntax:
N
Um an das Directory der Diskstation B: zu kommen, geben Sie einfach
N b:
Schlie₧lich ist es auch noch möglich, weitere Angaben zu machen:
N b:\subdir\*.*
N a:*.PRG
etc.
O - Linker.
Der O-Befehl linkt mehrere Files auf der Diskette zusammen. Diese müssen alle
mit A,L abgespeichert worden sein. Die Syntax ist einfach:
O name1,name2,name3,.....,namex=namevonallemzusammen
Die Files name1...namex werden alle zusammengelinkt und unter dem Namen namevon-
allenzusammen wieder auf Disk abgelegt. Um z.B. die Programmteile EINGABE,
SUCHEN und AUSGABE zum Gesamt-Programm VERWALTG zusammenzufügen, geben
Sie ein:
O EINGABE,SUCHEN,AUSGABE=VERWALTG
Zum erfolgreichen Linken mu₧ beachtet werden, da₧ alle von au₧en angesprochenen
Labels als GLOBAL definiert werden müssen und da₧ keine undefinierten Ansprünge
nach dem erfolgten Linken übrigbleiben. Das Programm wird wieder als linkfähiges
File auf die Diskette geschrieben und kann - falls alle undefinierten Labels
während des Linkens eingesetzt werden konnten - auch ausgeführt werden.
In fast allen Fällen erweist es sich jedoch als zweckmä₧iger, überhaupt auf das
Linken zu verzichten und direkt die beiden Sourcefiles zusammenzufügen. Probleme
entstehen dabei mit identisch definierten Labels, die jedoch durch die FIND+RE-
PLACE-Funktion des Editors leicht gelöst werden können.
Näheres über globale Labels finden Sie im Anleitungsteil DER ASSEMBLER unter
"Globale Label-Definition"
P - Printer
Wenn Sie irgendeinem Befehl ein P voranstellen, gibt dieser Befehl seine Daten
nicht auf den Bildschirm, sondern auf den Drucker aus:
P D 50000,50010 disassembliert beispilsweise den Speicherbereich von
50000 bis 50010 auf den Drucker,
P X gibt den Inhalt der Register auf den Drucker aus
Q - Queue (Spur bei Trace) & Quit if (Untrace abbrechen bei best. Ereignis)
Wie dem Buchstaben E, so sind auch dem Buchstaben Q zwei Befehle zugeordnet:
1. Queue (engl. Warteschlange, Schwanz, Schweif)
Der IDEAL merkt sich bei TRACE und UNTRACE die 64 jeweils zuletzt ausgeführten
Befehle. Diese können Sie mit dem Queue-Befehl sich wieder anzeigen lassen.
Da auf den Bildschirm nur 25 Zeilen passen, müssen Sie angeben, welchen Bereich
des "Schweifes" Sie sehen möchten; IDEAL gibt ab dieser Stelle 20 Befehle aus:
q 5 gibt ab der fünften Stelle 20 Befehle aus.
Die nullte Stelle ist hier die "älteste", die 63-ste die "neueste", also der
zuletzt ausgeführte Befehl.
2. Quit if
Mit dem Q-Befehl können Sie die Bedingungen setzen und abfragen, unter denen
der U-Befehl (Untrace, siehe dort) die simulierte Ausführung Ihres Programms
Çabbricht und in den normalen Debugger-Modus zurückkehrt.
Ansehen können Sie sich die Abbruchbedingungen, indem Sie einfach Q eingeben:
Q gibt die Abbruchbedingungen aus
Sie sehen dann z.B. folgendes Bild:
Q PC x ;Programmzeiger
Q SR xxxxx XNZVC / EXT NEG ZER OVF CRY ;Flags
Q D0:x ;beliebiges Register
Q I:x ;auszuführende Instruktion
Q F O ;Verknüpfungsregel (O=OR, A=AND)
Ein kleines x bedeutet: spielt keine Rolle. Das O hinter F zeigt an, da₧ alle
Bedingungen mit ODER verknüpft sind, d.h. die Erfüllung einer einzigen Bedingung
führt zum Abbruch. Stünde dort ein A (für AND), mü₧ten alle Bedingungen gleich-
zeitig erfüllt sein, um Untrace abbrechen zu lassen.
Nehmen wir an, in Adre₧register A0 haben Sie einen Zeiger auf eine Tabelle
angelegt. Da das Programm manchmal völlig falsche Werte zurückgibt, vermuten
Sie, da₧ irgendwo der Zeiger in A0 zerstört wird. Um genau den Punkt zu finden,
an dem dies passiert geben Sie ein:
Q A0:>< .TABELLE
und starten Ihr Programm mit dem U-Befehl (Nicht vergessen, mit X den PC auf
den Programmstart zu legen). Sobald A0 einen anderen Wert enthält als die
Adresse, die dem Label TABELLE entspricht, bricht Untrace ab.
Anderes Beispiel - Ihr Programm enthält folgende Schleife:
lea ENDE,a3
lea START,a2
LOOP: move (a2)+,d1
bsr RECHNEN
cmp a3,a2
bne LOOP
an irgendeiner Stelle kommt RECHNEN mit dem Wert 1 in d7 zurück, was, so haben
Sie es in Ihrem Programm festgelegt, bedeutet, da₧ ein Fehler aufgetreten ist.
Damit Sie das Programm nicht aus Versehen in RECHNEN stoppen, sondern sicher
die obige Schleife erwischen, geben Sie folgendes ein:
Q D7:= 1 ;Abbrechen, wenn d7 1 ist
Q I:bne LOOP ;UND bne LOOP ausgeführt werden soll
Q F:A ;^^^
Alle anderen Bedingungen setzen Sie auf x. Wenn Sie nun das Programm wieder
(nach entsprechendem Setzen des PC) mit dem U-Befehl starten, wird die
Programmausführung an der gewünschten Stelle abgebrochen.
R - Read
Mit dem R-Befehl können Sie ein Maschinenprogramm von Diskette laden:
R <name> <Adresse> lädt das Maschinenprogramm <name> an die angegebene Adresse
Wenn Sie ein Programm an die nächste verfügbare Adresse laden wollen, verwenden
Sie bitte den E-Befehl (Execute Program).
S - Set
Dient zum Verändern einzelner Speicherinhalte. Syntax:
S.B <Adresse> Byte-weise
S.W <Adresse> Word-weise
S.L <Adresse> Long-weise
Die jeweilige Adresse wird mit ihrem momentanen Inhalt ausgegeben, dahinter
steht ein Komma, nach S.B 50000 beispielsweise:
$50000:.B 00,
Der Inhalt der Speicherzelle $50000 ist also $00. Wenn Sie nun einen anderen
Wert eingeben und <Return> drücken, so erhält die Speicherzelle den von
Ihnen eingebenen Wert; Drücken Sie nur <Return>, wird der Inhalt nicht
verändert. In beiden Fällen erscheint die nächste Speicherzelle samt Inhalt.
Um diese Eingabe abzubrechen, müssen Sie nur mit dem Cursor die Zeile verlassen
Çoder den Bildschirm löschen. Sobald Sie in einer Zeile sind, die kein .B, .W, .L
nach der Adresse enthält, ist die Set-Funktion abgeschaltet.
Einfacher haben Sie es in den meisten Fällen jedoch mit dem D-(Dump-)Befehl.
T - Trace
Wenn Sie Ihr Programm mit diesem Befehl starten, werden bei jedem ausgeführten
Befehl die Inhalte der Register, der momentane Programmzähler, die Flags und
der nächste auszuführende Befehl ausgegeben - Sie können also jeden Schritt
Ihres Programmes genauestens überwachen. Syntax:
T führt einen Befehl ab der momentanen PC-Adresse aus (diese können
Sie mit dem X-Befehl ändern). Den nächsten Befehl können Sie durch
weiteres T ausführen lassen usw. Eine Spur (siehe Q-Befehl, Queue)
wird mitgeführt.
T <zahl> führt die angegebene Anzahl Befehle ab der momentanen PC-Adresse
aus. Nach jedem Schritt werden alle Registerinhalte, die Flags
und der nächste auszuführende Befehl angezeigt.
Trace dient vor allem zur Fehlersuche an extrem kritischen Stellen. Meist kann
man auf Trace verzichten und das bequemere Untrace verwenden, da der IDEAL die
Möglichkeit des Bedingten Abbruchs (Quit if) zur Verfügung stellt und sich
die 64 zuletzt ausgeführten Befehle merkt (Queue).
U - Untrace
Mit diesem Befehl können Sie Ihre Maschinenprogramme überwacht ablaufen lassen.
Überwacht hei₧t:
- Sie können Bedingungen angeben, unter denen das Programm ab-
brechen soll, beispielsweise wenn der Stack eine bestimmte Tiefe erreicht hat;
näheres über Abbruchbedingungen siehe Q-Befehl (Quit if).
- Der IDEAL merkt sich die jeweils 64 zuletzt ausgeführten Befehle. So können
Sie den Programmverlauf nachträglich verfolgen. Siehe Q-Befehl (Queue).
Verwenden können Sie den Untrace-Befehl auf zwei Arten:
U startet ein Maschinenprogramm ab der momentanen PC-Adresse (diese
können Sie mit dem X-Befehl ändern) und bricht erst ab, wenn die
mit Q eingestellte Bedingung erfüllt ist oder ein ILLEGAL-Befehl
ausgeführt wird. Das geUNTRACEte Programm läuft etwa 100-mal lang-
samer ab als ein normal mit G oder C gestartetes.
U <zahl> wie oben, bricht jedoch au₧erdem automatisch nach <zahl> Befehlen
ab. Beispiel: U 5 bricht nach 5 Befehlen ab.
V - View Labeltab
Die beim Assemblieren erzeugte Labeltabelle können Sie mit dem V-Befehl ausgeben
und so eine umfassende Antwort auf die Frage "Was steht wo?" erhalten. Sinnvoll
vor allem in Zusammenarbeit mit dem P-(Printer-)Befehl:
P V gibt die Labels und die Ihnen zugeordneten Adressen auf dem Drucker aus
W - Write
Schreibt einen Speicherbereich auf Disk. Syntax:
W <name> <Startadresse>,<Endadresse>
Beispiel:
W BERGMANN.TOS 50000,55FF0 schreibt den Speicherbereich von 50000 bis
55FF0 unter dem Namen BERGMANN.TOS auf Disk.
X - eXamine Registers, eXchange Register Contents
Ein Buchstabe, zwei Befehle, das kennen Sie schon. Alle Register anzeigen
können Sie mit der ersten Variante, eXamine Registers:
X gibt alle Register, die Flags und den an der PC-Adresse beginnenden
Befehl aus.
Wenn Sie Registerinhalte ändern wollen, schreiben Sie hinter das X einen
Doppelpunkt und den Namen des Registers, das Sie ändern wollen, also z.B.
X: D0 ffffffff setzt Register D0 auf den Wert $ffffffff
oder
ÇX: SR 0003 setzt Carry-Bit und Overflow-Bit im Statusregister
Z - Assemblieren mit Optimieren von Branches, die nach vorne zeigen.
Mit dem normalen A-Befehl zum Assemblieren werden nur rueckwaerts zeigende
Spruenge optimiert (also von .W nach .B geaendert). Der Z-Befehl optimiert
auch Spruenge, die nach vorne zeigen. Allerdings wird die Assemblierzeit ver-
doppelt.
Y - Notbremse, wenn Sie waehrend Z (Assemblieren mit Optimieren) mit Hilfe der
Shifttaste abgebrochen haben. In diesem Fall ist Ihr Sourcetext mit viele
CTRL-A's durchsetzt. Y wirft diese CTRL-A's wieder raus.
/ - Exit aus dem IDEAL-System, Rueckkehr ins GEM-Desktop
Im IDEAL ist eine Moeglichkeit vorgesehen, aus Maschinenprogrammen, die z.B. in
Endlosschleifen "haengen", wieder auszusteigen. Das geschieht, indem Sie gleich-
zeitig beide Shifttasten druecken und dann wieder loslassen.
*** DER ASSEMBLER
-------------
Im IDEAL ist ein schneller Two-Pass-Assembler integriert, der die mit dem Editor
erstellten Quelltexte ("Sourcecodes") in ausführbare Maschinenprogramme über-
setzt ("assembliert").
Den Assembler rufen Sie aus dem Debugger heraus mit dem A-Befehl auf:
A assembliert das Programm, das gerade mit dem Editor bearbeitet
wird.
A <name> assembliert das Programm <name> von Disk.
A W assembliert das gerade im Editor befindliche Programm und gibt
"Warnings" aus. Warnings sind "kleine" Fehlermeldungen, Hinweise
auf mi₧verständliche oder kritische Programmzeilen - wie z.B.
add D0,A3
#warning: will be extended to long-word
A W <name> assembliert das Programm <name> von Disk und gibt Warnings aus.
Grundsätzlich wird immer in den Speicher assembliert, das fertige Programm legt
IDEAL ab der ersten freien Adresse ab. -- Es ist so noch nicht ausführbar! --
Nach dem Assemblieren MUSS eine der drei folgenden Funktionen aufgerufen werden:
a,w <name> WRITE: schreibt das assemblierte Programm unter dem Namen
<name> (.TOS,.TTP oder .PRG anhängen!) auf Diskette
Das Programm ist ausführbar.
a,l <name> LINK: wie a,w <name>,schreibt aber sämtliche Labels mit
auf Disk. PGM wird doppelt so lang, besseres Debugging.
a,d DEBUG: macht das Programm im Speicher ausführbar.Vor dem
Debuggen aufrufen.Danach a,w und a,l nicht mehr versuchen!
** DIE SYNTAX des im IDEAL integrierten Assemblers entspricht weitgehend der
Standard-Syntax von Motorola. Abweichungen ergeben sich vor allem dadurch,
da₧ der IDEAL wesentlich toleranter ist.
- Alle Immediate- und Adre₧register-Befehle können auch ohne das in der
Standard-Syntax vorhandene "I" bzw. "A" am Ende des Befehls-Mnemonics
eingegeben werden; also MOVE A0,A1 statt MOVEA A0,A1 oder ADD #3,D1 statt
Ç ADDI #3,D1.
- TRAPs mit oder ohne #-Zeichen: TRAP 1 und TRAP#1 sind gleich.
- die Bezeichnung SP ("Stackpointer") für das Register A7 ist zulässig.
MOVE D0,-(SP) entspricht MOVE D0,-(A7)
Selbstverständlich ist auch die Motorola-Syntax zulässig.
** Sprung- oder Adre₧marken ("Labels") werden durch einen nachfolgenden Doppel-
punkt gekennzeichnet:
LOOP: subq #1,d3
bne LOOP
Labelnamen dürfen bis zu 8 Zeichen lang sein.
** Zahlen
* Zahlensysteme:
100 dezimal
$100 hexadezimal (=dez. 256)
%100 binär (=dez. 4)
@100 oktal (=dez. 64) *+*
"100" ASCII (=dez. 49,48,48)
* Rechnen: statt einer Zahl kann stets ein Rechenausdruck stehen. Zulässig sind
die vier Grundrechenarten sowie Potenzieren. Der IDEAL führt Berechnungen im
Bereich von -2^31 bis +2^31 aus (long integer Arithmetik). Nachkommastellen
werden nicht gerundet, sondern abgeschnitten; 10/6 ist also nicht 2, sondern 1.
**~ PSEUDO-OPs
verwenden Sie, um dem Assembler Befehle zu geben.
*~ TABELLEN
~ Define Constant - verwendet man, um Daten abzulegen, die das Programm braucht.
z.B. Fehlermeldungs-Texte, Ansprung-Tabellen.
.DC.B Define Constant Byte - einzelne Bytes werden abgelegt.
.DC.B $F,"A",3*3 legt die Bytes $0F,$41 und $09 ab
.DC.W Define Constant Word - Words (je 16 Bit) werden abgelegt.
Werte, die nur ein Byte beanspruchen würden, werden trotzdem
als Word abgelegt (werden auf Word "erweitert")
.DC.W $30A,%1010 legt die Words $030A und $000A ab
.DC.L Define Constant Long - Longs (je 32 Bit) werden abgelegt.
Byte- oder Word-Werte werden auf Long erweitert.
.DC.L "SEX",6,START legt die Longs $00534558 und $00000006
und die Adresse des Labels START ab.
~ Define Space - mit diesem Pseudo-Op reservieren Sie Platz für Werte, die Ihr
Programm während der Ausführung erzeugt - z.B. Zwischenergebnisse, Dateipuffer.
.DS.B Define Space Byte - Platz für die angegebene Anzahl Bytes
wird reserviert.
.DS.B 10 reserviert 10 Bytes Speicherplatz
.DS.W Define Space Word - Platz für die angegebene Anzahl Words
wird reserviert.
.DS.W 10 reserviert 10 Words, also 20 Bytes
.DS.L Define Space Long - Platz für die angegebene Anzahl Longs
wird reserviert.
.DS.L 10 reserviert 10 Longs, also 40 Bytes
Ç~EVEN
.EVEN wenn die Adresse, an der das nächste Zeichen abgelegt würde,
ungerade ist, so wird sie um 1 erhöht (ist also dann gerade).
Wird gebraucht, wenn Tabellen, auf die mit WORD- oder LONG-
Adressierung zugegriffen wird, auf Tabellen folgen, die BYTE-
weise adressiert werden, da WORD- und LONG-Zugriffe auf ungerade
Adressen vom Prozessor nicht verarbeitet werden und zu
einem ADRESS ERROR führen.
*# Globale Label-Definition
Wenn Sie mehrere Programmteile zu einem Gesamt-Programm zusammenfügen wollen,
so gibt es in jedem Programmteil Stellen, auf die aus anderen Programmteilen
zugegriffen wird.
Beispielsweise besteht Ihr Programm SINUS aus den Teilen RECHNEN und ZEICHNEN.
Im Programmteil RECHNEN werden alle Werte einer Sinus-Kurve komplett
berechnet und in einem Speicherbereich abgelegt. Anschlie₧end werden im
VOLLSTÄNDIG UNABHÄNGIGEN Programmteil ZEICHNEN die berechneten Werte aus dem
Datenfeld geholt und gezeichnet. Gemeinsam ist beiden Programmteilen das
Datenfeld; es mu₧ als globales Label definiert werden, wenn Sie die Programm-
teile getrennt erstellen und anschle₧end mit dem O-Befehl linken.
So könnte der Programmteil RECHNEN aussehen:
RECHNEN:lea TABELLE,a0 ;Adresse der Daten-Tabelle laden
move.w #359,d0 ;in 1-Grad-Schritten von 359 bis 0
NEXT: move.w d0,d1 ;Winkel verdoppeln zur
add.w d1,d1 ;Ermittlung der Position in der Tabelle
jsr SIN_BER ;Sinus berechnen
move.w d2,0(a0,d1.w) ;Ergebnis in der Tabelle abspeichern
dbf d0,NEXT ;1 Grad abziehen, nächster Wert
usw.
usw.
TABELLE:ds.w 360 ;360 Words Platz reservieren. Label TABELLE
;enthält die Adresse dieses Speicherbereiches
usw.
usw.
.globl TABELLE ;Global-Definitionen MÜSSEN am Schlu₧ stehen
;Ende des Programmteiles RECHNEN
...und so der Programmteil ZEICHNEN:
ZEICHNEN:lea TABELLE,a0 ;Adresse der Daten-Tabelle laden
move.w #359,d0 ;in 1-Grad-Schritten von 359 bis 0
NEXT: move.w d0,d1 ;Winkel verdoppeln zur
add.w d1,d1 ;Ermittlung der Position in der Tabelle
move.w 0(a0,d1.w),d2 ;Wert aus der Tabelle holen
jsr PLOT ;Punkt einzeichnen
dbf d0,NEXT ;1 Grad abziehen, nächster Wert
usw.
usw. ;Das Label TABELLE steht bereits im Teil
;RECHNEN, braucht also hier nicht mehr
;definiert zu werden. Der ds.w-Befehl
;fällt also weg.
Ç.globl TABELLE ;Sie müssen jedoch darauf hinweisen, da₧
;TABELLE ein globales Label ist.
;Ende des Programmteiles ZEICHNEN
# Lokale Labels
Sicher ist Ihnen aufgefallen, da₧ sowohl im Programmteil RECHNEN als auch im
Teil ZEICHNEN ein Label mit dem Namen NEXT vorkommt. Da nicht
,globl NEXT
am Schlu₧ der beiden Teile steht, ist dieses Label lokal, d.h. nur im jeweiligen
Programmteil gültig. Die beiden Labels sind völlig unabhängig voneinander
und stören sich nicht.
# .XREF und .XDEF
Aus Kompatibilitätsgründen (damit Sie auch Quelltexte anderer Assembler mit
dem IDEAL übersetzen können) gibt es die Befehle .xref und .xdef; sie sind
100% identisch mit dem .globl Befehl. Statt
.globl TABELLE
könnte man im Programm SINUS auch schreiben:
.xref TABELLE
oder
.xdef TABELLE
*# .END
Sobald IDEAL auf den Befehl .END stö₧t, ist für ihn der Quelltext zu Ende.
Ab diesem Punkt wird der gesamte Rest des Quelltextes ignoriert. Diesen
Befehl verwenden Sie beispielsweise, wenn Sie die Anleitung zu einem
Programm zusätzlich zu dessen Quelltext im Speicher halten möchten.
Ein konkretes Anwendungsbeispiel ist auch diese Anleitung: da in der ersten
Zeile ein .end-Befehl steht, können Sie sie gleichzeitig mit Ihren gerade
bearbeiteten Programmen im Speicher halten und bei Bedarf kurz nachschlagen.
*** DER EDITOR
----------
Taste / Tasten- Arbeitsweise / Wirkung
kombination
[Help] Mit [Help] rufen Sie eine Hilfe auf. Die "[Help]-Seite" ist
jedoch nur eine kurze Auflistung aller Kommandos.
Der "alte Hase" unter den Programmierern wird allein damit
zurechtkommen, normalerweise ist die [Help]-Seite jedoch zum
Nachschlagen gedacht, falls ein Kommando zu tief unten im
"Erinnerungskasten" steckt.
Pfeil- Die Pfeiltasten bewegen den Cursor im Text in die gewünschte
tasten Richtung.
[Delete] Die Taste [Delete] löscht ein Zeichen und bewegt den Cursor
nach links. Dabei rückt der Rest der Zeile nach links auf.
Im Insert-Modus dagegen wird das Zeichen "unter" dem Cursor
gelöscht und der Cursor bleibt stehen.
[Insert] Die Taste [Insert] fügt eine Leerstelle im Text ein.
[Backspace] Mit [Backspace] löscht man ein Zeichen; der Cursor geht mit
nach links, der Rest der Zeile rückt nur im Insert-Modus
Ç auf.
[Tab] rückt den Cursor auf die nächste 8-er-Spalte vor.
Im Insert-Modus schiebt der Cursor den nachfolgenden Text mit.
[Return] oder rückt den Cursor auf den Anfang der nächsten Zeile.
[Enter]
[Home] Mit [Home] bewegen Sie den Cursor zur ersten Zeile des Textes,
oder - wenn er bereits dort ist - zur letzten Zeile.
[Control]-[Home]dient zum löschen des Restes einer Zeile
[Alternate] Durch Drücken der Taste [Alternate] erscheint eine Information
über die Zeile und Spalte im Text, in der sich der Cursor
gerade befindet.
[Alternate] hat allerdings auch noch andere Funktionen:
- Abbrechen der Wiederholungsfunktion (Taste [F6] )
- Abbrechen einer Such- oder Ersetzfunktion (Tasten [F2],[F3] ).
[Control]-[A] bewirkt, da₧ das Nächste Zeichen als Control-Zeichen in den
Text übernommen wird.
[Control]-[M] bewegt den Cursor an den Anfang der Zeile.
[Control]-[I] schaltet den Insert-Modus ein oder aus.
[Esc] Mit der Taste [Esc] werden verkehrte Eingaben gelöscht. So wird eine
Zeile z.B. wiederhergestellt, wenn man ein Buch auf der Leertaste
"abgestellt" hat und auf das Klickern der Tastatur hin feststellt,
da₧ die erste Hälfte der Zeile weg ist.
Ebenso wird ein begonnenes Kommando (z.B. [Shift]-[F8], also Laden
eines Textes) mit [Esc] abgebrochen.
[Undo] Wirkt wie [Esc]. Eine Ausnahme besteht beim Ersetzen mit Auswahl.
Für die Funktionstasten empfehlen wir folgende Beschriftung:
F1 F2 F3 F4 F5 F6 F7 F8 F9 F10
SPLIT SCREEN MODE .... .... CUT DEF LOAD DEL FAST /\
--------------------------------------------------------------------------------
GO FIND/QU REPL/ALL .... .... REPEAT BLOCK SAVE INS FAST \/
Die Funktionen der Tasten [F4], [F5], [Shift]-[F4] und [Shift]-[F5] können Sie
selbst bestimmen. Deswegen entfällt bei diesen Tasten die Beschriftung.
[Control]-[D] "DIR". Gibt ein Inhaltsverzeichnis aus.
Gültige PATHNAMEs sind z.B.:
A:\*.* *.* b:\*
*.txT ordner\*.prg a:\auto\edi.pRg
[F1] [Pfeil hoch] "GO UP". Die Zeile, in der der Cursor steht, wird
an den oberen Bildschirmrand geholt.
[F1] [Pfeil runter] "GO DOWN". Die Zeile, in der der Cursor steht, wird
Ç an den unteren Bildschirmrand geholt.
[F1] [+] [9] [Return] "GO PLUS". Der Cursor springt 9 Zeilen weiter.
[F1] [-] [9] [Return] "GO MINUS". Der Cursor springt 9 Zeilen zurück.
[F1] [5] [0] [Return] "GO". Der Cursor springt auf Zeile 50.
[F1] [F2] "QUIT". Ende des Editierens. Der (Programm-)Text
sollte bereits abgespeichert sein, wenn Sie dieses
Kommando mit [Return] bestätigen.
[F2] [F2] Text [Return] "FIND QUERY". Sucht ab der Cursorposition. Wenn Sie
auf die Frage "SEARCH FOR:" nichts eingeben (also
nur [Return] ), wird derselbe Text wie das letztemal
gesucht.
Beispiel: Sie suchen in einem Assemblerprogramm das
Label "conout:". Sie geben also ein:
[Home] [F2] [F2] conout: [Return]
Der Editor findet nun die Folgende Zeile:
;Besonderheiten der Routine conout: 1. Alle Register
Sie suchen weiter:
[F2] [F2] [Return]
Der Editor findet nun die richtige Zeile:
conout: movem.l d0-d2/a0-a2,-(a7)
Bei der Eingabe des Suchtextes sollten sie beachten,
da₧ Leerzeichen v o r dem Cursor anerkannt werden,
h i n t e r dem Cursor nicht. Beispiele: (das "#" soll
den Cursor symbolisieren)
|conout: # "conout: "
|co#out: "conout:"
|# "conout:" (der Text vom Letztenmal)
| # " "
[F2] [F3] Text [Return] "LIST". Nehmen wir einmal an, das Label "conout:" wäre
im obigen Beispiel nicht gefunden worden. Nun ist guter
Rat teuer. Wie hie₧ denn dies verf... Ding nochmal???
Mit [F2] [F3] [Shift]-[:] [Return] listen Sie alle
Stellen auf, an denen ein Doppelpunkt vorkommt:
00001 main: move.l #$ffffffff,-(a7)
00015 loop: move.b (a0)+,(a1)+
(!) 00127 chrout: movem.l d0-d2/a0-a2,-(a7)
00272 quit: clr.l -(a7)
Die Funktion "LIST" eignet sich auch zum schnellen
nachschauen "Wo hab' ich denn das noch verwendet?".
[F3] [F2] Text1 "QUERY REPLACE". Ersetzt (mit Abfrage) ab der Cursor-
[Return] Text2 [Return] position Text1 durch Text2.
[F3] [F3] Text1 "REPLACE ALL". Ersetzt (ohne Abfrage) im ganzen Text
[Return] Text2 [Return] Text1 durch Text2.
[Shift]-[F1] "SPLIT". Der Bildschirm wird in mehrere voneinander
unabhängige Fenster geteilt. Durch diese Einteilung
wird es möglich, an einer Stelle zu schreiben, und
gleichzeitig eine andere Stelle zum Vergleich
heranzuziehen.
Nochmaliges Betätigen von [Shift]-[F1] hebt die
Teilung wieder auf.
[Shift]-[F2] "SCREEN". Der Cursor wechselt das Fenster, in dem er
Ç arbeitet. Der Wechsel findet auch dann statt, wenn
das Fenster, in dem sich der Cursor befindet, den
ganzen Bildschirm belegt (also wenn das SPLITting
abgeschaltet ist).
[Shift]-[F3] "MODE". Stellt die Grö₧e der Schrift ein. Wir
empfehlen die ganz kleine Schrift auf dem S/W-Monitor
nur für Gro₧buchstaben und für Leute, die (noch?)
keine Probleme mit dem Sehen haben - oder wenn man mal
kurz ein drittes Fenster braucht.
[F6] [1] [0] [Return] "REPEAT". Die Beliebige Taste wird 10-mal wiederholt.
[Beliebige Taste] Sollte die "Beliebige Taste" eine Funktionstaste
(auch die definierbaren) sein, so kann das [Return]
weggelassen werden.
[Shift]-[F6] [F9] "CUT INSERT". Trennt die aktuelle Zeile in einen Teil
links vom Cursor und in einen Teil rechts vom Cursor.
Der Teil rechts vom Cursor wird nach unten in eine
neue Zeile geschoben.
[Shift]-[F6] "CUT DELETE". Fügt (umgekehrt wie oben) zwei Hälften
[Shift]-[F9] zu einer Zeile zusammen.
[F7] [F7] "BLOCK". Markiert den Anfang eines Blocks.
[F7] [Shift]-[F7] "BLOCK DEF". Markiert das Ende des Blocks.
[F7] [F8] "BLOCK SAVE". Der Block wird abgespeichert. Siehe [F8]
[F7] [Shift]-[F8] "BLOCK LOAD". Ein Block wird geladen und in den Text
eingefügt. Siehe [Shift]-[F8]
[F7] [F9] "BLOCK INSERT". Der Block wird an der Stelle, an der
der Cursor steht, eingefügt (kopiert).
[F7] [Shift]-[F9] Der Text im Block wird gelöscht.
[Return]
[Shift]-[F7] "DEF". Die Funktionstaste [Shift]-[F4] wird definiert.
[Shift]-[F4] Text Der Text kann auch alle Kommandos au₧er [F6] (REPEAT),
[Shift]-[F4] [Help] und [Shift]-[F7] (DEF) beinhalten.
Ein flei₧ig kommentierender Maschinensprache-
programmierer wird z.B. [F4] so belegen:
[Shift]-[F7] [F4]
[Control]-[M] [Tab] [Tab] [Tab] [Tab] [Shift]-[;]
[F4]
Immer, wenn er nun [F4] eingibt, wird der Cursor
hinter einem Semikolon (;) in Spalte 33 brav auf
einen Kommentar warten.
[F8] Dateiname [Return] "SAVE". Speichert den Text unter dem angegebenen Namen.
Bitte beachten Sie den Aufbau eines Dateinamens:
[ B:\ ] [ ordner\ ] name.typ
Den Schrägstrich rückwärts ("backslash") sollte man
auch beim Laufwerknamen nicht vergessen.
[Shift]-[F8] "LOAD". Lädt den angegebenen Text
Dateiname [Return]
[F9] "INSERT". Fügt eine Zeile ein.
Ç[Shift]-[F9] "DELETE". Löscht eine Zeile.
[F10] "FAST DOWN". Entspricht vielen "Pfeil runter"s.
[Shift]-[F10] "FAST UP". Entspricht vielen "Pfeil hoch"s.
Zum Schlu₧ noch eine Anmerkung zum Problem der TAB's (Zeichen 9, Control-I):
Wenn zum Beispiel in einer Datei stand:
|
|hier:(TAB)moveq.l #"(TAB)",d1
|
Wird auf dem Bildschirm dargestellt:
|
|hier: moveq.l #" ",d1 <<< ausgedruckt auf dem Drucker sieht
| das ganz anders aus, also schauen
Sie sich das besser im Editor an.
Sie können also TAB's in Anführungszeichen setzen. Beim Suchen werden TAB's
jedenfalls nur als solche gewertet, wenn sie in Anführungszeichen stehen.
Wenn Sie in einer Zeile ein oder mehrere Leerzeichen eingeben, die bis zu einer
8-er-Spalte reichen, so werden diese automatisch zu einem TAB zusammengefa₧t.
Es besteht also kein Unterschied darin, ob Sie mit acht Leerzeichen oder mit
der Taste TAB einrücken.
Und nun wünschen wir Ihnen viel Spa₧ beim Arbeiten mit dem Editor.
Für weitere Fragen wenden Sie sich bitte an:
( Vertrieb ) ( "Technisches" )
OMIKRON-Software Artur Södler
Erlachstr. 15 Belremstr. 151
7534 Birkenfeld 2 7530 Pforzheim
Tel. 07082 5386 Tel. 07231 766410