ディスク周りのハードを実装中です。
FDC のμPD765 以外に、DMA用のバッファやI/Oも必要になります。
FDC に関しては、SDカードが関連するディスクのリード、ライト以外のコマンドは実装が完了し、DMA用のバッファやI/Oも実装が完了しました。
また、フロッピーの選択画面やフロッピードライブの使用ドライブ数の選択も実装済みです。
μPD765 に関しては15のコマンドがあり、一応全部実装しようかと思っています。
実装済み
Recalibrate/Seek
Sense Interrupt Status
Sense Device Status
Specify(設定された値はダミー)
Invalid
実装中
Read Data/Read Deleted Data
Write Data/Write Deleted Data
Read ID/Write ID
Read Diagnostic
Scan Equal/Scan Low or Equal/Scna High or Equal
BASIC で使っているコマンドは、この内の数個なんですが、一応全部実装しようかと考えています。
ここまで実装出来ると、P66 のBASIC-ROM が立ち上がるはずなので試してみました。
ドライブ数を0にすると普通に立ち上がります(Recalibrate でエラーを返すとドライブ数0と判断する)。
ドライブ数を1にした場合、ファイルを選択しないと(フロッピーを入れないと)ずっと起動しません。
これは、Read Data のコマンドを投げて、値が返っているのを待っているためです。
とりあえず、Read Data のダミーを作って試してみましたが、ナゼか起動しない。
...起動しないじゃなくて、起動にすごく時間が掛かっているようでした(5分くらい)。
原因は、ディスクのモータON の時の時間待ちルーチンでした。
0xD4 にディスクのモータの状態を調べるI/Oポートがありますが、これを実装していないため、常にモータOFF の状態だと判断したようです。
そのため、モータOFF と判断→ モータON → 時間待ち を何度も繰り返すため、起動に5分くらい掛かっていたようでした。
0xD4 を常に モータON にするようにしたら、一瞬で起動するようになりました。
2012年04月23日
この記事へのコメント
コメントを書く

