Funkamateur 11/86

 

Falsche Bytes - schnell gefunden

Dipl.-Ing. F. HEYDER - Y21SO

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".

Literatur

[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