.end	;Anleitung zum I ntegrierten
                       D ebugger
                       E ditor
                       A ssembler
                       L inker

         diese Anleitung knnen 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: entkfern, als "bug" wird ein Programmfehler bezeichnet) der letzte
Schritt. Allerdings ist der Zeitaufwand fr das Debuggen enorm: bis zu 70% der
gesamten Programmierzeit gehen fr das Debuggen "drauf" - einer der wesentlich-
sten Vorteile einer hohen Programmiersprache ist es, da diese Zeit drastisch
verkrzt wird.
Aus diesem Grund ist ein Debugger ein sehr wichtiges Teilstck eines Assembler-
entwicklungspaketes. Der Debugger im IDEAL zhlt zu den leistungsfhigsten
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 mssen diesem Vorschlag
nicht folgen, es ist leicht mglich, die Adresse abzundern:
Fahren Sie mit der Taste "Cursor links" auf die Adresse 78cd4 und ndern Sie
auf die gewnschte andere Adresse (nehmen wir einmal 70000) ab. Den Doppelpunkt,
der nach der Adresse folgt, drfen 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 zustzlich als ASCII aus.
Probieren Sie es einfach aus. Geben Sie in die Zeile, wo schon unsere genderte
Adresse 70000 steht, zustzlich noch D 70000 ein und drcken Sie RETURN. (Dabei
ist es unerheblich, ob Sie ein groes 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 enthlt 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 fr die Speicherzellen 70000-70040 interessieren, mssen 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 genderte Daten reagiert, knnen
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
drcken Sie zur Besttigung (CR)- schon wird die ganze genderte Zeile in den
Speicher geschrieben, und die nderung ist damit ausgefhrt. Die Mglichkeit,
mit den Cursortasten auf dem Bildschirm herumfahren zu knnen und durch Druck
auf (CR) die Zeile, in der der Cursor steht, bernehmen zu knnen, nennt man
"Screen-Editing".
Wenn Sie nur ein einziges Byte im Speicher (z.B.die Adresse $74000 auf $ff) ab-
ndern wollen, ist es umstndlich, zuerst D 74000 (CR) einzugeben, und dann mit
dem Cursor in die erste Zeile zu fahren und (CR) zu drcken. 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 hrt 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, nmlich
die 16 Bytes in Hexzahlen, die am Anfang stehen, und dann die 16 Byte ASCII-In-
formation (nochmal das Gleiche). Diese Fhigkeit knnen Sie dazu ausntzen,
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 erlutert. Wir wollen jetzt voll in die Materie einsteigen, und
fangen deshalb mit den Zahlensystemen an.
Im IDEAL knnen Sie an fast allen Stellen Zahlen oder Argumente in verschiedenen
Zahlensystemen eingeben. So ist es in vielen Fllen praktisch, Zahlargumente
nicht nur in Hexadezimal, sondern auch im blichen Zehnersystem eingeben zu
knnen. IDEAL erlaubt die Eingabe von Zahlen und Argumenten in Hexadezimal,
Dezimal, Oktal, Binr und ASCII. Um zu kennzeichnen, in welchem Zahlensystem
ein Argument gedacht ist (so kann das Zeichen "1" jedem der oben beschriebenen
Zahlsysteme angehren), mssen Sie ein Kennzeichen davorsetzen. Diese Kennzeichen
sind wie folgt:
$ (oder gar nichts) fr Hexadezimal
. fr Dezimal
@ fr Oktal
% fr Binr
"" fr ASCII (hier kann oft auch das '-Zeichen verwendet werden)
So bedeutet die Zahl .10000 dezimal zehntausend, %101 steht fr dezimal 5,und
10000 steht fr 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 Mglichkeit, diese Zahl auf dem Bildschirm zu ndern. Es ist aber
auch mglich, 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 Erklrung 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 Programmausfhrung stoppt, die Register ausge-
geben werden, und der Benutzer analysieren kann, was geschehen ist. Der B-Befehl
gibt die momentanen Inhalte der Breakpoints aus, lt nderungen zu oder lscht
alle Breakpoints. Die Syntax ist:
B   -gibt alle Breakpoints auf dem Bildschirm aus
B C - lscht 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> ausgefhrt.
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 Abstrzen 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 Rcksprung-
adresse, die in den Debugger zeigt, d.h., das Assemblerprogramm kann -und soll-
mit einem RTS-Befehl aufhren.
Der Call-Befehl bietet auch noch einige andere Optionen. So ist es in den meisten
Fllen von Nutzen, das Programm nur bis zu einer bestimmten Adresse ausfhren
zu lassen. Nehmen wir einmal an, Sie wollten Ihr Programm, das ab der Adresse
$40b7c steht, ausfhren, 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
Ausfhrung angelangt ist, wird es gestoppt, und die Register zu diesem Zeitpunkt
werden angezeigt. Weil die Rcksprungadresse aber noch auf dem Stack liegt, ist
der Stackpointer um ein Langwort erniedrigt, und sollte manuell korrigiert wer-
den. Diese Arbeit knnen 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 ausgefhrt. Es wird
allerdings nur genau der eine einzige Befehl, der dort steht, ausgefhrt; 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 ausgefhrte Befehl ein Unterprogrammaufruf sein. In diesem Fall wird
das ganze Unterprogramm aufgerufen! Sie knnen also "C" ohne Adresse ersetzen
durch "G ,<Adresse des nach dem aktuellen Befehls folgenden Befehls>".(vgl. G-
Befehl).

Die vierte der mglichen Syntaxen ist das
C ,<Adresse>
In diesem Fall wird das Programm ab der derzeitigen Position des PC ausgefhrt
und, sobald die Ausfhrung 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 ermglicht 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 fr Labelnamen sind:
.start
._start
.ausgabe
.sinus
etc. Dabei werden Labels mit mehr als 8 Zeichen Lnge nicht untersttzt.

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 lauffhige Programme
von Disk in den Speicher einladen. Kommen wir zunchst 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. Natrlich mu das mit E geladene Programm auch wirklich
ausfhrbar sein, also vom Typ .PRG, .TTP oder .TOS sein.
Die Adresse, an die hingeladen werden soll, kann nicht beeinflut werden.
Ebenfalls ist es nicht mglich, zweimal hintereinander ein Programm mit E zu
laden, weil GEMDOS hier gewisse Restriktionen setzt. Sie mssen also den IDEAL
verlassen und neu starten, um wieder E name machen zu knnen. Allerdings kann
ein mit E eingeladenes und anschlieend mit G gestartetes Programm seinerseits
weitere Programme nachladen.

F-Fill memory (Speicher fllen)
Mit dem Fill-Kommando knnen Sie Speicherbereiche mit irgendwelchen Werten
fllen. 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 Langwrtern $4000000c gefllt.
Fill lt auch noch andere Datenparameter zu. Es ist zum Beispiel mglich,
den Speicher mit ASCII-Zeichenfolgen zu fllen, zum Beispiel ganz romantisch:
F a0000,b0000,"ich liebe Dich!"
Sehr hufig mu man ganze Speicherbereiche mit irgendwelchen Assemblerbefehlen
fllen (normalerweise NOP oder ILLEGAL-Anweisungen). Auch dies wird vom FILL-
Befehl untersttzt. Um einen Assemblerbefehl zu charakterisieren, mssen Sie
ein Ausrufezeichen voranstellen, etwa:
F a0000,b0000,!nop
In diesem Fall wird der Speicherbereich mit dem Hexcode gefllt, der dem Befehl
NOP entspricht.
Es sind auch komplizierte Ausdrcke mglich, 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
Rcksprungadresse auf dem Stack ablegt, das aufgerufene Programm also nicht mit
einem RTS-Befehl aufhren darf. Zweckmigerweise wird man an den Schlu des
Programmes eine ILLEGAL-Anweisung stellen. Das Ausfhren einer unerlaubten Op-
eration (wie ILLEGAL) fhrt im 68000 zu einer Ausnahmebehandlung (Exception).
Der Debugger fngt smtliche 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 gefllt 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 binr 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 Anfnge
des DATA- und BSS-Segments (siehe Assemblerteil) und die letzte vom Programm
benutzte Adresse. Diese Angaben sind rein informativ, d.h., sie knnen nicht
gendert werden. Sinnvoll ist I vor allem in Verbindung zum E-Befehl, da I erste
Aufschlsse ber Lnge und Struktur des geladenen Programmes liefert.

K-Kill
Mit dem K-Befehl knnen Sie, hnlich wie mit dem E-Befehl, wieder zwei grundver-
schiedene Dinge bewirken: lschen eines Disk-programmes, und lschen des Source-
textes. Den Sourcetext lschen Sie einfach mit
k "s"
Ein Programm auf Diskette knnen Sie mit
k <name>
lschen. Beispiel:
K ideal.prg
lscht 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 knnen
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 Mglichkeit, die symbolischen Adressen an jeder
Stelle einsetzen zu knnen, von groer Bedeutung. Es ist mglich, z.B.
L ._start
einzugeben!

M-MOVE (Speicherbereiche kopieren)
Der M-Befehl kopiert einen Speicherbereich an eine andere Stelle im Speicher.
So knnen 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 heit, 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:
Schlielich ist es auch noch mglich, weitere Angaben zu machen:
N b:\subdir\*.*
N a:*.PRG
etc.

O - Linker.
Der O-Befehl linkt mehrere Files auf der Diskette zusammen. Diese mssen 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 zusammenzufgen, geben
Sie ein:
O EINGABE,SUCHEN,AUSGABE=VERWALTG
Zum erfolgreichen Linken mu beachtet werden, da alle von auen angesprochenen
Labels als GLOBAL definiert werden mssen und da keine undefinierten Ansprnge
nach dem erfolgten Linken brigbleiben. Das Programm wird wieder als linkfhiges
File auf die Diskette geschrieben und kann - falls alle undefinierten Labels
whrend des Linkens eingesetzt werden konnten - auch ausgefhrt werden.
In fast allen Fllen erweist es sich jedoch als zweckmiger, berhaupt auf das
Linken zu verzichten und direkt die beiden Sourcefiles zusammenzufgen. Probleme
entstehen dabei mit identisch definierten Labels, die jedoch durch die FIND+RE-
PLACE-Funktion des Editors leicht gelst werden knnen.
Nheres 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 ausgefhrten
Befehle. Diese knnen Sie mit dem Queue-Befehl sich wieder anzeigen lassen.
Da auf den Bildschirm nur 25 Zeilen passen, mssen Sie angeben, welchen Bereich
des "Schweifes" Sie sehen mchten; IDEAL gibt ab dieser Stelle 20 Befehle aus:
q 5             gibt ab der fnften Stelle 20 Befehle aus.
Die nullte Stelle ist hier die "lteste", die 63-ste die "neueste", also der
zuletzt ausgefhrte Befehl.

2. Quit if
Mit dem Q-Befehl knnen Sie die Bedingungen setzen und abfragen, unter denen
der U-Befehl (Untrace, siehe dort) die simulierte Ausfhrung Ihres Programms
abbricht und in den normalen Debugger-Modus zurckkehrt.
Ansehen knnen 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                                     ;auszufhrende Instruktion
Q F O                                     ;Verknpfungsregel (O=OR, A=AND)
Ein kleines x bedeutet: spielt keine Rolle. Das O hinter F zeigt an, da alle
Bedingungen mit ODER verknpft sind, d.h. die Erfllung einer einzigen Bedingung
fhrt zum Abbruch. Stnde dort ein A (fr AND), mten alle Bedingungen gleich-
zeitig erfllt sein, um Untrace abbrechen zu lassen.
Nehmen wir an, in Adreregister A0 haben Sie einen Zeiger auf eine Tabelle
angelegt. Da das Programm manchmal vllig falsche Werte zurckgibt, vermuten
Sie, da irgendwo der Zeiger in A0 zerstrt 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 enthlt als die
Adresse, die dem Label TABELLE entspricht, bricht Untrace ab.
Anderes Beispiel - Ihr Programm enthlt 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 zurck, 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   ausgefhrt 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
Programmausfhrung an der gewnschten Stelle abgebrochen.


R - Read
Mit dem R-Befehl knnen Sie ein Maschinenprogramm von Diskette laden:
R <name> <Adresse>  ldt das Maschinenprogramm <name> an die angegebene Adresse
Wenn Sie ein Programm an die nchste verfgbare Adresse laden wollen, verwenden
Sie bitte den E-Befehl (Execute Program).


S - Set
Dient zum Verndern 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> drcken, so erhlt die Speicherzelle den von
Ihnen eingebenen Wert; Drcken Sie nur <Return>, wird der Inhalt nicht
verndert. In beiden Fllen erscheint die nchste Speicherzelle samt Inhalt.
Um diese Eingabe abzubrechen, mssen Sie nur mit dem Cursor die Zeile verlassen
oder den Bildschirm lschen. Sobald Sie in einer Zeile sind, die kein .B, .W, .L
nach der Adresse enthlt, ist die Set-Funktion abgeschaltet.
Einfacher haben Sie es in den meisten Fllen jedoch mit dem D-(Dump-)Befehl.

T - Trace
Wenn Sie Ihr Programm mit diesem Befehl starten, werden bei jedem ausgefhrten
Befehl die Inhalte der Register, der momentane Programmzhler, die Flags und
der nchste auszufhrende Befehl ausgegeben - Sie knnen also jeden Schritt
Ihres Programmes genauestens berwachen. Syntax:
T          fhrt einen Befehl ab der momentanen PC-Adresse aus (diese knnen
           Sie mit dem X-Befehl ndern). Den nchsten Befehl knnen Sie durch
           weiteres T ausfhren lassen usw. Eine Spur (siehe Q-Befehl, Queue)
           wird mitgefhrt.
T <zahl>   fhrt die angegebene Anzahl Befehle ab der momentanen PC-Adresse
           aus. Nach jedem Schritt werden alle Registerinhalte, die Flags
           und der nchste auszufhrende 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
Mglichkeit des Bedingten Abbruchs (Quit if) zur Verfgung stellt und sich
die 64 zuletzt ausgefhrten Befehle merkt (Queue).

U - Untrace
Mit diesem Befehl knnen Sie Ihre Maschinenprogramme berwacht ablaufen lassen.
berwacht heit:
- Sie knnen Bedingungen angeben, unter denen das Programm ab-
  brechen soll, beispielsweise wenn der Stack eine bestimmte Tiefe erreicht hat;
  nheres ber Abbruchbedingungen siehe Q-Befehl (Quit if).
- Der IDEAL merkt sich die jeweils 64 zuletzt ausgefhrten Befehle. So knnen
  Sie den Programmverlauf nachtrglich verfolgen. Siehe Q-Befehl (Queue).
Verwenden knnen Sie den Untrace-Befehl auf zwei Arten:
U          startet ein Maschinenprogramm ab der momentanen PC-Adresse (diese
           knnen Sie mit dem X-Befehl ndern) und bricht erst ab, wenn die
           mit Q eingestellte Bedingung erfllt ist oder ein ILLEGAL-Befehl
           ausgefhrt wird. Das geUNTRACEte Programm luft etwa 100-mal lang-
           samer ab als ein normal mit G oder C gestartetes.
U <zahl>   wie oben, bricht jedoch auerdem automatisch nach <zahl> Befehlen
           ab. Beispiel: U 5    bricht nach 5 Befehlen ab.

V - View Labeltab
Die beim Assemblieren erzeugte Labeltabelle knnen 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
knnen 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 ausfhrbare 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 miverstndliche 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.

Grundstzlich wird immer in den Speicher assembliert, das fertige Programm legt
IDEAL ab der ersten freien Adresse ab.  -- Es ist so noch nicht ausfhrbar! --

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 anhngen!) auf Diskette
                Das Programm ist ausfhrbar.

a,l <name>      LINK: wie a,w <name>,schreibt aber smtliche Labels mit
                auf Disk. PGM wird doppelt so lang, besseres Debugging.

a,d             DEBUG: macht das Programm im Speicher ausfhrbar.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 Adreregister-Befehle knnen 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") fr das Register A7 ist zulssig.
  MOVE D0,-(SP)  entspricht  MOVE D0,-(A7)

            Selbstverstndlich ist auch die Motorola-Syntax zulssig.

** Sprung- oder Adremarken ("Labels") werden durch einen nachfolgenden Doppel-
punkt gekennzeichnet:

LOOP:   subq #1,d3
        bne LOOP

Labelnamen drfen bis zu 8 Zeichen lang sein.


** Zahlen
* Zahlensysteme:
100             dezimal
$100            hexadezimal (=dez. 256)
%100            binr (=dez. 4)
@100            oktal (=dez. 64) *+*
"100"           ASCII (=dez. 49,48,48)

* Rechnen: statt einer Zahl kann stets ein Rechenausdruck stehen. Zulssig sind
die vier Grundrechenarten sowie Potenzieren. Der IDEAL fhrt 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 wrden, 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 fr Werte, die Ihr
Programm whrend der Ausfhrung erzeugt - z.B. Zwischenergebnisse, Dateipuffer.

.DS.B           Define Space Byte - Platz fr die angegebene Anzahl Bytes
                wird reserviert.
                .DS.B 10        reserviert 10 Bytes Speicherplatz
.DS.W           Define Space Word - Platz fr die angegebene Anzahl Words
                wird reserviert.
                .DS.W 10        reserviert 10 Words, also 20 Bytes
.DS.L           Define Space Long - Platz fr die angegebene Anzahl Longs
                wird reserviert.
                .DS.L 10        reserviert 10 Longs, also 40 Bytes

~EVEN
.EVEN           wenn die Adresse, an der das nchste Zeichen abgelegt wrde,
                ungerade ist, so wird sie um 1 erhht (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 fhren.


*# Globale Label-Definition

Wenn Sie mehrere Programmteile zu einem Gesamt-Programm zusammenfgen 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. Anschlieend werden im
VOLLSTNDIG UNABHNGIGEN 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 anschleend mit dem O-Befehl linken.

So knnte 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, nchster Wert

        usw.
          usw.

TABELLE:ds.w 360                ;360 Words Platz reservieren. Label TABELLE
                                ;enthlt die Adresse dieses Speicherbereiches
        usw.
          usw.

.globl  TABELLE                 ;Global-Definitionen MSSEN 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, nchster Wert

        usw.
          usw.                  ;Das Label TABELLE steht bereits im Teil
                                ;RECHNEN, braucht also hier nicht mehr
                                ;definiert zu werden. Der ds.w-Befehl
                                ;fllt also weg.

.globl  TABELLE                 ;Sie mssen 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 gltig. Die beiden Labels sind vllig unabhngig voneinander
und stren sich nicht.

# .XREF und .XDEF
Aus Kompatibilittsgrnden (damit Sie auch Quelltexte anderer Assembler mit
dem IDEAL bersetzen knnen) gibt es die Befehle .xref und .xdef; sie sind
100% identisch mit dem .globl Befehl. Statt
.globl  TABELLE
knnte man im Programm SINUS auch schreiben:
.xref   TABELLE
oder
.xdef   TABELLE


*# .END
Sobald IDEAL auf den Befehl .END stt, ist fr 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 zustzlich zu dessen Quelltext im Speicher halten mchten.
Ein konkretes Anwendungsbeispiel ist auch diese Anleitung: da in der ersten
Zeile ein .end-Befehl steht, knnen 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 gewnschte
tasten          Richtung.

[Delete]        Die Taste [Delete] lscht ein Zeichen und bewegt den Cursor
                nach links. Dabei rckt der Rest der Zeile nach links auf.
                Im Insert-Modus dagegen wird das Zeichen "unter" dem Cursor
                gelscht und der Cursor bleibt stehen.

[Insert]        Die Taste [Insert] fgt eine Leerstelle im Text ein.

[Backspace]     Mit [Backspace] lscht man ein Zeichen; der Cursor geht mit
                nach links, der Rest der Zeile rckt nur im Insert-Modus
                auf.

[Tab]           rckt den Cursor auf die nchste 8-er-Spalte vor.
                Im Insert-Modus schiebt der Cursor den nachfolgenden Text mit.

[Return] oder   rckt den Cursor auf den Anfang der nchsten 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 lschen des Restes einer Zeile

[Alternate]     Durch Drcken 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 Nchste 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 gelscht. 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 Hlfte 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.


Fr 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] knnen Sie
selbst bestimmen. Deswegen entfllt bei diesen Tasten die Beschriftung.




[Control]-[D]           "DIR". Gibt ein Inhaltsverzeichnis aus.
                        Gltige 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 zurck.

[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] besttigen.

[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:" wre
                        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
                        unabhngige Fenster geteilt. Durch diese Einteilung
                        wird es mglich, an einer Stelle zu schreiben, und
                        gleichzeitig eine andere Stelle zum Vergleich
                        heranzuziehen.
                        Nochmaliges Bettigen 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 Gre der Schrift ein. Wir
                        empfehlen die ganz kleine Schrift auf dem S/W-Monitor
                        nur fr Grobuchstaben und fr 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". Fgt (umgekehrt wie oben) zwei Hlften
[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
                        eingefgt. Siehe [Shift]-[F8]

[F7] [F9]               "BLOCK INSERT". Der Block wird an der Stelle, an der
                        der Cursor steht, eingefgt (kopiert).

[F7] [Shift]-[F9]       Der Text im Block wird gelscht.
[Return]

[Shift]-[F7]            "DEF". Die Funktionstaste [Shift]-[F4] wird definiert.
[Shift]-[F4] Text       Der Text kann auch alle Kommandos auer [F6] (REPEAT),
     [Shift]-[F4]       [Help] und [Shift]-[F7] (DEF) beinhalten.
                        Ein fleiig 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 Schrgstrich rckwrts ("backslash") sollte man
                        auch beim Laufwerknamen nicht vergessen.

[Shift]-[F8]            "LOAD". Ldt den angegebenen Text
Dateiname [Return]

[F9]                    "INSERT". Fgt eine Zeile ein.

[Shift]-[F9]            "DELETE". Lscht 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:
       |
       (komisches Zeichen, Siehe Editor !)
       |hier:   moveq.l #" ",d1     <<< ausgedruckt auf dem Drucker sieht
       |                                das ganz anders aus, also schauen
                                        Sie sich das besser im Editor an.

Sie knnen also TAB's in Anfhrungszeichen setzen. Beim Suchen werden TAB's
jedenfalls nur als solche gewertet, wenn sie in Anfhrungszeichen 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 zusammengefat.
Es besteht also kein Unterschied darin, ob Sie mit acht Leerzeichen oder mit
der Taste TAB einrcken.



Und nun wnschen wir Ihnen viel Spa beim Arbeiten mit dem Editor.
Fr weitere Fragen wenden Sie sich bitte an:

        ( Vertrieb )                    ( "Technisches" )

        OMIKRON-Software                Artur Sdler
        Erlachstr. 15                   Belremstr. 151
        7534 Birkenfeld 2               7530 Pforzheim

        Tel. 07082 5386                 Tel. 07231 766410
