Fatal Fury 2: Difference between revisions
Jump to navigation
Jump to search
m (fatfury2: same roms for mvs/aes) |
(Build date) |
||
(One intermediate revision by one other user not shown) | |||
Line 25: | Line 25: | ||
}} | }} | ||
Uses lots of bogus addresses to | |||
<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 |
-
Fatal Fury 2 build date.
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