2009-05-13 9 views
0

こんにちは私はint 0x80を使用してnasmアセンブリプログラムからサウンドカードにアクセスする方法を知りたいと思います。 また、サウンドカードにアクセスする際には、どの値をレジスタに入れるべきですか?誰もが知っていればnasmを使用してLinuxでサウンドカードにアクセスする方法

我々は、サウンドカードまたは他のハードウェアデバイスにアクセスするためにカーネルに渡す必要があり、引数の詳細を持っている任意のマニュアルか何かがある、私に教えてくださいしてください。

私はたくさんのCライブラリやALSA、OSSなどの検索を行っていましたが、基本的なことを知っている人ならアセンブリプログラムのインターフェースハードウェアと一緒に。

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

答えて

1

これまで見てきたように、LinuxのユーザースペースとカーネルスペースのインターフェイスはINT 0x80です。 UNIXで

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

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

この通信を観察するには、既存のアプリケーションで使用されているシステムコールを確認するために 'strace'を使用できます。通常、あなたがCライブラリを通じて「オープン」に取得したい

 
    open("/dev/dsp", ...) 
    ioctl() 
    write() 
    ... 
    write() 
    close() 

が、あなたはそれをスキップしたいので、あなたはシステムコールにいくつかの方法を見つけることができます - :

はあなたのようなシーケンスを参照してくださいする可能性があります一つの方法は、例えば

 
     objdump -d /usr/lib/libc.a 

だろう、あなたはオープンで< __libc_オープン>を探していることにより、システムコールの0x5であることを見つけることができます: あなたはそのEAXが5で、残りのパラメータは、EBXにあるわかります、 ecxとedx。 (使用法とパラメータはLinux Syscallsにも記載されています)

0

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

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

1

これはサウンドカードのドライバが行うものです。 O/Sまたはアプリケーションで使用できる共通のAPIを実装するためには、各サウンドカードごとにカスタム記述する必要があります。他のハードウェアデバイスでも同様です。ハードウェアメーカは、このレベルで物事にアクセスする方法については(あくまで)オープンになる傾向がありません。

私はLinuxの専門家ではありませんが、これはすべてのO/Sのかなり基本的な問題です。

0

あなたがしようとしていることは、既存のライブラリを使用してサウンドカードのインターフェイスを処理する方がよいでしょう。サウンドカードドライバは、私は疑いがあり、それは最高のLinuxでCで行われるだろう。

Portaudioは、比較的使いやすい1つ(無料)の1つです。 one example lib using portaudio with a C interface (I'm the author of wwviaudio)

FMODは、ゲームプログラミングの人にとっては大きなものに見えますが、無料ではありません。

sdl mixerは、Linuxのゲーム開発者にとって大きなものです。

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

ユーザ空間からオーディオハードウェアに直接話すことには意味がありません。

関連する問題