HiSoft DevpacST

From Atari Wiki
Revision as of 12:32, 13 October 2011 by Admin (talk | contribs)
Jump to navigation Jump to search

HiSoft

Bentzung 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, 
mssen Sie die DevpacST Version 2.02 oder sp„tere verwenden, da 
frhere Versionen nicht kompatibel sind. Sie sollten DRI-Ausgabe-
Code w„hlen, wie es im Handbuch (Seite 48) beschrieben ist. Fgen 
Sie dannach

     COMMENT PASCAL

in Ihr Programm ein. Dadurch wird GenST angewiesen, das spezielle 
Dateiformat fr Personal Pascal zu erzeugen. Die Deklaration der 
Funktionen und/oder Prozeduren muž mittels der XDEF-Amweisung 
erfolgen, deren Namen mssen 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 bezglich der von Pascal aufgerufenen Assembler 
Sprache k”nnen Sie auf den Seiten 6-142 finden.

Hier ist ein knstlich 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 Kernstck 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 mssen. Wenn Sie zus„tzlich noch unser Saved!- 
Desk-Accessory besitzen, gibt es kaum einen Grund, w„hrend der 
Programmentwicklung zurck 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 Tastaturkrzel 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 fr Ctrl-C.

Shift-Alt-S ist das Tastaturkrzel fr "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 ursprnglichen 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 eingefgt werden. Das gleiche gilt fr 
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 fr 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) Einrcken

Diese Funktion rckt eine Zeile automatisch nach Eingabe von RETURN 
um so viel ein, wie die vorherige Zeile durch Leerzeichen bzw. Tabs 
eingerckt 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 verfgbar. 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 Ausfhrung 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 drcken 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 ntzlich, wenn nur ein 
Syntaxcheck durchgefhrt 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, mssen Sie 
die Speichermenge angeben, in die das Programm hineinassembliert wird; 
der Standardwert ist 20 Kbyte, genug fr 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 mssen also den Programm-
speicher vergr”áern. Natrlich hat ein gr”áerer Programmspeicher 
zur Folge, daá der Assembler weniger Platz zum Arbeiten 
hat. Falls der Assembler mit der Meldung "ungengender Speicher"
abbricht, mssen Sie die Programmspeichergr”áe verringern. Wenn die 
Programmspeichergr”áe mit dem fr den Assembler notwendigen Platz 
nicht zu vereinbaren ist, mssen Sie auf Diskette assemblieren.
Wenn Sie auf Diskette assemblieren, wird die GrӇeneinstellung des 
Programmspeichers ignoriert und der gesamte verfgbare Speicherplatz 
dem Assembler zur Verfgung gestellt. Wenn Ihr Programm auf Diskette 
assembliert wird, ohne daá der Assembler sich einen Namen fr diese 
Datei bilden kann, wird der Name Ihres Programms mit NONAME anfangen.

Wenn Sie auf "Assemblieren" klicken oder Return drcken, 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 zurckkehren. Wenn in Ihrem Programm Fehler 
auftreten, wird der Cursor des Editors bei der Rckkehr auf der ersten 
fehlerhaften Zeile Ihres Programmtextes stehen; mit Alt-J gelangen Sie 
dann an den n„chsten Fehler.

2.4.2 Programme ausfhren

Wenn Sie "Ausfhren" im Programm-Men w„hlen, k”nnen Sie ein in den 
Speicher assembliertes Programm ausfhren; das Tastaturkrzel hierfr 
ist Alt-X. Wenn der Vorgang beendet wird, kehren Sie in den Editor 
zurck. Falls Ihr Programm nicht vollst„ndig assembliert wurde, kann 
es nicht ausgefhrt werden.
Wenn Ihr Programm abstrzt, kann es sein, daá Sie nicht wieder 
in den Editor gelangen und neu "booten" mssen. Es ist also ratsam, 
den Quelltext vor der Ausfhrung 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 ausfhren, 
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 
Menleiste. 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 zurck. Die Bildschirminitialisation h„ngt vom 
Menpunkt "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 drcken, 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 zurck. Die Bildschirm-
initialisation h„ngt hier auch von GEM ab.

2.4.5 GEM

Normalerweise wird bei "Ausfhren", "Debuggen" und "MonST" eine GEM- 
Bildschirminitialisation vorgenommen. Bei TOS-Programmen braucht man 
aber einen leeren Bildschirm und einen blinkenden Cursor. Wenn der 
Menpunkt "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 ausgefhrt werden, da sonst ein Absturz 
sehr wahrscheinlich wird.

2.4.6 N„chster Fehler

Hier ist so gut wie keine Ver„nderung gegenber der Version 1 zu 
erkennen. Der einzige Unterschied ist, daá bei der Rckkehr 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 zurck. Die Hauptanwendungen 
dieser Funktion sind das Ausfhren von assemblierten Programmen und 
der Aufruf des Linkers. Sowohl TOS- als auch GEM-Programme k”nnen 
ausgefhrt werden. Voraussetzung dafr ist natrlich, 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 auszufhrende Programm 
ausw„hlen. Wenn es ein TOS- oder ein TTP-Programm ist, werden Sie 
zus„tzlich nach einer Kommandozeile fr 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 mssen. 
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 Tastaturkrzel 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 fr die Version 2 v”llig neu 
geschrieben worden. Nur so ist es m”glich gewesen, die gewnschten 
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 Ausfhrungen: 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 ausfhrbarem, 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 ntzlich, 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 
Ausfhrung 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 fr die Dateien werden in Krze erl„utert.
Wenn Sie alle gewnschten Optionen gew„hlt haben, klicken Sie auf 
"Assemblieren" oder drcken 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 zurck. 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 ausfhrbare 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, 
mssen 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 ausgefhrt 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 ausgefhrt 
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 fr Ihr 
Programm benutzt werden; wenn Sie aber mit Debug arbeiten, wird der 
Programmspeicher sowohl mit Ihrem Programm als auch mit der Debug-
Information gefllt.
Ein Programm, das im Speicher ausgefhrt 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 
Ausfhrung 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 ausfhrbare, linkbare Datei im GST-Format
.O              nicht ausfhrbare, linkbare Datei im DRI-Format

Die ersten drei Arten k”nnen vom Desktop aus mit einem Doppelklick 
ausgefhrt werden; sie unterscheiden sich in der Vorbereitung, die 
das Betriebssystem macht, bevor das Programm ausgefhrt wird. Bei 
einer .PRG Datei wird der Bildschirm gel”scht und mit dem Muster 
des Desktops versehen; auáerdem wird an der Bildschirmoberseite Platz 
 fr eine Menleiste 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 ausfhrbar, 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 ausgefhrt werden; sie mssen 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 ausgefhrt werden. Sie mssen die Extension .PRG haben, obwohl 
sie TOS-Programme sein mssen.

2.1O Verschiedene Ver„nderungen gegenber 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 untersttzt 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 untersttzt. 
Es gibt aber stilistische Abkrzungen, die GenST2 auch akzeptiert:

Condition Codes
Die alternativen Condition Codes HS und LQ, „quivalent mit CC und 
CS, werden bei Bcc, DBcc und Scc untersttzt.

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„tsgrnden 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 untersttzt.

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 fr 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 ausdrcklich 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. ntzlich fr 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 gegenber 
der Version 1 ver„ndert haben.

Option A - Auto-PC
Um Ausfhrzeit 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 ausfhrbaren Code. Mit L+ wird 
GST-linkbarer Code erzeugt, mit L2 wird DRI-linkbarer Code erzeugt. 
Mit L- kann ausdrcklich ausfhrbarer 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 krzere oder schnellere 
zu verwandeln. Standardm„áig wird zwar keine Optimierung vorgenommen, 
jedoch kann jede Art von Optimierung wahlweise hinzugeschaltet werden.

        O1+     Optimiert Rckw„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 geprft.  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-šberprfung
GenST2 kann Programmierfehler entdecken, indem es Ausdrcke dahingehend 
prft, ob sie absolut oder relativ sind. Da fr 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 wrden 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-      ausfhrbarer Code (Standard)
        L+      GST-linkbarer Code
        L2      DRI-linkbarer Code
        M       Makro-Expansion (M-)
        O       Optimierungen (O-)
        P       auf Positionsunabh„ngigkeit prfen (P-)
        S       Symboltabelle ins Listing (S-)
        T       Typen-šberprfung (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  ntzlich, einen oder mehrere Befehle zu wiederholen. 
Mit REPT ist dies durchfhrbar. 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 fr die ersten neun Parameter, und a-z 
oder A-Z fr 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 
ntzlich 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 dafr 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 Ausfhrbare Dateien

Diese Dateien sind sofort vom Desktop aus ausfhrbar. Eine solche 
Datei kann Symbole und Relozier-Information enthalten. Die 
normalen Extensionen fr 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 fr 
eine Hochsprache schreiben, werden Sie wahrscheinlich linkbare Dateien 
erzeugen wollen. Das GST-Format wird von den meisten in England 
oder auch anderswo produzierten Hochsprachensystemen untersttzt. 
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 Ausdrcken. 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 untersttzt 
(obwohl LinkST eine BSS-SECTION erzeugen kann).

2.12.3 DRI-linkbare Dateien

Dies ist das Original-Linkerformat des ST und wurde ursprnglich 
von Digital Research fr CP/M-68K entwickelt. Es wird, meist durch 
Konvertierungsprogramme, vom Groáteil der in den USA entwickelten 
Hochsprachensystemen untersttzt. DRI-linkbare Dateien haben meist 
die Extension .O.

Vorteile: Selektives Hinzulinken mit Libraries geht
schnell, GEMDOS-SECTIONen werden voll untersttzt.

Nachteile: Sehr groáe Einschr„nkungen bei importierten Labels, linkbare 
Dateien sind doppelt so groá wie ausfhrbare 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 mssen das vom Compiler untersttzte Format verwenden.
Wenn Sie ausschlieálich in Assembler schreiben, werden Sie wohl das 
ausfhrbare 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 Anfhrungszeichen stehen, wenn er Leerschritte enth„lt. 
Diese Direktive ist nicht unumg„nglich, ein Modul namens ANON_MODULE 
wird automatisch erzeugt.

Ausfhrbar              
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 fr alle MODULE global, was  
fr Konstanten sehr ntzlich ist.

SECTION    Section-Name
Diese Direktive verursacht einen Wechsel zu der genannten Section. 
Ein Programm kann aus mehrereren Sectionen bestehen, die im endgltigen 
Programm mit gleichnamigen Sectionen zusammengefgt werden. Wenn 
nicht anders angegeben, wird Ihr Programm im TEXT SECTION assembliert. 
Sie k”nnen mit diesem Befehl jederzeit in eine andere Section wechseln.

Ausfhrbar      
Erlaubte Namen fr Sectionen sind TEXT (fr den Bereich, 
der das Programm enth„lt), DATA (fr initialisierte Daten) und BSS, 
ein besonderer Speicherbereich, der vom GEMDOS fr 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 fr globale 
Variablen benutzen, k”nnen Sie Platz auf der Diskette sparen.

DRI                     
Die obengenannten Regeln fr ausfhrbare Programme gelten hier auch.

GST                     
Es gibt keine Regeln fr Namen der Sectionen. Sectionen mit gleichem 
Namen in verschiedenen Modulen werden beim Linken zusammengefgt. 
Die Anordnung der Sectionen im endgltigen 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 fr relative Symbole wie 
Programmlabels als auch fr 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 berprfen, um Programmierfehler zu finden, die sonst 
vielleicht bersehen worden w„ren.

XDEF            Export<,Export>...
Hiermit werden Labels angegeben, die fr 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.

Ausfhrbar      
Diese Direktive wird ignoriert.

DRI                     
Alle Symbole werden beim Exportieren auf 8 Zeichen L„nge gekrzt; 
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 mssen dort natrlich 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.

Ausfhrbar      
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 Typenberprfung 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 endgltigen Programms nicht stimmt.

Imports in Ausdrcken verwenden
Ausfhrbar      
Es gibt keine Imports.

DRI                     
Imports k”nnen innerhalb von Ausdrcken 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 Ausdrcken kombiniert werden, 
vorausgesetzt, daá der komplexe Ausdruck vor dem Import angefhrt 
wird:
                move.l  3+(1<<Z„hler+5)+Import

GST                     
Imports k”nnen innerhalb von Ausdrcken benutzt werden, maximal zehn 
pro Ausdruck. Sie drfen miteinander nur addiert oder subtrahiert 
werden, k”nnen aber mit beliebig komplexen Ausdrcken kombiniert 
werden, vorausgesetzt, daá der komplexe Ausdruck vor dem Import 
angefhrt 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
Ausfhrbar      
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 
fr andere 68000er Rechner gedacht ist. Es darf mehr als ein ORG 
im Programm stehen, es wird aber kein "Padding" vorgenommen.

Ausfhrbar      
Diese Direktive sollte mit h”chster Vorsicht gehandhabt 
werden, da das erzeugte Programm wahrscheinlich nicht auf dem ST 
mit einem Doppelklick problemlos ausfhrbar 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       ausfhrbar
                1       GST linkbar
                2       DRI linkbar

DRI Debug
Normalerweise werden nur explizit geXDEFte Labels der Symboltabelle 
der linkbaren Datei beigefgt. 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 hinzugefgt. 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,  mssen Sie mit Rckw„rts-Verweisen an Imports vorsichtig 
sein. Innerhalb einer GST-Library sollten  >>high-level<<-Routinen 
zuerst kommen, >>low-level<<-Routinen zuletzt. Das folgende Beispiel 
wrde nicht fehlerfrei linken:

                MODULE  low_level
                XDEF            low_output
low_output
                ...
                MODULE  high_level
                XDEF            high_output
                XREF            low_output
high_output
                ...
Der Grund dafr 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 fr verschiedene Formate:

Hier folgen Beispiele, die die Unterschiede zwischen den einzelnen 
Formaten verdeutlichen.

Ausfhrbar
                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 gegenber 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. Fr Lattice-C Benutzer wrde 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 gekrzt. 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 fr 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 ntzlich, 
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 fr kleine Fehler als solche, die in einer Hochsprache 
geschrieben sind. Es ist auch durchaus m”glich, mit kleinen 
Fehlern den ganzen Rechner ¯abstrzen® 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 fr Schritt 
auszufhren, und die meisten Programmierfehler (wie Bus- oder 
Adreáfehler) ohne Schaden abzufangen. Da MonST symbolisch 
arbeitet, mssen 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 ntzlich 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) ausgefhrt 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 fr 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 fr 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 zurckzukehren. 
Wenn durch den Fehler wichtige Systemvariablen zerst”rt wurden, kann 
es ohne weiteres passieren, daá das System abstrzt. Es kann auch 
sein, daá das System von einer Exception direkt in eine andere ger„t 
und dadurch der ganze Bildschirm sich mit Bomben fllt.


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 fr 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 fr eine Menleiste 
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 abstrzen; 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 verfgbar.
Wenn man Alt-M drckt 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 drcken 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 fr ein TOS-Programm vorbereitet. Die oben erw„hnten Regeln 
bezglich 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 untersttzt zwei 
verschiedene Formate von Symbolen: das Standard-DRI-Format, wel-
ches maximal 8 Zeichen lange Symbole untersttzt, 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 
untersttzen auch das DRI-Format. Wir versuchen z.Zt. das HiSoft-
erweiterte-Format als zweiten Standard einzufhren; zum Zeitpunkt 
des Schreibens dieses Handbuchs untersttzt 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 dafr 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 untersttzt.
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 Zeilensprnge 
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 drcken Sie Return. Danach werden Sie nach einer Kommandozeile 
gefragt, die dem Programm bergeben werden soll. Wenn das Programm 
keine braucht, drcken 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 drcken 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 berflssig.
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 fr 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 drcken 
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 natrlich etwas 
gew”hnungsbedrftig, 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 ausgefhrt, es 
braucht nicht nach jedem Befehl Return zus„tzlich eingegeben werden. 
Ungltige 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 natrlich 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 
ntzliche 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 gefllt ist, mit Nullen zu l”schen und daraufhin 
wieder mit $FFFFFFFF zu fllen. Wenn dies geschehen ist, gibt das 
Programm die Kontrolle wieder an das Betriebssystem zurck.
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 fr 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 drcken, fragt MonST 
nach einem Dateinamen. Geben Sie "BEISPIEL" ein, die Extension .PRG 
wird automatisch hinzugefgt. Mit dieser Prozedur sind Sie am 
gleichen Punkt angelangt, als ob Sie in den Speicher assembliert 
und Alt-D gedrckt h„tten.
Sie sehen in Fenster 2 Ihr Programm in disassemblierter Form. Drcken 
Sie die Tab-Taste einmal, um Fenster 3 zum aktuellen Fenster zu machen. 
Dann drcken 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. Drcken Sie Alt-2, um das 
Disassemblierungsfenster wieder zum aktuellen Fenster zu machen.
Drcken Sie Ctrl-Y dreimal. Sie werden nach jeder Eingabe sehen, 
daá der Pfeil, der den PC-Stand anzeigt, einen Befehl weiterrckt. 
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 gefllt. Der dritte Befehl l„dt den Schleifenz„hler 
in das Register D1.
Drcken 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. Drcken Sie jetzt also Ctrl-A.
Wenn die Schleife zu Ende ist, sind Sie dazu bereit, die zweite Schleife, 
die wieder $FFFFFFFF in den Speicherbereich fllt, auszufhren. Drcken 
Sie jetzt Alt-3, um Fenster 3 zum aktuellen Fenster zu machen. Drcken 
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 fr Schritt durchlaufen 
wollen, benutzen wir einen Breakpoint, um zum Schluá zu kommen. Drcken 
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 drcken, ist das Programm fertig. Wenn Ihr 
Programm in den Speicher assembliert wurde, springt MonST direkt in 
den Editor zurck. Wenn nicht, meldet MonST "Programmende". Sie 
k”nnten jetzt ein weiteres Programm mit Ctrl-L laden. Wenn nicht, 
kommen Sie mit Ctrl-C zurck 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 ausfhrlich alle Funktionen, die MonST zu bieten hat.


4. 12 MonST - Referenzteil

4.12.1 Numerische Ausdrcke

MonST kann numerische Ausdrcke 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 fr 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.
Ausdrcke k”nnen auch Indirektionen beinhalten: die Zeichen ®{¯ und 
®}¯ werden dafr benutzt. Indirektion kann auf einer Byte-, Wort-, 
oder Langwortbasis angegeben werden, wenn das ®}¯ von einem Punkt 
und der gewnschten Gr”áe gefolgt wird; der Normalwert ist Langwort. 
Falls der Pointer ungltig ist, entweder weil der Speicher unlesbar 
oder ungerade (wenn Wort- oder LangwortgrӇe angegeben ist) ist, 
ist der gesamte Ausdruck ungltig.  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 fr 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 ausgefhrt 
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 drckt, bis das gewnschte Fenster zum aktuellen 
Fenster wird oder Alt zusammen mit der Nummer des gewnschten 
Fensters drckt.
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, drcken 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, mssen Sie den entsprechenden Speicher angeben, z.B. M2 
fr 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 drcken, werden die zwei 
Fenster wieder zusammengefgt.
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 fr 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 ausfhren, 
abschalten. Wenn Sie dies nicht tun, bemerkt MonST die 
Ver„nderungen nicht.
Wenn Sie einen Diskettenzugriff durchfhren, 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 zurckgelangen, 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 
Drcken der Tasten máte MonST eingreifen lassen. Diese Kombination 
hat keine Wirkung, wenn sie innerhalb von MonST gedrckt 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 fhren.

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 durchfhren. 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 fnf 
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 ausgefhrt 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 ausgefhrt 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 erfllt 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 ausgefhrt 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„tsgrnden 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 ausfhren
Mit diesem Befehl wird ein einfacher Breakpoint nach dem Befehl am 
PC gesetzt, das Programm l„uft weiter. Dieser Befehl ist haupts„chlich 
fr 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 mssen 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 fr fnf 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 fnf Eintr„ge im 
History-Speicher angezeigt werden. Sowohl alle Registerwerte 
werden angezeigt, als auch der n„chste Befehl, der ausgefhrt 
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 fr 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 mssen.
Wenn MonST vom Editor aus aufgerufen wurde, kehren Sie sofort nach 
Beendigung des Programmes in den Editor zurck, ohne Ctrl-C fr MonST 
drcken zu mssen.
Vorsicht: Es kann durchaus zum Absturz kommen, wenn Sie frhzeitig 
ein GEM Programm abbrechen, ohne daá z.B. die ®Virtual Workstation¯ 
geschlossen wurde.


4.16 Laden und Abspeichern

Ctrl-L  Ausfhrbares 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 
ausfhrbares 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 fr das 
Programm reservierten Speicher nicht zurckgibt. Wenn dies 
geschieht, mssen 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 gengend 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 fr diese Datei wird von GEMDOS angefordert. Es ist 
deshalb ratsam, die ASCII-Datei vor Ihrem Programm zu laden, damit 
garantiert gengend Speicher dafr 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 ausfhren

Ctrl-R  Zurck zum Programm / Laufenlassen
Hiermit wird das Programm mit voller Geschwindigkeit laufengelassen; 
es ist die bliche Methode dafr, das Programm nach einem Breakpoint 
weiterlaufen zu lassen.

Ctrl-Y / Ctrl-Z ®Single-Step¯
Hiermit wird der Maschinensprachebefehl am PC ausgefhrt. Ein Trap, 
Line-A oder Line-F Opcode wird als einzelner Befehl angesehen und 
als solcher ausgefhrt. 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 ausgefhrt 
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 ausgefhrt, 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 ausgefhrt 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 ausgefhrt 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 fr 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 Drcken beider Shift-Tasten 
abgebrochen werden. Sie k”nnen auch Shift-Alt-Help dazu verwenden, 
den Beobachtungsmodus anzuhalten. Diese Tastenkombination kann aber 
aus system-spezifischen Grnden 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 ausgefhrten 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 Ausfhrungsgeschwindigkeit stark verlangsamt.


4.18 Speicher durchsuchen

G       Speicher durchsuchen
Nach diesem Befehl erscheint "Suchen nach B/W/L/T/I?", wobei  die 
Krzel 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. fr 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 geprft.
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 Kontrollbergabe 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, mssen ununterbrochen ablaufen. Eine Trace-
Exception in solchem Code kann ohne weiteres zum Miálingen und 
auch zum Datenverlust fhren. Andererseits macht es Spaá dem AES 
dabei zuzusehen, wie es Mens 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 fr 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 berprft nicht, ob die Adressen gltig sind. Eine 
Kopie von oder zu einer nichtexistenten Speicherstelle wird MonST 
wahrscheinlich abstrzen lassen. Das gleiche gilt fr den reservierten 
Systemspeicherbereich.

W       Speicher fllen
Dieser Befehl fllt einen Speicherbereich mit dem angegebenen Wert. 
Die Parameter sind:
        <Anfang>,<Einschlieáliches_Ende>,<Fllbyte>
Die Warnung ber gltigen Speicher gilt auch fr 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 wrden. Ein 
Diskettenfehler oder Esc brechen die Ausgabe ab.

M       Adresse ver„ndern
Dieser Befehl ist aus Kompatibilit„tsgrnden zu MonST 1 beibehalten 
worden. Er entspricht Alt-A.

O       Auswerten
Dieser Befehl entspricht Alt-O und ist aus Kompatibilit„tsgrnden 
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 ntzlich 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 fr 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 zurckgegeben 
werden.
W„hrend der Installation von AMonST k”nnen Sie durch Drcken 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 zurckzugelangen, 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 erwnscht, 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 zurckgreifen 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 frh 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 Glck.

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 durchgefhrt 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 Glck!


4.23 Programme im Auto-Ordner

Wenn ein Programm im AUTO-Ordner abstrzt, 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 abstrzenden 
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 ausgefllt 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, 
mssen 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 fr den Anf„nger 
gedacht ist.
Zuerst halten Sie beide Shift-Tasten gedrckt, 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 ausgefhrt 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 ntzlich 
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 Rckkehradresse 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 geschtzten 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 fr 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 Ausfhrung 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 ausfhren
Ctrl-D                  BDOS-Breakpoint

Laden und Abspeichern

Ctrl-L                  Ausfhrbares Programm laden
B                       Bin„rdatei laden
S                       Bin„rdatei abspeichern
A                       ASCII-Datei laden

Programme ausfhren

Ctrl-R                  Zurck 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 fllen
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