DIR-Eintrag

Die Information, welche Daten bzw. welche Files auf einer Diskette aufgezeichnet sind, ist am Anfang der Diskette im Inhaltsverzeichnis (engl. Directory) enthalten. In der Directory stehen alle wichtigen Daten, die das BDOS zur Bearbeitung der Diskette benötigt. für jedes File sind dies:

Fordert ein Programm bestimmte Daten unter Angabe eines Filenamens an, so kann das BDOS aus den Directory-Informationen den exakten Sektor auf der Diskette berechnen.

Für jede Datei gibt es einen oder mehrere DIR-Einträge. Ein DIR-Eintrag ist 32 Byte lang.

s. aufbau_eines_directory-eintrags

Ein DIR-Eintrag lokalisiert nur Blöcke, keine konkreten Sektoren und Spuren und auch keine logischen Records! Die Dateigröße wird über RC*128 (s.u.) bestimmt.

Das CP/M 2.2 fasst jeweils 32 Extends zu einer Extendgruppe (engl. Extend Group) zusammen. Ein File kann aus bis zu 16 Extendgruppen aufgebaut sein, was die maximale Länge eines Files auf 65536 Records (8 Megabyte, s.u.) begrenzt. Die laufende Recordnummer eines Files wird BDOS-intern immer in den drei Teilen Extendgruppe, Extend und Record verwaltet.

EX enthält die Extendnummer, EG die Extendgruppe des letzten durch den Eintrag abgedeckten Record. EX und EG werden, bei mehreren Eintragen zu einem File, immer relativ zum Fileanfang gerechnet.

RC ist die Anzahl von Records im höchsten Extend (EX) des Eintrages. RC liegt normalerweise im Bereich zwischen 0 und 127. Ein Wert von 128 in RC zeigt an, das auch der letzte Extend mit 128 Records gefüllt ist. In diesem Fall folgt noch ein weiterer Eintrag (Folgeeintrag).

In der Blocktabelle stehen die vom File belegten Blocknummern. Die Blocktabelle kann bei 8-Bit Blocknummern bis zu 16 Blöcke und bei 16-Bit Blocknummern bis zu 8 Blöcke umfassen.

Random Record Number = Extendgruppe * 32 * 128 + Extendnummer * 128 + Aktuelle_Recordnummer_im_Extend

max. Dateigröße: max.EG=15, max.EX=31, max.RC=127 → 15*32*128+31*128+127 = 65535 Records = 65535*128 Byte = 8 MByte.

Auch daraus folgt wieder, dass maximal 65535 Records pro Datei adressiert werden können.

Beispiel

Auszug aus einer Diskette für den Z9001. Es sind 3 Programme enthalten: L80.COM, LIB.COM, M80.COM. Letztere belegt 2 Directory-Einträge.

EX 	Höchste Extendnummer des Eintrags (0..31)
S1 	unbenutzt, immer 0
EG 	Höchste Extendgruppe des Eintrags (0..15) (auch als S2 bezeichnet)
RC 	Anzahl der Records im Extend EX (0..127)
B1...Bn Nummern der belegten Blöcke (Blocktabelle)


       /0 /1 /2 /3 /4 /5 /6 /7 /8 /9/ A /B /C /D /E /F
                                                                                                           
       UN N1 N2 N3 N4 N5 N6 N7 N8 T1 T2 T3 EX S1 EG RC     UNNNNNNNNTTTESER
       B0  .  .  .  .  .  .  .  .  .  .  .  .  .  . Bn     BBBBBBBBBBBBBBBB

0520 : 00 4C 38 30 20 20 20 20 20 C3 4F 4D 00 00 00 54     .L80     .OM...T
0528 : 52 00 53 00 54 00 55 00 56 00 57 00 00 00 00 00     R.S.T.U.V.W.....
0540 : 00 4C 49 42 20 20 20 20 20 C3 4F 4D 00 00 00 25     .LIB     .OM...%
0548 : 58 00 59 00 5A 00 00 00 00 00 00 00 00 00 00 00     X.Y.Z...........
0560 : 00 4D 38 30 20 20 20 20 20 C3 4F 4D 00 00 00 80     .M80     .OM....
0568 : 5E 00 5F 00 60 00 61 00 62 00 63 00 64 00 65 00     ^._.`.a.b.c.d.e.
0580 : 00 4D 38 30 20 20 20 20 20 C3 4F 4D 01 00 00 1D     .M80     .OM....
0588 : 66 00 67 00 00 00 00 00 00 00 00 00 00 00 00 00     f.g.............

16 Bit-Blocknummern

L80.COM belegt die Blöcke 52..57, insg. RC = 54h Records → 54h*128 = 2A00h = 10,5 KByte Dateilänge, insg. 6 Blöcke

LIB.COM belegt die Blöcke 58..5A, insg. RC = 25h Records → 25h*128 = 1280h = 4,6 KByte Dateilänge , insg. 3 Blöcke

M80.COM belegt die Blöcke 5E..67, insg. RC = 80h+1Dh Records → 91h*128 = 4880h = 18,1 KByte Dateilänge, insg. 10 Blöcke in letzter Zeile EX=1, d.h. 1. zusätzlicher DIR-Eintrag zu dieser Datei

alle drei Dateien sind schreibgeschützt (Bit 7 der Position T1 ist 1)

:!: Man „sieht“ an den Blocknummern, dass diese 16 Bit groß sind. Und aus der Dateilänge ergibt sich eine Blockgröße von 2 KByte: 10 Blöcke bei 18,1K Dateilänge.