ELITE-MON ---------
Dieser Maschinensprachemonitor über- bietet mit seinen 70 Befehlen einige der bereits etablierten Monitore. Er setzt sich aus zwei großen Teil- bereichen zusammen: Der Maschinen- sprache- 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 Befehlsbe- schreibung in Klammern stehen, können auch weggelassen werden. Wenn bei einem Ausgabebefehl die End- adresse nicht angegeben wird, so wird $ffff vorausgesetzt. Werden keine Adressen angegeben, so entspricht die Anfangsadresse dem Inhalt der Speicher- zellen $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äte- nummer 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 aus- gegeben. 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 eingege- ben werden. Beispiel: 0900 .0c 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 fort- gefahren 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 pro- grammierte Teil disassembliert ausge- geben. b aaaa eeee (BASIC-DATA) Wandelt den Speicherblock $aaaa bis $eeee in Datazeilen um. Dabei werden möglichst viele Datas in eine Zeile ge- schrieben. 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 auto- matisch 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" über- schrieben 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 sicht- bar 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 Bild- schirme 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 Re- gisterinhalte ü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 an- ansehen 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" ge- laden. 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 Speicher- stellen 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 Er- zeugen 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 über- schrieben werden. Dies muß beim Status- register 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 Pro- gramm bei $aaaa und läuft bis zum mit "tb" voreingestellten Punkt. Dann befindet man sich im Einzelschritt- modus. 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 ver- schiedene 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 Einzelschritt- simulator 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 Speicher- zellen überwacht werden. Mit "j" können Unterprogramme schnell abge- arbeitet werden. Fehlt jedoch die Startadresse, so beginnt tw beim PC. u aaaa bbbb cccc dddd eeee (UMRECHNEN) Rechnet alle absoluten Adressen im Be- reich von $dddd bis $eeee, die sich auf den Bereich von $aaaa bis $bbbb be- ziehen, 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...