home *** CD-ROM | disk | FTP | other *** search
- 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
-
-