Fatal Fury 2: Difference between revisions

From NeoGeo Development Wiki
Jump to navigation Jump to search
mNo edit summary
(Build date)
 
(2 intermediate revisions by 2 users not shown)
Line 17: Line 17:
|aes_release_jp=y
|aes_release_jp=y
|aes_release_en=y
|aes_release_en=y
|aes_romset=fatfury2
|aes_date=05/03/93
|aes_date=05/03/93
|cd_release=y
|cd_release=y
Line 24: Line 25:
}}
}}


== [[PRO-CT0]] protection code ==


Uses lots of bogus addresses to be confusing.
 
<center>
<gallery widths="320" heights="240">
File:FF2build.png|Fatal Fury 2 build date.
</gallery>
</center>
 
==Protection==
 
Uses {{Chipname|PRO-CT0}} as a protection chip.
 
If one of the multiple protection checks fail, a flag is silently set. The game runs correctly during the first match, but the opponent in the second match will not be able to get hit, and the timer in next matches will be set to 2 seconds.
 
If this happens on a real system, the cartridge might be a [[bootleg]] or simply defective.
 
 
==Protection code==
 
Uses lots of bogus addresses to confuse hackers.


<syntaxhighlight>
<syntaxhighlight>

Latest revision as of 10:55, 22 October 2018

General Info
USA Title Fatal Fury 2
Japanese Title Garou Densetsu 2 - arata-naru tatakai

(餓狼伝説 2)

European Title Fatal Fury 2
NGH 047
Developer SNK
Editor SNK
Meg count 106
TCRF page None

MVS Release

Release date 1992
PROG Board PROG-G2
CHA Board CHA42G-1
Protection Chip none
MAME romset fatfury2

AES Release

Release date 05/03/93
PROG Board Unknown
CHA Board Unknown
Protection Chip Unknown
MAME romset Unknown

CD Release

Release date 09/09/94


Protection

Uses PRO-CT0 as a protection chip.

If one of the multiple protection checks fail, a flag is silently set. The game runs correctly during the first match, but the opponent in the second match will not be able to get hit, and the timer in next matches will be set to 2 seconds.

If this happens on a real system, the cartridge might be a bootleg or simply defective.


Protection code

Uses lots of bogus addresses to confuse hackers.

00296A:
	move	#$5555,$255552		;LOAD
	move.b	$255551,$10AC2E		;Read GAD/GBD: $FF
	move.b	d0,$255551		;Clock
	move.b	$2FFFF1,$10AC2F		;Read GAD/GBD: $00
	move.b	d0,$2FFFF1		;Clock
	move.b	$200001,$10AC30		;Read GAD/GBD: $FF
	move.b	d0,$2FF001		;Clock
	move.b	$2FF001,$10AC31		;Read GAD/GBD: $00
	cmpi.l	#$FF00FF00,$10AC2E	;Compare reads
	beq	+
	move	#$3328,24580(a5)	;Lock up flag ?
+:
	rts
Load C: 00110011001100110011001100110011 ($33333333)

PRO-CT0 serialize:
00110011 3
00110011 2
00110011 1
00110011 0

GAD/GBD to D7~D0 remap (no effect): 

00110011 1
00110011 0
00110011 3
00110011 2
||||||||
00FF00FF ->


012530:
	move	#$1234,$256782		;LOAD C $366A061A (00110110 01101010 00000110 00011010)
	move.b	$236001,18642(a5)	;Read GAD/GBD
	move.b	#$20,$236001		;Clock
	move.b	$236001,18643(a5)	;Read GAD/GBD
	move.b	#$20,$236001		;Clock
	move.b	$236001,18644(a5)	;Read GAD/GBD
	move.b	#$20,$236001		;Clock
	move.b	$236001,18645(a5)	;Read GAD/GBD
	move.b	#$20,$236001		;Clock
	move.l	18642(a5),d0
	subi.l	#$F05A3601,d0		;Compare reads
	rts
Load C: 00110110011010100000011000011010 ($366A061A)

PRO-CT0 serialize:
00110110 3
01101010 2
00000110 1
00011010 0

GAD/GBD to D7~D0 remap: 

00000110 1
00011010 0
00110110 3
01101010 2
||||||||
01365AF0 ->


	move	#$1824,$242812		;LOAD C
	move.b	$236009,18642(a5)	;Read GAD/GBD with H (reverse)
	move.b	#$20,$236009		;Clock
	move.b	$236009,18643(a5)	;Read GAD/GBD with H (reverse)
	move.b	#$20,$236009		;Clock
	move.b	$236009,18644(a5)	;Read GAD/GBD with H (reverse)
	move.b	#$20,$236009		;Clock
	move.b	$236009,18645(a5)	;Read GAD/GBD with H (reverse)
	move.b	#$20,$236009		;Clock
	move.l	18642(a5),d0
	subi.l	#$81422418,d0		;Compare reads
	rts
Load C: 00100100100000010100001000011000 ($24814218)

PRO-CT0 serialize:
00100100 3
10000001 2
01000010 1
00011000 0

GAD/GBD to D7~D0 remap: 

01000010 1
00011000 0
00100100 3
10000001 2
||||||||
18244281 <-


	move	#$1234,$256782		;LOAD C
	move.b	$236005,18642(a5)	;Read GAD/GBD with EVEN (nibble swap)
	move.b	#$20,$236005		;Clock
	move.b	$236005,18643(a5)	;Read GAD/GBD with EVEN (nibble swap)
	move.b	#$20,$236005		;Clock
	move.b	$236005,18644(a5)	;Read GAD/GBD with EVEN (nibble swap)
	move.b	#$20,$236005		;Clock
	move.b	$236005,18645(a5)	;Read GAD/GBD with EVEN (nibble swap)
	move.b	#$20,$236005		;Clock
	move.l	18642(a5),d0
	subi.l	#$0FA56310,d0		;Compare reads
	rts
Load C: 00110110011010100000011000011010 ($366A061A)

PRO-CT0 serialize:
00110110 3
01101010 2
00000110 1
00011010 0

GAD/GBD to D7~D0 remap: 

00000110 1
00011010 0
00110110 3
01101010 2
||||||||
01365AF0 nibble swap: 1063A50F ->


	move	#$1824,$242812		;LOAD C
	move.b	$23600D,18642(a5)	;Read GAD/GBD with H and EVEN
	move.b	#$20,$23600D		;Clock
	move.b	$23600D,18643(a5)	;Read GAD/GBD with H and EVEN
	move.b	#$20,$23600D		;Clock
	move.b	$23600D,18644(a5)	;Read GAD/GBD with H and EVEN
	move.b	#$20,$23600D		;Clock
	move.b	$23600D,18645(a5)	;Read GAD/GBD with H and EVEN
	move.b	#$20,$23600D		;Clock
	move.l	18642(a5),d0
	subi.l	#$18244281,d0		;Compare reads
	rts
Load C: 00100100100000010100001000011000 ($24814218)

PRO-CT0 serialize:
00100100 3
10000001 2
01000010 1
00011000 0

GAD/GBD to D7~D0 remap: 

01000010 1
00011000 0
00100100 3
10000001 2
||||||||
18244281 nibble swap: <- 81422418