コナミ サウンドドライバ解析
SCCを扱うサウンドドライバを作ったものの正式な資料に基づいて作成したわけではなく、ネットの情報や色々なテストなどをして作ったわけですが、本当にそれで正しいのかは不明です。
しかしそのお手本となるプログラム自体は手元には一応あるわけです。
ということで、コナミのサウンドドライバはどのような作りになっているのか、気になったので解析してみました。
過去に触りだけ解析したことはありましたが、今回は細部まで調べました。
解析したのは「ゴーファーの野望 EPISODEⅡ」のサウンドドライバになります。
プログラムの読み違いや勘違い等あるかも知れませんが、ゲーム用サウンドドライバ作成のヒントになると思いチャレンジしてみました。
注意点として名称などが我流のものになっていて読みにくいかもしれません(ワークエリア名等)。知識不足で適切な名称を知らないということもありますが、何でもいいので名前を付けないと作業が進まないのでそうなりました。その辺りうまく解釈して読んで頂けたらと思います。
全体の流れ
ドライバを調べる前にまず全体の流れを見てみます。
MSXが起動しカートリッジに処理が渡ると割り込み設定など色々な初期化を行った後、何もしない無限ループに入ります。
サウンド処理だけでなく、ゲーム中の処理も全て割り込み時に行うという構造のようです。
割り込みではサウンドがまず処理され、次にゲームの処理がされて割り込み終了です。
サウンド処理、ゲーム処理とも多重割り込みをチェックし、処理時間が掛かって更に割り込みが掛かかった場合は、何もせずに直ぐに割り込みを終了します。
バンクの使用方法
割り込みが掛かりサウンド処理に移る前にバンクは6000H-BFFFHの部分が以下のように変更されます。

4000H-5FFFHのバンクは、割り込み時にFD9AHから402EHにジャンプして来て、割り込み処理の開始地点となるためバンク00Hで固定されているようです。
6000H-7FFFHに配置されるバンク0AHにドライバ本体やサウンド処理に関するプログラムが収められ、その残り以降はサウンド関係のデータです。
A000H-BFFFHにもサウンドデータが続いて配置されますが、曲によってはA000H-BFFFHを他のバンクに切り替えて使用されています。
6000H-9FFFHのバンク0AH、0BHはサウンド処理中必ず見えているということがポイントでしょうか。
共用で使われるデータ(波形データやSE演奏データ)が0AH、0BHに配置され、曲データはその続き、あるいはA000H-BFFFHとなっていました。
いつでも見えているバンクにSE用のデータを入れているため、曲のバンクA000H-BFFFHが別のバンクに切り替えられたとしてもSEは同時演奏可能となるわけですね。
SEでも他の演奏とかぶらないもの(タイトルの爆発音、ボス爆発音)などはA000H-BFFFHにデータがあったりします(これは普通のSEと違い全チャンネル使用するので扱いが違うのかも知れません)。
サウンド処理が終了すると、バンクを元に戻します。
ゲーム処理の中で行ったバンク切り替えは、ワークエリアのF0F0H(4000H-5FFFH)、F0F1H(6000H-7FFFH)、F0F2H(8000H-9FFFH)、F0F3H(A000H-BFFFH)に保存されているのでそれを参照します。
その後ゲーム処理へと続きます。
チャンネルの使い分け
SCCが使えるようになってチャンネル数が増えたせいか、SE用にPSG Ch.CとSCC Ch.Aが確保され、曲の演奏は計6チャンネル。
一方SEを同時に鳴らさないシーンでは、全チャンネルを曲に割り振るという使い分けがなされています。
PSGのドライバでよく見かけるタイプの、曲を演奏しているチャンネルでもSEを鳴らし、SE終了で曲演奏に戻るという処理は負荷が大きくなるためか採用していないようですね。