MONITOR$C000, MONITOR$8000 (Commodore)

Aus C64-Wiki
Zur Navigation springenZur Suche springen
MONITOR$C000, MONITOR$8000
Startbildschirm Monitor C000

Startbildschirm Monitor 0800
Verleger Commodore
Release 1982
Lizenz Vollversion
Plattform(en) C64, C128, Plus/4
Genre Maschinensprachemonitor
Steuerung Icon tastatur.png
Medien Icon disk525 1.png
Sprache(n) Sprache:englisch
Information Bestandteil des Commodore Assembly Development System Package

Der MONITOR$C000[1] und der MONITOR$8000[2] (auch bekannt unter MADS Monitor) sind Maschinensprachemonitore, die aus dem "Commodore Assembly Development System Package" von Commodore stammen. Sie werden an die in dem Dateinamen enthaltenen Speicherbereiche absolut geladen - also $C000 (49152) und $8000 (32768) - und umfassen ca. 4 KByte.

Bedienung[Bearbeiten | Quelltext bearbeiten]

Die Programmierer bevorzugen den Maschinensprachemonitor der an Speicheradresse 49152 liegt, da sich damit die Koexistenz mit BASIC leichter gestaltet. Dieser wird mit LOAD"MONITOR$C000",8,1 und dem Drücken von RETURN  geladen und mit SYS 49152 und dem Drücken von RETURN  gestartet. Die folgende Bildschirmanzeige zeigt dies an:


    **** COMMODORE 64 BASIC V2 ****

64K RAM SYSTEM  38911 BASIC BYTES FREE

READY.
LOAD"MONITOR$C000",8,1

SEARCHING FOR MONITOR$C000
LOADING
READY.
SYS49152

B*
  PC   SR  AC  XR  YR  SP
.;C03E 32  00  C3  00  F6
.

Der Maschinensprachemonitor wird in den Speicherbereich $C000 (49152) geladen und ist mit einem Aufruf über SYS 49152 einsatzbereit.

Analog dazu, optional mit der Abtrennung des Monitorbereichs von der Verwendung durch BASIC, wird der Maschinensprachemonitor MONITOR$8000 mit

POKE56,128:NEW
LOAD"MONITOR$C000",8,1

geladen und mit SYS 32768 gestartet.

Die Arbeitsweise beider Maschinensprachemonitore ist identisch, etwa vergleiche mit TEDMON, jedoch mit den zusätzlichen Befehlen I und N (siehe Befehle-Sektion), allerdings ohne V (Verify) und @ (Diskbefehle im C128-Fall).

Befehle[Bearbeiten | Quelltext bearbeiten]

Folgende Befehle kennen die Maschinensprachmonitore "MONITOR$C000" und "MONITOR$8000", die mit einem Erstbuchstabe bzw. Zeichen eingeleitet werden:

  • A - Eine Zeile Maschinencode assemblieren (Assemble).
    • A (Adresse) (Opcode Mnemonic) (Operand) - Beispiel: A 1200 LDX #$64
  • C - Bereich vergleichen (Compare)
    • C (Startadresse) (Endadresse) (Vergleichsadresse) - Beispiel: C C000 D000 0800
  • D - Disassembliert 6502-Code (Disassemble)
    • D (Startadresse) (Endadresse) - Beispiele: D FCE2 oder mit 2 Argumenten D C000 D000
  • F - Speicherbereich mit einem Byte füllen (Fill).
    • F (Startadresse) (Endadresse) (Byte) - Beispiel: F C000 D000 9C
  • G - Ausführung ab angegebener Speicheradresse starten (Go).
    • G (Adresse) - Beispiel: G C000 - Start eines Maschinenspracheprogramms an Speicheradresse $C000 (49152).
  • H - Suchen einer bestimmten Bytefolge im gesamten Speicherbereich (Hunt).
    • H (Startadresse) (Endadresse) (Daten) - Die Daten-Werte können Folgen von hexadezimalen Zahlen oder ASCII-Zeichen (Strings; Angabe mit angeführtem ') sein.
      Beispiele: H C000 D000 'WIKI oder H C000 D000 AB 6A FF
  • I - Speicherinhalt von ASCII-Zeichen anzeigen (Interrogate).
    • I (Startadresse) (Endadresse) - Beispiel: I C000 D000
  • L - Daten von Diskette oder Datasette in den Speicher laden (Load).
    • L"Dateiname"(,Gerätenummer) - Gerätenummer 1 für Datasette und 8 für Diskette - Beispiel: L"C64-WIKI",8
  • M - Hexadezimale Speicherinhalte numerisch anzeigen (Memory).
    • M (Startadresse) (Endadresse) - Wird die Endadresse nicht angegeben, wird nur der aktuelle Speicherbereich mit den ersten 8 Bytes angezeigt!
      Beispiele: M C000 D000 oder M 0800.
  • N - Absolute Referenzen eines Maschinenspracheprogrammes oder einer Tabelle nach Verschiebung automatisch anpassen (New locator).
    • N (Startadresse) (Endadresse) (Offset) (Vergleichswert1) (Vergleichswert2) W - wobei die folgende Parameter bedeuten:
      • Instruktionen (bzw. 16-Bit-Werte im Falle von Option W) im Bereich Startadresse bis Endadresse werden betrachtet.
      • Offset: Addiert diesen 16-Bit-Wert zu einem Operanden, wenn dieser im Bereich Vergleichswert1 bis Vergleichswert2-1 liegt.
      • Vergleichswert1: Alle 3-Byte-Instruktionen deren Operand größer oder gleich Vergleichswert1 und kleiner Vergleichswert2 ist, werden entsprechend dem Offset-Wert berichtigt.
      • Vergleichswert2: Obere Grenze des durch den Offset berichtigten Bereichs von Vergleichswert1 bis Vergleichswert2-1.
      • W: (optionaler) Parameter, statt Instruktionen geht der Befehl von einer 16-Bit-Wertetabelle (Word table) aus.
  • R - CPU-Register anzeigen (Registers).
  • S - Daten in einem Speicherbereich auf Diskette oder Datasette abspeichern (Save).
    • S"Dateiname",(Gerätenummer),(Startadresse),(Endadresse) - Gerätenummer 1 für Datasette und 8 für Diskette Beispiel: S"C64-WIKI",1,C000,D000
  • T - Speicherbereiche verschieben (Transfer).
    • T (Startadresse) (Endadresse) (Neue Startadresse) - Beispiel: T C000 D000 0800
  • X - Maschinensprachemonitor beenden (Exit).
    Die Version $8000 benötigt einen Reset, sofern man nicht vor dem Laden des Monitors, den BASIC-Speicher vom Ladebereich des Monitors abgetrennt hat, etwa mit POKE56,128:NEW
  • ; - Register ändern (von R-Befehl)
  • : - Speicherwerte ändern (von M-Befehl)
  • , - Disassemblerausgabe ändern (von D-Befehl)
  • ' - Speicherinhalt mit Zeichen ändern (von I-Befehl)

Hinweise: Alle Adressen (16-Bit-Werte) und Zahlenwerte (Byte-Werte) müssen als hexadezimale Zahlen in den jeweils gültigen Wertebereichen angegeben werden!

Bildschirmeditor[Bearbeiten | Quelltext bearbeiten]

Mit der Cursor-Tasten kann man nach oben und unten scrollen und erhält die entsprechenden Ausgaben zum jeweiligen Ausgabemodus (von D, I oder M).

Die Ausgaben der Befehle R, D, M, I erfolgen als entsprechende Befehle ";", ",", ":" und "'", welche im Bildschirmeditor bequem angesteuert und unmittelbar geändert werden können.


Erlaubte Opcodes[Bearbeiten | Quelltext bearbeiten]

Die beiden Maschinensprachemonitore kennen folgende Opcodes:[3]

  • ADC : Add with Carry to Accumulator
  • AND : "AND" to Accumulator
  • ASL : Shift Left One Bit (Memory or Accumulator)
  • BCC : Branch on Carry Clear
  • BCS : Branch on Carry Set
  • BEQ : Branch on Zero Result
  • BIT : Test Bits in Memory with Accumulator
  • BMI : Branch on Result Minus
  • BNE : Branch on Result not Zero
  • BPL : Branch on Result Plus
  • BRK : Force an Interrupt or Break
  • BVC : Branch on Overflow Clear
  • BVS : Branch on Overflow Set
  • CLC : Clear Carry Flag
  • CLD : Clear Decimal Mode
  • CLI : Clear Interrupt Disable Bit
  • CLV : Clear Overflow Flag
  • CMP : Compare Memory and Accumulator
  • CPX : Compare Memory and Index X
  • CPY : Compare Memory and Index Y
  • DEC : Decrement Memory by One
  • DEX : Decrement Index X by One
  • DEY : Decrement Index Y by One
  • EOR : Exclusive-Or Memory with Accumulator
  • INC : Increment Memory by One
  • INX : Increment X by One
  • INY : Increment Y by One
  • JMP : Jump to New Location
  • JSR : Jump to New Location, Saving Return Address
  • LDA : Transfer Memory to Accumulator
  • LDX : Transfer Memory to Index X
  • LDY : Transfer Memory to Index Y
  • LSR : Shift One Bit Right (Memory or Accumulator)
  • NOP : Do Nothing - No Operation
  • ORA : "OR" Memory with Accumulator
  • PHA : Push Accumulator on Stack
  • PHP : Push Processor Status on Stack
  • PLA : Pull Accumulator From Stack
  • PLP : Pull Processor Status From Stack
  • ROL : Rotate One Bit Left (Memory or Accumulator)
  • ROR : Rotate One Bit Right (Memory or Accumulator)
  • RTI : Return From Interrupt
  • RTS : Return From Subroutine
  • SBC : Subtract Memory and Carry From Accumulator
  • SEC : Set Carry Flag
  • SED : Set Decimal Mode
  • SEI : Set Interrupt Disable Status
  • STA : Store Accumulator in Memory
  • STX : Store Index X in Memory
  • STY : Store Index Y in Memory
  • TAX : Transfer Accumulator to Index X
  • TAY : Transfer Accumulator to Index Y
  • TSX : Transfer Stack Pointer to Index X
  • TXA : Transfer Index X to Accumulator
  • TXS : Transfer Index X to Stack Pointer
  • TYA : Transfer index Y to Accumulator

Weblinks[Bearbeiten | Quelltext bearbeiten]

Quellen[Bearbeiten | Quelltext bearbeiten]

  1. ftp://ftp.cbm8bit.com/programming/monitors/monitor_c000.prg Download Sprache:englisch, 4222 ($407C) Bytes lang, von $8000 bis 907C - tatsächlich scheint der Monitor selbst nur bis $8F9F zu reichen und weist am Ende überflüssigen Ballast auf.
  2. ftp://ftp.cbm8bit.com/programming/monitors/monitor_8000.prg Download Sprache:englisch, 4222 ($407C) Bytes lang, von $C000 bis D07C - tatsächlich scheint der Monitor selbst nur bis $CF9F zu reichen und weist am Ende überflüssigen Ballast auf, der hier die VIC-Register überschriebt und entsprechenden Nebenwirkungen in der Darstellung hervorrufen kann!
  3. Manual, Appendix IV: 6500 SERIES MICROPROCESSOR INSTRUCTION SET OPCODES, 1982, S.53/54