GIMONS DEVELOPER WORKS/FDX68

ディスクイメージ仕様

専用のディスクイメージフォーマット(FDX形式)の仕様です。

リビジョンが3になりインデックスやトラックサイズがビット数レベルに拡張されました。

イメージの構造

・ヘッダ情報(256バイトのディスク属性)
・トラック情報(16バイトのトラック属性+トラックデータ)×トラック数

ヘッダー情報

POS NAME NOTES
+0 signature 識別子('F''D''X')
+3 revision リビジョン(3)
+5 name ディスク名
+64 pad パディング
+68 type タイプ(0:2D 1:2DD 2:2HD 9:RAW)
+72 cylinders シリンダー数
+76 heads ヘッド数
+80 rate 転送レート(クロック込み)[500|1000]
+84 rpm RPM[300|360]
+88 writeprotect ライトプロテクト(0: OFF 1:ON)
+92 option 動作オプション(現在未使用)
+96 unused 未使用
+100 trackblk トラックデータのブロック長(バイト数)
+104 reserve リザーブ(ヘッダー全体256バイトに調整)

数値はリトルエンディアンで格納


C言語風に書いた構造体

	typedef struct {
		BYTE signature[3];	// 識別子('F','D','X')
		BYTE revision;		// リビジョン(3)
		BYTE name[60];		// ディスク名
		BYTE pad[4];		// パディング
		int type;		// タイプ(0:2D 1:2DD 2:2HD 9:RAW)
		int cylinders;		// シリンダー数
		int heads;		// ヘッド数
		int rate;		// 転送レート(クロック込み)[500|1000]
		int rpm;		// RPM[300|360]
		BOOL writeprotect;	// ライトプロテクト(0: OFF 1:ON)
		DWORD option;		// 動作オプション
		DWORD unused;		// 未使用
		int tracksiz;		// トラックデータのブロック長
		BYTE reserve[152];	// リザーブ(ヘッダー全体256バイトに調整)
	} fdxheader_t;

トラック情報

固定の属性情報と可変長のトラックデータです。トラックデータの形式にはMFM/FMレベルのエンコードデータまたはサンプリングレベルのRAWデータです。FDDからの信号(クロックとデータ)を1でアサート、0でネゲートとして記録したバイトデータの連続です。

[C0H0][C0H1][C1H0][C1H1]...とシリンダ、ヘッドの順で連続しています。データ長はヘッダー情報のtracksiz、データ数はcylinders * headsになります。

POS NAME NOTES
+0 cyllinder シリンダ
+4 head ヘッド
+8 index インデックスホール位置(ビット数)
+12 length トラックデータ長(ビット数)
+16~ data トラックデータ(ヘッダーのトラックブロック長 - 16)

数値はリトルエンディアンで格納


C言語風に書いた構造体
	typedef struct {
		int cylinder;		// シリンダー
		int head;		// ヘッド
		int index;		// インデックスホール位置(ビット数)
		int length;		// トラックデータ長(ビット数)
		BYTE data[???];		// データバッファ(可変長)
	} fdxtrack_t;

アプリケーション内で実際にはcylinderとheadのパラメータは参照してません。トラック情報にあるこの二つの情報はバイナリエディタ等でイメージファイルを参照した際にどのトラックかを人間が判断するための参考情報です。



[EOF]