## マリオ１のミュージックの変更方法についての情報

＜０＞ はじめに

最近増加するマリオを改造する方々のうちの一人に、マリオミュージックの変更についてのご質問を受けたので、ここに解っている限りの情報を公開します。といっても、私は音楽変更に手をつけた事は無いので、私のバイブルである、トンカチエディターマニュアル（アイツー社発行）のファミコンの音楽機能と、マリオ１の場合の音楽変更方法について書かれている部分についてそのまま引用し、書かれているマリオ１のソフト上の具体的な番地については、（調べるのが困難な方もいらっしゃると思いますので）ＮＥＳ形式（ＮＯ ＴＲＡＩＮＥＲ）ではどの番地にあたるのかを調査した結果を公開します。つまり解析までいっていません。これで終わらせるのは無責任なようですが、今の所時間的にはこれが限界です。マリオ１のミュージックのテンポを半分にした、ごく簡単な改造を一例として最後に掲載しましたので、これで許して下さい。

＜１＞ トンカチエディターマニュアルからの引用

*********************************************************
2-6音楽機能
音を出しているのは、4000番地からの働きです。実際にはＣＰＵの内部に音を出す回路ごと組み込まれているらしいのですが、プログラムには関係ありません。
一つの音は４バイトで作られます。カウンターの分周比で音を作るので、
どこかの音と半音で数えてＸ離れた音階は
周波数Ｆ＝定数×２＾（Ｘ／１２）
となり、
周波数Ｆを実現するカウンター値Ｎは
Ｎ＝定数／Ｆ
と計算します。
どうしてかは、自分で勉強して下さい。音楽に興味があって、物理の知識があれば、分かります。
かけ算だけでも難しいのにべき乗を含むこの計算をリアルタイムに実行できません。ですから、周波数テーブルというのを作って、索引します。
一般的には１オクターブ分、１２個のテーブルを持って、オクターブ上の周波数を得るにはテーブル値をシフトする方式で対応します。
その他に、4011番地はＤＡＣ（ダック）の番地です。プログラム次第で音声合成も出来ます。
−−以下ＦＭ音源の話で、マリオ１には関係ない（ゼルダにはあるが）ので省略します。−−
★レッスン2-6（マリオミュージックを変更する）
アドレスD2D0が音を出すルーチンの入口です。
周波数テーブルはDF00からがそうです。マリオＭＵＳＩＣそのものはD6F1で設定されているテーブルで指定されています。
D90Dからの１６進１バイトで曲設定テーブルのある場所を示しています。
この数字プラスD90Dからの４バイトがそれです。
曲設定テーブルでは、
＊＊＊＊＋０　　　　テンポ
＊＊＊＊＋１、２　　音楽格納場所（第１音）
＊＊＊＊＋３　　　　ラッパ型音（第２音）位置
＊＊＊＊＋４　　　　バイオリン型音（第３音）位置
＊＊＊＊＋５　　　　打楽器（第４音）の位置
こういう仕組みだと思います。
つまり（（（Ｄ９０Ｄ＋（Ｄ９０Ｄ＋Ｙ））＋１））が第１音の音階と音長。音長を表す時は８０以上です。
３つの楽器とひとつの打楽器で演奏します。
音階は半音毎に１上がる数字で示しています。絶対音階でのドの音のコードはよく分かりません。供給されているクロックが１７８９７７０ヘルツで、ドの周波数が１０４６なので、１７８９７７０／１０４６のオクターブ分の１のテーブルがドと想像出来ます。こんな面倒なことをしなくても相対音階で適当に解析すれば大丈夫です。絶対音階と違ってても移調したと言い訳しましょう。
音階が０４は休符。他は下のように想定します。
低い　中　高音
１４　２Ｃ　ド
１８　３０　レ
１Ｃ　３４　ミ
０６　１Ｅ　３６　ファ
０Ａ　２２　３Ａ　ソ
０Ｅ　２６　３Ｅ　ラ
１２　２Ａ　４２　シ
音の長さ
８１　１／８音符
８２　１／４音符
８３　１／２音符
８４　全音符
８５　３／８音符
８６　６／８音符
ここまで分かれば自分で曲を作ることも可能だと思います。作曲の才能がある人は挑戦して下さい。将来音楽家になろうと思っている人は、音の物理的な面での勉強になると思います。
音楽の才能のない人も、適当にここらの数字をいじれば曲が適当に変わりますから、友達に「あれ？」と言わせる位のことは出来ます。
DF66からのデーターが音符の長さテーブルですので、ここからの数字をDF95まで全て倍にして下さい。結果、テンポが完全に半分になります。
*********************************************************

＜２＞ データ位置

トンカチエディターマニュアルに表記している、マリオ１（ファミコンディスクシステム版）上の番地がＮＥＳ形式（ＮＯ ＴＲＡＩＮＥＲ）ではどの番地にあたるのかを調査した結果
（　）内は検索用最初の５バイト
●音を出すルーチンの入口
ファミコンディスクシステムの番地　D2D0番地
ＮＥＳ形式（ＮＯ ＴＲＡＩＮＥＲ）72E0番地（AD 70 07 D0 04）
●周波数テーブル
ファミコンディスクシステムの番地　DF00番地
ＮＥＳ形式（ＮＯ ＴＲＡＩＮＥＲ）7F10番地（00 88 00 2F 00）
●マリオミュージックそのものの設定テーブル
ファミコンディスクシステムの番地　D6F1番地
ＮＥＳ形式（ＮＯ ＴＲＡＩＮＥＲ）7701番地（C8 4A 90 FC B9）
●曲設定テーブルのある場所指定
ファミコンディスクシステムの番地　D90D番地
ＮＥＳ形式（ＮＯ ＴＲＡＩＮＥＲ）791D番地（A5 59 54 64 59）
●音符の長さテーブル
ファミコンディスクシステムの番地　DF66番地〜DF95番地
ＮＥＳ形式（ＮＯ ＴＲＡＩＮＥＲ）7F76番地（05 0A 14 28 50）〜7FA5番地

＜３＞ 解説

以上、実に解りやすい説明でした。解析をすすめるにあたって、なにか解らない事があれば何でもご質問下さい。
−−−というのはもちろん嘘で、私も何の事やらさっぱり解りません。（質問は、ゲームミュージックのスペシャリストが何人かいらっしゃる様なので、それらの方にされた方が良いかと思います）というより、ここに書かれている事は、読んですぐ解る性質のものではなく、いろいろと自分で試してみて、少しずつ書かれている内容の意味が解っていくものだと思います。私は今の所、時間的にも、熱意的にもこれが限界ですが、熱意も時間もある人にこれを託して、私もそのおこぼれにあずかりたいと思っています。

＜４＞ マリオミュージックのテンポを半分にしたパッチ

以下、マリオ１のＮＥＳ形式（ＮＯ ＴＲＡＩＮＥＲ）のＲＯＭをトンカチマニュアルの方法にしたがって、ミュージックのテンポを完全に半分にしたものを差分ファイルで公開します。解析なんかイヤだ、という人はこれで気分だけでも味わってください。
ミュージックのテンポを半分にしたパッチ（109bite）mariomus.ne2
使用した差分ファイル作成ソフト　Neo for Win32 ダウンロードのページ
バックアップは自動的に取られるようですが、念のため原本は必ずバックアップをとりましょう。また、当差分ファイルを用いた結果は自己責任にてお願いいたします。

２０００年　８月９日　−けい１−

引用文献
トンカチエディターマニュアル（１９８７年７月３０日　アイツー社発行）
トンカチエディターマニュアルについて
アイツー社のファミコンディスクシステム上でデータのパッチができるソフト、「トンカチエディター」に付属していたマニュアル。Ｂ６版約６０ページもあり、ファミコンの話と、教材ソフトであるディスクシステム版スーパーマリオブラザーズ１の内容について大半が裂かれている。私がこれを購入したのは１９８８年の事で、これが現在の解析・改造の基礎になっている。また、現在のマリオ１の解析情報の大半はこのマニュアルに書かれている内容を元にしていると思われる。
戻る
ホームページへ
本文中の会社名及び商品名は各社の商標または登録商標です。