-
Notifications
You must be signed in to change notification settings - Fork 0
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 もっと分かりやすく説明を書くこと