音源構成はYM2151が1個に、ウェーブテーブル音源のカスタムチップが1個、それとDACが2音分あるようである。
YM2151とカスタムの音源はサウンド用の6809から制御され、DACは周辺機器用の8bitマイコン側から制御される。
ウェーブテーブルのカスタムはパックランドと同じタイプのもので、ノイズ出力があり、波形データがRAMに16種類登録できる。
左右のボリュームを個別に指定できるので多段階のパンが可能であり、システムIではステレオ接続されている。
ギャラガ88では敵の旋回でなめらかにパンが振られ、ドラゴンスピリットのエンディングではコードの構成音ごとに細かくパンが振られている。
BGMにはFMのみ使用されるのがほとんどであるが、ワールドスタジアムではウェーブテーブルがメインでBGMに使用され、 フェイスオフではBGMのメイン側にウェーブテーブルを使用しパーカッションをFMで鳴らしている。 スプラッターハウスの一部のBGMではハイハットにウェーブテーブルが使用されている。 妖怪道中記の竜宮マンボのBGMではバックのボイスのようなパートにウェーブテーブルが使用されている。
システムIのサウンドプログラムの基本構造はシステム86からそのまま受け継いでいる。 システムIIになってもFMのベースの部分はシステムIと大きく変わっていない。
ウェーブテーブル音源を鳴らす部分とFM音源を鳴らす部分はまったく別物になっている。
ウェーブテーブルの部分はFM導入以前のプログラムをあまり変えずに持ってきた感じである。
FM側のトラックはYM2151のタイマーのテンポと同期して処理され、
ウェーブテーブル側はV-SYNCの割り込みと同期して処理される。
YM2151のタイマーの周期はプログラム側で固定されている。
(妖怪道中記などはFM、ウェーブテーブルともにV-SYNCと同期する。)
FMの部分は『1トラック-マルチチャンネル』形式のデータとなっている(ブレイザーを除く)。 アーケードのサウンドでは珍しい部類に入ると思う。
FM音源部のプログラムに関して、各タイトルで3つのタイプに分かれる。それぞれ全く別物である。
(タイプA)妖怪道中記、ドラゴンスピリット、スプラッターハウス、タンクフォースなど
(タイプB)パックマニア、ワールドスタジアム、メルヘンメイズ、ブラストオフなど
(タイプC)ブレイザー
タイプA、タイプBのFMトラックは1トラック-マルチチャンネルの形式であるが、タイプCのFMトラックは1トラック-1チャンネルである。
なお、3タイプ間で演奏データのフォーマットは全く異なっている。
また、タイプAではV-SYNCと同期してFMトラックのテンポをとり、タイプB、CはYM2151のタイマーと同期してFMトラックのテンポをとっている。
それぞれ、6809のIRQ、FIRQの割り込みを利用している。ウェーブテーブル側のテンポはV-SYNCと同期している。
タイトル | タイプ |
---|---|
妖怪道中記 | A |
ドラゴンスピリット | A |
ブレイザー | C |
クエスター | A |
パックマニア | B |
ギャラガ'88 | A |
ワールドスタジアム | B |
ベラボーマン | A |
メルヘンメイズ | B |
爆突機銃艇 | A |
ワールドコート | A2 |
スプラッターハウス | A2 |
フェイスオフ | A2 |
ロンパーズ | A2 |
ブラストオフ | B |
ワールドスタジアム'89 | B |
デンジャラスシード | A2 |
ワールドスタジアム'90 | B |
ピストル大名の冒険 | A3 |
倉庫番DX | A3 |
タンクフォース | A3 |
タイプAに関して、さらに3つに分類される。
ワールドコート以降で、ウェーブテーブルとFMのプログラムの配置が逆になっている。
ピストル大名の冒険から、エンベロープリセットフラグやウェーブテーブル、DACのサウンドリクエストのコマンドが削除されている。
妖怪道中記とクエスターは、他と比べて初期化処理のコードが大きく異なるように見えるが、
ROMデータのチェックサムのチェック処理が省略されている。
システムIIのサウンドプログラムはタイプAをベースに拡張されている。
FMの部分は『1トラック-マルチチャンネル』形式のデータとなっている。
アーケードのサウンドでは珍しい部類に入ると思う。
演奏データはすべてコマンド+パラメータの形式になっている。
トラック全体に作用するコマンドは固定長のパラメータになっているが、
特定のチャンネルにだけ作用するコマンドは、どのチャンネルを設定するかを表すビットフラグがまず与えられ、
次に設定するチャンネルの個数分のパラメータが与えられる形式になっている。
4種類のコマンドで、テーブルの番号、LFOの速度、音程モジュレーションの深さ、音量モジュレーションの深さ、を個別に設定可能である。
音量モジュレーションはキャリアのオペレータのみ作用する。
波形をテーブルによって記述できるため、表現の柔軟性が高い。
波形をループさせてモジュレーションとして使用できる他、
ループさせずにピッチエンベロープとして使用することもできる。
タイプAではピッチベンドの専用コマンドはなく、ソフトウェアLFOを用いてピッチベンドが表現されている。
1byteのデータの羅列で波形が形成される。
波形データの終端には、$ff:波形の終了、$fe:波形の先頭に戻る、$fd:次の波形に移る、といった制御データが置かれる。
途中からループするような波形の場合は、2個のテーブルをつないで表現される。
コマンドによって、波形データを読み出す速度が変えられるが、速度が遅い場合は線形補間がなされる。
LFOのデータはタイトルごとに作り直されている。
ドラゴンスピリットではディレイの長さが異なるビブラートがいくつも用意され、コードの構成音ごとにディレイの長さを変えている。
たとえば3面BGMのメロディは3音+デチューン2音の構成になっているが、5音に対してビブラートが順にずらされている。
音量モジュレーションを使っているのはタンクフォースのみ。2音使ってパンをなめらかに振るのに使用されている。
ワールドコートとロンパーズはLFO使用率が低かったw
ハードウェアLFOは、コマンドでテーブルの番号を指定する。
テーブルから、波形(WF)とLFOの周波数(LFRQ)と、音程モジュレーションの深さ(PMD)、音量モジュレーションの深さ(AMD)、
PMD/AMDが増大する速度、の5つの値を得る。
チャンネルごとのモジュレーションの感度(PMS/AMS)は、音色データから指定されるが、音色を切り替える時点ではPMS/AMSのレジスタには$00がセットされ、
コマンドによってハードウェアLFOの使用が指定されたチャンネルのみ、PMS/AMSに0ではない値が書き込まれる。
PMD/AMDの増大速度が0の場合は、キーオン時にWF、LFRQ、PMD、AMDを書き込むだけである。
PMD/AMDの増大速度が非0の場合は、キーオン時にPMD,AMDが0に初期化され、時間の経過とともに増大していく。
値の増加量はPMDとAMDと共通である。
テーブルから得たPMD、AMDの値は最大値として扱われ、その最大値でクリップされる。
ソフトウェアLFOのほうが自由度が高いので、ハードウェアLFOの使用頻度は低い様子である。 ドラゴンスピリットでは、同じチャンネルにハードウェアLFOとソフトウェアLFOの両方を使用していることも見られた。
トラックの音量設定コマンドと、チャンネル個別の音量設定コマンドがある。
音量は次式によって与えられる(加減算ではなく乗算)。
(キャリアのTL) = (音色データで指定されたTL)×(トラックの音量)×(チャンネルの音量)
『1トラック-マルチチャンネル』形式であるため、次のノートまでの間隔とは別に発音期間を指定する必要がある。
チャンネルごとのゲートタイムを指定するコマンドがあり、キーオンしてキーオフするまでの間隔が指定される。
チャンネルごとにキーオンのタイミングを遅らせるコマンドもあり、コード(和音)をずらして鳴らす場合に有用である。
システムIには、キーオン時にFMのエンベロープのレベルをリセットするかどうかを設定するコマンドがある。
アプリケーションマニュアルにも書かれていないので、一般には知られていないかもしれないが、
キーオンのレジスタを書き込んだだけでは、エンベロープは0レベルにリセットされない。
キーオン直前のエンベロープのレベルの状態から継続するだけである。
レベルを0にリセットするには、リリースレイト(RR)に最大値の$fを一度書き込んで、レベルを急速に下げてやる必要がある。
わざわざコマンドで設定を変更できるようにするというサウンド設計者のマニアックさに驚いたwwww
トラックのステータスのあるビットをセットすることで、メインプログラム側から任意のタイミングで
フェードイン、またはフェードアウトを開始させることができる。
フェードアウトは標準とロングの2種類のスピードが用意されている。
FMのトラックやウェーブテーブル音源のトラック、サブCPU側のDAC再生へ、リクエストを発行するコマンドもある。
FMトラックデータのフォーマットを次表に示す。
パラメータの%fは可変個データを表す。
チャンネルのビットフラグとなる1byteのデータの後に、フラグが1となるビットの個数だけ1byteのパラメータが続く。
command | parameter | content |
---|---|---|
$00 | -- | nop |
$01 | %1 | track volume |
$02 | %1 | tempo |
$03 | %1 | note length |
$04 | %1 %2 | call |
$05 | -- | return/end |
$06 | %f | note |
$07 | %f | tone |
$08 | %f | channel volume |
$09 | %1 %2 | jump |
$0a | %1 %2 | jump |
$0b | %1 %2 %3 | repeat |
$0c | %1 %2 %3 | break |
$0d | %f | transpose |
$0e | %f | detune |
$0f | %f | software LFO index |
$10 | %f | software LFO speed |
$11 | %f | tie count |
$12 | %f | gate time |
$13 | %f | pitch modulation depth |
$14 | %f | amplitude modulation depth |
$15 | %f | key on delay |
$16 | %f | WaveSound request |
$17 | %f | DAC request |
$18 | %f | hardware LFO index |
$19 | %f | pan |
$1a | %f | envelope reset flag |
$1b | %1 | FM track status control |
$1c | %1 | FM track request |
$1d | -- | nop |
$1e | -- | nop |
$1f | -- | nop |
$20 | %1 | nop2 |
次のページに続く