D1 - D4 ディレクトリに 2D という名前のファイルがあると、そのドライブは 2D モードとなる(他機種用)。SR で 1DD を使う場合、1D モードのままで使えるようです。
ドライブ番号: 0 ? 3 (BASIC で言うドライブ 1 が 0)
論理トラック番号: 0 ?34 (1D), 79 (2D)
セクタ: 1 ? 16
1D モードの場合、論理トラック番号は2倍される。
P31 フォーマットは、2D ディスクのデータ部分のみを記録したフォーマットであり、
2D ディスクの 1 セクタが、FAT16 の 1 セクタに対応する。
2D ディスクの 1 セクタは 256 バイトで、FAT16 の 1 セクタは 512 バイトなので、
FAT16 のセクタの後半 256 バイトは使用しない。
さらに、PC-6001 においては 2D の片面しか使用しないため、
ファイルのサイズは実際のデータのサイズの 4 倍になる。
PC-6001 のエミュレータにおいては、2D の D88 フォーマットの片面を使用して 1D のディスクを表現する。エミュレータは、ディスクへのアクセス時にトラック番号を2倍にする。 本機でも、1D モード、または、コマンド 23 で 1D を選ぶと、 トラック番号を2倍にしてアクセスする。
ドライブの初期化(本機では何もしない)
レトロ PC -> 本機: 0
セクタ数の長さ (1-16) のデータを、指定したドライブ番号、トラック番号、セクタ番号から書き込む。
二つのトラックにまたがる書き込みは出来ない。
セクタ 16 の次はセクタ 1 に戻る。
レトロ PC -> 本機: 1, セクタ数, ドライブ番号, 論理トラック番号, セクタ番号, データ...
セクタ数の長さ (1-16) のデータを、指定したドライブ番号、トラック番号、セクタ番号からリード・バッファに読み出す。
本機では、SD カードからの実際の読み出しはコマンド 3 又は 18 で行う。
二つのトラックにまたがる読み込みは出来ない。
セクタ 16 の次はセクタ 1 に戻る。
レトロ PC -> 本機: 2, セクタ数, ドライブ番号, 論理トラック番号, セクタ番号
コマンド 2 で指定したデータをレトロ PC に読み出す。転送されるデータ量はコマンド 2 で指定したデータ量。
レトロ PC -> 本機: 3
本機 -> レトロ PC: データ...
指定したドライブ番号のディスクをフォーマットする。
レトロ PC -> 本機: 5, ドライブ番号
直前のコマンドの実行結果を得る。
第 7 ビット: 常に 1
第 6 ビット: リード・ バッファにデータがあるなら 1
第 0 ビット: 直前のコマンドがエラーなら 1
レトロ PC -> 本機: 6
本機 -> レトロ PC: 実行結果
ドライブの状態を得る。
第 4 ビット: ドライブ 1 がマウントされていれば 1
第 5 ビット: ドライブ 2 がマウントされていれば 1
レトロ PC -> 本機: 7
本機 -> レトロ PC: ドライブの状態
未実装
ディスクユニット内のメモリの内容を本体に転送するコマンドだが、本機では未実装。
(75Fh 番地、または 7EFh 番地の内容を聞かれた場合のみ、それぞれ 77h, EFh を返す。)
レトロ PC -> 本機: 11, スタートアドレス上位, 下位, データ量の上位, 下位
本機 -> レトロ PC: データ
未実装
コマンド 1 と同じだが、ハイスピード・ハンドシェークで転送する。
コマンド 3 と同じだが、ハイスピード・ハンドシェークで転送する。
データの下位4ビットで、各ドライブを 2D にするか 1D にするかを指定。2D ならビットが1、1D ならビットが 0。
レトロ PC -> 本機: 23, データ
コマンド 23 で指定した、1D / 2D の指定を返す。
レトロ PC -> 本機: 24
本機 -> レトロ PC: データ
各ドライブのディレクトリ (D1 - D4) にある全ての P31 イメージファイル名をレトロ PC へ送信。
レトロ PC -> 本機: 253
レトロ PC -> 本機: ドライブ番号
本機 -> レトロ PC: (1, 8 文字の P31 ファイル名), (1, 8 文字の P31 ファイル名), ... , 0
P31イメージファイルを切り替え。
レトロ PC -> 本機: 254
レトロ PC -> 本機: ドライブ番号
レトロ PC -> 本機: 8 文字の P31 ファイル名 (拡張子を除く)
RFD が 1 になるのを待つ
データを出力
DAV に 1 を出力
DAC が 1 になるのを待つ
( ハイスピード・ハンドシェークの場合、2バイト目を出力 )
DAV に 0 を出力
DAC が 0 になるのを待つ
RFD に 1 を出力
DAV が 1 になるのを待つ
RFD に 0 を出力
データを入力
DAC に 1 を出力
DAV が 0 になるまで待つ
( ハイスピード・ハンドシェークの場合、2 バイト目を入力 )
DAC を 0 にする
本機は、まず ATN が 1 になるのを待ち、コマンドを受け取り、ATN が 0 になれば、 以下のパラメータを受け取り、コマンドを実行する。
えすび氏による HDD モードのコマンドの詳細は、彼のブログ記事を参照して下さい。
端子番号 | 端子名 | 入出力 | 機能 |
1?8 | PB0-7 | 出力 | データ出力 |
9 | N.C. | - | |
10?18 | GND | - | 信号グランド |
19?26 | PA0-7 | 入力 | データ入力 |
27?30 | PC4-7 | 出力 | ATN: DAC: RFD: DAV |
31?34 | PC0-3 | 入力 | ATN: DAC: RFD: DAV |
35 | RESET | 出力 | リセット |
36 | GND | - | 信号グランド |
PC-8801、mkII DISK 活用ハンドブック、 藤井保則、星野博和、テクノポリス・ブックス
フロッピディスク入門ハンドブック、山内 直著、秀和システムトレーディング