現在地

FDCボード (テスト編 その2)


テーマ:

カテゴリー:

前回手動でコマンド発行するところまで書きました。

このままでは面倒ですし、何よりデータ転送を伴うコマンドが使えません。

メモリ上にコマンドとパラメータ列を書いておいて自動で送信、リザルトステータスの受信までを行えるようにします。

当初はステータスレジスタを参照しながら送信・受信を自動切換えさせようとしたのですが、なぜか不安定だったのでパラメータやリザルトのバイト数を指定するように変更しています。

FDCのマニュアルを読みながらだったので何かを見落としていた可能性が高いです。

これでFDCとのやりとりはできるようになったので、実際にディスクを読んでみることにします。

READ DATA を試してみた
これがREAD DATAを試してみたところです。

前回からかなり拡張していて、「80>」はステータスレジスタが0x80であることを表しています。

「cs」はRECALIBRATEコマンドで、ヘッドをトラック0に戻しています。「02/00」はコマンドとパラメータが2バイト・リザルトが0バイトの意味でデバッグ用です。もう消しても良いかな。

「88>」はステータスが0x88に変わって、ドライブ3のヘッド移動を表しています。これはコマンドを送った直後でまだ移動は完了していません。

Enterを空打ちしてプロンプトが「88]」に変わっていますが、これは完了してINTがアサートされたことを示しています。

「cci」はCHECK INTERRUPT STATUSコマンドで、「01/02」の意味は前記のとおり、「23 00」はリザルトステータスです。「23」はドライブ3でTRK0を検出していること、「00」はトラック0を表しています。

「ci」はREAD IDコマンド、現在トラックのヘッド0で実行されます。まだテストなのでヘッドは決め打ちになっています。リザルトが長いですね。先頭の「03 00 00」はドライブ3で正常終了です。続く「00 00 01 02」が最初に発見したID、トラック0のヘッド0は通常フォーマットされていればどのセクタも一緒になります。「01」がセクタ番号で1なのは単なる偶然、何度も実行すれば他の値になることもあります。「02」はセクタ長が512バイトを表しています。

「cr」がREAD DATAコマンド、本来読むべきセクタを指定するのですがパースが面倒なので直前の「ci」コマンドの結果をそのまま使うようになっています。「43 20 20」はドライブ3でデータフィールドにCRCエラー発生を表しています。

FDCにはセクタ分のバッファは無いのでCRCエラーでもデータは転送されています。「d0」でバッファメモリの先頭部分をダンプしてみました。先頭セクタなのでIPLですが、「IO.SYS」「MSDOS.SYS」の名前があってPC-9801系のようですね。

(つづく)

参考文献・関連図書: 
HD63265ユーザーズマニュアル, Hitachi.

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページアドレスとメールアドレスは、自動的にハイパーリンクに変換されます。
  • 行と段落は自動的に折り返されます。
※ コメントは原則公開です。個別のご相談などは「ご意見・ご要望」からお願いします。