ディスクイメージファイルのフォーマット ------------------------------------------------------------------------------- QUASI88 で使用するディスクイメージファイルのフォーマットは、 P88SR.EXE (PC8801mk-2SR emulator) で使用される、ディスクイメージファイルの フォーマットに準拠しています。 このフォーマットは、通称 「D88形式」とか、「D88フォーマット」とか呼ばれる もので、拡張子に .D88 や、.d88 をつけるのが一般となっています。 例 → N88BASIC.D88、 n88demo.d88 以下に、そのフォーマットを解説をします。 ※注意 このフォーマットは、作者が個人的に調べたものです。 間違っても、P88SR.EXE (PC8801mk-2SR emulator) の作者に質問のメールなど を送ったりしないで下さい。 ディスクイメージは、ヘッダ部とトラック部分からなります。 +---------------------+ | ヘッダ部 | サイズ 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バイトですが、 リトルエンディアンで格納します。 ●ディスクイメージの連結について このディスクイメージは、複数連結して使用することも可能です。 この場合、一つのファイルに複数のディスクイメージが存在することになります。