CP/M File Control Block

Der File Control Block (FCB) ist eine Datenstruktur mit 36 Bytes (33 Bytes bei CP/M 1). Er ist wie folgt aufgebaut:

DR 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  ...............
CR R0 R1 R2                                      ....
Die Bytes im FCB haben folgende Bedeutung:

FCB+00h DR - Laufwerk. 0 steht für aktuelles, 1-16 für A-P.
FCB+01h Fn - Dateiname, 7-Bit ASCII. Die oberen Bits der Bytes des Dateinamens (üblicherweise bezeichnet als F1' bis F8') haben folgende Bedeutung:
F1'-F4' - Durch den Anwender definierbare Attribute. Ein beliebiges Programm kann diese beliebig nutzen. Der Dateiname in dem Laufwerksverzeichnis hat die entsprechenden Bits gesetzt.
F5'-F8' - Nur durch das System definierbare Attribute. Diese verändern das Verhalten verschiedener BDOS Funktionen oder zeigen Fehlerverhalten an. Im Laufwerksverzeichnis sind diese Bits immer auf 0 gesetzt.
FCB+09h Tn - Dateityp, 7-Bit ASCII. T1' bis T3' haben folgende Bedeutung:
T1' - Schreibschutz (Read-Only).
T2' - System (versteckt). Systemdateien in User Area 0 können von anderen User Areas aus geöffnet werden.
T3' - Archiv. Gesetzt, wenn die Datei seit der letzten Kopie nicht verändert wurde.
FCB+0Ch EX - Zum Öffnen einer Datei muss der Wert auf 0 gesetzt werden, bevor der FCB an CP/M übergeben wird. Um eine Datei zurückzusetzen, werden die Werte für EX, RC, S2 und CR auf 0 gesetzt.
FCB+0Dh S1 - Reserviert.
FCB+0Eh S2 - Reserviert.
FCB+0Fh RC - Zum Öffnen einer Datei muss der Wert auf 0 gesetzt werden, bevor der FCB an CP/M übergeben wird.
FCB+10h AL - Abbildung der zweiten Hälfte des Verzeichniseintrags, die die Dateibelegung enthält (welcher Laufwerksblock zur Datei gehört).
FCB+20h CR - Aktueller Rekord im Extent (EX). Am besten diesen Wert nach dem Öffnen einer Datei auf 0 setzen und dann ignorieren.
FCB+21h Rn - Nummer des Rekords für wahlweisen Zugriff (nicht für CP/M 1). Ein 16-Bit Wert für CP/M 2 (wobei R2 als Überlaufsanzeige genutzt wird); ein 18-Bit Wert für CP/M 3.
Einige Programme (wie z.B. der Linker von Digital Research, LINK.COM) handhaben die Bytes EX, S2 und CR als "Such" (seek) Funktion ohne Gebrauch der Aufrufe für wahlweisen Zugriff.

CR = Aktueller Rekord (Current Record) d.h. (Dateizeiger % 16384) / 128
EX = Aktueller Extent d.h. (Dateizeiger % 524288) / 16384
S2 = Oberes Byte des Extent d.h. (Dateizeiger / 524288)

Letzte Änderung: 4.Juni 2004