3

解決済み

多くの混乱と欲求不満の後、私はついにハードディスクを中断させました。:D基本的には、代替ステータスレジスタの代わりにステータスレジスタを読み続けたという事実に帰着しました。他にもいくつかの問題が発生して起動しましたが、要点は、私のハードディスクドライバがようやく形になり始めているということです。さて、他の人のために私は元の投稿を残します。

PSさらに明確にするために、私はどんな種類のリセットコマンドも発行する必要はありませんでした。私がしたのは次のことだけでした:

  1. デバイスを選択します(他のディスク上のSolaris OSを強制終了したくない)
  2. DEVICECONTROLレジスタのnIENビットをクリアします
  3. IDENTIFYDEVICEコマンドを発行します***

実際、コマンドを発行せずにコードをテストする前にラボを満足させたため、IDENTIFYDEVICEコマンドが必要かどうかはわかりません。ただし、重要な点は、代替ステータスレジスタを必ず読み取り、リセットせずにnIENビットをクリアする必要があるということです。BIOSは明らかにほとんどのものを処理します。


現在、学校で開発中のホビーOS用のディスクドライバを作成しようとしています。現在、PCI構成スペースでデータを読み書きするルーチンと、ATA/ATAPI-7で定義されたさまざまなレジスタを使用してポートIOを実行するアセンブリルーチンがあります。さて、私の質問は、具体的には、IDEハードドライブに割り込みの生成を開始させる方法を教えてください。私はこのすべてのドキュメントを調べてきましたが、何が間違っているのかはっきりしていません。

誰かがIDEハードドライブが割り込みの生成を開始する原因を正確に説明できますか?すでに割り込みサービスルーチンをテストする準備ができていますが、そもそも割り込みを取得するのに問題があります。これは、ATA SOFT RESETを介して実行できますか?

ありがとう!

更新:わかりました。ソフトリセット用にDEVICE CONTROLレジスタのSRSTビットを設定することにより、割り込みを生成するためのセカンダリチャネルであるATAPICDROMを取得できました。これは、プライマリチャネルのハードディスクでは機能しません。これまで気付いたのは、HDDのSRSTビットをセットするとBSYビットがセットされたままになるということです。そこから私は何をすべきかわかりません。

4

2 に答える 2

3

このリファレンスは、かなり役立つはずです。ATA/ATAPIのプログラミングに関するKenosの説明

割り込みを有効にする基本的なメカニズムは、DCR(デバイス制御レジスタ)のnIENをクリアすることです。

nIEN:ドライブ割り込みイネーブルビット。ホストへのドライブ割り込みのイネーブルビット。nIENが0の場合、またはドライブが選択されている場合、ホスト割り込み信号INTRQは、トライステートバッファを介してホストに有効になります。nIENが1の場合、またはドライブが選択されていない場合、保留中の割り込みの有無に関係なく、ホスト割り込み信号INTRQは高インピーダンス状態になります。

このwww.ata-atapi.comは、ATA / PATA / SATA / ATAPIについて、知りたいよりも多くの情報を見つけるための出発点として適しています...公式のATA-6 / 7/etc仕様には$がかかることに注意してください。 T13から$。ただし、ATA-8の現在のドラフトをダウンロードできます。

このリンクでは、 ATAデバイスが仕様と異なる多くの方法のいくつかについて説明しています。(私は以前、Commodore/Amiga用のSCSIおよびATA/ATAPIドライバーを作成し、ドライブの認定を支援しました。より正確には、ドライブメーカーが何をしたかを把握していました。)

于 2009-05-14T21:06:02.070 に答える
1

これが単なる趣味のOSである場合は、BIOS割り込み(int 13h)を使用してみませんか?確かに、ディスクへの直接アクセスほど高速ではありませんが、ハードドライブにとっては安全です(ディスクI / Oをいじる前に、読み取りヘッドをプレートに通しました)。

于 2009-05-14T20:37:43.293 に答える