Skip to content

FATについて

猫大名ねこ猫 edited this page May 2, 2023 · 4 revisions
  • クラスタの繋がりを管理している。
  • 2Dメディアの場合、1セクタ(256バイト)で構成されている。
    2DDメディアや2HDメディアは、2セクタ(512バイト)で構成される。
  • FATの管理は、クラスタ単位。
    1クラスタは16セクタ。
    1セクタは256バイト。

内容

1セクタ(256バイト)を128バイトで前半と後半にわける。
クラスタ位置が128~255なら次のセクタを参照する。(256~383なら次の次みたいに続く)

前半の値 説明
0x00 未使用、空き領域
0x01~0x7F 続きのクラスタがある。
2Dの場合は、前半の値が、そのまま次のクラスタ位置となる。
2DD、2HDの場合は、セクタ後半の値を参照し次のクラスタ位置を求める。
次のクラスタ位置 = 前半 | (後半 << 7);
0x80~0x8F このクラスタで終了していて続きは無い。
また、(前半の値 - 0x7F)で、どのセクタまで使用されているかがわかる。
例)0x80はクラスタ内の1セクタが使われている。
0x84は、5セクタ使われている。
0x8Fは、16セクタ全部使用されている。

こんな感じで辿っていく……

クラスタ位置 = (ファイルの開始クラスタ);
while(!前半の値が終わりかどうか(クラスタ位置)) {
 クラスタ位置 = 次のクラスタ位置を取得(クラスタ位置);
}
// 参照するセクタの番号 = FATの開始セクタ番号 + (クラスタ位置 / 0x80);
// セクタの中の参照するバイト位置_前半 = クラスタ位置 & 0x7F;
// セクタの中の参照するバイト位置_後半 = (クラスタ位置 & 0x7F) + 0x80;

@todo もっと分かりやすく説明を書くこと

Clone this wiki locally