TOP
MAP
UP
NAMCO System2 プロテクトについて
System2プロテクトの概要
プログラム的に見たプロテクトは次のような感じとなっている。
$d00000あたりに配置されたセキュリティデバイスの特定アドレス(ゲームごとのセキュリティチップによって異なる?)に対して特定値を書き込む。
同様に$d00000あたりの特定アドレスに対して読み込みをかける。
この値が特定値だった場合に動作を許可。違う値だった場合は永久ループ処理とする。
ソフト的にプロテクトを外す場合、
バイナリ値で00d0 000xでサーチし、怪しい部分の逆アセを参照
書き込みはそのまま残し、読み込んだ後の特定値かどうか?のチェックに対して、常に特定値だった場合の処理に分岐すればOK。(ハード的にはジャンパが必要の模様)
ワルキューレの伝説のように、そもそもソフト的にプロテクトチェックが無いものもある。(ハード的にセキュリティチップがあるかないかだけのプロテクト?)
なおセキュリティチップそのものは、セキュリティ関係以外の個所はハードウェアランダマイザとしてランダム値を返す模様
以下、参考までの各ゲームの改変内容と参照元を示す。
コスモギャング
http://www.paulswan.me/arcade/sys2-co1.htm
Image CO1MPR0 change location 0x00001A69 from 0x67 to 0x4E
Image CO1MPR1 change location 0x00001A69 from 0x04 to 0x75
1a69 x2 =34d2
34c0 move.w #$b929,$d00006.l 33fc b929 00d0 0006
34c8 move.w $d00006.l,d0 3039 00d0 0006
34ce cmpi.w #$14a,d0 0c40 014a
34d2 beq $34d8 6704
34d4 jmp $0.w 4ef8 0000
34d8 rts 4e75
改変コード
34d2 rts 4e75
ドラゴンセイバー
http://arcade-area.lebonforum.com/t2735-convert-namco-system-2-n-importe-quel-jeu-en-dragon-saber-jap
Patchs a appliquer sur do1 mpr0b.mpr0 :
Adresse : Valeurs : avant => apres :
0x000008B9 : 0C => 4E
0x000008D2 : 66 => 4E
0x000010B0 : 0C => 4E
Patchs a appliquer sur do1 mpr1b.mpr1 :
Adresse : Valeurs : avant => apres :
0x000008B9 : 79 => 75
0x000008D2 : 02 => 75
0x000010B0 : 40 => 75
1166 moveq #$13,d0 7013
1168 clr.w $d00008.l 4279 00d0 0008
116e dbra d0,$1168 51c8 fff8
1172 cmpi.w #$c0,$d00004.l 0c79 00c0 00d0 0004
117a bne $1166 66ea
117c rts 4e75
改変コード
1172 rts 4e75
119a move.w $d00004.l,d0 3039 00d0 0004
11a0 cmpi.w #$c0,d0 0c40 00c0
11a4 bne $11a8 6602
11a6 rts 4e75
11a8 jmp $0.w 4ef8 0000
改変コード
11a4 rts 4e75
2152 move.w #$a713,$d00004.l 33fc a713 00d0 0004
215a move.w $d00004.l,d0 3039 00d0 0004
2160 cmpi.w #$c0,d0 0c40 00c0
2164 beq $216c 6706
2166 ori.w #$8,($1fe,a6) 006e 0008 01fe
216c rts 4e75
改変コード
2160 rts 4e75
ローリングサンダー2
http://arcade-area.lebonforum.com/t2734-convert-namco-system-2-n-importe-quel-jeu-en-rolling-thunder-2-jap#53478
Patchs a appliquer sur mpr0j.bin :
Adresse : Valeurs : avant => apres :
0x00002069 : 66 => 4E
0x0000A4E6 : 67 => 4E
0x00002045 : 00 => 4E
Patchs a appliquer sur mpr1j.bin :
Adresse : Valeurs : avant => apres :
0x00002069 : C4 => 71
0x0000A4E6 : 06 => 75
0x00002041 : F9 => FC
0x00002042 : D0 => 00
0x00002043 : 04 => 10
0x00002044 : 10 => 02
0x00002045 : 02 => 71
40c2 move.w #$13ec,$d00008.l 33fc 13ec 00d0 0008
40ca cmpi.w #$13f,$d00008.l 0c79 013f 00d0 0008
40d2 bne $4098 66c4
改変コード
40d2 nop 4e71
4082 move.w $d00004.l,$100002.l 33f9 00d0 0004 0010 0002
改変コード
4082 ?????
149ba move.w #$13ec,$d0000e.l 33fc 13ec 00d0 000e
149c2 move.w $d0000e.l,d0 3039 00d0 000e
149c8 cmpi.w #$13f,d0 0c40 013f
149cc beq $149d4 6706
149ce ori.w #$8,($1fe,a6) 006e 0008 01fe
149d4 rts 4e75
改変コード
149cc nop 4e71
ワルキューレの伝説
1142 move.w #$3be,$d00008.l 33fc 03be 00d0 0008 起動時に一度だけ通る
114a move.w #$1234,$d00004.l 33fc 1234 00d0 0004
1152 move.w $d00004.l,d1 3230 00d0 0004
1158 jsr $21d6.l 4eb9 0000 21d6 この後が、いつもと趣が違う気がする。
115e tst.w $10ff98.l 4a79 0010 ff98 このtstはV flipかどうかを見ている。
1164 beq $11f4
21c6 move.w $d00004.l,d7 3e39 00d0 0004 恐らくここのルーチンは、単純にランダム値を得たいだけ
21cc rts 4e75
21ce move.w $d00004.l,d7 3e39 00d0 0004
21d4 rts 4e75
2c8e move.w #$5678,$d00004.l 33fc 5678 00d0 0004 特にこの後続かない
mameのmachine/namcos2.cppによると、68000 Shared protection/random key generatorでワルキューレのIDはない。
故に、move.w $d00004.l,dxはランダムが返ると予想される。
書き込みも、ゲームによって特定値を書き込むとm_sendvalが成立する模様。
ワルキューレはこのギミックも無い。