ゲームのROMのバージョン違いに関する調査

目次

はじめに

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"に対応しているようです。

調査結果

ロマンシング サ・ガ3

バージョン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

ファイナルファンタジーVIのROMカートリッジの容量は「24メガビット」ということになっていますが、ものによっては「32メガビット」のROMが搭載されているカートリッジが存在します。

この「32メガビット版」のROMの内容ですが、「24メガビット版」とまったく違いはありません。32メガビットのROMのうち、先頭から24メガビット分には「24メガビット版」のROMの内容がそのまま入っていて、残りの8メガビット分にはダミーとして"00"が並んでいるだけです。よって、ゲーム内容にはまったく違いはありません。また、インフォメーションブロックもまったく違いはなく、バージョン番号の違いなどもありません。

ファイナルファンタジーIV

現在のところ、1種類のバージョンの存在しか確認できていません。

ただし、バージョン番号の値が"01"となっているため、このバージョンは「バージョン1.1」ということになります。「バージョン1.1」が存在するのならば「バージョン1.0」が存在していてもおかしくはなさそうなのですが……。

ロマンシング サ・ガ2

現在のところ、1種類のバージョンの存在しか確認できていません。

『ロマンシング サ・ガ2』は、複数バージョンのROMカートリッジの存在が噂されているタイトルですが、現在のところは別バージョンは見つかっていません。

調査に使用したROMカートリッジ

ロマンシング サ・ガ3

ROMカートリッジ6個のうち、4個がバージョン1.0で、2個がバージョン1.1でした。

カートリッジの裏面の番号・刻印

調査に使用した『ロマンシング サ・ガ3』のROMカートリッジ
個数 番号(右下) 刻印(左上) 刻印(右上) バージョン チェックサム
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

インフォメーションブロック

バージョン1.0
 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.. 
バージョン1.1
 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でした。

カートリッジの裏面の番号・刻印

調査に使用した『ロマンシング サ・ガ』のROMカートリッジ
個数 番号(右下) 刻印(左上) 刻印(右上) バージョン チェックサム
1 901121 05 (なし) 1.0 5814
1 920214 (なし) 00A 1.1 E893

インフォメーションブロック

バージョン1.0
 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 
バージョン1.1
 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... 

ファイナルファンタジーVI

ROMカートリッジ7個のうち、3個が24メガビット版で、4個が32メガビット版でした。また、7個すべてがバージョン1.0でした。

カートリッジの裏面の番号・刻印

調査に使用した『ファイナルファンタジーVI』のROMカートリッジ
個数 番号(右下) 刻印(左上) 刻印(右上) バージョン チェックサム 容量
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メガビット

インフォメーションブロック

バージョン1.0
 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. 

ファイナルファンタジーIV

ROMカートリッジ10個のうち、内容に違いのあるものは見つかりませんでした。また、10個すべてがバージョン1.1でした。

カートリッジの裏面の番号・刻印

調査に使用した『ファイナルファンタジーIV』のROMカートリッジ
個数 番号(右下) 刻印(左上) 刻印(右上) バージョン チェックサム
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

インフォメーションブロック

バージョン1.1
 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.. 

ロマンシング サ・ガ2

ROMカートリッジ12個のうち、内容に違いのあるものは見つかりませんでした。また、12個すべてがバージョン1.0でした。

カートリッジの裏面の番号・刻印

調査に使用した『ロマンシング サ・ガ2』のROMカートリッジ
個数 番号(右下) 刻印(左上) 刻印(右上) バージョン チェックサム
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

インフォメーションブロック

バージョン1.0
 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カートリッジの中で該当するものについて調査してみました。

各種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

どうやら、刻印のアルファベットとバージョンとの間には、ある程度の相関があるということが言えそうです。

技術資料

ロマンシング サ・ガ3

「光の壁」で陣形技ポイントが増加する

バージョン1.0
;________________________________________________________________
;
; 陣形技ポイントの消費
;________________________________________________________________
;
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
バージョン1.1
;________________________________________________________________
;
; 陣形技ポイントの消費
;________________________________________________________________
;
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

技・術・陣形技ポイントの二重消費

バージョン1.0
;________________________________________________________________
;
; 技/術/陣形技ポイントの消費
;________________________________________________________________
;
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
バージョン1.1
;________________________________________________________________
;
; 技/術/陣形技ポイントの消費
;________________________________________________________________
;
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
Author: Shingo Endo <s-endo@yk.rim.or.jp>
Last Updated: 2003-09-02
Copyright ©2002, 2003 Shingo Endo