EP−ROMの昔話・その36

瑠璃色の雪(Part2)

2003年3月7日

 PC-98においてMIDI音源を接続する場合、

[1] MPUボード方式

[2] RS-232C方式

の2つがありました。

 [1]はMPUボードというインターフェイスボードを経由するもので、利点は市販のソフトウェアが問題なく動くことで、欠点はこのボードが約2万円することや、IRQを1つ消費するため、IRQの空きがない場合は使用できないということでした。

 [2]はRS-232C端子に接続するもので、利点はケーブルだけで済むので安く上がることや、IRQの空きがない場合でも使用できることで、欠点は市販のゲームなどはほとんどが[1]の方式にのみ対応で、[2]の方式に対応しているものはごくわずかということでした。

 が、世の中には何とかしてくれる方がいるもので、[2]の方式を[1]の方式に見せかけるドライバを作成してくれた方がいらっしゃいました。このドライバをVMDと言います。

 で、MIDI音源をRS-232C端子に接続していた方はこのVMDを使って市販のゲームのMIDIを鳴らしていたのでした。と・こ・ろ・が。

 この「瑠璃色の雪」においては、VMDを使うとゲーム起動の時点でハングしてしまうのです。NIFTYの会議室では「動かないよ〜」という嘆きの発言がアップされていたのでした。

 このゲームが発売になった1997年当時には私は解析からはほとんど手を引いていたのですが、これを見て久々に解析の虫がうずきだしてきました。ひとつ原因を調べて、解決策を見つけてみよう、とデバッガを使ってハングの原因を調べ始めました。ただしここで問題になったのは私はMIDI音源を持っていなかったことです。で、思い当たったのが、コンピュータ側からRS-232C端子に接続されたものが何なのか知る方法はない、ということで、それだったらモデムの電源を入れておけば代用が効くのでは、と思いつきました。実際、この方法で問題なくVMDは動きました。

 2日ほどかけて原因はタイマ割り込みが停止してしまうせいであることがわかりました。このゲームではウェイトを取るのにタイマ割り込みを使用していたのですが、タイマが停止してしまえばいつまで経っても設定した時間になりませんからずっと時間待ちのままプログラムは停止してしまいます。ですからハングしているように見えるわけです。

 さて原因はわかったものの、私の実力ではタイマが停止しないように手を加えることまではできませんでした。そこで考えたのが、ウェイトをマウス割り込みに変更することでした。

 このゲームではタイマ割り込みの周期を10ミリ秒に設定していましたが、マウス割り込みの周期は8.3ミリ秒(正確に言うと1/120秒)ですので、ウェイトの間隔がちょっと短くなりますが、実用上はほぼ問題ないようです。

 というわけで、少々乱暴な方法でウェイトをマウス割り込みに変更するパッチを作り、ハングはしなくなることを確認しました。しかし私ができるのはここまでで、後は実際にMIDI音源を持っている方に確認してもらう必要があります。

 NIFTYの会議室にパッチアドレスを書いて、「動作確認お願いします」という発言を上げた所、2人の方からRESが来まして、実際に音が出るようになったことを確認できました。そこでこの方法が正しいことがわかったので、この2人の方に動作確認をお願いして正式なパッチを作り始めました。マシン語のバイト数を数えながら新しい命令を埋め込めるスペースを探します。結構面倒ではありましたが、無事にパッチは完成し、NIFTYのライブラリにアップすることができました。(一時期はベクターにもアップしてありました)

 感謝のメールも何通か来ましたが、私が作るプログラムは画像ローダーなどのどっちかというとウラ物っぽい物が多かった中にあって、比較的まともに役立つプログラムになったなあ、ということが思い出となっています。

written by EP−ROM