UBUG-Benutzerhandbuch (Debugger-Referenzhandbuch)
für Radysis Motion Controler
Der
UBUG-Monitor ist ein eigenständiges Softwarepaket, das
die Evaluierung und Fehlerbehebung der UIMC 68EC030-basierten Motion-Controller-
Leiterplatte ermöglicht. Es kann Benutzercode laden und ausführen und enthält
einen Assembler/Disassembler für schnelles Programm-Patchwork. Der
Monitor arbeitet in einem benutzerinteraktiven, befehlsgesteuerten Modus, der durch
die UIC>-Eingabeaufforderung angezeigt wird. Die nach dieser Eingabeaufforderung eingegebene Befehlszeile
bestimmt, welcher Vorgang ausgeführt wird.
UBUG-MONITOR
INHALTSVERZEICHNIS
1. ALLGEMEINE INFORMATION
1.1 Beschreibung von UBUG………………….. 3
2. DER UBUG-BEFEHLSSATZ
2.1 Einleitung………………………… 3
2.2 Auto Null (an)……………………… 4
2.3 Monteur/Demonteur (as) ………….. 4
2.4 Speicherfüllblock (bf)…………….. 6
2.5 Block der Gedächtnisbewegung (bm)…………….. 6
2.6 Bruchpunkt (br)…………………….. 6
2.7 Blocksuche (bs)……………………. 7
2.8 Gegentest (ct)………………. 7
2.9 DAC16, ADC8-Test (dac16t)……………. 7
2.10 Datenkonvertierung (DC)…………………. 8
2.11 Los (los)…………………………….. 8
2.12 Hilfe (?/er/helfen)…………………….. 8
2.13 IO-Zugriff (io)……………….. 8
2.14 S-Records laden (lo)………………….. 9
2.15 Speicheranzeige (md)………………….. 9
2.16 Speicheränderung (mm)…………………… 10
2.17 Gedächtnistest (mt)………………….. 10
2.18 Registeranzeige (rd)………………… 10
2.19 Register ändern (rm)…………………. 11
2.20 Symboldefinition (sd)…………………… 11
2.21 Test – Diagnose (Test)………………. 11
2.22 Transparentmodus ™………………… 12
2.23 Spur (tr)………………………….. 12
3 VERWENDUNG DES ONE-LINE-MONTAGE-/DEMONTAGEGERÄTS
3.1 Einleitung ………………………. 12
3.2 Quellprogramm eingeben und ändern …. 12
3.3 Eingabe einer Quelllinie ……………….. 13
3.4 Eingabe einer Flussänderungsanweisung ……… 14
3.5 Eingabe von Registerlisten ……………… 15
3.6 Eingabe von Gleitkomma-Sofortdaten … 16
3.7 Eingabe von MMU-Anweisungen ……………. 17
1. ALLGEMEINE INFORMATION
1.1 BESCHREIBUNG VON UBUG
Der
UBUG-Monitor ist ein eigenständiges Softwarepaket, das
die Evaluierung und Fehlerbehebung der UIMC 68EC030-basierten Motion-Controller-
Leiterplatte ermöglicht. Es kann Benutzercode laden und ausführen und enthält
einen Assembler/Disassembler für schnelles Programm-Patchwork. Der
Monitor arbeitet in einem benutzerinteraktiven, befehlsgesteuerten Modus, der durch
die UIC>-Eingabeaufforderung angezeigt wird. Die nach dieser Eingabeaufforderung eingegebene Befehlszeile
bestimmt, welcher Vorgang ausgeführt wird.
2. DER UBUG-BEFEHLSSATZ
2.1 EINFÜHRUNG
In diesem
Abschnitt werden die UBUG-Überwachungsbefehle und die zugehörige Syntax erläutert.
Tabelle 2.1 fasst die verfügbaren Befehle zusammen und zeigt den Abschnitt, in dem
der Befehl ausführlicher erklärt wird.
TABELLE 2.1 UBUG-MONITOR-BEFEHLE |
||
Befehl/Mnemonik |
Name |
Abschnitt |
ein |
Auto-Null |
2.2 |
als |
Monteur/Demonteur |
2.3 |
bf |
Speicherblock füllen |
2.4 |
bm |
Block der Erinnerungsbewegung |
2.5 |
br |
Haltepunkt |
2.6 |
bs |
Block der Speichersuche |
2.7 |
ct |
Gegentest |
2.8 |
dac16t |
DAC16, ADC8-Test |
2.9 |
Gleichstrom |
Datenkonvertierung |
2.10. |
gehen |
Gehen |
2.11 |
?/er/helfen |
Hilfe |
2.12 |
io |
IO-Zugriff |
2.13 |
siehe da |
S-Records laden |
2.14 |
md |
Speicheranzeige |
2.15 |
mm |
Speicher ändern |
2.16 |
mt |
Gedächtnistest |
2.17 |
rd |
Registeranzeige |
2.18 |
rm |
Registrieren und ändern |
2.19 |
sd |
Symbol definieren |
2.20. |
prüfen |
Test – Diagnose |
2.21 |
tm |
Transparenter Modus |
2.22 |
tr |
Verfolgen |
2.23 |
Die Befehlszeile besteht aus:
<COMMAND IDENTIFIER>: gibt an, welcher Befehl (z. B. br)
<SP>: mindestens ein Leerzeichen
OPTIONSLISTE: Eine Option kann Trennzeichen (-) mit Optionen verwenden, wenn nicht standardmäßige
Optionen zulässig sind und verwendet werden. (Bsp.
[<-r>])
<SP>: mindestens ein Leerzeichen
ARGUMENTE: Alle erforderlichen Argumente, die durch den Befehl angegeben werden, getrennt
durch Kommas/Leerzeichen, wie in der Befehlsbeschreibung gezeigt
. (z. B. <ADDR,ADDR>)
Dabei schließt „<>“ Symbole ein, die in der Befehlszeile erforderlich sind,
und „[<>]“ Symbole, die in der Befehlszeile optional sind
. Beachten Sie, dass in den obigen Beispielen die Option -r ein Beispiel für ein
optionales Symbol war und dass die ADDR-Felder Anforderungen in der
Befehlszeile sind. Die mit einem bestimmten Befehl verfügbaren Optionen werden
im Abschnitt, der diesen Befehl beschreibt, ausführlich erläutert. Der Monitor unterscheidet
nicht zwischen Groß- und Kleinschreibung bei Eingaben vom Terminal. Alle Eingaben vom
Terminal werden in Kleinbuchstaben umgewandelt, bevor sie intern verwendet werden (mit Ausnahme von
Text, der einem Texttrennzeichen folgt; siehe TEXT unten). Die Argumente eines
bestimmten Befehls werden mit den folgenden Symbolen beschrieben:
<EXP>: Ein Ausdruck kann ein beliebiger numerischer Ausdruck sein, der
nur mit den arithmetischen Operatoren + und – ausgewertet werden kann.
Ex. 1000
Ex. 1+3
Hinweis: Zahlen können mit einem Basisbezeichner vorangestellt werden, wenn die Standardeinstellung
(hexadezimal) nicht gewünscht ist. Diese Bezeichner sind unten in Tabelle
2.2 aufgeführt:
TABELLE 2.2 BASISBEZEICHNER
Base |
Bezeichner |
Hexadezimal |
$ |
Dezimal |
& |
Oktal |
@ |
Binär |
% |
<ADDR>: Das Adressfeld ist ein beliebiger gültiger Ausdruck. Hinweis: Dieses
Adressfeld sollte nicht mit den Quell- und
Zieladressen verwechselt werden, die für den Assembler/Disassembler erforderlich sind.
<COUNT>: Das Zählfeld ist ein beliebiger gültiger Ausdruck, dem ein COUNTDEL vorangestellt ist (Zählertrennzeichen, z. B. „:“).
Ex. :100
<BEREICH>: Ein Bereich von Speicherorten, der entweder durch ADDR, ADDR oder ADDR:COUNT gekennzeichnet ist.
Ex. 0,100
Ex. 0:50
<TEXT>: Eine ASCII-Zeichenfolge mit bis zu 255 Zeichen, der ein TEXTDEL (Texttrennzeichen, z. B. „;“) vorangestellt ist.
Ex. ;Beispieltext
<GRÖSSE>: Kann entweder sein:
Byte (8 Bit) ====> -b
Wort (16 Bit) ====> -w
lang (32 Bit) ====> -l
**Hinweis: ====> steht für „wird dargestellt durch“ oder „gibt zurück“
<DATA>: Daten können jeder gültige Ausdruck sein.
<MASK>: Eine Maske kann ein beliebiger Ausdruck sein. Nach der Auswertung des
Ausdrucks stehen Nullen für „Don't cares“.
Manchmal wird zur Qualifizierung eine Maske verwendet
<DATEN>. Ein Anwendungsbeispiel finden Sie in Abschnitt 2.6.
2.2 AUTO NULL
eine <ACHSE>
Die Auto-Null-Funktion führt eine Nullung des Null-Offsets des 16-Bit-DAC der angegebenen Achse durch.
Anwendungsbeispiele:
an 1 (nulls axis one)
2.3 MONTAGE-/DEMONTAGEGERÄT
als <ADDR>
Der Assembler/Disassembler wird an der angegebenen Adresse aufgerufen und
zerlegt den Objektcode an dieser Stelle. Die Verwendung des
Assemblers/Disassemblers wird ausführlich in Kapitel 3 beschrieben.
2.4 Speicherblockfüllung
bf [<GRÖSSE>] <BEREICH> <DATEN>
Der Blockfüllbefehl füllt den angegebenen Speicherbereich mit den
aufgelisteten Daten. Wenn die Größenoption nicht angegeben ist, wird standardmäßig
Word als Größe verwendet. Wenn ein Vielfaches der <SIZE> von <DATA> nicht
gleichmäßig in den <RANGE> passt, lässt der Befehl das letzte Teilwort
oder Langwort unverändert.
Anwendungsbeispiele:
bf 100.110 &10
bf 100:8 &10
bf -w 100:8 a
bf -l 100.110 a000a
**Hinweis: Alle diese Beispiele führen die gleiche Speicherfüllung durch.
(d. h. $00000100: $000a $000a $000a $000a $000a $000a
$0000010C: $000a $000a $0000 $0000 $0000 $0000 )
2,5 BLOCK DER SPEICHERVERSCHIEBUNG
bm [<GRÖSSE>] <BEREICH> <ADDR>
Mit dem Befehl zum Verschieben von Blöcken kann der Benutzer Speichersegmente an
verschiedene Speicherorte kopieren. Durch die Ausführung dieses Befehls wird
die Originalversion nicht zerstört, es sei denn, der nach <ADDR> verschobene Speicherort
liegt innerhalb des Bereichs <RANGE> des zu kopierenden Codes. Die Größenoption
ist nur verfügbar, wenn der Bereich als
<ADDR>:<COUNT> beschrieben wird. Wenn der Bereich mit dem Modus <ADDR>,<ADDR> beschrieben wird,
ist die Größe standardmäßig Byte. Das Größenfeld
stellt die Größenübertragung dar, die zum Durchführen der Speicherverschiebung verwendet wird
.
Anwendungsbeispiele:
bm 1000,2000 10000
bm 1000:800 10000
bm -l 1000:400 10000 **Hinweis: Diese Variante wird am schnellsten ausgeführt
**Hinweis: Alle diese Beispiele führen die gleiche Speicherverschiebung durch.
2.6 HALTEPUNKT
br
br <ADDR>
br <ADDR> <:COUNT>
br -r [<ADDR>]
br -r
Mit dem Befehl „breakpoint“ kann der Benutzer Haltepunkte im Zielcode auflisten, einfügen oder löschen . Dadurch kann der Benutzer die Ausführung eines Programms stoppen
und zur Überwachungsumgebung zurückkehren, wenn die angegebene
<ADDR> vorab abgerufen wird. Die verschiedenen Verwendungsmöglichkeiten dieses Befehls sind
im Folgenden zusammengefasst:
br listet alle bekannten Haltepunkte auf
br <ADDR> fügt an dieser Adresse einen Haltepunkt ein
br <ADDR> <:COUNT> fügt einen Haltepunkt an dieser Adresse ein, kehrt jedoch erst zur Monitorumgebung zurück, nachdem der
Haltepunkt <COUNT> so oft angetroffen wurde.
br -r [<ADDR>] entfernt den Haltepunkt an dieser Adresse
br -r alle Haltepunkte entfernen
2.7 BLOCKSUCHE
bs [<GRÖSSE>] <BEREICH> <DATEN>
bs [<SIZE>] <RANGE> <DATA> <MASK>
Der Blocksuchbefehl ermöglicht es dem Benutzer, ein bestimmtes Muster
im Speicher zu finden. Der Suchbereich kann über den
angegebenen <RANGE> hinausgehen, wenn ein Muster innerhalb von <RANGE> gestartet wird. Es gibt zwei
Haupttypen von Suchen:
bs [<SIZE>] <RANGE> <DATA> durchsucht den Bereich nach einer genauen Übereinstimmung von <DATA>.
bs [<SIZE>] <RANGE> <DATA> <MASK> durchsucht
den Bereich nach jedem Muster, das mit <DATA> übereinstimmt,
wobei in der Binärdarstellung der
Maske eine „1“ steht.
Ex. Mit Speicher an Speicherort $100, wie unten gezeigt, wird ausgeführt
„bs 100.118 $1234 $ffbf“ ====>
Startadresse: $00000100
Endadresse: $00000117
Gefunden bei: $00000110:$1234
Gefunden bei: $00000114:$1274
Speicher für das obige Beispiel:
$00000100: $0000 $0000 $0000 $0000 $0000 $0000
$0000010C: $0000 $0000 $1234 $0000 $1274 $0000
2.8 GEGENTEST
ct
Der Befehl „Zählertest“ führt einen Diagnosetest für die 4-Achsen-Zähler durch und es werden Pass/Fail-Informationen zurückgegeben.
2.9 DAC16, DAC8 TEST
dac16t <ACHSE #>
Der Befehl dac16t führt einen Diagnosetest des 16-Bit-DAC und des
8-Bit-ADC für die angegebene Achse durch, indem er die Diagnose-Wrap-Around
-Funktion des UIMC nutzt. Pass/Fail-Informationen werden zurückgegeben.
2.10 Datenkonvertierung
dc <EXP>
Der Datenkonvertierungsbefehl ermöglicht es dem Benutzer, einen Eingabeausdruck auszuwerten
und sein hexadezimales und dezimales Äquivalent zu bestimmen.
Anwendungsbeispiele:
**HINWEIS: Die folgenden Symbole wurden der Reihe nach bereits früher definiert
zur Verwendung in den folgenden Beispielen:
Bsp. 1. verwendet /start= 0
Bsp. 2. verwendet /start= – $18
Beispiel 3. verwendet /finish= 10000 und /start=$10000
(siehe Abschnitt 2.17)
Ex. 1 fM $17+/Anfang ====> $17 = &23
Ex. 2 dc $17+/start ====> UNSIGNED : $FFFFFFFF =
&4294967295 SIGNED
: -$1 = -&1
Ex. 3 Stb $/Ziel-/Start ====> $10000 = 65536
2.11 GO go [<ADDR>]
Mit dem Befehl „go“ kann der Benutzer Zielprogramme ausführen. Wenn
in der Befehlszeile keine Adresse angegeben wird,
wird der aktuelle PC-Wert verwendet. Dieser Wert ist entweder:
1.) der initialisierte PC-Wert, wenn kein Zielcode ausgeführt wurde.
2.) der letzte Wert des PCs, der bei der Ausführung des Zielcodes verwendet wurde.
3.) der Wert, der durch einen RM-Befehl in das PC-Register gestellt wird (Register Modify siehe Abschnitt 2.16).
Wenn in der Befehlszeile eine Adresse angegeben ist, wird der PC so geändert
, dass er die angegebene Adresse hat. und die Ausführung beginnt an dieser Adresse. In
beiden Fällen kann der Registerzustand, auf den der Mikroprozessor initialisiert wird
, bevor der Zielcode an dieser Stelle ausgeführt wird, durch
Ausführen eines rd-Befehls angezeigt werden (siehe Abschnitt 2.15).
2.12 HILFE
? [<Symbol>]
er [<symbol>]
Hilfe [<Symbol>]
Mit dem Hilfebefehl kann der Benutzer eine Liste zulässiger Befehle und die damit verbundene Syntax anzeigen . Sie können auch nach Symbolen suchen, die zur Beschreibung der
Befehlsverwendung verwendet werden.
Anwendungsbeispiele:
?,he oder help ====> gibt eine vollständige Liste aller Befehle mit Verwendung zurück
? as ====> AS <addr> help addr ====> <number>
Die Zahl ====> <hex> || <dez> || <okt> || <bin> || <Symbol>
** Hinweis: <Nummer> kann auch ein Ausdruck sein
2.13 IO-ZUGRIFF
io
Der IO-Zugriffsbefehl ermöglicht dem Benutzer den Zugriff auf verschiedene Optionen des
UIMC-Motion-Controllers. Bei Ausgabe des IO-Befehls wird dem Benutzer
die folgende Liste mit Auswahlmöglichkeiten angezeigt:
I/O-Schnittstellenmenü:
i – Eingänge anzeigen (Debugger zeigt den aktuellen Status der digitalen Eingänge an)
o – Ausgaben ändern (Der Debugger ermöglicht es dem Benutzer, Ausgaben zu ändern)
c – Zähler ändern (Debugger zeigt den aktuellen Status der Zähler an und ermöglicht dem Benutzer, den Inhalt zu ändern)
r – Relais ändern (Der Debugger ermöglicht es dem Benutzer, den Status der Relais zu ändern)
x – 16-Bit-DACs ändern (Debugger ermöglicht es dem Benutzer, die 16-Bit-DAC-Ausgänge zu ändern)
y – 8-Bit-DACs ändern (Debugger ermöglicht es dem Benutzer, die 8-Bit-DAC-
Ausgänge zu ändern) z – 8-Bit-ADCs anzeigen (Debugger zeigt den aktuellen Status der
ADCs an)
Nach Auswahl einer der oben genannten Optionen wird der Benutzer entsprechend aufgefordert.
2.14 S-RECORD LADEN
lo [<Port>] [<OFFSET>] ;<TEXT>
Mit dem Ladebefehl kann der Benutzer S-Records vom Hostsystem herunterladen
. Wenn in der Befehlszeile ein Offset vorhanden ist,
ist die Zieladresse der Offset, der zu der durch den S-Record ermittelten Adresse addiert wird.
Im Normalmodus sendet der Befehl den <TEXT> hinter dem „;“ an den
GASTGEBER. Anschließend wird erwartet, dass der HOST mit dem Senden von S-Records an das Terminal beginnt
. Wenn die Option „t“ verwendet wird, nein; ist erforderlich und der Debugger
erwartet, dass das Terminal mit dem Senden eines S-Records beginnt.
Anwendungsbeispiele:
lo ;cat ubug.mx
**Hinweis: Der Befehl „cat“ ist ein UNIX-Befehl, der
die angegebenen Dateien verkettet und dann mithilfe der Standardausgabe ausgibt.
Dadurch wird der Inhalt der Datei effektiv an das Terminal gesendet. Anschließend lädt der
Monitor den Inhalt der S-Records in der Datei
über den Host-Port an die von den S-Records ermittelten Adressen.
.
lo a0000 ;cat ubug.mx
**Hinweis: Dieser Befehl lädt dieselbe S-Record-Datei herunter, die im
ersten Beispiel verwendet wurde, mit der Ausnahme, dass sie an der durch S-Record + $a0000 bestimmten Adresse in den Speicher heruntergeladen wird
(d. h. der Offset wird
hinzugefügt).
viel
**Hinweis: Dieser Befehl verwendet „t“ für Terminal für den S-Record-Ladeport.
2.15 SPEICHERANZEIGE
md [<SIZE>] <addr>
md [<GRÖSSE>] <BEREICH>
md -di <Adresse>
Mit dem Speicheranzeigebefehl kann der Benutzer den Speicher anzeigen. Die zur Anzeige des Speichers verwendete Größe
wird durch die Größenoption bestimmt. Wenn keine
Option verwendet wird, ist die Standardeinstellung Word. Wenn der Bereich die Bildschirmkapazität überschreitet
, wird die Ausgabe auf dem Bildschirm ausgesetzt, bis eine beliebige Taste gedrückt wird.
Anwendungsbeispiele:
md -l 100.110
md -l 100:4
md 100:8
md -di 100
**Hinweis: Dieser Befehl beginnt mit der Zerlegung des Speichers
diesen Ort.
2.16 SPEICHER ÄNDERN
mm [<SIZE>] [<verify>] <ADDR>
mm <CONTROL>
Mit dem Speicheränderungsbefehl kann der Benutzer den Speicher anzeigen und ändern.
Die zur Anzeige des Speichers verwendete Größe wird durch die Größenoption bestimmt.
Die Standardgröße ist Word. Die Option „Nur schreiben“ wird durch die Option „Überprüfen“ bestimmt
. Der Standardwert ist Lesen/Schreiben und ein „n“ wird
nur zum Schreiben verwendet. Der Speicher wird beginnend bei der angegebenen Adresse angezeigt, gefolgt
von einem „?“. prompt. Der Benutzer kann einen <exp> eingeben, um diesen
Speicherwert zu ersetzen, oder die Eingabetaste drücken, um den nächsten Speicherwert anzuzeigen. Um den
Befehl zu beenden, geben Sie „. <cr>“ (Punkt <Wagenrücklauf>). Weitere
verfügbare <CONTROL>-Zeichen sind unten in Tabelle 2.3 zusammengefasst:
TABELLE 2.3 STEUERZEICHEN
Steuerzeichenbezeichner _
– <EXP> Backup <EXP> Speicherorte
+ <EXP> vorwärts ” ” „
= <NUMMER> nicht vorrücken Geht nicht zum nächsten Speicherort weiter
Anwendungsbeispiele:
mm -l 100 ====> $00000100 $00000000 ?
mm 100 ====> $00000100 $0000 ?
(d. h. es wird die Standardgröße „Wort“ verwendet)
mm n 100 ====> $00000100 ?
(d. h. liest nicht vom Standort)
2.17 SPEICHERTEST
mt <Start> <Ende>
Der Speichertest führt einen Bit-für-Bit-Speichertest für den angegebenen RAM-Bereich durch und gibt Pass/Fail-Informationen zurück.
2.18 REGISTERANZEIGE
rd
rd -f Hinweis: Coprozessorregister werden angezeigt, falls vorhanden
Mit dem Befehl „Registeranzeige“ kann der Benutzer den Inhalt der Register der MPU/FPU anzeigen.
2.19 REGISTRIERUNG ÄNDERN
rm [<REGISTER> [<Neuer Wert>]]
Mit dem RM-Befehl kann der Benutzer den Inhalt der Register der MPU ändern.
Anwendungsbeispiele:
So ändern Sie den PC-Wert:
rm pc 3000 ====> ändert den PC-Wert auf 3000
oder
rm ====> Welches Register?
pc ====> PC=00004000NEUER WERT?
3000 ====> ändert den PC-Wert auf 3000
oder
rm pc ====> PC=00004000NEUER WERT?
3000 ====> ändert den PC-Wert auf 3000
2.20 SYMBOLDEFINIERUNG
sd [<SYMBOL> <EXP>]
sd -r <SYMBOL>
Mit dem Symboldefinitionsbefehl kann der Benutzer Symbole definieren. Diese
Symbole können dann in Ausdrücken verwendet werden. Die Verwendung eines Symbols in einem
Ausdruck führt dazu, dass das Symbol durch den Ausdruck ersetzt wird
, der zu seiner Definition verwendet wurde. Sobald das Symbol definiert ist, ist es verfügbar,
bis der Monitor zurückgesetzt wird. Wenn ein Symbol mehrfach definiert ist,
verwendet der Monitor die erste Definition.
Anwendungsbeispiele:
sd ====> listet auf, welche Symbole bereits bekannt sind
sd /reset 10000 ====> definiert /reset auf $10000, wann immer es
in einem Ausdruck verwendet wird. sd /start -$18 ====> definiert
/start als -$18, wann immer es in einem Ausdruck verwendet wird. sd -r
/start ====> entfernt die erste Definition von /start aus der
Liste
**HINWEIS: Symbole, die mit dem Befehl sd definiert wurden,
können in beliebigen Ausdrücken verwendet werden. Ein Beispiel hierfür ist die Verwendung eines
definierten Symbols zur Eingabe des Quellcodes im
Assembler (z. B. bsr /startsub nach der Definition von /startsub).
2.21 TEST – DIAGNOSE
test [<LOOP #>]
Der Testbefehl initiiert eine Reihe von Diagnosetests, die aus
einer Auto-Null-Funktion, einem Zählertest, einem RAM-Test und einem DAC16/ADC8-Test bestehen, und
gibt Pass/Fail-Informationen zurück. Die Häufigkeit, mit der der Diagnosetest
durchgeführt wird, wird durch die angegebene Schleifennummer bestimmt. Wenn keine Schleifennummer
angegeben ist, wird der Befehl endlos wiederholt.
2.22 TRANSPARENTMODUS
tm
Der Befehl „Transparenter Modus“ versetzt den Benutzer in den transparenten Modus, indem er
eine Softwareverbindung zwischen dem HOST und dem TERMINAL herstellt.
Der transparente Modus verhindert die normale Kommunikation zwischen dem TERMINAL und
dem Debugger. In diesem Modus werden alle Tastatureingaben direkt
an den HOST weitergeleitet. HOST-Antworten wiederum werden auf dem Bildschirm zurückgegeben.
Durch Eingabe von STRG A kehrt der Benutzer zur Monitorumgebung zurück.
2.23 SPUR
tr [<ADDR>][<COUNT>]
Mit dem Trace-Befehl kann der Benutzer den Zielcode verfolgen und
die Register beobachten, nachdem er die Befehlszeile ausgeführt hat. Wenn count
angegeben ist, führt der Mikroprozessor <COUNT> Anzahl von
Anweisungen aus, bevor er zur Überwachungsumgebung zurückkehrt. Die Verfolgung beginnt
mit der in der Befehlszeile aufgeführten <ADDR> oder mit dem aktuellen PC,
wenn keine <ADDR> enthalten ist. Der Trace-Befehl kann
durch Drücken eines Wagenrücklaufs fortgesetzt werden. Zum Beenden wird ein „.“ angezeigt. eingegeben werden müssen.
Anwendungsbeispiele:
tr ====> verfolgt 1 Anweisung vom aktuellen PC
tr :10 ====> führt 10 Anweisungen über den aktuellen PC hinaus aus und kehrt dann zur
Monitorumgebung zurück
tr 1000====> Verfolgt 1 Anweisung ab 1000 $
3.0 VERWENDUNG DES ONE-LINE-MONTAGE-/DEMONTAGEGERÄTS
3.1 EINFÜHRUNG
Im UBUG-Monitor ist ein Assembler-/Disassembler-Befehl enthalten
, der wie im vorherigen Abschnitt beschrieben ausgeführt werden kann. Mit diesem
Assembler/Disassembler kann der Benutzer den Zielcode ändern. Jede
vom Benutzer eingegebene Quellzeile wird an der
angezeigten Adresse in den Speicher eingegeben. Diese Zeile wird dann zerlegt, damit der Benutzer
den tatsächlich in den Speicher eingegebenen Code überprüfen kann. Wenn keine Änderung gewünscht wird,
bewegt ein <CR> den Benutzer zum nächsten Opcode im Speicher.
ACHTUNG: Dieser Assembler/Disassembler fügt keinen Code in das
Quellprogramm ein; es überschreibt lediglich den Speicher an dieser Stelle. Daher
kann ein Programm-Patch, der das Einfügen von Code erfordert, dadurch erreicht werden, dass
zunächst Code verschoben wird, um einen Einfügungsbereich freizugeben, und dann
in diesen Bereich eingefügt wird.
3.2 EINGABE UND ÄNDERN DES QUELLPROGRAMMS
Um Quellcode einzugeben und zu ändern, sollte der Befehl as
wie in Abschnitt 2.2 beschrieben ausgeführt werden (d. h. als <ADDR>). Dadurch
gelangt der Benutzer in die Assembler/Disassembler-Routine.
Tabelle 3.1 fasst die Befehle zusammen, die innerhalb dieser Routine ausgeführt werden können:
TABELLE 3.1 ASSEMBLER/DISASSEMBLER-UNTERBEFEHLE
Befehlsbezeichner
BACKUP <EXP> – <EXP>
ADVANCE <EXP> + <EXP>
BEENDEN .
HILFE ?
Schritt nach Wagenrücklauf
KONSTANTE DC #<EXP> DEFINIEREN
**Hinweis: Die Ausführung eines „?“ während im Assembler/Disassembler
das GERÄT zurückgegeben wird, das der Assembler/Disassembler unterstützt.
3.3 EINGABE EINER QUELLZEILE
Nach der Ausführung eines as <ADDR>-Befehls kehrt der Assembler/Disassembler
mit der Disassemblierung des an dieser Stelle gefundenen Codes zurück. Zu
diesem Zeitpunkt kann der Benutzer einen in Abschnitt 3.2 gezeigten Assembler-Befehl ausführen
oder die Quellzeile eingeben, die den angezeigten Quellcode ersetzen soll
. Bei der Eingabe der Quelle werden die standardmäßigen effektiven Adressierungsmodi von MOTOROLA
verwendet. Diese Modi sind unten in Tabelle 3.2 zusammengefasst:
TABELLE 3.2 EFFEKTIVE ADRESSIERUNGSMODI FÜR ASSEMBLER/DEMONTIERER
Effektive Adressierungsmodus-Syntax
Registrieren Sie Direct Dn
Adressregister direkt An
Adressregister indirekt (An)
Adressregister indirekt mit Postinkrement (An)+
Adressregister indirekt mit Predekrement -(An)
Adressregister indirekt mit Verschiebung (d16,An)
Adressregister indirekt mit Index (d8) (d8,An,Xn.SIZE*SCALE)
Adressregister indirekt mit Index (Basisdisp) (bd,An,Xn.SIZE*SCALE)
Speicher indirekt postindiziert ([bd,An],Xn.SIZE*SCALE,od)
Speicher indirekt vorindiziert ([bd,An,Xn.SIZE*SCALE],od)
PC indirekt mit Verschiebung (d16,PC)
PC indirekt mit Index (d8) (d8,PC,Xn.SIZE*SCALE)
PC indirekt mit Index (bd) (bd,PC,Xn.SIZE*SCALE)
PC-Speicher indirekt postindiziert ([bd,PC],Xn.SIZE*SCALE,od)
PC-Speicher indirekt Vorindiziert
([bd,PC,Xn.SIZE*SCALE],od) Absolute Short Address
(xxx).W
Absolute lange Adresse (xxx).L
Absolute Adresse xxx optimiert (bwl)
Sofortige Daten #xxx
Bei Verwendung der indizierten Modi POST oder PRE können Felder durch die Verwendung eines Kommas übersprungen werden. Ein Beispiel ist unten dargestellt:
Ex. andi #12,([,],,) ====> andi.b #$12,([$0,ZA0],ZD0.W*1,$0)
Weitere Beispiele für Quellzeilen sind unten aufgeführt:
Ex. ori.l #12,(a1) ====> ori.l #$12,(a1)
Ex. addq #1,(a1) ====> addq.b #$1,(a1)
Der Monitor verfügt nur über begrenzte Möglichkeiten zur Fehlerüberprüfung. Beispiele hierfür sind unten aufgeführt:
Ex. jmp (123).w ====> jmp ($123).W
**Hinweis: Bei der Ausführung kommt es zu einem Busfehler.
Ex. bsr (123) ====>
FEHLER 10:Unzulässige Durchflussänderung ===> bsr (123)
Hinweis: Die bsr-Anweisung prüft auf Unzulässigkeiten
Strömungsänderungen.
HINWEIS: Der Durchfluss darf nicht auf eine ungerade Adresse geändert werden.
Obere Ziffern von Daten werden NICHT abgeschnitten, wenn eine Nichtübereinstimmung zwischen Größe
und unmittelbaren Daten festgestellt wird, sofern die Option „Byte- oder Wortgröße“
ausdrücklich eingegeben wurde. Wenn die Option „Langgröße“ angegeben ist und die Daten
diesen Bereich überschreiten, werden die oberen Ziffern abgeschnitten.
Ex. addi.b #12345678,(a1) ====>
FEHLER 11: Fehler bei der sofortigen Daten-/Größenoption ===> addi.b #12345678,(a1)
Ex. addi.l #123456789,(a1) ====> addi.l #$23456789,(a1)
Ex. addi #123456789,(a1) ====> addi.l #$23456789,(a1)
(standardmäßig die lange Option)
abgeschnitten————–^
Bei Befehlen, deren Opword ein begrenztes Feld zum Speichern der unmittelbaren Daten enthält, werden die oberen Ziffern der Daten abgeschnitten . Beispiele hierfür sind
unten aufgeführt.
Ex. addq #10,(d0) =====> addq.b #$0,(d0)
Ex. trap #10 =====> trap #$0-Eingabe ist standardmäßig hexadezimal
Ex. Falle #&10 =====> Falle #$A
3.4 EINGABE VON CHANGE OF FLOW-ANWEISUNGEN
Da der Assembler/Disassembler keine Labels verwendet,
muss bei allen Anweisungen, die <label> als effektiven Adressierungsmodus verwenden, die
Verschiebung bestimmt werden. Wenn zunächst nicht bekannt, muss Platz für diese
Verschiebung reserviert werden, und dann muss der Benutzer zurückkommen und
die Verschiebung eingeben. Sobald die Verschiebung ermittelt wurde,
kann sie wie im folgenden Beispiel gezeigt eingegeben werden:
Ex. In diesem Beispiel ist bekannt, dass der Speicherort der Zielanweisung einer Verzweigung
100.000 $ beträgt und ein BRA an Speicherort 0 benötigt wird. Nachdem
„AS 0“ ausgeführt und die bei 0 gefundene Disassemblierung erhalten wurde,
könnte der Benutzer Folgendes eingeben:
BRA 100000 oder BRA (100000) oder BRA.l #ffffe
Der absolute Adressierungsmodus kann verwendet werden, wenn die Zieladresse einer
Verzweigung bekannt ist (wie in den ersten beiden Beispielen) oder die Verschiebung (letztes
Beispiel) kann im direkten Datenadressierungsmodus eingegeben werden.
ACHTUNG: In einigen Fällen kann es bei der Verwendung zu unerwarteten Ergebnissen kommen
Änderung von Flussanweisungen. Diese Fälle sind unten zusammengefasst
mit Beispielen.
Ex.
1 Wenn die degenerierte Schreibweise einer Verzweigungsanweisung verwendet wird (z. B. wenn
versucht wird, eine kurze Verzweigung zu verwenden, um zur folgenden Anweisung zu verzweigen),
baut der Assembler versehentlich diese .b-Option zusammen. Da die Verschiebung jedoch
Null ist, handelt es sich um einen .w-Opcode und der Disassembler
zeigt diese Tatsache dem Benutzer korrekt an.
$00004000 nein? bra.b ====> führt zu einer FALSCHEN Assembly
Ex. 2 Wenn der Benutzer versucht, eine Verzweigungsanweisung mit einer bestimmten Größe zu erzwingen
und die tatsächliche Verzweigung eine größere Verschiebung als
reserviert erfordert, gibt der Assembler eine Fehlermeldung aus: „ERR0R 16: OUT OF
DISPLACEMENT RANGE“ .
$00004000 nop ?bra.w (100000)
Eine
Möglichkeit, dies zu verhindern, besteht darin, keine Größenoption einzugeben. Dadurch
kann der Monteur die richtige Größe für die Verschiebung wählen.
3.5 EINGABE VON REGISTERN und REGISTERLISTEN
Der Befehl „Mehrere Register verschieben“ (movem) verwendet eine Registerliste als
effektive Adresse. Diese Liste kann auf folgende
Weise eingegeben werden:
Ex. a0 ====> einzelnes Adressregister
d3 ====> einzelnes Datenregister
a0-a3 ====> Reihe von Registern
a0-a3/a7 ====> Kombination der vorherigen Beispiele
a0-a7/d0-d7 ====> alle Register
Wenn Coprozessor-Unterstützung angegeben ist, werden die Gleitkommaregister registriert
kann wie folgt eingegeben werden:
Ex. fp0 ====> einzelnes Gleitkommaregister
fp0-fp2 ====> Reihe von Registern
fp0-fp3/fp7 ====> Kombination der vorherigen Beispiele
Viele der Befehle erfordern die Eingabe anderer Register als Daten-
oder Adressregister. Tabellen 3.3 zeigen Auflistungen der
verwendeten Register und der vom Assembler akzeptierten Abkürzungen:
TABELLE 3.3 68030-REGISTER (MMU-Register auf 68EC030 nicht verfügbar)
Namenssyntax
Benutzer-Stack-Pointer-USP
Statusregister SR
Zustandscoderegister CCR
Programmzähler-PC
Master Stack Pointer MSP
Interrupt-Stack-Pointer-ISP
Vektorbruchregister VBR
Quellfunktionscoderegister SFC
Zielfunktionscoderegister DFC
Cache-Kontrollregister CACR
Cache-Adressregister CAAR
CPU-Root-Pointer-Register CRP
Supervisor Root Pointer Register SRP
Übersetzungskontrollregister TC
Transparentes Übersetzungsregister 0 TT0
Transparentes Übersetzungsregister 1 TT1
MMU-Statusregister PSR
TABELLE 3.4 FLIEßPOINT-REGISTER (Verfügbar, wenn Coprozessor vorhanden ist)
Namenssyntax
Gleitkomma-Steuerregister FPCR
Gleitkomma-Statusregister FPSR
Gleitkomma-Inst. Adressregister FPIAR
Gleitkomma-Datenregister FP0-FP7
3.6 EINGABE/AUSWERTUNG VON FLIEßPOINT-SOFORTDATEN
Unmittelbare Gleitkommadaten müssen mit einem Dezimalpunkt
mit mindestens einer (1) Ziffer vor der Dezimalstelle eingegeben werden (auch wenn es sich
um eine „0“ handelt). Ex. 0,0012. Da der verwendete C-Compiler nicht auf der
vorgeschlagenen Entwurfsversion von ANSI C basierte, ist die Software nicht in der Lage,
das „Assemblieren“ erweiterter unmittelbarer Daten mit erweiterter
Genauigkeit durchzuführen. Der Monitor führt die korrekte Konvertierung bis zur doppelten
Genauigkeit durch und stellt dieses Ergebnis in ein erweitertes Format. Wenn der
verwendete Compiler den Typ „Long Double“ zulässt, sollte eine
Änderung des Typs der Variablen „Weight“ in der zulässigen
Routine (in der Datei asm68.c) von „Double“ in „Long Double“ hilfreich sein
die zusätzliche Präzision. Nachfolgend sind Beispiele für unmittelbare Gleitkommadaten aufgeführt
:
Ex. fmove.s #5.0,fp0 ====> fmove.s 1_400000_E_2,FP0
Das Format bei der Zerlegung ist ganzzahliges
Teil_Bruchfeld_E_Exponentenfeld, wobei die Bruchbits eine Gewichtung von
1/2, 1/4 usw. darstellen. von links nach rechts. Die Exponentenbits
stellen die unverzerrte Potenz dar, auf die 2 erhöht werden sollte. Eine Konvertierung in
eine Dezimalzahl kann durch die Auswertung von Folgendem erfolgen:
Ganzzahl + ausgewerteter Bruch x 2^Exponentenfeld
Im obigen Beispiel entspricht dies:
(1 + .25) x 2^2 = 5,0
HINWEIS: Der Monitor verwendet im Assembler den Rundungsmodus „Rundung gegen Null“, wenn er Gleitkomma-Sofortdaten zusammenstellt.
3.7 MMU-ANWEISUNGEN EINGEBEN (Nicht verfügbar beim 68EC030)
MMU-Anweisungen sollten NICHT mit einer Größenbeschreibung eingegeben werden. Der Assembler stellt standardmäßig die richtige Größe ein.
Ex. pmove (a0),tt1 ;assembliert
pmove.l (a0),tt1 ;assembliert trotz der Operation nicht
;ist eine lange Operation.