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が成立する模様。
ワルキューレはこのギミックも無い。