TEDMON

Aus C64-Wiki
Zur Navigation springenZur Suche springen
TEDMON auf dem C128.

Der ab BASIC 3.5 eingebaute Maschinensprachemonitor TEDMON wird entweder durch den BASIC-Befehl MONITOR, SYS 1024 oder durch SYS 45056 (beim C128) oder mit gedrücktem RUN/STOP  beim Einschalten oder Reset aufgerufen.
Er ist u.a. in den Heimcomputersystemen C16/116, C128/D/DCR und Plus/4 integriert (vergleiche dazu MONITOR$C000, MONITOR$8000 (Commodore) beim C64!).

Ebenso lässt sich der Monitor mit dem BRK-Opcode über den BREAK-Vektor aufrufen, was bei der Registeranzeige mit BREAK angezeigt wird. Dies kann zum einen als Einstieg von BASIC aus via SYS-Befehl (auf eine beliebige Adresse die 0 enthält) oder zum anderen für Debugging-Zwecke verwendet werden. Der Monitor sieht keine besonderen Befehle für Haltepunkte oder schrittweise Befehlsabarbeitung vor. Dies muss gegebenenfalls mit dem temporären Setzen eines BRK-Opcodes (0-Byte) manuell erfolgen.


Registerzeile[Bearbeiten | Quelltext bearbeiten]

Nach dem Aufruf meldet er sich z.B. mit folgender Meldung:

BASIC 3.5 (C16)
MONITOR
 
    PC SR AC XR YR SP
; 0004 30 00 00 00 F6


BASIC 7.0 (C128)
MONITOR
    PC  SR AC XR YR SP
; FB000 00 00 00 00 F8


Die Anzeigen, auch hier Registerzeile genannt, bedeuten dabei folgendes:

Alle Zahlen werden in hexadezimaler Form angezeigt.

Maschinensprachemonitor-Befehle[Bearbeiten | Quelltext bearbeiten]

TEDMON auf dem Plus/4.
TEDMON auf dem C128 im 80 Zeichenmodus.

Folgende Befehle stehen bei dem eingebauten Maschinensprachemonitor zur Verfügung:

  • A - Assembliert (engl. assemble) eine Mnemonics-Zeile in den entsprechenden Maschinencode.
    • A <Adresse> <Befehl> [<Operand>]
    • Zahlen bei Operanden brauchen ein führendes $-Zeichen, auf einem C128 kann das aber weggelassen werden oder im entsprechenden Zahlensystem angegeben werden.
    • Beeenden mit einer Leereingabe (nur RETURN )
  • C - Vergleicht (engl. compare) zwei Speicherbereiche und zeigt die Unterschiede an.
    • C <Startadresse> <Endadresse> <Start Vergleichsadresse>
  • D - Disassembliert (engl. disassemble) eine Maschinencode-Zeile in entsprechenden Mnemonic (Klartext-Befehl).
    • D [<Startadresse> [<Endadresse>]]
  • F - Füllt (engl. fill) Speicherbereiche mit angegebenen Byte auf.
    • F <Startadresse> <Endadresse> <Byte>
  • G - Startet (engl. go) ein Maschinenspracheprogramm an der angegebenen Startadresse.
    • G <Adresse>
  • H - Durchsucht (engl. hunt) Speicherbereich nach einen bestimmten Wert und zeigte alle gefundenen Speicherstellen an.
    • H <Startadresse> <Endadresse> <Daten> (Daten können hexadezimale Zahlen getrennt durch Leerzeichen oder Zeichenkette mit vorgestellten Apostroph (') sein).
  • J - Nur C128: Springt (engl. jump to subroutine) in ein Maschinenspracheunterprogramm an der angegebenen Adresse. Im Unterschied zu G gelangt nach Ausführung des Befehls, bei der Rückkehr aus dem Unterprogramm mittels RTS, die Kontrolle wieder zum Monitor.
    • J <Adresse>
  • L - Lädt (engl. load) eine Programmdatei von Diskette oder Datasette in den Speicher.
  • M - Zeigt den angegebenen Speicherbereich (engl. memory) in hexadezimaler Darstellung an.
    • M [<Startadresse> [<Endadresse>]] (werden die Adressen weggelassen, so werden nur die ersten 12 Zeilen angezeigt).
  • R - Zeigt die aktuelle Registerzeile (engl. registers) wieder an.
  • S - Speichert (engl. save) den angegebenen Speicherbereich als Programmdatei auf Diskette oder Datasette.
    • S "<Dateiname>",<Geräteadresse>,<Anfangsadresse>,<Endeadresse+1>
  • T - Verschiebt (engl. transfer) bzw. kopiert einen Speicherbereich in einem anderen.
    • T <Anfangsadresse> <Endadresse> <Start Zieladresse>
  • V - Vergleicht (engl. verify) ein Programm von Diskette oder Datasette im Arbeitsspeicher.
    • V "<Dateiname>",<Geräteadresse($1-$F)>,<Anfangsadresse beim C128>
  • X - Beendet (engl. exit) den Monitor und man gelangt wieder in den BASIC-Direktmodus.
  • > - Modifiziert ein bis acht Bytes ab einer bestimmten Speicherzelle (nach M-Befehl).
    • > <Adresse> <Byte1> <Byte2> ... <Byte8>
  • . - Gleiche Wirkung wie der A-Befehl.
  • ; - Ändert die Registerinhalte (nach R-Befehl).
  • @ - Nur C128: Anzeige des Diskettenlaufwerksstatus oder Aufruf eines Diskettenbefehls.
    • @[Geräteadresse($8-$F)][,[ Floppy-Befehl ]]
      Standardgeräteadresse ist 8.

Es wird kein Prompt angezeigt, lediglich der blinkende Cursor zeigt die Eingabebereitschaft an.
Bei einer falschen Eingabe (unbekannter Befehl) wird ein Fragezeichen ? ausgegeben.

Zahlensysteme[Bearbeiten | Quelltext bearbeiten]

Beim Maschinensprachemonitor des C128 können durch die Angabe bestimmter Vorzeichen alternative Zahlensysteme genutzt werden. Standardmäßig wird das hexadezimale Zahlensystem verwendet:

Adressen[Bearbeiten | Quelltext bearbeiten]

Normalerweise sind 4-stellige Hexadezimalzahlen in Verwendung, die den 64-KByte-Adressraum abdecken.

Beim C128 mit bis zu 16 Bänken (siehe auch BASIC 7.0 Kommando BANK für weitere Details) zu je 64 KByte werden 5-Stellig Hexadezimaladressen verwendet. Das führende Nibble gibt die jeweilige Speicherbank an:

Bank Zugriff auf
0 RAM 0
1 RAM 1
2 RAM 2
3 RAM 3
4 INT ROM, RAM 0, I/O
5 INT ROM, RAM 1, I/O
6 INT ROM, RAM 2, I/O
7 INT ROM, RAM 3, I/O
8 EXT ROM, RAM 0, I/O
9 EXT ROM, RAM 1, I/O
A EXT ROM, RAM 2, I/O
B EXT ROM, RAM 3, I/O
C KERNAL + INT (lo), RAM 0, I/O
D KERNAL + EXT (lo), RAM 0, I/O
E KERNAL + BASIC, RAM 0, CHARROM
F KERNAL + BASIC, RAM 0, I/O