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





<0> はじめに



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




<1> トンカチエディターマニュアルからの引用

*********************************************************

 2-6音楽機能

 音を出しているのは、4000番地からの働きです。実際にはCPUの内部に音を出す回路ごと組み込まれているらしいのですが、プログラムには関係ありません。
 一つの音は4バイトで作られます。カウンターの分周比で音を作るので、
 どこかの音と半音で数えてX離れた音階は
 周波数F=定数×2^(X/12)
 となり、
 周波数Fを実現するカウンター値Nは
 N=定数/F
 と計算します。
 どうしてかは、自分で勉強して下さい。音楽に興味があって、物理の知識があれば、分かります。
 かけ算だけでも難しいのにべき乗を含むこの計算をリアルタイムに実行できません。ですから、周波数テーブルというのを作って、索引します。
 一般的には1オクターブ分、12個のテーブルを持って、オクターブ上の周波数を得るにはテーブル値をシフトする方式で対応します。
 その他に、4011番地はDAC(ダック)の番地です。プログラム次第で音声合成も出来ます。

−−以下FM音源の話で、マリオ1には関係ない(ゼルダにはあるが)ので省略します。−−


 ★レッスン2-6(マリオミュージックを変更する)

 アドレスD2D0が音を出すルーチンの入口です。
 周波数テーブルはDF00からがそうです。マリオMUSICそのものはD6F1で設定されているテーブルで指定されています。
 D90Dからの16進1バイトで曲設定テーブルのある場所を示しています。
この数字プラスD90Dからの4バイトがそれです。
 曲設定テーブルでは、
  ****+0    テンポ
  ****+1、2  音楽格納場所(第1音)
  ****+3    ラッパ型音(第2音)位置
  ****+4    バイオリン型音(第3音)位置
  ****+5    打楽器(第4音)の位置
 こういう仕組みだと思います。
 つまり(((D90D+(D90D+Y))+1))が第1音の音階と音長。音長を表す時は80以上です。
3つの楽器とひとつの打楽器で演奏します。
 音階は半音毎に1上がる数字で示しています。絶対音階でのドの音のコードはよく分かりません。供給されているクロックが1789770ヘルツで、ドの周波数が1046なので、1789770/1046のオクターブ分の1のテーブルがドと想像出来ます。こんな面倒なことをしなくても相対音階で適当に解析すれば大丈夫です。絶対音階と違ってても移調したと言い訳しましょう。

 音階が04は休符。他は下のように想定します。

  低い 中 高音
     14 2C ド
     18 30 レ
     1C 34 ミ
  06 1E 36 ファ
  0A 22 3A ソ
  0E 26 3E ラ
  12 2A 42 シ

 音の長さ

  81 1/8音符
  82 1/4音符
  83 1/2音符
  84 全音符
  85 3/8音符
  86 6/8音符

ここまで分かれば自分で曲を作ることも可能だと思います。作曲の才能がある人は挑戦して下さい。将来音楽家になろうと思っている人は、音の物理的な面での勉強になると思います。
 音楽の才能のない人も、適当にここらの数字をいじれば曲が適当に変わりますから、友達に「あれ?」と言わせる位のことは出来ます。
 DF66からのデーターが音符の長さテーブルですので、ここからの数字をDF95まで全て倍にして下さい。結果、テンポが完全に半分になります。

*********************************************************




<2> データ位置



トンカチエディターマニュアルに表記している、マリオ1(ファミコンディスクシステム版)上の番地がNES形式(NO TRAINER)ではどの番地にあたるのかを調査した結果
( )内は検索用最初の5バイト

●音を出すルーチンの入口
ファミコンディスクシステムの番地 D2D0番地
NES形式(NO TRAINER)72E0番地(AD 70 07 D0 04)

●周波数テーブル
ファミコンディスクシステムの番地 DF00番地
NES形式(NO TRAINER)7F10番地(00 88 00 2F 00)

●マリオミュージックそのものの設定テーブル
ファミコンディスクシステムの番地 D6F1番地
NES形式(NO TRAINER)7701番地(C8 4A 90 FC B9)

●曲設定テーブルのある場所指定
ファミコンディスクシステムの番地 D90D番地
NES形式(NO TRAINER)791D番地(A5 59 54 64 59)

●音符の長さテーブル
ファミコンディスクシステムの番地 DF66番地〜DF95番地
NES形式(NO TRAINER)7F76番地(05 0A 14 28 50)〜7FA5番地




<3> 解説


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




<4> マリオミュージックのテンポを半分にしたパッチ


 以下、マリオ1のNES形式(NO TRAINER)のROMをトンカチマニュアルの方法にしたがって、ミュージックのテンポを完全に半分にしたものを差分ファイルで公開します。解析なんかイヤだ、という人はこれで気分だけでも味わってください。

ミュージックのテンポを半分にしたパッチ(109bite) mariomus.ne2 

使用した差分ファイル作成ソフト Neo for Win32  ダウンロードのページ


バックアップは自動的に取られるようですが、念のため原本は必ずバックアップをとりましょう。また、当差分ファイルを用いた結果は自己責任にてお願いいたします。

2000年 8月9日 −けい1−





引用文献

トンカチエディター取扱説明書(1987年7月30日 アイ・ツー社発行)

トンカチエディター取扱説明書について

 アイ・ツー社のファミコンディスクシステム上でデータのパッチができるソフト、「トンカチエディター」に付属していたマニュアル。A5版63ページもあり、ファミコンの話と、教材ソフトであるディスクシステム版スーパーマリオブラザーズ1の内容について大半が裂かれている。私がこれを購入したのは1988年の事で、これが現在の解析・改造の基礎になっている。また、現在のマリオ1の解析情報の大半はこのマニュアルに書かれている内容を元にしていると思われる。

戻る

ホームページへ



 本文中の会社名及び商品名は各社の商標または登録商標です。