PRO-CT0: Difference between revisions

From NeoGeo Development Wiki
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
 
(8 intermediate revisions by the same user not shown)
Line 1: Line 1:
PRO-CT0 is an early SDIP64 gate array chip used as:
{{ChipInfo
*A sprite graphics multiplexer on AES carts and MVS boards, sometimes named ALPHA-8921, later replaced by [[NEO-ZMC2]] and then [[NEO-CMC]].
|picture=mvs_pro-ct0.jpg
*Security device in [[Super Sidekicks]] and [[Fatal Fury 2]] AES and MVS cartridges, also named SNK-9201.
|pkg=SDIP64
|manu=nec
|date=1990 ?
|gates=
|used_on={{PCB|MV4}} [[Cartridges]]...
}}


The device probably wasn't intended to be used as as security measure at first.
PRO-CT0 (also known as SNK-9201 and ALPHA-8921) is an early gate array chip which serializes sprite graphics in AES cartridges and [[MVS hardware|MVS]] boards. It was later replaced by {{Chipname|NEO-ZMC2}} and then {{Chipname|NEO-CMC}}.


ALPHA-8921 is the original chip name when [[Alpha Denshi]] designed it.
It was also used as a challenge-response "security" device in [[Super Sidekicks]] and [[Fatal Fury 2]] cartridges.
 
ALPHA-8921 was the original chip name, from when [[Alpha Denshi]] were using it on their [[Alpha68k]] system.


=Pinouts=
=Pinouts=
Line 16: Line 23:
|-
|-
|Info by [[User:Kyuusaku]]
|Info by [[User:Kyuusaku]]
|*D0~D15: 68k data bus
|
*D0~D15: 68k data bus
*A1~A19: 68k address bus
*A1~A19: 68k address bus
*D0out~D7out: output to a LS245 which puts the data on
*D0out~D7out: output to a LS245 which puts the data on
Line 22: Line 30:
|}
|}


=Use as graphics multiplexer=
=Internal logic=


[[File:mvs_pro-ct0.jpg|right|thumb|PRO-CT0 9020KX032 on an MV-4 [[MVS system]], as a graphics serializer]]
[[User:Kyuusaku|Kyuusaku]]'s Verilog definition: [[File:Ct0.zip]]


See [[NEO-ZMC2]].
[[User:furrtek|furrtek]]'s version:


[[File:proct0_ftk.png|640px]]


=Normal use: graphics multiplexer=


See [[NEO-ZMC2]].


=Derivate use: security device=


[[File:proct0prog.jpg|thumb|PRO-CT0 9042KX023 on an AES cart [[PROG board]].]]


[[File:crt_snk-9201.jpg|right|thumb|SNK-9201 chip found in a [[Super Sidekicks]] MVS cartridge. Picture courtesy of [[http://www.mvs-scans.com MVS-Scans]].]]


As a security device, the chip is only found on [[PROG board#PROG-G2|PROG-G2]] boards for [[Fatal Fury 2]] and [[Super Sidekicks]]. It was SNK's first attempt at copy-protecting NeoGeo games.


=Use as security device=
The chip is tied to the [[68k]] address and data bus, it reacts to word writes and replies on odd addresses in the [[68k memory map|$200000-$2FFFFF]] address range.
 
[[File:proct0prog.jpg|thumb|PRO-CT0 9042KX023 on an AES cart [[PROG board]] as a security chip]]
 
Used on [[PROG board#PROG-G2|PROG-G2]] boards. It is found in [[Fatal Fury 2]] and [[Super Sidekicks]] only. It was SNK's first attempt at protecting NeoGeo games.


The chip is tied to the [[68k]] address and data bus, listens to word writes and replies on odd addresses in the [[68k memory map|$200000-$2FFFFF]] address range.
The game program expects the chip to reply with specific data depending on the values written to it. If the values don't match, then the game assumes it's a copy and silently sets a flag which triggers deliberate bugs during gameplay (see game pages for details).
 
The game program expects the chip to reply with specific data depending on the values written to it and will freeze if they are wrong.


==Input==
Address bus mapping:
Address bus mapping:
{|class="wikitable"
{|class="wikitable"
Line 59: Line 69:
|}
|}


[[File:crt_snk-9201.jpg|right|thumb|SNK-9201 chip found in a [[Super Sidekicks]] MVS cartridge. Picture courtesy of [[http://www.mvs-scans.com MVS-Scans]].]]
==Output==


==Fatal Fury 2 code==
Data bus mapping:
 
{|class="wikitable"
<syntaxhighlight>
|D7||D6||D5||D4||D3||D2||D1||D0
00296A:
|-
move #$5555,$255552 ;LOAD C $33333333
|GBD1||GBD0||GBD3||GBD2||GAD1||GAD0||GAD3||GAD2
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
</syntaxhighlight>
 
<syntaxhighlight>
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 (1111 0000 0101 1010 0011 0110 0000 0001)
rts
</syntaxhighlight>
 
<syntaxhighlight>
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
</syntaxhighlight>
 
<syntaxhighlight>
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
 
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
</syntaxhighlight>


==Emulation==
==Emulation==


MAME's HLE emulation (fatfury2_protection): [[http://mamedev.org/source/src/mame/machine/neoprot.c.html]]
MAME simply uses a list of hardcoded values since the games always use the same challenges. See /src/devices/bus/neogeo/prot_fatfury2.cpp
 
Reads:
*To $255550, $2FFFF0, $200000, $2FF000, $236000, $236008: return dataout >> 24;
*To $236004, $23600C: return dataout >> 24 nibble swapped
 
Writes:
*To $211112, with data = $1111: dataout = $FF000000
*To $233332, with data = $3333: dataout = $0000FFFF;
*To $244442, with data = $4444: dataout = $00FF0000;
*To $255552, with data = $5555, read back from $255551, $2FFFF1, $200001, $2FF001: dataout = $FF00FF00
*To $256782, with data = $1234, read back from $36000 or $36004: dataout = $F05A3601
*To $242812, with data = $1824, read back from $36008 or $3600C: dataout = $81422418
*To $255551, $2FFFF1, $2FF001, $236001, $236005, $236009, $23600D, with data = $20: shift dataout left one byte


[[Category:Chips]]
[[Category:Chips]]

Latest revision as of 19:47, 16 February 2019

Package SDIP64
Manufacturer
First use 1990 ?
Used on MV4 Cartridges...

PRO-CT0 (also known as SNK-9201 and ALPHA-8921) is an early gate array chip which serializes sprite graphics in AES cartridges and MVS boards. It was later replaced by NEO-ZMC2 and then NEO-CMC.

It was also used as a challenge-response "security" device in Super Sidekicks and Fatal Fury 2 cartridges.

ALPHA-8921 was the original chip name, from when Alpha Denshi were using it on their Alpha68k system.

Pinouts

Sprite graphics mux Security device
Info by User:Kyuusaku
  • D0~D15: 68k data bus
  • A1~A19: 68k address bus
  • D0out~D7out: output to a LS245 which puts the data on

the 68k bus when /PORTOEL goes low ($200000-$2FFFFF odd byte read).

Internal logic

Kyuusaku's Verilog definition: File:Ct0.zip

furrtek's version:

Normal use: graphics multiplexer

See NEO-ZMC2.

Derivate use: security device

PRO-CT0 9042KX023 on an AES cart PROG board.
File:Crt snk-9201.jpg
SNK-9201 chip found in a Super Sidekicks MVS cartridge. Picture courtesy of [MVS-Scans].

As a security device, the chip is only found on PROG-G2 boards for Fatal Fury 2 and Super Sidekicks. It was SNK's first attempt at copy-protecting NeoGeo games.

The chip is tied to the 68k address and data bus, it reacts to word writes and replies on odd addresses in the $200000-$2FFFFF address range.

The game program expects the chip to reply with specific data depending on the values written to it. If the values don't match, then the game assumes it's a copy and silently sets a flag which triggers deliberate bugs during gameplay (see game pages for details).

Input

Address bus mapping:

A19 A18 A17 A16 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 /PORTWEL A1
C31 C29 C27 C25 C30 C28 C26 C24 C23 C21 C19 C17 C22 C20 C18 C16 H EVEN 12M LOAD

Data bus mapping:

D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
C15 C13 C11 C9 C14 C12 C10 C8 C7 C5 C3 C1 C6 C4 C2 C0

Output

Data bus mapping:

D7 D6 D5 D4 D3 D2 D1 D0
GBD1 GBD0 GBD3 GBD2 GAD1 GAD0 GAD3 GAD2

Emulation

MAME simply uses a list of hardcoded values since the games always use the same challenges. See /src/devices/bus/neogeo/prot_fatfury2.cpp