ROMメディアで供給されるゲームにおいて、しばしば「ROMのバージョンが違う」という話を耳にすることがあります。例えば、同じゲームを同じようにプレイしているにも関わらず、ある人のもとではある現象が起こるのに、別の人が同じ手順を何度繰り返し試してもその現象が再現しない――。このような状況を説明できる仮説の一つとして、「ROMのバージョンが違う」という説が持ち出されることがあります。
しかしながら、実際に「ROMのバージョン違い」について具体的に検証されることはほとんどありません。というより、事実上「検証できない」と言った方が正確かもしれません。そもそも、実際に別バージョンのROMが存在しているのかどうかすら定かではありません。それに、仮に複数バージョンのROMカートリッジが存在したとしても、実際のゲームプレイで具体的な差異を見つけ出すのは困難でしょう。
そこで、「ROMカートリッジからROMイメージを読み出して内容を比較する」ことでROMのバージョン違いについて調査してみました。対象とするプラットフォームは、今のところスーパーファミコンのゲームのみです。
調査方法は単純です。まず、同じゲームのROMカートリッジを複数個用意して、実際にROMカートリッジからROMイメージを読み出して、バイナリ比較によって内容に違いがあるかどうかを検証します。そして、ROMイメージ内容に違いがあった場合、違いのあった部分をプログラムレベルで解析して、具体的にどのようにプログラムの挙動が違うのかを解明します。
例によって、解析結果には誤りが存在している可能性が多分にあります。ご注意ください。
スーパーファミコンのゲームのROMイメージ内には、そのゲームについての様々な情報を格納した数十バイト程度の領域があります。これをインフォメーションブロックと呼びます。この領域には、以下のような情報が格納されています。
このインフォメーションブロック内の情報のうち、「ROMのバージョン違い」に関係する項目について以下に説明します。
そのものずばり「バージョン」を表す1バイトの数値です。多くの場合、「オリジナル版」のバージョン番号は"00"であり、「修正版」が存在する場合はオリジナル版とは異なるバージョン番号("01"など)を設定しているケースが多いようです。
バージョン番号として実際に設定されている値としては、"00"・"01"・"02"といった数値を確認しています。この文書では、バージョン番号が"00"のROMを「バージョン1.0」とします。そして、バージョン番号が"01"・"02"のROMはそれぞれ「バージョン1.1」「バージョン1.2」として扱います。
ROMのデータに誤りがないかどうかをチェックするための2バイトの数値です。「チェックサム」についての一般的な説明は省略します。
この調査では、「市販ゲームのROMカートリッジはチェックサムが正常に設定されている」ことを大前提とします。そして、もしもチェックサムが合わない場合は、ROMイメージの読み出しに失敗したものとみなします。
本文書では、ROMカートリッジの違いを示すために、「バージョン番号」だけでなく「チェックサム」も併記することにします。
ROMカートリッジの裏面のシールには、右下に"901121"・"920214"・"G741812 SHVC-JPN-1"などの番号が書かれています。また、左上や右下には"00"・"07A"・"34"といった刻印が入っています。
これらの番号や刻印は、同じゲームのROMカートリッジ間でも異なっている場合があります(特に刻印)。外から見てわかるほとんど唯一の違いなので、「ROMの違い」についての話題でよく引き合いに出されます。
今回の調査の結果、どうやら刻印の"A"の文字は"バージョン1.1"に対応している可能性が高いということが言えそうです。また、サンプル数が少ないのですが、刻印の"B"の文字は"バージョン1.2"に対応しているようです。
バージョン1.0とバージョン1.1の2種類が存在することを確認しました。以下、両者の具体的な違いについて説明します。
バージョン1.0には『陣形技ポイントが2ポイントの時に合成術「光の壁」を使用すると、陣形技ポイントが9ポイントに増加する』というバグが存在します。このバグがバージョン1.1では修正されました。
「光の壁」は陣形技ポイントを2ポイント消費する術ですが、レベルが高いとターンの最後に敵を攻撃するようになり、この場合はさらに2ポイント消費します。バグの原因は、ここでの陣形技ポイントの減算処理で結果がマイナスになるケースを考慮していなかった、というミスです。
ところで、この「ターン最後の効果発動時に、さらに2ポイント消費する」という現象ですが、実はこの挙動もバージョン1.0でのバグによるものです。詳しくは、『技・術・陣形技ポイントの二重消費』の項をご覧ください。
棍棒技の「グランドスラム」は、技を使用した時点では効果は発動せず、ターンの最後に効果が発動します。また、朱鳥術の「ファイアウォール」や陣形技の「光の壁」は、本来は防御のためのものですが、レベルが高いとターンの最後に敵を攻撃するようになります。
バージョン1.0でこれらの技・術を使うと、「技・術の使用時」と「ターン最後の効果発動時」とで、(技・術・陣形)ポイントを2回消費します。これが、バージョン1.1では「技・術の使用時」にしかポイントを消費しないようになりました。
他にもプログラムが修正された部分はいくつかありますが、どのような修正がなされたかについては現在調査中です。なお、プログラムの変更点は全部で数か所程度のようです。
ほとんどの部分には変更点はありません。少なくとも、rs_analyzerによる解析結果は、バージョン1.0でもバージョン1.1でも同じでした(もちろん、データ側は変更されていなくても、そのデータを解釈するプログラム側に変更がある可能性はあります)。
バージョン1.0とバージョン1.1の2種類が存在することを確認しました。
ロマンシング サ・ガは未プレイであるため、詳細な違いについてはわかりませんが、バージョン1.0はパッド操作によるリセットが可能で、バージョン1.1では不可能であることは確認しました。
ちなみに、バージョン1.1のROMカートリッジのパッケージには「スクウェアからのお知らせ」なる紙が入っていて、「万一、戦闘中に画面がくずれた場合には、セーブデータが全て消えてしまうことがありますので、戦闘が終わる前にリセットボタンを押してください。」という文が書かれていました。
ファイナルファンタジーVIのROMカートリッジの容量は「24メガビット」ということになっていますが、ものによっては「32メガビット」のROMが搭載されているカートリッジが存在します。
この「32メガビット版」のROMの内容ですが、「24メガビット版」とまったく違いはありません。32メガビットのROMのうち、先頭から24メガビット分には「24メガビット版」のROMの内容がそのまま入っていて、残りの8メガビット分にはダミーとして"00"が並んでいるだけです。よって、ゲーム内容にはまったく違いはありません。また、インフォメーションブロックもまったく違いはなく、バージョン番号の違いなどもありません。
現在のところ、1種類のバージョンの存在しか確認できていません。
ただし、バージョン番号の値が"01"となっているため、このバージョンは「バージョン1.1」ということになります。「バージョン1.1」が存在するのならば「バージョン1.0」が存在していてもおかしくはなさそうなのですが……。
現在のところ、1種類のバージョンの存在しか確認できていません。
『ロマンシング サ・ガ2』は、複数バージョンのROMカートリッジの存在が噂されているタイトルですが、現在のところは別バージョンは見つかっていません。
ROMカートリッジ6個のうち、4個がバージョン1.0で、2個がバージョン1.1でした。
個数 | 番号(右下) | 刻印(左上) | 刻印(右上) | バージョン | チェックサム |
---|---|---|---|---|---|
1 | G741812 SHVC-JPN-1 | (なし) | 00 | 1.0 | AFF7 |
1 | G741812 SHVC-JPN-1 | (なし) | 07A | 1.1 | 860B |
1 | G741812 SHVC-JPN-1 | (なし) | 08 | 1.0 | AFF7 |
1 | G741812 SHVC-JPN-1 | (なし) | 12 | 1.0 | AFF7 |
1 | G741812 SHVC-JPN-1 | (なし) | 34 | 1.0 | AFF7 |
1 | G741812 SHVC-JPN-1 | (なし) | 34A | 1.1 | 860B |
ADDRESS 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF ------------------------------------------------------------------------------ 00C0FFC0 52 4F 4D 41 4E 43 49 4E 47 20 53 41 47 41 33 20 ROMANCING SAGA3 00C0FFD0 20 20 20 20 20 31 02 0C 03 00 33 00 08 50 F7 AF 1....3..P..
ADDRESS 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF ------------------------------------------------------------------------------ 00C0FFC0 52 4F 4D 41 4E 43 49 4E 47 20 53 41 47 41 33 20 ROMANCING SAGA3 00C0FFD0 20 20 20 20 20 31 02 0C 03 00 33 01 F4 79 0B 86 1....3..y..
バージョン1.0と1.1のROMイメージ全体を単純にバイナリ比較すると、100キロバイト以上の相違点があります。一見、両者の内容には大きな違いがあるように見えますが、実際にはそれほどの違いはありません。バージョン1.0から1.1への変更でデータやプログラムコードが「追加」されたことにより、ROMイメージ上のアドレスにずれが生じているために内容が大きく変化したように見えるだけです。
ROMカートリッジ2個のうち、1個がバージョン1.0で、1個がバージョン1.1でした。
個数 | 番号(右下) | 刻印(左上) | 刻印(右上) | バージョン | チェックサム |
---|---|---|---|---|---|
1 | 901121 | 05 | (なし) | 1.0 | 5814 |
1 | 920214 | (なし) | 00A | 1.1 | E893 |
ADDRESS 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF ------------------------------------------------------------------------------ 0000FFC0 52 4F 4D 41 4E 43 49 4E 47 20 53 41 47 41 20 20 ROMANCING SAGA 0000FFD0 20 20 20 20 20 20 02 0A 03 00 C3 00 EB A7 14 58 .........X
ADDRESS 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF ------------------------------------------------------------------------------ 0000FFC0 52 4F 4D 41 4E 43 49 4E 47 20 53 41 47 41 20 20 ROMANCING SAGA 0000FFD0 20 20 20 20 20 20 02 0A 03 00 C3 01 6C 17 93 E8 ......l...
ROMカートリッジ7個のうち、3個が24メガビット版で、4個が32メガビット版でした。また、7個すべてがバージョン1.0でした。
個数 | 番号(右下) | 刻印(左上) | 刻印(右上) | バージョン | チェックサム | 容量 |
---|---|---|---|---|---|---|
2 | 920214 | (なし) | 09 | 1.0 | A172 | 24メガビット |
1 | 920214 | (なし) | 27 | 1.0 | A172 | 32メガビット |
1 | 920214 | (なし) | 35 | 1.0 | A172 | 32メガビット |
2 | 920214 | (なし) | 36 | 1.0 | A172 | 32メガビット |
1 | G741812 SHVC-JPN-1 | (なし) | 11 | 1.0 | A172 | 24メガビット |
ADDRESS 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF ------------------------------------------------------------------------------ 00C0FFC0 46 49 4E 41 4C 20 46 41 4E 54 41 53 59 20 36 20 FINAL FANTASY 6 00C0FFD0 20 20 20 20 20 31 02 0C 03 00 C3 00 8D 5E 72 A1 1.......^r.
ROMカートリッジ10個のうち、内容に違いのあるものは見つかりませんでした。また、10個すべてがバージョン1.1でした。
個数 | 番号(右下) | 刻印(左上) | 刻印(右上) | バージョン | チェックサム |
---|---|---|---|---|---|
6 | 901121 | 00 | A | 1.1 | ACCC |
2 | 901121 | 28 | A | 1.1 | ACCC |
1 | 920214 | (なし) | 07A | 1.1 | ACCC |
1 | G741812 SHVC-JPN-1 | (なし) | 11 | 1.1 | ACCC |
ADDRESS 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF ------------------------------------------------------------------------------ 0000FFC0 46 49 4E 41 4C 20 46 41 4E 54 41 53 59 20 34 20 FINAL FANTASY 4 0000FFD0 20 20 20 20 20 20 02 0A 03 00 C3 01 33 53 CC AC ......3S..
ROMカートリッジ12個のうち、内容に違いのあるものは見つかりませんでした。また、12個すべてがバージョン1.0でした。
個数 | 番号(右下) | 刻印(左上) | 刻印(右上) | バージョン | チェックサム |
---|---|---|---|---|---|
2 | 920214 | (なし) | 05 | 1.0 | 80F0 |
3 | 920214 | (なし) | 09 | 1.0 | 80F0 |
3 | 920214 | (なし) | 19 | 1.0 | 80F0 |
1 | 920214 | (なし) | 34 | 1.0 | 80F0 |
2 | 920214 | (なし) | 36 | 1.0 | 80F0 |
1 | G741812 SHVC-JPN-1 | (なし) | 12 | 1.0 | 80F0 |
ADDRESS 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF ------------------------------------------------------------------------------ 00C0FFC0 52 4F 4D 41 4E 43 49 4E 47 20 53 41 47 41 32 20 ROMANCING SAGA2 00C0FFD0 20 20 20 20 20 31 02 0B 03 00 C3 00 0F 7F F0 80 1..........
いろいろなROMカートリッジを調べているうちに、どうも刻印に"A"の文字があると「バージョン1.1」である場合が多いことに気づきました。そこで、手元にあるROMカートリッジの中で該当するものについて調査してみました。
タイトル | 番号(右下) | 刻印(左上) | 刻印(右上) | バージョン | チェックサム |
---|---|---|---|---|---|
スーパーマリオワールド | 901121 | 03 | A | 1.0 | 8C80 |
スーパーマリオカート | 920214 | (なし) | 22A | 1.0 | 8A23 |
スーパーマリオコレクション | G741812 SHVC-JPN-1 | (なし) | 08A | 1.1 | A81F |
ゼルダの伝説 | G741812 SHVC-JPN-1 | (なし) | 08B | 1.2 | 0BE3 |
ウィザードリィ・外伝IV | G741812 SHVC-JPN-1 | (なし) | 00A | 1.1 | DE35 |
どうやら、刻印のアルファベットとバージョンとの間には、ある程度の相関があるということが言えそうです。
;________________________________________________________________ ; ; 陣形技ポイントの消費 ;________________________________________________________________ ; LC2B6D3: LDY #$0006 LDA ($9E),Y CMP #$80 BNE $B6E8 LDY #$0008 LDA ($9E),Y STA $42 JSR $50D5 BRA $B703 LC2B6E8: LDA $20 BIT #$02 BEQ $B6F4 AND #$FD STA $20 BRA $B703 LC2B6F4: JSR $BFBB LDA $53 SEC SBC $3B STA $53 LDA $3B STA $1427 LC2B703: RTS
;________________________________________________________________
;
; 陣形技ポイントの消費
;________________________________________________________________
;
LC2B6EB:
LDY #$0006
LDA ($9E),Y
CMP #$80
BNE $B700
LDY #$0008
LDA ($9E),Y
STA $42
JSR $50D5
BRA $B723
LC2B700:
LDA $20
BIT #$02
BEQ $B70C
AND #$FD
STA $20
BRA $B723
LC2B70C:
JSR $BFDB
LDA $53
CMP $3B ; 追加部分
BCS $B719 ; 追加部分
LDA #$00 ; 追加部分
BRA $B71C ; 追加部分
LC2B719:
SEC
SBC $3B
LC2B71C:
STA $53
LDA $3B
STA $1427
LC2B723:
RTS
;________________________________________________________________ ; ; 技/術/陣形技ポイントの消費 ;________________________________________________________________ ; LC2B6B6: LDA $1F BIT #$02 BNE $B6D2 JSR $041F BNE $B6CF LDY #$0000 LDA ($9E),Y BIT #$80 BNE $B6D2 JSR $B6D3 ; 陣形技ポイントの消費 BRA $B6D2 LC2B6CF: JSR $B704 ; 技/術ポイントの消費 LC2B6D2: RTS
;________________________________________________________________
;
; 技/術/陣形技ポイントの消費
;________________________________________________________________
;
LC2B6C8:
LDA $1F
BIT #$02
BNE $B6EA
LDA $20 ; 追加部分
BIT #$01 ; 追加部分
BNE $B6EA ; 追加部分
JSR $041F
BNE $B6E7
LDY #$0000
LDA ($9E),Y
BIT #$80
BNE $B6EA
JSR $B6EB ; 陣形技ポイントの消費
BRA $B6EA
LC2B6E7:
JSR $B724 ; 技/術ポイントの消費
LC2B6EA:
RTS