2013年03月19日

P6のフロッピー関連

  P6のBASIC-ROMで対応している、フロッピー関連の情報をまとめてみました。
  特に、SRと外付けドライブが出てくると、話がかなりややこしいです。


1.外付けドライブについて

  外付けドライブは、すべてのP6で接続が可能。
  ただし、以下の条件あり。

  初代機:拡張ユニット(相当)が必要。8255+0xD0〜0xD3のデコーダ回路。
      拡張BASICが必要。

  66、66SR:接続のためのインタフェース回路が必要、8255+αの回路。


  接続可能な外付けドライブは、

  PC-6031  :1D
  PC-6031SR :1DD
  PC-8031  :2D 1D
  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 となる。

  外付けドライブが4つ存在しても、#3、#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 や独自でフロッピーインタフェースをプログラムしている場合は、上記の限りではありません。
  ハードウエア的には、どんな種類のものでも接続は可能ですので。




posted by えすび at 17:56| Comment(4) | P6解析:FDC周り | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
たしかPC-8031は1Dなのでは?
後から出たPC-8031-2WやPC-80S31が2Dだったはず。
(間違えていたらスイマセン。)
うちではPC-80S31を使っていますが、こちらはmk2では1D,mk2SRでは2Dとして使えています。
Posted by ゆうじろう at 2013年03月22日 00:01
ご指摘ありがとうございます。

http://vuj.dip.jp/~mkato/pc88/

↑辺りで調べましたが、その通りのようです。

ちなみにうちのはPC-80S31Kで、同じようにmk2SRで使えています。

1DDの代わりに使えるのを、他の人に言われるまで知りませんでした...

Posted by えすび at 2013年03月22日 09:11
お久しぶりです。引越でバタバタしているうちに進んでいますね。

> このフラグが外付けドライブの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インチにした方が検証しやすいかも?
Posted by かかっくん at 2013年04月04日 05:10
>>2Dのサイド1を1DDの奇数シリンダの代わりとして使えるワケですね。
>>でもN88とはファイルシステムが違いそうですが。
>>やっぱり1Dでの互換性しかなさそうな...(まさか1Dの互換性もないとか?)

N88-BASICと比較した事はないので、よく分かりません。
単純に論理フォーマットに互換があるかどうかの問題ですよね。


>>外付けFDDを3.5インチ化したものを用いて書き込んだFDを内蔵FDDで読めたりしますか?
>>逆にP66のFDDを5インチにした方が検証しやすいかも?

これも、使うドライブの問題、要するに物理的な問題になると思います。
論理的なフォーマットは外付けでも内蔵でも同じはずです。

Posted by えすび at 2013年04月04日 08:19
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。