CP/M 3.1 Directory

Das Directory unter CP/M 3.1 beinhaltet vier Typen:

Dateien Datenträgerkennzeichnung Datumsstempel Passwortkontrolle

Dateien:

0U F1 F2 F3 F4 F5 F6 F7 F8 T1 T2 T3 EX S1 S2 RC   .FILENAMETYP....
AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL   ................

0U = User Nummer. 0-15. Die User Nummer erlaubt das Halten mehrerer Dateien
    nebeneinander auf einem Datenträger.
     User Nummer = 0E5h => Datei gelöscht
Fn - Dateiname
Tn - Dateitype. Die hierfür verwendeten Zeichen sind 7-Bit ASCII.
       Das obere Bit von T1 (oft bezeichnet als T1') ist gesetzt wenn
     die Datei schreibgeschützt (Read-Only) ist.
       T2' ist gesetzt wenn die Datei eine Systemdatei ist (dies entspricht
     "versteckt" in anderen Systemen). Systemdateien mit User Nummer 0
     können von jeder anderen User Nummer gelesen werden.
       T3' ist gesetzt wenn die Datei gesichert wurde.
EX = Extentzähler, unteres Byte - im Bereich von 0-31
S2 = Extentzähler, oberes Byte.

      Ein Extent ist der Breich einer Datei, der von einem Directory-Eintrag
    verwaltet wird. Besteht eine Datei aus mehr Blöcken als in einem Directory
    Eintrag verwaltet werden können, dann werden mehrere Einträge angelegt,
    gekennzeichnet durch die Bytes in EX und S2. Die Berechnung lautet:
    Eintragsnummer = ((32*S2)+EX) / (exm+1), wobei exm die Extentmaske
    aus dem Disc Parameter Block darstellt.

S1 - Last Record Byte Count
RC - Anzahl der Rekords (1 Rekord=128 Bytes) in diesem Extent, unteres Byte.
    Die Gesamtzahl der Rekords in dieser Datei beträgt

    (EX & exm) * 128 + RC

    Wenn RC=80h ist, dann ist dieser Extent voll und es kann ein weiterer
    auf diesem Datenträger vorhanden sein. Die dateilängen werden optional
    genau abgespeichert (unter Nutzung des Bytes S1), jedoch wird diese
    Möglichkeit selten benutzt.
AL - Belegung. Jede AL ist die Nummer eines Blocks auf dem Datenträger.
    Wenn eine AL Nummer Null ist, dann belegt die Datei in diesem Abschnitt
    keinen Bereich (d.h. er existiert nicht). Zum Beispiel kann eine 3kByte
    lange Datei 5,6,8,0,0.... belegt haben - die ersten 1k liegen in Block 5,
    die zweiten in Block 6, die dritten in Block 8.
      AL Nummern haben eine Länge von entweder 8 Bit (falls weniger als 256
    Blöcke auf dem Datenträger vorhanden sind) oder 16 Bit (niederwertiges
    Byte zuerst).

Datenträgerkennzeichnung

20 F1 F2 F3 F4 F5 F6 F7 F8 T1 T2 T3 LB PB RR RR     LABENAMETYP....
P1 P2 P3 P4 P5 P6 P7 P8 D1 D1 D1 D1 D2 D2 D2 D2    ................

20h - Kennnummer für die Datenträgernkennzeichnung
F1-F8, T1-T3 - Kennzeichenname, 7 Bit ASCII
LB - Kennzeichenbyte.
           Bit 0 gesetzt => Kennzeichner existiert
           Bit 4 gesetzt => Zeitstempel bei Anlage       --+--Diese beiden
           Bit 5 gesetzt => Zeitstempel bei Aktualisierung +  schließen sich
           Bit 6 gesetzt => Zeitstempel bei Zugriff      --+  gegenseitig aus
           Bit 7 gesetzt => Passwortschutz aktiviert
PB - Benutzt zur Entschlüsselung des Passwortes.
RR - Reserviert, auf Null gesetzt.
P1-P8 - Passwort, ziemlich einfach verschlüsselt.
D1 - Kennzeichner für Anlagezeitstempel.
D2 - Kennzeichner für Aktualisierungszeitstempel.

Datumsstempel

Wenn Datumsstempel in Gebrauch sind, dann ist jeder vierte Directory Eintrag ein Datumsstempel Eintrag, der Stempel der vorigen drei Einträge enthält.
21 D1 D1 D1 D1 D2 D2 D2 D2 M1 00 D3 D3 D3 D3 D4    !...............
D4 D4 D4 M2 00 D5 D5 D5 D5 D6 D6 D6 D6 M3 00 00    ................

21h - Kennnummer des Datumsstempels.
D1  - Datei 1 Anlage- ODER Zugriffsdatum
D2  - Datei 1 Aktualisierungsdatum
D3  - Datei 2 Anlage- ODER Zugriffsdatum
D4  - Datei 2 Aktualisierungsdatum
D5  - Datei 3 Anlage- ODER Zugriffsdatum
D6  - Datei 3 Aktualisierungsdatum
M1  - Datei 1 Passwortverfahren
M2  - Datei 2 Passwortverfahren
M3  - Datei 3 Passwortverfahren
00  - Reserviert.

Ein Datumsstempel hat folgendes Format:

        DW      Tag     ;Julianische Tageszahl, niderwertiges Byte zuerst. 
                        ;Tag 1 = 1.Jan 1978.
        DB      Stunde  ;BCD Stunde, z.B. 13h => 13:xx 
        DB      Minute  ;BCD Minute

Passwortkontrolle

1U F1 F2 F3 F4 F5 F6 F7 F8 T1 T2 T3 PM PB RR RR   .FILENAMETYP....
P1 P2 P3 P4 P5 P6 P7 P8 RR RR RR RR RR RR RR RR   ................

1U = 16+User Nummer (d.h. 16-31). Die User Nummer ist die Nummer der
    Datei zu der das Passwort gehört.
F1-F8 - Dateiname der Datei zu der das Passwort gehört
T1-T3 - Dateitype der Datei zu der das Passwort gehört
PM    - Byte für Passwortverfahren
         Bit 7 gesetzt => Passwort benötigt um aus Datei zu lesen
         Bit 6 gesetzt => Passwort benötigt um in Datei zu schreiben
         Bit 5 gesetzt => Passwort benötigt um Datei zu löschen
PB    - Benutzt zur Entschlüsselung des Passwortes
P1-P8 - Das Passwort, ziemlich einfach verschlüsselt.
RR    - Reserviert, auf Null gesetzt.
Das Verfahren zu Passwortverschlüsselung
Dieses Verfahren ist extrem einfach:
  • Zur Passwortgenerierung werden alle acht Zeichen aufaddiert (mögliche Lücken werden mit Leerzeichen gefüllt). Die Summe wird das Byte in PB (Entschlüsselungsbyte). Jedes Zeichen wird mit 'XOR PB' verknüpft und von hinten beginnend in das Directory abgelegt (d.h. das letzte Zeichen wird P1).
  • Um das Passwort zu entschlüsseln werden die acht Bytes des Passworts wieder mit 'XOR PB' verknüpft und rückwärts ausgelesen.

Letzte Änderung: 11.Juli 2005