18 |
BSVによるサウンドFSMの再設計 (2) |
チャネルとコードの対応
サウンドの説明 | CODE番号 | サウンドチャネル | |
---|---|---|---|
ON | OFF | ||
自機弾発射音 | 1 | ー | 自機音チャネル(#0) |
自機爆発音 | 2 | ー | |
自機増加音 | 9 | ー | |
インベーダ爆発音 | 3 | ー | インベーダ音チャネル(#1) |
インベーダ歩行音1 | 4 | ー | インベーダ音チャネル(#2) |
インベーダ歩行音2 | 5 | ー | |
インベーダ歩行音3 | 6 | ー | |
インベーダ歩行音4 | 7 | ー | |
UFO爆発音 | 8 | ー | UFO音チャネル(#3) |
UFO飛行音 | 10 | 10+16 |
チャネル起動条件
それぞれのサウンドチャネルは別のFSMにより駆動されます。それらの起動条件を上げると、
- チャネル0(FSM0) ---- (CODE1_ON || CODE2_ON || CODE9_ON) && !empty
- チャネル1(FSM1) ---- CODE3_ON && !empty
- チャネル2(FSM2) ---- (CODE4_ON || CODE5_ON || CODE6_ON || CODE7_ON) && !empty
- チャネル3(FSM3) ---- ((CODE8_ON || CODE10_ON || CODE10_OFF) && !empty) || UFO
- 例外処理: チャネル3においてはCODE10_ONの場合、OFFが来るまで演奏し続けるようにUFOのフラグを立てますが、起動時にUFOフラグだった場合はコマンドが無くてもCODE10_ONとして起動します。
チャネル終了条件
それぞれのサウンドチャネルは演奏を終了することがあります。カウンタが0になる場合またはプリエンプションです。具体的な終了条件(もしくは割り込み条件)を上げると、
- カウンタが0になる (|| 以下のプリエンプション)
- チャネル0(FSM0) ---- ((CODE1_ON || CODE2_ON || CODE9_ON) && !empty) && (current != CODE9_ON)
- 例外処理: チャネル0(FSM0) ---- CODE9_ONの場合はプリエンプション禁止のため、currentを見てCODE9_ON(自機増加中)だったら割り込まないようにします。
- チャネル1(FSM1) ---- CODE3_ON && !empty
- チャネル2(FSM2) ---- (CODE4_ON || CODE5_ON || CODE6_ON || CODE7_ON) && !empty
- チャネル3(FSM3) ---- (CODE8_ON || CODE10_ON || CODE10_OFF) && !empty
- 全チャネル(FSM0~3) --- コードがある場合はキューから取り出し先頭に戻ります。
このように、起動条件の例外はUFOフラグが立っている場合であり、終了(割り込み)条件の例外は自機が増加中に割り込まない場合です。