Maschinensprachemonitor
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 bzw. insbesondere deren Debugger 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 |
HESMON (HES MON 64) | 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[1] | 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[2] | 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"[3] |
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[4] |
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 |