ASM と C で非常に単純な OS を作成しようとしています (NASM アセンブラー) ドライバーの有無にかかわらず、サウンド カードに直接アクセスしたいと考えています。ドライバが必要ない場合、サンプル オーディオ ファイルにアクセスしてサウンド カードに送信するにはどうすればよいですか? (例があればいいのですが)ドライバーが必要な場合、それらをインターフェースしてドライバーから関数を呼び出す方法はありますか?また、サンプル オーディオ ファイルにアクセスしてサウンド カードに送信するにはどうすればよいですか? (別の例がいいでしょう)
4 に答える
私はあなたを落胆させるのは嫌いですが、現代のサウンドカードドライバーは非常に複雑で、おそらくご存知のように、OS固有です。これは、OS開発における困難な課題の1つであるドライバーサポートです。これは、単純なコードスニペットで実現できるものではありません。
ファイルをロードするには、ファイルシステムが必要です。もう実装しましたか?「カーネル」フラグを使用したという事実は、OSがまだ初期段階にあることを示しています。オペレーティングシステムのカーネルにサウンドサポートを導入したいかどうかはわかりません。
そうは言っても、SoundBlaster16エミュレーションを備えたBochsと呼ばれる優れたエミュレーターがあります。そしてそれをプログラムする方法についてのいくつかの本当に古いドキュメント。これが最善の策かもしれません。当時、サウンドハードウェアへのアクセスははるかに簡単でした。
もちろん、ドライバーが必要です。もちろん、既存のドライバーとインターフェイスする簡単な方法はありません(OSに依存しない統合された「UniformDriver Interface」の提案がありましたが、どこにもなかったと思います)。
したがって、ハードドライブからファイルを読み取るためのコードを記述した後、独自のオーディオドライバーをロールする必要があります。
さて、私はしばらくこれを行っていないので、これは時代遅れかもしれませんが、90年代には、いくつかの「out dx、al」(詳細はサウンドカードによって異なります)を使用してサウンドカードを構成し、DMAを次のように設定しますメモリバッファからカードにデータを送信します。カード(またはDMAコントローラーでしたか?)は、バッファーの終わりに達すると割り込みを発生させます。これを使用して、バッファーに新しいデータを入力します。
カードに動作するLinuxドライバーがある場合は、まずそのコードを確認します。それ以外の場合は、Windowsドライバーをリバースエンジニアリングする必要があります。Soft-Iceのbpio(ioポートアクセスの中断)ログは、そのiircに適していました。
幸運を。
おそらく最善の策は、Linux または FreeBSD のサウンド ドライバを調べて、その動作を確認することです。最も単純なサウンド カード以外については、これより優れた実装ドキュメントが得られる可能性はほとんどありません...
これは難しい問題です。注意してください:-p
これは、すべてアセンブリで書かれた無料のオープンソース オペレーティング システムです。アセンブリ カーネル プログラミングに慣れていない場合は、このドキュメントが参考になります。