0

こんにちは私はint0x80を使用してnasmアセンブリプログラムからサウンドカードにアクセスする方法を知りたいです。また、サウンドカードにアクセスするときにレジスタにどのような値を入れる必要がありますか。

サウンドカードやその他のハードウェアデバイスにアクセスするためにカーネルに渡さなければならない引数についての詳細が記載されたマニュアルなどはありますか。誰か知っている場合は教えてください。

私はたくさんの検索を行い、cライブラリやALSA、OSSなどもたくさんありましたが、ハードウェアとのインターフェースをとるアセンブリプログラムの基礎から学ぶことについてのリソースを知っている人がいたらいいのですが。

そして、誰かが私にアクセスがどのように行われるかについての小さなコードリストを私に与えることができれば、私は非常に感謝するでしょう。

4

4 に答える 4

1

ご覧のとおり、Linuxのユーザースペースとカーネルスペース間のインターフェイスはINT0x80です。

Unixでは、哲学の問題として、(ほとんど)すべてがファイルであるため、サウンドカードは「文字ファイル」として扱われます。カーネルのシステムコールはPOSIX仕様に準拠しているため、「open」、「close」、「ioctl」、「read」、「write」になります。

サウンドカードへのアクセスは、「/ dev /」の下のファイルとして、ドライバインターフェイスを介して行われます。いくつかのサンプルドキュメントはOSSドキュメントにありますが、現在のものかどうかはわかりません。

この通信を監視するには、「strace」を使用して、既存のアプリケーションで使用されているシステムコールを確認できます。

次のようなシーケンスが表示される可能性があります。

     open( "/ dev / dsp"、...)
     ioctl()
     書きます()
     ..。
     書きます()
     選ぶ()

通常、Cライブラリを介して「開く」ことができますが、それをスキップしたいので、syscallをいくつかの方法で見つけることができます。1つの方法は次のようになります。

      objdump -d /usr/lib/libc.a

たとえば、<open>を探すと、openがsyscall 0x5であることがわかります。eax__libc_が5で、残りのパラメータがebx、ecx、edxにあることがわかります。(使用法とパラメーターはLinux Syscallsにもリストされています)

于 2009-05-15T04:30:39.333 に答える
1

これは、サウンド カード ドライバが行うことです。O/S またはアプリケーションで使用できる共通の API を実装するには、サウンド カードごとにカスタムで作成する必要があります。他のハードウェア デバイスについても同様です。ハードウェア メーカーは、このレベルでの自社製品へのアクセス方法についてオープンではない傾向があります (1 つの理由として)。

私が Linux の専門家というわけではありませんが、これはすべての O/S に関するかなり基本的な問題です。

于 2009-05-13T19:55:09.837 に答える
0

あなたが何をしようとしているのかにもよりますが、サウンドカードドライバーを書くことを目指していない限り、おそらく既存のライブラリを使用してサウンドカードへのインターフェースを処理する方が良いでしょう. Linuxで。

Portaudioは比較的使いやすい (無料) ものです。C インターフェイスで portaudio を使用する lib の 1 つの例 (私は wwviaudio の作成者です)

FMODは無料ではありませんが、ゲーム プログラミングの専門家の間では人気があるようです。

sdl ミキサーは、Linux ゲーム開発者にとって重要なもう 1 つのツールです。

JACKは、Linux のプロオーディオの世界で大きな存在です。(熱意を考えてみてください-Protoolsに対するLinuxの答えです。)

ユーザー空間から直接オーディオ ハードウェアと通信しようとしても意味がありません。

于 2009-05-15T05:15:22.907 に答える
0

ユーザー モードからは、これは機能しません。サウンド ハードウェアに直接アクセスすることはできません。

カーネル モード ドライバーを作成すれば、サウンド カード ハードウェアを直接突くことができますが、現時点では、ほとんどのベンダーがさまざまな実装を行っており、一貫した標準に従っていないと思います。新しいサウンド カードはまだ Adlib & SoundBlaster 16 と互換性があるかもしれません。これは、ゲームが DOS をターゲットにしてハードウェアを直接使用していた頃のハードウェア標準でしたがこれが有効でなくなっても驚かないでしょう。すばやく検索すると、これらのレガシー カードのインターフェイスに直接アクセスする方法が見つかるはずです。または、仮想マシン内で DOS を実行してハードウェアにアクセスすることもできます。ほとんどの仮想マシンは、このレベルのサウンド カードをエミュレートします。

于 2009-05-13T19:54:13.393 に答える