Magic Disk 64

home to index to html: MD9002-UTILITIES-PMON.html
                 PMON                   
                ------                  
Ich erinnere mich noch zu genau  an  die
gute alte Zeit, es  mag  so  sieben  bis
acht Jahre her sein, als man  noch  auf-
trumpfen konnte,  wenn  man  die  Basic-
programmierung  des  VC-20  einigermaßen
beherrschte.                            
Heute  ist  das   alles   ganz   anders!
Jedermann kann  einen  Maschinensprache-
monitor bedienen, oder  weiß  zumindest,
daß ein Monitor nicht  immer  ein  Bild-
schirm sein muß.                        
Wir schließen uns dieser Welle voll  und
ganz  an,  und  haben  uns  aus   diesem
Grunde  entschloßen,  einen   Maschinen-
sprachemonitor    zu    veröffentlichen.
Doch  bevor  wir  zur   Befehlsübersicht
schreiten,  möchte  ich  einige   Vorab-
erklärungen leisten.                    
Alle  Zahlen  lassen  sich   hexadezimal
(ohne Kennzeichen  oder  auch  mit  vor-
rangehendem "$"),  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  Start-  bzw.
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 $1f bzw. $80 bis $9f
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,    X-    und    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 Drucker-
ausgaben (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üng-
liche  Adresse   geladen.   Das   zweite
Anführungszeichen bei dem Filenamen kann
dann  entfallen.  Grundsätzlich  erfolgt
eine Anzeige der Start- und  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 X- und Y-Registers  (XR,  YR),
des Statusregisters, sowohl  hexadezimal
(SR) als  auch  aufgeschlüsselt  in  die
einzelnen   Flaggen   (nv-bdizc),    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  HEX-  oder  die
Binärdarstellung  ändert  -  beides  ist
möglich.                                
S "name" sa  ea    speichert  den  ange-
gebenen Bereich unter dem Namen "name". 
T sa ea ad     überträgt  den  Speicher-
bereich  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-, Dezimal- und 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  Be-
fehl 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   
       $0d).                            
< <    erzeugt ein Formfeed (Blattvor-  
       schub) auf dem Drucker durch Aus-
       gabe des Codes $0c.              
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!