解決済み
多くの混乱と欲求不満の後、私はついにハードディスクを中断させました。:D基本的には、代替ステータスレジスタの代わりにステータスレジスタを読み続けたという事実に帰着しました。他にもいくつかの問題が発生して起動しましたが、要点は、私のハードディスクドライバがようやく形になり始めているということです。さて、他の人のために私は元の投稿を残します。
PSさらに明確にするために、私はどんな種類のリセットコマンドも発行する必要はありませんでした。私がしたのは次のことだけでした:
- デバイスを選択します(他のディスク上のSolaris OSを強制終了したくない)
- DEVICECONTROLレジスタのnIENビットをクリアします
- IDENTIFYDEVICEコマンドを発行します***
実際、コマンドを発行せずにコードをテストする前にラボを満足させたため、IDENTIFYDEVICEコマンドが必要かどうかはわかりません。ただし、重要な点は、代替ステータスレジスタを必ず読み取り、リセットせずにnIENビットをクリアする必要があるということです。BIOSは明らかにほとんどのものを処理します。
現在、学校で開発中のホビーOS用のディスクドライバを作成しようとしています。現在、PCI構成スペースでデータを読み書きするルーチンと、ATA/ATAPI-7で定義されたさまざまなレジスタを使用してポートIOを実行するアセンブリルーチンがあります。さて、私の質問は、具体的には、IDEハードドライブに割り込みの生成を開始させる方法を教えてください。私はこのすべてのドキュメントを調べてきましたが、何が間違っているのかはっきりしていません。
誰かがIDEハードドライブが割り込みの生成を開始する原因を正確に説明できますか?すでに割り込みサービスルーチンをテストする準備ができていますが、そもそも割り込みを取得するのに問題があります。これは、ATA SOFT RESETを介して実行できますか?
ありがとう!
更新:わかりました。ソフトリセット用にDEVICE CONTROLレジスタのSRSTビットを設定することにより、割り込みを生成するためのセカンダリチャネルであるATAPICDROMを取得できました。これは、プライマリチャネルのハードディスクでは機能しません。これまで気付いたのは、HDDのSRSTビットをセットするとBSYビットがセットされたままになるということです。そこから私は何をすべきかわかりません。