SD-6031 の仕様

ドライブ、トラック、セクタの表し方

ドライブ番号: 0 〜 3 (BASIC で言うドライブ 1 が 0)
論理トラック番号: 0 〜34 (1D), 79 (2D)
セクタ: 1 〜 16

1D モードの場合、論理トラック番号は2倍される。

P31 フォーマット

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倍にしてアクセスする。

実装されているコマンドの詳細

コマンド 0

ドライブの初期化(本機では何もしない)
レトロ PC -> 本機: 0

コマンド 1

セクタ数の長さ (1-16) のデータを、指定したドライブ番号、トラック番号、セクタ番号から書き込む。
二つのトラックにまたがる書き込みは出来ない。
セクタ 16 の次はセクタ 1 に戻る。
レトロ PC -> 本機: 1, セクタ数, ドライブ番号, 論理トラック番号, セクタ番号, データ...

コマンド 2

セクタ数の長さ (1-16) のデータを、指定したドライブ番号、トラック番号、セクタ番号からリード・バッファに読み出す。
本機では、SD カードからの実際の読み出しはコマンド 3 又は 18 で行う。
二つのトラックにまたがる読み込みは出来ない。
セクタ 16 の次はセクタ 1 に戻る。
レトロ PC -> 本機: 2, セクタ数, ドライブ番号, 論理トラック番号, セクタ番号

コマンド 3

コマンド 2 で指定したデータをレトロ PC に読み出す。転送されるデータ量はコマンド 2 で指定したデータ量。
レトロ PC -> 本機: 3
本機 -> レトロ PC: データ...

コマンド 4

指定したドライブ番号、トラック番号、セクタ番号から、指定したドライブ番号、トラック番号、セクタ番号へ、 セクタ数の長さ分コピーする。
二つのトラックにまたがるコピーは出来ない。
レトロ PC -> 本機: 4, セクタ数, ソースドライブ番号, ソース論理トラック番号, ソースセクタ番号,
ディスティネーションドライブ番号, ディスティネーション論理トラック番号, ディスティネーションセクタ番号

コマンド 5

指定したドライブ番号のディスクをフォーマットする。
レトロ PC -> 本機: 5, ドライブ番号

コマンド 6

直前のコマンドの実行結果を得る。
第 7 ビット: 常に 1
第 6 ビット: リード・ バッファにデータがあるなら 1
第 0 ビット: 直前のコマンドがエラーなら 1
レトロ PC -> 本機: 6
本機 -> レトロ PC: 実行結果

コマンド 7

ドライブの状態を得る。
第 4 ビット: ドライブ 1 がマウントされていれば 1
第 5 ビット: ドライブ 2 がマウントされていれば 1
レトロ PC -> 本機: 7
本機 -> レトロ PC: ドライブの状態

コマンド 8 - 10

未実装

コマンド 11

ディスクユニット内のメモリの内容を本体に転送するコマンドだが、本機では未実装。
(75Fh 番地、または 7EFh 番地の内容を聞かれた場合のみ、それぞれ 77h, EFh を返す。)
レトロ PC -> 本機: 11, スタートアドレス上位, 下位, データ量の上位, 下位
本機 -> レトロ PC: データ

コマンド 12 - 16

未実装

コマンド 17

コマンド 1 と同じだが、ハイスピード・ハンドシェークで転送する。未検証。

コマンド 18

コマンド 3 と同じだが、ハイスピード・ハンドシェークで転送する。未検証。

コマンド 23

データの下位4ビットで、各ドライブを 2D にするか 1D にするかを指定。2D ならビットが1、1D ならビットが 0。
レトロ PC -> 本機: 23, データ

コマンド 24

コマンド 23 で指定した、1D / 2D の指定を返す。
レトロ PC -> 本機: 24
本機 -> レトロ PC: データ

レトロ PC と本機のハンドシェークの方法

レトロ PC へデータを送る

RFD が 1 になるのを待つ
データを出力
DAV に 1 を出力
DAC が 1 になるのを待つ
( ハイスピード・ハンドシェークの場合、2バイト目を出力 )
DAV に 0 を出力
DAC が 0 になるのを待つ

レトロ PC からデータを受ける

RFD に 1 を出力
DAV が 1 になるのを待つ
RFD に 0 を出力
データを入力
DAC に 1 を出力
DAV が 0 になるまで待つ
( ハイスピード・ハンドシェークの場合、2 バイト目を入力 )
DAC を 0 にする

ATN の扱い

本機は、まず ATN が 1 になるのを待ち、コマンドを受け取り、ATN が 0 になれば、 以下のパラメータを受け取り、コマンドを実行する。

資料

PC-6001 mkII のフロッピーディスク端子

端子番号端子名入出力機能
1〜8PB0-7出力データ出力
9N.C.-
10〜18GND-信号グランド
19〜26PA0-7入力データ入力
27〜30PC4-7出力ATN: DAC: RFD: DAV
31〜34PC0-3入力ATN: DAC: RFD: DAV
35RESET出力リセット
36GND-信号グランド

参考文献

PC-8801、mkII DISK 活用ハンドブック、 藤井保則、星野博和、テクノポリス・ブックス
フロッピディスク入門ハンドブック、山内 直著、秀和システムトレーディング