
		ディスクイメージファイルのフォーマット

						99/08/10
						福永省三
						e-mail : fukuchan@mh1.117.ne.jp


  QUASI88 で使用するディスクイメージファイルのフォーマットは、
P88SR.EXE (PC8801mk-2SR emulator) で使用される、ディスクイメージファイルの
フォーマットに準拠しています。
このフォーマットは、通称 「D88形式」とか、「D88フォーマット」とか呼ばれる
もので、拡張子に .D88 や、.d88 をつけるのが一般となっています。

  例 → N88BASIC.D88、 n88demo.d88
  

  以下に、そのフォーマットを解説をします。



※注意
	このフォーマットは、作者が個人的に調べたものです。
	質問、疑問などに関しては、以下のメールアドレスまでお願いします。
	間違っても、P88SR.EXE (PC8801mk-2SR emulator) の作者に質問のメールなど
	を送ったりしないで下さい。

		e-mail : fukuchan@mh1.117.ne.jp



ディスクイメージは、ヘッダ部とトラック部分からなります。

	+---------------------+
	|      ヘッダ部       | サイズ 0x2b0 バイト
	+---------------------+
	|トラック部 (0 Track) |	サイズ 不定
	+---------------------+
	|トラック部 (1 Track) | サイズ 不定
	+---------------------+
	|         ・          | ・
	|         ・          | ・
	|         ・          | ・
	+---------------------+		トラック部の数は不定


○ヘッダ部分の詳細

  offset  サイズ
   0x00     17        ディスクの名前(ASCII + '\0')
   0x11      9        リザーブ ( 0x00 )
   0x1a      1        ライトプロテクト  0x00 なし、0x10 あり
   0x1b      1        ディスクの種類    0x00 2D、 0x10 2DD、 0x20 2HD
   0x1c      4        ディスクのサイズ
   0x20    4*164      トラック部のオフセットテーブル 0 Track 〜 163 Track

	ヘッダ部のサイズは、0x2b0 バイトです。
	C 言語の構造体で書くと、
		struct{
		  char   name[17];
		  char   reserve[9];
		  char   write_protect;
		  char   disk_type;
		  long   disk_size;
		  long   track_table[164];
		};
	こんな感じですね。

	ディスクのサイズとは、ヘッダ部とすべてのトラック部の合計の
	サイズです。
	
	トラック部のオフセットテーブルとは、各トラックのトラック部の先頭
	位置が、ヘッダの先頭から数えて、何バイト目にあるかという情報です。
	ヘッダ部は 0x2b0 バイトあるので、0 Track のオフセット値は、0x2b0 に
	なります。
	なお、2D の場合、84〜163 Track は存在しないので、オフセット値には
	0 を入れておきます。

	注意：	ディスクのサイズ、トラック部のオフセットテーブルは、4バイト
		ですが、リトルエンディアンで格納します。

○トラック部の詳細

	トラック部は、セクタ部を必要数連結したものです。

○セクタ部の詳細

  offset  サイズ
   0x00      1        ID の C
   0x01      1        ID の H
   0x02      1        ID の R
   0x03      1        ID の N
   0x04      2        このトラック内に存在するセクタの数
   0x06      1        記録密度         0x00 倍密度、   0x40 単密度
   0x07      1        DELETED MARK     0x00 ノーマル、 0x10 DELETED
   0x08      1        ステータス
   0x09      5        リザーブ
   0x0e      2        このセクタ部のデータサイズ
   0x10     不定      データ (サイズは、0x0e に格納しているバイト数)

	セクタ部のサイズは、不定です。
	C 言語の構造体で書くと、
		struct{
		  char   c;
		  char   h;
		  char   r;
		  char   n;
		  short  number_of_sector;
		  char   deleted_mark;
		  char   status;
		  char   reserve[5]
		  short  size_of_data;
		  char   data[ ? ];
		};
	こんな感じですね。

	ステータスは、PC-98x1 のBIOS が返してくるステータスで、
		0x00 正常
		0x10 正常(DELETED DATA)
		0xa0 ID CRC エラー
		0xb0 データ CRC エラー
		0xe0 アドレスマークなし
		0xf0 データマークなし
	となります。

	注意：	セクタの数、データサイズは、2バイトですが、
		リトルエンディアンで格納します。



●ディスクイメージの連結について

  このディスクイメージは、複数連結して使用することも可能です。
  この場合、一つのファイルに複数のディスクイメージが存在することになります。
