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 にアクセスするためには、ドライブを内蔵ドライブに切り替える必要がある。
実際に組んでみると、以下のようになります。
ここまでする必要がある事はあまりありませんが、参考まで。

