Maschinensprachemonitor

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Begriffsklärung Der Titel dieses Artikels ist mehrdeutig. Monitor (Begriffsklärung).


Ein Programm zum Betrachten, Auslesen oder Bearbeiten des Speichers eines Computers wird Monitor genannt (angemerkt sei, dass es auch z.B. Monitore für Datenträger gibt, sog. "Diskmonitore"). Monitore werden auch insbesondere zum Anzeigen und Modifizieren von Maschinensprache-Programmen genutzt und enthalten typischerweisen einen einfachen (Dis-)Assembler, der Maschinensprache bzw. Binärcode in die leichter verständliche Assemblerdarstellung überführen kann.

Ein Monitor stellt die Speicherbelegung normalerweise als Hexadezimalzahlen dar (z.B. $C000, $FF, $A), beherrscht aber häufig auch weitere Darstellungsmöglichkeiten wie Dezimal- und Dualzahlen (auch Oktalzahlen, aber seltener) oder auch Sprite- oder PETSCII-Darstellung.

Es gibt Maschinensprachemonitore, die entweder zusätzlich über Steckmodule (z.B. in der Final Cartridge 3, Action Replay) bzw. nach dem Einladen von Diskette oder Datasette (z.B. MLM64 Plus aus INPUT 64) verfügbar gemacht werden können, oder bereits fest im ROM vorhanden sind, siehe Implementierungen. Ein Spezialfall sind Monitore, die in Emulatoren eingebaut sind, siehe Einschränkungen.

Funktionsumfang[Bearbeiten | Quelltext bearbeiten]

Der Vorteil bei den nicht "eingebauten" Maschinensprachemonitoren ist, dass sie oft komfortabler zu bedienen sind als die computerinternen und einen erweiterten Funktionsumfang aufweisen. Als Standardfunktionen findet man oft:

  • CPU-Zustand (Register, Flags etc.) anzeigen und ändern.
  • Programm an einer gewünschten Adresse ausführen.
  • Anzeigen und Ändern von Speicherbereichen, typischerweise in verschiedenen Formaten (als Hexdump, PETSCII, Sprite-Daten etc.)
  • Abspeichern von Speicherbereichen bzw. das Laden von Daten in einen Speicherbereich auf ein bzw. von einem Massenspeicher.
  • Speicherbereich mit Wert/Muster/Zeichenfolge füllen.
  • Wert/Muster/Zeichenfolge in einem Speicherbereich suchen.

Zu den erweiterten Funktionen zählen:

  • Disassemblieren/assemblieren in der entsprechenden Assemblerdarstellung der CPU.
  • Breakpoint in Maschinencode setzen und verarbeiten.
  • Tracing/Singlestepping von Maschinencode-Programmen.
  • Verschieben von Speicherbereichen.
  • Verschieben von Maschinencode mit Anpassung der absoluten Referenzen des dort befindlichen Programms (Program Relocation).
  • Suche nach Verwendung von Adressen bzw. Adressbereichen in einem Programm.
  • Maschinencodebefehle/-sequenz in bestehendes Programm einfügen bzw. daraus entfernen (mit Anpassung der absoluten Referenzen).
  • Zahlenkonversionen
  • Berechnung von arithmetischen und logischen Ausdrücken.
  • Ein-/Ausgabefunktionen für Drucker und Massenspeicher bzw. Floppy-Befehle.
  • BASIC-Vektoren oder BASIC-Programme reparieren/korrigieren.
  • Sprite-Funktionen

Einschränkungen[Bearbeiten | Quelltext bearbeiten]

Normale Monitore sind einigen Einschränkungen unterworfen, so lässt sich z.B. ein Programm, das im Grafikmodus läuft, nicht debuggen, da der Monitor den Textmodus benötigt. Auch etliche andere in Programmen benutzte Techniken (eigene Interrupts etc.) sind problematisch, und nicht zuletzt gerät beim Debuggen das Timing des jeweiligen Programms komplett durcheinander. Das Debugging von Rasterzeilen-Interrupts oder Schnelllader-Routinen ist deswegen unmöglich. Die in Emulatoren wie VICE eingebauten Monitore haben diese Probleme nicht und können teilweise neue Funktionalität anbieten, zum Beispiel einen 100%igen Freeze des aktuellen Rechnerzustands (dump bzw. undump in VICE), was sie zu einem sehr mächtigen Werkzeug werden lässt, während normale Monitore in der Praxis von mäßigem Nutzen wenigstens bei der Analyse von Programmen sind.

Implementierungen[Bearbeiten | Quelltext bearbeiten]

Während im BASIC V2 kein Maschinensprachemonitor eingebaut ist, inkludiert Commodore ab BASIC 3.5 einen entsprechenden Maschinensprachemonitor namens TEDMON, der mit dem BASIC-Befehl MONITOR oder mit SYS 1024 aufgerufen wird. Für den PET und spätere CBM-II-Serie existiert der Maschinensprachemonitor TIM, der allerdings erst ab der CBM20xx-Serie (noch nicht bei den Modellen, die als PET bezeichnet wurden) fest im ROM verankert wurde.

Name Typ Aufruf
(aus BASIC oder via Tastatur)
Quelle
Action Replay Steckmodul MON oder F8  Steckmodulhersteller
EMON Steckmodul, zum Nachladen (4 KByte) SYS 49152
(für Version beginnend an Adresse $C000)
Print-Technik
Final Cartridge 3 Steckmodul MON oder F2  Steckmodulhersteller
Help, Help Plus Steckmodul, zum Nachladen Befehl "]" Steckmodulhersteller
HES Mon 64[1] Steckmodul, zum Nachladen (4 KByte) SYS 49152
(für Version beginnend an Adresse $C000)
HES
Autor: Terry Peterson
MADS-Monitor zum Nachladen (4 KByte) SYS 32768 (für Version beginnend an Adresse $8000)
SYS 49152 (für Version beginnend an Adresse $C000)
Commodore, 1982
MLM64 Plus zum Nachladen (4 KByte) SYS 49152
(für Version beginnend an Adresse $C000)
INPUT 64, März 1985
MON-64 TIM-Clone zum Nachladen (1 KByte) SYS 49187
(für Version beginnend an Adresse $C000)
mc Zeitschrift, Okt. 1983
RAT MON 64 zum Nachladen (4 KByte)
inkl. Code-Relokation und -Manipulation
SYS 49152
(für Version beginnend an Adresse $C000)
CHIP Magazin, Jan. 1984
SMON zum Nachladen (4 KByte)
inkl. Trace-Funktionen, Code-Relokation, optionalem Disk-Monitor
SYS 49152
(für Version beginnend an Adresse $C000)
64'er Magazin, Feb. 1985
Speed-DOS Alternativ-ROM,
nur Basisfunktionalität
F2  Umbausatzhersteller
SuperMon64[2] zum Nachladen (kleiner 4 Kbyte),
kompatibel zu TIM und TEDMON
SYS 49152
(für Version beginnend an Adresse $C000)
Compute! Magazin Issue 32, Jan. 1983, p. 162
Autor: Jim Butterfield
Supermon+64[3] muss vorher geladen werden (weniger als 3 Kbyte, unterhalb von $A000),
kompatibel zu TIM und TEDMON
erstmalig RUN bzw. später mit SYS 8 The Transactor: Transactor Disk 9
Autor: Jim Butterfield
SUPERMON64.V1 zum Nachladen,
kompatibel zu TIM und TEDMON
Erstmalig mit LOAD+RUN, erneut mittels SYS 38893 Bestandteil der "Commodore Programmer's Utitities"[4]
TEDMON ROM MONITOR
(BASIC 3.5, 7.0)
Commodore
TIM ROM, zum Nachladen (1 KByte) SYS ... (verschieden je nach Modell) Commodore
ZOOM
Super Maschine Language Monitor for the CBM 64
zum Nachladen (4 KByte: $C000 bis $CFFF)
inkl. Trace-Funktion, Code-Relokation
SYS 49152 Supersoft
Autor: J. Owen, England, 1983[5]

Implementierungen für andere Umgebungen[Bearbeiten | Quelltext bearbeiten]

Angepasste Monitorprogramme, die direkt auf einem modifizierten C64 (z.B. Turbokarte mit anderer CPU, z.B. 65816) lauffähig sind und die erweiterten Eigenschaften unterstützen oder völlig außerhalb einer C64-Hardware laufende Monitorprogramme typischerweise in der Umgebung eines Emulators:

Name Beschreibung Verwendung Quelle
Jamaicamon (Jammon) Monitor für den Native-Modus einer 65816-CPU.
Basiert ursprünglich auf SuperMon
inkl. Trace- und Monitoring-Funktionen, Code-Relokation.
SuperCPU
mit Anpassung auch andere 65816-Turbokarten
Autor: Stephen L. Judd
Source-Code und Dokumentation auf ffd2.com
SuperMon64 Zum Nachladen SuperCPU
Zum Nachladen, Aufruf (aus dem Emulationsmodus): SYS 28672
für Variante bei Adresse $7000
Compute! Magazin, Issue 32, Jan. 1983, Page 162 von Jim Butterfield
Adaptierter Source-Code auf ffd2.com
VICE-Monitor Im Emulator integrierter Monitor für alle emulierten Plattformen (auch SuperCPU). Aufruf via Tastatur:
ALT +M 
ALT +H 
Siehe VICE-Weblinks

Referenzen[Bearbeiten | Quelltext bearbeiten]