4.P6でよく使用されている内部フォーマットについて
P6の場合、内蔵/外付ドライブや、外付ドライブの種類の違いなどがあるため、特殊なフォーマットが使われる事があまりありません。
よく使われているフォーマットは以下の通りです(P6の説明書に書かれているものです)。
1D:
トラック#0〜#39(片面使用で、シリンダ番号#0〜#39を使用)
1トラック=セクタ#1〜#16の16セクタ
1セクタ=256バイト
BASICでは、トラック#0〜#34しか扱えないようです。
1DD:
トラック#0〜#79(片面使用で、シリンダ番号#0〜#79を使用)
1トラック=セクタ#1〜#16の16セクタ
1セクタ=256バイト
2D:
トラック#0〜#79(両面使用で、シリンダ番号#0〜#39を使用)
1トラック=セクタ#1〜#16の16セクタ
1セクタ=256バイト
前述の通り、トラック#0セクタ#1は起動時に読み込まれて、その内容が実行されます。
また、BASICでは、以下のような割り当てがされています。
1D:
トラック#18セクタ# 1〜#12:ディレクトリ(ファイル名などが格納されている)
トラック#18セクタ#13 :ID(属性)
トラック#18セクタ#14〜#16:FAT(クラスタの使用状態が格納されている)
1DD/2D:
トラック#37セクタ# 1〜#12:ディレクトリ
トラック#37セクタ#13 :ID
トラック#37セクタ#14〜#16:FAT
それ以外の部分はユーザ領域として、ファイル本体が格納されます。
他のページでも説明されているので、そちらも参考にして下さい。
http://p6ers.net/hashi/floppy.html
http://www.geocities.jp/submarine600/ (←ここの『落ちつく』の記事の一部)
5.P6でよく使用されている拡張子とデータ構造について
P6のフロッピーデータをWindows上で扱う時のフォーマットの話です。
○ベタフォーマット(〜.dsk):
いわゆるベタファイルです。
トラック#0セクタ#1〜16
トラック#1セクタ#1〜16
:
トラック#79セクタ#1〜16 (1Dの場合、トラック#39)
の順で、各セクタのデータ部分のみを連結したものです。
そのため、ファイルサイズは、
1D:256x16x40 = 163840バイト(0x28000バイト)
1DD/2D:256x16x80 = 327680バイト(0x50000バイト)
になります。
○P31フォーマット(〜.P31):
SD6031/SD6031WIFで使用されているフォーマットです。
SDカードにアクセスする際に、簡単にアクセスできるように、1セクタ=512バイトにしています。
0x00で埋めている部分は使用してませんので、実際には何でも構いません。
1DD/2D:
それぞれの1セクタ256バイトの後に、0x00を256バイト続けます。
トラック#0セクタ#1(256バイト)
0x00 ×256バイト
トラック#0セクタ#2(256バイト)
0x00 ×256バイト
:
トラック#79セクタ#16(256バイト)
0x00 ×256バイト
1D:
それぞれの1セクタ256バイトの後に、0x00を256バイト続けます。
さらに1トラックの後に、0x00を
(1DD/2Dで奇数トラックに当たる部分をベタ0x00にしています)
トラック#0セクタ#1(256バイト)
0x00 ×256バイト
トラック#0セクタ#2(256バイト)
0x00 ×256バイト
:
トラック#0セクタ#16(256バイト)
0x00 ×256バイト
0x00 ×
トラック#1セクタ#1(256バイト)
0x00 ×256バイト
:
トラック#1セクタ#16(256バイト)
0x00 ×256バイト
0x00 ×
:
トラック#39セクタ#16(256バイト)
0x00 ×256バイト
0x00 ×
ファイルサイズは、1D、1DD/2Dとも、655360バイト(0xa0000バイト)になります。
○D88フォーマット(〜.d88):
業界(?)標準のフォーマットです。
元々、PC-8801用エミュレータのフォーマットのようです。
トラック数、セクタ数が固定ではないものを対応するために、ヘッダにそれぞれのトラック先頭の場所が書かれています。さらに、それぞれのセクタ先頭に、そのトラック内のセクタ数やCHRN(シリンダ番号、ヘッダ番号、セクタ番号、セクタ長)が書かれています。
標準的に使用されているため、実フロッピーとのやり取りなどのツールもあります。
詳しくは、他のページで説明されているので、そちらを参考にして下さい。
http://papicom.net/p6v/tech.html
http://www.geocities.jp/submarine600/ (←ここの『落ちつく』の記事の一部)
○それぞれの変換ツール
D88、P31相互変換
http://tulip-house.ddo.jp/digital/SD6031/index.html
D88、DSK相互変換
http://p6ers.net/bernie/develop/d88todsk.html
D88作成
http://www.geocities.jp/submarine600/ (←ここの『R&D』の『PC-6000 シリーズ用 D88 ディスクイメージ書き込みツール』)
また、拙作のPC-8801から変換するソフトの中に、d88todsk、d88todsk1dd、などがありますが、これはD88ファイルの任意のトラック、セクタからデータを抜き出すソフトです。


細々と需要がありそうなので、遅ればせながら d88tool に D88/P31/DSK の相互変換機能をつけてみました。
P31 はイメージサイズが全部同じなので 1D/1DD/2D の区別はなく、刺したイメージにあわせて手動で指定する感じなのでしょうか。
1D の場合のみハード側でトラック2倍、みたいな。
ついでに P31 の HDD イメージ取り扱い機能もおまけで付けました。
P6 側の入出力ルーチン書かないと意味ないですが。
P31/DSK は、1DD/2Dの区別はありません。
また、P31 では1D/1DD/2D の違いが無いので、P31→d88への変換は、実行時に指定する事になると思います。
変換ツールは作ろうと思って、そのままほったらかしていたので(^^;) 助かります。
P31 の HDDモードは、使っている人が皆無かもしれませんが(^^;)