面データの場所指定方法(マリオ２)続き

## マリオ２の面データの場所指定方法の続き

### マリオ２の面データ開始位置指定部分(ワールドＡ〜Ｄ)

原本におけるルームＮｏ.配列 | 敵データ | マップデータ
水中面 | 地上面 | 地下面 | 地獄面 | 原本におけるデータ開始位置 (ファイルＮｏ.０６)（参考） | データ開始位置の指定番地 (ファイルＮｏ.０６) | 原本におけるデータ開始位置 (ファイルＮｏ.０６)（参考） | データ開始位置の指定番地 (ファイルＮｏ.０６)
|  |  | ６０ | Ｃ５Ｄ０ | Ｃ３７６ | Ｃ８５３ | Ｃ３Ａ４
|  |  | ６１ | Ｃ５Ｆ５ | Ｃ３７８ | Ｃ８Ｃ６ | Ｃ３Ａ６
|  |  | ６２ | Ｃ６１Ｃ | Ｃ３７Ａ | Ｃ９４３ | Ｃ３Ａ８
|  |  | ６３ | Ｃ６５Ｄ | Ｃ３７Ｃ | Ｃ９ＤＥ | Ｃ３ＡＡ
| ２０ |  | ６４ | Ｃ６８Ｃ | Ｃ３７Ｅ | ＣＡ６Ｄ | Ｃ３ＡＣ
| ２１ |  | ６５ | Ｃ６Ｃ７ | Ｃ３８０ | ＣＡＦＣ | Ｃ３ＡＥ
| ２２ |  | ６６ | Ｃ６Ｄ６ | Ｃ３８２ | ＣＢ５５ | Ｃ３Ｂ０
| ２３ |  | ６７ | Ｃ７０４ | Ｃ３８４ | ＣＢＥ６ | Ｃ３Ｂ２
| ２４ |  | ６８ | Ｃ７２９ | Ｃ３８６ | ＣＣ４５ | Ｃ３Ｂ４
| ２５ |  | ６９ | Ｃ７４Ｃ | Ｃ３８８ | ＣＣＢＣ | Ｃ３Ｂ６
| ２６ |  | ６Ａ | Ｃ７６Ｂ | Ｃ３８Ａ | ＣＤ１７ | Ｃ３Ｂ８
| ２７ |  | ６Ｂ | Ｃ７８Ａ | Ｃ３８Ｃ | ＣＤ９４ | Ｃ３ＢＡ
| ２８ |  | ６Ｃ | Ｃ７ＡＡ | Ｃ３８Ｅ | ＣＥ１１ | Ｃ３ＢＣ
| ２９ |  | ６Ｄ | Ｃ７ＣＢ | Ｃ３９０ | ＣＥ５Ｃ | Ｃ３ＢＥ
| ２Ａ |  | ６Ｅ | Ｃ７Ｅ２ | Ｃ３９２ | ＣＥＣ７ | Ｃ３Ｃ０
| ２Ｂ |  | ６Ｆ | Ｃ７Ｆ２ | Ｃ３９４ | ＣＥＥＡ | Ｃ３Ｃ２
| ２Ｃ |  | ７０ | Ｃ２６０ | Ｃ３９６ | Ｃ２７４ | Ｃ３Ｃ４
| ２Ｄ |  | ７１ | Ｃ２６０ | Ｃ３９８ | Ｃ２６１ | Ｃ３Ｃ６
| ２Ｅ | ４０ | ７２ | Ｃ８０１ | Ｃ３９Ａ | ＣＦ０７ | Ｃ３Ｃ８
| ２Ｆ | ４１ | ７３ | Ｃ８１Ｂ | Ｃ３９Ｃ | ＣＦ７Ｃ | Ｃ３ＣＡ
００ | ３０ | ４２ | ７４ | Ｃ８２Ｆ | Ｃ３９Ｅ | ＣＦＤＢ | Ｃ３ＣＣ

＜表の見方＞
例えば、ワールド１〜９におけるルームＮｏ．６０のデータ開始位置指定場所は、
敵データがＣ３９８番地
マップデータがＣ４０４番地です。
ところで、原本においては
Ｃ３９８番地は90
Ｃ３９９番地はC7
Ｃ４０４番地は14
Ｃ４０５番地はCA
となっています。
これは、ルームＮｏ．６０の敵データはＣ７９０番地から、マップデータはＣＡ１４番地から始まるという意味です。
余談ですが・・・
指定番地の下位が最初に来て、次に上位が続くという表現の仕方は、６５０２ＣＰＵの仕様だそうで、コンピュータが認識する分にはなんら問題は無いのでしょうが・・・しかし、解析をしている私達にとっては甚だ迷惑なものです。
説明が繰り返しになりますが、ルームＮｏ．６０が
ワールド１〜４に使われていればファイルＮｏ．０３上でのＣ７９０番地とＣＡ１４番地を、
ワールド５〜８に使われていればファイルＮｏ．０４上でのＣ７９０番地とＣＡ１４番地を、
ワールド９に使われていればファイルＮｏ．０５上でのＣ７９０番地とＣＡ１４番地を、
それぞれ認識します。
なお、例えば上記の表によると原本のワールドＡ〜Ｄの水中面はルームＮｏ．００しかありません。ではこのままではルームＮｏ．０１以降は存在しないか、と言えばそうではありません。順次下位の番地を認識してゆくので存在します。ただこれらは正式な開始位置指定領域を割り当てられていないだけです。したがって全然別の指定部分が認識されて・・・ひょっとしたらまた変わった面がお目見えするかもしれませんネ。

＜３'＞ コマンドアドレスヘッダ

コマンドアドレスヘッダとは・・・
上記の表にあるように、アドレス指定の開始位置が面の種類によってまちまちですが、この"ずれ"を指定している部分。
例えば上記の表によると原本のワールドＡ〜Ｄの水中面はルームＮｏ．００しか使えません。しかしもっと多くの水中面を作りたい時はこのコマンドアドレスヘッダを変更すればいい訳です。 （コマンドアドレスヘッダの情報は、マリオ工作員さん達のページのマリオ解析結果報告より頂いています。）
<敵キャラコマンドアドレスヘッダ>
●ワールド１〜９　　　 （ファイルＮｏ．０３のＣ３９４番地〜Ｃ３９７番地）
ここは、原本のマップデータの場合、2C 0A 27 00 となっています。
すなわち、これはアドレス指定位置が
水中面は２Ｃ番目から、
地上面は０Ａ番目から、
地下面は２７番目から、
地獄面は００番目から、
始まるという意味になります。
●ワールドＡ〜Ｄ　　　 （ファイルＮｏ．０６のＣ３７２番地〜Ｃ３７５番地）
ここは、原本のマップデータの場合、14 04 12 00 となっています。
すなわち、これはアドレス指定位置が
水中面は１４番目から、
地上面は０４番目から、
地下面は１２番目から、
地獄面は００番目から、
始まるという意味になります。
<マップコマンドアドレスヘッダ>
●ワールド１〜９　　　 （ファイルＮｏ．０３のＣ４００番地〜Ｃ４０３番地）
ここは、原本のマップデータの場合、2C 0A 27 00 となっています。
つまり<敵キャラコマンドアドレスヘッダ>と全く同じです。
●ワールドＡ〜Ｄ　　　 （ファイルＮｏ．０６のＣ３Ａ０番地〜Ｃ３Ａ３番地）
ここは、原本のマップデータの場合、14 04 12 00 となっています。
つまり<敵キャラコマンドアドレスヘッダ>と全く同じです。
余談ですが・・・
マリオ１の原本のデータ開始位置指定部分が複雑な原因のひとつに、この<敵キャラコマンドアドレスヘッダ>と<マップコマンドアドレスヘッダ> が違う事が挙げられます。マリオ２の原本の場合、この２つが共通なので、上記の表も実にシンプルに（敵データとマップデータを同じ様に扱える）作る事が出来る訳です。
なお、トンカチマリオの場合、このコマンドアドレスヘッダは全て00になっています。しかも、データ開始位置指定箇所を６４個も取っているので、この６４個の部屋の面の種類を自由自在に変更できる訳です。スーパー真理ブラザーズでは、これら６４個の部屋を全て使い切り、しかも同じ部屋を何回も面の種類を変えて配置しています。
参考文献
マリオ工作員さん達のページのスーパーマリオブラザーズ解析情報 における、「カセット版、面データのアドレス指定方法」のコマンドアドレスヘッダの解説
マリオ１のデータ開始位置指定法へ戻る
戻る
ホームページへ
本文中の会社名及び商品名は各社の商標または登録商標です。