The following article was published in the German magazine „CHIP SPECIAL" in 1987.
A simple program for accessing data on base of disk drives1.

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.

Corrections:
(1) In line 0083 label rs1 must be changed to ws1
(2) In line 0856 Laufwerk_selektieren the character _ must be deleteted
[Corrected Listing] or [modified listing for PCW]

1. Such programs also does exist in the SIG-M but with a larger instruction set. I used some of the tools:
SIG/M
Name Link Title Date Type Doc
DU Volume 086 TRS-80 Model I CP/M programs 1982, November 15 Disassembled source Doc V 7.7
SUPERZAP Volume 212 CP-M Plus Utilities and Misc. Routines 1985, January 18 Disassembled source Doc (as SPZ)
SPZ Volume 234 CP-M Plus and Other Utilities 1985, July 19 Assembler source Doc
Mostly I used DU

Scanned by Werner Cirsovius
May 2014
© CHIP Verlag