Funkamateur 01/87

 

"AC1" im Schrittbetrieb

P. PIETSCH

In diesem Beitrag wird ein kleines Ergänzungsprogramm für den "AC1"-Monitor vorgestellt, das bei der Programmtestung eine schrittweise Abarbeitung des Anwenderprogramms ermöglicht. Es wurde softwaretechnisch realisiert und nimmt auf die "AC1"-Monitor-Grundversion bezug.
Die in den "AC1"-Monitor integrierte Breakpunktlogik weist trotz ihrer Leistungsfähigkeit in der Praxis einige kleine Nachteile auf, da sie auf folgendem Prinzip basiert: Nach der Aktivierung des Breakpunktes wird bei der Abarbeitung des E-(execute)- oder G-(go on)-Befehls die entsprechende Breakpunktadresse mit dem Systemruf "CALL BREAKPUNKT (CDDF06H)" beschrieben. Daraus ergibt sich die erste Einschränkung, das Anwenderprogramm muß in einem RAM untergebracht sein. Die Testung von Programmen auf ROMs ist nicht möglich, da o.g. Systemruf nicht in dem ROM geschrieben werden kann.
Normalerweise wird nach Erreichen des Breakpunktes durch die Breakpunktroutine der geänderte Speicherinhalt wieder rekonstruiert, in dem die Breakpunktadresse mit dem ursprünglichen Speicherinhalt beschrieben wird, und die Kontrolle dann wieder an den Monitor zurückgeht. Wird aber durch Programmfehler der Breakpunkt nicht erreicht (z.B. durch ein "Festfahren" des Programms, falsch angegebene Sprungdistanzen, das Setzen des Breakpunktes auf eine Adresse, die nicht das erste Byte eines Befehls ist oder eine Fehlerausschrift), so wird vorerst die Rekonstruktion des geänderten Speicherinhalts unterbunden. Diese kann nun nur noch durch den Wiederaufruf des korrigierten (!) Programms mittels des J-Befehls, bis der Breakpunkt erreicht wird, oder durch einen direkten Breakpunktansprung (J - Breakpunktadresse) mit allen Konsequenzen, die sich aus der weiteren Programmabarbeitung mit u.U. fehlerhaften Registerinhalten usw. ergeben können, erreicht werden. Anderenfalls zerstört jede weitere Benutzung des B-, E-, G- oder I-Befehls das Anwenderprogramm, das dann manuell korrigiert werden muß.
Außerdem ist die Benutzung des Breakpunktes in Programmschleifen mit sehr viel Eingabeaufwand verbunden, da für jeden Schleifendurchlauf zwei verschiedene Breakpunkte verwendet werden müssen. Das Setzen eines Breakpunktes auf einen gerade gearbeiteten Breakpunkt ist nicht möglich! Somit ist zumindest die Breakpunktbenutzung für kleine Breakpunktentfernungen bei häufiger Breakpunktbenutzung unkomfortabel. Der nachfolgend beschriebene Schrittbetrieb vermeidet die o.g. Nachteile.

1. Prinzip

Der Schrittbetrieb arbeitet mindestens einen (maximal 256) Befehle des Anwenderprogramms ab und wird softwaretechnisch in Verbindung mit dem CTC-IS, Kanal 0, realisiert. Nach Aufruf des Schrittbetriebs durch den Monitor wird CTC 0 als Zeitgeber mit Interrupterlaubnis initialisiert. Nach Einschreiben der Zeitkonstante wird in das Anwenderprogramm gesprungen. Noch vor Beendigung des ersten Anwenderbefehls meldet der CTC seinen Interrupt an, so daß nach Beendigung jenes Befehls in die CTC-Interruptroutine gesprungen wird. Diese trägt die Registerinhalte in die RSA des Monitors ein und springt nach einigen Korrekturen im Normalstack in die Breakpunktroutine des Monitors. Damit wurde genau ein Befehl des Anwenderprogramms abgearbeitet.

2. Realisierung

Das in Tabelle 1 abgedruckte Listing wurde für den RAM-Bereich 1880H...18E8H des "AC1" geschrieben. Es ist prinzipiell ROM-fähig und nach Änderung der Speicherplätze 18A8H und 18A9H für den Startpunkt der Interruptserviceroutine CTC 0 in andere Speicherbereiche verschiebbar. Tabelle 2 zeigt die vom Schrittbetrieb verwendeten RSA-Bereiche sowie die im Monitor verwendeten Einsprungpunkte. Das ist bei eventuellen Änderungen des "AC1"-Monitorprogramms zu beachten.

3. Betrieb

Der Aufruf des Schrittbetriebs erfolgt wie auch im restlichen Monitorprogramm über einen Kennbuchstaben nach der Form 00 09 XX 0D. Der Autor benutzt dazu das Zeichen "@", da es (beim Autor) dicht neben der CR-Taste liegt und somit ein schnelles Arbeiten ermöglicht. Natürlich ist die Benutzung jedes anderen Zeichens, soweit vom Monitor nicht belegt, möglich (Adresse l882H). Die Eingabe einer eventuellen Anfangsadresse kann über den Breakpunktbefehl B aaaa erfolgen.
Schrittbetrieb und Breakpunktlogik arbeiten mit dem gleichen RSA-Inhalt und können bei der Programmtestung abwechselnd benutzt werden, d.h., nach Erreichen eines Breakpunktes kann im Schrittbetrieb weitergearbeitet werden, danach kann wieder ein Breakpunkt aktiviert und mittels G (go on) ab der letzten Schrittbetriebsadresse bis zum Breakpunkt gearbeitet werden. Die Anzeige der Registerinhalte erfolgt wie gewohnt mittels R.
Wird dem Kennbuchstaben für den Schrittbetrieb ein maximal zweistelliges Argument nachgestellt (@ aa), so werden aa Befehle des Anwenderprogramms abgearbeitet, bevor die Kontrolle an den Monitor zurückgeht. Dabei werden @ 00 oder @ Leerzeichen wie @ 01 interpretiert. Zur besseren Unterscheidung von Breakpunkt und Schrittbetrieb wird dem normalen BREAK AT aaaa des Breakpunktes ein STEP vorangestellt (STEPBREAK AT aaaa).
Bei der Benutzung des Schrittbetriebs ist zu beachten, daß eine Testung von Programmen, die den CTC 0 benutzen, nicht möglich ist. Gleichermaßen ist die Abarbeitung von anwendereigenen Interruptroutinen nur erschwert möglich (IM2, I-Reg = l8H) und ein im Schrittbetrieb abgearbeiteter DI-Befehl blockiert dessen Funktion. Derartige Situationen lassen sich aber mit der Breakpunktlogik effektiv testen.

4. Erfahrungen

Dieser Schrittbetrieb wird bei der Programmtestung genutzt. In Verbindung mit der Breakpunktlogik hat er sich als eine leistungsfähige Testmöglichkeit erwiesen, speziell in Programmen, die viele Daten miteinander verknüpfen und die stark ineinander verschachtelte Schleifen besitzen. Auch die Möglichkeit, mehrere Befehle "in einem Ritt" abzuarbeiten, ist sehr von Nutzen.

5. Zwei Bemerkungen zum Monitor

Wem bei Verwendung des Kassetteninterface die sechs Buchstaben, die zur Namensgebung eines Files vorgesehen sind, nicht ausreichen, der kann durch Beschreiben der Adressen 02D7H und 039AH mit der gewünschten Buchstabenanzahl (hexadezimal!) die Bandfiles mit mehr Buchstaben kennzeichnen, z.B. 16 (10H) oder noch mehr. Die Namensgebung wird dadurch übersichtlicher und einfacher. An der Kompatibilität zu anderen Aufzeichnungen ändert sich dadurch nichts. Monitorprogramme ohne diese Änderung zeigen weiterhin nur sechs Buchstaben an, andersherum füllen geänderte Monitore die überschüssigen Stellen mit @ auf. Alle auf der Kassette befindlichen Daten werden einwandfrei erkannt.
Trotz der nochmaligen Überprüfung des "AC1"-Monitorprogramms durch die Autoren hat es sich als nicht fehlerfrei erwiesen. Weist bei der Benutzung des F-(find string)-Befehls das erste gesuchte Byte der gesuchten Bytefolge dasselbe Bitmuster wie das Byte auf der Adresse FFFFH auf und wird die gesuchte Bytefolge nicht gefunden, so erkennt das Suchprogramm das Ende des adressierbaren Speicherbereiches nicht und beginnt die Suche immer wieder von vorn. Der Monitor bekommt die Kontrolle nicht mehr zurück und das System ist nur noch mit einem Reset zu befreien. Die sich ergebenden Änderungen sind in Tabelle 3 dargestellt.

Literatur

[1] Heyder, F.: Der Amateurcomputer "AC1", Teil 12,
FUNKAMATEUR 34 (1985), H.1, S.42
[2] Heyder, F.: Der Amateurcomputer "AC1", Beitragsfolge 1 bis 12,
FUNKAMATEUR 32, 33, 34 (1983 bis 1985)
[3] Kieser/Meder: Mikroprozessortechnik,
VEB Verlag Technik, Berlin 1985, 3. Auflage
[4] Bedienungsanleitung "LC 80", 1. Ausgabe November 1984,
VEB Mikroelektronik "Karl Marx" Erfurt, S.20

66 KByte 44 KByte 29 KByte
Tabelle 1 Tabelle 2 Tabelle 3