piFDC(仮)

はじめに

概要

ダウンロード

使い方

SLFについて

ここではfdrコマンドでフロッピーディスク読み出し後に作成されるイメージである、SLFフォーマットについて記述します。

データ構造

データ構造は以下の3層によって構成されます。
・フォーマットヘッダ情報(16バイト固定)
・トラックヘッダ情報(80×2×32 = 5120バイト固定)
・トラックデータ(セクタ情報または物理フォーマットデータ)(可変)
データはリトルエンディアンで格納されます。

なお、トラックヘッダ情報は上記の通り固定サイズにしており、シングルサイドのFD(1D、1DD等)はインデックス値が奇数(ヘッド1に相当)に未フォーマットが設定され、2Dの場合はインデックス4つおきに前半の2つ(偶数トラックのヘッド0、1)に有効データ、後半の2つ(奇数トラックのヘッド0、1)に未フォーマット情報が設定されます。

フォーマットヘッダ情報

フォーマットヘッダはファイルの先頭16バイトで以下の内容で構成されています。ヘッダのチェック以外は使用していません。

+0 ヘッダ'FDIM'
+4 バージョン情報現在は順に00 00 01 00を入れていますが、特に参照していません
+8 ファイルサイズファイルサイズを格納しますが、特にチェックなどで使用してはいません
+12 フラグ運用中の一部のフラグを転送しますが実際には使われていません。

トラックヘッダ情報

トラックヘッダはフォーマットヘッダの続くオフセット16バイトからの5120バイトに格納されます。
1トラックヘッダは32バイトで構成され、使用していないトラックも含め、80トラック×2ヘッド分確保されます。
トラックヘッダのインデックスは[トラックNo(0~79)×2+ヘッダ(0,1)]になります。

+0 データオフセット対応するトラック内のデータを格納したデータ領域のファイル先頭からのオフセット
+4 データサイズトラック内のデータのデータサイズ
+8 アンフォーマットサイズトラックのアンフォーマットサイズ(2000、1660、1000が入ります)
+12 データタイプトラックデータタイプ
-1 : 未フォーマット
0 : 物理フォーマットデータ
1 : FMフォーマットデータ
2 : MFMフォーマットデータ
+14 セクタ数トラック内のセクタ数、以下FM/MFMフォーマットデータでのみ使用
+16 GAP4aサイズGAP4aの信号期間(2HDでは×1μs、2DDは×2μsがGAP4aの期間になります)
+20 SYNCサイズGAP4a直後のSYNCの信号時間(同上)
+24 GAP1サイズGAP1の信号期間(同上)
+28 リザーブ

物理フォーマットデータ情報

トラックのデータタイプが物理フォーマットデータの場合、MFMはクロック、データをそれぞれ1ビットとして扱ったビット列、FMの場合はクロック、データそれぞれを2ビットとして扱ったビット列を格納します。

FMフォーマットデータ、MFMフォーマットデータ

FMフォーマットデータとMFMフォーマットデータはデータの構成要素は同じです。セクタ構造を解析したデータが格納されます。
ここでのデータは、セクタヘッダ情報とセクタのデータ領域の内容で構成されます。
セクタヘッダ情報はサイズが32バイトでセクタデータのオフセットや、データ以外の情報を格納している領域で、セクタデータはセクタのデータ領域の内容が格納されます。データの配置は、先頭領域にセクタ数分のセクタヘッダ情報が格納され、その後ろにセクタデータが格納されます。
以下にセクタヘッダ情報の構造を記述します。

+0 データオフセット対応するセクタデータを格納したデータ領域のフォーマットデータの先頭からのオフセット
+4 ステータスセクタの属性、ビットで指定します
00000001 : IDAMパターンエラー
00000002 : ID CRCエラー
00000004 : DATAAMパターンエラー
00000008 : DATA CRCエラー
00000010 : セクタ構造のエラー
00000100 : Deletedセクタ
00000200 : 入れ子セクタ
+8 ISYNCサイズIDAM直前のSYNCの信号期間(2HDでは×1μs、2DDは×2μsがGAP4aの期間になります)
+10 GAP2サイズGAP2の信号期間(同上)
+12 DSYNCサイズDATAAM直前のSYNCの信号期間(同上)
+14 GAP3サイズGAP3の信号期間(同上)
+16 ID CRCID CRCの値
+18 DATA CRCDATA CRCの値
+20 IDAMパターンIDAMの値(FMフォーマットは3バイト目のみ使用)
+24 CHSNC(シリンダ)H(ヘッダ)S(サイド)N(セクタサイズ)の格納領域
+28 DATAAMパターンDATAAMの値(FMフォーマットは3バイト目のみ使用)