特に、SRと外付けドライブが出てくると、話がかなりややこしいです。
1.外付けドライブについて
外付けドライブは、すべてのP6で接続が可能。
ただし、以下の条件あり。
初代機:拡張ユニット(相当)が必要。8255+0xD0〜0xD3のデコーダ回路。
拡張BASICが必要。
66、66SR:接続のためのインタフェース回路が必要、8255+αの回路。
接続可能な外付けドライブは、
PC-6031 :1D
PC-6031SR :1DD
PC-8031 :
PC-80S31 :2D
等が接続が可能。
1DDと2Dは、外付けドライブとしては同じものとみなされる。
(0〜79トラックのメディアとして扱うため)
PC-6031SR と PC8031 は、1D/1DD(1D/2D) の切り替え機能を持っている。
リセット直後は1Dモードで、SetModeコマンド で、1DD(2D)に切り替える事が可能。
PC-6031は、1D 固定です。
2.電源投入後(リセット後)のドライブの認識について
・初代機、mk2
外付けドライブの接続確認を行う。手順は次の通り。
○8255のポート(0xD0〜0xD3)をアクセスして、8255が接続しているかを確認する。
○その後、外付けドライブに対して、Initialize、DriveStatusコマンドを発行して、ドライブが接続されているかを確認する。
・66
最初に内蔵ドライブの接続確認を行う。手順は次の通り。
○uPD765に対して、Specifyコマンドの後、ドライブ#1、ドライブ#2にRecalibrateコマンドを発行し、ドライブが接続されているかを確認する。
次に外付けドライブの接続確認を行う。手順は、mk2と同様。
・mk2SR、66SR
最初に内蔵ドライブの接続確認を行う。手順は、66と同様。
次に外付けドライブを確認する。
手順は、mk2と同様の処理の後、GetMemoryコマンドを使ってドライブの0x07FE の値を読み出し、0xFFでない場合は以下を行う。
○ SetModeコマンドを発行する。コマンドが正常終了した場合は、1D/1DD(1D/2D)切り替えが出来るドライブだと判断し、1DD(2D)に切り替える。
また、ドライブの0x07FE の値が0xFFでない場合は、メディアへの読み書き時、通常の1バイト送信/受信ではなく、2バイト送信/受信を行う。
mk2SR、66SRに、1D 固定のドライブを接続した時は、起動時間が遅くなります。これは、存在しないSetModeコマンドを発行して、タイムアウトでエラーになるまで待っているためです。
3.ドライブ番号
内蔵ドライブ#1、内蔵ドライブ#2、外付けドライブ#1、外付けドライブ#2の順で、認識できたものから順に、ドライブ番号1〜4が割り当てられる。
files コマンドの場合、files 1、files 2 、files 3、files 4 となる。
初代PC-6001+拡張BASIC と、mk2 は、外付けドライブを4つまで認識する。
66/mk2SR/66SR は、内蔵2つ+外付け2つが最大で、外付け4つは認識しない。
4.フロッピーのオート起動
フロッピーからのオート起動よりも拡張ROMの方が先のため、併用する時は注意が必要。
・初代機
オート起動は不可。
・mk2、66
ドライブ番号1のトラック#0、セクタ#1(先頭セクタ)の256バイトを0xF900〜0xF9FFにロードする。
0xF900〜0xF902 が "SYS" ならば、0xF903 をCALLする。
"SYS"以外の場合は、BASICの選択画面になる。
"SYS" 文字列がある場合は、0xF903 から独自のプログラムが走る事になる。
しかし、そのままRET した場合は、"SYS"以外の場合と同様に、BASICの選択画面になる。
この時、0xFF4E に モード番号-1 を書き込むと、RET した時にそのモードを選択した状態になり、モード選択の画面をスキップできる。
・mk2SR、66SR
ドライブ番号1のトラック#0、セクタ#1(先頭セクタ)の256バイトを0xC000〜0xC0FFにロードする。
0xC000〜0xC002 の内容により、以下の処理を行う。
"SYS"の時、ドライブを1Dにして、66-BASICへ移行(上記66のオート起動を実行する)
"RXR"の時、ドライブ状態はそのままで、66-BASICへ移行(上記66のオート起動を実行する)
"IPL"の時、0xC003 をCALLする。
CALLから返ってきた時は、Zflag=0 なら、BASICの選択画面になる。
Zflag=1 なら、BASIC選択画面にならずに、SR-BASIC(MODE=6)が立ち上がる。
FILESの数は、CALLから返ってきた時のAregの値になる(ノーチェックなので設定値に注意が必要)。
また、0xFF4E に モード番号-1 を書き込むと、Zflag=1 の時と同様の動作をする。
"SYS"、"RXR"、"IPL"以外の時、BASICの選択画面になる。
"RXR" は、"SYS"の1文字前、という意味のようです。
5.SRでの1D/1DD(1D/2D)の切り替えの注意
1DD(2D)のドライブを使っている時は、先頭セクタが"SYS" で始まっているフロッピーで起動した場合以外は、1DD(2D)となっているはずである。
外付けドライブが1D固定のものに関しては、必ず1Dである(当たり前であるが)。
動作しているBASICのモードとは直接関係がないので、66-BASICで1DD(2D)とか、SR-BASICで1Dとかが有り得る。
また、66SRの内蔵ドライブは1DDであるが、ソフトウエア的に1Dとしてアクセスしている(単純に偶数トラックだけにアクセスする)。
フラグで1Dか1DDかを切り替えているようである。
このフラグが外付けドライブの1D/1DD(1D/2D)のフラグと共通しているらしく、外付けドライブを1D固定のもの(PC-6031等)にすると、内蔵ドライブも1Dになってしまう(バグ?)。
つまり、66SRにつながれている内蔵ドライブ、外付けドライブに関係なく、全て1Dドライブ、全て1DD(2D)ドライブという認識になるようである。
CP/M や独自でフロッピーインタフェースをプログラムしている場合は、上記の限りではありません。
ハードウエア的には、どんな種類のものでも接続は可能ですので。


後から出たPC-8031-2WやPC-80S31が2Dだったはず。
(間違えていたらスイマセン。)
うちではPC-80S31を使っていますが、こちらはmk2では1D,mk2SRでは2Dとして使えています。
http://vuj.dip.jp/~mkato/pc88/
↑辺りで調べましたが、その通りのようです。
ちなみにうちのはPC-80S31Kで、同じようにmk2SRで使えています。
1DDの代わりに使えるのを、他の人に言われるまで知りませんでした...
> このフラグが外付けドライブの1D/1DD(1D/2D)のフラグと共通しているらしく、外付けドライブを1D固定のもの(PC-6031等)にすると、内蔵ドライブも1Dになってしまう(バグ?)。
> つまり、66SRにつながれている内蔵ドライブ、外付けドライブに関係なく、全て1Dドライブ、全て1DD(2D)ドライブという認識になるようである。
これが例の混在できない原因ですね。ワークエリアとかにフラグが1ヶ所しかないのでは?
> ハードウエア的には、どんな種類のものでも接続は可能ですので。
ハードウェア的には、その後出たPC-8831-MW(2HD)やPC-88T31(3.5インチ2TD、
ただし2DD/2HDは(元から)読み込みのみ)も接続できますね。このI/Fに接続する
HDDとかは出ませんでしたが。
> 1DDの代わりに使えるのを、他の人に言われるまで知りませんでした...
2Dのサイド1を1DDの奇数シリンダの代わりとして使えるワケですね。
でもN88とはファイルシステムが違いそうですが。
やっぱり1Dでの互換性しかなさそうな...(まさか1Dの互換性もないとか?)
外付けFDDを3.5インチ化したものを用いて書き込んだFDを内蔵FDDで読めたりしますか?
逆にP66のFDDを5インチにした方が検証しやすいかも?
>>でもN88とはファイルシステムが違いそうですが。
>>やっぱり1Dでの互換性しかなさそうな...(まさか1Dの互換性もないとか?)
N88-BASICと比較した事はないので、よく分かりません。
単純に論理フォーマットに互換があるかどうかの問題ですよね。
>>外付けFDDを3.5インチ化したものを用いて書き込んだFDを内蔵FDDで読めたりしますか?
>>逆にP66のFDDを5インチにした方が検証しやすいかも?
これも、使うドライブの問題、要するに物理的な問題になると思います。
論理的なフォーマットは外付けでも内蔵でも同じはずです。