MONITOR$C000, MONITOR$8000 (Commodore)
MONITOR$C000, MONITOR$8000 | |
---|---|
| |
Verleger | Commodore |
Release | 1982 |
Lizenz | Vollversion |
Plattform(en) | C64, C128, Plus/4 |
Genre | Maschinensprachemonitor |
Steuerung | |
Medien | |
Sprache(n) | |
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
- A (Adresse) (Opcode Mnemonic) (Operand) - Beispiel:
- C - Bereich vergleichen (Compare)
- C (Startadresse) (Endadresse) (Vergleichsadresse) - Beispiel:
C C000 D000 0800
- C (Startadresse) (Endadresse) (Vergleichsadresse) - Beispiel:
- D - Disassembliert 6502-Code (Disassemble)
- D (Startadresse) (Endadresse) - Beispiele:
D FCE2
oder mit 2 ArgumentenD C000 D000
- D (Startadresse) (Endadresse) - Beispiele:
- F - Speicherbereich mit einem Byte füllen (Fill).
- F (Startadresse) (Endadresse) (Byte) - Beispiel:
F C000 D000 9C
- F (Startadresse) (Endadresse) (Byte) - Beispiel:
- G - Ausführung ab angegebener Speicheradresse starten (Go).
- G (Adresse) - Beispiel:
G C000
- Start eines Maschinenspracheprogramms an Speicheradresse $C000 (49152).
- G (Adresse) - Beispiel:
- 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
oderH C000 D000 AB 6A FF
- H (Startadresse) (Endadresse) (Daten) - Die Daten-Werte können Folgen von hexadezimalen Zahlen oder ASCII-Zeichen (Strings; Angabe mit angeführtem ') sein.
- I - Speicherinhalt von ASCII-Zeichen anzeigen (Interrogate).
- I (Startadresse) (Endadresse) - Beispiel:
I C000 D000
- I (Startadresse) (Endadresse) - Beispiel:
- 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
- L"Dateiname"(,Gerätenummer) - Gerätenummer 1 für Datasette und 8 für Diskette - Beispiel:
- 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
oderM 0800
.
- M (Startadresse) (Endadresse) - Wird die Endadresse nicht angegeben, wird nur der aktuelle Speicherbereich mit den ersten 8 Bytes angezeigt!
- 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.
- N (Startadresse) (Endadresse) (Offset) (Vergleichswert1) (Vergleichswert2) W - wobei die folgende Parameter bedeuten:
- 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
- S"Dateiname",(Gerätenummer),(Startadresse),(Endadresse) - Gerätenummer 1 für Datasette und 8 für Diskette Beispiel:
- T - Speicherbereiche verschieben (Transfer).
- T (Startadresse) (Endadresse) (Neue Startadresse) - Beispiel:
T C000 D000 0800
- T (Startadresse) (Endadresse) (Neue Startadresse) - Beispiel:
- 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 mitPOKE56,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]
- Bedienungsanleitung: "COMMODORE 64 MACRO ASSEMBLER DEVELOPMENT SYSTEM" in Kapitel 9 bei project64.c64.org
- Bedienungsanleitung: "COMMODORE 64 MACRO ASSEMBLER DEVELOPMENT SYSTEM" als PDF bei lyonlabs.org
- D64-Image des "COMMODORE 64 MACRO ASSEMBLER DEVELOPMENT SYSTEM" bei lyonlabs.org
Quellen[Bearbeiten | Quelltext bearbeiten]
- ↑ ftp://ftp.cbm8bit.com/programming/monitors/monitor_c000.prg Download , 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.
- ↑ ftp://ftp.cbm8bit.com/programming/monitors/monitor_8000.prg Download , 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!
- ↑ Manual, Appendix IV: 6500 SERIES MICROPROCESSOR INSTRUCTION SET OPCODES, 1982, S.53/54