doc drawn up: 2000 .. 2005-01-28

SB-AWE64 Hack

Sound Blaster AWE64 (PnP/ISA) を徹底的にいじり倒す(といっても筆者の能力の範囲内に留まるわけだが)。そもそも ISA のサウンドカードなんて、Socket7 の M/B のように完全に旧世代で全く無縁な人も多いものと思われる。しかし、AWE32/64 は、サウンドカードとしての性能(特に EMU8000 チップによる MIDI シンセサイザ音は絶品)からしたら、ゲームを中心とする一般用途としては廃棄するにはもったいないぐらいのものがあるし、ある程度普及した有力製品なので、中古・ジャンクなどによって入手できる可能性もあるかもしれないし、むざむざ捨ててしまうよりは、M/B に ISA スロットさえ備わっているのであれば、今後もできるだけ使い続けられる方策を見出せればそれに越したことはない。
――というわけで、DOS 環境で AWE64 を使うための知識をまとまった形の情報にしておいて、古い DOS ゲーム(ex. DOOM I/II)を使うために活かせればと思う。

ドライバの入手

クリエイティブのサイト(www.soundblaster.com)で入手できる。AWE64 用の DOS ドライバ(英語版)で検索するといくつかのファイルが見つかるが、このうち、求めているものは……

  1. AWE64 Basic Disk for DOS/Windows 3.1(1997-12-22, s64basic.exe)
  2. Creative PnP Configuration Manager (Rev 4)(1998-07-09, ctcmbbs.exe)

以上の 2 つのファイルのみである(AWEUTIL.COM や DIAGNOSE.EXE が単体でもダウンロードできるようになっているが、これらは s64basic.exe に含まれているものよりも古いバージョンのものなので全く必要ない)。

これらは自己解凍型圧縮ファイルとなっているが、s64basic.exe の方は、一旦解凍したものをさらに DOS 環境下でインストーラを実行して初めて各ドライバファイルが解凍される形式になっており、ちょっと面倒である。筆者の場合、一度インストーラで一時フォルダに解凍しておいて、その一時フォルダを丸ごと zip ファイルで圧縮しておき、後でインストーラなしで個別のドライバファイルを取り出せるような形でバックアップしている。

s64basic.exe にはサウンドカードのためのほとんどすべてのドライバが含まれている。このドライバセットは、DOS 用のドライバのみならず、Win3.1 で DOS 用ドライバと併せて使用することも想定された構成となっており、DOS だけで使用する場合に不必要となる Win3.1 用ドライバファイルが混在している。

s64basic.exe とは別に、ctcmbbs.exe には PnP (Plug & Play) 用のドライバ関係が含まれている。これらが別々に分けて用意されている理由は恐らく、SB16 以降の製品で PnP と非 PnP のタイプが併存したため、サウンドカード本体のためのドライバと、PnP カードとして動作させるためのドライバを、それぞれ分けて配布したことが理由だろう。もちろん、AWE64 は PnP なので、PnP 用のドライバも併用しなければならず、ctcmbbs.exe が必要になる。

最低限必要となるドライバ

最低限必要となるのは、CTCM.EXE(PnP ドライバ)と、AWEUTIL.COM(サウンドドライバ)、MIXERSET.EXE(音量調整ドライバ)の 3 つのドライバである。

図

CTCM.EXE(PnP ドライバ)

まず、PnP 用のドライバである CTCM.EXE を正しく組み込む。これをやらないと、AWE64 は、サウンド機能を発揮する/しないといった話以前に、PnP の ISA カードとして正しく動作できないことになる。

組み込み方は、README.TXT に説明されているように、config.sys に device=CTCM.EXEへのパス という形式で記述する。

CTCM.EXE は、起動時毎に、自身と同じディレクトリにある CTPNP.CFG という設定ファイルを更新(存在しなければ作成)する。

ちなみに、CTCM.EXE を組み込まなかった場合でも、SB16 互換のオーディオ機能だけは動作するようだ(ゲームの効果音は鳴る)。しかし、Wave Table を使った MIDI エミュレーションが有効にならないので、サウンド機能は動作しない(ゲームの MIDI 音楽が再生できない)。確認はしていないが、ゲームポートも有効にならない(ジョイスティックが使えない)ものと思われる。

AWEUTIL.COM(サウンドドライバ)

AWEUTIL.COM は TSR として常駐するドライバではないが、Wave Table を初期化するために必ず一度は実行する必要があるみたいだ(初期化と言っても、単にメモリ内容をクリアするのとは違うようで、電源リセットで代用できる機能ではないらしい)。CTCM.EXE の常駐によって Wave Table が有効になっていることが動作条件となる。

組み込み方は、autoexec.bat で /S オプション付きで起動時に一度実行されるようにしておけばいい。

一度 DOS を起動してからも、/S オプション付きで手動で実行することによって、その都度、(DOS を再起動するまでもなく)Wave Table を初期化することができる。例えば、DOOM を AWE32 のサウンド設定で動かすと、次に SB16 のサウンド設定に切り替えてもサウンドが鳴らなくなるのだが、/S オプション付きの手動実行で初期化すれば SB16 としてサウンドが鳴るようになる。

MIXERSET.EXE(音量調整ドライバ)

サウンド機能そのものに関しては、CTCM.EXE と AWEUTIL.COM の 2 つがその本体と言える。しかし実用上は、MIXERSET.EXE も組み込まないと、初期状態の AWE64 は非常に音量が小さく絞られているので、使いものにならないだろう。このドライバも、TSR として常駐するドライバではない(音量等を指定した値に設定するだけで、実行後はメモリから退去する)ものと思われる。

この MIXERSET.EXE は動作のために BLASTER 環境変数と AUXDRV.DRV の存在を最低限必要とする。

BLASTER 環境変数は、「BLASTER=A220 I5 D1 H5 P330 E620 T6」というような内容のものだが、(T6 の値を除いて)必ずしも各リソース(I/O, IRQ, Low-DMA, High-DMA)の設定内容が変更されないとは限らないのに注意しなければならない。PnP カードなので、リソース設定が(ハードウェア構成の変更や Windows のような PnP 対応 OS によって)随時変更され得るからだ。リソース設定に確信がある場合であれば、autoexec.bat で「set BLASTER=A220 I5 D1 H5 P330 E620 T6」という形式で固定値を指定しても問題はない。リソース設定に確信がない場合は、固定値を指定するのではなく、代わりに DIAGNOSE.EXE(後述)を用いて自動的に BLASTER 環境変数をセットさせるようにする。固定値を指定する場合、DIAGNOSE.EXE を使う場合、いずれの場合も、MIXERSET.EXE よりも先に autoexec.bat の中で実行されるように記述しなければならない。

AUXDRV.DRV は「1. SOUND 環境変数で指定したディレクトリ直下の \DRV ディレクトリ」か「2. MIXERSET.EXE 自身と同じディレクトリ」の、どちらかの場所に置かなければならない。SOUND 環境変数を指定する場合は、当然、MIXERSET.EXE よりも先に autoexec.bat の中で実行されるように記述しなければならないのは BLASTER 環境変数の場合と同様である。あと、注意しなければならないのは、SOUND 環境変数をルートディレクトリにすると、\DRV の場所を認識しなくなる点である。

MIXERSET.EXE は、/P オプション付きで実行する場合に、CTMIX.CFG という設定ファイルを利用(存在しなければ作成)する。この CTMIX.CFG の場所も「1. SOUND 環境変数で指定したディレクトリ」が使用され、SOUND 環境変数がない場合に代わりに「2. 自身と同じディレクトリ」が使用される。つまり逆に言えば、SOUND 環境変数は、CTMIX.CFG の場所や *.DRV ファイルの存在する \DRV ディレクトリの場所を MIXERSET.EXE に教えるために利用されるものなのである。

以上の 2 点、すなわち BLASTER 環境変数と、AUXDRV.DRV の存在(通常その場所の指定は SOUND 環境変数によって行われる)を前提として、autoexec.bat の中で、MIXERSET.EXE を /P /Q オプション付きで実行することになる。MIXERSET.TXT に説明されてあるように、/P オプションは、CTMIX.CFG に保存された設定内容を読み込んで設定を行い、/Q オプションは、音量調節画面を表示せずにそのまま終了するためのものである。

デフォルトの CTMIX.CFG の内容では音量が小さい等の問題があるかもしれないので、一度は MIXERSET.EXE をオプションなしで手動で起動して、適当な状態に設定して保存しておく必要があるだろう。一度設定しておけば、次回以降は、起動時に /P オプションによって自動的にその設定が読み込まれて使われることになる。

その他のドライバ(ユーティリティ)

DIAGNOSE.EXE(BLASTER 環境変数の自動セット)

DIAGNOSE.EXE の役割は、BLASTER 環境変数を自動でセットすることである。DIAGNOSE という大層な名前(とファイルサイズ)の割には、たいした仕事は行わない。ハードにアクセスして diagnose しているわけではなく、CTCM.EXE が 更新(作成)した CTPNP.CFG の内容を読み取って BLASTER 環境変数を決定しているだけである。CTPNP.CFG の場所は、「1. CTCM 環境変数によって指定されたディレクトリ」「2. 自身と同じディレクトリ」の順番で検索するようだ。

CTCU.EXE(PnP リソースの変更)

CTCU.EXE は決して必須のドライバではない。/S オプション付きで autoexec.bat 内に記述する必要があるのは、Win3.1 と併用しているような場合である。PnP のリソース設定の変更が、Win3.1の設定ファイルに必ず反映されるように、autoexec.bat で起動時毎に CTCU.EXE を実行するようにしているのである。Win3.1 は PnP 非対応の OS だからこのようなことが必要になるわけであり、Win3.1 を使うわけでもなく DOS のみを使うわけであり、また DOS 以外の Win95 以降の PnP 対応 OS を使う場合であっても、どのみち必要がない。

リソース設定を変更したいのだが、Win95 以降の PnP 対応 OS を使えずどうしても DOS 環境でリソース設定を行いたい場合は、CTCU.EXE を使うことになるが、その場合は手動で CTCU.EXE を起動すればいいだけである。

この CTCU.EXE は、DIAGNOSE.EXE 同様、CTPNP.CFG を利用する。CTPNP.CFG の場所を「1. CTCM 環境変数によって指定されたディレクトリ」「2. 自身と同じディレクトリ」の順番で検索するのも同様である。つまり、CTCM 環境変数は、CTCU.EXE と DIAGNOSE.EXE が、CTPNP.CFG の場所を知るために使う値であることがわかる。

CTCU.EXE は CTLG.CFG という設定ファイルも利用(存在しなければ作成)するようだが、実際何のために使うファイルなのかは、CTCU.EXE をちゃんと使ったことがないので不明である。

その他諸々

既に挙げたドライバの他に、CT3DSE.EXE、CTMIDI.DRV、CTMMSYS.SYS、STSB16.SYS、CTVDSK.DRV、CT-VOICE.DRV、CTWDSK.DRV、CTWMEM.DRV が s64basic.exe に含まれている(CT3DSE.EXE 以外は、\DRV ディレクトリにインストールされている)。これらは原則的に使う必要がないもので、必要が生じた場合にだけ組み込みを考えればいいものである。

CT3DSE.EXE は 3D サウンド効果のためのドライバで、PC 用のスピーカの左右の位置があまり離れていないような場合に、擬似的に奥行きを強調するサウンド効果を実現する。MIXERSET.EXE の操作画面でも ON/OFF を設定できる機能なので、これを使いたい場合には、(恐らく)SOUND 環境変数で指定したディレクトリに置いておくことになる。

CTSB16.SYS と CTMMSYS.SYS は .VOC や .WAV といったデジタル音声データの再生/録音のためのドライバで、このドライバを利用する PLAY.EXE や RECORD.EXE(これらは s64basic.exe には含まれていないが、他のファイルセットに含まれていることがあるクリエイティブ製のユーティリティ)を利用するような場合に必要になる。また、CTVDSK.DRV や CT-VOICE.DRV は .VOC ファイルに、CTWDSK.DRV や CTWMEM.DRV は .WAV ファイルに関係しているらしい(DSK が名前に含まれる方は、DISK 上のデータを扱うのに関係しているものと思われる)。

CTMIDI.DRV も恐らく、PLAY.EXE で MIDI ファイルを再生する時に使われるドライバであろう。ちなみに、マニュアルには MIDI 環境変数を autoexec.bat に記載するように書かれているが、これは恐らく、PLAY.EXE で .MID ファイルを再生する時などに参照するものと思われ、通常は必要にならないもののようである。

その他備考

s64basic.exe のインストール時には、config.sys で files=40 以上の設定を行うことを推奨している。files 指定なし(デフォルト値は files=8 となる)でもとりあえず問題はないようである(DOOM の場合)。


設定例

以上の説明に従い、AWE64 を DOS ゲームで利用するために最小限必要となる設定例を以下に示す。

config.sys

device=A:\SB-AWE64\CTCM.EXE

autoexec.bat(1. BLASTER 環境変数を固定値で指定する場合)

A:\SB-AWE64\AWEUTIL.COM /S
set BLASTER=A220 I5 D1 H5 P330 E620 T6
set SOUND=A:\SB-AWE64
A:\SB-AWE64\MIXERSET.EXE /P /Q

autoexec.bat(2. BLASTER 環境変数を DIAGNOSE.EXE で自動指定する場合)

A:\SB-AWE64\AWEUTIL.COM /S
set CTCM=A:\SB-AWE64
A:\SB-AWE64\DIAGNOSE.EXE /S
set SOUND=A:\SB-AWE64
A:\SB-AWE64\MIXERSET.EXE /P /Q

A:\SB-AWE64 ディレクトリの内容

A:\SB-AWE64\DRV ディレクトリの内容

(※)以下のファイルは自分個人で利用するためのファイルなので、パスワードがかかっていますので、他の人は利用できません。あしからず。

(以上、2000-09-30 .. 2005-01-03)

互換性

AWE64 は、SB と互換性がある。これは具体的にどういうことなのか?

物理的に、SB16 に AWE の新しいチップと回路が加わったという構造のようだ。つまり、AWE の新しいチップが SB 互換の仕様ということではなく、SB16 のチップや回路はそのまま載っていて、AWE という別のチップがさらに付け加えられているという感じである。だから、SB 互換は、理論上やエミュレーションによるものではなく、完全なものだと考えていい。AWE のドライバを使わないで、通常の SB のドライバだけを使用すれば、SB16 として動作するわけである。(ただし、AWE64 の場合は、PnP カードなので、PnP のドライバをちゃんと動かさないと、ISA の拡張カードとしてちゃんと動作しないことになるので、こちらは別に対処しておかねばならない。)

だから、DOS のゲームでは、SB 用にプログラムが設計されたものでも、AWE64 でちゃんと動作することになる。SB として動かす場合、通常は I/O ポート 220H を指定する。AWE の独自チップ(EMU8000)を使う場合は、I/O 620H となるはずだが、普通の DOS ゲームで AWE を直接使えるものはない。DOS ゲームで AWE 音源を使う場合、I/O 330H を利用するのが普通である。I/O 330H は元々、MPU-401 というハードのために使われる。調べたところによると、MPU-401 というのは、ローランドが作った PC と音楽機器の間で MIDI 信号をやりとりするための通信ポートのハードらしい。つまり、ゲームで MPU-401 を使う場合、MPU-401 に MIDI データを送って、外部の MIDI 音源を鳴らして BGM を聴くということを意味するようだ。(SB や Adlib 用のサウンド設定の場合、ゲームプログラムは SB や Adlib に MIDI データを送っているわけではない。直接シンセサイザというハードをコントロールして鳴らしている。MIDI データというのは、人間の演奏者の楽器の操作過程をデータ化したものであり、シンセサイザという機械の内部的な動作を制御する場合とは一線を画している。)

ここで、AWE64 の場合、MPU-401 MIDI エミュレーションという機能が用意されており、この機能が ON になっている時、MPU-401 ポートを通して外部の MIDI 音源に送るように見せかけて、AWE 音源(EMU8000)をポートにつながれた外部の MIDI 音源と見立てて(実際には物理的に内部音源だが)、MIDI データによって演奏させるのである。(つまり、このエミュレーションが ON の時は、本当に外部の MIDI 音源にデータを送って鳴らしたい時でも、外部音源に信号が行かず、AWE64 に行ってしまうことになる。)つまり、DOS のゲームで AWE 音源を使う場合、I/O 330H の設定を使うと良いことになる。ゲームによっては、正直に MPU-401 の設定名になっている場合もあるだろうし、AWE32 や AWE64 のそういう機能を承知しているゲームなら、ずばり AWE32 と表記している場合もある。(ただし、一部のゲームでは、MPU-401 MIDI エミュレーションが効かない場合があり、その時は、MPU-401 を指定しても音楽は鳴らない)

Adlib というサウンドカードは、SB よりもさらに古いサウンドカードで、SB は初期には Adlib 互換としてデビューした。つまり、SB 互換ということは、Adlib 互換でもあることが含まれている。Adlib の場合、I/O 388H が通常のポートなのでこれも判別できる。ゲームの設定で、Adlib の設定を選んでも、SB で音楽を鳴らせるわけである。

AWE32 と AWE64 の差はほとんど無視できる。特に DOS のゲームを考える上で、両者の違いはない。どちらも AWE32 と考えていい。AWE64 で数字が 64 となっているのは、音色数を示しているようだが、ハードウェアの性能としては 32 で、残り 32 は、WaveSynth/WG と呼ばれる付属の Windows 専用ソフトウェア・シンセサイザの機能によるものらしい。それが AWE32 に対して加わっているだけである。

MIDI 音源

DOS の時代には、音楽の再生ひとつにしても、ゲームのプログラムが直接サウンドカードを操って行わなければならなかったから、開発者は、サウンドカードひとつひとつで異なる機能を用意し設計する必要があったのである。

Windows の場合は、音楽を再生するのに、ゲームのプログラムは、再生して欲しい曲のデータを Windows に渡すだけで良い。あとは、Windows とサウンドカードの間の話で、Windows がドライバを使って、そのカードを鳴らせばいいだけである。ゲームプログラムはサウンドカードが何であるかを気にする必要はない。

DOS の時代では後期になって、MIDI データを再生するというスタイルになってきて、SB16 や AWE32/64 が登場した。MPU-401 MIDI エミュレーション機能による、MIDI 音源としての使い方である。これによってプログラムは直接、各サウンドカード毎の機能を設計せずとも、MIDI による間接操作で音を鳴らせば良いようになった。

しかし、一時ゲームの主流を占めつつあった MIDI 音楽も、CD-ROM の普及に伴って過去のファッションとなりつつある。CD-ROM を使えば、MIDI のように間接的な音源の操作データを利用せずとも、スピーカから出力されるオーディオデータを直接再生すればいいだけである。場合によっては、CD のオーディオトラックを再生するものもある。(つまり、1) 音源の内部操作から、2) 演奏者による外部操作、さらに 3) 録音データをそのまま再生するという風に移り変わってきたことになる。)そのため、一種の楽器である MIDI 音源を内蔵した AWE64 のような中途半端に高価なサウンドカードを、わざわざゲームをやるだけの一般人が用意する必要はなくなりつつあり、単に CD ラジカセのように、デジタルオーディオの録音再生・ミックス機能さえ装備していれば用が足りる時代になってきている。クリエイティブ社も、そのような時代の変遷によって、サウンドカードがゲーム用として高く売れる時代が先細りになることを承知しており、ビデオカード分野にシフトしている。クリエイティブ社がターゲットにしているのは、音楽ユーザではなく、ゲームユーザだということが良くわかる。(ゲーム用ではない、本当の専門の音楽用のサウンドカードはもっと高価だし、それらに比べたら SB の性能などオモチャである。)

(2000-10-02)


《以上》