Menü: Tools → Debugger / Disassembler → Debugger / Disassembler
Mit Aufruf dieses Menüpunktes öffnest du eines der mächtigsten Programmierhilfswerkzeuges des Emu64, der Debugger / Disassembler. Der Debugger ermöglicht es einem Programmierer die verschiedenen Zustände von Registern und Leitungen beim Programmablauf anzusehen. Ein Disassembler wandelt den Maschinencode im RAM-Speicher in „Assembler“ um, wodurch man ein bereits fertiges und laufendes Programme besser, ja überhaupt erst lesen und verstehen kann.
Solche Funktionen werden von Programmierern zur Fehlersuche und zur Untersuchung von Programmabläufen benötigt. Hierbei sind Kenntnisse der C64 Hardware und Assemblerprogrammierung notwendig. Im Debugger / Disassembler Fenster kannst du wie in einem Assembler-Monitor ein Programm schreiben und sofort auf Herz und Niere testen. Der Debugger wird komplett intuitiv bedient und du musst keine Befehle auswendig lernen.
Dieses Fenster ist in 8 Teilbereichen aufgeteilt. Du kannst 5 weitere Informationsfenster öffnen und den Modus zwischen C64 & Floppy 1541 wechseln.
Im oberen Pull-Down Menü (A) wechselst du zwischen dem C64 - und 1541 Floppymodus. Beim Wechsel ändert sich dementsprechend die Anzeige. Mit den Knöpfen (G) und (H) klappst du Teilbereiche des Debuggerfensters zur besseren Übersicht ein- und auf. Über die Knöpfe (B), (C), (D), (E) und (F) zeigst du weitere kleine Fenster mit gesonderten Informationszuständen der Customs Chips VIC, SID, CIA 1, CIA 2 und IEC-BUS Leitungen an. Die einzelnen Fenster schließt du, indem du einmal auf (X) oben rechts im Fenster klickst.
Teilbereich (1) des Debuggerfensters
Entsprechend der Einstellung im Pull-Down Menü (A) C64 oder Floppy, werden die möglichen CPU Register angezeigt.
Die Register von PC bis SR lassen sich beliebig verändern. Sobald du mit der Maus eine Zahl hinter der Registerbezeichnung anklickst, wird ein Eingabefeld aktiv. Nun kannst du Werte als Dezimal-, Hexa-($) oder Dualzahl(%) eingeben. Eine Eingabe bestätigst du mit der Taste RETURN.
Den Status der einzelnen Flags des Status Registers wechselst du mit einem Klick auf deren LED.
Prozessorstatus - Register |
---|
N = Negativ |
V = Overflow |
/ = unbenutzt (sollte immer high sein) |
B = Break |
D = Dezimal |
I = Interrupt |
Z = Zero |
C = Carry |
Teilbereich (2) des Debuggerfensters
Dieser Bereich ist sehr interessant, wenn du ein Programm zyklengenau testen möchtest. Hier siehst du ganz genau was im nächsten Zyklus passiert. Ändern lässt sich hier nichts. Die LED „CPU Wait“ zeigt an, wenn die CPU vom VIC „betäubt“ wurde.
Der Micro Code ist eine Erfindung von mir, das bedeutet das jeder C64 Befehl aus sogenanntem Micro Code besteht. In jedem Zyklus wird ein Micro Code Befehl ausgeführt. Was der Micro Code dann macht steht im grünen Bereich.
Da im C64II (6510) und 1541-II (6502) unterschiedliche Prozessoren verwendet wurden, ändert sich bei einem Wechsel zwischen C64 und Floppymodus dementsprechend die Ausgabe der CPU Internen Register.
Teilbereich (3) des Debuggerfensters
Hiermit kannst du den Programmablauf steuern.
es wird genau ein Zyklus abgearbeitet
es wird genau ein Opcode ausgeführt
es wird das Programm ausgeführt, wobei alle Änderungen angezeigt werden.
Stoppt die Programmausführung
Über den Schieberegler kannst du einen Wert (Zyklus in Sekunden) zwischen 1 und 59901 einstellen, der Einfluss auf die animierte Ablaufgeschwindigkeit im Debuggerfenster hat.
Teilbereich (4) des Debuggerfensters
Entsprechend deines gewählten Modus werden die wichtigsten Leitungszustände zur CPU 6502 oder CPU 6510 (low oder high) angezeigt.
Teilbereich (5) des Debuggerfensters
In diesen Teilabschnitt des Debuggerfensters steht dir ein Disassembler zur Verfügung. Der angezeigte Speicherbereich wird als disassambly angezeigt.
In der ersten Spalte stehen die Speicheradressen, in der zweiten die Opcodes (illegale Opcodes werden rot dargestellt) und in der dritten Spalte steht der Inhalt (Wert / Adresse) des Opcodes.
Mit dem Schiebebalken kann du die Speicherbereichsansicht ($0000 bis $FFFF) verändern.
Mit den drei Eingabefeldern kannst du direkt Opcodes in den Speicher schreiben.
Im Fensterbereich des Disassembler / Assembler kannst du ein Kontexmenü aufrufen. Hierbei stehen dir folgende Funktionen zur Verfügung.
Liste ab…Anzeigen | Gib Speicheradresse an, ab welchem Punkt die Anzeige erfolgen soll. |
---|---|
Exportieren | Gib hier den Anfangs- und Endpunkt des Speichers an, der ausgewählte Bereich wird dann als Textdatei (TXT), C64 Programm (PRG) oder RAW Datei gespeichert. |
Anfang markieren | Hiermit setzt du den Anfangspunkt mit Übertrag zur Exportierung. |
Ende markieren | Hiermit setzt du den Endpunkt mit Übertrag zur Exportierung. |
Teilbereich (6) des Debuggerfensters
In diesen Teilabschnitt des Debuggerfensters kannst du per Kontexmenü Haltepunkte aktivieren bzw. deaktivieren. Wenn du eine Haltepunktmatrix hinzugefügt hast, kannst du die Werte durch anklicken auf den Zahlen verändern. Es wird ein Eingabefeld aktiv, in welchem du die Eingabe des Zahlenwertes mit der Taste RETURN bestätigt musst. Den Name des Haltepunktes kannst du ebenfalls frei wählen.
Teilbereich (7) des Debuggerfensters
Im Programm Counter Verlauf werden die letzten 100 PC Werte gespeichert. Auch in diesen Fensterabschnitt kannst du ein Kontexmenü öffnen, wobei sich die Exportierfunktion auf den Disassembler / Assembler Bereich bezieht.
Teilbereich (8) des Debuggerfensters
Der letzten Teilabschnitt des Debuggerfensters wartet mit einen Speichermonitor und weiteren Statusanzeigen auf. Die Statusanzeige wird nur im C64 Modus aktiv, ansonsten wird sie ausgeblendet. Über die Statusanzeige sind Lese- und Schreibzugriff auf RAM, LO-RAM, HI-RAM, Kernal-ROM, BASIC-ROM, Char-ROM und I/O Block sichtbar. Im Speicherbereich hast du die Möglichkeit Manipulationen vorzunehmen. In den beiden unteren Eingabefeldern kannst du Speicheradresse und Wert eingeben. Ist das Auswahlkästchen Auto Adresse aktiviert, wird nach einem Return Befehl im Wert - Eingabefeld die Adresse um eins erhöht. Ein Kontexmenü zum Exportieren von Speicherbereichen steht dir hier ebenfalls zur Verfügung. Der Speicherbereich wird mit Start- und Endadresse definiert und kann als Textdatei (TXT), C64 Programm (PRG) oder RAW Datei gespeichert werden.
Auswahlknopf (B) des Debuggerfensters
Leider steht die Funktion noch nicht zur Verfügung.
Zukünftig soll über ein extra Fenster der Status des Video Interface Chip sichtbar sein.
Auswahlknopf (C) des Debuggerfensters
Leider steht die Funktion noch nicht zur Verfügung.
Zukünftig soll über ein extra Fenster der Status des Sound Interface Device sichtbar sein.
Auswahlknopf (D) und (E) des Debuggerfensters
In einem C64 sind zwei CIA Bausteine eingebaut, die die meisten Ein- und Ausgabevorgänge steuern, sowie den internen Timer (Uhr) des Rechners enthalten. Sobald du den Knopf CIA1 oder CIA2 drückst, öffnet sich ein weiteres Fenster mit Informationen zu den entsprechenden CIA Chip. Es ist nicht möglich Werte oder Zustände über dieses Fenster zu ändern.
Auswahlknopf (F) des Debuggerfensters
Dieses Statusfenster aktivierst du, indem du den Kopf IEC BUS anklickst. Es werden die wichtigsten Leitungen des IEC Busses angezeigt. Sobald der C64 oder die Floppy nach außen eine der abgebildeten Leitungen nutzt, wird die LED aktiv und leuchtet grün.
Signalbezeichnung | Signalbeschreibung |
---|---|
DATA Serial Data In/Out | Die Daten werden auf dieser Leitung Bit für Bit nacheinander übertragen. Bei einem Byte wird zuerst das niederwertigste Bit 0 (LSB) und am Ende das höherwertige Bit 7 (MSB) übertragen. |
CLK Serial Clock In/Out | Dieses Signal ist der Zeittakt für die gesendeten Daten. Der Takt wird immer von dem Gerät erzeugt, das gerade sendet. Bei der steigenden Flanke wird vom Empfänger das Datenbit (DATA) übernommen. |
ATN Serial Attention In/Out | Wenn dieses Signal LOW ist und ein Byte gesendet wird, interpretieren die am seriellen Bus angeschlossenen Geräte dies als einen Befehl. Sobald der C64 das Signal auf Low legt, warten alle anderen Geräte am Bus auf eine Übertragung der Adresse (Gerätenummer). Das adressierte Gerät muss innerhalb einer festgelegten Zeit antworten, ansonsten nimmt der C64 an, dass das adressierte Gerät nicht vorhanden ist und gibt einen Fehler aus. Nach der Geräteadresse wird die Sekundäradresse gesendet, dabei bleibt die Leitung auf Low. Vor dem ersten „normalen“ Byte geht sie dann wieder auf High. |
Beim Aufruf des Debugger / Disassembler wird seit dem C64.dll Patch auf V4.32 im C64-Fenster die Rasterstrahlposition optisch dargestellt.
Emu64 Handbuch V4.xx Navigation
V4.xx: Inhaltsverzeichnis
Portal: old-archiv
Hilfetext für Emu64 bis Version 4.32.