コンピュータのファイルシステムでは、ブロック可用性マップ(BAM)[ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ]は、空き領域(新しいデータに使用可能)とみなされるディスクブロックを追跡するために使用されるデータ構造 です。これは、ディレクトリとともにディスク上のファイルを管理するために使用されます(当初はフロッピーディスクのみでしたが、後にハードディスクも使用されました)。
Commodore DOS ( CBM DOS ) 互換ディスクドライブの場合、BAM はディスクの予約領域に格納されるデータ構造でした (そのサイズと位置はディスクの物理的特性によって異なりました)。各トラックについて、BAM は使用可能なブロックのビットマップと (通常)使用可能なブロックの数で構成されていました。すべてのフォーマットでトラックあたりのブロック数が 256 以下であったため、数は 1 バイトで保持されました。カウント バイトは、現在のトラックのバイトのビットマップ内のすべての 1 ビットの合計でした。
以下の表は、 Commodore 1541 BAMのレイアウトを示しています。より大容量のディスクを使用する場合は、表のサイズが大きくなります(詳細は後述)。
ビットマップは、Commodore 1541 フォーマット (片面) ディスクでは 3 バイトに収められていました。これは、トラックごとに 17 ~ 20セクタがあったためです(3 バイトは少なくとも 20 ビットを保持できます)。[ 6 ] 同様に、Commodore 1571では各トラックのビットマップに 3 バイトが使用されていましたが、両面フォーマットではトラック数が 2 倍になるため、BAM のサイズは 2 倍になりました。[ 7 ] 対照的に、Commodore 1581ディスク ドライブでは、ディスク フォーマットでトラックごとに 40 ブロックがあったため、ビットマップに 5 バイトが使用されました (5 バイトは 40 ビットを保持できます)。[ 8 ]
どの形式のビットマップでも、1ビットはブロックが使用可能(空き)であることを示し、0ビットはブロックが使用不可(使用中)であることを示し、ビットマップデータは下位バイトから格納されます。つまり、最初のバイトにはブロック0~7のマップが格納され、2番目のバイトにはブロック8~15のマップが格納される、といった具合です。1バイト内では、ビットマップは下位ビットから順に並べられます。例えば、最初のバイトは最下位ビットでブロック0を表し、最上位ビットでブロック7を表します。
Creative Micro Designs製のストレージ デバイスは、CBM コンピュータで使用することを目的としており、同じ目的を果たすブロック可用性マップも使用していました。ただし、これらのデバイス ( FD-2000、FD-4000、CMD-HD ) にはカウント バイトが含まれておらず、各バイトのビットが逆順 (上位ビットが先) になっていました。ビットは (CBM フォーマットと比較して) になっていましたが、バイトは依然として同じ順序 (下位バイトが先) で格納されていました。[ 9 ]