Funkamateur 11/86 |
Müssen Computerprogramme anhand von hexadezimalen Listen
eingetippt werden, so können sich schon ein oder auch
mehrere Tippfehler einschleichen. Besonders bei umfangreicheren
Programmen ist das kaum auszuschließen.
Es kam auch schon öfter vor, daß sich durch
Programmierfehler Programme, die sich im RAM befanden, selbst
zerstören, indem sie Bytes überschreiben. In den beiden
Fällen reicht dazu bereits ein falsches Bit aus.
Es zu finden, kann manchmal der Suche nach der berühmten
Stecknadel im Heuhaufen gleichen.
Einige Nutzer des "AC1" haben diese Erfahrung z.B. vielleicht schon
beim Eintippen des "AC1"-Monitors oder
des RTTY-Programms gemacht. Manchmal lag der Fehler dann jedoch in der
Hardware und man hat stundenlang in
der falschen Richtung gesucht. Ein kleines Zusatzprogramm zum
"AC1"-Monitor kann ein Programm anhand einer
Prüfsumme auf seine Richtigkeit testen. Tippfehler lassen sich
dann mit Hilfe der Zeilenprüfbytes im
erweiterten Hexdump relativ schnell einkreisen, vorausgesetzt
natürlich, daß die Liste mit dem nachfolgend
vorgestellten Algorithmus erzeugt wurde.
Da anzunehmen ist, daß auch in der nächsten Zeit
Maschinenprogrammlisten im FUNKAMATEUR abgedruckt werden,
soll dieses Programm auch als Vorschlag für eine einheitliche Form
dienen. Damit es sich auch an andere
Rechnertypen schnell anpassen läßt, wird außer einer
hexadezimalen Liste auch das mit dem auf dem "AC1"
laufenden Assembler/Editor EDAS erzeugte vollständige
Assemblerlisting abgedruckt.
Die Prüfsummenberechnung basiert auf dem Prinzip der zyklischen
Redundanzkontrolle (CRC), wie sie z.B.
die kommerzielle Datenübertragung anwendet.
Auch der Schaltkreis U 856 D-SIO enthält einen
CRC-Generator/Überprüfer für die synchronen
Übertragungsprozeduren.
Das nachfolgend vorgestellte Programm gestattet es, beide im U 856 D
implementierte CRC-Polynome zu verwenden.
Es wurde das SDLC-Polynom P(x) = x16 + x12 + x5
+ 1 ausgewählt. Eine Prüfsumme,
die nur den 16-bit-Rest der Addition aller Bytes enthält und, wie
sie z.B. in [1] Verwendung
findet,
schied aufgrund der zu leichten Kompensationsmöglichkeiten
mehrerer Fehler aus.
Das Assemblerlisting der beiden Routinen ist in Tabelle 2 dargestellt. Daraus sind
auch die vom "AC1"-Monitor
verwendeten Unterprogramme zu entnehmen. Die Hexdumproutine entspricht
etwa der im "AC1"-Monitor verwendeten.
Zusätzlich wird je Zeile das Exklusiv-ODER über alle
Datenbytes gebildet und am Ende der Zeile als
Zeilenprüfbyte ausgegeben. Danach folgt die Routine zur
CRC-Berechnung, für die die in [2]
gegebene Abhandlung
die Grundlage lieferte. Sollte die Notwendigkeit bestehen, die
Prüfsumme nach dem CRC16-Polynom zu berechnen,
so sind dementsprechend nur die Anfangsinitialisierung und die Masken
in der Rückkopplung zu ändern. Auch die
anderen in [2] vorgestellten
CRC-Polynome lassen sich mit dieser Routine und den entsprechenden
Masken
implementieren. Damit die CRC-Berechnung auch ohne den Dump genutzt
werden kann, wurde sie ebenfalls mit einem
Kennbuchstaben versehen.
Bei Verwendung des "AC1"-Monitors sind beide Routinen relocatibel, das
heißt, nicht an einen bestimmten
Speicherplatz gebunden. Für das Assemblerlisting dient als
Startadresse 1F80H, damit die Routinen am oberen
Ende des statischen RAMs der Grundplatte ihren Platz finden. Ungeachtet
dessen, kann das Programm auf jede
beliebige Adresse oberhalb 1900H (bei "AC1") eingetippt oder mit dem
T-Befehl verschoben werden. Beide
Teilprogramme startet man, wie jeden Befehl im Monitor, mit
Kennbuchstaben und entsprechenden Argumenten.
Da der Monitor die Großbuchstaben C und D bereits nutzt, werden
die beiden Teilprogramme wie folgt mit den
entsprechenden Kleinbuchstaben gestartet.
Hexdump mit Zeilenprüfbyte und CRC-Berechnung;
d anfangsadresse endadresse 'CR';
CRC-Berechnung;
c anfangsadresse endadresse 'CR';
Zum besseren Eintippen und gleichzeitig als Beispielausdruck gibt Tabelle 1 den mit "d" erzeugten
Hexdump
dieser beiden Hilfsprogramme wieder. Abschließend sei bemerkt,
daß die CRC-Prüfung natürlich nicht unfehlbar
ist. Bei richtiger CRC-Prüfsumme dürfte jedoch nur sehr
selten trotzdem noch ein Fehler in dem damit
getesteten Bereich vorliegen.
In der nächsten Ausgabe folgt ein Speichertestprogramm für
den "AC1".
[1] | Roeckrath, L.: Komfort-Ausdruckprogramm ergänzt ZETBUG, Zeitschrift "mc", Heft 3/1982 |
[2] | Andrejsek, L.: Zyklisch redundanter Code mit dem
Mikroprozessor MHB 8080 A, Sdelovaci technika, Heft 2/1985 |
158 KByte | 210 KByte |
Tabelle 1 | Tabelle 2 |