Im Magazin „CHIP SPECIAL", „Besser programmieren" von 1987, wurde der folgende Artikel abgedruckt.
Ein einfaches Programm zum Manipulieren auf Diskettenbasis1.

Diskzap, der Diskettendoktor unter CP/M Plus

Haben Sie schon einmal aus Versehen ein wichtiges Programm gelöscht ?

Dieses Programm ermöglicht es Ihnen, auf einer Diskette einzelne Sektoren zu lesen, zu editieren und zu schreiben. Doch bei letztgenannter Möglichkeit sollten Sie besondere Vorsicht walten lassen, da Sie sehr schnell wichtige Daten zerstören können. Damit Ihnen das nicht passiert, folgt eine kleine Befehlsübersicht:

tx:Spurnummer x
sy:Sektornummer y
r:Sektor in den Puffer lesen
w:Puffer auf Diskette schreiben
+:Sektornummer um eins erhöhen
-:Sektornummer um eins erniedrigen
d:Puffer auf Bildschirm ausgeben
e:Puffer editieren
lm:Laufwerk m auswählen
q:Programm beenden

Pro Zeile ist immer nur ein Befehl möglich. X und y werden dezimal, und m aus A..P angegeben. Die Spur-und Sektornummer werden auf ihre Grenzen Überprüft und notfalls nach unten oder oben korrigiert. Beim Schreiben muß man nicht unbedingt vorher den Sektor lesen. Dies ermöglicht das Kopieren von Blöcken. Dabei ist jedoch nicht sofort ersichtlich, welche und wieviel Sektoren beim Schreiben verändert werden. Beim Erniedrigen bzw. Erhöhen der Sektornummer wird ein Übertrag auf die nächste Spur berücksichtigt. Außerdem wird der Sektor automatisch eingelesen und angezeigt, vorausgesetzt es ist kein Lesefehler aufgetreten. Wird m beim Auswählen des Laufwerks nicht angegeben, so wird A angenommen.

Der Disketten-Editor

Jetzt kommt das Wichtigste: Der Editor zum Verändern des Sektors !

Sie können dabei beliebig auf dem Bildschirm mit Ihrem Cursor herumwandern und mal hier und mal dort ein Byte oder ein Zeichen verändern. Dafür gibt es zwei verschiedene Modi. Wir nennen sie den Ascii- und den Byte-Modus. Zwischen beiden kann man mit Control-C hin und her springen.

Der Cursor wird, wie beim Wordstar, mit folgenden Tasten gesteuert, wobei diese jederzeit im Source-Code geändert werden können:

Control-E:Cursor nach oben
Control-X:Cursor nach unten
Control-D:Cursor nach rechts
Control-S:Cursor nach links

Die Nummer des Bytes, auf dem der Cursor gerade steht, wird in der Mitte der obersten Bildschirmzeile ausgegeben. Im Ascii-Modus befindet sich der Cursor im rechten Block des Bildschirmes und es können nur Zeichen eingegeben werden, die auf dem Bildschirm darstellbar sind, d.h. alle Zeichen außer den Kontroll-Zeichen.

Im Byte-Modus befindet sich der Cursor im linken Block des Bildschirms und es können nur Hexzahlen eingegeben werden, wobei man mit dem Cursor sowohl den höher- als auch den niederwertigen Teil direkt anfahren kann. Irgendwann wollen Sie das Editieren beenden und drücken einfach ESC. Damit ist der Puffer noch lange nicht auf der Diskette. Hierzu müssen Sie erst das Schreib-Kommando W geben.

Die Suche nach dem verlorenen File

Wie komme ich nun wieder zu meinem gelöschten Programm ?

Ganz einfach : Zuerst suchen Sie das Directory. Es befindet sich meistens am Anfang der Spur 2. Wenn nicht, dann fangen Sie bei Spur 0, Sektor 0 an und gehen mit dem Kommando + die einzelnen Sektoren durch. Sie müssen jetzt im Directory nach folgender Zeile suchen:

Das erste Byte ist E5 und die folgenden Bytes bilden den Namen und die Extension des Programms.

Beispiel : Sie wollen das File LINE1.PRN retten.

Laufwerk B: Spur     5 Sektor     15

00  08 4C 49 4E 45 31 20 20 20 5A 38 30 00 00 00 1C .LINE1   Z80....
10  AE 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
20  E5 4C 49 4E 45 31 20 20 20 49 4E 4C 00 00 00 0A .LINE1   INL....
30  AF 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
40  E5 4C 49 4E 45 31 20 20 20 50 52 4E 00 00 00 52 .LINE1   PRN...R
50  B0 02 B1 02 B2 02 00 00 00 00 00 00 00 00 00 00 ................
60  08 53 55 43 48 42 41 55 4D 49 4E 43 00 00 00 30 .SUCHBAUMINC...0
70  B3 02 B4 02 00 00 00 00 00 00 00 00 00 00 00 00 ................
Sie fahren die E5 an und ändern sie nach 00..0F ab, wobei diese Zahl dem User-Bereich entspricht. Vergessen Sie nicht, den Puffer auf die Diskette zurück zu schreiben. Je nach Länge des Programms kann dieses auch noch weitere Einträge dieser Art haben. Diese müssen in der gleichen Weise geändert werden.

Paßwörter löschen

Dies funktioniert in umgekehrter Weise wie oben angegeben. Zuerst suchen Sie im Directory nach dem File, wobei diesmal im ersten Byte nicht E5 stehen muß, sondern die Usernummer plus 16.
Ein Beispiel: Ihr File befindet sich im User 5 und ist paßwortgeschützt. Im ersten Byte muß also der Wert 15H stehen. Wenn Sie diesen Directory-Eintrag gefunden haben, so ändern Sie dieses erste Byte auf E5H, und damit ist das Paßwort gelöscht. Jetzt können Sie dem File wieder ein neues Paßwort geben.

Hier nun das Listing des in Z80 geschriebenen Diskettendoktors. Falls Sie sich die Tipparbeit sparen wollen, so können Sie das Programm auf Diskette zum Selbstkostenpreis erwerben. Übrigens läuft dieses Programm nur unter CP/M 3.X. Außerdem müssen Sie dieses Programm an Ihr Terminal anpassen. Die entsprechenden Zeilen sind im Listing beschrieben.

Korrekturen:
(1) In Zeile 0083 muss rs1 geändert werden in ws1
(2) In Zeile 0856 Laufwerk_selektieren muss der _ weg
[Korrigiertes Listing] oder [PCW-Listing]

1. Auch in der SIG-M existieren solche Programme, die allerdings über einen größeren Befehlsvorrat verfügen. Hier eine Übersicht über die, die ich verwendet hatte:
SIG/M
Name Link Titel Datum Type Doku
DU Volume 086 TRS-80 Model I CP/M programs 15.November 1982 Disassemblierte Quelle Doku V 7.7
SUPERZAP Volume 212 CP-M Plus Utilities and Misc. Routines 18.Januar 1985 Disassemblierte Quelle Doku (wie SPZ)
SPZ Volume 234 CP-M Plus and Other Utilities 19.Juli 1985 Assembler Quelle Doku
Ich habe meistens mit DU gearbeitet

Eingescanned von Werner Cirsovius
Mai 2014
© CHIP Verlag