音を鳴らせ

  • 投稿日:
  • by
  • カテゴリ:

フルーツフィールドがらみで、思い出したのですが、音をつけたんですよ。X1やFM-7ではBGMがついていたんですが、PC-8001もPC-8801も効果音はあってもBGMはなかったんで、音楽つける発想がなかったです。

PC-6001mkIIはPSGつんでいるので、BGM付けられますしね。

BGMデータはX1なりFM-7版から持ってこられるでしょう。X1なら、CPUもZ80だし、積んでるPSG音源チップも同じなので簡単に移植できそうです。

X1のBGM処理部を見ると、X1特有の癖ーI/O空間が16bit幅で、BCレジスタでアクセスするーが強く出ていて、ちょっとつかみづらかったんですが、音源レジスタへのアクセスは、16bitのうち上位8bitだけが有意で、下位はDon't Care。BCレジスタに値をロードしてはCレジスタの値をポートへ吐き出すという、処理が繰り返されていました。

これをPC-6001に持ってくるのはさほど難しくはなかったですが、処理に無駄がないように配慮するのはそれなりに面白くもありました。

音楽はなるようになりましたが、ゲームの処理中にレジスタを叩いていると、テンポが安定しません。

PC-6001mkIIには1/512秒間隔で発生するタイマー割込みがあるので、これをフックして、BGMを鳴らすようにしました。テンポは安定しまし板。が、しかし、今度は、効果音と衝突が発生しました。効果音を鳴らすべく、レジスタを叩いている最中にタイマー割込みが来ると叩きたいレジスタと違うレジスタを叩く結果に。

割り込みを禁止(DI)してみたものの、タイマー割込みはお構いなしいです。

結論から言えば、音源操作を全部タイマー割込みにまとめて、効果音は、「音を鳴らせ」フラグを立てるだけにしてやりました。

なお、BGMのON/OFFはSTOPキーに割り当てました。なぜなら、ゲーム用にキーを取得しているBIOSコールでAレジスタに返されるキーで未使用だったのがSTOPだけだったから。

BGM、初めて聞きましたが、なかなかコミカルでいい感じでした。PC-6001mkII相当の環境(実機、エミュレータ)をお持ちの方は是非一度鳴らしてみてください。なお、フルーツフィールドは、互換BASICでも動作を確認しています。