ELITE-MON
Dieser Maschinensprachemonitor überbietet mit seinen 70 Befehlen einige
der bereits etablierten Monitore.
Er setzt sich aus zwei großen Teilbereichen zusammen: Der Maschinensprache- und der Diskettenmonitor!
A) ALLGEMEINES
Werden die folgenden Befehle " geshiftet" eingegeben, so erfolgt die Ausgabe
sowohl auf dem Bildschirm als auch auf
einem angeschlossenen Drucker:
d, m, ea, eb, ec, ed, es, eu, tw, hr, ha, hh, hi, ht, und hz.
Bei Kommandos mit zwei Buchstaben, darf
allerdings nur der erste " geshiftet" werden. Beispiele:
Ea cd00 d000 Tw e716 B) DIE FUNKTIONEN:
Alle Adressen, die bei der Befehlsbeschreibung in Klammern stehen, können
auch weggelassen werden.
Wenn bei einem Ausgabebefehl die Endadresse nicht angegeben wird, so wird
$ ffff vorausgesetzt. Werden keine
Adressen angegeben, so entspricht die
Anfangsadresse dem Inhalt der Speicherzellen $ fb und $ fc. Die Endadresse
ist in einem solchen Fall immer $ ffff.
Drückt man während der Ausführung eines
Ausgabekommandos " Run/ Stop", so befindet
man sich wieder im Eingabemodus.
Mit Space wird jeweils die nächste Zeile
angezeigt. CTRL verlangsamt und eine
beliebige andere Taste unterbricht die
Ausgabe solange, bis wieder eine Taste
gedrückt wird.
Datassettenbesitzer können die Gerätenummer mit " i" auf 01 stellen und diese
Version speichern. Dies gilt auch bei
" p" und "+" .
Die Funktionsweise des Diskmonitors:
Alle Sektoren werden durch Job-Codes
gelesen, geschrieben und verglichen.
Jede Diskoperation initialisiert das
Laufwerk. Nach den Operationen werden
die Rückmeldungen der Job-Codes ausgegeben. Ist ein Sektor eingelesen, so
steht er ab $0300( erster Puffer) im
Floppy-RAM ( noch nicht im Rechner!) .
Der Diskmonitor überprüft nicht, ob ein
Sektor zulässig ist.
Die Bedeutungen der Rückmeldungen:
01 - kein Fehler (ok). 02 - 20er Read Error 03 - 21er Read Error 04 - 22er Read Error 05 - 23er Read Error 07 - Verify Error 08 - Write Protect on 09 - 27er Read Error 0a - 28, Write Error 0b - Disk ID Mismatch 0f - Drive not ready 10 - 24, Read Error Dezimale Adressangaben bei den Ausgabe- befehlen (m, d, e...):
Bei den verschiedenen Ausgabebefehlen
und bei " g" kann die erste Adresse auch
dezimal angegeben werden. Als Endadresse
wird dann $ ffff angenommen.
Das Kennzeichen für eine Dezimalzahl ist
'#' . Dieses Zeichen muß vor jeder
Dezimalzahl stehen. Beispiele:
m #49152 ea #2304 es #828 g #64738
Der Monitor gibt ein Fragezeichen
aus, falls eine falsche Eingabe gemacht
wurde, oder ein Fehler anderer Art
auftritt. Die Befehle müssen nicht
unbedingt in der ersten Bildschirmspalte
stehen.
C) BEFEHLSBESCHREIBUNG
a aaaa ( ASSEMBLE)
Nach der Eingabe befindet man sich im
Assemble-Modus. Jetzt lassen sich alle
Assembler-Befehle benutzen.
Einzelne Bytes ( z. B. illegale OP-Codes) können mit vorangehendem Punkt eingegeben werden. Beispiel:0900 .0 c
Auch die Verwendung von einfachen Labels
( Markierungen) ist möglich.
Syntax: mHexzahl von 00 bis 20 .
Beispiel: bcc m01 . . m01 ldy#ff
Diese Markierungen können bei den
Branch-Befehlen und bei JMP verwendet
werden. Durch Betätigung der RETURN
Taste ist der Cursor am Zeilenanfang.
Jetzt kann die Adresse, bei der fortgefahren werden soll, überschrieben
werden. Die Eingabe des "$"- Zeichens
zur Markierung einer Hexzahl ist nicht
erforderlich.
Bei den Immediate-Befehlen gibt es
folgende Möglichkeiten zur Eingabe:
lda #($)41 - Hexzahl lda "a - ASCII Code lda %.*.....* - Binärzahl
Der Assemble-Modus kann mit " x" ver- lassen werden. Dann wird der programmierte Teil disassembliert ausgegeben.
b aaaa eeee ( BASIC-DATA)
Wandelt den Speicherblock $ aaaa bis
$ eeee in Datazeilen um. Dabei werden
möglichst viele Datas in eine Zeile geschrieben.
Nach der Durchführung befindet man
sich im Basic-Editor. Die Umwandlung
läßt sich durch längeres Drücken der
CTRL Taste abbrechen.
c aaaa bbbb cccc dddd eeee ( CONVERT)
Verschiebt das Programm zwischen $ aaaa
und $ bbbb nach $ cccc und paßt die
absoluten und relativen Sprünge zwischen
$ dddd und $ eeee an.
Alle Sprungziele werden also voll automatisch verändert.
Würde sich beim Verschieben ein relativer Sprung ergeben, der nicht
möglich ist, so wird die Adresse dieses
Befehls angezeigt. Falls man versucht
hat, einen Teil des ROMs zu verlagern, so wird ein Fragezeichen ausgegeben.
d ( aaaa)( eeee)( DISASSEMBLE)
Disassembliert den angegebenen Bereich
mit Ausgabe der Hex-Werte.
Wenn ein illegaler OP-Code auftaucht, wird zusätzlich das ASCII Zeichen
ausgegeben. Nach einem RTS, JMP, RTI
und BRK wird zur besseren Übersicht
eine Leerzeile eingefügt. Die
Assemblerbefehle können überschrieben
werden. Dabei verschwindet das Komma am
Anfang der Zeile ( zur Kontrolle) .
ea (aaaa) (eeee) (EDIT ASCII CODES)
Gibt jeweils 32 ASCII-Zeichen pro Zeile
aus, die im Gegensatz zu " m" überschrieben werden können. Mit diesem Be- fehl können Texte leichter eingegeben
werden. Bei unerwünschten Codes . . .
( Siehe " m" !)
eb (aaaa) (eeee) (EDIT BILDSCHIRMCODES)
Es werden 32 Bildschirm-Codes je Zeile
angezeigt. Diese können im Gegensatz zu
" eu" überschrieben werden.
Gibt man einen Edit-Befehl mit einem
unzulässigen zweiten Buchstaben ein, so
wird dieser als " b" interpretiert.
ec (aaaa) (eeee) EDIT CHARACTERS:
Gibt jeweils eine Binärzahl pro Zeile
aus. Dadurch können Zeichensätze sichtbar gemacht und verändert werden.
Für ein gesetztes Bit wird ein "*", für ungesetztes ein Punkt ausgegeben.
ed ( aaaa)( eeee)( EDIT DECIMAL)
Zeigt den angegebenen Bereich mit acht
Dezimalzahlen je Zeile an.
Diese Zahlen können auch überschrieben
werden. Dabei dürfen die Werte aber
niemals größer als 255 sein! Bei der
Eingabe endet eine Zahl beim ersten
nichtnumerischen Zeichen.
es ( aaaa)( eeee)( EDIT SPRITE)
Zeigt drei Binärzahlen pro Zeile an.
Damit werden Sprites sichtbar und können
verändert werden. Der Monitor wird also
zu einem einfachen Spriteeditor!
eu ( aaaa)( eeee)( EDIT ÜBERSICHTLICH)
Bei " eu" werden 40 Bildschirm-Codes pro
Zeile angezeigt. Man kann aber nur bei
" eb" überschreiben.
Mit diesem Befehl werden ganze Bildschirme unverzerrt wiedergegben.
f hh aaaa eeee ( FILL)
Füllt den Speicherbereich von $ aaaa bis
$ eeee mit der Hexzahl hh.
g ( aaaa)( GO)
Startet ein Maschinenprogramm ab der
Adresse $ aaaa. Dabei werden alle Registerinhalte übergeben. Fehlt die
Adresse, so startet der Befehl " g" bei
der Adresse, die im Programmzähler ( PC) steht. Befindet sich am Ende des
Programms ein BRK, so meldet sich der
Monitor mit der Registeranzeige.
Mit RTS gelangt man wieder in den Basic-Editor. Die Adresse kann auch dezimal
angegeben werden.
ha aaaa eeee xxxx ( HUNT ABSOLUT)
Sucht von $ aaaa bis $ eeee nach absoluten
Befehlen ( jsr, jmp, lda. . .), die $ xxxx
im Operanden haben. Ein Joker (=" ?") ist bei allen h-Befehlen voll einsetzbar.
Die gefundenen Befehle werden
disassembliert ausgegeben. Beispiele:
ha c000 d000 e716 ha c000 d000 d???
Die Ausgabe auf dem Bildschirm kann
mit irgendeiner Taste angehalten werden.
Mit RUN/ STOP gelangt man wieder in die
Eingabeschleife. Dies gilt bei allen
HUNT-Befehlen.
hh aaaa eeee 11 22 33 44 55 (HUNT-HEX)
Gibt alle Adressen aus, bei denen die
Hexzahlenfolge im angegebenen Bereich
vorliegt. Es darf nach maximal 16 Hexwerten gesucht werden. Beispiel:
hh c900 cde3 ea ? ? ea
hi aaaa eeee xx ( HUNT IMMEDIATE)
Sucht alle Immediate-Befehle ( z. B. :
lda #00), im Bereich von $ aaaa bis
$ eeee, die " xx" im Operanden haben.
hr aaaa eeee xxxx ( HUNT RELATIV)
Spürt alle relativen Sprünge, die $ xxxx
anspringen im angegebenen Bereich auf.
Der Monitor achtet dabei nicht darauf, ob ein Sprung möglich ist.
Das hat den Vorteil, daß die Adressen
nicht genau angeben werden müssen.
ht aaaa eeee ( HUNT TEXTE)
Zeigt alle Tabellen und Texte ( was nicht
als Assemblerbefehl erkannt wird) im
Bereich von $ aaaa bis $ eeee in
disassemblierter Form an.
hz aaaa eeee xx ( HUNT ZEROPAGE)
Spürt alle Zeropage-Adressierungen im
Bereich von $ aaaa bis $ eeee auf, die" xx" im Operanden haben.
i xx ( I/ O-GERÄT) stellt Gerätenummer des Speichermediums
ein.
o ( OLD)
Holt den letzten Ausgabebefehl
( d, m, ea, es . . .) zurück und zeigt ihn
an. Dies ist sehr nützlich, wenn man
sich z. B. eine Routine noch einmal anansehen möchte, aber nicht mehr weiß, wo
sie beginnt. Der Befehlstring wird dabei
ab $0217 gespeichert.
k Überschrift ( KOPF)
Gibt alles was hinter " k" steht
( einschließlich Leerschritte) als
Überschrift ( Kopf) auf den Drucker aus
( maximal 40 Zeichen) .
l " filename"( aaaa)( LOAD)
Lädt ein File vom vorher definierten
Datenträger an die Adresse $ aaa.
Fehlt die Adresse, so wird ", x,1" geladen.
Dabei werden keine Basic-Zeiger verändert.
Tritt irgendein Fehler auf, dann gibt
der Monitor ein Fragezeichen aus. Dies
gilt auch bei " v" .
m ( aaaa)( eeee)( MEMORY)
Gibt den Speicherinhalt von $ aaaa bis
$ eeee mit jeweils acht Hex-Byte und den
dazugehörigen ASCII Zeichen pro Zeile
aus.
Änderungen sind durch Überschreiben der
Hexzahlen möglich. Die angegebenen Werte
werden in die entsprechenden Speicherstellen geschrieben und anschließend mit
diesen verglichen.
Tauchen Werte auf, die beim Drucken ein
Chaos erzeugen würden ( z. B. : Bildschirm
löschen), so wird nur ein Punkt auf
Papier gebracht.
n lllll ( NUMBER OF LINE)
Stellt die erste Zeilennummer zum Erzeugen der Data-Zeilen auf " lllll" um. Sie muß dezimal angegeben werden!
p xx ( PRINTER-SET)
Legt die Geräteadresse des Druckers auf
" xx" .
q ( QUIT)
Führt einen Systemreset aus ( SYS 64738) .
Ein eventuell vorhandener Resetschutz, wird aber wahrgenommen.
r ( REGISTER)
Zeigt die Register und Flags an. Sie
lassen sich durch Überschreiben ändern.
Die Binärzahl ( Flag) kann nicht überschrieben werden. Dies muß beim Statusregister geschehen.
Bedeutung: Abkürzung: PC Programcounter n Negativ Flag z Zero-Flag SR Statusregister v Overflow Flag c Carry-Flag AC Akkumulator ? nicht belegt XR X-Register b BRK Flag YR Y-Register d Dezimal Flag SP Stackpointer i Interrupt Flag
s " name" aaaa eeee ( SAVE)
Speichert den Bereich von $ aaaa bis
$ eeee unter dem Namen " name" ab.
tb xx aaaa ( TRACE BREAK)
Setzt bei $ aaaa einen Haltepunkt für
" tq" ." tq" wird unterbrochen, nachdem
$ aaaa " xx"- mal durchlaufen wurde.
tq aaaa ( TRACE QUICK)
Schnellschrittmodus, startet ein Programm bei $ aaaa und läuft bis zum
mit " tb" voreingestellten Punkt. Dann
befindet man sich im Einzelschrittmodus. Dieser Befehl arbeitet natürlich
nicht in Echtzeit!
ts aaaa ssss ( TRACE STOP)
Startet ein Programm bei der Adresse$ aaaa und bricht bei der Adresse $ ssss
mit der Registeranzeige ab.
Das Programm wird dabei in Echtzeit
durchlaufen. Jetzt kann evtl. mit " g" oder " tw" fortgefahren werden. Dieser
Befehl arbeitet allerdings nur im RAM, weil an der Endadresse ein BRK-Point
gesetzt wird.
tu uuuu aaaa ssss ( TRACE USER)
Durchläuft ein Programm ab $ aaaa und
unterbricht es bei $ ssss ( siehe " ts") .
Nach dem Erreichen der Adresse $ ssss
wird in das User-Programm ab $ uuuu
gesprungen. Hier können jetzt verschiedene Speicherstellen überprüft
werden.
tw ( aaaa)( xxxx)( TRACE WALK)
Startet ein Programm bei $ aaaa." tw" wartet nach jedem ausgeführtem Befehl
auf einen Tastendruck und zeigt die Registerinhalte und Flags an. Mit der
RUN/ STOP-Taste kann der Einzelschrittsimulator unterbrochen werden.
Wird die Adresse $ xxxx angegeben, so
wird zusätzlich nach jedem Befehl eine
Hexdump-Zeile mit der Anfangsadresse
$ xxxx ausgegeben ( sog. Hot-Spots) .
Dadurch können verschiedene Speicherzellen überwacht werden. Mit " j" können Unterprogramme schnell abgearbeitet werden. Fehlt jedoch die
Startadresse, so beginnt tw beim PC.
u aaaa bbbb cccc dddd eeee ( UMRECHNEN)
Rechnet alle absoluten Adressen im Bereich von $ dddd bis $ eeee, die sich
auf den Bereich von $ aaaa bis $ bbbb beziehen, auf $ cccc um.
Es geht noch weiter, aber vorher müssen
Sie im Menü den nächsten Teil der
Anleitung aufrufen, der hier leider keinen Platz mehr hat. . .