Magic Disk 64

home to index to text: MD9002-UTILITIES-PMON.txt
                 PMON                   
                ------                  

Ich erinnere mich noch zu genau an die gute alte Zeit, es mag so sieben bis acht Jahre her sein, als man noch auftrumpfen konnte, wenn man die Basicprogrammierung des VC-20 einigermaßen beherrschte.
Heute ist das alles ganz anders!
Jedermann kann einen Maschinensprachemonitor bedienen, oder weiß zumindest, daß ein Monitor nicht immer ein Bildschirm sein muß.
Wir schließen uns dieser Welle voll und ganz an, und haben uns aus diesem Grunde entschloßen, einen Maschinensprachemonitor zu veröffentlichen.
Doch bevor wir zur Befehlsübersicht schreiten, möchte ich einige Voraberklärungen leisten.
Alle Zahlen lassen sich hexadezimal ( ohne Kennzeichen oder auch mit vorrangehendem "$"), dezimal ( Kennzeichen "|") oder binär ("%") angeben. Die Zahlen c000,$ c000,|49152 und %1100000000000000 sind also vollkommen indentisch.
Einzelne Bytes ($00 bis $ ff) können auch als ASCII-Zeichen mit vorrangehendem "'" eingegeben werden.' a entspricht also $41 . Alle Ausgaben erfolgen jedoch in hexadezimaler Schreibweise.
Die Befehle lassen sich sowohl ungeshiftet ( Kleinbuchstaben) als auch geshiftet ( Großbuchstaben) eingeben.
Während bei ungeshifteten Befehlen die Ausgabe nur auf dem Bildschirm erfolgt, wird sie bei großgeschriebenen Befehlen auch auf den Drucker geleitet, soweit dies möglich ist.
In der folgenden Befehlsübersicht sind Parameter, die weggelassen werden können, in {} eingeschlossen." Sa"," ea" und " ad" sind beliebige Adressen;" sa" und " ea" stehen für die Startbzw.
Endadressen eines Bereichs. Zu beachten ist hierbei, daß ein Bereich ( im Gegensatz zu den meisten anderen Monitoren) die Adresse " ea" einschließt.
Um z. B. den Bereich von $ c000 bis $ c073 zu speichern, sind genau die Werte anzugeben und nicht eine um 1 erhöhte Endadresse. Selbstverständlich hält sich auch der Befehl " L" an diese Regelung und gibt die Adresse des ersten und letzten Bytes aus.
Jetzt aber zur eigentlichen Anleitung:
A { sa { ea}} gibt den Speicherbereich von Adresse " sa" bis Adresse " ea" als ASCII-DUMP aus. Steuerzeichen im Bereich von $00 bis $1 f bzw.$80 bis $9 f werden invertiert dargestellt.
C sa ea ad vergleicht den Bereich von " sa" bis " ea" mit dem Bereich ab " ad" .
Unterscheiden sich die Bytes, so werden ihre Adressen, die Bytes selbst und eine Binärzahl ausgegeben. Diese Binärzahl ergibt sich aus einer EOR-Verknüpfung der beiden Bytes und gibt die Bits an, in denen sie sich unterscheiden.
D { sa { ea}} gibt den Bereich von " sa" bis " ea" disassembliert aus. Zur besseren Lesbarkeit des Listings wird nach den Befehlen BRK, JMP, RTS und RTI eine Trennzeile ausgegeben.
Hand in Hand ( . . . we stand! Hallo Seoul) mit dem Disassembler arbeitet ein kleiner Direktassembler. Er ermöglicht es, Assemblerprogramme abzuändern oder sogar einzugeben. Es gibt zwei Möglichkeiten, in den Assemblermodus zu gelangen: Durch Ändern einer Disassemblierten Zeile oder durch Eingabe von " : adresse: befehl", wobei " adresse" die Startadresse des Programms darstellt und " befehl" ein Assemblerbefehl ( wie z. B. lda #12) ist.
Eine eingegebene Zeile wird ( wie im Basic) mit < RETURN> abgeschlossen. Ist die Zeile fehlerhaft, so wird an der Fehlerstelle ein " ?" ausgegeben, ansonsten wird die Zeile übersetzt, formatiert ausgegeben und die nächstfolgende Adresse vorgegeben.
F sa ea by füllt den angegebenen Bereich mit dem Byte " by" .
G { ad} startet ein Programm ab Adresse " ad" bzw. ab dem aktuellen PC-Stand, wenn " ad" nicht angegeben ist.
Akkumulator, Xund Y-Register, Prozessor-Status, Stackpointer und Konfigurationsregister ($01 in der Zeropage) werden entsprechend den Angaben gesetzt, wie sie sich durch " R" ausgeben und ändern lassen.
H sa ea by { by} . .{ by} sucht in dem Bereich nach Auftreten des Bytes " by" .
Es können auch mehrere Bytes angegeben werden. Wird die Bytefolge gefunden, so wird ihre Adresse ausgegeben.
I by1{ by2} legt die Geräteadressen für Diskettenzugriffe ( byte #1) und Druckerausgaben ( Byte #2) fest. Ist ein Gerät bei Druckerausgaben nicht vorhanden, so erfolgt keine Fehlermeldung. Bei den Befehlen " L"," S"," KLAMMERAFFE" und "$" wird ein " ?" ausgegeben, wenn die Floppy fehlt.
L " name"{ ad} lädt ein Programm nach Adresse " ad" . Ist " ad" nicht angegeben, so wird das Programm an seine ursprüngliche Adresse geladen. Das zweite Anführungszeichen bei dem Filenamen kann dann entfallen. Grundsätzlich erfolgt eine Anzeige der Startund Endadresse.
M { sa { ea}} gibt den angegebenen Bereich als HEX-DUMP aus. Es erfolgt auch eine Darstellung als ASCII-Zeichen.
Die Darstellung erfolgt im allgemeinen mit 8 Byte pro Zeile. Erfolgt die Ausgabe auf dem Drucker, so werden jeweils 16 Byte ausgegeben. Diese Bytes, jedoch nicht die ASCII-Zeichen, lassen sich durch überschreiben ändern.
R gibt alle Register und Zeiger aus. Es erfolgt eine Anzeige des aktuellen Programmzählers ( PC), des Stapelzeigers ( SP), des Akkumulators ( AC), des Xund Y-Registers ( XR, YR), des Statusregisters, sowohl hexadezimal ( SR) als auch aufgeschlüsselt in die einzelnen Flaggen ( nvbdizc), als Binärzahl und das Konfigurationsregister ( CR) .
Es entspricht in seiner Funktion vollkommen der Speicherstelle $01 . Durch Verändern von " CR" läßt sich festlegen, welche Speicherbereiche behandelt werden.
Auch die Register lassen sich durch einfaches überschreiben ändern. Bei dem Prozessor-Status- Register ist es jedem freigestellt, ob er die HEXoder die Binärdarstellung ändert - beides ist möglich.
S " name" sa ea speichert den angegebenen Bereich unter dem Namen " name" .
T sa ea ad überträgt den Speicherbereich von " sa" bis " ea" in einen entsprechend großen Bereich " ad" ab.

X            kehrt in das Basic zurück. 

? ad {+/- ad} gibt in seiner einfachsten Form den angegebenen Wert als Hexadezimal-, Dezimalund Binärzahl aus. Es ist jedoch auch möglich, mehrere Zahlen zu addieren oder voneinander zu subtrahieren. Es erfolgt dann die Ausgabe des Ergebnisses.
" KLAMMERAFFE"{ Befehl} sendet einen Befehl an das Diskettenlaufwerk und gibt die Rückmeldung aus. Ist ein Befehl nicht angegeben, so erfolgt nur die Anzeige des Fehlerstatus.
$ gibt das Directory einer Diskette aus.
< gibt eine Leerzeile auf dem Drucker aus ( Ausgabe des Codes $0 d) .
<< erzeugt ein Formfeed ( Blattvorschub) auf dem Drucker durch Ausgabe des Codes $0 c.
PMON ist in drei Versionen auf dieser Diskette gespeichert: Einmal liegt PMON im Speicher ab $ c000 und wird mit SYS 49152 gestartet. Sollte dieser Bereich bereits belegt sein, so gibt es noch PMON $1000 und PMON $9000, die mit SYS 4096 bzw. SYS 36864 ins Leben gerufen werden.
( om)

Valid HTML 4.0 Transitional Valid CSS!