MS-DOSのサウンドカードドライバとは何ですか?
私の知る限り、MS-DOSもBIOSもサウンドカード用のAPIを提供していません。したがって、今日私たちが知っているように、「ドライバー」の概念はありません。セットアップパッケージに含まれているアクセサリやサンプルファイル、Windows関連のものとは別に、DOSプログラムがサウンドカードを使用するために必要なものは何ですか?
私がどこかで読んだのにもう見つけられないことの1つは、一部のサウンドカードは電源投入時に「非アクティブ」であり、機能するには何らかの初期化が必要なことです。これについてコメントしていただけますか?
回答
DOSの他のプログラムに「ドライバ」サービスを提供する一般的な方法は、ソフトウェア割り込みベクタをインストールするTSR(Terminate and Stay Resident)プログラムを実行して、実行中のDOSプログラムがサービスに対してこのINTを呼び出すことができるようにすることです(ラルフブラウンの割り込みリストを参照)。
ただし、健全なコンテキストでは、プログラムは通常、I / Oポートを直接読み書きし、必要に応じて割り込みとDMA転送を処理することにより、デバイスI / Oを直接実行します。おそらく、少なくとも部分的には、マルチメディアサービスが急速に進化していたという事実が原因です。
DOSが提供するリソース管理がない場合、デバイスを手動で検出する必要があります。これは少し注意が必要で、I / Oスペースに何がインストールされているかによってはクラッシュを引き起こす可能性があります。一部のデバイスは、このリスクを軽減するためにinitシーケンスが実行されるまで、最小限のI / Oフットプリントしか監視しなかった可能性がありますが、これは、AdLib、Roland MPU-401 MIDI、およびクラシックSoundBlaster用に自分で作成したサウンドルーチンから認識した動作ではありません。カード。
主に、検出は、従来のI / O、IRQ、およびDMAの割り当てに基づいており、これらの構成ポイントを指定する環境変数の規則によって補完されています。
あなたは基本的に、期待されるデバイスの存在下で特定の結果のみを与えるはずのコードを作成し(fxはAdLibカードにオンボードタイマーを設定します)、従来のまたは指定されたI / Oアドレスに対して盲目的に実行して見ました空から落ちたもの。
概要:
Real Sound Blasterは、初期化またはサポートするためのドライバーを必要としません。クローンは1回限りの初期化が必要な場合があります。エキゾチックカードには、メモリ常駐の変換レイヤーが必要な場合があります。
ゲームは、カードごとのドライバーのコレクションを使用して、適切なハードウェアインターフェイスと「通信」します。これらは、ゲームにハードコーディングすることも、HMIやMilesなどの外部ファイルのコレクションに組み込むこともできます。
状況に応じて、これらの一方または両方が適用される場合があります。
本物のSoundBlasterでHalloweenHarryを再生するために、追加のファイルは必要ありません。SBサポートはハードコーディングされています。
再生するにはテーマ病院のMS-DOSの下でSBライブPCIに、ゲームは抽象SBカードにサードパーティのマイルのドライバを使用しています。カード自体には、古いSBカードのハードウェアインターフェイスを模倣するためのLiveドライバーが必要です。
ここでこれまでに示したすべての答えは、さまざまなシナリオで正しいものです。混乱する可能性があるのは、どちらも正しく「ドライバー」と呼ばれる可能性のある2つの異なるフェーズがあることです。私が何を意味するのか説明させてください:
ここでのほとんどすべては、デジタル化されたオーディオ出力とAdLib / OPL2 / OPL3サポートの両方に等しく適用されます。
1)インターフェースを提供するための初期化とサポート
正規のファーストパーティのSoundBlasterシリーズのカードは、I / Oポートを介して直接プログラムされます。カードとの間のすべてのデータ移動を処理する「DSP」*と呼ばれるチップが搭載されています。本物のSoundBlasterをお持ちで、ゲームがSound Blasterシリーズハードウェアプログラミングガイドで説明されているインターフェイスを使用してDSPと「SoundBlasterを話す」方法を知っている場合は、それだけで十分です。
*(通常、リバーブのようなプログラム可能なエフェクトを提供する、後の使用法での「DSP」と混同しないでください。)
クローンカードまたはサードパーティの「互換性のあるカード」をお持ちの場合は、次のいずれかが適用されます。
- クローンカードは、Sound Blasterシリーズカードの1つとして正確に機能し、「ドライバー」による追加の介入は必要ありません。
- カードは「不活性」で始まり、初期化が必要です。これは、IRQおよびDMA設定がジャンパーではなくソフトウェアで行われる1995〜 1997年のPnP互換カードで一般的です。私のAvanceALS100 +ベースのカードとCMI8330カードは、動作する前に起動プログラムを実行する必要があります。このプログラムはカードと通信し、使用するIRQとDMAを指示し、それ以降、カードはクローンカードとして機能します。ゲームのSoundBlaster DSPコマンドをAvanceコマンドなどに変換する永続的なプログラムはメモリに存在しません。クローンのようなカード用の「ドライバ」をインストールしている場合、これはおそらく当てはまります。
- カードがGravisUltrasoundのようにエキゾチックであるため、または非常に新しい(比較的言えば、1996年以降)Sound Blaster / Ensoniq PCIカードであるために、カードがクローンカードとして直接機能できない場合、単純に初期化して、 SBクローンカード。これらのカードでは、Sound Blaster DSPコマンドをインターセプトし、カードが理解できるコマンドにリアルタイムで変換するために、ソフトウェアシムレイヤーを常駐ロードする必要があります。GUSの場合、これはSBOSです。プレイしているゲームがネイティブでGUSをサポートしている場合は、SBOSは必要ありません。FMチップ/クローンチップが存在しないカードの場合、シムレイヤーはソフトウェアでオーディオをリアルタイムで合成し、結果がまちまちになる場合があります。
2)インターフェースを消費するためのゲームサポート
上記とは完全に独立して、特定のサウンドカードと話すゲームの機能を提供する「ドライバー」です。これは、より正確にはオーディオライブラリと呼ぶことができますが、Sound Blaster / Windows Sound SystemなどのDSPプロセッサとも通信する必要があるため、ドライバでもあります。この点で、DOSゲームはそれ自体がミニオペレーティングシステムのようなものです。
このドライバーは、サウンドカードインターフェイスの基本プリミティブをゲーム開発者にとって便利で一貫性のあるコマンドセットに抽象化するルーチンのライブラリの形式を取ります。
Sound Blasterは、それ自体で、オーディオおよびFM機能の単一の出力ストリームを提供します。GravisUltrasoundまたはSBAWEは、サウンドカードRAMに常駐するサンプルの複数の短いループストリームへのウェーブテーブルインターフェイスを提供します(AWEの場合はSBデジタル化ストリームとFMに加えて)。PCスピーカーからビープ音が鳴ります。
ゲームプログラマーは、このレベルの詳細については考えたくありません。音楽を開始したり、爆発を再生したりする必要があります。出力の開始/停止、効果音の開始/停止、ミックスなどの詳細を抽象化するのはドライバーの仕事です。それら、ボリュームの変更など。
初期のゲームは、アドホックファッションの一種でゲームに直接コード化されたこれらのドライバを持っているでしょう-ハロウィンハリーは唯一のオリジナルサウンドブラスターをサポートすることができ、およびサポートは、ゲームの中にハードコーディングされています。Rise of the Triadには、独自の巨大なサウンドライブラリがあります。 RoTTはオープンソースであるため、Githubでさまざまな初期化およびサポートルーチンをすべて確認できます。
Theme Hospitalのような最近の成熟したMS-DOSゲームでは、MilesやHMIのようなライブラリが使用されます。数十のサウンドカードが利用可能なサウンドカードのセットアップ画面を見た場合、それらはおそらくこれらのライブラリの1つを使用します。さまざまなサウンドカードドライバが.386
or.ovl
またはor.hmi
ファイルとしてディレクトリリストに表示される可能性があるため、これを指摘します。以下のようなエピックMegaGamesジェンセン・ライブラリーのゲームの一つは、2097年に入らなければならないとジャズJackrabbitのはで彼らのサウンドカードドライバを格納しMDRV---R.MUS
たファイル。
1)のサウンドカードドライバは、必要に応じて、サウンドカードと一緒にインストールディスクに提供されます。
2)のサウンドカードドライバは、ゲーム自体に付属しているか、ゲーム自体の一部です。
ほとんどのPCIサウンドカードは、SoundBlasterまたはAdLibの存在を期待するゲームやその他のアプリケーションのハードウェアサポートを備えていません。古いカードは、「レジスタレベルの互換性」と呼ばれるものを提供するために特別な努力を払ったため、既存のさまざまなゲームで使用できました。PCIが登場するまでに、WindowsがPCオペレーティングシステムとして選択されるようになったため、ハードウェアレベルでのDOSゲームとの互換性はそれほど重要ではありませんでした。
これらの新しいカードのDOS「ドライバー」は実際にはエミュレーションソフトウェアであり、AdlibおよびSBハードウェアが通常占有するI / Oポートへのアクセスを傍受し、それらを実際のサウンドカードに変換するコマンドに変換します。これには、ソフトウェアでのオーディオ合成および/またはミキシングの実行が含まれる場合があります。
他のハードウェアと同様に、サウンドカードのハードウェアは、未構成の状態で電源を入れた後、「操作の準備」をする必要があります。
通常、これは、特定のハードウェアポートやメモリアドレスに特定の値を書き込むことで構成されます(サウンドカードの存在をテストした後)。これで、サウンドカードを操作できるようになります。
Windowsまたはその他の最新のオペレーティングシステムでは、これはオペレーティングシステムを起動し、存在するハードウェアをスキャンするときにドライバーによって実行されます。DOSでは、この構成は(通常)起動時にサウンドカードを利用するゲームまたはアプリケーションによって行われます。アプリケーションが起動する前は、ハードウェアはまだ構成されていません。
Sound Blasterが最初に導入されたとき、デジタル化されたオーディオ機能を使用するための文書化された方法は、CreativeLabsによって提供されたコードの提供されたblobを利用することでした。メモリが機能する場合、このコードのブロブを使用するには、16の倍数のアドレスでRAMに読み込み、そのアドレスの正規化された形式で呼び出す必要があります(開始したセグメントのオフセットゼロ)。メモリが機能する場合、MIDIインターフェイスはI / Oポート操作の観点から定義されており、ドキュメントには、十分に高速に実行できたコードがDMAを使用せずに個々のサンプルをI / Oポートに出力する方法が指定されている可能性があります。実際にSoundBlasterを使用したプログラムの数です]が、Creative Labsの期待は、人々が提供されたコードのブロブを使用することだったと思います。はっきりしなかったと思いますがプログラマーが常にそのblobを特定の場所の特定の名前のファイルに入れて、別の実装に置き換えることができると期待していたのか、それともプログラマーがそれに割り当てるスペースの量を期待していたのか。