Magic Disk 64

home to index to text: MD9111-UTILITIES-ELITE_MON.txt
               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. . .

Valid HTML 4.0 Transitional Valid CSS!