2018年6月3日日曜日

沙羅曼蛇2のサウンドドライバを攻略するの巻

とりあえず、ROMの指定アドレスからサウンドデータをデコードして、アセンブラから再びドライバが認識するデータに再コンパイルする環境を整えた。

で、実機でROM焼きながら曲作るわけにもいかないので、開発用環境としてmameをほげって、特定のアドレスを叩くとファイルからデータを読んでサウンド側のRAMに配置するような環境を用意した。実際にはcheat機能も使って、cheatメニューからLOADを選ぶと該当アドレスが叩かれ、続けてK056800経由でサウンド再生の命令が飛ぶようになってる。

現状で把握してるサウンドドライバ用の命令は以下の通り。

  • ノート(音長指定あり/なし、ゲート指定あり/なし、音量指定あり)
  • タイ
  • 休符
  • ドラムモード(ON/OFF)
  • 繰り返し制御
  • マクロ呼出し
  • パン指定
  • オートパン(指定した時間で2点間を移動)
  • 音色指定
  • テンポ指定(チャンネルごと)
  • アタックレート指定
  • ディケイ指定
  • リリースレート指定
  • デチューン指定
  • LFO
  • LFOオートメーション(深さの時間変化)
  • リバーブ(チャンネルごと)
  • ループ指定
ヘッダ情報とかマクロやループポイントは絶対アドレスで指定するので、ROM配置に合わせてデータをコンパイルしてやる必要がある。このあたり、開発環境がかなり原始的だった可能性あるなぁ……。MSX時代だとほぼほぼバイナリエディタみたいなので作曲してるっていう話もあったけど、それとMMLの中間くらい?自分はとりあえずアセンブリのマクロを使って読みやすくした状態でアセンブラかけてデータを作ってるけど。ノート毎に音量指定するのが結構面倒で、あとから音量変えるのも手間。MMLから専用コンパイラでアセンブラのソースに変換してた可能性が高いかな?



とりあえず簡単な曲を作って再生させてみた。実験の延長なので曲自体凝ったことはできてないけど。音色からなんとなく沙羅曼蛇2感みたいなのは伝わってくるかな。

FMPSGの新譜はSystem GXの実機でいきたいなぁ。

0 件のコメント: