たくさんの SNES ゲームに実装されている、コピー機を使わせないようにするための FastROM、 PAL/NTSC、 SRAMサイズチェックを迂回する方法について書く。
注:必ずしも全ての文字列を置換する必要はない。
新しいカートリッジは、ほとんどがアクセス時間 120ns の ROM を使用しているが、 ROM コピー機では 200ns のものもある。これらの組み合わせでは バックアップした ROM を正しく動作させることができない。
ROM コードの SlowROM チェックを迂回することで、 SlowROM のコピー機でも FastROM のゲームを動作させることができる。 次の文字列を置換することで SlowROM チェックを迂回するようにできる。
検索する値 | 置換する値 |
A9 01 8D 0D 42 | A9 00 8D 0D 42 |
A9 01 8E 0D 42 | A9 00 8E 0D 42 |
A2 01 8D 0D 42 | A2 00 8D 0D 42 |
A2 01 8E 0D 42 | A2 00 8E 0D 42 |
A9 01 00 8D 0D 42 | A9 00 00 8D 0D 42 |
A9 01 8F 0D 42 00 | A9 00 8F 0D 42 00 |
まだその国で発売されていないゲームを他の国で買ったりすることができないようにするために、 たくさんのゲームでビデオシステムの組み合わせが正しいかを検出するコードが実装されている。 次の文字列を置換することで PAL/NTSC チェックを迂回することができる。
検索する値 | 置換する値 |
3F 21 29 10 C9 10 F0 | 3F 21 29 10 C9 10 80 |
3F 21 89 10 C9 10 F0 | 3F 21 89 10 C9 10 80 |
3F 21 29 10 F0 | 3F 21 29 10 80 |
3F 21 00 89 10 F0 | 3F 21 00 89 10 80 |
3F 21 00 29 10 F0 | 3F 21 00 29 10 80 |
3F 21 89 10 00 F0 | 3F 21 89 10 00 80 |
3F 21 29 10 00 F0 | 3F 21 29 10 00 80 |
AD 3F 21 29 10 00 D0 | AD 3F 21 29 10 00 80 |
AF 3F 21 00 29 10 D0 | AF 3F 21 00 29 10 80 |
AF 3F 21 00 29 10 00 D0 | AF 3F 21 00 29 10 00 EA EA |
AD 3F 21 29 10 D0 | AD 3F 21 29 10 EA EA |
AD 3F 21 29 10 F0 | AD 3F 21 29 10 80 |
AD 3F 21 89 10 D0 | AD 3F 21 89 10 80 |
AD 3F 21 29 10 C9 00 F0 | AD 3F 21 29 10 C9 00 80 |
AF 3F 21 00 29 10 00 F0 | AF 3F 21 00 29 10 00 80 |
AF 3F 21 00 89 10 00 F0 | AF 3F 21 00 89 10 00 80 |
いくつかのゲームは、コピー保護のために SRAM のサイズチェックを入れている。 ほとんどのコピー機は、256kbits の SRAM を積んでいる。 新しいコピー機は、このチェックを回避する。
xx は何が入るか分からない箇所で、 括弧に囲まれた範囲は、どちらか一方の値を取る。
検索する値 | (8F, 9F) xx xx 70 (CF, DF) xx xx 70 D0 |
---|---|
置換する値 |
(8F, 9F) xx xx 70 (CF, DF) xx xx 70 EA EA (SRAM サイズ = 64kbit の時) (8F, 9F) xx xx 70 (CF, DF) xx xx 70 80 (SRAM サイズ <> 64kbit の時) |
検索する値 | (8F, 9F) xx xx (30, 31, 32, 33) (CF, DF) xx xx (30, 31, 32, 33) D0 |
---|---|
置換する値 | (8F, 9F) xx xx (30, 31, 32, 33) (CF, DF) xx xx (30, 31, 32, 33) 80 |
検索する値 | (8F, 9F) xx xx (30, 31, 32, 33) (CF, DF) xx xx (30, 31, 32, 33) F0 |
---|---|
置換する値 | (8F, 9F) xx xx (30, 31, 32, 33) (CF, DF) xx xx (30, 31, 32, 33) EA EA |
検索する値 | (8F, 9F) xx xx (30, 31, 32, 33) AF xx xx (30, 31, 32, 33) C9 xx xx D0 |
---|---|
置換する値 | (8F, 9F) xx xx (30, 31, 32, 33) AF xx xx (30, 31, 32, 33) C9 xx xx 80 |