FATについて3                    FATについて   FATについて2        ホームページに戻る

 FATファイルの読み出しは、FATについて・FATについて2で説明しましたが、今回はルートディレクトリへの
書き込みについてまとめ、FAT16の仕様についておさらいしてみました。

1つのファイルの構成
   1つのファイルは次の3つ部分から構成される。
     T  FAT領域:データ領域を示すポインタ(FAT
)のある領域、通常2組ある
     U 
ディレクトリエントリ領域:ファイル属性(名前・作成日時・サイズ・データ開始FAT番号等)
    V
データ領域:ファイルの中身、FAT(クラスタ)で示された領域

   T  FAT
    
     FATは、2バイト(16ビット)1組みでその値がある場所がFAT番号であり、その値が次のFAT番号を指しており、値が’FFFF’で終了
     上の例では、FATの2番から4番まで連続したファイルと、5番のみで終わるファイルが存在することになる。(0と1番はシステムで使用)
     また、6番目以降のFATは未使用である。
     ファイルの先頭を示すFAT番号は、ディレクトリエントリの27:26バイト目で示される。(FAT16の場合)
     
      U 
ディレクトリエントリ
                    エントリ1 エントリ2 エントリ3 エントリ4 ・・・・・ エントリn
           *基本エントリは32バイト(詳細はFATについて参照)  *注 拡張エントリは異なる

   
      *ファイル名の0バイト目は特別の意味があり、00h:空き・E5h:削除済み 使用可能なエントリである(FATについて2参照)
      基本エントリのファイル名は、MSDOSの規格に合わせる必要がある。(英字小文字不可等)
 

    V 
データ
   データはFATにより管理され、FAT番号からセクタ(アドレス)が決まる。
    
FAT番号Fとクラスタ番号Cの関係はC=F−2でありクラスタの示すデータ領域の先頭クラスタAは A=Sc+C×Cpc となる
      Sc:データ領域の先頭セクタ、Cpc:1クラスタ当たりのセクタ数
    上記のFAT番号2から始まるファイルの場合、先頭はSc+0セクタとなり ∵Sc+(2−2)×Cpc
    Cpcが4の場合、FAT番号2に対応するのがSc+0〜3セクタ、FAT番号3に対応するのがSc+4〜7セクタ、FAT番号4に対応するのが
         Sc+8〜11セクタ(途中まで使用)となる。
  
  
  
データの書き込み
    @空きFATの検索
      FAT領域を読み込み、空きFATを探す。(読み書きは、1セクタ単位)
      上記の例では、6番目のFAT(12・13バイト)が最初の空きなのでそこを使用するため、その値を
      ’FFFF’とする。 1クラスタ分以内(Cpc×512バイト)のデータであればこれで完了、これを越えたら
      次の空きFATを探し、そのFAT番号に書き換える。
    AFATデータの書き込み
      @の内容でセクタデータを書き込む。2組目のFATも同じ内容を書き込む  
    B空ディレクトリエントリの検索
     ルートディレクトリエントリ領域を検索し、空きまたは削除されたエントリを見つける。
     この段階では、使えるエントリがあることが確認できればよい。(仮の値を書き込んでもよい)
    Cデータの書き込み
     FAT番号から計算した、データ領域にデータを書き込む。
     1クラスタ(Cpcセクタ)分を書き込んだら、@により次の空きFATを検索し空きデータ領域に続きを書く。
     書き込んだデータのバイト数はカウントしておく。
    Dエントリの書き込み
     Bの空きエントリに、必要なエントリデータを書き込む。


  書き込み例(Disk Investigatorによる表示)
   
64MBSDカード  2セクタ/クラスタ、セクタ長512バイト 
     FAT  開始セクタ:4(2組目 246)  容量:242セクタ×2組
     リートディレクトリエントリ 開始セクタ:488 容量:32セクタ(32バイト×512エントリ/512(バイト/セクタ))
     データ開始セクタ 520
      FAT(No4セクタ)
      
      
FAT番号2から5まで、1クラスタづつ使用するファイルがある。
     
リートディレクトリエントリ(No488セクタ)
      
      
1番目のエントリ(00h-19h)はボリュームラベルとして使用 ボリューム名”GPS_LOG”
       2番目のエントリ(20h-39h)はファイル”080040.LOG”用、ファイルデータのスタートFAT番号は0002hで、クラスタ
       番号は2−2=0となり、520+2×0=520がスタートセクタとなる。ファイルサイズは330(014Ah)バイトである。

     データ(No520セクタ)
      

     ファイル”080040.LOG”のデータ