HiSoft DevpacST
Jump to navigation
Jump to search
HiSoft
Bentzung der Assembler-Sprache von Personal Pascal
Hier wird geschildert, wie man Prozeduren und
Funktionen in Assembler Sprache schreibt und mit Pascal-Programmen
linkt, indem man DevpacST und OSS Personal Pascal verwendet.
Um Personal-Pascal-kompatible Objekt-Dateien zu generieren,
mssen Sie die DevpacST Version 2.02 oder sp„tere verwenden, da
frhere Versionen nicht kompatibel sind. Sie sollten DRI-Ausgabe-
Code w„hlen, wie es im Handbuch (Seite 48) beschrieben ist. Fgen
Sie dannach
COMMENT PASCAL
in Ihr Programm ein. Dadurch wird GenST angewiesen, das spezielle
Dateiformat fr Personal Pascal zu erzeugen. Die Deklaration der
Funktionen und/oder Prozeduren muž mittels der XDEF-Amweisung
erfolgen, deren Namen mssen in Grožbuchstaben erscheinen. Ihre
Anweisungen sollten in der TEXT-Sektion erfolgen. Globale
Variablen sollten Sie in der BSS-Sektion plazieren. Versuchen Sie
nicht, die DATA-Sektion zu verwenden, denn dadurch k”nnte der
Linker die Kontrolle verlieren.
Beim Assemblieren auf Diskette wird eine .0-Datei erzeugt. Diese
ist jedoch nicht identisch mit einer .0-Datei im DRI-Format, denn
erstere ist nur mit dem Pascal-Linker verwendbar. Sie k”nnen
dannach diese Datei als eine zus„tzliche Link-Datei gebrauchen.
(Lesen Sie bitte dazu Seite 5-3 in Ihrem Handbuch)
Die Regeln bezglich der von Pascal aufgerufenen Assembler
Sprache k”nnen Sie auf den Seiten 6-142 finden.
Hier ist ein knstlich einfaches Beispiel, welches den Gebrauch
von Parametern oder Return-Werten vermeidet. Es definiert ganz
einfach eine Prozedur, einen String am Bildschirm unter
Verwendung von GEMDOS auszugeben:
opt l2,c8+ DRI mode, short case sensitive labels
COMMENT PASCAL
xdef TESTING declare export (s)
TESTING move.l #message,-(a7)
move.w #9,-(a7)
trap #1
addq.l #6,sp
rts
message dc.b 'Hello',13,10,0
Diese Funktion sollte in einem Pascal-Programm deklariert werden,
die mit
PROCEDURE TESTING; EXTERNAL;
aufgerufen werden soll, wobei die .0-Datei von DevpacST als
zus„tzliche Link-Datei beim Linken des Hauptprogramms
spezifiziert ist.
2 Der kombinierte Editor/Makro-Assembler
-Žnderungen -
Der Editor von GENST.PRG bildet das Kernstck der v”llig integrierten
Umgebung von Devpac ST Version 2. Sie k”nnen assemblieren, debuggen
und auch andere Programme, wie z.B. LinkST, aufrufen, ohne jemals
den Editor verlassen zu mssen. Wenn Sie zus„tzlich noch unser Saved!-
Desk-Accessory besitzen, gibt es kaum einen Grund, w„hrend der
Programmentwicklung zurck ins Desktop zu gehen.
2.1 Generelle Žnderungen und Erg„nzungen
Zuerst wird auf die einfacheren Ver„nderungen des Editors eingegangen.
Es handelt sich hiermit haupts„chlich um neue Tastaturkrzel und
-umbelegungen.
Die Geschwindigkeit des Editors hat sich stark erh”ht. Es gibt so
gut wie keinen Tastaturnachlauf mehr, und das >>Bl„ttern<< geht um ein
Mehrfaches schneller als beim Editor der Version 1.
Zeilen k”nnen jetzt bis zu 240 Zeichen lang sein. Das Seitw„rts-
Scrollen ist durch Benutzung des horizontalen Scrolling-Balkens
des Editorfensters m”glich. Der Editor scrollt auch automatisch
zur Seite, wenn man sich mit dem Cursor nahe genug am Rand befindet.
Dies gilt auch fr Ctrl-C.
Shift-Alt-S ist das Tastaturkrzel fr "Datei speichern".
Der Editor funktioniert jetzt auch in niedriger Aufl”sung.
Tip: Wenn Sie ein Tab-Zeichen suchen bzw. ersetzen wollen, geben
Sie Ctrl-I in der Dialogbox ein; als Tab wird dann eine kleine Uhr
erscheinen.
2.2 Blockverwaltung
Die Verwaltung von Bl”cken ist um einiges erweitert worden. Markierte
Bl”cke werden jetzt invers dargestellt.
2.2.1 Block l”schen
Ein Block wird nicht mehr mit Shift-F3, sondern mit Shift-F5 gel”scht.
Der gel”schte Block ist auch nicht unwiederruflich verloren, sondern
wird im Blockspeicher abgelegt. Voraussetzung ist, daá genug freier
Speicher vorhanden ist.
2.2.2 Block in den Blockspeicher kopieren
Mit Shift-F4 kopieren Sie den markierten Block in den Blockspeicher.
Der markierte Block bleibt jedoch an seiner ursprnglichen Stelle
und wird nicht - wie mit Shift-F5 -gel”scht.
2.2.3 Block aus dem Blockspeicher kopieren
Mit F5 wird der Inhalt des Blockspeichers an die Cursorposition ko-
piert.
2.2.4 Undo und Ctrl-U
Eine „hnliche Funktion haben die Tastenkombinationen Ctrl-U und Undo.
Eine Zeile, die mit Ctrl-Y gel”scht wurde, kann so oft wie n”tig
mit Undo bzw. Ctrl-U wieder eingefgt werden. Das gleiche gilt fr
Text, der mit Ctrl-Q gel”scht wurde.
2.3 Voreinstellungen
Es ist jetzt m”glich, zus„tzlich zum Tab-Abstand auch all die
Einstellungen, die mit dem Installationsprogramm gemacht wurden,
ber "Voreinstellungen" festzulegen:
2.3.1 Tab-Abstand
Wie bei GENST.PRG Version 1 ist der Standardwert 8, kann aber auf
jeden Wert zwischen 2 und 16 eingestellt werden.
2.3.2 Textspeichergr”že
Der Standardwert ist 60 000 Byte, kann aber auf einen Wert von 4000
bis 990 000 Byte eingestellt werden. Dadurch wird die maximale Datei-
grӇe bestimmt, die geladen und editiert werden kann. Man sollte
darauf achten, genug Speicher fr den Assembler und ggf. MonST
brig zu lassen, normalerweise werden etwa 100 Kbyte ben”tigt. Ver„ndern
der Speichergr”áe hat zur Folge, daá der Text, der gerade bearbeitet
wird, gel”scht wird; eine Alarmbox erscheint, wenn der Text nicht
abgespeichert wurde.
2.3.3 Numerischer Tastenblock
Diese Option erlaubt es, den numerischen Tastenblock der ST-Tastatur
als Cursorblock, „hnlich wie bei PC-Kompatiblen, zu benutzen.
Standardm„áig ist er als Cursorblock konfiguriert.
2.3.4 Backups
Ohne Voreinstellung macht der Editor keine Backups. Wenn Sie in
der Abfragebox "Ja" w„hlen, gibt der Editor der schon existierenden
Version Ihrer Datei die Extension .BAK. Die aktuelle Datei wird dann
unter dem richtigen Namen gespeichert.
2.3.5 (Automatisches) Einrcken
Diese Funktion rckt eine Zeile automatisch nach Eingabe von RETURN
um so viel ein, wie die vorherige Zeile durch Leerzeichen bzw. Tabs
eingerckt wurde.
2.3.6 Cursor
Die Standardeinstellung des Cursors ist ein Blinken, er kann jedoch
auch so eingestellt werden, daá er feststeht.
2.3.7 MonST laden
Diese Option ist standardm„áig an und bewirkt, daá jedesmal, wenn
GENST.PRG geladen wird, MonST mitgeladen wird. MonST ist so per
Tastendruck ohne Diskettenzugriff sofort verfgbar. Das Ausschalten
der Option bringt einen Speichergewinn von ca. 24 Kbyte. Der neue
Wert der Einstellung wird nur dann wirksam, wenn Sie die
Voreinstellungen abspeichern und GENST.PRG neu starten. Es sollte
beachtet werden, daá AMonST schon installiert zu haben nicht das
gleiche ist, wie MonST beim Start von GenST zu laden.
2.3.8 Voreinstellungen sichern
Wenn Sie den Abbruch-Knopf bet„tigen, werden s„mtliche Žnderungen,
die Sie in der Voreinstellungen-Dialogbox gemacht haben, ignoriert;
mit OK werden die Žnderungen wirksam. Wenn die von Ihnen gew„hlte
Konfiguration permanent gespeichert werden soll, klicken Sie auf
Sichern. Die Datei GENST2.INF wird erstellt und enth„lt die von
Ihnen gew„hlten Voreinstellungen sowohl aus der Assemblieren-Box als
auch aus der Voreinstellungen-Box.
2.4 Das Programm-Men
Das Programm-Men enth„lt alle Funktionen, die mit dem Assemblieren
oder der Ausfhrung von Programmen zu tun haben.
2.4.1 Assemblieren
Um das Programm, das Sie z.Zt. editieren, zu assemblieren, w„hlen
Sie entweder "Assemblieren" oder drcken Alt-A. Es erscheint die
Assemblierungs-Dialogbox, die verschiedene Optionen enth„lt; hier
wird nur auf die Ausgabe-Option eingegangen, die weiteren Optionen
werden im Assembler-Teil besprochen.
GenST kann auf Diskette, in den Speicher, oder nirgendwohin (>>Nein<<)
assemblieren; die "Nirgendwo"-Option ist ntzlich, wenn nur ein
Syntaxcheck durchgefhrt werden soll. In den Speicher assemblieren
ist ideal zum Ausprobieren eines Programmes, da nicht auf die Diskette
geschrieben wird. Wenn Sie in den Speicher assemblieren, mssen Sie
die Speichermenge angeben, in die das Programm hineinassembliert wird;
der Standardwert ist 20 Kbyte, genug fr ein durchschnittlich groáes
Programm mit Symbolen oder ein grӇeres Programm ohne Symbole.
Wenn Sie die Meldung "Programmspeicher voll" erhalten, heiát das,
daá die von Ihnen angegebene Speichermenge nicht ausreicht um Ihr
Programm vollst„ndig zu assemblieren; Sie mssen also den Programm-
speicher vergrӇern. Natrlich hat ein grӇerer Programmspeicher
zur Folge, daá der Assembler weniger Platz zum Arbeiten
hat. Falls der Assembler mit der Meldung "ungengender Speicher"
abbricht, mssen Sie die ProgrammspeichergrӇe verringern. Wenn die
ProgrammspeichergrӇe mit dem fr den Assembler notwendigen Platz
nicht zu vereinbaren ist, mssen Sie auf Diskette assemblieren.
Wenn Sie auf Diskette assemblieren, wird die GrӇeneinstellung des
Programmspeichers ignoriert und der gesamte verfgbare Speicherplatz
dem Assembler zur Verfgung gestellt. Wenn Ihr Programm auf Diskette
assembliert wird, ohne daá der Assembler sich einen Namen fr diese
Datei bilden kann, wird der Name Ihres Programms mit NONAME anfangen.
Wenn Sie auf "Assemblieren" klicken oder Return drcken, wird der
Assembler gestartet. Am Ende des Vorgangs wird auf einen Tastendruck
gewartet, damit Sie ggf. erscheinende Meldungen in Ruhe lesen k”nnen,
bevor Sie zum Editor zurckkehren. Wenn in Ihrem Programm Fehler
auftreten, wird der Cursor des Editors bei der Rckkehr auf der ersten
fehlerhaften Zeile Ihres Programmtextes stehen; mit Alt-J gelangen Sie
dann an den n„chsten Fehler.
2.4.2 Programme ausfhren
Wenn Sie "Ausfhren" im Programm-Men w„hlen, k”nnen Sie ein in den
Speicher assembliertes Programm ausfhren; das Tastaturkrzel hierfr
ist Alt-X. Wenn der Vorgang beendet wird, kehren Sie in den Editor
zurck. Falls Ihr Programm nicht vollst„ndig assembliert wurde, kann
es nicht ausgefhrt werden.
Wenn Ihr Programm abstrzt, kann es sein, daá Sie nicht wieder
in den Editor gelangen und neu "booten" mssen. Es ist also ratsam,
den Quelltext vor der Ausfhrung des Programmes abzuspeichern.
Vorsicht: Wenn Ihr Programm mit Fehlern, wie z.B. undefinierten
Symbolen, vollst„ndig assembliert wurde, k”nnen Sie es zwar ablaufen
lassen, jedoch ist die Gefahr eines Absturzes vorhanden.
Wenn Sie ein Programm, egal welcher Art, vom Editor aus ausfhren,
kann es vorkommen, daá der Rechner am Programmanfang oder zum Programm-
ende hin zu "h„ngen" scheint. Dies ist ein Fehler im GEM, ber den wir
keine Kontrolle haben; der Mauszeiger befindet sich dabei in der
Menleiste. Wenn Sie die Maus nach unten bewegen, máte alles normal
weiterlaufen.
2.4.3 Debuggen
Wenn Sie ein Programm, welches in den Speicher assembliert wurde,
debuggen wollen, w„hlen Sie "Debuggen" oder Alt-D. Dadurch wird MonST
aufgerufen und kann Ihr Programm, das ggf. Symbole enth„lt, debuggen.
Wenn Sie Ctrl-C eingeben, wird Ihr Programm abgebrochen und Sie ge-
langen in den Editor zurck. Die Bildschirminitialisation h„ngt vom
Menpunkt "GEM" ab, der weiter unten erl„utert wird.
Wenn Sie "MonST laden" in den "Voreinstellungen" nicht gew„hlt haben,
sind weder "Debuggen" noch "MonST" w„hlbar.
2.4.4 MonST
Wenn Sie "MonST" w„hlen, oder Alt-M drcken, wird MonST aufgerufen,
und zwar so, als ob Sie ihn vom Desktop aufgerufen h„tten, also ohne
Diskettenzugriff (so wie es auch z.B. beim Debuggen der Fall ist).
Ctrl-C bringt Sie wieder in den Editor zurck. Die Bildschirm-
initialisation h„ngt hier auch von GEM ab.
2.4.5 GEM
Normalerweise wird bei "Ausfhren", "Debuggen" und "MonST" eine GEM-
Bildschirminitialisation vorgenommen. Bei TOS-Programmen braucht man
aber einen leeren Bildschirm und einen blinkenden Cursor. Wenn der
Menpunkt "GEM" mit einem Haken gekennzeichnet ist, wird der Bildschirm
auf ein GEM-Programm vorbereitet, wenn nicht, wird der Bildschirm auf
ein TOS-Programm vorbereitet.
Die Einstellung dieser Option wird beim Abspeichern der Voreinstellungen
beibehalten.
Vorsicht: Ein TOS-Programm mit einem GEM-Bildschirm ist m”glich,
sieht aber unsch”n aus. Ein GEM-Programm darf aber nie mit der TOS-
Bildschirminitialisation ausgefhrt werden, da sonst ein Absturz
sehr wahrscheinlich wird.
2.4.6 N„chster Fehler
Hier ist so gut wie keine Ver„nderung gegenber der Version 1 zu
erkennen. Der einzige Unterschied ist, daá bei der Rckkehr vom
Assembler in den Editor der Cursor auf der ersten fehlerhaften Zeile
plaziert ist.
2.4.7 Anderes Programm
Mit dieser Funktion, die auch mit Alt-O aufgerufen werden kann, k”nnen
Sie ein anderes Programm vom Editor aus laufen lassen; wenn das Programm
beendet wird, kehren Sie in den Editor zurck. Die Hauptanwendungen
dieser Funktion sind das Ausfhren von assemblierten Programmen und
der Aufruf des Linkers. Sowohl TOS- als auch GEM-Programme k”nnen
ausgefhrt werden. Voraussetzung dafr ist natrlich, daá genug Speicher
vorhanden ist.
Wenn Sie "Anderes Programm" aufrufen, erscheint zun„chst eine Warnung
mit dem Inhalt, daá Sie Ihren Quelltext nicht gesichert haben. Danach
erscheint die File-Selector-Box, in der Sie das auszufhrende Programm
ausw„hlen. Wenn es ein TOS- oder ein TTP-Programm ist, werden Sie
zus„tzlich nach einer Kommandozeile fr das Programm gefragt. Sie
k”nnen in der Kommandozeile das ¯%® Zeichen angeben; dies wird dann
durch den Namen (und nicht durch die Extension) der gerade editierten
Datei ersetzt. Mit ¯%%® wird ein echtes "%" Zeichen in die Kommando-
zeile gesetzt.
Die Bildschirminitialisation h„ngt von der Extension des Programmes
ab, und nicht von der Einstellung von GEM.
2.5 Benutzer von Saved!
Wenn Sie die Path-Funktion Saved!s benutzen und Ihr System zum
automatischen Laden von GENST.PRG mit einem Doppelklick auf die
Quelldatei konfiguriert haben, gilt die Einschr„nkung nicht, daá
sich GENST.PRG und Ihre Quelltexte im gleichen Ordner befinden mssen.
Der Editor sucht nach der GENST2.INF-Datei zuerst im aktuellen Ordner
(der Ordner, in dem sich die Datei befindet, auf die Sie geklickt
haben), und dann in den Ordnern des Paths. Wenn Sie die Vorein-
stellungen sichern, wird die Datei an der Stelle gesichert, an der
sie gefunden wurde.
Sie k”nnen Saved! mit dem Tastaturkrzel Shift-Clr aufrufen. Dies
funktioniert nur, wenn das Accessory auf Ihrer Bootdiskette SAVED!.ACC
oder SAVED.ACC heiát.
2.6 Der Assembler GenST
Der Assembler von Devpac ST, GenST, ist fr die Version 2 v”llig neu
geschrieben worden. Nur so ist es m”glich gewesen, die gewnschten
Verbesserungen zu machen. Einige der neuen Merkmale von GenST2 sind
die Assemblierungsgeschwindigkeit von bis zu 75000 Zeilen pro Minute,
Symbolsignifikanz von 127 Zeichen und die INCBIN- Direktive, mit der
eine Bin„rdatei, wie z.B. eine Bildschirmgrafik, direkt in Ihr Programm
eingebunden werden kann. GENST generiert Code, der ebenso mit Pascal
Plus linkbar ist.
GenST gibt es in zwei Ausfhrungen: einmal direkt vom Editor aus
aufrufbar und einmal als alleinstehendes Programm.
2.7 Den Assembler aufrufen
2.7.1 Vom Editor aus
Sie k”nnen vom Editor aus durch W„hlen der "Assemblieren"-Funktion
im Programm-Men oder mit Alt-A den Assembler aufrufen.
Programmtyp
Hier w„hlen Sie zwischen ausfhrbarem, GST-linkbarem oder DRI-
linkbarem Code. Die Unterschiede zwischen den drei Programmtypen
werden sp„ter genau erkl„rt.
Grož/Klein
Hier k”nnen Sie w„hlen, ob bei Symbolen Unterschiede wegen der Groá-
oder Kleinschreibung gemacht werden sollen. Wenn Sie "gleich" w„hlen,
dann sind die Symbole "Start" und "start", vom Assembler aus gesehen,
dasselbe Symbol; wenn "Verschieden" gew„hlt wird, sind die beiden
zwei verschiedene Symbole.
Debug-Information
Wenn Sie Ihr Programm noch debuggen, ist es ntzlich, daá die Symbole
im fertigen Programm enthalten sind. Die Symboloptionen sind
"Normal" und "Erweitert": das HiSoft- erweiterte Debug-Format
erlaubt es, bis zu 22 Zeichen lange Symbole anstatt der blichen
8 Zeichen L„nge zu verwenden.
Listing
Sie k”nnen hiermit die Ausgabe des Listings w„hlen: auf dem Drucker,
auf Diskette, auf der eine Datei mit gleichem Namen und der Extension
.LST angelegt wird, oder auf den Bildschirm. Wenn Sie keine Ausgabe
wollen, k”nnen Sie auch diese Option w„hlen.
Assemblieren
Hier k”nnen Sie die Geschwindigkeit des Assemblers bestimmen.
Normalerweise sollten Sie den Schnell-Knopf bet„tigt lassen, wenn
jedoch der Speicerplatz zu gering wird, sollten Sie Langsam
w„hlen. Dadurch wird der Assembler gezwungen, so wenig Platz wie
m”glich zu belegen und den Zugriff auf Diskette zu verlangsamen.
In der .TTp-Version wird der Langsam-Modus mittels der Option -M
in der Kommandozeile eingeschaltet.
Output
Wie bereits erw„hnt, k”nnen Sie hier w„hlen, welches Programm aus
Ihrem Quelltext erzeugt wird. "Nein" heiát, daá nur ein Syntaxcheck
gemacht wird und kein Programm erzeugt wird. "Speicher" heiát, daá
das Programm in den Speicher assembliert wird, und so
bereitsteht, um von MonST debuggt zu werden, oder auch einfach zur
Ausfhrung gebracht wird. Es wird kein Diskettenzugriff gemacht,
auáer dann, wenn eine Include-Datei gebraucht wird, die meistens
nur ein Mal gelesen wird; bei der Version 1 wurde eine Include-
Datei immer zweimal gelesen. Diskette bedeutet, daá das Program
wie gewohnt auf Diskette erzeugt wird. Die Regeln der
Namensgebung fr die Dateien werden in Krze erl„utert.
Wenn Sie alle gewnschten Optionen gew„hlt haben, klicken Sie auf
"Assemblieren" oder drcken Sie Return. Der Ablauf wurde oben schon
erl„utert.
2.8 Der Stand-alone-Assembler
Wenn Sie die .TTP-Version des Assemblers aufrufen, werden Sie nach
einer Kommandozeile gefragt; die Kommandozeile hat das unten beschriebene
Format. Wenn Sie keine Kommandozeile bergeben wollen, geben Sie
nur Return ein, Sie kehren dann zum Desktop zurck. Am Ende des
Assembliervorganges wird auf einen Tastendruck gewartet. Wenn dem
Assembler beim Aufruf keine Kommandozeile bergeben wurde, wird
kein Tastendruck abgewartet, da angenommen wird, daá der Assembler
von einem CLI oder einer Batch-Datei aus aufgerufen wurde.
2.8.1 Format der Kommandozeile
Die Kommandozeile hat das Format
Hauptdatei <-Optionen> [-Optionen]
Die Hauptdatei ist der Name der Datei, die assembliert werden soll;
wenn keine Extension angegeben wurde, wird .S angenommen. Optionen
sollte ein "-" Zeichen voranstehen. Erlaubte Optionen sind (zusammen
mit den „quivalenten OPT- Direktiven):
B keine Bin„rdatei erzeugen
C GROá/klein egal (OPT C-)
D Debug (OPT D+)
L GST-linkbarer Code (OPT L+)
L2 DRI-linkbarer Code (OPT L2)
O Name der erzeugten Datei, folgt dem O ohne Leerschritt
dazwischen
P Name der Listing-Datei, folgt dem P ohne Leerschritt dazwischen
Q In jedem Fall auf einen Tastendruck am Ende warten
T Der Tab-Abstand; die Zahl folgt dem T ohne Leerschritt;
In der .TTp-Version wird die Tab-Einstellung durch die
Option -Txx ge„ndert, z.B. -T10.
X Erweiterter Debug (OPT X+)
Wenn keine Optionen auf der Kommandozeile angegeben werden, wird
eine ausfhrbare Programm-Datei erzeugt, deren Name auf dem der
Source-Datei basiert, allerdings ohne Listing und mit Unterscheidung
zwischen Grož- und Kleinschrift.
Beispiele:
test -b
assembliert die Datei test.s ohne eine Datei zu erzeugen; dies w„re
ein Syntaxcheck, mehr nicht.
test -om:test.prg -p
assembliert test.s in die Datei m:test.prg und erzeugt eine Listing-Datei
namens test.lst.
test -l2dpprn: -t10
assembliert test.s in DRI-linkbares Format mit vollst„ndiger Debug-
Information und schickt das Listing an die parallele Schnittstelle.
Wenn Sie ein Listing an die serielle Schnittstelle senden wollen,
mssen Sie AUX: angeben. Der Tab-Abstand des Listings betr„gt 10
Zeichen.
2.8.2 Dateinamen
In GenST ist geregelt, wie der Name einer Ausgabedatei kreiert wird.
Der Name ist auáerdem abh„ngig von den angegebenen Optionen, wie
z.B. -O, und der OUTPUT- Direktive.
Wenn ein Dateiname explizit angegeben wird, dann ist
Name=angegebenerName
Wenn die Output-Direktive nicht benutzt wurde, dann ist
Name=Source-Name + .PRG .BIN oder .O
Wenn die Output-Direktive eine Extension angibt, dann ist
Name=Source-Name + Extension vom Output
Sonst ist
Name=Name vom Output
2.9 Der Assembliervorgang
GenST ist ein Zwei-Pass-Assembler; w„hrend des ersten Passes wird
der Quelltext im Speicher, ggf. auch von Diskette, verarbeitet und
eine Symboltabelle gebildet. Wenn Syntaxfehler w„hrend des ersten
Passes gefunden wurden, werden diese angegeben, der zweite Pass wird
nicht gestartet. W„hrend des zweiten Passes werden die mnemonischen
Befehle in bin„re Instruktionen umgewandelt, ein Listing kann
ausgegeben - wenn erforderlich mit einer Symboltabelle - und eine
Bin„rdatei erzeugt werden. W„hrend des zweiten Passes gefundene
Fehler und Warnungen werden angegeben.
W„hrend des Assemblierens kann jede Bildschirmausgabe mit Ctrl-S
angehalten werden und mit Ctrl-Q weiterlaufen. Mit Ctrl-C
kann der Assembler abgebrochen werden; die bis dahin erzeugte Datei
ist aber unvollst„ndig und sollte nicht ausgefhrt werden.
2.9.1 In den Speicher assemblieren
Um die turn-around-Zeiten so gering wie m”glich zu halten, kann GenST
in den Speicher assemblieren, damit Ihr Programm sofort ausgefhrt
oder mit Hilfe von MonST sofort debuggt wird. Um dieses zu erreichen,
wird der sog. Programmspeicher benutzt, dessen GrӇe in der
Assemblierungs-Dialogbox einzustellen ist. Wenn Sie ohne Debug-
Information arbeiten, kann der gesamte Programmspeicher fr Ihr
Programm benutzt werden; wenn Sie aber mit Debug arbeiten, wird der
Programmspeicher sowohl mit Ihrem Programm als auch mit der Debug-
Information gefllt.
Ein Programm, das im Speicher ausgefhrt wird, ist ein normales
GEMDOS-Programm. Es sollte daher mit einem pterm- oder pterm0-Aufruf
beendet werden, wie z.B.
clr.w -(sp)
trap #1
Programme k”nnen sich selbst modifizieren, sind aber bei einer erneuten
Ausfhrung wieder im Urzustand.
Die ProgrammspeichergrӇe und die in der Dialogbox eingestellten
Optionen des Assemblers werden beim Abspeichern der Voreinstellungen
mit abgespeichert.
2.9.2 Arten der Bin„rdateien
Es gibt sechs verschiedene Typen von Bin„rdateien, die GenST produzieren
kann. Sie unterscheiden sich „uáerlich an den Extensions.
.PRG Ein GEM-Programm, welches Fenster benutzt
.TOS Ein TOS-Programm, welches keine Fenster benutzt
.TTP Ein TOS-Programm, welches eine Kommandozeile braucht
.ACC ein Desk-Accessory
.BIN nicht ausfhrbare, linkbare Datei im GST-Format
.O nicht ausfhrbare, linkbare Datei im DRI-Format
Die ersten drei Arten k”nnen vom Desktop aus mit einem Doppelklick
ausgefhrt werden; sie unterscheiden sich in der Vorbereitung, die
das Betriebssystem macht, bevor das Programm ausgefhrt wird. Bei
einer .PRG Datei wird der Bildschirm gel”scht und mit dem Muster
des Desktops versehen; auáerdem wird an der Bildschirmoberseite Platz
fr eine Menleiste gemacht. Bei TOS- und TTP-Programmen wird der
Bildschirm bis auf die Hintergrundfarbe gel”scht, ein blinkender Cursor
an den oberen linken Bildschirmrand gesetzt und die Maus ausgeschaltet.
Wenn Sie auf ein TTP-Programm doppelklicken, dann erscheint vor
Programmaufruf eine Dialogbox, in der Sie eine Kommandozeile dem
Programm bergeben k”nnen.
.ACC-Dateien sind zwar ausfhrbar, jedoch nicht vom Benutzer. Sie
werden vom AES w„hrend des Bootvorganges oder w„hrend eines Wechsels
der Bildschirmaufl”sung geladen und initialisiert.
.BIN- und .O-Dateien k”nnen nicht ausgefhrt werden; sie mssen erst
von einem Linker verarbeitet werden - meist zusammen mit anderen
linkbaren Dateien - um zu einem vollst„ndigen Programm zu werden.
Es gibt auf dem ST zwei Standard-Formate, n„mlich das GST-Format
und das DRI-Format. Die Unterschiede zwischen diesen Formaten werden
sp„ter erl„utert.
Die einzige Ausnahme von diesen Regeln sind Programme, die im AUTO-
Ordner ausgefhrt werden. Sie mssen die Extension .PRG haben, obwohl
sie TOS-Programme sein mssen.
2.1O Verschiedene Ver„nderungen gegenber der Version 1
Es gibt drei reservierte Symbole: __LK, __RS und __G2. Ihre Bedeutungen
werden sp„ter erl„utert.
Es gibt drei neue Operatoren, die alle mit der Priorit„t unterhalb
der Addition und der Subtraktion liegen: Gleichheit (=), kleiner
als (<) und grӇer als (>).
Oktale Konstanten k”nnen jetzt mit "@" bezeichnet werden.
Wenn Sie die Adressierungsart >>Adreáregister indirekt<< mit Index
benutzen, k”nnen Sie den Offset weglassen.
move.l (a3,d2.l),d0
wird als
move.l 0(a3,d2.l),d0
assembliert.
Die Daten- und Adreáregister k”nnen auch als R0 bis R15 bezeichnet
werden, um Kompatibilit„t mit anderen Assemblern zu gew„hrleisten.
R0-R7 entsprechen D0-D7, R8-R15 entsprechen A0-A7.
2.1O.1 Lokale Labels
GenST2 untersttzt lokale Labels. Dies sind Labels, die einem
bestimmten Teil des Sources angeh”ren. Sie beginnen mit einem
Punkt (".") und sind vom vorhergehenden nicht-lokalen Label abh„ngig.
l„nge1 move.l 4(sp),a0
.loop tst.b (a0)+
bne.s .loop
rts
l„nge2 move.l 4(sp),a0
.loop tst.b -(a0)
bne.s .loop
rts
Es gibt zwei Labels namens .loop, von denen das erste zu l„nge1,
das zweite zu l„nge2 geh”rt.
Um Verwechslung mit Adressierungsarten zu vermeiden, sind .W und
.L nicht als lokale Labels zul„ssig.
Eine besondere Form eines lokalen Labels ist die Form 1234$, das
aus Dezimalzahlen besteht und mit >>$<< endet.k Dadurch ist
Kompatibilit„t mit anderen Assemblern gegeben.
2.1O.2 Erweiterungen des Befehlssatzes
Der vollst„ndige 68000er-Befehlssatz wird von GenST2 untersttzt.
Es gibt aber stilistische Abkrzungen, die GenST2 auch akzeptiert:
Condition Codes
Die alternativen Condition Codes HS und LQ, „quivalent mit CC und
CS, werden bei Bcc, DBcc und Scc untersttzt.
Branch-Befehle
Um einen kurzen Branch explizit anzugeben, benutzen Sie Bcc.B oder
Bcc.S. Einen Branch mit Wort-L„nge geben Sie mit Bcc.W an; Sie k”nnen
aber auch den Optimierer die Branch-L„nge w„hlen lassen. Bcc.L wird
aus Kompatibilit„tsgrnden zu GenST1 beibehalten, obwohl es genaugenommen
ein 68020-Befehl ist; beim Vorkommnis eines Bcc.L wird eine Warnung
generiert. Ein BRA.S zum darauffolgenden Befehl ist nicht erlaubt
und wird, mit einer Warnung, in einen NOP verwandelt. Ein BSR.S zum
darauffolgenden Befehl ist nicht erlaubt und erzeugt einen Fehler.
BTST
BTST ist einzigartig unter den bit-test-Befehlen, weil es PC-relative
Adressiermodi untersttzt.
CLR
CLR an ist nicht erlaubt, benutzen Sie statt dessen SUB.L An,An; die
Flags werden von diesem Befehl aber nicht beeinfluát.
CMP
Wenn der Source-Operand immediate ist, wird CMPI erzeugt, wenn der
Ziel-Operand ein Adreáregister ist, wird CMPA benutzt. Wenn die
Adressierungsarten beider Operanden post-inkrement benutzen, wird
ein CMPM generiert.
DBcc
DBRA wird fr DBF akzeptiert.
ILLEGAL
Das Wort $4AFC wird generiert.
LINK
Wenn der Wert positiv oder ungerade ist, wird eine Warnung ausgegeben.
MOVE from CCR
Dies ist ein Befehl der Prozessoren 68010 und h”her. Es wird in ein
>>MOVE from SR<< konvertiert.
MOVEQ
Wenn der Wert im Bereich 128 bis 255 inklusive ist, wird eine Warnung
ausgegeben. Wenn Sie ausdrcklich ein .L angeben, wird keine Warnung
erzeugt.
2.1O.3 Assembler-Direktiven
INCBIN Dateiname
Mit dieser Direktive wird eine Datei vollst„ndig in Ihr Programm
miteinbezogen. Dies ist z.B. ntzlich fr Grafiken, die mit anderen
Programmen erstellt wurden und von Ihrem Programm in bin„rer Form
benutzt werden; es entf„llt eine Konvertierung in DC-Direktiven.
INCBIN startet an einer geraden Grenze und wird mit einem
Nullbyte gebaddet, wenn die Datei eine ungerade L„nge besitzt.
OPT
Es gibt verschiedene neue Optionen, aber auch solche, die sich gegenber
der Version 1 ver„ndert haben.
Option A - Auto-PC
Um Ausfhrzeit zu sparen und die Programmgr”že zu reduzieren,
kann die Option A+ verwendet werden. Sie erlaubt Automatik-PC-
Modus, wo immer er m”glich ist. Die Zeile
MOVE.L int_in,do
wšrde zu
MOVE.L int_in(pc),do
assembliert werden. Dadurch wird jeoch kein positionsunabh„ngiger
Code erzeugt. A+ kann z.B. im Programm GEMTEST effektiv
eingestellt werden. Unter Umst„nden wird die Option nicht
beachtet, z.B. beim Lesen des absoluten Speichers, oder wenn der
Ausdruck .L gebraucht wird.
C Grož/klein-Unterscheidung und Signifikanz
Standardm„áig unterscheidet GenST2 zwischen Groá- und Kleinschreibung
von Labels. Labels haben standardm„áig eine Signifikanz von 127 Zeichen,
d.h. daá die ersten 127 Zeichen eines Labels zur Unterscheidung
von anderen Labels bewertet werden. Sie k”nnen, wie bei GenST1, C-
angeben, wenn keine GROá/klein-Unterscheidung gemacht werden soll.
Sie k”nnen auch die Signifikanz ver„ndern, indem Sie eine Dezimalzahl
zwischen dem C und dem + oder - angeben, z.B. C16+ um eine Signifikanz
von 16 Zeichen mit einer Grož/klein-Unterscheidung einzustellen.
L Linker-Modus
Standardm„áig produziert GenST ausfhrbaren Code. Mit L+ wird
GST-linkbarer Code erzeugt, mit L2 wird DRI-linkbarer Code erzeugt.
Mit L- kann ausdrcklich ausfhrbarer Code erzeugt werden. Eine OPT-L-
Direktive muá in der allerersten Zeile der Quelldatei stehen.
O Optimierung
GenST2 besitzt die F„higkeit, manche Befehle in krzere oder schnellere
zu verwandeln. Standardm„áig wird zwar keine Optimierung vorgenommen,
jedoch kann jede Art von Optimierung wahlweise hinzugeschaltet werden.
O1+ Optimiert Rckw„rts-Branches wenn m”glich, kann mit
O1- wieder abgeschaltet werden
O2+ Optimiert Adreá-Register indirekt mit Offset in
Adreáregister. Wenn der Offset Null ist, kann mit O2- abgeschaltet
werden.
move.l Wert(a0),d3 wird zu
move.l (a0),d3 wenn Wert gleich Null
O+ schaltet alle Optimierungen an.
O- schaltet alle Optimierungen ab.
OW- schaltet die mit den Optimierungen verbundenen Warnungen
aus. Kann mit OW+ wieder eingeschaltet werden.
P Positionsunabh„ngigkeit
Wenn diese Option mit P+ zugeschaltet wird, wird der erzeugte Code
auf Positionsunabh„ngigkeit hin geprft. Wenn ein Befehl nicht
positionsunabh„ngig ist, wird ein Fehler erzeugt. Mit P- kann die
Option wieder ausgeschaltet werden; die Option ist dann im
Standardzustand.
T Typen-šberprfung
GenST2 kann Programmierfehler entdecken, indem es Ausdrcke dahingehend
prft, ob sie absolut oder relativ sind. Da fr manche Anwendungen
und Programmierstile eine solche Meldung hinderlich sein kann, ist
sie mit T- aus-, und mit T+ wieder einschaltbar.
main bsr init
lea main(a6),a0
move.l (main).w,a0
Diese Zeilen wrden normalerweise einen Fehler erzeugen, da
>>main<< ein relativer Ausdruck ist und GenST in beiden F„llen einen
absoluten Ausdruck erwartet. Falls aber der Code auf einer anderen
68000er-Maschine laufen soll, kann dies zul„ssig sein: also máte
T- angegeben werden.
U Lokale Labels mit "_"
Mir U+ k”nnen Sie angeben, daá lokale Labels mit "_" anstatt mit
einem Punkt beginnen. Diese Option exisiert, um Kompatibilit„t mit
Compilern der Firma Prospero zu gew„hrleisten.
X Erweiterter Debug
Dies ist eine erweiterte Version der Option D. Hiermit werden Symbole
mit bis zu 22 Zeichen L„nge anstatt maximal 8 Zeichen wie bei D
ausgegeben.
Zusammenfassung der Optionen:
Alle Optionen GenST2s werden hier zusammengefaát. Die Standardeinstellungen
werden in Klammern angegeben.
C Grož/Klein-Unterscheidung und Signifikanz (C127+)
D Debug-Information (D-)
L- ausfhrbarer Code (Standard)
L+ GST-linkbarer Code
L2 DRI-linkbarer Code
M Makro-Expansion (M-)
O Optimierungen (O-)
P auf Positionsunabh„ngigkeit prfen (P-)
S Symboltabelle ins Listing (S-)
T Typen-šberprfung (T+)
W Warnungen (W+)
U Lokale Labels mit "_" (U-)
X Erweiterter Debug (X-)
<Label>DCB.B Anzahl,Wert
<Label> DCB.W Anzahl,Wert
<Label> DCB.L Anzahl,Wert
Diese Direktive erlaubt es, Datenbl”cke bestimmter Gr”áe mit konstantem
Wert zu erzeugen. "Zahl" gibt die GrӇe des Blocks an, "Wert" den sich
wiederholenden Wert.
OUTPUT Dateiname
Mit dieser Direktive l„át sich der Name der Ausgabe-Datei bestimmen.
Wenn der angegebene Dateiname mit einem Punkt anf„ngt, wird nur die
Extension der erzeugten Datei beeinfluát. Der Name wird sonst nach
den oben beschriebenen Regeln gebildet.
__G2 (reserviertes Symbol)
Dieses Symbol kann mit der IFD-Bedingung verwendet werden, um
festzustellen, ob mit GenST2 assembliert wird. Der Wert dieses Symbols
ist die Version des Assemblers und immer absolut.
<Label> REPT Ausdruck
ENDR
Oft ist es ntzlich, einen oder mehrere Befehle zu wiederholen.
Mit REPT ist dies durchfhrbar. Die zu wiederholenden Befehle werden
zwischen REPT und ENDR eingegeben. Die Anzahl der Wiederholungen
wird vom angegebenen Ausdruck bestimmt. Wenn der Ausdruck Null oder
negativ ist, wird kein Code generiert. REPTs k”nnen nicht verschachtelt
werden.
REPT 512/4 einen Sektor kopieren
move.l (a0)+,(a1)+
ENDR
Dies ist ein Beispiel, um die Wirksamkeit des REPT zu zeigen: so muá
im Quelltext nicht 128mal die move.l Zeile stehen.
Vorsicht: Man sollte keine Labels innerhalb eines REPTs definieren,
da es sonst zu mehrfach definierten Labels und den dazugeh”rigen
Fehlermeldungen kommt.
LIST
Zus„tzlich zur LIST-Direktive gibt es jetzt LIST+ und LIST-. Ein
Z„hler wird bei jedem LIST+ um eins h”her gesetzt und bei jedem
LIST- um eins erniedrigt. Wenn der Z„hler Null oder positiv ist,
wird ein Listing ausgegeben; wenn der Z„hler negativ ist, wird kein
Listing erzeugt. Der normale Z„hlerwert ist -1 (kein Listing), auáer
dann, wenn beim Assemblerstart ein Listing angefordert wird, wodurch
der Z„hler auf Null gesetzt wird. So haben Sie eine flexiblere Kontrolle
ber Listings, besonders bei Include-Dateien. LIST alleine setzt
den Z„hler auf 0, NOLIST auf -1.
SUBTTL-String
Ein "Unter"-Titel wird hiermit angegeben, er kann in Hochkommas
("'") eingegrenzt sein. Die erste Direktive setzt den Unter-Titel
der ersten Seite usw.
FORMAT Parameter<,Parameter,...>
Hiermit k”nnen Sie das Format einer Zeile im Listing bestimmen. Jeder
Parameter entspricht einem Feld im Listing und besteht aus einer
Zahl von 0 bis 2, gefolgt von einem "+" (um das Feld darzustellen)
oder "-":
0 Zeilennummer, dezimal
1 SECTION-Name bzw. -Zahl und PC
2 Hex-Daten in Worten, bis zu 10 W”rter (auáer, wenn
der Drucker breiter als 80 Zeichen ist)
Label = Ausdruck
Das Gleichheitszeichen kann anstatt EQU benutzt werden.
Label REG Registerliste
Mit der REG-Direktive k”nnen Sie einem Symbol eine Registerliste
zur Verwendung mit MOVEM zuordnen. Somit wird die Gefahr verringert,
am Anfang und am Ende einer Routine unterschiedliche Registerlisten
zu haben. Mit REG definierte Symbole k”nnen ausschlieálich mit MOVEM
benutzt werden.
RSSET Ausdruck
Mit RSSET k”nnen Sie dem RS-Z„hler einen bestimmten Wert zuordnen.
__RS (reserviertes Symbol)
Dieses reservierte Symbol enth„lt den gegenw„rtigen Wert des RS-Z„hlers.
Bedingte Bl”cke
Bedingte Bl”cke k”nnen mit GenST2 bis zu 65535 Stufen tief verschachtelt
werden.
IIF Ausdruck Instruktion
Dies ist eine Kurzform von IFNE und betrifft nur eine Zeile; ein
ENDC sollte nicht mit IIF benutzt werden.
2.11 Makros
Makros k”nnen jetzt bis zu 36 Parameter haben. Die Parameter beginnen
wie bei GenST1 mit einem Backslash ("\"). Die zul„ssigen Parameter-
Bezeichner sind die Zahlen 1-9 fr die ersten neun Parameter, und a-z
oder A-Z fr die restlichen 26 Parameter. \0 beh„lt die gleiche
Bedeutung wie bei GenST1.
Es gibt eine besondere Form einer Makro-Expansion. Sie k”nnen ein
Symbol in eine dezimale oder hexadezimale Zahlensequenz verwandeln.
Die Syntax ist \<Symbol> oder \$<Symbol>; das Symbol muá definiert
und absolut sein.
Ein Makro-Aufruf kann ber mehrere Zeilen gemacht werden; dies ist
ntzlich bei Makros mit vielen Parametern. Um als Makro erkannt zu
werden, muá eine Zeile mit einem Komma beendet werden, das erste
Zeichen der n„chsten Zeile muá ein "&" sein, gefolgt von Leerschritt(en)
oder Tab(s) und den weiteren Parametern.
Die Verschachtelung von Macro-Aufrufen ist nur durch den Arbeitsspeicher
begrenzt; Rekursion ist also m”glich.
Die Namen der Makros werden in einer separaten Symboltabelle gespeichert
und k”nnen daher nicht mit anderen Symbolen gleichen Namens kollidieren;
auáerdem kann der Name des Makros mit einem Punkt beginnen.
Ein Beispiel mit numerischer Substitution:
vname MACRO
dc.b \1,\<version>,0
ENDM
.
.
version equ 42
vname <'Buchstabensuchprogramm v'>
wird expandiert zu:
dc.b 'Buchstabensuchprogramm' v','42',0
Beispiel eines komplexen Makro-Aufrufs:
Nehmen wir an, daá ein Programm eine komplizierte Tabellenstruktur
hat, die eine variable Anzahl von Feldern beinhaltet. Ein Makro kann
z.B. auch dafr geschrieben werden, daá angegebene Parameter verwendet
werden:
Tabellen_Eintrag MACRO
dc.b .end\@-* L„ngenbyte
dc.b \1 immer
IFNC '\2',''
dc.w \2,\3 2.
und 3. ENDC
dc.l \4,\5,\6,\7
IFNC '\8',''
dc.b '\8' text
ENDC
dc.b \9
.end\@ dc.b 0
ENDM
* Beispiel eines Aufrufs
Tabellen_Eintrag $42,,,t1,t2,t3,t4,
& <Namen eingeben:>,%0110
Dies ist ein gutes Beispiel um zu zeigen, daá Makros das Programmieren
enorm erleichtern k”nnen. In diesem Fall wird mit einer Datenstruktur
gearbeitet, die aus einem L„ngenbyte (im Makro mit Hilfe von \@
errechnet), zwei optionalen W”rtern, vier Langw”rtern, einem optionalen
String, einem Byte, und einem Nullbyte besteht. Der Code, der aus
diesen Beispiel resultiert, sieht so aus:
dc.b .end_001
dc.b $42
dc.l t1,t2,t3,t4
dc.b 'Namen eingeben:'
dc.b %0110
.end_001 dc.b 0
2.12 Ausgabedatei-Formate
GenST2 ist sehr flexibel, was Dateiformate angeht. Die verschiedenen
Formate, die er erzeugen kann, werden hier erkl„rt und bewertet.
Manche Direktiven haben auch je nach Ausgabeformat andere Wirkungen.
2.12.1 Ausfhrbare Dateien
Diese Dateien sind sofort vom Desktop aus ausfhrbar. Eine solche
Datei kann Symbole und Relozier-Information enthalten. Die
normalen Extensionen fr diese Art von Datei sind .PRG, .TOS, .TTP und
.ACC.
Vorteile: Echte BSS-SECTION, Entwicklungszeit wird reduziert (da
nicht gelinkt werden muá).
Nachteile: Wenn mehr als ein Programmierer am Projekt arbeitet, ist
es unpraktisch.
2.12.2 GST-linkbare Dateien
Wenn Sie an einem grӇeren Projekt arbeiten oder mehrere Programmierer
am Projekt beteiligt sind, oder wenn Sie Maschinenspracheroutinen fr
eine Hochsprache schreiben, werden Sie wahrscheinlich linkbare Dateien
erzeugen wollen. Das GST-Format wird von den meisten in England
oder auch anderswo produzierten Hochsprachensystemen untersttzt.
Zu diesen Sprachen geh”ren HiSoft Basic, Lattice C, Prospero Pascal
und Prospero Fortran. Dateien im GST-Format haben meist die Extension
.BIN.
Vorteile: Sehr flexible M”glichkeiten: importierte Labels k”nnen
fast berall verwendet werden, wie z.B. auch in Ausdrcken. Libraries
k”nnen vom Assembler aus erstellt, und durch die verwendete
Import-Methode k”nnen Typenkonflikte erkannt werden.
Nachteile: Aufgrund des Library-Formats kann das Linken l„nger dauern,
richtige GEMDOS-SECTIONen werden standardm„áig nicht untersttzt
(obwohl LinkST eine BSS-SECTION erzeugen kann).
2.12.3 DRI-linkbare Dateien
Dies ist das Original-Linkerformat des ST und wurde ursprnglich
von Digital Research fr CP/M-68K entwickelt. Es wird, meist durch
Konvertierungsprogramme, vom Groáteil der in den USA entwickelten
Hochsprachensystemen untersttzt. DRI-linkbare Dateien haben meist
die Extension .O.
Vorteile: Selektives Hinzulinken mit Libraries geht
schnell, GEMDOS-SECTIONen werden voll untersttzt.
Nachteile: Sehr groáe Einschr„nkungen bei importierten Labels, linkbare
Dateien sind doppelt so groá wie ausfhrbare Dateien, und Symbole
k”nnen maximal nur 8 Zeichen lang sein.
2.12.4 Das richtige Format
Wenn Sie mit einer Hochsprache zusammenarbeiten, haben Sie meistens
keine Wahl: Sie mssen das vom Compiler untersttzte Format verwenden.
Wenn Sie ausschlieálich in Assembler schreiben, werden Sie wohl das
ausfhrbare Format benutzen: die Assemblierzeit ist gering, Linken
f„llt weg, und Sie k”nnen direkt in den Speicher assemblieren, um
die Turn-around-Zeiten so klein wie m”glich zu halten.
Wenn Sie ein gr”áeres Programm schreiben, wom”glich im Team, ist
linkbarer Code meist am sinnvollsten. Das GST- Format ist dem DRI-Format
weitaus berlegen und deshalb auch empfehlenswert.
2.13 Ausgabedatei-Direktiven
Hier werden die Direktiven erkl„rt, deren Wirkungen vom Ausgabeformat
abh„ngig sind. Die Formate k”nnen auf verschiedene Weise gew„hlt werden:
ber die Kommandozeile bei GENST2.TTP, in der Assemblieren-Dialogbox
bei GENST2.PRG, oder mit der OPT-L-Direktive am Anfang Ihres Programms.
2.13.1 MODULE und SECTION
MODULE Modul-Name
Mit diesem Befehl wird der Anfang eines neuen Moduls festgelegt.
Der Name muá in Anfhrungszeichen stehen, wenn er Leerschritte enth„lt.
Diese Direktive ist nicht unumg„nglich, ein Modul namens ANON_MODULE
wird automatisch erzeugt.
Ausfhrbar
Diese Direktive wird ignoriert.
DRI
Diese Direktive wird ignoriert.
GST
Mit dieser Direktive k”nnen Sie Maschinensprache-Libraries erstellen.
Jedes MODULE ist ein eigenst„ndiges Segment mit eigenen Imports und
Exports. Relative Labels geh”ren jeweils zum eigenen Modul, Sie k”nnen
also zwei Labels mit demselben Namen in zwei Modulen benutzen, ohne
daá sie kollidieren. Absolute Labels sind fr alle MODULE global, was
fr Konstanten sehr ntzlich ist.
SECTION Section-Name
Diese Direktive verursacht einen Wechsel zu der genannten Section.
Ein Programm kann aus mehrereren Sectionen bestehen, die im endgltigen
Programm mit gleichnamigen Sectionen zusammengefgt werden. Wenn
nicht anders angegeben, wird Ihr Programm im TEXT SECTION assembliert.
Sie k”nnen mit diesem Befehl jederzeit in eine andere Section wechseln.
Ausfhrbar
Erlaubte Namen fr Sectionen sind TEXT (fr den Bereich,
der das Programm enth„lt), DATA (fr initialisierte Daten) und BSS,
ein besonderer Speicherbereich, der vom GEMDOS fr Ihr Programm
reserviert wird. Das BSS enth„lt Nullen beim Programmstart und belegt
keinen Platz auf der Diskette. Innerhalb des BSS darf nur die DS-
Direktive verwendet werden. Wenn Sie den BSS-Bereich fr globale
Variablen benutzen, k”nnen Sie Platz auf der Diskette sparen.
DRI
Die obengenannten Regeln fr ausfhrbare Programme gelten hier auch.
GST
Es gibt keine Regeln fr Namen der Sectionen. Sectionen mit gleichem
Namen in verschiedenen Modulen werden beim Linken zusammengefgt.
Die Anordnung der Sectionen im endgltigen Programm h„ngt von der
Reihenfolge ab, in der sie von Linker begegnet werden (LinkST hat
die SECTION-Direktive, mit der die Reihenfolge zur Linkzeit festgelegt
werden kann).
Imports und Exports
Bei beiden linkbaren Formaten ist es wichtig, Symbole importieren
und exportieren zu k”nnen, was sowohl fr relative Symbole wie
Programmlabels als auch fr absolute Symbole wie Konstanten gilt.
Das GST-Format trifft zwischen den beiden Arten eine Unterscheidung,
das DRI-Format dagegen nicht. Das GST-Format erlaubt dem Assembler,
die Typen zu berprfen, um Programmierfehler zu finden, die sonst
vielleicht bersehen worden w„ren.
XDEF Export<,Export>...
Hiermit werden Labels angegeben, die fr andere Module zug„nglich
gemacht werden sollen. Wenn ein exportierter Label nicht existiert,
erscheint eine Fehlermeldung. Es ist nicht m”glich, lokale Labels
zu exportieren.
Ausfhrbar
Diese Direktive wird ignoriert.
DRI
Alle Symbole werden beim Exportieren auf 8 Zeichen L„nge gekrzt;
es ist ratsam, OPT C8 zu verwenden.
XREF Import<,Import>...
XREF.L Import<,Import>...
Hiermit werden Labels definiert, die aus anderen Modulen importiert
werden k”nnen; sie mssen dort natrlich exportiert worden sein,
da sonst eine Fehlermeldung erscheint. Das normale XREF sollte dazu
verwendet werden, relative Labels zu importieren, XREF.L wird benutzt,
um absolute Labels zu importieren. Sie k”nnen ein und dasselbe Label
mehrmals importieren.
Ausfhrbar
Diese Direktive wird ignoriert.
DRI
Das DRI-Format unterscheidet zwar nicht zwischen absoluten und
relativen Imports, man sollte sie aber trotzdem angeben,
damit der Assembler die Typenberprfung vornehmen kann. Wenn Ihre
Imports keine Typen haben, sollten Sie OPT T- angeben. DRI-Labels
haben eine Signifikanz von nur 8 Zeichen.
GST
Importieren Sie nur Labels mit dem richtigen Typ; es kann sonst sein,
daá die Relozier-Information des endgltigen Programms nicht stimmt.
Imports in Ausdrcken verwenden
Ausfhrbar
Es gibt keine Imports.
DRI
Imports k”nnen innerhalb von Ausdrcken benutzt
werden, allerdings nur ein Import pro Ausdruck. Das Ergebnis eines
solchen Ausdrucks muá immer Zahl + bzw. - Import sein. Imports k”nnen
auch mit beliebig komplexen Ausdrcken kombiniert werden,
vorausgesetzt, daá der komplexe Ausdruck vor dem Import angefhrt
wird:
move.l 3+(1<<Z„hler+5)+Import
GST
Imports k”nnen innerhalb von Ausdrcken benutzt werden, maximal zehn
pro Ausdruck. Sie drfen miteinander nur addiert oder subtrahiert
werden, k”nnen aber mit beliebig komplexen Ausdrcken kombiniert
werden, vorausgesetzt, daá der komplexe Ausdruck vor dem Import
angefhrt wird:
move.l 3+(1<<Z„hler+5)+Import1-Import2
Wo ein Ausdruck mit einem Import benutzt werden darf, h„ngt vom
Dateiformat ab. Die folgende Tabelle zeigt die erlaubten Kombinationen:
Ausdruck GST DRI Beispiel
PC-Byte J N move.w import(pc,d3.w)
bsr.s import
PC-Wort J J* move.w import(pc),a0
bsr import
Byte J N move.b #import,d0
Wort J J move.w import(a3),d0
Langwort J J move.l import,d0
So lange das Symbol nicht in einer anderen Section des Programmes
steht, ist dies unzul„ssig.
DRI & GST
Die Benutzung eines Symbols aus einer anderen Section
muá als Import gehandhabt werden und unterliegt den obengenannten
Regeln.
COMMENT Bemerkung
Ausfhrbar
Diese Direktive wird ignoriert.
DRI
Diese Direktive wird ignoriert.
GST
Diese Direktive bernimmt die angegebene Bemerkung in die .BIN-Datei;
zur Linkzeit wird die Bemerkung angezeigt.
ORG Ausdruck
Diese Direktive l„át den Assembler positionsabh„ngigen Code erzeugen;
der PC wird auf den angegebenen Ausdruck gesetzt. Normalerweise brauchen
GEMDOS-Programme kein ORG, auch wenn sie nicht positionsunabh„ngig
sind; der GEMDOS-Programmlader erledigt die Relozierung des Programms.
Die ORG-Direktive erlaubt die Erzeugung von ROM-Code oder Code, der
fr andere 68000er Rechner gedacht ist. Es darf mehr als ein ORG
im Programm stehen, es wird aber kein "Padding" vorgenommen.
Ausfhrbar
Diese Direktive sollte mit h”chster Vorsicht gehandhabt
werden, da das erzeugte Programm wahrscheinlich nicht auf dem ST
mit einem Doppelklick problemlos ausfhrbar ist. Die erzeugte Datei
hat am Anfang den GEMDOS-Header, aber am Ende keine Relozier-Information.
DRI
Diese Direktive ist nicht erlaubt, die Generierung absoluten Codes
ist Aufgabe des Linkers.
GST
Ein ORG wird dem Linker bergeben, der die Datei mit Nullen
"paddet".
Vorsicht: Es ist h”chst unwahrscheinlich, daá diese Direktive sinnvoll
ist, wenn in den Speicher assembliert wird.
OFFSET <Ausdruck>
Hiermit wird die Code-Generierung in eine besondere, Assembler-interne
Section umgeschaltet. Der Ausdruck, der nicht angegeben werden muá,
setzt den PC dieser Section. Es werden keine Daten auf Diskette
geschrieben, innerhalb dieser Section ist nur die DS-Direktive
erlaubt. Labels, die innerhalb dieser Section definiert werden,
sind absolut. Um einige Systemvariablen des ST zu definieren,
s„he der Quelltext so aus:
OFFSET $400
etv_timer ds.l 1 wird $400
sein
etv_critic ds.l 1 404
etv_term ds.l 1 408
ext_extra ds.l 5 40C
memvalid ds.l 1 420
__LK (reserviertes Symbol)
Dies ist ein reserviertes Symbol; es kann dazu benutzt werden zu
erkennen, welche Code-Art erzeugt wird. Der Wert dieses Symbols ist
immer absolut und kann einen der folgenden Werte haben:
0 ausfhrbar
1 GST linkbar
2 DRI linkbar
DRI Debug
Normalerweise werden nur explizit geXDEFte Labels der Symboltabelle
der linkbaren Datei beigefgt. Das Format erlaubt aber sog. lokale
Labels, nicht zu verwechseln mit den lokalen Labels von GenST2, welche
keine wahren Exports sind und deshalb nicht von anderen Modulen aus
benutzt werden k”nnen. Diese Symbole werden aber der Symboltabelle
des fertigen Programmes hinzugefgt. OPT D+ gibt alle nicht
exportierten Labels als DRI-lokale an.
GST-Libraries schreiben
Wenn Sie eine GST-Library mit Hilfe mehrerer Module in eine Datei
schreiben, mssen Sie mit Rckw„rts-Verweisen an Imports vorsichtig
sein. Innerhalb einer GST-Library sollten >>high-level<<-Routinen
zuerst kommen, >>low-level<<-Routinen zuletzt. Das folgende Beispiel
wrde nicht fehlerfrei linken:
MODULE low_level
XDEF low_output
low_output
...
MODULE high_level
XDEF high_output
XREF low_output
high_output
...
Der Grund dafr liegt darin, daá das zweite Modul eine Routine aus
dem ersten benutzt; dies ist nicht zul„ssig. Die fehlerfreie Version
sieht so aus:
MODULE high_level
XDEF high_output
XREF low_output
high_output
...
MODULE low_level
XDEF low_output
low_output
...
Beispiele fr verschiedene Formate:
Hier folgen Beispiele, die die Unterschiede zwischen den einzelnen
Formaten verdeutlichen.
Ausfhrbar
SECTION TEXT
start lea string(pc),a0
move.l a0,save_str
bsr printstring
bra quit
SECTION DATA
string dc.b 'Ihren Namen bitte: ',0
SECTION TEXT
printstring
move.l a0,-(sp)
move.w #9,-(sp)
trap #1
addq.l #6,sp
rts
SECTION BSS
save_str ds.l 1
END
DRI linkbar
XREF.L quit
SECTION TEXT
start move.l #string,a0
move.l a0,save_str
bsr printstring
bra quit
SECTION DATA
string dc.b 'Ihren Namen bitte: ',0
SECTION TEXT
printstring
move.l a0,-(sp)
move.w #9,-(sp)
trap #1
addq.l #6,sp
rts
SECTION BSS
save_str ds.l 1
END
Beachten Sie, daá der erste Befehl nicht PC-relativ ist, da keine
PC-relativen Verweise zwischen Sectionen erlaubt sind.
GST linkbar
MODULE TESTPROG
COMMENT nicht vollst„ndig
XREF.L quit
SECTION TEXT
start lea string(pc),a0
move.l a0,save_str
bsr printstring
bra quit
SECTION DATA
string dc.b 'Ihren Namen bitte: ',0
SECTION TEXT
printstring
move.l a0,-(sp)
move.w #9,-(sp)
trap #1
addq.l #6,sp
rts
SECTION BSS
save_str ds.l 1
END
3 LinkST, der Linker
LinkST in Devpac ST Version 2 hat sich gegenber seinem Vorg„nger
nicht so stark ver„ndert wie z.B. GenST oder MonST. Es sind lediglich
einige Optionen dazugekommen, die im folgenden beschrieben werden.
3.1 Optionen mit einem Buchstaben
Es gibt zwei neue Optionen mit einem Buchstaben:
B ein BSS-Segment im Sinne des GEMDOS wird generiert.
Voraussetzung ist, daá es eine SECTION namens ¯BSS®
gibt.
X funktioniert wie die Option D, nur wird anstatt dem
DRI-Symbolformat das HiSoft-erweiterte Format in
der Symboltabelle des erzeugten Programmes generiert.
3.2 Direktiven in Kontroll-Files
Es gibt vier neue Direktiven, die innerhalb eines Kontroll-Files
verwendet werden k”nnen.
SECTION <Name>
Mit dieser Direktive wird die Reihenfolge der Sectionen im gelinkten
Programm festgelegt. Wie in den zwei mitgelieferten Kontroll-Files
sollte die Anordnung so aussehen:
section text
section data
BSS <Name>
Mit dieser Direktive benennen Sie die SECTION, die als BSS- Segment
beim Linken verwendet werden soll. Fr Lattice-C Benutzer wrde die
Zeile nach den vorangegangenen SECTION-Direktiven
bss udata
heiáen. BSS sollte nie mit DATA zusammen benutzt werden. Die
Section, die angegeben wird, sollte niemals Daten ungleich Null
enthalten, da sonst die Fehlermeldung ¯non-zero data in BSS section®
erscheint.
XDEBUG
hat die gleiche Wirkung wie die Option X. Es wird eine Symboltabelle
im HiSoft-erweiterten Format angelegt.
TRUNCATE
Es werden alle Symbole auf 8 Zeichen L„nge gekrzt. Dies ist dann
notwendig, wenn Maschinenspracheroutinen mit langen Labels mit
Hochsprachenprogrammen mit kurzen Labels gelinkt werden.
3.3 Lattice-C-Benutzer
Es wird eine neue C.LNK-Datei fr Lattice C 3.04 mitgeliefert. Wenn
Sie dieses Kontroll-File verwenden, reduzieren sich Ihre Link-Zeiten
und die GrӇe des erzeugten Programms.
Wenn Sie die -n-Option des Compilers benutzen, k”nnen Sie das
HiSoft-erweiterte-Debug-Format beim Linken angeben; dies ist ntzlich,
da beim Debuggen mit MonST2 l„ngere, und deshalb bersichtlichere
Symbolnamen benutzt werden k”nnen.
4 MonST Der symbolische Debugger
4.1 Einleitung
Programme, die in Maschinensprache geschrieben sind, sind wesentlich
anf„lliger fr kleine Fehler als solche, die in einer Hochsprache
geschrieben sind. Es ist auch durchaus m”glich, mit kleinen
Fehlern den ganzen Rechner ¯abstrzen® zu lassen. Es gibt die
verschiedensten Arten von Fehler: triviale Fehler wie ein
vergessenes Nullbyte am Ende einer Zeichenkette,
Durchschnittsfehler wie ein falsches Ergebnis einer Rechenroutine
bis him zum schweren Fehler, der mit einem spektakul„ren Absturz
zutage kommt.
Um solche Fehler zu finden und zu korrigieren, geh”rt zum Paket
Devpac ST das Programm MonST. MonST ist ein sog. symbolischer
Debugger und Disassembler. Er erm”glicht es dem Programmierer, sich
Programme und Speicher anzusehen, Programme Schritt fr Schritt
auszufhren, und die meisten Programmierfehler (wie Bus- oder
Adreáfehler) ohne Schaden abzufangen. Da MonST symbolisch
arbeitet, mssen Sie sich nicht mit langen Hex-Ziffern
herumschlagen, sondern k”nnen sich in Ihrem Programm an Ihren
eigenen Labels orientieren.
Obwohl MonST ein sog. ¯low-level® Debugger ist, d.h. er arbeitet
auf Maschinensprachenebene, ist es auch ohne weiteres m”glich,
Programme, die in einer Hochsprache geschrieben worden sind, zu
¯debuggen®; die einzige Voraussetzung ist, daá der Hochsprachen-
compiler 68000er Maschinencode erzeugt. Es gibt viele Compiler,
die die M”glichkeit bieten, Symbole im fertigen Programm zu
hinterlassen. So k”nnen Sie genau erkennen, in welcher Prozedur
Sie sich befinden, w„hrend Sie den erzeugten Code des Compilers
auf dem Bildschirm vor sich haben. Wir haben MonST selber zum
Debuggen von LinkST, welches in C geschrieben ist, verwendet.
MonST und GenST sind beide vollst„ndig in Maschinensprache
geschrieben.
MonST hat seinen eigenen Bildschirmspeicher. Sie bekommen deshalb
keine Probleme, wenn Sie ein Programm mit Grafiken, wie z.B. ein
Spiel oder ein GEM-Programm, debuggen; das Programm hat seinen
eigenen Bildschirmspeicher, MonST auch. MonST hat auch einen
eigenen Bildschirmtreiber und ist deshalb nicht auf das
Betriebssystem angewiesen, um seine Bildschirmausgabe zu machen.
Sie k”nnen so problemlos die Bildschirmausgaberoutinen des AES
oder des BIOS ®single-steppen¯, ohne daá der Debugger darunter
leidet.
Auf der Devpac ST-Originaldiskette befinden sich drei Versionen von
MonST: alle sind fast gleich zu bedienen. Auf die Unterschiede wird
etwas sp„ter eingegangen.
4.2 Die Exceptions des 68OOO
MonST verwendet die Exceptions des 68000 um amok-gelaufene Programme
zu stoppen und um ®Single-Steppen¯ zu erm”glichen. Es ist deshalb
ganz ntzlich zu wissen, was normalerweise geschieht, wenn auf dem
ST ein Exception passiert.
Es gibt verschiedene Sorten von Exceptions: die einen sind absichtliche,
die anderen eindeutige Fehler. Wenn ein Exception passiert, werden
auf dem SSP (Supervisor-Stack) bestimmte Daten hinterlassen, der Prozessor
geht dann in den Supervisor-Modus ber, und springt zum sog. ®exception
handler¯. Dies sind Maschinensprachebefehle, die bei einem Exception
(und sonst nie) ausgefhrt werden. Wenn MonST geladen ist, f„ngt
er manche Exceptions ab, damit kein Schaden passiert. Die verschiedenen
Arten von Exceptions, was sie tun, und MonSTs Reaktion darauf sind
in der folgenden Tabelle zu sehen:
Exception Nr. Exception Auswirkung Auswirkung mit MonST
2 Busfehler Bomben abgefangen
3 Adreáfehler Bomben abgefangen
4 Illegaler Befehl Bomben abgefangen
5 Teilung durch Null Bomben abgefangen
6 CHK Bomben abgefangen
7 TRAPV Bomben abgefangen
8 Privilegverletzung Bomben abgefangen
9 Trace Bomben wird fr das Single-
Steppen verwendet
10 line 1010 emulator line A Aufruf line A Aufruf Aufruf
11 line 1111 emulator TOS intern TOS intern
32 trap #0 Bomben abgefangen
33 trap #1 GEMDOS Aufruf GEMDOS Aufruf
34 trap #2 AES/VDI Aufruf AES/VDI Aufruf
35-44 trap #3-trap #12 Bomben abgefangen
45 trap #13 XBIOS Aufruf XBIOS Aufruf
46 trap #14 BIOS Aufruf BIOS Aufruf
47 trap #15 Bomben abgefangen
Die genauen Ursachen dieser Exceptions werden am Ende dieses Abschnitts
genauer erkl„rt, um aber zusammenzufassen:
Die Exceptions 2 bis 8 sind Programmierfehler und werden von MonST
abgefangen.
Exception 9 kann unter Umst„nden durch einen Programmierfehler hervorgerufen
werden, wird aber normalerweise von MonST fr das ®Single-Steppen¯
benutzt.
Die Exceptions 10, 11, 33, 34, 45 und 46 werden vom Betriebssystem
gebraucht und werden von MonST nicht bearbeitet.
Die restlichen Exceptions werden alle von MonST abgefangen; sie k”nnen
aber durchaus von einem Programm neu definiert und verwendet werden.
Der Eintrag ®Bomben¯ in der obigen Tabelle bedeutet, daá das Betriebssystem
des ST versucht, mit dem Fehler fertig zu werden und einige Bomben
(bzw. kleine Atompilze) auf dem Bildschirm malt (immer so viel, wie
die Exception-Nummer, z.B. zwei Bomben bei einem Busfehler), und
dann versucht, das Programm abzubrechen und ins Desktop zurckzukehren.
Wenn durch den Fehler wichtige Systemvariablen zerst”rt wurden, kann
es ohne weiteres passieren, daá das System abstrzt. Es kann auch
sein, daá das System von einer Exception direkt in eine andere ger„t
und dadurch der ganze Bildschirm sich mit Bomben fllt.
4.3 Speicherbelegung
Die interaktiven Versionen von MonST sind zum gleichen Zeitpunkt
im Speicher wie das zu debuggende Programm, d.h. MonST wird geladen,
es wird nach einem Programmnamen gefragt, und dann das angegebene
Programm, gegebenenfalls mit Symbolen, geladen.
MonST ist zum Zeitpunkt der Entstehung dieses Schreibens ca.
23Kbyte groá, es ben”tigt noch zus„tzlich etwa 32Kbyte an
Arbeitsspeicher. Dies mag etwas viel erscheinen, MonST braucht
aber diesen Speicher, um immer eine Bildschirmseite fr sich zu
behalten.
Die drei mitgelieferten MonST-Versionen heiáen:
MONST2.PRG interaktive GEM Version
MONST2.TOS interaktive TOS Version
AMONST2.PRG auto-residente Version
Zuerst werden die ersten beiden Versionen beschrieben, die auto-residente
Version wird danach erl„utert, ist aber den ersten zwei Versionen
sehr „hnlich.
4.4 MonST starten
4.4.1 Vom Desktop aus
Die beiden interaktiven Versionen von MonST sind bis auf die Dateinamen
identisch. Die .PRG-Version sollte mit GEM-Programmen verwendet werden,
die .TOS-Version sollte mit TOS-Programmen benutzt werden. GEM- und
TOS-Programme werden vom Betriebssystem anders gestartet. Weil MonST
das zu debuggende Programm startet, muá es selbst auch richtig gestartet
werden.
Ein GEM-Programm hat einen Hintergrund, Platz fr eine Menleiste
und braucht einen Mauszeiger, TOS-Programme brauchen aber einen
blinkenden Cursor, keine Maus und einen leeren Bildschirm. Sie
k”nnen ein TOS-Programm mit der GEM-Version von MonST debuggen,
der Bildschirminhalt kann dann aber ziemlich chaotisch aussehen.
Es ist aber keine gute Idee, ein GEM-Programm mit der TOS-Version
MonSTs zu debuggen, es k”nnen groáe Probleme auftauchen und unter
Umst„nden kann das System abstrzen; dies sollte auf jeden Fall
vermieden werden.
4.4.2 Vom Editor aus
Wenn GenST gestartet wird, sucht es automatisch nach MONST2.PRG und
l„dt MonST (wenn diese Option nicht anders gew„hlt wurde), falls er
vorhanden ist. Der Debugger ist sofort vom Editor aus verfgbar.
Wenn man Alt-M drckt oder im Programm-Men >>MonST<< w„hlt, wird MonST,
wie oben beschrieben, aufgerufen, nur wesentlich schneller, da es
sich schon im Speicher befindet.
Man kann aber auch Alt-D drcken oder >>Debuggen<< vom Programm- Men
w„hlen. MonST wird so auch aufgerufen, hat aber jetzt zus„tzlich
das zuletzt in den Speicher assemblierte Programm bereit, ggf. auch
mit Symbolen.
Der anf„ngliche Bildschirmmodus wird durch den GEM-Eintrag im
Programm-Men gew„hlt. Wenn der Eintrag abgehakt ist, wird die
GEM-Bildschirminitialisation vorgenommen, sonst wird der
Bildschirm fr ein TOS-Programm vorbereitet. Die oben erw„hnten Regeln
bezglich falscher Bildschirmmodi treffen hier auch zu.
4.5 Symbolisch Debuggen
Ein Hauptmerkmal von MonST ist die F„higkeit, die Originalsymbole
des Programms beim Debuggen zu benutzen. MonST untersttzt zwei
verschiedene Formate von Symbolen: das Standard-DRI-Format, wel-
ches maximal 8 Zeichen lange Symbole untersttzt, und das HiSoft-
erweiterte Format, welches eine Symboll„nge von maximal 22
Zeichen erlaubt. Sowohl GenST als auch LinkST k”nnen beide
Formate produzieren; viele andere Hochsprachencompiler
untersttzen auch das DRI-Format. Wir versuchen z.Zt. das HiSoft-
erweiterte-Format als zweiten Standard einzufhren; zum Zeitpunkt
des Schreibens dieses Handbuchs untersttzt nur der FTL-Modula-2-
Compiler auch das HiSoft-Format.
4.6 Dialog- und Alertboxen
MonST verwendet viele Dialog- und Alertboxen, die den GEM- Boxen
entsprechen; es sind aber keine. Der Grund dafr ist einfach: MonST
muá vom Betriebssystem so unabh„ngig wie m”glich sein; nur so ist
es gew„hrleistet, daá MonST auch unter den schwersten Bedingungen
problemlos funktioniert. Auáerdem ist auf die Maus in MonST kein
Zugriff vorhanden, da es richtige GEM-Boxen und Buttons nicht untersttzt.
Eine MonST-Dialogbox erkennt man daran, daá "ESC um abzubrechen" ber
dem linken oberen Rand steht. In der Box steht der Mitteilungstext
und (normalerweise) eine leere Zeile, in der sich der Cursor befindet.
Man kann zu jedem Zeitpunkt mit Esc die Dialogbox abbrechen. Die
Eingabe erfolgt ber die Tastatur und die Cursortasten. Die Backspace-
und Del-Tasten k”nnen zum Editieren der eingetippten Zeile benutzt
werden, Clr l”scht die eingetippte Zeile bis zum Anfang, genauso
wie die Esc-Taste in GEM-Dialogboxen. Die Eingabe wird mit der Return-
Taste beendet. Falls eine Zeile einen Fehler enth„lt, wird Return
so lange ignoriert, bis die Zeile akzeptabel ist. Dialogboxen, in
die mehr als eine Zeile eingegeben wird, lassen keine Zeilensprnge
durch die Cursor-oben- und Cursor-unten-Tasten zu.
Eine MonST-Alertbox ist eine Box, die eine Meldung (meistens eine
Fehlermeldung) anzeigt und auf Return oder Esc wartet.
4.7 Die Anzeige am Anfang
Wenn Sie MonST ber Alt-M vom Editor oder vom Desktop aus aufgerufen
haben, werden Sie zuerst in einer Dialogbox nach einem Programmnamen
gefragt. Wenn Sie ein Programm laden wollen, geben Sie den Programmnamen
ein (die Extension ist automatisch .PRG, wenn nicht anders angegeben)
und drcken Sie Return. Danach werden Sie nach einer Kommandozeile
gefragt, die dem Programm bergeben werden soll. Wenn das Programm
keine braucht, drcken Sie einfach wieder Return, und das Programm
wird geladen. Wenn Sie kein Programm debuggen wollen, z.B. nur den
Speicher des Rechners bearbeiten wollen, dann drcken Sie Esc, um
direkt in MonST zu gelangen.
4.8 Die MonST-Anzeige
Das Anzeigenprinzip von MonST ist dem von alten Groárechnern
nachempfunden: damals hatte man immer kleine flackernde L„mpchen
an der Vorderseite des Rechners beobachten k”nnen um
festzustellen, welche Register gerade benutzt wurden.
MonST zeigt in wesentlich leserlicherer Form an, was gerade in
Ihrem ST passiert. MonST generiert eine Anzeige mit den
Registern, Speicherinhalten und disassemblierten Instruktionen,
flackernde L„mpchen sind also berflssig.
Die MonST-Anzeige beim Programmstart besteht aus vier Fenstern;
in niedriger Aufl”sung sieht die Anordnung (platzbedingt) etwas
anders aus.
Das obere Fenster zeigt die Registerinhalte zusammen mit den Daten,
die an der Adresse stehen, die gleich dem Inhalt der Register sind.
Fenster 2 ist das Disassemblierungsfenster, in dem mehrere Zeilen
disassemblierten Codes zu sehen sind. Die Anfangsaddresse des Fensters
ist normalerweise der PC; Das ®’¯-Zeichen ist die momentane Position
des PC.
Fenster 3 zeigt einen Teil des Speichers sowohl in Hex als auch in
ASCII an.
Das kleine Fenster ganz unten am Bildschirm enth„lt keine Zahl und
wird haupts„chlich fr Mitteilungen verwendet.
4.9 Benutzung der Fenster
MonST hat immer ein aktuelles Fenster. Dieses Fenster erkennt man
daran, daá der Fenstertitel weiá auf schwarz, statt umgekehrt, ist.
Die Tab-Taste kann dazu verwendet werden, durch die einzelnen Fenster
zu gehen, man kann aber auch Alt zusammen mit der Fensternummer drcken
um ein bestimmtes Fenster zum aktuellen Fenster zu machen. Das kleine
Fenster unten kann nie das aktuelle Fenster werden, da es nur zur
Anzeige von Mitteilungen gedacht ist.
4.1O Eingabe von Befehlen
Der MonST-Befehlssatz basiert auf einzelnen Tasten, um ein schnelles
Arbeiten zu erm”glichen. Dies ist zu Anfang natrlich etwas
gew”hnungsbedrftig, macht sich aber schon nach geringer Zeit
bezahlt. Benutzer von MonST 1 werden viele Befehle wiedererkennen.
Vorsicht: Manche Befehle tun fast das gleiche in MonST2, sind aber
nicht unbedingt identisch.
Allgemein gilt, daá die Alt-Taste die Fenstertaste ist. Alle Befehle,
die die Alt-Taste beinhalten, haben Auswirkungen auf Fenster.
Befehle k”nnen groá- oder kleingeschrieben eingegeben werden. Alle
Befehle, die unter Umst„nden katastrophale Auswirkungen haben k”nnen,
erfordern die Control-Taste. Befehle werden sofort ausgefhrt, es
braucht nicht nach jedem Befehl Return zus„tzlich eingegeben werden.
Ungltige Befehle werden ignoriert. Die Fenster, deren Daten sich
ver„ndert haben k”nnten, werden auch nach jedem Befehl auf den neuesten
Stand gebracht.
MonST ist ein sehr funktionsstarkes und manchmal komplex erscheinendes
Programm. Wir sehen natrlich ein, daá es unwahrscheinlich ist,
daá jeder Benutzer jeden einzelnen Befehl auf Anhieb gebrauchen wird.
Deshalb ist dieses Kapitel in zwei weitere Teile gegliedert: einmal
eine Einleitung in die Benutzung MonSTs und darauf folgend einen
vollst„ndigen Referenzteil. Es ist ohne weiteres m”glich, daá
Anf„nger und MonST-Neulinge effektiv den Debugger benutzen, auch
wenn sie nur die Bedienungsanleitung gelesen haben. Lassen Sie
sich aber nicht vom Referenzteil abschrecken: er enth„lt sehr
ntzliche und wichtige Informationen.
4.11 MonST - eine Probefahrt
Es ist nicht unbedingt notwendig, jedes kleine Detail von MonST zu
kennnen, um den Debugger ®fahren¯ zu k”nnen. In diesem Teil werden
anhand eines kleinen Beispiels die wichtigsten Funktionen MonSTs
erl„utert.
In unserem Beispiel geben Sie das folgende kleine Programm in den
Editor ein:
GrӇe equ 20
section text
moveq #0,d0
lea Ende(pc),a0
moveq #GrӇe-1,d1
Schleife1 move.l d0,(a0)+
dbf d1,Schleife1
moveq #-1,d0
lea Ende(pc),a0
moveq #GrӇe-1,d1
Schleife2 move.l d0,(a0)+
dbf d1,Schleife2
Schluá clr.w -(sp)
trap #1
section data
Ende dcb.l GrӇe,-1
Das Programm tut nichts anderes als den Bereich von 80 Byte, der mit
dem Hex-Wert $FFFFFFFF gefllt ist, mit Nullen zu l”schen und daraufhin
wieder mit $FFFFFFFF zu fllen. Wenn dies geschehen ist, gibt das
Programm die Kontrolle wieder an das Betriebssystem zurck.
Assemblieren Sie das Programm in den Speicher und starten Sie MonST
mit Alt-D.
Sie k”nnen auch das Programm auf Diskette assemblieren: speichern
Sie die Quelltextdatei unter dem Namen BEISPIEL.S ab. Dann w„hlen
Sie als Ziel fr den Assembler "Diskette" und "erweiterten
Debug"; wenn er fertig ist, máten Sie die Datei BEISPIEL.PRG auf
Ihrer Diskette finden. Wenn Sie dann Alt-M drcken, fragt MonST
nach einem Dateinamen. Geben Sie "BEISPIEL" ein, die Extension .PRG
wird automatisch hinzugefgt. Mit dieser Prozedur sind Sie am
gleichen Punkt angelangt, als ob Sie in den Speicher assembliert
und Alt-D gedrckt h„tten.
Sie sehen in Fenster 2 Ihr Programm in disassemblierter Form. Drcken
Sie die Tab-Taste einmal, um Fenster 3 zum aktuellen Fenster zu machen.
Dann drcken Sie Alt-L und geben a0 ein. Sie haben hiermit das
Fenster 3 an das Adreáregister A0 gebunden. Die Bedeutung dieser
Funktion wird sp„ter klar. Drcken Sie Alt-2, um das
Disassemblierungsfenster wieder zum aktuellen Fenster zu machen.
Drcken Sie Ctrl-Y dreimal. Sie werden nach jeder Eingabe sehen,
daá der Pfeil, der den PC-Stand anzeigt, einen Befehl weiterrckt.
Wenn Sie nach dem ersten Ctrl-Y ins Registerfenster schauen, werden
Sie sehen, daá der erste Befehl den Wert 0 in das Datenregister D0
gesetzt hat (man sollte nie davon ausgehen, daá ein Register einen
bestimmten Wert hat; es kann sein, daá D0 schon 0 ist, dies ist aber
von GEMDOS abh„ngig und deshalb nicht unbedingt zutreffend). Das
zweite Ctrl-Y l„dt die Adresse von Ende in das Adreáregister A0.
Das Fenster 3, welches Sie an A0 gebunden haben, zeigt jetzt auf
den Speicherbereich, der "Ende" folgt. Wie Sie sehen, ist der Bereich
mit $FFFFFFFF gefllt. Der dritte Befehl l„dt den Schleifenz„hler
in das Register D1.
Drcken Sie Ctrl-Y erneut. Sie werden sehen, daá sich im Registerfenster
der Wert von A0 um vier erh”ht hat, ebenso die Startadresse von
Fenster 3. Ein Fenster an ein Register binden heiát also, daá bei
jedes Exception die Startadresse des Fensters auf die Adresse des
Registers gesetzt wird.
Jetzt wollen wir aber nicht unbedingt jedes Mal die Schleife durchgehen.
Mit Ctrl-A wird ein Breakpoint nach dem Befehl, der am PC ist, gesetzt,
und das Programm dann laufengelassen.
Das Setzen von Breakpoints ist eine Funktion von MonST. Wenn Sie
ein Breakpoint an eine Adresse setzen, wird das Programm angehalten
und MonST aufgerufen, wenn der PC diese Adresse erreicht.
Mit Ctrl-A umgehen wir das l„stige Durchlaufen der Schleife, indem
wir ein Breakpoint nach dem DBF-Befehl sezten, d.h. nachdem die Schleife
zu Ende ist. Drcken Sie jetzt also Ctrl-A.
Wenn die Schleife zu Ende ist, sind Sie dazu bereit, die zweite Schleife,
die wieder $FFFFFFFF in den Speicherbereich fllt, auszufhren. Drcken
Sie jetzt Alt-3, um Fenster 3 zum aktuellen Fenster zu machen. Drcken
Sie wieder Alt-L und geben Sie als Binde-Register diesmal m2 ein.
Sie k”nnen n„mlich ein Fenster an ein anderes Fenster binden. Die
Startadressen der einzelnen Fenster sind in Speichern, die wie Register
behandelt werden k”nnen, enthalten. Die Startadresse vom Fenster
2, dem Disassemblierungsfenster, ist im Speicher M2 enthalten. Jetzt
wird nach jedem Einzelschritt (den wir mit Ctrl-Y machen) das
Fenster 3 auf dem n„chsten Befehl stehen; der Unterschied ist
aber, daá im Fenster 3 die Befehle als Hex-Zahlen ausgegeben
werden und nicht disassembliert sind. Mit Alt-2 wird wieder
Fenster 2 zum aktuellen Fenster.
Da wir die zweite Schleife auch nicht Schritt fr Schritt durchlaufen
wollen, benutzen wir einen Breakpoint, um zum Schluá zu kommen. Drcken
Sie Alt-B und geben Sie Schluá, den Namen des Symbols, ein. Sie werden
rechts neben dem Befehl, der an der Adresse von Schlu0 steht, [1]
sehen. Dies bedeutet, daá ein Breakpoint mit Wert 1 am Schluá gesetzt
wurde. Dann benutzen wir Ctrl-R um das Programm laufen zu lassen.
Wenn die Schleife fertig ist, h„lt das Programm an, und zwar am Schluá,
wie wir es angegeben haben.
Wenn Sie zweimal Ctrl-Y drcken, ist das Programm fertig. Wenn Ihr
Programm in den Speicher assembliert wurde, springt MonST direkt in
den Editor zurck. Wenn nicht, meldet MonST "Programmende". Sie
k”nnten jetzt ein weiteres Programm mit Ctrl-L laden. Wenn nicht,
kommen Sie mit Ctrl-C zurck zum Editor.
Sie haben soeben MonST ®fahren¯ gelernt. Sie k”nnen jetzt mit Einzelschritten,
einfachen Breakpoints und Fenstern umgehen. Wenn Sie den ersten
Teil des Kapitels verstanden haben, lesen Sie im Referenzteil weiter.
Er beschreibt ausfhrlich alle Funktionen, die MonST zu bieten hat.
4. 12 MonST - Referenzteil
4.12.1 Numerische Ausdrcke
MonST kann numerische Ausdrcke auswerten, „hnlich wie GenST. Der
Hauptunterschied zu GenST liegt darin, da0 MonSTs normale Zahlenbasis
in Hex-Code ist, dezimalen Zahlen muá ein ®\¯-Zeichen (kein ¯#® wie
in Version 1!) vorangesetzt werden. Es gibt keine Ausdruckstypen
(absolut oder relativ), das ®*¯-Zeichen wird nur fr die Multiplikation
verwendet.
Symbole k”nnen verwendet werden, die normalerweise ®case-sensitiv¯
sind, d.h. daž ein Unterschied zwischen kleinen und groáen Buchstaben
gemacht wird. Sie haben eine Signifikanz von 8 bis 22 Zeichen (je
nach Symbolformat). Diese Standardeinstellungen k”nnen mit
"Voreinstellungen" ver„ndert werden.
Register werden mit ihren Namen bezeichnet, z.B. A3 oder D7. Dies
sind aber keine Hex-Zahlen. Um die Hex-Zahl A0 anzugeben, muá entweder
ein ®$¯-Zeichen der Zahl vorangesetzt werden oder die Zahl Null.
A7 bezeichnet immer den User-Stack-Pointer.
Es gibt reservierte Symbole, die nicht ®case-sensitiv¯ sind:
TEXT, DATA, BSS, END, SP, SR und SSP. END bezeichnet das erste
Byte nach dem BSS-Segment, SP ist entweder der Supervisor oder
der User-Stack-Pointer, abh„ngig vom Wert des Status-Registers.
Es gibt 10 ®Speicher¯, M0 bis M9, „hnlich wie bei Taschenrechnern.
Diese Speicher k”nnen, wie Register, Werte zugewiesen bekommen. Die
Speicher 2 bis 5 enthalten immer die Startadresse der Fenster 2
bis 5; wenn Sie einem dieser Speicher einen neuen Wert zuweisen,
ver„ndert sich auch die Anfangsadresse dieses Fensters.
Vorsicht: Weisen Sie nie M4 einen neuen Wert zu, wenn Fenster 4 als
®Source¯-Fenster benutzt wird.
Ausdrcke k”nnen auch Indirektionen beinhalten: die Zeichen ®{¯ und
®}¯ werden dafr benutzt. Indirektion kann auf einer Byte-, Wort-,
oder Langwortbasis angegeben werden, wenn das ®}¯ von einem Punkt
und der gewnschten GrӇe gefolgt wird; der Normalwert ist Langwort.
Falls der Pointer ungltig ist, entweder weil der Speicher unlesbar
oder ungerade (wenn Wort- oder LangwortgrӇe angegeben ist) ist,
ist der gesamte Ausdruck ungltig. Z.B. wird der Ausdruck
{Daten_Anfang+10}.w
das Wort, welches an der Adresse Daten_Anfang+10 steht, liefern.
Indirektion kann auf gleiche Art wie normale Klammern verschachtelt
werden.
4.12.2 Fenstertypen
Es gibt vier verschiedene Fenstertypen. Die erlaubten Fenstertypen
sind wie folgt:
Fensternummer Erlaubte Typen
1 Registerfenster
2 Disassemblierungsfenster
3 Speicher
4 Disassemblierung, Speicher oder
®Source¯
5 Speicher
Registerfenster
In einem Registerfenster werden die Inhalte der Datenregister in
Hex angezeigt, zus„tzlich der ASCII-Wert des untersten Bytes und die
Anzeige (in Hex) der ersten acht Byte, auf die der Registerinhalt
zeigt. Die Adreáregister werden auch in Hex angezeigt, zusammen mit
den ersten 12 Byte, auf die das Register zeigt. Wie in alle Hex-Anzeigen
in MonST werden Werte in nicht lesbaren Speicherstellen mit ** ersetzt.
Das Statusregister wird sowohl in Hex als auch als ®Flags¯ dargestellt.
Zus„tzlich wird entweder U oder S angezeigt, je nachdem, ob der Rechner
sich im Supervisor- oder Usermodus befindet. A7' ist der Supervisor-Stack-Pointer
und wird wie ein normales Adreáregister angezeigt.
Der Wert des PC ist zusammen mit der Instruktion, die am PC ist, in
der untersten Zeile des Registerfensters angezeigt. Wenn die Instruktion
eine oder zwei effektive Adressen hat, werden diese zusammen mit
dem Speicher, der an dieser(n) Adresse(n) ist, angezeigt.
TST.W $12A(A3) ;00001FAE 0F01
Diese Zeile bedeutet, daá der Wert von A3 mit $12A addiert die Adresse
$1FAE ergibt. An dieser Adresse ist der Wert $0F01. Ein komplexeres
Beispiel ist
MOVE.W $12A(A3),-(SP) ;00001FAE 0F01 ’0002AC08 FFFF
Der Ursprungsadreámodus ist der wie im ersten Beispiel, die Zieladresse
ist dagegen $2AC08, die z.Zt. $FFFF enth„lt. Beachten Sie, daá die
Anzeige immer so groá ist wie gerade n”tig. MOVEM-Daten werden als
Quad-Worte (64 Bit) angezeigt. Wenn Pr„dekrement im Adressierungsmodus
verwendet wird, wird dies bei der Adreáberechnung mit in Betracht
gezogen.
In niedriger Aufl”sung werden keine Hex-Daten fr die Datenregister
und nur vier Byte als Daten bei Adreáregistern angezeigt. Es kann
auch in niedriger Aufl”sung vorkommen, daá die Bildschirmbreite nicht
groá genug ist, um eine komplexe Zeile (wie das zweite Beispiel)
anzuzeigen.
Disassemblierungs-Fenster
In einem Disassemblierungs-Fenster wird Speicherinhalt in
disassemblierter Form angezeigt. Ganz links auf einer Zeile wird
die Adresse angezeigt, dann ggf. das Symbol an dieser Adresse,
daraufhin der Befehl an dieser Adresse. Falls an dieser Adresse
ein ®Breakpoint¯ gesetzt ist, wird dessen Typ in eckigen
Klammern, ®[¯und ®]¯, nach dem Befehl angezeigt. Bei Stop-
Breakpoints wird angezeigt, wie oft dieser Befehl noch ausgefhrt
werden muá, bis der Breakpoint aktiv wird und das Programm
stoppt. Bei einem Breakpoint mit einer Bedingung enthalten die
eckigen Klammern ein Fragezeichen, gefolgt von der Bedingung. Bei
Z„hler-Breakpoints enthalten die Klammern ein Gleichheitszeichen
und den Z„hlerwert. Bei permanenten Breakpoints ist ein ®*¯ in
den eckigen Klammern.
Das Format der diassemblierten Instruktionen ist im Motorola-
Standard, wie GenST ihn akzeptiert. Alle Text-Daten sind
groágeschrieben, bis auf die Symbole, die kleine Buchstaben
enthalten. Alle numerischen Daten sind in Hex bis auf die TRAP-
Nummern. Vorangehende Nullen und der Hex-Bezeichner ®$¯ werden
bei Zahlen kleiner als 10 nicht angezeigt. Wenn erforderlich,
werden numerische Daten mit Vorzeichen angezeigt. Die einzige
Abweichung vom Motorola-Standard ist die Darstellung der
Registerliste des MOVEM Befehls:
MOVEM.L D0-D3/A0-A2,-(SP)
wird, um Platz zu sparen, als
MOVEM.L D0-3/A0-2,-(SP)
angezeigt.
In niedriger Aufl”sung ersetzen Symbole die Adresse und werden nur
bis zu einer maximalen L„nge von acht Zeichen angezeigt.
Speicher-Fenster
In einem Speicher-Fenster wird Speicher zeilenweise im Format Hex-Adresse,
Hex-Daten und ASCII-Daten angezeigt. Unlesbarer Speicher wird als
®**¯ dargestellt. Die Anzahl der angezeigten Bytes pro Zeile h„ngt
von der Breite des Fensters ab und kann maximal 16 Byte betragen.
Source-Fenster
Sie k”nnen im ®Source¯-Fenster ASCII-Dateien, wie z.B. Ihren Programm-Quelltext,
„hnlich wie in einem Text-Editor darstellen. Der normale Tab-Abstand
ist 8, kann aber mit dem Editieren- Fenster-Befehl auf 4 umgeschaltet
werden.
4.12.3 Fenster-Befehle
Die Alt-Taste ist die sog. Fenster-Taste, d.h. alle Fenster-Befehle
beinhalten die Alt-Taste. Jeder dieser Befehle bezieht sich auf das
aktuelle Fenster, also das Fenster, dessen Titel invers dargestellt
ist. Das aktuelle Fenster kann gew„hlt werden, indem man entweder
die Tab-Taste so oft drckt, bis das gewnschte Fenster zum aktuellen
Fenster wird oder Alt zusammen mit der Nummer des gewnschten
Fensters drckt.
Die meisten Fenster-Befehle funktionieren in allen Fenstern unabh„ngig
davon, ob sie im ®Zoom¯-Modus sind oder nicht. Wenn ein Befehl keinen
Sinn ergibt, wird er ignoriert.
Alt-A Adresse setzen
Dieser Befehl setzt die Anfangs-Adresse eines Fensters
Alt-B Breakpoint setzen
Mit diesem Befehl werden Breakpoints gesetzt; Breakpoints werden
sp„ter genauer beschrieben.
Alt-E Editieren
In einem Speicherfenster kann man mit diesem Befehl im Speicher
in Hex und ASCII editieren. Hex-Zahlen k”nnen mit den Tasten 0-9
und A-F eingegeben werden. Die Cursor-Tasten k”nnen dazu benutzt
werden, den Cursor im Fenster zu bewegen. Mit der Tab-Taste k”nnen
Sie zwischen dem Hex- und dem ASCII-Editiermodus hin- und herschalten.
Der ASCII-Modus schreibt den ASCII-Wert des Tastendrucks in den
Speicher. Um den Editiermodus zu verlassen, drcken Sie die Esc-Taste.
Im Registerfenster bewirkt Alt-E das gleiche wie Alt-R, n„mlich
Register setzen.
Im ®Source¯-Fenster kann mit Alt-E der Tab-Abstand zwischen 4 und
8 gew„hlt werden.
Alt-F FontgrӇe
Dieser Befehl ver„ndert die Fontgr”áe im aktuellen Fenster. In hoher
Aufl”sung wird zwischen 16 und 8 Pixel groáen Fonts gewechselt; in
Farbe wird zwischen 8 und 6 Pixel groáen Fonts gewechselt.
Wenn die Fontgr”áe im Register-Fenster ver„ndert wird, werden die
Gr”áen der anderen Fenster neu berechnet, um sie so groá wie m”glich
zu machen.
Alt-L Fenster binden
Mit diesem Befehl kann ein Fenster an ein Register oder an ein anderes
Fenster gebunden werden. Nach einer Exception werden die Startadressen
aller Fenster neu berechnet und ggf. entsprechend ver„ndert. Um eine
Bindung zu l”schen, geben Sie in die Dialogbox nichts ein. Fenster
2 ist standardm„áig an den PC gebunden. Um ein Fenster an ein anderes
zu binden, mssen Sie den entsprechenden Speicher angeben, z.B. M2
fr Fenster 2.
Alt-O Auswerten
Eine Dialogbox erscheint, in der Sie einen Ausdruck eingeben. Dieser
wird ausgewertet und in Hex, Dezimal und ggf. als Symbol ausgegeben.
Alt-P Drucker Dump
Der Inhalt des aktuellen Fensters wird auf dem Drucker ausgegeben.
Dieser Befehl kann mit Esc abgebrochen werden.
Alt-R Register setzen
Mit diesem Befehl kann jedes Register gesetzt werden. Das Register
muá angegeben werden, gefolgt von einem Gleichheitszeichen und dem
Ausdruck des neuen Registerwerts. Zum Beispiel:
A3=A2+4
setzt das Register A3 auf den Wert vom Register A2 mit vier
addiert. Sie k”nnen z.B. im ®Zoom¯-Modus diesen Befehl dazu
verwenden, einem anderen Fenster eine neue Startadresse zu geben.
Wenn Sie den ®Zoom¯-Modus verlassen, zeigt das Fenster auf die
angegebene Adresse.
Alt-S Fenster teilen
Dieser Befehl teilt Fenster 2 in die Fenster 2 und 4 oder das Fenster
3 in die Fenster 3 und 5. Jedes neue Fenster ist vom Ursprungsfenster
unabh„ngig. Wenn Sie Alt-S ein zweites Mal drcken, werden die zwei
Fenster wieder zusammengefgt.
Dieser Befehl wird in niedriger Aufl”sung ignoriert.
Alt-T Typ ver„ndern
Dieser Befehl hat nur Wirkung in Fenster 4, welches durch die
Teilung von Fenster 2 entsteht, oder wenn Sie eine ASCII-Datei laden. Der
Fenstertyp wird zwischen Disassemblierung, Speicheranzeige oder ®Source¯
geschaltet.
Alt-Z ®Zoom¯
Das aktuelle Fenster wird mit diesem Befehl auf die volle BildschirmgrӇe
gebracht. Mit Esc oder einem erneuten Alt-Z wird das Fenster wieder
auf Normalgr”áe gebracht. Alt-Befehle sind im ®Zoom¯-Modus weiterhin
benutzbar.
Cursor-Tasten
Die Cursor-Tasten werden in Verbindung mit dem aktuellen Fenster
benutzt. Ihre Wirkung h„ngt vom Fenstertyp ab.
In einem Speicher-Fenster ver„ndern alle vier Cursor-Tasten die
Startadresse des Fensters. Mit Shift-oben und Shift-unten k”nnen
Sie seitenweise hoch und runter "bl„ttern". In einem
Disassemblierungs-Fenster ver„ndern Cursor-oben- und Curso-unten-
Tasten die Startadresse des Fensters um jeweils eine Instruktion.
Cursor-links und Cursor-rechts ver„ndern die Startadresse jeweils um
ein Byte. Die Shift-Tasten k”nnen wiederum fr das seitenweise
Bl„ttern benutzt werden.
Im ®Source¯-Fenster ver„ndert Cursor-oben und Cursor-unten die
Startadresse des Fensters um eine Zeile, die Shift-Tasten
ver„ndern die Startadresse um eine Seite.
4.13 Bildschirmumschaltung
MonST benutzt seinen eigenen Bildschirmspeicher und seinen eigenen
Bildschirmtreiber, um jeden Konflikt mit dem zu debuggenden Programm
zu vermeiden. Um ein "Flackern" des Bildschirms beim "Single-Steppen"
zu verhindern, wird von der Bildschirm-Anzeige auf die des Programms
erst nach 20 msec umgeschaltet. Es ist auch m”glich, den
Debugger in einer anderen Aufl”sung wie das zu debuggende Programm
zu betreiben; dies geht aber nur mit einem Farbmonitor.
V Anderer Bildschirm
Dieser Befehl schaltet bis zum n„chsten Tastendruck auf den Bildschirm
des zu debuggenden Programms.
Ctrl-O Andere Aufl”sung
Dieser Befehl schaltet MonSTs Anzeige zwischen niedriger und mittlerer
Aufl”sung hin und her. Alle Fenster werden neu initialisiert und
auf die StandardgrӇen eingestellt. Dieser Befehl hat keine Auswirkung
auf das zu debuggende Programm.
Dieser Befehl wird bei einem monochromen Monitor ignoriert.
Dadurch, daá MonST seinen eigenen Bildschirmspeicher hat, ist es
m”glich, den Bildschirmspeicher Ihres Programms anzusehen; dies ist
bei Grafikprogramm ideal.
Vorsicht: Wenn Ihr Programm die Bildschirmaufl”sung, -position
oder die Farbpalette ver„ndert, ob mit dem XBIOS oder direkt per
Hardware, ist es wichtig, daá Sie die Bildschirmumschaltung bei
den Voreinstellungen, w„hrend Sie diesen Code ausfhren,
abschalten. Wenn Sie dies nicht tun, bemerkt MonST die
Ver„nderungen nicht.
Wenn Sie einen Diskettenzugriff durchfhren, schaltet der
Bildschirm auf den Bildschirm Ihres Programms um. Dies geschieht,
um eine m”glicherweise erscheinende GEM-Alarmbox (z.B. bei einem
Diskettenfehler) sofort sichtbar werden zu lassen, Sie k”nnen
deshalb sofort darauf reagieren.
4.14 Programmunterbrechung
4.14.1 Shift-Alt-Help
Ein laufendes Programm kann mit Shift-Alt-Help unterbrochen
werden: durch diese Tastenkombination wird eine Trace-Exception
ausgel”st. Wenn Sie in MonST zurckgelangen, kann es sein, daá
sich der PC im Programm befindet oder die Unterbrechung im ROM
stattfindet (was bei Programmen der Fall ist, die ausgiebigen
Gebrauch vom ROM machen) oder im Line-F- oder dem TRAP-Handler.
Wenn Sie sich nicht im Ihrem Programm befinden, raten wir Ihnen,
ein Breakpoint an einer entsprechenden Stelle in Ihr Programm zu
setzen und mit Ctrl-R das System weiterlaufen zu lassen.
Alt-Help ohne Shift l”st einen Ausdruck des Bildschirms von Ihrem
Programm aus. Wenn Sie versehentlich das Shift vergessen haben, k”nnen
Sie den Druck mit nochmaligem Alt-Help abbrechen.
Es kann sein, daá diese Tastenkombination ignoriert wird, nochmaliges
Drcken der Tasten máte MonST eingreifen lassen. Diese Kombination
hat keine Wirkung, wenn sie innerhalb von MonST gedrckt wird.
Vorsicht: Ein Programm sollte nie mit Ctrl-C abgebrochen werden, nachdem
es innerhalb des ROMs unterbrochen wurde. Dies kann sehr leicht zu
einem Absturz fhren.
4.14.2 Ctrl-S
Eine Anweisung kann durch Ctrl-S abgebrochen werden. Dieser
Vorgang ist gleichbedeutend damit, daž der PC x W”rter nach vorne
gesetzt wird. Dieser Befehl ist dann angebracht, wenn eine
Anweisung seltsame Ergebnisse erzeugen k”nnte.
4.14.3 Reset
W„hrend Sie sich im Debugger befinden, k”nnen Sie mit Ctrl-Alt-
Num.Punkt einen Reset durchfhren. Es wird keine Warnung
generiert.
4.14.4 Breakpoints
Breakpoints erlauben es Ihnen, Ihr Programm an von Ihnen
bestimmten Punkten zu unterbrechen. MonST erlaubt maximal acht
gleichzeitig gesetzte Breakpoints, von denen jeder einer der fnf
Breakpoint-Typen sein kann. Wenn ein Breakpoint erreicht wird,
trifft MonST die Entscheidung, ob das Programm angehalten wird
oder weiter abl„uft. Diese Entscheidung h„ngt von den Typen des
Breakpoints ab.
Einfache Breakpoints
MonST h„lt das Programm bei Erreichen der Breakpoints an und l”scht
dann den Breakpoint.
Stop Breakpoints
Diese Art unterbricht das Programm an der Stelle, an der ein bestimmter
Befehl an der Adresse des Breakpoints zum n-ten Male ausgefhrt wurde.
Ein einfacher Breakpoint ist eigentlich ein Stop-Breakpoint mit dem
Wert 1.
Z„hler-Breakpoints
Diese Art ist nur ein Z„hler. Jedesmal, wenn der Befehl an der Adresse
des Breakpoints ausgefhrt wird, erh”ht sich der Z„hler um eins, und
das Programm l„uft weiter.
Permanente Breakpoints
Dieser Typ ist den einfachen Breakpoints „hnlich, bis auf den
Unterschied, daá sie nie gel”scht werden. Jedesmal, wenn dieser
Breakpoint erreicht wird, bernimmt MonST die Kontrolle.
Bedingte Breakpoints
Diese Art von Breakpoint erlaubt es Ihnen, Ihr Programm nur dann
anzuhalten, wenn eine bestimmte Bedingung erfllt ist. Jeder bedingte
Breakpoint hat einen Ausdruck; dieser wird jedesmal, wenn der Breakpoint
erreicht wird, ausgewertet. Wenn der Ausdruck wahr (d.h. ungleich
Null) ist, wird der Programmablauf unterbrochen.
Alt-B Breakpoint setzen
Dies ist ein Fenster-Befehl; er erlaubt das Setzen oder L”schen von
Breakpoints zu jeder Zeit. Die eingegebene Zeile muá je nach Breakpoint-Typ
eines der folgenden Formate haben:
<Adresse>
setzt einen einfachen Breakpoint.
<Adresse>,<Ausdruck>
setzt einen Stop-Breakpoint an der angegebenen Adresse, der das Programm
stoppt, nachdem <Ausdruck> eine bestimmte Anzahl oft ausgefhrt wurde.
<Adresse>,=
setzt einen Z„hler Breakpoint. Der Anfangswert des Z„hlers ist Null
<Adresse>,*
setzt einen permanenten Breakpoint.
<Adresse>,?<Ausdruck>
setzt einen bedingten Breakpoint, der vom <Ausdruck> abh„ngig ist.
<Adresse>,-
l”scht jede Art von Breakpoint an der angegebenen <Adresse>.
Breakpoints k”nnen nicht an ungeraden und unlesbaren Adressen, und
im ROM gesetzt werden. ROM-Breakpoints k”nnen emuliert werden, indem
man den Run-Until-Befehl benutzt.
Jedesmal, wenn ein Breakpoint erreicht wird, egal ob das Programm
angehalten wird oder nicht, wird der Prozessorstatus im History-Buffer,
der sp„ter beschrieben wird, behalten.
Help Breakpoint- und Segmentanzeige
Dieser Befehl zeigt die Adressen der TEXT, DATA und BSS-Segmente
und deren L„ngen, zusammen mit s„mtlichen gesetzten Breakpoints,
an. Alt-Befehle k”nnen hier auch benutzt werden.
Ctrl-B Breakpoint setzen
Dieser Befehl ist haupts„chlich aus Kompatibilit„tsgrnden zu
MonST 1 noch vorhanden. Hiermit wird ein einfacher Breakpoint an
der Startadresse des aktuellen Fensters gesetzt. Falls schon ein
Breakpoint an dieser Adresse vorhanden ist, egal welcher Art,
wird er gel”scht.
U Go Until
Dieser Befehl fragt in einer Dialogbox nach einer Adresse, an der
dann ein einfacher Breakpoint gesetzt wird. Das Programm l„uft danach
sofort weiter ab.
Ctrl-K Kill Breakpoints
Alle gesetzten Breakpoints werden gel”scht.
Ctrl-A Breakpoint setzen und ausfhren
Mit diesem Befehl wird ein einfacher Breakpoint nach dem Befehl am
PC gesetzt, das Programm l„uft weiter. Dieser Befehl ist haupts„chlich
fr DBF-Schleifen gedacht, die man nicht immer wieder durcharbeiten
will, sondern deren Ergebnis man gleich sehen will.
Ctrl-D BDOS Breakpoint
Hiermit wird ein Breakpoint auf den n„chsten BDOS-Aufruf, dessen
Funktionsnummer Sie angeben, gesetzt. Wenn Sie einen bestehenden
BDOS-Breakpoint l”schen wollen, geben Sie eine leere Zeile ein. BDOS
Breakpoints mssen gel”scht werden, um deaktiviert zu werden.
History
MonST hat einen sog. History-Speicher, in dem der Prozessorstatus
nach jeder Exception behalten wird.
Die h„ufigste Ursache eines Eintrags in den History-Speicher ist
das ®Single-Steppen¯. Aber auch bei jedem Breakpoint und bei
bestimmten Arten des Run-Befehls wird ein neuer Eintrag in den
Speicher gemacht.
Der Speicher enth„lt Platz fr fnf Eintr„ge. Wenn er voll ist, wird
jeweils der „lteste Eintrag gel”scht, damit ein neuer aufgenommen
werden kann.
H History-Speicher-Anzeige
Ein Fenster wird ge”ffnet, in dem die maximal fnf Eintr„ge im
History-Speicher angezeigt werden. Sowohl alle Registerwerte
werden angezeigt, als auch der n„chste Befehl, der ausgefhrt
wird.
Wenn auf einen Befehl im History-Speicher ein Breakpoint gesetzt
ist, zeigt der Wert in den eckigen Klammern den Wert des Breakpoints
zur Zeit der Anzeige und nicht zum Zeitpunkt des Eintrags in den
Speicher.
4.15 MonST verlassen
Ctrl-C Abbrechen
Dieser Befehl verursacht einen Programmende-Trap fr den aktuellen
GEMDOS ®Task¯. Wenn ein Programm mit MonST debuggt wird, wird zuerst
das Programm mit Ctrl-C abgebrochen, die Meldung ®Programmende¯ erscheint
unten im Mitteilungsfenster; durch nochmaliges Ctrl-C wird MonST
verlassen. Sie k”nnen aber auch ein anderes Programm laden, ohne MonST
verlassen zu mssen.
Wenn MonST vom Editor aus aufgerufen wurde, kehren Sie sofort nach
Beendigung des Programmes in den Editor zurck, ohne Ctrl-C fr MonST
drcken zu mssen.
Vorsicht: Es kann durchaus zum Absturz kommen, wenn Sie frhzeitig
ein GEM Programm abbrechen, ohne daá z.B. die ®Virtual Workstation¯
geschlossen wurde.
4.16 Laden und Abspeichern
Ctrl-L Ausfhrbares Programm laden
Mit diesem Befehl wird ein Programm zum Debuggen geladen. Sie werden
nach dem Programmnamen (wenn nicht anders angegeben, wird .PRG als
Extension angenommen) und dann nach der Kommandozeile gefragt, die
dem Programm bergeben werden soll. Wenn MonST schon ein Programm
geladen hat, muá dieses Programm erst beendet werden, bevor ein neues
geladen werden kann.
Die Datei, die geladen werden soll, muá ein von GEMDOS
ausfhrbares Programm sein. Wenn dies nicht der Fall ist, wird
ein TOS-Fehler 66 gemeldet. Weitere Versuche, ein Programm zu
laden, werden normalerweise scheitern, da GEMDOS den fr das
Programm reservierten Speicher nicht zurckgibt. Wenn dies
geschieht, mssen Sie MonST verlassen und neu starten; laden Sie
die Datei dann als Bin„rdatei.
B Bin„rdatei laden
Es wird nach einem Dateinamen und nach einer (nicht notwendig anzugebenden)
Ladeadresse gefragt. Diese Datei wird in den Speicher geladen. Wenn
keine Ladeadresse angegeben wird, wird die Datei dort geladen, wo
GEMDOS gengend Speicher freigibt. M0 enth„lt die Startadresse, M1
die Adresse des Dateiendes im Speicher.
S Bin„rdatei sichern
Dieser Befehl fragt nach einem Dateinamen, unter dem die Datei gesichert
werden soll, nach einer Startadresse und einer Schluáadresse. Um
eine zuvor geladene Bin„rdatei zu sichern, k”nnen Sie als Start- und
Schluáadresse M0 und M1 angeben, vorausgesetzt, die Werte haben sich
nicht ver„ndert.
A ASCII-Datei laden
Mit diesem Befehl k”nnen Sie eine ASCII-Datei laden, normalerweise
eine Quelltextdatei, um sie in MonST anzusehen. Fenster 4 wird ge”ffnet,
falls es noch nicht vorhanden ist, und als ®Source¯-Fenster eingestellt.
Der Speicher fr diese Datei wird von GEMDOS angefordert. Es ist
deshalb ratsam, die ASCII-Datei vor Ihrem Programm zu laden, damit
garantiert gengend Speicher dafr vorhanden ist. In niedriger
Aufl”sung wird Fenster 4 nicht ge”ffnet. Sie k”nnen aber die
Datei laden, mit Ctrl-O die Aufl”sung „ndern und mit Alt-S und
zweimaligem Alt-T den Text dann ansehen.
Wenn eine ASCII-Datei nach einem Programm geladen wird, geh”rt der
Speicher, in dem die Datei sich befindet, dem Programm und nicht
MonST. Wenn das Programm zu Ende ist, wird der Speicher, in dem sich
der Text befindet, von GEMDOS freigegeben. Die auto-residente Version
von MonST kann diese Unterscheidung nicht machen, seien Sie also
vorsichtig, wenn Sie eine ASCII-Datei in den auto-residenten MonST
laden.
4.17 Programme ausfhren
Ctrl-R Zurck zum Programm / Laufenlassen
Hiermit wird das Programm mit voller Geschwindigkeit laufengelassen;
es ist die bliche Methode dafr, das Programm nach einem Breakpoint
weiterlaufen zu lassen.
Ctrl-Y / Ctrl-Z ®Single-Step¯
Hiermit wird der Maschinensprachebefehl am PC ausgefhrt. Ein Trap,
Line-A oder Line-F Opcode wird als einzelner Befehl angesehen und
als solcher ausgefhrt. Dies kann durch >>Voreinstellungen<< ver„ndert
werden.
Ctrl-T Befehl interpretieren
Dieser Befehl interpretiert den Opcode am PC. Er ist dem Ctrl-Y/Ctrl-Z
„hnlich, verfolgt aber keine JSR, BSR, Trap, Line-A oder Line-F Befehle.
Er erspart Ihnen das Durchlaufen solcher Routinen und kann mit Befehlen
im ROM oder im RAM benutzt werden.
R Run
Dies ist ein allgemeiner Befehl und kann auf verschiedene Arten ausgefhrt
werden.
Run G Go
Dieser Befehl ist mit Ctrl-R identisch und l„át das Programm mit
voller Geschwindigkeit laufen.
Run S Langsam (Slowly)
Das Programm wird langsam ausgefhrt, jeder Befehl wird im
History-Speicher behalten.
Run I Instruktion
Dieser Befehl ist dem >>Run s<< „hnlich, nimmt aber einen numerischen
Parameter: die Anzahl der Instruktionen, die ausgefhrt werden, bevor
MonST wieder eingreift.
Run U Bis (Until)
Sie werden nach einem Ausdruck gefragt, der nach jedem Opcode ausgewertet
wird. Sobald dieser Ausdruck wahr ist, wird das Programm gestoppt.
Sie k”nnen z.B. den folgenden Ausdruck verwenden, wenn Sie Ihr Programm
im ROM mit Shift-Alt-Help angehalten haben und erst wieder Kontrolle
bernehmen wollen, wenn Ihr Programm-Code wieder ausgefhrt wird:
(PC>TEXT)&(PC<FC0000)
Das Programm wird so lange laufen, bis der PC an einer Adresse ist,
die sich nicht im ROM (PC<FC0000) und in Ihrem Programmbereich befindet
(PC>TEXT). Sie k”nnten sicherheitshalber
(PC>TEXT)&(PC<DATA)&(PC<FC0000)
angeben, dies ist aber meist unn”tig und braucht fr die Auswertung
nach jeder Instruktion l„nger.
Bei allen Run-Befehlen werden Sie nach "Beobachten J/N?" gefragt.
Wenn Sie "Ja" w„hlen, k”nnen Sie von MonST aus den Programmablauf
mit allen Registerver„nderungen beobachten. Dieser Vorgang l„uft
ziemlich langsam ab und kann mit dem Drcken beider Shift-Tasten
abgebrochen werden. Sie k”nnen auch Shift-Alt-Help dazu verwenden,
den Beobachtungsmodus anzuhalten. Diese Tastenkombination kann aber
aus system-spezifischen Grnden nicht immer den Beobachtungsmodus
anhalten, die beiden Shift-Tasten sind in diesem Fall zuverl„ssiger.
Wenn Sie "Nein" w„hlen, wird das Programm mit seinem eigenen Bildschirm
laufengelassen. Den Programmablauf k”nnen Sie mit Shift-Alt-Help
unterbrechen.
Wenn Sie den Ablauf "beobachten", ist es ratsam, die
Bildschirmumschaltung in den Voreinstellungen abzuschalten. Sonst
wird bei jedem Befehl der Bildschirm umgeschaltet und erzeugt
dadurch ein sehr augenfeindliches Flackern, was besonders bei
Farbmonitoren unangenehm ist.
Bei allen Arten von Run (auáer Go) wird nach jedem ausgefhrten Befehl
ein Eintrag in den History-Speicher gemacht. Traps werden als einzelne
Befehle behandelt. Sie k”nnen dies mit Voreinstellungen ver„ndern,
allerdings sollten Sie die Warnungen, die bei der Beschreibung von
"Traps verfolgen" gegeben werden, beachten.
Wenn ein Programm in einem der oben erw„hnten Modi (auáer Go) l„uft,
werden Sie einige Pixel in der linken oberen Ecke Ihres Bildschirms
sehen. Dieses kleine ®L„mpchen¯ zeigt, daá MonST noch aktiv arbeitet.
Man k”nnte sonst annehmen, daá die Maschine h„ngengeblieben ist,
weil sich die Ausfhrungsgeschwindigkeit stark verlangsamt.
4.18 Speicher durchsuchen
G Speicher durchsuchen
Nach diesem Befehl erscheint "Suchen nach B/W/L/T/I?", wobei die
Krzel Byte, Wort, Langwort, Text und Instruktion bedeuten.
Wenn Sie B, W oder L w„hlen, werden Sie nach den Zahlensequenzen
gefragt, nach denen Sie suchen wollen. MonST findet auch Zahlen an
ungeraden Adressen.
Wenn Sie T w„hlen, geben Sie den Text ein, nach dem gesucht werden
soll, er wird dann ®case-sensitiv¯ behandelt.
Geben Sie I ein, so k”nnen Sie nach einem ganzen oder nur einem Teil
eines Maschinensprachebefehls suchen. Wenn Sie z.B. nach ®$14(A¯
suchen, werden Sie eine Instruktion wie ®MOVE.L D2,$14(A0)¯ finden.
Anders als bei MonST 1, wird zwischen Groá-und Kleinschreibung
unterschieden. Sie sollten auch das Ausgabeformat des
Disassemblers beachten: so sollten Sie z.B. fr Zahlen Hex-Code
verwenden, sich auf A7 anstatt SP beziehen usw.
Wenn Sie die Parameter eingegeben haben, wird die Kontrolle an den
N-Befehl bergeben.
N N„chstes Vorkommnis suchen
Dieser Befehl wird nach dem G-Befehl benutzt; er sucht nach dem n„chsten
Vorkommnis der angegebenen Suchparameter. Wenn Sie nach Byte-, Wort-
oder Langwort-Daten suchen, werden Sie immer ein Vorkommnis, n„mlich
im MonST-Speicher, finden. Wenn Sie nach Text suchen, kann es auch
sein, daá der Text sich noch im Tastaturpuffer befindet. Mit diesen
Suchparametern wird nach 64Kbyte durchsuchten Speichers die Esc-Taste
abgefragt. Bei der Suche nach Maschinensprachebefehlen wird immer
nach 2 Byte auf die Esc-Taste hin geprft.
Gesucht wird im Bereich von 0 bis zum Ende des Speichers, dann von
$FA0000 bis $FEFFFF, dem Modul- und System-ROM-Bereich, und dann
wieder von 0.
Die Suche beginnt kurz nach der Anfangsadresse des aktuellen Fensters
(wenn es nicht das Registerfenster ist). Wenn die angegebenen Daten
gefunden wurden, werden die Startadressen von manchen Fenstern auf
die Adresse der gefundenen Daten gesetzt. Wenn innerhalb von Fenster
2 oder 3 gesucht wurde, werden die Startadressen von 2 und 3 auf
die gefundenen Daten gesetzt. Wenn innerhalb der Fenster 4 oder
5 gesucht wurde, werden die Startadressen von 4 und 5 auf die gefundenen
Daten gesetzt, auáer dann, wenn Fenster 4 als ®Source¯-Fenster benutzt
wird.
Im "Source"-Fenster suchen
Wenn Sie den G-Befehl im "Source"-Fenster verwenden, kann nur
nach Text gesucht werden. Wenn er gefunden worden ist, wird die
Zeile, die den Text enth„lt, angezeigt. Wenn der Text nicht
gefunden wurde, wird das Fenster nicht ver„ndert. Daž die die
Suche ohne Ergebnis verlief erkennen Sie daran, daá die Meldung
"Suche..." nicht mehr im Mitteilungsfenster unten zu sehen ist.
4.19 Verschiedenes
Ctrl-P Voreinstellungen
Mit dieser Dialogbox k”nnen Sie verschiedene Optionen MonSTs einstellen.
Die ersten drei Fragen verlangen J/N-Antworten. Sie k”nnen, wie in
jeder Dialogbox, mit Esc abbrechen und mit Return die neuen Einstellungen
bernehmen.
Bildschirmumschaltung
Normalerweise ist diese Option an; der Bildschirm wird erst
20 msec nach Kontrollbergabe an Ihr Programm auf den Bildschirm
Ihres Programms umgeschaltet. Damit wird unn”tiges Flackern
verhindert. Diese Option sollte ausgeschaltet werden, bevor das
zu debuggende Programm die Aufl”sung, die Bildschirmadresse oder
die Farbpalette ver„ndert; danach sollten Sie die
Bildschirmumschaltung wieder einschalten.
Traps verfolgen
Normalerweise werden Traps, Line-A- und Line-F-Aufrufe als ein-
zelne Befehle angesehen. Wenn >>Traps verfolgen<< eingeschaltet ist,
werden solche Routinen verfolgt, um so auch das ROM untersuchen
zu k”nnen.
Vorsicht: Diese Option sollte mit grӇter Vorsicht behandelt
werden, da man damit sehr leicht groáen Schaden anrichten kann.
Manche zeitkritische Routinen, wie Floppy- oder
Festplattentreiber, mssen ununterbrochen ablaufen. Eine Trace-
Exception in solchem Code kann ohne weiteres zum Miálingen und
auch zum Datenverlust fhren. Andererseits macht es Spaá dem AES
dabei zuzusehen, wie es Mens oder sich ”ffnende Fenster aufbaut.
Wenn Sie Ihr Programm mit >>Traps verfolgen<< und >>Run<<
ablaufen lassen, k”nnen Sie mit Shift-Alt-Help den Programmablauf
unterbrechen und ihn mit normaler Geschwindigkeit mit Ctrl-R
fortsetzen. Sowohl das AES als auch das VDI benutzen Line-A und
Line-F Aufrufe, es ist deshalb sehr gut m”glich, daá mehrere noch
bevorstehende ®Stack Frames¯ das gesetzte Trace-Bit enthalten. Es
kann also den Anschein haben, als ob v”llig unvorhersehbare
Trace-Exceptions geschehen. Nach jedem derartigen Exception
sollten Sie mit Ctrl-R fortfahren. Diese unregelm„áigen
Exceptions werden nur dann aufh”ren wenn Sie auf tiefster Ebene,
d.h. wieder in Ihrem Programm, sind.
Es gibt noch eine Nebenwirkung:
Wenn durch AES-Event-Aufrufe ®getraced¯ wurde, kann es vorkommen,
daá auch ®Stack Frames¯ innerhalb von Desk-Accessories mit gesetztem
Trace-Bit existieren. Wenn das Programm zu Ende ist bevor das Desk-
Accessory die M”glichkeit hatte, diese ®Stack Frames¯ abzuarbeiten,
wird ein Trace-Exception nach Verlassen MonSTs geschehen und einen
Systemabsturz verursachen. Der Absturz erfolgt nur dann nicht, wenn
AMonST2 oder das mitgelieferte NOTRACE.PRG aktiv sind.
NOTRACE.PRG
Dieses kleine Programm wird auch als Source mitgeliefert und dient
dazu, Trace-Exceptions zu ignorieren anstatt mehrere Bomben auszul”sen.
Das Programm sollte in Ihren AUTO-Ordner kopiert werden, falls Sie
nicht schon AMonST verwenden.
Relative Offsets
Diese Einstellung ist normalerweise an und beeinfluát die
symbolische Disassemblierung vom Adreáregister indirekt mit dem
Offset Adreámodus, d.h. xxx(An). Wenn die Option an ist, wird
jeder derartige Adreámodus ausgerechnet und dann die
Symboltabelle durchsucht; wenn ein Symbol sich an dieser Adresse
befindet, wird der Befehl als Symbol(An) disassembliert. Diese
Option ist sehr hilfreich, sowohl bei manchen
Assemblerprogrammstilen als auch bei der Untersuchung von
Hochsprachen, die ein Adreáregister als Basisregister benutzen.
HiSoft Basic z.B. verwendet A3 als Zeiger auf das ®Runtime¯-
System.
Symbole
Diese Option erm”glicht es, die Behandlung von Symbolen durch MonST
zu ver„ndern. Zuerst werden Sie gefragt, wie viele Buchstaben in einem
Symbol signifikant sein sollen (minimal 8, maximal 22) und danach,
ob die Symbole "Case-sensitiv" verarbeitet werden sollen. Diese
Option ist fr diejenigen gedacht, die nicht jedes Mal den ganzen
Symbolnamen eingeben und nicht auf Groá- und Kleinschreibung achten
wollen.
I Intelligentes Kopieren
Dieser Befehl kopiert einen Speicherbereich in einen anderen. Die
Adressen sollten in folgender Weise eingegeben werden:
<Anfang>,<Einschlieáliches_Ende>,<Ziel>
Das Kopieren ist deshalb intelligent, da die Ursprungs- und Endbereiche
berlappen k”nnen.
Vorsicht: MonST berprft nicht, ob die Adressen gltig sind. Eine
Kopie von oder zu einer nichtexistenten Speicherstelle wird MonST
wahrscheinlich abstrzen lassen. Das gleiche gilt fr den reservierten
Systemspeicherbereich.
W Speicher fllen
Dieser Befehl fllt einen Speicherbereich mit dem angegebenen Wert.
Die Parameter sind:
<Anfang>,<Einschlieáliches_Ende>,<Fllbyte>
Die Warnung ber gltigen Speicher gilt auch fr diesen Befehl.
L Labels anzeigen
Wenn MonST von GenST mit Debuggen aufgerufen wurde, wird ein
Fenster ge”ffnet und alle Labels, die sich z.Zt. in MonSTs
Symboltabelle befinden, werden mit ihren Adressen angezeigt. Die
Symbole erscheinen in der Reihenfolge, in der sie aufgerufen
wurden. Dabei ist es unerheblich, ob sie von Diskette oder vom
Speicher eingelesen werden.
P Disassemblieren zum Drucker/zur Diskette
Mit diesem Befehl k”nnen Sie einen Speicherbereich zum Drucker oder
auf Diskette, sowohl mit vorhandenen Symbolen als auch mit ®cross
reference¯-Labels, disassemblieren. Die erste Zeile der Dialogbox
sollte mit
<Startadresse>,<Endadresse>
angegeben werden. Die n„chste Zeile fragt nach einem Speicherbereich,
den MonST zur Erstellung der "cross reference"-Liste benutzen kann:
<Pufferanfang>,<Pufferende>
Wenn Sie dies nicht wollen, geben Sie einfach eine leere Zeile ein.
Die n„chste Zeile fragt nach den Speicherbereichen, die als DC-Direktiven
disassembliert werden sollen. Die Zeile sollte so aussehen:
<Datenanfang>,<Datenende>[,<GrӇe>]
Die optionale GrӇe ist die der DCs und kann B, W oder L sein, wobei
L der Standardwert ist. Wenn alle Datenbereiche definiert wurden,
geben Sie eine leere Zeile ein.
Zuletzt wird nach einem Dateinamen gefragt. Wenn keiner angegeben
wird, geht die Ausgabe zum Drucker.
Wenn eine "cross reference"-Liste angefertigt werden soll, gibt
es zuerst w„hrend der Erstellung eine kleine Pause. Die Labels,
die so generiert wurden, haben das Format >>Lxxxxxx<<, wobei
>>xxxxxx<< die Hex-Adresse des Labels ist.
Druckerausgabe
Das Zeilenformat enth„lt zuerst eine 8stellige Hex-Zahl, bis zu
10 W”rter Hex-Daten, ggf. maximal 12 Zeichen eines Symbols, und darauf
den disassemblierten Befehl. Die Druckerausgabe kann mit Esc abgebrochen
werden.
Diskettenausgabe
Das Format kann direkt von GenST verarbeitet werden. Es enth„lt
zuerst ggf. ein Symbol, dann den disassemblierten Befehl, dem ein
Tab vorausgeht. Ein Tab trennt auch den Opcode vom Operanden.
Wenn Sie einen Speicherbereich ohne Symbole disassemblieren, ist
es ratsam, die "cross reference"-Option zu benutzen, da
andernfalls keine Labels vorhanden sein wrden. Ein
Diskettenfehler oder Esc brechen die Ausgabe ab.
M Adresse ver„ndern
Dieser Befehl ist aus Kompatibilit„tsgrnden zu MonST 1 beibehalten
worden. Er entspricht Alt-A.
O Auswerten
Dieser Befehl entspricht Alt-O und ist aus Kompatibilit„tsgrnden
zu MonST 1 beibehalten worden.
D Laufwerk und Pfad ver„ndern
Mit diesem Befehl k”nnen Sie das aktuelle Laufwerk und den aktuellen
Pfad ver„ndern.
Ctrl-E Exceptions wieder installieren
Mit diesem Befehl werden die von MonST abgefangenen Exceptions
auf ihren Urzustand gebracht. Dies kann ntzlich sein beim
Debuggen von kompilierten Programmen, deren Runtimes selbst
Exceptions verwenden.
4.2O Auto-residenter MonST
Die dritte mitgelieferte Version von MonST heiát AMONST2.PRG.
Wenn Sie dieses Programm im AUTO-Ordner Ihrer Boot-Diskette
ablegen, wird es automatisch nach jedem Reset neu installiert.
Diese MonST-Version ruht, bis ein Exception geschieht. Sie ist
haupts„chlich fr Programmierer gedacht, die AUTO-Programme und
Desk-Accessories schreiben und debuggen wollen. Wenn ein Fehler
wie ein Bus- oder Adreáfehler innerhalb einer dieser Programme
auftritt, h„ngt die Maschine, bevor Sie einen interaktiven MonST
aufrufen k”nnen. Es ist auch so m”glich, einen illegalen Opcode
wie ILLEGAL in Ihr Programm zu setzen und dadurch den auto-
residenten MonST aufzurufen.
Die auto-residente Version kann auch normal vom Desktop aus aufgerufen
werden und wird sich genauso initialisieren, als ob sie im AUTO-Ordner
w„re, unter der Voraussetzung, daá nicht bereits ein anderer AMonST
installiert ist.
Wenn sie aufgerufen ist, ist die auto-residente Version von MonST
der interaktiven Version von der Bedienung her sehr „hnlich. Programme
und dessen Symbole k”nnen aber nicht geladen werden, die "base-
page"-Variablen
sind unbekannt und auf Null gesetzt. Der andere Unterschied liegt
darin, daá, wenn das Programm beendet wird oder AMonST mit Ctrl-C
verlassen wird, AMonST trotzdem im Speicher bleibt.
Wenn AMonST installiert ist, kann jedes Programm mit Shift-Alt-Help
unterbrochen werden.
Der von MonST ben”tigte Speicher kann nur durch einen Reset zurckgegeben
werden.
W„hrend der Installation von AMonST k”nnen Sie durch Drcken der
beiden Shift-Tasten in das Programm gelangen, um z.B. Breakpoints
zu setzen. Wenn Sie mit Ctrl-C AMonST verlassen, bleibt der Debugger
resident, ein Verlassen mit Ctrl-R bewirkt, daá die Installation
von AMonST unterbrochen wird.
Es kann eine interaktive MonST-Version geladen werden, obwohl ein
AMonST installiert ist. Die interaktive Version hat Kontrolle bis
sie beendet wird; AMonST wird dann wieder aktiv.
Vorsicht: Rufen Sie nie AMonST innerhalb eines anderen Programmes
auf. Es kann dadurch vom Betriebssystem ein groáer Speicherbereich
bis zum n„chsten Reset blockiert werden.
4.21 Debug-Strategien
Tips
Wenn Sie ein Programm mit Shift-Alt-Help oder durch den Run-
Until-Befehl unterbrochen haben, ist es gut m”glich, daá der PC
sich im ROM befindet. Die Methode, dahin zurckzugelangen, von wo
aus Ihr Programm das ROM aufgerufen hat, ist folgende: W„hlen Sie
die >>Traps-Verfolgen<<-Option in den Voreinstellungen. Dann
geben Sie den Ausdruck sp=a7 beim Run-Until-Befehl ein. Sobald
der Prozessor sich wieder im Usermodus befindet, also in Ihrem
Programm, wird MonST aktiviert.
Wenn Sie sich in einer Unterroutine befinden, die Sie nicht
interessiert, k”nnen Sie mit dem Until-(nicht dem Run-Until-
!)Befehl diese Routine berspringen: Geben Sie den Ausdruck {sp}
als Zieladresse an. Falls die Unterroutine etwas auf dem Stack
abgelegt haben sollte, oder einen lokalen Stack-Frame benutzt
(oft bei kompilierten Programmen der Fall), kommen Sie mit Run
Until {pc}.w=4e75 weiter. Das Programm wird langsam weiterlaufen,
bis der PC an einem RTS Befehl angelangt ist. Diese Methode
funktioniert dann nicht, wenn die Unterroutine eine weitere
Unterroutine aufruft. In diesem Fall muá eine weitere Bedingung
gestellt werden, z.B. ({pc}.w=4e75)&(sp>xxx) wobei xxx eins
weniger ist als der momentane Wert.
Wenn Sie Run Until benutzen, werden Sie merken, daá es eine ganze
Weile dauern kann, bis die Bedingung, die Sie angegeben haben,
wahr wird. Sie k”nnen diese Zeit so kurz wie m”glich halten,
indem Sie den Ausdruck im voraus, soweit Sie k”nnen, ausrechnen.
(A3>(3A400-\100+M1))
kann auf
A3>xxx
reduziert werden, indem Sie xxx mit Hilfe von Alt-O ausrechnen.
Die MonST-Kommandozeile
Wenn Sie einen Kommandointerpreter verwenden, k”nnen Sie MonST eine
Kommandozeile bergeben. Zuerst geben Sie den Programmnamen ein,
und, falls erwnscht, eine Kommandozeile, die dem zu debuggenden
Programm bergeben werden soll.
4.22 Die Bug-Jagd
Es gibt wahrscheinlich genausoviele Bug-Jagd-Strategien wie es
Programmierer gibt, aber die Erfahrung ist doch der beste Lehrer.
Wir haben in der Zeit, in der wir den 68000er programmieren,
gelernt, wie man die Suche am besten angeht.
Zuerst ist ein sehr guter Weg, um Fehler zu finden, sich den
Quelltext anzusehen. Es ist eine schlechte Angewohnheit, gleich
zum Debugger zu greifen und sich erst dann den Quelltext
anzusehen. Es k”nnte sein, daá Sie dabei das System oder die
Programmierumgebung wechseln und nicht mehr auf das ®Low-Level¯-
Debuggen zurckgreifen k”nnen.
Wenn ein Programm offensichtliche Fehler macht, wie z.B. einen
Adreáfehler, ist es wesentlich leichter das Problem zu finden,
als wenn das Programm nur manchmal, von Ihrer Sicht aus v”llig
unberechenbar, das falsche Ergebnis liefert.
Viele Fehler entstehen dadurch, daá bestimmte Speicherbereiche, die
wichtige Daten enthalten, versehentlich berschrieben werden. Wenn
man den Speicherbereich leicht, wie z.B. bei einem Busfehler, erkennen
kann, kann man bedingte Breakpoints an verschiedenen Stellen ine
Ihrem Programm unterbringen, um den Fehler so frh wie m”glich
abzufangen. Wenn z.B. die globale Variable Haupt_Zeiger irgendwo
ungerade wird, wird die Bedingung des Breakpoints wahrscheinlich
so aussehen:
{Haupt_Zeiger}&1
Wenn diese Methode nicht funktioniert, kann man davon ausgehen,
daá die Variable an einer sonst unerfindlichen Stelle ver„ndert
wird. Die L”sung ist meist die Benutzung von Run Until mit der
eben beschriebenen Bedingung. Es kann auf diese Weise sehr lange
dauern bis das Problem auftaucht (deshalb auch das ®L„mpchen¯
oben links). Es kann auch ohne weiteres der Fall sein, daá der
Fehler auch so nicht zu finden ist. Manche Fehler sind sehr
speicherspezifisch und werden durch einen Interrupt, w„hrend der
Stack an einer bestimmten Stelle ist, ausgel”st. Es kommt auch
vor, daá ein Fehler nur dann auftaucht, wenn ausgerechnet kein
MonST zugegen ist; in einer solchen Situation hilft meist nur
noch Glck.
Z„hler-Breakpoints sind auch sehr gute Hilfsmittel, um einen Bug
schnell zu lokalisieren. Wenn eine Routine nach einer bestimmten
Zeit schief geht, Sie aber nicht sehen k”nnen warum, setzen Sie
einen Z„hler-Breakpoint in diese Routine und lassen das Programm
ablaufen. Wenn der Fehler auftritt, schauen Sie sich mit Hilfe von
>>Help<< an, wie oft die Routine durchgefhrt wurde. Dann laden Sie das
Programm neu und setzen einen Stop-Breakpoint an diese Stelle mit
dem Wert des Z„hler-Breakpoints (oder eins weniger). Lassen Sie das
Programm laufen. Sie k”nnen die Routine dann ®single-steppen¯, falls
sie schiefl„uft.
Viel Glck!
4.23 Programme im Auto-Ordner
Wenn ein Programm im AUTO-Ordner abstrzt, kann es sein, daá der
Rechner in einer unendlichen Schleife versucht, neu zu booten. Benutzen
Sie in diesem Fall AMonST, indem Sie AMonST vor dem abstrzenden
Programm in den AUTO-Ordner kopieren. So wird bei einem Exception
der Rechner nicht neugestartet, sondern AMonST greift ein.
4.23.1 Desk-Accessories
Wenn ein Desk-Accessory nicht das tut, was es tun soll, sollten Sie
AMonST benutzen. Um ein DA im Speicher zu finden, gehen Sie mit
Shift-Alt-Help in AMonST. Dann suchen Sie ab Adresse 0 nach dem
Namen Ihres Accessory. Es wird in Groábuchstaben und bis auf 8
Zeichen L„nge mit Leerschritten ausgefllt sein. Ignorieren Sie
Vorkommnisse in Directory-Puffern (der Name wird darin von .ACC
gefolgt) und in MonSTs eigenem Speicher, wobei dem Namen ein ASCII-T
voransteht. Das richtige Vorkommnis wird 12 Byte nach dem Namen
ein Langwort haben, das auf die Base-Page des Accessory zeigt;
$100 Byte danach f„ngt es an. Von hier aus sollten Sie Ihre
Hauptschleife erkennen und ein Breakpoint an einer geeigneten
Stelle setzen. Mit Ctrl-R l„uft dann das Accessory weiter bis zum
Breakpoint.
Wenn schon bei der Initialisation eines Accessory ein Fehler auftritt,
mssen Sie es ganz am Anfang, bevor der Fehler passiert, anhalten.
Der beste Weg ist, den ILLEGAL-Befehl zu verwenden und ihn durch
AMonST abfangen zu lassen. Manchmal klappt diese Methode auch nicht.
Die folgende Vorgehensweise funktioniert bei den aktuellen ST-ROMs
um das AES zu stoppen, bevor es das Accessory startet. Es wird darauf
hingewiesen, daá diese Methode kompliziert und nicht fr den Anf„nger
gedacht ist.
Zuerst halten Sie beide Shift-Tasten gedrckt, damit Sie beim
Bootvorgang in AMonST gelangen. Dann setzen Sie mit Ctrl-D
ein BDOS-Breakpoint auf dem GEMDOS-f_open-Aufruf, $3D. Danach
benutzen Sie Ctrl-C, um den Bootvorgang weiterlaufen zu lassen.
AMonST wird jedes Mal, wenn ein f_open-Aufruf erfolgt, aktiviert.
Machen Sie Fenster 3 zum aktuellen Fenster und setzen Sie
jedesmal, wenn Sie auf ein Breakpoint kommen, die Startadresse
des Fensters auf {sp+2}. Wenn der erscheinende Name nicht der
Ihres Accessory ist, bergehen Sie den Aufruf mit Ctrl-Y.
Setzen Sie dann noch ein BDOS-Breakpoint auf $3D und lassen den
Bootvorgang mit Ctrl-R fortlaufen. Wenn der Name Ihres
Accessory doch auftaucht, setzen Sie ein BDOS-Breakpoint auf
$4B und geben dann Ctrl-R ein. AMonST stoppt den Ablauf kurz
bevor das Accessory geladen wird. Diese Reihenfolge -zuerst ein
f_open und dann ein p_exec - mag zwar etwas seltsam
erscheinen,ist aber erfolgversprechend. Mit Ctrl-Y ber den
GEMDOS-Aufruf und dann mit Alt-B mit der Adresse d0+100 wird ein
Breakpoint auf den ersten Befehl des Accessory gesetzt. Mit
Ctrl-R lassen Sie das Betriebssystem so lange laufen, bis Ihr
Accessory tats„chlich ausgefhrt wird. Diese Methode mag zwar
kompliziert und zeitaufwendig sein, sie ist oft aber die einzige
M”glichkeit, ein Desk-Accessory zu debuggen.
4.23.2 Die Exception-Analyse
Wenn eine unerwartete Exception passiert, ist es meist sehr ntzlich
zu wissen, wo und wie sie passierte, um dann, wenn m”glich, das
Programm zum Weiterlaufen zu bringen.
Busfehler
Wenn der PC sich in nicht-existentem Speicher befindet, schauen Sie
sich den Stack an und versuchen Sie, eine Rckkehradresse zu finden.
Diese gibt meist Aufschluá ber den Grund des jetzigen PC-Wertes.
Wenn der PC sich innerhalb Ihres Programmes befindet, wird ein Zugriff
auf einen nicht-existenten oder geschtzten Speicher den Busfehler
ausgel”st haben. Es ist sehr unwahrscheinlich, daá Sie nach einem
Busfehler Ihr Programm weiterlaufen lassen k”nnen.
Adrežfehler
Wenn der PC sich nicht in Ihrem Programm befindet, ist die soeben
erw„hnte Methode anzuwenden. Ein Adreáfehler hat als Ursache meist
einen Wort- oder Langwortzugriff auf eine ungerade Adresse. Eine
Registerkorrektur hilft oft, daá das Programm wenigstens fr eine
Weile weiterlaufen kann.
Illegaler Befehl
Wenn der PC in einem sehr niedrigen Speicherbereich ist, etwa unter
$30, ist meist ein Sprung an die Adresse 0 schuld. Wenn Sie sich
mit MonST diesen Bereich ansehen, erkennen Sie einen BRA.S, gefolgt
von mehreren ORI-Befehlen, die in Wirklichkeit Langwort-Zeiger sind,
dicht gefolgt von einem illegalen Befehl.
Privilegverletzung
Dies wird durch die Ausfhrung eines privilegierten Befehls im User-Modus
verursacht. Meistens bedeutet dies, daá Ihr Programm Amokgelaufen
ist.
4.24 Zusammenfassung der MonST-Kommandos
Fenster-Befehle
Alt-A Startadresse setzen
Alt-B Breakpoint setzen
Alt-E Fenster editieren
Alt-F FontgrӇe
Alt-L Fenster binden
Alt-O Ausdruck auswerten
Alt-P Drucker-Dump
Alt-R Register setzen
Alt-S Fenster spalten
Alt-T Fenstertyp ver„ndern
Alt-Z Fenster zoomen
Bildschirmumschaltung
V Anderer Bildschirm
Alt-O Aufl”sung ver„ndern
Breakpoints
Alt-B Breakpoint setzen
Help Breakpoint- und Segmentanzeigen
Ctrl-B Breakpoint setzen
U Go Until
Ctrl-K Alle Breakpoints l”schen
Ctrl-A Breakpoint setzen und ausfhren
Ctrl-D BDOS-Breakpoint
Laden und Abspeichern
Ctrl-L Ausfhrbares Programm laden
B Bin„rdatei laden
S Bin„rdatei abspeichern
A ASCII-Datei laden
Programme ausfhren
Ctrl-R Zurck zum Programm / Run
Ctrl-Y ¯Single-Step®
Ctrl-T Instruktion interpretieren (Trace)
R Run (verschiede Arten)
Speicher durchsuchen
G Durchsuche Speicher
N N„chstes Vorkommnis
Verschiedenes
Ctrl-C Abbrechen
Ctrl-P Voreinstellungen
I Intelligentes Kopieren
W Speicher fllen
L Labels anzeigen
P An Drucker/Diskette disassemblieren
M Adresse ver„ndern
O Auswerten
D Laufwerk und Pfad ver„ndern
Shift-Alt-Help Programm unterbrechen
H History-Speicher anzeigen
Ctrl-E Exceptions wieder installieren