4 MonST  Der symbolische Debugger


4.1 Einleitung

Programme, die in Maschinensprache geschrieben sind, sind wesentlich 
anflliger fr kleine Fehler als solche, die in einer Hochsprache 
geschrieben sind. Es ist auch durchaus mglich, mit kleinen 
Fehlern den ganzen Rechner abstrzen zu lassen. Es gibt die 
verschiedensten Arten von Fehler: triviale Fehler wie ein 
vergessenes Nullbyte am Ende einer Zeichenkette, 
Durchschnittsfehler wie ein falsches Ergebnis einer Rechenroutine 
bis him zum schweren Fehler, der mit einem spektakulren Absturz 
zutage kommt.
Um solche Fehler zu finden und zu korrigieren, gehrt zum Paket 
Devpac ST das Programm MonST. MonST ist ein sog. symbolischer 
Debugger und Disassembler. Er ermglicht es dem Programmierer, sich 
Programme und Speicher anzusehen, Programme Schritt fr Schritt 
auszufhren, und die meisten Programmierfehler (wie Bus- oder 
Adrefehler) ohne Schaden abzufangen. Da MonST symbolisch 
arbeitet, mssen Sie sich nicht mit langen Hex-Ziffern 
herumschlagen, sondern knnen 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 mglich, 
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 Mglichkeit bieten, Symbole im fertigen Programm zu 
hinterlassen. So knnen Sie genau erkennen, in welcher Prozedur 
Sie sich befinden, whrend 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 vollstndig 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 knnen 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 spter eingegangen.


4.2 Die Exceptions des 68OOO

MonST verwendet die Exceptions des 68000 um amok-gelaufene Programme 
zu stoppen und um Single-Steppen zu ermglichen. Es ist deshalb 
ganz ntzlich zu wissen, was normalerweise geschieht, wenn auf dem 
ST ein Exception passiert.

Es gibt verschiedene Sorten von Exceptions: die einen sind absichtliche, 
die anderen eindeutige Fehler. Wenn ein Exception passiert, werden 
auf dem SSP (Supervisor-Stack) bestimmte Daten hinterlassen, der Prozessor 
geht dann in den Supervisor-Modus ber, und springt zum sog. exception 
handler. Dies sind Maschinensprachebefehle, die bei einem Exception 
(und sonst nie) ausgefhrt werden. Wenn MonST geladen ist, fngt 
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       Adrefehler                        Bomben  abgefangen
        4       Illegaler Befehl                   Bomben  abgefangen
        5       Teilung durch Null                 Bomben  abgefangen
        6       CHK                                Bomben  abgefangen
        7       TRAPV                              Bomben  abgefangen
        8       Privilegverletzung                 Bomben  abgefangen
        9       Trace               Bomben         wird fr das Single-
                                                   Steppen verwendet
        10      line 1010 emulator  line A Aufruf  line A Aufruf                                                        Aufruf
        11      line 1111 emulator  TOS intern     TOS intern
        32      trap #0                            Bomben  abgefangen
        33      trap #1 GEMDOS Aufruf              GEMDOS Aufruf
        34      trap #2 AES/VDI Aufruf             AES/VDI Aufruf
        35-44   trap #3-trap #12                   Bomben  abgefangen
        45      trap #13        XBIOS Aufruf       XBIOS Aufruf
        46      trap #14        BIOS Aufruf        BIOS Aufruf
        47      trap #15        Bomben  abgefangen

Die genauen Ursachen dieser Exceptions werden am Ende dieses Abschnitts 
genauer erklrt, um aber zusammenzufassen:
Die Exceptions 2 bis 8 sind Programmierfehler und werden von MonST 
abgefangen.
Exception 9 kann unter Umstnden durch einen Programmierfehler hervorgerufen 
werden, wird aber normalerweise von MonST fr das Single-Steppen 
benutzt.
Die Exceptions 10, 11, 33, 34, 45 und 46 werden vom Betriebssystem 
gebraucht und werden von MonST nicht bearbeitet.
Die restlichen Exceptions werden alle von MonST abgefangen; sie knnen 
aber durchaus von einem Programm neu definiert und verwendet werden.
Der Eintrag Bomben in der obigen Tabelle bedeutet, da das Betriebssystem 
des ST versucht, mit dem Fehler fertig zu werden und einige Bomben 
(bzw. kleine Atompilze) auf dem Bildschirm malt (immer so viel, wie 
die Exception-Nummer, z.B. zwei Bomben bei einem Busfehler), und 
dann versucht, das Programm abzubrechen und ins Desktop zurckzukehren. 
Wenn durch den Fehler wichtige Systemvariablen zerstrt wurden, kann 
es ohne weiteres passieren, da das System abstrzt. Es kann auch 
sein, da das System von einer Exception direkt in eine andere gert 
und dadurch der ganze Bildschirm sich mit Bomben fllt.


4.3 Speicherbelegung

Die interaktiven Versionen von MonST sind zum gleichen Zeitpunkt 
im Speicher wie das zu debuggende Programm, d.h. MonST wird geladen, 
es wird  nach einem Programmnamen gefragt, und dann das angegebene 
Programm, gegebenenfalls mit Symbolen, geladen. 

MonST ist zum Zeitpunkt der Entstehung dieses Schreibens ca. 
23Kbyte gro, es bentigt noch zustzlich etwa 32Kbyte an 
Arbeitsspeicher. Dies mag etwas viel erscheinen, MonST braucht 
aber diesen Speicher, um immer eine Bildschirmseite fr sich zu 
behalten.

Die drei mitgelieferten MonST-Versionen heien:

        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 erlutert, ist aber den ersten zwei Versionen 
sehr hnlich.


4.4 MonST starten

4.4.1 Vom Desktop aus

Die beiden interaktiven Versionen von MonST sind bis auf die Dateinamen 
identisch. Die .PRG-Version sollte mit GEM-Programmen verwendet werden, 
die .TOS-Version sollte mit TOS-Programmen benutzt werden. GEM- und 
TOS-Programme werden vom Betriebssystem anders gestartet. Weil MonST 
das zu debuggende Programm startet, mu es selbst auch richtig gestartet 
werden.
Ein GEM-Programm hat einen Hintergrund, Platz fr eine Menleiste 
und braucht einen Mauszeiger, TOS-Programme brauchen aber einen 
blinkenden Cursor, keine Maus und einen leeren Bildschirm. Sie 
knnen 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 knnen groe Probleme auftauchen und unter 
Umstnden kann das System abstrzen; dies sollte auf jeden Fall 
vermieden werden.

4.4.2 Vom Editor aus

Wenn GenST gestartet wird, sucht es automatisch nach MONST2.PRG und 
ldt MonST (wenn diese Option nicht anders gewhlt wurde), falls er 
vorhanden ist. Der Debugger ist sofort vom Editor aus verfgbar.
Wenn man Alt-M drckt oder im Programm-Men >>MonST<< whlt, wird MonST, 
wie oben beschrieben, aufgerufen, nur wesentlich schneller, da es 
sich schon im Speicher befindet.
Man kann aber auch Alt-D drcken oder >>Debuggen<< vom Programm- Men 
whlen. MonST wird so auch aufgerufen, hat aber jetzt zustzlich 
das zuletzt in den Speicher assemblierte Programm bereit, ggf. auch 
mit Symbolen.
Der anfngliche Bildschirmmodus wird durch den GEM-Eintrag im 
Programm-Men gewhlt. Wenn der Eintrag abgehakt ist, wird die 
GEM-Bildschirminitialisation vorgenommen, sonst wird der 
Bildschirm fr ein TOS-Programm vorbereitet. Die oben erwhnten Regeln 
bezglich falscher Bildschirmmodi treffen  hier auch zu.


4.5 Symbolisch Debuggen

Ein Hauptmerkmal von MonST ist die Fhigkeit, die Originalsymbole 
des Programms beim Debuggen zu benutzen. MonST untersttzt zwei 
verschiedene Formate von Symbolen: das Standard-DRI-Format, wel-
ches maximal 8 Zeichen lange Symbole untersttzt, und das HiSoft-
erweiterte Format, welches eine Symbollnge von maximal 22 
Zeichen erlaubt. Sowohl GenST als auch LinkST knnen beide 
Formate produzieren; viele andere Hochsprachencompiler 
untersttzen auch das DRI-Format. Wir versuchen z.Zt. das HiSoft-
erweiterte-Format als zweiten Standard einzufhren; zum Zeitpunkt 
des Schreibens dieses Handbuchs untersttzt nur der FTL-Modula-2-
Compiler auch das HiSoft-Format.


4.6 Dialog- und Alertboxen

MonST verwendet viele Dialog- und Alertboxen, die den GEM- Boxen 
entsprechen; es sind aber keine. Der Grund dafr ist einfach: MonST 
mu vom Betriebssystem so unabhngig wie mglich sein; nur so ist 
es gewhrleistet, da MonST auch unter den schwersten Bedingungen 
problemlos funktioniert. Auerdem ist auf die Maus in MonST kein 
Zugriff vorhanden, da es richtige GEM-Boxen und Buttons nicht untersttzt.
Eine MonST-Dialogbox erkennt man daran, da "ESC um abzubrechen" ber 
dem linken oberen Rand steht. In der Box steht der Mitteilungstext 
und (normalerweise) eine leere Zeile, in  der sich der  Cursor befindet. 
Man kann zu jedem Zeitpunkt mit Esc die Dialogbox abbrechen. Die 
Eingabe erfolgt ber die Tastatur und die Cursortasten. Die Backspace- 
und Del-Tasten knnen zum Editieren der eingetippten Zeile benutzt 
werden, Clr lscht 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 enthlt, wird Return 
so lange ignoriert, bis die Zeile akzeptabel ist. Dialogboxen, in 
die mehr als eine Zeile eingegeben wird, lassen keine Zeilensprnge 
durch die Cursor-oben- und Cursor-unten-Tasten zu.
Eine MonST-Alertbox ist eine Box, die eine Meldung (meistens eine 
Fehlermeldung) anzeigt und auf Return oder Esc wartet.


4.7 Die Anzeige am Anfang

Wenn Sie MonST ber Alt-M vom Editor oder vom Desktop aus aufgerufen 
haben, werden Sie zuerst in einer Dialogbox nach einem Programmnamen 
gefragt. Wenn Sie ein Programm laden wollen, geben Sie den Programmnamen 
ein (die Extension ist automatisch .PRG, wenn nicht anders angegeben) 
und drcken Sie Return. Danach werden Sie nach einer Kommandozeile 
gefragt, die dem Programm bergeben werden soll. Wenn das Programm 
keine braucht, drcken Sie einfach wieder Return, und das Programm 
wird geladen. Wenn Sie kein Programm debuggen wollen, z.B. nur den 
Speicher des Rechners bearbeiten wollen, dann drcken Sie Esc, um 
direkt in MonST zu gelangen.


4.8 Die MonST-Anzeige

Das Anzeigenprinzip von MonST ist dem von alten Grorechnern 
nachempfunden: damals hatte man immer kleine flackernde Lmpchen 
an der Vorderseite des Rechners beobachten knnen 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 Lmpchen sind also berflssig.
Die MonST-Anzeige beim Programmstart besteht aus vier Fenstern; 
in niedriger Auflsung 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 enthlt keine Zahl und 
wird hauptschlich fr Mitteilungen verwendet.


4.9 Benutzung der Fenster

MonST hat immer ein aktuelles Fenster. Dieses Fenster erkennt man 
daran, da der Fenstertitel wei auf schwarz, statt umgekehrt, ist. 
Die Tab-Taste kann dazu verwendet werden, durch die einzelnen Fenster 
zu gehen, man kann aber auch Alt zusammen mit der Fensternummer drcken 
um ein bestimmtes Fenster zum aktuellen Fenster zu machen. Das kleine 
Fenster unten kann nie das aktuelle Fenster werden, da es nur zur 
Anzeige von Mitteilungen gedacht ist.


4.1O Eingabe von Befehlen

Der MonST-Befehlssatz basiert auf einzelnen Tasten, um ein schnelles 
Arbeiten zu ermglichen. Dies ist zu Anfang natrlich etwas 
gewhnungsbedrftig, 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 knnen gro- oder kleingeschrieben eingegeben werden. Alle 
Befehle, die unter Umstnden katastrophale Auswirkungen haben knnen, 
erfordern die Control-Taste. Befehle werden sofort ausgefhrt, es 
braucht nicht nach jedem Befehl Return zustzlich eingegeben werden. 
Ungltige Befehle werden ignoriert. Die Fenster, deren Daten sich 
verndert haben knnten, werden auch nach jedem Befehl auf den neuesten 
Stand gebracht.
MonST ist ein sehr funktionsstarkes und manchmal komplex erscheinendes 
Programm. Wir sehen natrlich ein, da es unwahrscheinlich ist, 
da jeder Benutzer jeden einzelnen Befehl auf Anhieb gebrauchen wird. 
Deshalb ist dieses Kapitel in zwei weitere Teile gegliedert: einmal 
eine Einleitung in die Benutzung MonSTs und darauf folgend einen 
vollstndigen Referenzteil. Es ist ohne weiteres mglich, da 
Anfnger und MonST-Neulinge effektiv den Debugger benutzen, auch 
wenn sie nur die Bedienungsanleitung gelesen haben. Lassen Sie 
sich aber nicht vom Referenzteil abschrecken: er enthlt sehr 
ntzliche und wichtige Informationen.


4.11 MonST - eine Probefahrt

Es ist nicht unbedingt notwendig, jedes kleine Detail von MonST zu 
kennnen, um den Debugger fahren zu knnen. In diesem Teil werden 
anhand eines kleinen Beispiels die wichtigsten Funktionen MonSTs 
erlutert.
In unserem Beispiel geben Sie das folgende kleine Programm in den 
Editor ein:

Gre   equ     20
        section text
        moveq   #0,d0
        lea     Ende(pc),a0
        moveq   #Gre-1,d1
Schleife1       move.l  d0,(a0)+
        dbf     d1,Schleife1
        moveq   #-1,d0
        lea     Ende(pc),a0
        moveq   #Gre-1,d1
Schleife2       move.l  d0,(a0)+
        dbf     d1,Schleife2
Schlu  clr.w   -(sp)
        trap    #1
        section data
Ende    dcb.l   Gre,-1

Das Programm tut nichts anderes als den Bereich von 80 Byte, der mit 
dem Hex-Wert $FFFFFFFF gefllt ist, mit Nullen zu lschen und daraufhin 
wieder mit $FFFFFFFF zu fllen. Wenn dies geschehen ist, gibt das 
Programm die Kontrolle wieder an das Betriebssystem zurck.
Assemblieren Sie das Programm in den Speicher und starten Sie MonST 
mit Alt-D.
Sie knnen auch das Programm auf Diskette assemblieren: speichern 
Sie die Quelltextdatei unter dem Namen BEISPIEL.S ab. Dann whlen 
Sie als Ziel fr den Assembler "Diskette" und "erweiterten 
Debug"; wenn er fertig ist, mten Sie die Datei BEISPIEL.PRG auf 
Ihrer Diskette finden. Wenn Sie dann Alt-M drcken, fragt MonST 
nach einem Dateinamen. Geben Sie "BEISPIEL" ein, die Extension .PRG 
wird automatisch hinzugefgt. Mit dieser Prozedur sind Sie am 
gleichen Punkt angelangt, als ob Sie in den Speicher assembliert 
und Alt-D gedrckt htten.
Sie sehen in Fenster 2 Ihr Programm in disassemblierter Form. Drcken 
Sie die Tab-Taste einmal, um Fenster 3 zum aktuellen Fenster zu machen. 
Dann drcken Sie Alt-L und geben a0 ein. Sie haben hiermit das 
Fenster 3 an das Adreregister A0 gebunden. Die Bedeutung dieser 
Funktion wird spter klar. Drcken Sie Alt-2, um das 
Disassemblierungsfenster wieder zum aktuellen Fenster zu machen.
Drcken Sie Ctrl-Y dreimal. Sie werden nach jeder Eingabe sehen, 
da der Pfeil, der den PC-Stand anzeigt, einen Befehl weiterrckt. 
Wenn Sie nach dem ersten Ctrl-Y  ins Registerfenster schauen, werden 
Sie sehen, da der erste Befehl den Wert 0 in das Datenregister D0 
gesetzt hat (man sollte nie davon ausgehen, da ein Register einen 
bestimmten Wert hat; es kann sein, da D0 schon 0 ist, dies ist aber 
von GEMDOS abhngig und deshalb nicht unbedingt zutreffend). Das 
zweite Ctrl-Y ldt die Adresse von Ende in das Adreregister A0. 
Das Fenster 3, welches Sie an A0 gebunden haben, zeigt jetzt auf 
den Speicherbereich, der "Ende" folgt. Wie Sie sehen, ist der Bereich 
mit $FFFFFFFF gefllt. Der dritte Befehl ldt den Schleifenzhler 
in das Register D1.
Drcken Sie Ctrl-Y erneut. Sie werden sehen, da sich im Registerfenster 
der Wert von A0 um vier erhht hat, ebenso die Startadresse von 
Fenster 3. Ein Fenster an ein Register binden heit 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 lstige Durchlaufen der Schleife, indem 
wir ein Breakpoint nach dem DBF-Befehl sezten, d.h. nachdem die Schleife 
zu Ende ist. Drcken Sie jetzt also Ctrl-A.
Wenn die Schleife zu Ende ist, sind Sie dazu bereit, die zweite Schleife, 
die wieder $FFFFFFFF in den Speicherbereich fllt, auszufhren. Drcken 
Sie jetzt Alt-3, um Fenster 3 zum aktuellen Fenster zu machen. Drcken 
Sie wieder Alt-L und geben Sie als Binde-Register diesmal m2 ein. 
Sie knnen nmlich ein Fenster an ein anderes Fenster binden. Die 
Startadressen der einzelnen Fenster sind in Speichern, die wie Register 
behandelt werden knnen, 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 nchsten Befehl stehen; der Unterschied ist 
aber, da im Fenster 3 die Befehle als Hex-Zahlen ausgegeben 
werden und nicht disassembliert sind. Mit Alt-2 wird wieder 
Fenster 2 zum aktuellen Fenster.
Da wir die zweite Schleife auch nicht Schritt fr Schritt durchlaufen 
wollen, benutzen wir einen Breakpoint, um zum Schlu zu kommen. Drcken 
Sie Alt-B und geben Sie Schlu, den Namen des Symbols, ein. Sie werden 
rechts neben dem Befehl, der an der Adresse von Schlu0 steht, [1] 
sehen. Dies bedeutet, da ein Breakpoint mit Wert 1 am Schlu gesetzt 
wurde. Dann benutzen wir Ctrl-R um das Programm laufen zu lassen. 
Wenn die Schleife fertig ist, hlt das Programm an, und zwar am Schlu, 
wie wir es angegeben haben.
Wenn Sie zweimal Ctrl-Y drcken, ist das Programm fertig. Wenn Ihr 
Programm in den Speicher assembliert wurde, springt MonST direkt in 
den Editor zurck. Wenn nicht, meldet MonST "Programmende". Sie 
knnten jetzt ein weiteres Programm mit Ctrl-L laden. Wenn nicht, 
kommen Sie mit Ctrl-C zurck zum Editor.
Sie haben soeben MonST fahren gelernt. Sie knnen jetzt mit Einzelschritten, 
einfachen Breakpoints und  Fenstern umgehen. Wenn Sie den ersten 
Teil des Kapitels verstanden haben, lesen Sie im Referenzteil weiter. 
Er beschreibt ausfhrlich alle Funktionen, die MonST zu bieten hat.


4. 12 MonST - Referenzteil

4.12.1 Numerische Ausdrcke

MonST kann numerische Ausdrcke auswerten, hnlich wie GenST. Der 
Hauptunterschied zu GenST liegt darin, da0 MonSTs normale Zahlenbasis 
in Hex-Code ist, dezimalen Zahlen mu ein \-Zeichen (kein # wie 
in Version 1!) vorangesetzt werden. Es gibt keine Ausdruckstypen 
(absolut oder relativ), das *-Zeichen wird nur fr die Multiplikation 
verwendet.
Symbole knnen verwendet werden, die normalerweise case-sensitiv 
sind, d.h. da ein Unterschied zwischen kleinen und groen Buchstaben 
gemacht wird. Sie haben eine Signifikanz von 8 bis 22 Zeichen (je 
nach Symbolformat). Diese Standardeinstellungen knnen mit 
"Voreinstellungen" verndert 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, abhngig vom Wert des Status-Registers.
Es gibt 10 Speicher, M0 bis M9, hnlich wie bei Taschenrechnern. 
Diese Speicher knnen, 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, 
verndert sich auch die Anfangsadresse dieses Fensters.
Vorsicht: Weisen Sie nie M4 einen neuen Wert zu, wenn Fenster 4 als 
Source-Fenster benutzt wird.
Ausdrcke knnen auch Indirektionen beinhalten: die Zeichen { und 
} werden dafr benutzt. Indirektion kann auf einer Byte-, Wort-, 
oder Langwortbasis angegeben werden, wenn das } von einem Punkt 
und der gewnschten Gre gefolgt wird; der Normalwert ist Langwort. 
Falls der Pointer ungltig ist, entweder weil der Speicher unlesbar 
oder ungerade (wenn Wort- oder Langwortgre angegeben ist) ist, 
ist der gesamte Ausdruck ungltig.  Z.B. wird der Ausdruck

        {Daten_Anfang+10}.w

das Wort, welches an der Adresse Daten_Anfang+10 steht, liefern. 
Indirektion kann auf gleiche Art wie normale Klammern verschachtelt 
werden.

4.12.2 Fenstertypen

Es gibt vier verschiedene Fenstertypen. Die erlaubten Fenstertypen 
sind wie folgt:

        Fensternummer   Erlaubte Typen
                1       Registerfenster
                2       Disassemblierungsfenster
                3       Speicher
                4       Disassemblierung, Speicher                               oder 
                        Source
                5       Speicher

Registerfenster

In einem Registerfenster werden die Inhalte der Datenregister in 
Hex angezeigt, zustzlich der ASCII-Wert des untersten Bytes und die 
Anzeige (in Hex) der ersten acht Byte, auf die der Registerinhalt 
zeigt. Die Adreregister 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. 
Zustzlich 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 Adreregister 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 Ursprungsadremodus ist der wie  im ersten Beispiel, die Zieladresse 
ist dagegen $2AC08, die z.Zt. $FFFF enthlt. Beachten Sie, da die 
Anzeige immer so gro ist wie gerade ntig. MOVEM-Daten werden als 
Quad-Worte (64 Bit)  angezeigt. Wenn Prdekrement im Adressierungsmodus 
verwendet wird, wird dies bei der Adreberechnung mit in Betracht 
gezogen.
In niedriger Auflsung werden keine Hex-Daten fr die Datenregister 
und nur vier Byte als Daten bei Adreregistern angezeigt. Es kann 
auch in niedriger Auflsung vorkommen, da die Bildschirmbreite nicht 
gro genug ist, um eine komplexe Zeile (wie das zweite Beispiel) 
anzuzeigen.

Disassemblierungs-Fenster

In einem Disassemblierungs-Fenster wird Speicherinhalt in 
disassemblierter Form angezeigt. Ganz links auf einer Zeile wird 
die Adresse angezeigt, dann ggf. das Symbol an dieser Adresse, 
daraufhin der Befehl an dieser Adresse. Falls an dieser Adresse 
ein Breakpoint gesetzt ist, wird dessen Typ in eckigen 
Klammern, [und ], nach dem Befehl angezeigt. Bei Stop-
Breakpoints wird angezeigt, wie oft dieser Befehl noch ausgefhrt 
werden mu, bis der Breakpoint aktiv wird und das Programm 
stoppt. Bei einem Breakpoint mit einer Bedingung enthalten die 
eckigen Klammern ein Fragezeichen, gefolgt von der Bedingung. Bei 
Zhler-Breakpoints enthalten die Klammern ein Gleichheitszeichen 
und den Zhlerwert. 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 
grogeschrieben, 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 Auflsung ersetzen Symbole die Adresse und werden nur 
bis zu einer maximalen Lnge 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 hngt 
von der Breite des Fensters ab und kann maximal 16 Byte betragen.

Source-Fenster

Sie knnen 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 gewhlt werden, indem man entweder 
die Tab-Taste so oft drckt, bis das gewnschte Fenster zum aktuellen 
Fenster wird oder Alt zusammen mit der Nummer des gewnschten 
Fensters drckt.
Die meisten Fenster-Befehle funktionieren in allen Fenstern unabhngig 
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 
spter genauer beschrieben.

Alt-E   Editieren
In einem Speicherfenster kann man mit diesem Befehl im Speicher 
in Hex und ASCII editieren. Hex-Zahlen knnen mit den Tasten 0-9 
und A-F eingegeben werden. Die Cursor-Tasten knnen dazu benutzt 
werden, den Cursor im Fenster zu bewegen. Mit der Tab-Taste knnen 
Sie zwischen dem Hex- und dem ASCII-Editiermodus hin- und herschalten. 
Der ASCII-Modus schreibt den ASCII-Wert des Tastendrucks in den 
Speicher. Um den Editiermodus zu verlassen, drcken Sie die Esc-Taste. 

Im Registerfenster bewirkt Alt-E das gleiche wie Alt-R, nmlich 
Register setzen.
Im Source-Fenster kann mit Alt-E der Tab-Abstand zwischen 4 und 
8 gewhlt werden.

Alt-F   Fontgre
Dieser Befehl verndert die Fontgre im aktuellen Fenster. In hoher 
Auflsung wird zwischen 16 und 8 Pixel groen Fonts gewechselt; in 
Farbe wird zwischen 8 und 6 Pixel groen Fonts gewechselt.
Wenn die Fontgre im Register-Fenster verndert wird, werden die 
Gren der anderen Fenster neu berechnet, um sie so gro wie mglich 
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 verndert. Um eine 
Bindung zu lschen, geben Sie in die  Dialogbox nichts ein. Fenster 
2 ist standardmig an den PC gebunden. Um ein Fenster an ein anderes 
zu binden, mssen Sie den entsprechenden Speicher angeben, z.B. M2 
fr Fenster 2.

Alt-O   Auswerten
Eine Dialogbox erscheint, in der Sie einen Ausdruck eingeben. Dieser 
wird ausgewertet und in Hex, Dezimal und ggf. als Symbol ausgegeben.

Alt-P   Drucker Dump
Der Inhalt des aktuellen Fensters wird auf dem Drucker ausgegeben. 
Dieser Befehl kann mit Esc abgebrochen werden.

Alt-R   Register setzen
Mit diesem Befehl kann jedes Register gesetzt werden. Das Register 
mu angegeben werden, gefolgt von einem Gleichheitszeichen und dem 
Ausdruck des neuen Registerwerts. Zum Beispiel:

        A3=A2+4

setzt das Register A3 auf den Wert vom Register A2 mit vier 
addiert. Sie knnen 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 
unabhngig. Wenn Sie Alt-S ein zweites Mal drcken, werden die zwei 
Fenster wieder zusammengefgt.
Dieser Befehl wird in niedriger Auflsung ignoriert.

Alt-T   Typ verndern
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 Bildschirmgre 
gebracht. Mit Esc oder einem erneuten Alt-Z wird das Fenster wieder 
auf Normalgre gebracht. Alt-Befehle sind im Zoom-Modus weiterhin 
benutzbar.

Cursor-Tasten
Die Cursor-Tasten werden in Verbindung mit dem aktuellen Fenster 
benutzt. Ihre Wirkung hngt vom Fenstertyp ab.
In einem Speicher-Fenster verndern alle vier Cursor-Tasten die 
Startadresse des Fensters. Mit Shift-oben und Shift-unten knnen 
Sie seitenweise hoch und runter "blttern". In einem 
Disassemblierungs-Fenster verndern Cursor-oben- und Curso-unten-
Tasten die Startadresse des Fensters um jeweils eine Instruktion. 
Cursor-links und Cursor-rechts verndern die Startadresse jeweils um 
ein Byte. Die Shift-Tasten knnen wiederum fr das seitenweise 
Blttern benutzt werden.
Im Source-Fenster verndert Cursor-oben und Cursor-unten die 
Startadresse des Fensters um eine Zeile, die Shift-Tasten 
verndern 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 mglich, den 
Debugger in einer anderen Auflsung wie das zu debuggende Programm 
zu betreiben; dies geht aber nur mit einem Farbmonitor.

V       Anderer Bildschirm
Dieser Befehl schaltet bis zum nchsten Tastendruck auf den Bildschirm 
des zu debuggenden Programms.

Ctrl-O  Andere Auflsung
Dieser Befehl schaltet MonSTs Anzeige zwischen niedriger und mittlerer 
Auflsung hin und her. Alle Fenster werden neu initialisiert und 
auf die Standardgren 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 
mglich, den Bildschirmspeicher Ihres Programms anzusehen; dies ist 
bei Grafikprogramm ideal.
Vorsicht: Wenn Ihr Programm die Bildschirmauflsung, -position 
oder die Farbpalette verndert, ob mit dem XBIOS oder direkt per 
Hardware, ist es wichtig, da Sie die Bildschirmumschaltung bei 
den Voreinstellungen, whrend Sie diesen Code ausfhren, 
abschalten. Wenn Sie dies nicht tun, bemerkt MonST die 
Vernderungen nicht.
Wenn Sie einen Diskettenzugriff durchfhren, schaltet der 
Bildschirm auf den Bildschirm Ihres Programms um. Dies geschieht, 
um eine mglicherweise erscheinende GEM-Alarmbox (z.B. bei einem 
Diskettenfehler) sofort sichtbar werden zu lassen, Sie knnen 
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 
ausgelst. Wenn Sie in MonST zurckgelangen, kann es sein, da 
sich der PC im Programm befindet oder die Unterbrechung im ROM 
stattfindet (was bei Programmen der Fall ist, die ausgiebigen 
Gebrauch vom ROM machen) oder im Line-F- oder dem TRAP-Handler. 
Wenn Sie sich nicht im Ihrem Programm befinden, raten wir Ihnen, 
ein Breakpoint an einer entsprechenden Stelle in Ihr Programm zu 
setzen und mit Ctrl-R das System weiterlaufen zu lassen.
Alt-Help ohne Shift lst einen Ausdruck des Bildschirms von  Ihrem 
Programm aus. Wenn Sie versehentlich das Shift vergessen haben, knnen 
Sie den Druck mit nochmaligem Alt-Help abbrechen.
Es kann sein, da diese Tastenkombination ignoriert wird, nochmaliges 
Drcken der Tasten mte MonST eingreifen lassen. Diese Kombination 
hat keine Wirkung, wenn sie innerhalb von MonST gedrckt wird.
Vorsicht: Ein Programm sollte nie mit Ctrl-C abgebrochen werden, nachdem 
es innerhalb des ROMs unterbrochen wurde. Dies kann sehr leicht zu 
einem Absturz fhren.

4.14.2 Ctrl-S
Eine Anweisung kann durch Ctrl-S abgebrochen werden. Dieser 
Vorgang ist gleichbedeutend damit, da der PC x Wrter nach vorne 
gesetzt wird. Dieser Befehl ist dann angebracht, wenn eine 
Anweisung seltsame Ergebnisse erzeugen knnte.

4.14.3 Reset
Whrend Sie sich im Debugger befinden, knnen Sie mit Ctrl-Alt-
Num.Punkt einen Reset durchfhren. Es wird keine Warnung 
generiert.

4.14.4 Breakpoints

Breakpoints erlauben es Ihnen, Ihr Programm an von Ihnen 
bestimmten Punkten zu unterbrechen. MonST erlaubt maximal acht 
gleichzeitig gesetzte Breakpoints, von denen jeder einer der fnf 
Breakpoint-Typen sein kann. Wenn ein Breakpoint erreicht wird, 
trifft MonST die Entscheidung, ob das Programm angehalten wird 
oder weiter abluft. Diese Entscheidung hngt von den Typen des 
Breakpoints ab.

Einfache Breakpoints
MonST hlt das Programm bei Erreichen der Breakpoints an und lscht 
dann den Breakpoint.

Stop Breakpoints
Diese Art unterbricht das Programm an der Stelle, an der ein bestimmter 
Befehl an der Adresse des Breakpoints zum n-ten Male ausgefhrt wurde. 
Ein einfacher Breakpoint ist eigentlich ein Stop-Breakpoint mit dem 
Wert 1.

Zhler-Breakpoints
Diese Art ist nur ein Zhler. Jedesmal, wenn der Befehl an der Adresse 
des Breakpoints ausgefhrt wird, erhht sich der Zhler um eins, und 
das Programm luft weiter.

Permanente Breakpoints
Dieser Typ ist den einfachen Breakpoints hnlich, bis auf den 
Unterschied, da sie nie gelscht werden. Jedesmal, wenn dieser 
Breakpoint erreicht wird, bernimmt MonST die Kontrolle.

Bedingte Breakpoints
Diese Art von Breakpoint erlaubt es Ihnen, Ihr Programm nur dann 
anzuhalten, wenn eine bestimmte Bedingung erfllt ist. Jeder bedingte 
Breakpoint hat einen Ausdruck; dieser wird jedesmal, wenn der Breakpoint 
erreicht wird, ausgewertet. Wenn der Ausdruck wahr (d.h. ungleich 
Null) ist, wird der Programmablauf unterbrochen.

Alt-B   Breakpoint setzen
Dies ist ein Fenster-Befehl; er erlaubt das Setzen oder Lschen von 
Breakpoints zu jeder Zeit. Die eingegebene Zeile mu je nach Breakpoint-Typ 
eines der folgenden Formate haben:

<Adresse>
setzt einen einfachen Breakpoint.
<Adresse>,<Ausdruck>
setzt einen Stop-Breakpoint an der angegebenen Adresse, der das Programm 
stoppt, nachdem <Ausdruck> eine bestimmte Anzahl oft ausgefhrt wurde.
<Adresse>,=
setzt einen Zhler Breakpoint. Der Anfangswert des Zhlers ist Null
<Adresse>,*
setzt einen permanenten Breakpoint.
<Adresse>,?<Ausdruck>
setzt einen bedingten Breakpoint, der vom <Ausdruck> abhngig ist.
<Adresse>,-
lscht jede Art von Breakpoint an der angegebenen <Adresse>.
Breakpoints knnen nicht an ungeraden und unlesbaren Adressen, und 
im ROM gesetzt werden. ROM-Breakpoints knnen 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 spter beschrieben wird, behalten.

Help    Breakpoint- und Segmentanzeige
Dieser Befehl zeigt die Adressen der TEXT, DATA und BSS-Segmente 
und deren Lngen, zusammen mit smtlichen gesetzten Breakpoints, 
an. Alt-Befehle knnen hier auch benutzt werden.

Ctrl-B  Breakpoint setzen
Dieser Befehl ist hauptschlich aus Kompatibilittsgrnden 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 gelscht.

U       Go Until
Dieser Befehl fragt in einer Dialogbox nach einer Adresse, an der 
dann ein einfacher Breakpoint gesetzt wird. Das Programm luft danach 
sofort weiter ab.

Ctrl-K  Kill Breakpoints
Alle gesetzten Breakpoints werden gelscht.

Ctrl-A  Breakpoint setzen und ausfhren
Mit diesem Befehl wird ein einfacher Breakpoint nach dem Befehl am 
PC gesetzt, das Programm luft weiter. Dieser Befehl ist hauptschlich 
fr DBF-Schleifen gedacht, die man nicht immer wieder durcharbeiten 
will, sondern deren Ergebnis man gleich sehen will.

Ctrl-D  BDOS Breakpoint
Hiermit wird ein Breakpoint auf den nchsten BDOS-Aufruf, dessen 
Funktionsnummer Sie angeben, gesetzt. Wenn Sie einen bestehenden 
BDOS-Breakpoint lschen wollen, geben Sie eine leere Zeile ein. BDOS 
Breakpoints mssen gelscht werden, um deaktiviert zu werden.

History
MonST hat einen sog. History-Speicher, in dem der Prozessorstatus 
nach jeder Exception behalten wird.
Die hufigste 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 enthlt Platz fr fnf Eintrge. Wenn er voll ist, wird 
jeweils der lteste Eintrag gelscht, damit ein neuer aufgenommen 
werden kann.

H       History-Speicher-Anzeige
Ein Fenster wird geffnet, in dem die maximal fnf Eintrge im 
History-Speicher angezeigt werden. Sowohl alle Registerwerte 
werden angezeigt, als auch der nchste Befehl, der ausgefhrt 
wird.
Wenn auf einen Befehl im History-Speicher ein Breakpoint gesetzt 
ist, zeigt der Wert in den eckigen Klammern den Wert des Breakpoints 
zur Zeit der Anzeige und nicht zum Zeitpunkt des Eintrags in den 
Speicher.


4.15 MonST verlassen

Ctrl-C  Abbrechen
Dieser Befehl verursacht einen Programmende-Trap fr den aktuellen 
GEMDOS Task. Wenn ein Programm mit MonST debuggt wird, wird zuerst 
das Programm mit Ctrl-C abgebrochen, die Meldung Programmende erscheint 
unten im Mitteilungsfenster; durch nochmaliges Ctrl-C wird MonST 
verlassen. Sie knnen aber auch ein anderes Programm laden, ohne MonST 
verlassen zu mssen.
Wenn MonST vom Editor aus aufgerufen wurde, kehren Sie sofort nach 
Beendigung des Programmes in den Editor zurck, ohne Ctrl-C fr MonST 
drcken zu mssen.
Vorsicht: Es kann durchaus zum Absturz kommen, wenn Sie frhzeitig 
ein GEM Programm abbrechen, ohne da z.B. die Virtual Workstation 
geschlossen wurde.


4.16 Laden und Abspeichern

Ctrl-L  Ausfhrbares Programm laden
Mit diesem Befehl wird ein Programm zum Debuggen geladen. Sie werden 
nach dem Programmnamen (wenn nicht anders angegeben, wird .PRG als 
Extension angenommen) und dann nach der Kommandozeile gefragt, die 
dem Programm bergeben werden soll. Wenn MonST schon ein Programm 
geladen hat, mu dieses Programm erst beendet werden, bevor ein neues 
geladen werden kann.
Die Datei, die geladen werden soll, mu ein von GEMDOS 
ausfhrbares Programm sein. Wenn dies nicht der Fall ist, wird 
ein TOS-Fehler 66 gemeldet. Weitere Versuche, ein Programm zu 
laden, werden normalerweise scheitern, da GEMDOS den fr das 
Programm reservierten Speicher nicht zurckgibt. Wenn dies 
geschieht, mssen Sie MonST verlassen und neu starten; laden Sie 
die Datei dann als Binrdatei.

B       Binrdatei laden
Es wird nach einem Dateinamen und nach einer (nicht notwendig anzugebenden) 
Ladeadresse gefragt. Diese Datei wird in den Speicher geladen. Wenn 
keine Ladeadresse angegeben wird, wird die Datei dort geladen, wo 
GEMDOS gengend Speicher freigibt. M0 enthlt die Startadresse, M1 
die Adresse des Dateiendes im Speicher.

S       Binrdatei sichern
Dieser Befehl fragt nach einem Dateinamen, unter dem die Datei gesichert 
werden soll, nach einer Startadresse und einer Schluadresse. Um 
eine zuvor geladene Binrdatei zu sichern, knnen Sie als Start- und 
Schluadresse M0 und M1 angeben, vorausgesetzt, die Werte haben sich 
nicht verndert.

A       ASCII-Datei laden
Mit diesem Befehl knnen Sie eine ASCII-Datei laden, normalerweise 
eine Quelltextdatei, um sie in MonST anzusehen. Fenster 4 wird geffnet, 
falls es noch nicht vorhanden ist, und als Source-Fenster eingestellt. 
Der Speicher fr diese Datei wird von GEMDOS angefordert. Es ist 
deshalb ratsam, die ASCII-Datei vor Ihrem Programm zu laden, damit 
garantiert gengend Speicher dafr vorhanden ist. In niedriger 
Auflsung wird Fenster 4 nicht geffnet. Sie knnen aber die 
Datei laden, mit Ctrl-O die Auflsung ndern und mit Alt-S und 
zweimaligem Alt-T den Text dann ansehen.
Wenn eine ASCII-Datei nach einem Programm geladen wird, gehrt der 
Speicher, in dem die Datei sich befindet, dem Programm und nicht 
MonST. Wenn das Programm zu Ende ist, wird der Speicher, in dem sich 
der Text befindet, von GEMDOS freigegeben. Die auto-residente Version 
von MonST kann diese Unterscheidung nicht machen, seien Sie also 
vorsichtig, wenn Sie eine ASCII-Datei in den auto-residenten MonST 
laden.


4.17 Programme ausfhren

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

Ctrl-Y / Ctrl-Z Single-Step
Hiermit wird der Maschinensprachebefehl am PC ausgefhrt. Ein Trap, 
Line-A oder Line-F Opcode wird als einzelner Befehl angesehen und 
als solcher ausgefhrt. Dies kann durch  >>Voreinstellungen<< verndert 
werden.

Ctrl-T  Befehl interpretieren
Dieser Befehl interpretiert den Opcode am PC. Er ist dem Ctrl-Y/Ctrl-Z 
hnlich, verfolgt aber keine JSR, BSR, Trap, Line-A oder Line-F Befehle. 
Er erspart Ihnen das Durchlaufen solcher Routinen und kann mit Befehlen 
im ROM oder im RAM benutzt werden.

R       Run
Dies ist ein allgemeiner Befehl und kann auf verschiedene Arten ausgefhrt 
werden.

Run     G       Go
Dieser Befehl ist mit Ctrl-R identisch und lt das Programm mit 
voller Geschwindigkeit laufen.

Run     S       Langsam (Slowly)
Das Programm wird langsam ausgefhrt, jeder Befehl wird im 
History-Speicher behalten.

Run     I       Instruktion
Dieser Befehl ist dem >>Run s<< hnlich, nimmt aber einen numerischen 
Parameter: die Anzahl der Instruktionen, die ausgefhrt werden, bevor 
MonST wieder eingreift.

Run     U       Bis (Until)
Sie werden nach einem Ausdruck gefragt, der nach jedem Opcode ausgewertet 
wird. Sobald dieser Ausdruck wahr ist, wird das Programm gestoppt. 
Sie knnen z.B. den folgenden Ausdruck verwenden, wenn Sie Ihr Programm 
im ROM mit Shift-Alt-Help angehalten haben und erst wieder Kontrolle 
bernehmen wollen, wenn Ihr Programm-Code wieder ausgefhrt wird:

        (PC>TEXT)&(PC<FC0000)

Das Programm wird so lange laufen, bis der PC an einer Adresse ist, 
die sich nicht im ROM (PC<FC0000) und in Ihrem Programmbereich befindet 
(PC>TEXT). Sie knnten sicherheitshalber

        (PC>TEXT)&(PC<DATA)&(PC<FC0000)

angeben, dies ist aber meist unntig und braucht fr die Auswertung 
nach jeder Instruktion lnger.
Bei allen Run-Befehlen werden Sie nach "Beobachten J/N?" gefragt. 
Wenn Sie "Ja" whlen, knnen Sie von MonST aus den Programmablauf 
mit allen Registervernderungen beobachten. Dieser Vorgang luft 
ziemlich langsam ab und kann mit dem Drcken beider Shift-Tasten 
abgebrochen werden. Sie knnen auch Shift-Alt-Help dazu verwenden, 
den Beobachtungsmodus anzuhalten. Diese Tastenkombination kann aber 
aus system-spezifischen Grnden nicht immer den Beobachtungsmodus 
anhalten, die beiden Shift-Tasten sind in diesem Fall zuverlssiger. 
Wenn Sie "Nein" whlen, wird das Programm mit seinem eigenen Bildschirm 
laufengelassen. Den Programmablauf knnen 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 (auer Go) wird nach jedem ausgefhrten Befehl 
ein Eintrag in den History-Speicher gemacht. Traps werden als einzelne 
Befehle behandelt. Sie knnen dies mit Voreinstellungen verndern, 
allerdings sollten Sie die Warnungen, die bei der Beschreibung von 
"Traps verfolgen" gegeben werden, beachten.
Wenn ein Programm in einem der oben erwhnten Modi (auer Go) luft, 
werden Sie einige Pixel in der linken oberen Ecke Ihres Bildschirms 
sehen. Dieses kleine Lmpchen zeigt, da MonST noch aktiv arbeitet. 
Man knnte sonst annehmen, da die Maschine hngengeblieben ist, 
weil sich  die Ausfhrungsgeschwindigkeit stark verlangsamt.


4.18 Speicher durchsuchen

G       Speicher durchsuchen
Nach diesem Befehl erscheint "Suchen nach B/W/L/T/I?", wobei  die 
Krzel Byte, Wort, Langwort, Text und Instruktion bedeuten.
Wenn Sie B, W oder L whlen, werden Sie nach den Zahlensequenzen 
gefragt, nach denen Sie suchen wollen. MonST findet auch Zahlen an 
ungeraden Adressen.
Wenn Sie T whlen, geben Sie den Text ein, nach dem gesucht werden 
soll, er wird dann case-sensitiv behandelt.
Geben Sie I ein, so knnen Sie nach einem ganzen oder nur einem Teil 
eines Maschinensprachebefehls suchen. Wenn Sie z.B. nach $14(A 
suchen, werden Sie eine Instruktion wie MOVE.L D2,$14(A0) finden. 
Anders als bei MonST 1, wird zwischen Gro-und Kleinschreibung 
unterschieden. Sie sollten auch das Ausgabeformat des 
Disassemblers beachten: so sollten Sie z.B. fr Zahlen Hex-Code 
verwenden, sich auf A7 anstatt SP beziehen usw.
Wenn Sie die Parameter eingegeben haben, wird die Kontrolle an den 
N-Befehl bergeben.

N       Nchstes Vorkommnis suchen
Dieser Befehl wird nach dem G-Befehl benutzt; er sucht nach dem nchsten 
Vorkommnis der angegebenen Suchparameter. Wenn Sie nach Byte-, Wort- 
oder Langwort-Daten suchen, werden Sie immer ein Vorkommnis, nmlich 
im MonST-Speicher, finden. Wenn Sie nach Text suchen, kann es auch 
sein, da der Text sich noch im Tastaturpuffer befindet. Mit diesen 
Suchparametern wird nach 64Kbyte durchsuchten Speichers die Esc-Taste 
abgefragt. Bei der Suche nach Maschinensprachebefehlen wird immer 
nach  2 Byte auf die Esc-Taste hin geprft.
Gesucht wird im Bereich von 0 bis zum Ende des Speichers, dann von 
$FA0000 bis $FEFFFF, dem Modul- und System-ROM-Bereich, und dann 
wieder von 0.
Die Suche beginnt kurz nach der Anfangsadresse des aktuellen Fensters 
(wenn es nicht das Registerfenster ist). Wenn die angegebenen Daten 
gefunden wurden, werden die Startadressen von manchen Fenstern auf 
die Adresse der gefundenen Daten gesetzt. Wenn innerhalb von Fenster 
2 oder 3 gesucht wurde, werden die Startadressen von 2 und 3 auf 
die gefundenen Daten gesetzt. Wenn innerhalb der Fenster 4 oder 
5 gesucht wurde, werden die Startadressen von 4 und 5 auf die gefundenen 
Daten gesetzt, auer 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 enthlt, angezeigt. Wenn der Text nicht 
gefunden wurde, wird das Fenster nicht verndert. 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 knnen Sie verschiedene Optionen MonSTs einstellen. 
Die ersten drei Fragen verlangen J/N-Antworten. Sie knnen, wie in 
jeder Dialogbox, mit Esc abbrechen und mit Return die neuen Einstellungen 
bernehmen.

Bildschirmumschaltung
Normalerweise ist diese Option an; der Bildschirm wird erst  
20 msec nach Kontrollbergabe an Ihr Programm auf den Bildschirm 
Ihres Programms umgeschaltet. Damit wird unntiges Flackern 
verhindert. Diese Option sollte ausgeschaltet werden, bevor das 
zu debuggende Programm die Auflsung, die Bildschirmadresse oder 
die Farbpalette verndert; 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 knnen.

Vorsicht: Diese Option sollte mit grter Vorsicht behandelt 
werden, da man damit sehr leicht groen Schaden anrichten kann. 
Manche zeitkritische Routinen, wie Floppy- oder 
Festplattentreiber, mssen ununterbrochen ablaufen. Eine Trace-
Exception in solchem Code kann ohne weiteres zum Milingen und 
auch zum Datenverlust fhren. Andererseits macht es Spa dem AES 
dabei zuzusehen, wie es Mens oder sich ffnende Fenster aufbaut.
Wenn Sie Ihr Programm mit >>Traps verfolgen<< und >>Run<< 
ablaufen lassen, knnen 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 mglich, da mehrere noch 
bevorstehende Stack Frames das gesetzte Trace-Bit enthalten. Es 
kann also den Anschein haben, als ob vllig unvorhersehbare 
Trace-Exceptions geschehen. Nach jedem derartigen Exception 
sollten Sie mit Ctrl-R fortfahren. Diese unregelmigen 
Exceptions werden nur dann aufhren 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 Mglichkeit 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 auszulsen. 
Das Programm sollte in Ihren AUTO-Ordner kopiert werden, falls Sie 
nicht schon AMonST verwenden. 

Relative Offsets
Diese Einstellung ist normalerweise an und beeinflut die 
symbolische Disassemblierung vom Adreregister indirekt mit dem 
Offset Adremodus, d.h. xxx(An). Wenn die Option an ist, wird 
jeder derartige Adremodus 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 Adreregister als Basisregister benutzen. 
HiSoft Basic z.B. verwendet A3 als Zeiger auf das Runtime-
System.

Symbole
Diese Option ermglicht es, die Behandlung von Symbolen durch MonST 
zu verndern. Zuerst werden Sie gefragt, wie viele Buchstaben in einem 
Symbol signifikant sein sollen (minimal 8, maximal 22) und danach, 
ob die Symbole "Case-sensitiv" verarbeitet werden sollen. Diese 
Option ist fr diejenigen gedacht, die nicht jedes Mal den ganzen 
Symbolnamen eingeben  und nicht auf Gro- und Kleinschreibung achten 
wollen.

I       Intelligentes Kopieren
Dieser Befehl kopiert einen Speicherbereich in einen anderen. Die 
Adressen sollten in folgender Weise eingegeben werden:

        <Anfang>,<Einschlieliches_Ende>,<Ziel>

Das Kopieren ist deshalb intelligent, da die Ursprungs- und Endbereiche 
berlappen knnen.

Vorsicht: MonST berprft nicht, ob die Adressen gltig sind. Eine 
Kopie von oder zu einer nichtexistenten Speicherstelle wird MonST 
wahrscheinlich abstrzen lassen. Das gleiche gilt fr den reservierten 
Systemspeicherbereich.

W       Speicher fllen
Dieser Befehl fllt einen Speicherbereich mit dem angegebenen Wert. 
Die Parameter sind:
        <Anfang>,<Einschlieliches_Ende>,<Fllbyte>
Die Warnung ber gltigen Speicher gilt auch fr diesen Befehl.

L       Labels anzeigen
Wenn MonST von GenST mit Debuggen aufgerufen wurde, wird ein 
Fenster geffnet 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 knnen 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 nchste 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 nchste Zeile fragt nach den Speicherbereichen, die als DC-Direktiven 
disassembliert werden sollen. Die Zeile sollte so aussehen:

        <Datenanfang>,<Datenende>[,<Gre>]

Die optionale Gre 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 whrend 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 enthlt zuerst eine 8stellige Hex-Zahl, bis zu 
10 Wrter 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 enthlt 
zuerst ggf. ein Symbol, dann den disassemblierten Befehl, dem ein 
Tab vorausgeht. Ein Tab trennt auch den Opcode vom Operanden. 
Wenn Sie einen Speicherbereich ohne Symbole disassemblieren, ist 
es ratsam, die "cross reference"-Option zu benutzen, da 
andernfalls keine Labels vorhanden sein wrden. Ein 
Diskettenfehler oder Esc brechen die Ausgabe ab.

M       Adresse verndern
Dieser Befehl ist aus Kompatibilittsgrnden zu MonST 1 beibehalten 
worden. Er entspricht Alt-A.

O       Auswerten
Dieser Befehl entspricht Alt-O und ist aus Kompatibilittsgrnden 
zu MonST 1 beibehalten worden.

D       Laufwerk und Pfad verndern
Mit diesem Befehl knnen Sie das aktuelle Laufwerk und den aktuellen 
Pfad verndern.

Ctrl-E  Exceptions wieder installieren
Mit diesem Befehl werden die von MonST abgefangenen Exceptions 
auf ihren Urzustand gebracht. Dies kann ntzlich sein beim 
Debuggen von kompilierten Programmen, deren Runtimes selbst 
Exceptions verwenden.


4.2O Auto-residenter MonST

Die dritte mitgelieferte Version von MonST heit 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 
hauptschlich fr Programmierer gedacht, die AUTO-Programme und 
Desk-Accessories schreiben und debuggen wollen. Wenn ein Fehler 
wie ein Bus- oder Adrefehler innerhalb einer dieser Programme 
auftritt, hngt die Maschine, bevor Sie einen interaktiven MonST 
aufrufen knnen. Es ist auch so mglich, 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 
wre, 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 knnen 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 bentigte Speicher kann nur durch einen Reset zurckgegeben 
werden.
Whrend der Installation von AMonST knnen Sie durch Drcken der 
beiden Shift-Tasten in das Programm gelangen, um z.B. Breakpoints 
zu setzen. Wenn Sie mit Ctrl-C AMonST verlassen, bleibt der Debugger 
resident, ein Verlassen mit Ctrl-R bewirkt, da die Installation 
von AMonST unterbrochen wird. 
Es kann eine interaktive MonST-Version geladen werden, obwohl ein 
AMonST installiert ist. Die interaktive Version hat Kontrolle bis 
sie beendet wird; AMonST wird dann wieder aktiv.
Vorsicht: Rufen Sie nie AMonST innerhalb eines anderen Programmes 
auf. Es kann dadurch vom Betriebssystem ein groer Speicherbereich 
bis zum nchsten 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 mglich, da der PC 
sich im ROM befindet. Die Methode, dahin zurckzugelangen, von wo 
aus Ihr Programm das ROM aufgerufen hat, ist folgende: Whlen 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, knnen 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 knnen diese Zeit so kurz wie mglich halten, 
indem Sie den Ausdruck im voraus, soweit Sie knnen, 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, knnen Sie MonST eine 
Kommandozeile bergeben. Zuerst geben Sie den Programmnamen ein, 
und, falls erwnscht, eine Kommandozeile, die dem zu debuggenden 
Programm bergeben werden soll.


4.22 Die Bug-Jagd

Es gibt wahrscheinlich genausoviele Bug-Jagd-Strategien wie es 
Programmierer gibt, aber die Erfahrung ist doch der beste Lehrer. 
Wir haben in der Zeit, in der wir den 68000er programmieren, 
gelernt, wie man die Suche am besten angeht.
Zuerst ist ein sehr guter Weg, um Fehler zu finden, sich den 
Quelltext anzusehen. Es ist eine schlechte Angewohnheit, gleich 
zum Debugger zu greifen und sich erst dann den Quelltext 
anzusehen. Es knnte sein, da Sie dabei das System oder die 
Programmierumgebung wechseln und nicht mehr auf das Low-Level-
Debuggen zurckgreifen knnen.
Wenn ein Programm offensichtliche Fehler macht, wie z.B. einen 
Adrefehler, ist es wesentlich leichter das Problem zu finden, 
als wenn das Programm nur manchmal, von Ihrer Sicht aus vllig 
unberechenbar, das falsche Ergebnis liefert.
Viele Fehler entstehen dadurch, da bestimmte Speicherbereiche, die 
wichtige Daten enthalten, versehentlich berschrieben werden. Wenn 
man den Speicherbereich leicht, wie z.B. bei einem Busfehler, erkennen 
kann, kann man bedingte Breakpoints an verschiedenen Stellen ine 
Ihrem Programm unterbringen, um den Fehler so frh wie mglich 
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 verndert 
wird. Die Lsung 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 Lmpchen 
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, whrend der 
Stack an einer bestimmten Stelle ist, ausgelst. Es kommt auch 
vor, da ein Fehler nur dann auftaucht, wenn ausgerechnet kein 
MonST zugegen ist; in einer solchen Situation hilft meist nur 
noch Glck.

Zhler-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 knnen warum, setzen Sie 
einen Zhler-Breakpoint in diese Routine und lassen das Programm 
ablaufen. Wenn der Fehler auftritt, schauen Sie sich mit Hilfe von 
>>Help<< an, wie oft die Routine durchgefhrt wurde. Dann laden Sie das 
Programm neu und setzen einen Stop-Breakpoint an diese Stelle mit 
dem Wert des Zhler-Breakpoints (oder eins weniger). Lassen Sie das 
Programm laufen. Sie knnen die Routine dann single-steppen, falls 
sie schiefluft.

Viel Glck!


4.23 Programme im Auto-Ordner

Wenn ein Programm im AUTO-Ordner abstrzt, kann es sein, da der 
Rechner in einer unendlichen Schleife versucht, neu zu booten. Benutzen 
Sie in diesem Fall AMonST, indem Sie AMonST vor dem abstrzenden 
Programm in den AUTO-Ordner kopieren. So wird bei einem Exception 
der Rechner nicht neugestartet, sondern AMonST greift ein.

4.23.1 Desk-Accessories

Wenn ein Desk-Accessory nicht das tut, was es tun soll,  sollten Sie 
AMonST benutzen. Um ein DA im Speicher zu finden, gehen Sie mit 
Shift-Alt-Help in AMonST. Dann suchen Sie ab Adresse 0 nach dem 
Namen Ihres Accessory. Es wird in Grobuchstaben und bis auf 8 
Zeichen Lnge mit Leerschritten ausgefllt sein. Ignorieren Sie 
Vorkommnisse in Directory-Puffern (der Name wird darin von .ACC 
gefolgt) und in MonSTs eigenem Speicher, wobei dem Namen ein ASCII-T 
voransteht. Das richtige Vorkommnis wird 12 Byte nach dem Namen 
ein Langwort haben, das auf die Base-Page des Accessory zeigt; 
$100 Byte danach fngt es an. Von hier aus sollten Sie Ihre 
Hauptschleife erkennen und ein Breakpoint an einer geeigneten 
Stelle setzen. Mit Ctrl-R luft dann das Accessory weiter bis zum 
Breakpoint.
Wenn schon bei der Initialisation eines Accessory ein Fehler auftritt, 
mssen Sie es ganz am Anfang, bevor der Fehler passiert, anhalten. 
Der beste Weg ist, den ILLEGAL-Befehl zu verwenden und ihn durch 
AMonST abfangen zu lassen. Manchmal klappt diese Methode auch nicht. 
Die folgende Vorgehensweise funktioniert bei den aktuellen ST-ROMs 
um das AES zu stoppen, bevor es das Accessory startet. Es wird darauf 
hingewiesen, da diese Methode kompliziert und nicht fr den Anfnger 
gedacht ist.
Zuerst halten Sie beide Shift-Tasten gedrckt, damit Sie beim 
Bootvorgang in AMonST gelangen. Dann setzen Sie mit Ctrl-D 
ein BDOS-Breakpoint auf dem GEMDOS-f_open-Aufruf, $3D. Danach 
benutzen Sie Ctrl-C, um den Bootvorgang weiterlaufen zu lassen.
AMonST wird jedes Mal, wenn ein f_open-Aufruf erfolgt, aktiviert. 
Machen Sie Fenster 3 zum aktuellen Fenster und setzen Sie 
jedesmal, wenn Sie auf ein Breakpoint kommen, die Startadresse 
des Fensters auf {sp+2}. Wenn der erscheinende Name nicht der 
Ihres Accessory ist, bergehen Sie den Aufruf mit Ctrl-Y. 
Setzen Sie dann noch ein BDOS-Breakpoint auf $3D und lassen den 
Bootvorgang mit Ctrl-R fortlaufen. Wenn der Name Ihres 
Accessory doch auftaucht, setzen Sie ein BDOS-Breakpoint auf 
$4B und geben dann Ctrl-R ein. AMonST stoppt den Ablauf kurz 
bevor das Accessory geladen wird. Diese Reihenfolge -zuerst ein 
f_open und dann ein p_exec - mag zwar etwas seltsam 
erscheinen,ist aber erfolgversprechend. Mit Ctrl-Y ber den 
GEMDOS-Aufruf und dann mit Alt-B mit der Adresse d0+100 wird ein 
Breakpoint auf den ersten Befehl des Accessory gesetzt. Mit 
Ctrl-R lassen Sie das Betriebssystem so lange laufen, bis Ihr 
Accessory tatschlich ausgefhrt wird. Diese Methode mag zwar 
kompliziert und zeitaufwendig sein, sie ist oft aber die einzige 
Mglichkeit, ein Desk-Accessory zu debuggen.

4.23.2 Die Exception-Analyse

Wenn eine unerwartete Exception passiert, ist es meist sehr ntzlich 
zu wissen, wo und wie sie passierte, um dann, wenn mglich, das 
Programm zum Weiterlaufen zu bringen.

Busfehler
Wenn der PC sich in nicht-existentem Speicher befindet, schauen Sie 
sich den Stack an und versuchen Sie, eine Rckkehradresse zu finden. 
Diese gibt meist Aufschlu ber den Grund des jetzigen PC-Wertes. 
Wenn der PC sich innerhalb Ihres Programmes befindet, wird ein Zugriff 
auf einen nicht-existenten oder geschtzten Speicher den Busfehler 
ausgelst haben. Es ist sehr unwahrscheinlich, da Sie nach einem 
Busfehler Ihr Programm weiterlaufen lassen knnen.

Adrefehler
Wenn der PC sich nicht in Ihrem Programm befindet, ist die soeben 
erwhnte Methode anzuwenden. Ein Adrefehler hat als Ursache meist 
einen Wort- oder Langwortzugriff auf eine ungerade Adresse. Eine 
Registerkorrektur hilft oft, da das Programm wenigstens fr eine 
Weile weiterlaufen kann.

Illegaler Befehl
Wenn der PC in einem sehr niedrigen Speicherbereich ist, etwa unter 
$30, ist meist ein Sprung an die Adresse 0 schuld. Wenn Sie sich 
mit MonST diesen Bereich ansehen, erkennen Sie einen BRA.S, gefolgt 
von mehreren ORI-Befehlen, die in Wirklichkeit Langwort-Zeiger sind, 
dicht gefolgt von einem illegalen Befehl.

Privilegverletzung
Dies wird durch die Ausfhrung eines privilegierten Befehls im User-Modus 
verursacht. Meistens bedeutet dies, da Ihr Programm Amokgelaufen 
ist.


4.24 Zusammenfassung der MonST-Kommandos

Fenster-Befehle

Alt-A                   Startadresse setzen
Alt-B                   Breakpoint setzen
Alt-E                   Fenster editieren
Alt-F                   Fontgre
Alt-L                   Fenster binden
Alt-O                   Ausdruck auswerten
Alt-P                   Drucker-Dump
Alt-R                   Register setzen
Alt-S                   Fenster spalten
Alt-T                   Fenstertyp verndern
Alt-Z                   Fenster zoomen

Bildschirmumschaltung

V                       Anderer Bildschirm              
Alt-O                   Auflsung verndern

Breakpoints

Alt-B                   Breakpoint setzen
Help                    Breakpoint- und Segmentanzeigen
Ctrl-B                  Breakpoint setzen
U                       Go Until
Ctrl-K                  Alle Breakpoints lschen
Ctrl-A                  Breakpoint setzen und ausfhren
Ctrl-D                  BDOS-Breakpoint

Laden und Abspeichern

Ctrl-L                  Ausfhrbares Programm laden
B                       Binrdatei laden
S                       Binrdatei abspeichern
A                       ASCII-Datei laden

Programme ausfhren

Ctrl-R                  Zurck zum Programm / Run
Ctrl-Y                  Single-Step
Ctrl-T                  Instruktion interpretieren (Trace)
R                       Run (verschiede Arten)

Speicher durchsuchen

G                       Durchsuche Speicher
N                       Nchstes Vorkommnis

Verschiedenes

Ctrl-C                  Abbrechen
Ctrl-P                  Voreinstellungen
I                       Intelligentes Kopieren
W                       Speicher fllen
L                       Labels anzeigen
P                       An Drucker/Diskette disassemblieren
M                       Adresse verndern
O                       Auswerten
D                       Laufwerk und Pfad verndern
Shift-Alt-Help          Programm unterbrechen
H                       History-Speicher anzeigen
Ctrl-E                  Exceptions wieder installieren

