2013年07月22日

P6のフロッピー関連(3)

  フロッピーのオート起動時に関してです。


  N60m/N66-BASIC の場合、トラック#0 セクタ#1 を 0xF900〜0xF9FF に読み込みます。
 0xF900〜0xF902が、"SYS" か "RXR" の場合、0xF903 をコールします。


  で、0xF903 からユーザのプログラムを組むのですが、以下の点で注意が必要です。


1)ディスクの読み込みは、0x4274 を使う。

  66 のユーティリティディスクでは、

  ドライブ番号指定:0x51F2
  セクタ読み込み:0x5CFD

  を使っています。


  BASIC が起動した後では特に問題ないんですが、オート起動のプログラムでは、
 BASIC がまだ起動する前で、ワークエリアが設定されていない箇所があります。

  上記の 0x5CFD を使った場合、まだ設定されていないワークエリアの情報を
 使っているため、意図しない箇所に書き込みされる場合があります。


  代わりに 0x4274 を使用すると、上記の問題は回避されます。


2)内蔵ドライブか、外付けドライブか、どちらから読んだのかを判別する。

  ディスクからデータを読み出す際は、ROM内ルーチンの 0x4274 を使えば、
 内蔵ドライブか、外付けドライブかを判別する必要はありません。

  ただ、ROM 内ルーチンを使わない場合、内蔵ドライブ/外付けドライブの
 両方のルーチンを書く必要があります。
  両方のルーチンを書いて、起動時に使用した方のドライブのルーチンを使えば、
 同じ事が実現できます。


  ここで問題なのは、起動時に使ったドライブが、内蔵なのか外付けなのを
 判別する必要があるという事です。
  通常、66/66SR の場合は内蔵ドライブなのですが、SD6031WIF などのような
 外付け回路を使ってアクセスする事により、外部ドライブにもなり得ます。
  そのため、判別方法が必要になります。


  で、判別方法です。

 A)P6初代機、6001mk2、6001mk2SR の場合、外付け
  ディスク用のバッファがない場合は、外付けです。

 B)66、66SR の場合、ポート0xD4 のFDDモータの状態を確認する。
  ポート0xD4は、内蔵ドライブのFDD のモータが動作/停止を示します。

  データを読み込んだ後に、このポート0xD4 を読み込むと、

 動作中の場合は、内蔵ドライブからのアクセス
 停止中の場合は、外付けドライブからのアクセス

  と判別できます。


  ただ、実際に判別する場合、ちょっと厄介な処理が必要になります。

 ・内蔵ドライブを持たない機種では、モータON/OFF のポートを叩くと誤動作する事がある。
 ・モータは自動的に停止するため、データを読み込んでからすぐにアクセスする必要がある(数秒以内)。
 ・ポート0xD4 にアクセスするためには、ドライブを内蔵ドライブに切り替える必要がある。


  実際に組んでみると、以下のようになります。


判別プログラム


  ここまでする必要がある事はあまりありませんが、参考まで。


posted by えすび at 09:57| Comment(0) | P6解析:FDC周り | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

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


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

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