PC-9801で、NEC製以外のSCSI CD-ROMドライブを使用する
先日PC98を始めとしたコンピューター類を譲っていただき、最近はそのカスタマイズに熱中している。その一環で、CD-ROMドライブのセットアップを行なっている。
MS-DOS 6.2にはNECCDx.SYSが付属しており、SCSIまたはATAPIのCD-ROMドライブをこのドライバの使用によって使用出来たようである。
しかしながら、これらのドライバはNEC製のドライブでしか利用出来ないらしい[要出典]
手持ちのNEC製ではない数台のSCSI CDドライブで試した所、SCSIドライブ用ドライバであるNECCDA.SYS、NECCDB.SYSはいずれも認識しなかった。
そのためより汎用性のあるデバイスドライバを探した所、
の2方法を見付けた。
これらはいずれも宇野沢 成夫氏による汎用CD-ROMドライバで、Miniが機能制限版、STDがフルバージョンとなっている。
面倒臭ければMiniを使うのが手っ取り早いのだが、リンク先のVectorの説明にもある通り、Mini版は機能制限がありいくつかの機能が利用出来ない。
CDドライブなのにCD音楽が再生出来ないというのは何だか勿体無いので、STD版をここでは使用する事にする。
が、何もCD-SD STDを入手して適用するだけならばわざわざこんな解説記事なんぞ書いていない訳である。
他のサイトにもただ単にCD-ROMドライブをMS-DOSで利用可能にする解説は五万とある。それに大抵のこのサイトの解説記事は、ある程度コンピューターの基礎が固まっているか、そこそこなコンピューターギークで知識がある方を対象としているため、わざわざそんな事解説する筈が無い。
CD-SD STDはアセンブリソースコード形態での配布となっており、使用するには自分でアセンブルしてドライバのバイナリを構築しなければならないのである。
尚、CD-SD STDはコードこそ公開されているがプロプライエタリの類のソフトウェアであるため、バイナリ形式での再配布が禁止されている。
そこで、CD-SD STDをビルドしてPC-9801上のMS-DOSに適用する方法を纏めてみることにした。
ここでは、新しいコンピュータを「PC」、PC-9801を「PC98」「98」「PC-9801」とかと呼ぶことにする。
環境
- マシン : PC-9801VX21 (486化済み)
僕の環境では、前オーナーさんのカスタマイズにより、本来80286である98VX21がIBM 486SLC2に換装されている。MS-DOS 6.2は386SX以上のプロセッサを必要とするため、通常のVX21ではMS-DOS 6.2は使用出来ないことに留意願いたい。 - SCSIボード : SC-98SB
I-O DATA製のSCSIカード。98セカンドバス用のカードでCバスを丸々占有しない節約設計。僕の環境ではビデオカードのセカンドバススロットに装着されている。 - OS : MS-DOS 6.2 基本機能セット
基本機能セットであるため、CD-SD STDのビルドに必要な拡張機能セットに含まれる開発コマンド(LINK、EXE2BIN等)が無い。そのため後述する節で代替となるソフトウェアのダウンロードを行なう。 - CD-ROMドライブ : Logitec SCD-440
SCSIベンダーIDを見る限り、中身はPioneer製らしい。
開発環境の構築
CD-SD STDのビルドには、アセンブラ、リンカー、そしてEXE2BINが必要となる。
予めPC98側にLHAとUNZIPを導入しておいていただきたい。毎度展開するか、LHAに変換して98に転送しても良いのだが、それはそれで面倒であるから、今後も使えるであろうUnZipをインストールすることをおすすめする。
LHAはまあ大抵知っているだろうとして、UNZIPについては、Info-ZipのFTPサーバー、ftp://ftp.info-zip.org/pub/infozip/msdos/ より、「unz600x3.exe」をダウンロードし、フロッピィディスクなどにコピーしておく。
これは自己解凍ファイルとなっており、これを実行することによりカレントディレクトリにUnZipのファイルが展開される。
アセンブラの用意
今回はアセンブラとして、CD-SD STDのマニュアルで指定されているMASMと互換性のある、「JWasm」を使用する。
SourceForgeよりJWasmのMS-DOSビルドのページに移動し、現時点での最新バージョンであるJWasm212bd_140105.zipをダウンロードする。
https://sourceforge.net/projects/jwasm/files/JWasm%20DOS%20binary/
ダウンロードしたZipファイルをPC98に転送し、インストール先でUnZipする。今回は「A:\JWASM」とする。
JWasmを展開すると、「JWASMR.EXE」と「JWASMD.EXE」の2つが展開されるが、このうち前者のJWASMR.EXEを使用する。JWASMD.EXEを使用した場合、PC98では画面全体が破綻しVRAMを初期化するまで治らなくなる。
リンカーの用意
MS-DOS拡張機能セットであれば、LINKコマンドがあるものの、基本機能セットであるためLINKコマンドは含まれていない。
Microsoft QuickCなどがあれば、それのLINKを使っても良いかもしれないが、おそらくQuickCもかなり入手困難な部類に入ると思われる。
そこで、パブリックドメインのリンカーである「VAL」を使用する。
VALはパソコン通信時代に海外でリリースされたもののようで、公式サイトなどは存在しない。現状、ここからソースコード、ここのいくつかのプロジェクト群のうちのひとつから取得出来るが、前田 剛氏のサイトより単体が入手出来る。
https://hp.vector.co.jp/authors/VA007890/dos/language.html#VAL
こちらも同様に、PC98に転送後、UnZipする。
EXE2BINの用意
最後に、EXE2BINの用意だが、こちらもMS-DOS 6.2 基本機能セットには含まれていない。
よってこちらも、パブリックドメインのソフトウェアである「EXE2COM」で代用する。
幸いにも同氏のサイトで配布されているため、VALのダウンロードのついでにダウンロードしておく。
こちらもまた、PC98に転送後UnZipする。
各プログラムの用意が出来たら、それぞれにパスを通しておく。
ドライバのビルド作業
準備が出来たら、実際にビルド作業へ入っていく。
ソースの取得と微調整
Vectorのダウンロードページより、CD-SD STDを取得する。
ここで注意したいのが、CD-SD STDには2つのダウンロード項目があり、ひとつが「CD-SD STD(8→8A 差分)8A」、もう一つは「CD-SD STD8」があることである。
前者は後者をPC-9801-55 SCSIボードで使用して速度が遅い場合に、後者に適用するパッチファイルである。
ダウンロードするのは後者なので間違えないように。
https://www.vector.co.jp/soft/dl/dos/hardware/se000298.html
ファイルをダウンロードして展開すると、MANUAL.DOC、README.DOC、SOURCE.LZH、UPDATE.LZHが得られる。
このうちソースコードが格納されているのは名前の通り「SOURCE.LZH」なので、このファイルをPC98に転送する。
転送したら、PC98側で適当なディレクトリにアーカイブを展開する。ここでは、「A:\BUILD\CDSD8」とした。
基本的にはアーカイブ内の「ASM.DOC」の内容に従っていくだけであるが、今回は使用するアセンブラもリンカーもEXE2BINも異なるので、ビルド作業を行なってくれるバッチファイル「ASM.BAT」を編集する必要がある。
今回のような構成の場合、変更後のASM.BATは以下の通り。
JWASMR /c %4 /DDRIVE=%1 /DIF_TYPE=%2 /DDRV_TYPE=%3 cdsd.asm
VAL cdsd;
EXE2COM cdsd.exe cdsd.sys
del cdsd.exe
del cdsd.obj
copy cdsd.sys ..\cddrv.sys
del cdsd.sys
ビルド作業
準備が完了したので、ビルド作業に入っていく。
後は「ASM.DOC」の内容に従っていくだけである。
ASM.BATのオプションの変更によって様々な種類のドライバを生成出来るが、大抵の場合以下のコマンドを実行すれば良いと思われる。
ASM SCSI2 PC9801 XA
一つ目の引数はSCSI2用ドライバを指定、二つ目の引数には、インターフェースの種類としてPC-9801のインターフェースであることを指示している。
そして三つめの引数であるが、ドライブの種類や用途に応じて三種類選択可能である。PHOTOを指定するとASM.DOCにあるように動作可能なドライブが限定されるらしく、またOLDを指定した場合、僕の環境ではディスクの読み取りが行えなかった。通常はXAを指定しておけばよいだろう。
上記のコマンドを実行すると、ビルド作業が開始される。途中VALが何やらエラーを吐きまくるが、とりあえずビルドが終わりドライバも問題なく動作しているので無視で良いと思われる。
実行が終わると、カレントディレクトリの一つ上の階層にCDDRV.SYSが生成されている。これが完成したドライバである。
ドライバの適用
ここまでまあまあ長い道程だったが、これでドライバファイルが完成した。後はドライバをCONFIG.SYSに登録し、AUTOEXEC.BATにMSCDEXを登録するだけである。
生成されたCDDRV.SYSがA:ドライブ直下にあると仮定して、CONFIG.SYSに以下の行を追加する。
LASTDRIVE=Z
DEVICEHIGH=A:\CDDRV.SYS /D:CD_101 /I1
他の一般的なCD-ROMドライバを登録する手順とほぼ同じであるが、「/D:」にはデバイスの名前を指定する。何でも良いが、MSCDEXに渡すデバイスの名前と一致している必要がある。「/I」オプションには、SCSIデバイスIDを指定する。僕の環境では、CD-ROMドライブはSCSI ID 1に割り当てられているため、「/I1]を指定している。例えばCDドライブのSCSI IDが3番だったら、「/I3」のように指定すれば良い。
また、LASTDRIVEの指定が無い場合、CD-ROMドライブが使用出来ないため必ず指定する。
そして音楽CDを聴く場合重要となるのが、SmartDrive ダブルバッファリングマネージャの存在だ。SmartDrive ダブルバッファリングマネージャが組み込まれている場合、CD音楽を再生中にWindowsがハングアップし、DOS画面に戻り操作が一切効かなくなってしまう。SmartDrive ダブルバッファリングマネージャは、CONFIG.SYSにて以下のような行で組み込まれている。
DEVICE=A:\WINDOWS\SMARTDRV.EXE /DOUBLE_BUFFER
ダブルバッファリングマネージャは、一部の古い固定ディスクなどで必要になる場合がある。
ダブルバッファリングマネージャが必要かどうかは、SMARTDRVコマンドをオプションも何も付けずに実行することで確認出来る。

「バッファリング」の項目を確認し、全ドライブが「不要」と表示されていればダブルバッファリングマネージャの組み込みは必要ない。
いずれかのドライブが「必要」または「-」(不明の意)が表示された場合はダブルバッファリングマネージャが必要なケースである。
もしバッファリングが必要なドライブが存在する場合は、音楽を聞くのを諦めるか、無料ソフトのHSBなどを使用して設定を用途に応じて適時切り替えるなどする必要がある。
もちろん、AUTOEXEC.BAT上にSMARTDRVを普通に組み込んで常駐させる分には何ら問題はない。ダブルバッファーの有無だけが影響する。
AUTOEXEC.BATには、以下の行を追記する。
MSCDEX /D:CD_101 /L:F
今回はFドライブにCD-ROMドライブを割り当てた。/L:オプションを変更すれば任意のドライブ文字を割り当てられるので、各自自分の環境に合わせて変更すると良い。
これでCD-ROMドライブが使用出来るようになった。
CD-SD Mini版と異なり、CD音楽の再生やトレイのオープンも行なえる。
付録 : 音楽CDの再生のためのセットアップ
昔のパソコンを知らない若い子向けに書いておくと、今でこそCDの音声はコンピューター側で処理するが、昔はCDの音源はCDドライブ側にあった。
そのためデータ線を接続しただけでは音楽は再生されず、もう少し作業が必要となる。
昔の外付けCDドライブは、音声出力端子とヘッドフォン端子を備えている。
CDドライブの音声出力端子と、サウンドカードのCD音声入力端子またはスピーカーを配線し、ようやく音が出るようになる。
サウンドカードに音声入力端子が無いまたはスピーカーにも配線出来ない場合は、CDドライブ前面にあるヘッドフォン端子にヘッドフォンやイヤホンなどを接続し、同じく前面にある音量ダイヤルで音量を調節する。
僕の環境のSound Blaster 16はCD音声入力端子を備えているため、そことCDドライブの音声出力端子を接続した。