NES版ZANACの曲をディスク版に(プロアクションロッキーを使ってみた)
 MSX版ZANACのサウンドデータ&ドライバの解析中、各曲のサウンドデータのヘッダに、

「チャンネルごとのサウンドデータ全体の音階を、半音単位(?)でどれだけ上げ下げするか」

という項目があることがわかりました。
 つまり、曲データを一通り完成させたあと、この値を変更させることで、「明るい感じの曲」(曲全体の音階を上げる)「暗い感じの曲」(曲全体の音階を下げる)を変えることができるわけです。

 話が変わり、NES版ZANACの一面の曲についてなのですが、ディスク版ザナックに比べ、曲全体の音階が低められており、暗い感じの曲になっています。
 このNES版/ディスク版の曲の違いについて、インターネット上で探したところ「ディスクシステムに搭載されていたFM音源1声分が削られた為」と説明しているサイトもあるようですが、本当なのでしょうか?

 ファミコン版ZANACのサウンドデータはMSX版とほぼ同様な形式のようなので、ひとつFC用「プロアクションロッキー」のテストを兼ね、実機で検証してみることにしました。

■ 用意するもの
・ファミコンとNES版ZANAC
・プロアクションロッキー(以下、FCPAR)

■ 検証する内容
 NES版ZANACに対してFCPARでパッチを当て、一面の曲をディスク版と同じにできるのか?

■ 手順

1、NES版ZANACのサウンドデータ調査


 NES版ZANACのサウンドデータヘッダのフォーマットは以下の通りです。

 上記[ch x音程増分(1バイト)] をそれぞれ書き換えることで、曲データ全体の音階をチャンネル毎に変更可能です。

 次に、曲データの開始アドレスより、音程増分のアドレスを突き止めたいのですが・・・
実はZANACの一面の曲はデータ的には「イントロ部」「メイン部」の2つ(2曲)に分かれています。
(一面のメイン部の曲が流れている際、ボス戦などで一面の曲が中断した場合、再開時には「メイン部」の初めから演奏再開になります)
「イントロ部」の曲データの最後には、演奏終了後に「メイン部」の曲を引き続き演奏するよう、サウンドドライバに指示するコマンドが書かれています。
そのため、一面の曲を変更するのであれば、「イントロ部」「メイン部」の2つの曲データに対して変更を加える必要があります。

 一面の曲の「メイン部」「イントロ部」のファミコン上のアドレスはそれぞれ 0F209h(イントロ部) 0F544h(メイン部)となるので、
音程変化の値のアドレスは1ch目からそれぞれ

0F20Fh,0F219h,0F223h(メイン部)
0F54Ah,0F554h,0F55Eh(イントロ部)となります。

これらのアドレスが示す値は、0FEh,0FEh,0Ah(メイン部) 0FEh,0FEh,0FEh(イントロ部)でした。

10進数で考えると、それぞれのチャンネルの音程は、
と変化しているようです。
これを、
に変換してみます。

2、FCPARによるパッチ当て その1 改造コードの作成


 前項で、NES版ZANACのサウンドデータを調査し、「値を書き換えたいアドレス(ファミコン上での)」「変更前の値」「変更後の値」が判明しました。
 しかし、FCPARに入力する改造コードを生成するには、さらにもう一段階、改造データを暗号化するステップが必要となります。詳細については以下に示す「FCPARの概要」をご覧下さい。

それでは、FCPARに入力する暗号化改造データを作成します。
前項の調査結果より、平文改造データは

(ア)0F20F:00に変更する(変更前の値はFE)→F2 0F 00 FE
(イ)0F219:00に変更する(変更前の値はFE)→F2 19 00 FE
(ウ)0F223:0Cに変更する(変更前の値は0A)→F2 23 0C 0A
(エ)0F54A:00に変更する(変更前の値はFE)→F5 4A 00 FE
(オ)0F554:00に変更する(変更前の値はFE)→F5 54 00 FE
(カ)0F55E:00に変更する(変更前の値はFE)→F5 5E 00 FE

の6つとなります。これを暗号化すると

(ア)F20F00FE→FC3132AE
(イ)F21900FE→FC31810A
(ウ)F2230C0A→AB09EFBE
(エ)F54A00FE→FC310124
(オ)F55400FE→FC31B282
(カ)F55E00FE→FC31B296

となりました。

これらの改造データをまとめ、「曲変更改造コード」としてPARに入力してみます。

入力手順
--------
1.プロアクションロッキーにNES版ザナックを挿し、電源投入。
 「メインメニュー」→「ゲームセレクトへ」→「-- エディット --」を選択。

2.「あたらしいゲーム」を選択し、コードを作成するゲームの名前を入力。
 今後、ゲームスタート時にはここで入力したコード名でコードを指定することになる。
 本例では「NES ZANAC」とした。

3.入力後、一旦メインメニューに戻される。
 「ゲームセレクトへ」→「(さっき入力したゲーム名)」を選択する。
 まだコードは未入力の為「0コードがとうろくされています」と表示されているはず。  「-- エディット --」にカーソルが合っているので、選択。

4.「エディット コード メニュー」画面が表示される。ここから「改造コード」を入力してゆく。
 まずは「あたらしいコード」を選択し、コード名を入力する。
 コード名を入力した後、この改造コードに含まれる「改造データ」を入力してゆく。
 1改造コードに入力できる改造データは4つまで・・・

 今回の改造では(ア)〜(カ)までの6つのコードを有効にする必要があります。そこで、

  改造コード名 その1「1めんメインへんちょう」
   曲変更改造コード(ア)〜(ウ)を入力。

  改造コード名 その2「1めんイントロへんちょう」
   曲変更改造コード(エ)〜(カ)を入力。

 と、(ア)〜(ウ)、(エ)〜(カ)の3つずつにデータを分け、計2つのコードを作成しました。

曲改造データコードの入力は成功したでしょうか?
改造コード-改造データの関係さえつかめればそれほどややこしい作業ではないはずです。
また、FCPARの入力インタフェースも、なかなか良く作られているのではないでしょうか。
入力できる文字もひらがな、かたかな、英数字と種類が豊富です。

3、FCPARによるパッチ当て その2 改造コードの適用


それでは、最後に改造コードを適用してみましょう。

改造コードを適用するには、メインメニューより「ゲームセレクトへ」→「(さっき入力したゲーム名)」と辿ってゆきます。
作成したコード「1めんメインへんちょう(3)」「1めんイントロへんちょう(3)」(カッコ内の数字は改造データの数を示している)を同時に有効化・・・

あれ・・・?どうも、2つのコードを同時に有効化することはできないみたいですね。

 コード選択画面を見ると、上のほうに「スロット」なる言葉が出ています。
 「1めんメインへんちょう(3)」を有効にすると、3スロットが消費されるようです。「スロット」=「改造データの数」ということのようです。 改造コードに含まれる改造データの数を変えたりして調べてみると、どうやら、4つの改造データまでしか有効にできないようです。 1つの改造データは、1バイトのデータを改変できるので、結論としては、

「FCPARは、ゲーム中に『同時に4バイト』までしか改変できない」

ということになるらしいです・・・。

 結果的に、先ほど入力した「1めんメインへんちょう(3)」「1めんイントロへんちょう(3)」のコードは同時に有効にできないことになりました。仕方が無いので、どちらかを有効にしつつ、メイン画面から「ゲームスタートへ」→「コードをつかってゲームスタート」を選択してください。
「1めんメインへんちょう(3)」を有効にした場合、1面が開始し、イントロが流れ終わった後、曲の高さが変わっていることがわかるでしょうか?

 ちなみに、NES版ZANACにはサウンドテストがあります。コードを有効にしたら、1コントローラのABボタンを押しながらファミコンをリセットしてみてください。
(リセットしてもコードは消えません)

■ 検証結果


 どうですか?
 FC版と改変NES版で、全く同じ音が鳴って・・・いませんよね?なんとなく似た曲ではあると思うのですが・・・
PCに録音して聞いてみたのですが、どうもFC版とNES版の曲データの違いは、 音の高低のみではなく、PSGの波形のパラメータも変更されているようです。

 負け惜しみのようになってしまいますが、その後の調査で波形パラメータについても変更する値は判っているのですが、FCPARの仕様の為、今の環境では実証することができませんでした。

以上より、今回の検証結果としては

「似た曲にすることはできたが、全く同一の曲にはできなかった。」

となりました。

■ おまけ:FCPARを使ってみて


 本格的なFC改造を行う場合、やはり気になるのが改変できるのが4バイトのみ、という点です。
 価格的には\10,000弱の商品で4バイトの改変、つまり1バイトあたり\2,500円で改変可能ということです。せめて8バイト分(=8スロット)有効にできれば・・・

 しかし、このような誤った(?)使い方をしないで、プリセットされたコードのみを利用すれば良いのです。 収録されているソフトの種類も多いので、最近流行ってきた旧FCソフトを、無敵モードなどで上っ面だけ楽しむのには最適といえます。 まあ、そんな遊び方では飽きるのも早いでしょうが・・・


 最後に、今回の検証結果の反省です。

1,NES版ザナックの曲データ改変について・・・
 メイン曲のみに限定すれば、あと3バイト(計6バイト)の改変で全く同じ曲になるはずです。ZANACのプログラマの方に確認してもらっても結構です!

2,FCPARのスロット数増強について・・・
 ひょっとしたら、FCPARを2段重ねにすればスロット数は2×4=8とならないでしょうか?それぞれのPARのコード管理画面を、区別して呼び出す方法が判りませんが・・・
 試された方は是非お知らせください。


■ おまけ2:レトロフリーク改造コード


レトロフリークなら4バイトと言わず(上限はあるだろうが)書き替えができる!ということで、本記事の内容に沿ってレトロフリーク用の改造コードを作ったところ、無事、 ディスク版と同じ音程で演奏できました。10年越しに確認できたわい!

NES版のザナックの音楽も完成されていることはいるのですが、あえてディスク版を聴きたい方は、改造コードファイルを置きましたのでお試しください。
なお、サイバーガジェット社がcodes-fc.xmlに入れている改造コードを転送するのはまずそうだったため、

・NES版ZANAC
・パワーブレイザー(このページの内容を改造コードにしたもの)

のみ、抜き出してファイル化してあります。
適宜、手マージなどを行ってください。(2016/2/9)


トップへ戻る