Single-Step für VC 20
»Single-Step« soll bei Maschinenprogrammen zum Aufdecken von Fehlern beitragen. Anfängern erlaubt es ein schnelleres Einfühlen in die Wirkungsweise der Maschinenbefehle.
Das Programm ist für den Commodore VC 20 mit mindestens 8 KByte Speichererweiterung geschrieben (ein entsprechendes Programm für den C64 finden Sie im 64’er Stammagazin). Es ist ein DATA-Listing einer Maschinenspracheroutine. Über Zeile 9 des Listings läßt sich die gewünschte Startadresse festlegen; die Basic-Schleife ab Zeile 300 korrigiert absolute Sprungadressen. Hierzu wurden bei der Programmerstellung die absoluten Zieladressen so eingestzt, als stünde das Programm ab Adresse 0 im Speicher. Der Basic-Teil sorgt dafür, daß die Startadresse (ss) als Offset berücksichtigt wird.
Nach einmaligem Starten läßt sich die Maschinenspracheroutine mit SYS ss starten, der Basic-Teil kann demnach gelöscht werden, sollte aber sicherheitshalber vorher abgespeichert werden.
Für die Bedienung des Programmes stehen die Funktionstasten F1, F3 und F5 zur Verfügung. Ein Beispiel soll den Ablauf verdeutlichen (Tabelle):
Zunächst startet man »Single-Step« mit SYS ss, es erscheint dann die Überschrift mit Bezeichnung der einzelnen Bildschirmspalten und der ersten, übersetzten Zeile. Nun kann man über F3 in den Editier-Modus gelangen, es lassen sich sämtliche dargestellte Register und Flags ändern. Dazu fährt man mit dem Cursor einfach an die entsprechende Stelle und tippt die gewünschten Werte ein. Im Editier-Modus wird nun der PC (Programm-Counter) so geändert, daß er auf die Startadresse der eigenen Routine zeigt (hier im Beispiel ist dies die Adresse $ 4000). Durch Betätigen der Taste F1 wird der hier abgelegte Befehl ausgeführt. Der PC zeigt dann auf die Startadresse des nächsten Befehles, PSW (Programm Status Word, auch Flag-Register genannt),A,X und Y sind entsprechend verändert. (Im Beispiel wurde der Akku mit den Daten #00 geladen). Jede weitere Betätigung der Funktionstaste F1 bringt einen weiteren Befehl zur Ausführung.
Jetzt noch eine Anmerkung zu Manipulationen im PSW (Flag-Register): Durch Ändern einzelner Flags lassen sich zum Beispiel Schleifen vorzeitig beenden oder, wie im Beispiel in Zeile 16 geschehen, auch verlängern; das Zero-Bit wurde zurückgesetzt, was die CPU durch einen weiteren relativen Sprung auf Adresse $ 4000 quittieren mußte.
Weiterhin lassen sich unter Benutzung des PSW, genauer des I-Flags, Breakpoints im Programm setzen. Es ist nicht immer nötig das Programm schrittweise von Anfang bis Ende zu untersuchen. In solchen Fällen setzt man zu Beginn des interessierenden Teiles den Befehl CLI ein. Es genügt nun im Editiermodus das I-Flag zu setzen und mit F1 den nächsten Schritt zu starten. Das Programm wird erst wieder nach Abarbeiten des CLI- und des darauffolgenden Befehles angehalten.
Die Taste F5 dient zum Ausstieg aus der »Single-Step«-Routine. Ein Betätigen dieser Taste hat die gleiche Wirkung wie Stop/Restore, das heißt es wird eine teilweise Neuinitialisierung und ein Sprung zum Basic-Warmstart durchgeführt.
Abschließend noch eine Anmerkung zur Wirkungsweise:
Ich benutze hier den Timer 1 des VIA 6522 (versatile interface adapter) in der Betriebsart »One-Shot«. Diese läßt sich über das ACR (auxiliary control register) definieren. Der Timer erzeugt jetzt nach jedem Start einen einzelnen Interrupt. Durch geeignete Wahl des Timer-Zählerstandes kann erreicht werden, daß nach jedem Rücksprung aus der Interruptroutine mittels RTI jeweils ein Befehl des zu untersuchenden Programmes ausgeführt wird und darauffolgend die weitere Ablaufsteuerung wieder von der Interruptroutine übernommen wird. Im ersten Hauptteil der Routine »Single-Step« hole ich dann die interessierenden Daten vom Stack und stelle sie auf dem Bildschirm dar. Vor dem Rücksprung mittels RTI wird dann im zweiten Teil die eventuell geänderte Zeile wieder eingelesen und übersetzt.
(Hermann Weißenberger / ev)