N60拡張BASIC / N66BASIC ディスクファイルの構造


N60-拡張BASICおよびN66-BASICが扱うディスクファイルの構造を説明します。

フロッピィディスク

メモリには番地がついています。フロッピィディスクにも番地があり、トラック、セクタという用語を用います。

フロッピィディスクの最小の入出力単位はセクタで、物理的に決められた単位です。

上図のように、フロッピィディスクのある特定の場所を指定するには、トラック番号とセクタ番号を用います。

トラックの割り当て

フロッピィディスクの各トラックは次のように割り当てられます。

トラックセクタ内容
0~17すべてユーザ領域
181~12ディレクトリ
1813ID
1814~16FAT
19~34すべてユーザ領域

ファイル構造

BASICでフロッピィディスクを使用する限り、ユーザはトラック番号やセクタ番号について考える必要がありません。 それは、ユーザが使いたいファイル名を指定すると、そのファイルがセーブされているトラック番号とセクタ番号をBASICが 見つけてくれるからです。

BASICは、フロッピィディスクを管理するために、ディレクトリとFAT(ファイルアロケーションテーブル)という2つの 表をフロッピィディスク内にもっています。ディレクトリはフロッピィディスクにセーブされているファイル名、性質、 セーブされている最初の場所を管理する表です。これに対して、FATはフロッピィディスク内のどこが未使用か、どこが使用可能か、 またはどこが使用されていてどこかに続いているかどうかというように使用状態を管理する表です。これらの表は フロッピィディスクのトラック番号18に割り当てられています。

フロッピィディスクの入出力単位はセクタでしたが、BASICが管理する単位はクラスタと言います。1クラスタは8セクタで、クラスタ番号は トラック番号・セクタ番号と次のように対応します。

クラスタ番号トラック番号セクタ番号
001~8
109~16
211~8
319~16
421~8
529~16
631~8
739~16
69349~16

したがって、ディレクトリ内のファイルがセーブされている最初の場所や、FAT内のファイルの続きがセーブされている場所を表すには クラスタ番号が用いられます。このクラスタ番号からトラック番号、セクタ番号は簡単に求められます。

ディレクトリ

ディレクトリはフロッピィディスクのトラック番号18のセクタ番号1から12までの領域にあります。 1つのファイルに16バイトを使用して、全部で192個のファイルを管理できます。

バイト内容
0~5ファイル名
6~8拡張子
9属性
10そのファイルがセーブされている先頭のクラスタ番号
11~15未使用

ファイル名の1バイト目がアルファベットならば、BASICで管理されているファイルです。また、 00(16進数)ならばKILL命令の実行によって削除されたファイルです。FF(16進)ならば、ファイルを管理するために 使われていないことになります。

属性は、ファイルの形式等によって次のような値で表されます。

値(16進)意味
00アスキー形式
10アスキー形式、ライトプロテクト
20アスキー形式、リードアフタライト
80非アスキー形式
90非アスキー形式、ライトプロテクト
A0非アスキー形式、リードアフタライト

ライトプロテクトされたファイルはそのファイルへの書き込みが禁止されます。BASICは、属性の値を 自動的に00(16進)か80(16進)にします。ファイルへの書き込みを禁止したい場合には、直接、 DSKI$関数、DSKO$文を使って行います。

FAT

FATはフロッピィディスクのトラック番号18のセクタ番号14から16までの領域にあります。この 3つのセクタはそれぞれがFATになっています。これは安全のために3つのFATが一致しないと、 そのフロッピィディスクを使えないようにしているからです。 FATは1クラスタにつき1バイトでそのクラスタの使用状態を表わします。また、各セクタの 0~69バイト目がクラスタ番号0~69にそれぞれ対応します。

各バイトのデータ
(16進数)
クラスタの使用状態
0~45使用中。連続したクラスタの一部であり、後続するクラスタを持つ。値が、後続するクラスタの番号を示す。
C1~C8使用中。連続したクラスタの最後のクラスタであり、下位4ビットの内容が、そのクラスタで実際に使われているセクタの数を表わす。
FE予約済のクラスタで、ファイルとして使うことはできない。(ディレクトリ、FAT自身を含むクラスタがこれである。)
FF未使用

上の説明で「連続したクラスタ」といいましたが、これはフロッピィディスク上で連続した クラスタを意味しているわけではありません。BASICが管理するファイルは、一般にとびとびの クラスタをチェインで結ぶ形に構成されているからです。

IDセクタ

IDセクタはフロッピィディスクのトラック番号18のセクタ番号13の領域にあります。BASIC では、はじめの1バイトしか使用しません。この1バイトは、フロッピィディスク全体の属性を表 わしています。属性の値はファイルの属性の値と同じです。 フロッピィディスクをBASICで使えるようにフォーマットすると、フロッピィディスクの属性 の値は00(16進)です。ライトプロテク卜したい時には、次のプログラムを実行してください。


10 FIELD #0,1 AS A$
20 LSET A$=CHR$(16)
30 DSKO$ 1,18,13
40 END