new clones

X-Men Vs. Street Fighter (USA 960910) [kawaks]

also changed the driver from using strcmp to using the inline rom loading key specification.
This commit is contained in:
David Haywood 2015-06-27 19:47:24 +01:00
parent 12c8719c9d
commit 48990c4ae4
5 changed files with 873 additions and 274 deletions

View File

@ -3442,6 +3442,7 @@ xmvsf // 04/10/1996 (c) 1996 (Euro)
xmvsfr1 // 10/09/1996 (c) 1996 (Euro)
xmvsfu // 23/10/1996 (c) 1996 (USA)
xmvsfur1 // 04/10/1996 (c) 1996 (USA)
xmvsfur2 // 10/09/1996 (c) 1996 (USA)
xmvsfj // 04/10/1996 (c) 1996 (Japan)
xmvsfjr1 // 10/09/1996 (c) 1996 (Japan)
xmvsfjr2 // 09/09/1996 (c) 1996 (Japan)

File diff suppressed because it is too large Load Diff

View File

@ -273,6 +273,7 @@ public:
DECLARE_DRIVER_INIT(ganbare);
DECLARE_DRIVER_INIT(cps2_video);
DECLARE_DRIVER_INIT(cps2);
DECLARE_DRIVER_INIT(cps2nc);
DECLARE_DRIVER_INIT(cps2crpt);
DECLARE_DRIVER_INIT(ssf2tb);
DECLARE_DRIVER_INIT(pzloop2);

View File

@ -632,7 +632,7 @@ static void optimise_sboxes(struct optimised_sbox* out, const struct sbox* in)
static void cps2_decrypt(running_machine &machine, UINT16 *rom, UINT16 *dec, int length, const UINT32 *master_key, UINT32 upper_limit)
static void cps2_decrypt(running_machine &machine, UINT16 *rom, UINT16 *dec, int length, const UINT32 *master_key, UINT32 lower_limit, UINT32 upper_limit)
{
int i;
UINT32 key1[4];
@ -736,284 +736,29 @@ struct game_keys
};
/*
(1) On a dead board, the only encrypted range is actually FF0000-FFFFFF.
It doesn't start from 0, and it's the upper half of a 128kB bank.
*/
static const struct game_keys keys_table[] =
{
// name key upper watchdog
{ "dead", { 0xffffffff,0xffffffff }, /*(1)*/ }, // ffff ffff ffff
{ "ssf2", { 0x23456789,0xabcdef01 }, 0x400000 }, // 0838 0007 2000 btst #7,$2000
{ "ssf2r1", { 0x23456789,0xabcdef01 }, 0x400000 }, // 0838 0007 2000 btst #7,$2000
{ "ssf2u", { 0x12345678,0x9abcdef0 }, 0x400000 }, // 0838 0007 2000 btst #7,$2000
{ "ssf2a", { 0x3456789a,0xbcdef012 }, 0x400000 }, // 0838 0007 2000 btst #7,$2000
{ "ssf2ar1", { 0x3456789a,0xbcdef012 }, 0x400000 }, // 0838 0007 2000 btst #7,$2000
{ "ssf2j", { 0x01234567,0x89abcdef }, 0x400000 }, // 0838 0007 2000 btst #7,$2000
{ "ssf2jr1", { 0x01234567,0x89abcdef }, 0x400000 }, // 0838 0007 2000 btst #7,$2000
{ "ssf2jr2", { 0x01234567,0x89abcdef }, 0x400000 }, // 0838 0007 2000 btst #7,$2000
{ "ssf2h", { 0x56789abc,0xdef01234 }, 0x400000 }, // 0838 0007 2000 btst #7,$2000
{ "ssf2tb", { 0x89abcdef,0x01234567 }, 0x400000 }, // 0838 0007 2000 btst #7,$2000
{ "ssf2tbr1", { 0x89abcdef,0x01234567 }, 0x400000 }, // 0838 0007 2000 btst #7,$2000
{ "ssf2tbj", { 0x6789abcd,0xef012345 }, 0x400000 }, // 0838 0007 2000 btst #7,$2000
{ "ssf2tbh", { 0xbcdef012,0x3456789a }, 0x400000 }, // 0838 0007 2000 btst #7,$2000
{ "ddtod", { 0x4767fe08,0x14ca35d9 }, 0x180000 }, // 0C78 1019 4000 cmpi.w #$1019,$4000
{ "ddtodr1", { 0x4767fe08,0x14ca35d9 }, 0x180000 }, // 0C78 1019 4000 cmpi.w #$1019,$4000
{ "ddtodu", { 0xeca19c3d,0x24736bf0 }, 0x180000 }, // 0C78 1019 4000 cmpi.w #$1019,$4000
{ "ddtodur1", { 0xeca19c3d,0x24736bf0 }, 0x180000 }, // 0C78 1019 4000 cmpi.w #$1019,$4000
{ "ddtodj", { 0x4510e79c,0xf36b8a2d }, 0x180000 }, // 0C78 1019 4000 cmpi.w #$1019,$4000
{ "ddtodjr1", { 0x4510e79c,0xf36b8a2d }, 0x180000 }, // 0C78 1019 4000 cmpi.w #$1019,$4000
{ "ddtodjr2", { 0x4510e79c,0xf36b8a2d }, 0x180000 }, // 0C78 1019 4000 cmpi.w #$1019,$4000
{ "ddtoda", { 0xdecac105,0x19710411 }, 0x180000 }, // 0C78 1019 4000 cmpi.w #$1019,$4000
{ "ddtodar1", { 0xdecac105,0x19710411 }, 0x180000 }, // 0C78 1019 4000 cmpi.w #$1019,$4000
{ "ddtodh", { 0x19691019,0xe825dde0 }, 0x180000 }, // 0C78 1019 4000 cmpi.w #$1019,$4000
{ "ddtodhr1", { 0x19691019,0xe825dde0 }, 0x180000 }, // 0C78 1019 4000 cmpi.w #$1019,$4000
{ "ddtodhr2", { 0x19691019,0xe825dde0 }, 0x180000 }, // 0C78 1019 4000 cmpi.w #$1019,$4000
{ "ecofghtr", { 0x931031dc,0xba987654 }, 0x200000 }, // 0838 0003 7345 btst #3,$7345
{ "ecofghtru",{ 0x931031ed,0xcba98765 }, 0x200000 }, // 0838 0003 7345 btst #3,$7345
{ "ecofghtru1",{ 0x931031ed,0xcba98765 }, 0x200000 }, // 0838 0003 7345 btst #3,$7345
{ "uecology", { 0x931031fe,0xdcba9876 }, 0x200000 }, // 0838 0003 7345 btst #3,$7345
{ "ecofghtra",{ 0x931031ba,0x98765432 }, 0x200000 }, // 0838 0003 7345 btst #3,$7345
{ "ecofghtrh",{ 0x931031cb,0xa9876543 }, 0x200000 }, // 0838 0003 7345 btst #3,$7345
{ "ssf2t", { 0x944e8302,0x56d3143c }, 0x400000 }, // 0838 0007 2000 btst #7,$2000
{ "ssf2ta", { 0x94c4d002,0x664a1471 }, 0x400000 }, // 0838 0007 2000 btst #7,$2000
{ "ssf2tu", { 0x94fa8902,0x4c77143f }, 0x400000 }, // 0838 0007 2000 btst #7,$2000
{ "ssf2tur1", { 0x94fa8902,0x4c77143f }, 0x400000 }, // 0838 0007 2000 btst #7,$2000
{ "ssf2xj", { 0x942a5702,0x05ac140e }, 0x400000 }, // 0838 0007 2000 btst #7,$2000
{ "ssf2xjr", { 0x943c2b02,0x7acd1422 }, 0x400000 }, // 0838 0007 2000 btst #7,$2000 // curious, not the usual Japan key on the rent version
{ "xmcota", { 0x3bc6eda4,0x97f80251 }, 0x100000 }, // 0C80 1972 0301 cmpi.l #$19720301,D0
{ "xmcotar1", { 0x3bc6eda4,0x97f80251 }, 0x100000 }, // 0C80 1972 0301 cmpi.l #$19720301,D0
{ "xmcotau", { 0x32a57ecd,0x98016f4b }, 0x100000 }, // 0C80 1972 0301 cmpi.l #$19720301,D0
{ "xmcotah", { 0xf5e8dc34,0xa096b217 }, 0x100000 }, // 0C80 1972 0301 cmpi.l #$19720301,D0
{ "xmcotahr1",{ 0xf5e8dc34,0xa096b217 }, 0x100000 }, // 0C80 1972 0301 cmpi.l #$19720301,D0
{ "xmcotaj", { 0x46027315,0xaf8bcd9e }, 0x100000 }, // 0C80 1972 0301 cmpi.l #$19720301,D0
{ "xmcotaj1", { 0x46027315,0xaf8bcd9e }, 0x100000 }, // 0C80 1972 0301 cmpi.l #$19720301,D0
{ "xmcotaj2", { 0x46027315,0xaf8bcd9e }, 0x100000 }, // 0C80 1972 0301 cmpi.l #$19720301,D0
{ "xmcotaj3", { 0x46027315,0xaf8bcd9e }, 0x100000 }, // 0C80 1972 0301 cmpi.l #$19720301,D0
{ "xmcotajr", { 0x46027315,0xaf8bcd9e }, 0x100000 }, // 0C80 1972 0301 cmpi.l #$19720301,D0
{ "xmcotaa", { 0x0795a4e2,0xdb3f861c }, 0x100000 }, // 0C80 1972 0301 cmpi.l #$19720301,D0
{ "xmcotaar1",{ 0x0795a4e2,0xdb3f861c }, 0x100000 }, // 0C80 1972 0301 cmpi.l #$19720301,D0
{ "armwar", { 0x9e9d4c0b,0x8a39081f }, 0x100000 }, // 3039 0080 4020 move.w $00804020,D0
{ "armwarr1", { 0x9e9d4c0b,0x8a39081f }, 0x100000 }, // 3039 0080 4020 move.w $00804020,D0
{ "armwaru", { 0xd4c0b8a3,0x9081f9e9 }, 0x100000 }, // 3039 0080 4020 move.w $00804020,D0
{ "armwaru1", { 0xd4c0b8a3,0x9081f9e9 }, 0x100000 }, // 3039 0080 4020 move.w $00804020,D0
{ "pgear", { 0x9d4c0b8a,0x39081f9e }, 0x100000 }, // 3039 0080 4020 move.w $00804020,D0
{ "pgearr1", { 0x9d4c0b8a,0x39081f9e }, 0x100000 }, // 3039 0080 4020 move.w $00804020,D0
{ "armwara", { 0x1f9e9d4c,0x0b8a3908 }, 0x100000 }, // 3039 0080 4020 move.w $00804020,D0
{ "armwarar1",{ 0x1f9e9d4c,0x0b8a3908 }, 0x100000 }, // 3039 0080 4020 move.w $00804020,D0
{ "avsp", { 0x15208f79,0x4ade6cb3 }, 0x100000 }, // 0C80 1234 5678 cmpi.l #$12345678,D0
{ "avspu", { 0xb4f61089,0xccf75a23 }, 0x100000 }, // 0C80 1234 5678 cmpi.l #$12345678,D0
{ "avspj", { 0xe9dcb8fa,0x51372064 }, 0x100000 }, // 0C80 1234 5678 cmpi.l #$12345678,D0
{ "avspa", { 0xc168f3bd,0x2e4a5970 }, 0x100000 }, // 0C80 1234 5678 cmpi.l #$12345678,D0
{ "avsph", { 0x712b690a,0x43cd8e5f }, 0x100000 }, // 0C80 1234 5678 cmpi.l #$12345678,D0
{ "dstlk", { 0x13d8a7a8,0x0008b090 }, 0x100000 }, // 0838 0000 6160 btst #0,$6160
{ "dstlku", { 0x1e80ebf0,0x10227119 }, 0x100000 }, // 0838 0000 6160 btst #0,$6160
{ "dstlkur1", { 0x1e80ebf0,0x10227119 }, 0x100000 }, // 0838 0000 6160 btst #0,$6160
{ "dstlka", { 0x205d8398,0x06221971 }, 0x100000 }, // 0838 0000 6160 btst #0,$6160
{ "dstlkh", { 0x22463efe,0x011169aa }, 0x100000 }, // 0838 0000 6160 btst #0,$6160
{ "vampj", { 0xefcb0804,0x026819ae }, 0x100000 }, // 0838 0000 6160 btst #0,$6160
{ "vampja", { 0xefcb0804,0x026819ae }, 0x100000 }, // 0838 0000 6160 btst #0,$6160
{ "vampjr1", { 0xefcb0804,0x026819ae }, 0x100000 }, // 0838 0000 6160 btst #0,$6160
{ "ringdest", { 0x19940727,0x17444903 }, 0x180000 }, // 3039 0080 4020 move.w $00804020,D0
{ "smbomb", { 0x19940209,0x17031403 }, 0x180000 }, // 3039 0080 4020 move.w $00804020,D0
{ "smbombr1", { 0x19940209,0x17031403 }, 0x180000 }, // 3039 0080 4020 move.w $00804020,D0
{ "ringdesta",{ 0x19940727,0x17452103 }, 0x180000 }, // 3039 0080 4020 move.w $00804020,D0
{ "cybots", { 0x45425943,0x05090901 }, 0x100000 }, // 0C38 00FF 0C38 cmpi.b #$FF,$0C38
{ "cybotsu", { 0x43050909,0x01554259 }, 0x100000 }, // 0C38 00FF 0C38 cmpi.b #$FF,$0C38
{ "cybotsj", { 0x05090901,0x4a425943 }, 0x100000 }, // 0C38 00FF 0C38 cmpi.b #$FF,$0C38
{ "msh", { 0x1a11ee26,0xe7955d17 }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1
{ "mshu", { 0x8705a24e,0x4a17319b }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1
{ "mshj", { 0x05e88219,0x31ad2142 }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1
{ "mshjr1", { 0x05e88219,0x31ad2142 }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1
{ "msha", { 0x457aeb01,0x3897c53d }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1
{ "mshh", { 0xfc4c5a50,0xb59cc190 }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1
{ "mshb", { 0x7a152416,0xad27f8e6 }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1
{ "nwarr", { 0x1019d145,0x03f05a05 }, 0x180000 }, // 0838 0000 6160 btst #0,$6160
{ "nwarru", { 0x104a7d0c,0x3f1b7a1e }, 0x180000 }, // 0838 0000 6160 btst #0,$6160
{ "nwarrh", { 0xc4961b01,0x2a946020 }, 0x180000 }, // 0838 0000 6160 btst #0,$6160
{ "nwarrb", { 0x17c67109,0xb7362a20 }, 0x180000 }, // 0838 0000 6160 btst #0,$6160
{ "nwarra", { 0x4e940d0c,0x39b861a4 }, 0x180000 }, // 0838 0000 6160 btst #0,$6160
{ "vhuntj", { 0x1135b2c3,0xa4e9d7f2 }, 0x180000 }, // 0838 0000 6160 btst #0,$6160
{ "vhuntjr1s",{ 0x1135b2c3,0xa4e9d7f2 }, 0x180000 }, // 0838 0000 6160 btst #0,$6160
{ "vhuntjr1", { 0x1135b2c3,0xa4e9d7f2 }, 0x180000 }, // 0838 0000 6160 btst #0,$6160
{ "vhuntjr2", { 0x1135b2c3,0xa4e9d7f2 }, 0x180000 }, // 0838 0000 6160 btst #0,$6160
{ "sfa", { 0x0f895d6e,0xc4273a1b }, 0x080000 }, // 0C80 0564 2194 cmpi.l #$05642194,D0
{ "sfar1", { 0x0f895d6e,0xc4273a1b }, 0x080000 }, // 0C80 0564 2194 cmpi.l #$05642194,D0
{ "sfar2", { 0x0f895d6e,0xc4273a1b }, 0x080000 }, // 0C80 0564 2194 cmpi.l #$05642194,D0
{ "sfar3", { 0x0f895d6e,0xc4273a1b }, 0x080000 }, // 0C80 0564 2194 cmpi.l #$05642194,D0
{ "sfau", { 0x25bead36,0x97cf4018 }, 0x080000 }, // 0C80 0564 2194 cmpi.l #$05642194,D0
{ "sfza", { 0xe43dc508,0x621b9a7f }, 0x080000 }, // 0C80 0564 2194 cmpi.l #$05642194,D0
{ "sfzar1", { 0xe43dc508,0x621b9a7f }, 0x080000 }, // 0C80 0564 2194 cmpi.l #$05642194,D0
{ "sfzj", { 0x8db3167a,0xc29e0f45 }, 0x080000 }, // 0C80 0564 2194 cmpi.l #$05642194,D0
{ "sfzjr1", { 0x8db3167a,0xc29e0f45 }, 0x080000 }, // 0C80 0564 2194 cmpi.l #$05642194,D0
{ "sfzjr2", { 0x8db3167a,0xc29e0f45 }, 0x080000 }, // 0C80 0564 2194 cmpi.l #$05642194,D0
{ "sfzh", { 0x876b0e39,0x5ca24fd1 }, 0x080000 }, // 0C80 0564 2194 cmpi.l #$05642194,D0
{ "sfzhr1", { 0x876b0e39,0x5ca24fd1 }, 0x080000 }, // 0C80 0564 2194 cmpi.l #$05642194,D0
{ "sfzb", { 0xef415bd3,0x7a92c680 }, 0x080000 }, // 0C80 0564 2194 cmpi.l #$05642194,D0
{ "sfzbr1", { 0xef415bd3,0x7a92c680 }, 0x080000 }, // 0C80 0564 2194 cmpi.l #$05642194,D0
{ "mmancp2u", { 0x054893fa,0x94642525 }, 0x100000 }, // 0C80 0564 2194 cmpi.l #$05642194,D0
{ "mmancp2ur1",{0x054893fa,0x94642525 }, 0x100000 }, // 0C80 0564 2194 cmpi.l #$05642194,D0
{ "rmancp2j", { 0x07215501,0x37fa32d0 }, 0x100000 }, // 0C80 0564 2194 cmpi.l #$05642194,D0
{ "19xx", { 0x0e07181f,0x5fd0f080 }, 0x200000 }, // 0C81 0095 1101 cmpi.l #$00951101,D1
{ "19xxa", { 0xcce74cf5,0xb7da3711 }, 0x200000 }, // 0C81 0095 1101 cmpi.l #$00951101,D1
{ "19xxar1", { 0xcce74cf5,0xb7da3711 }, 0x200000 }, // 0C81 0095 1101 cmpi.l #$00951101,D1
{ "19xxj", { 0x00115df8,0x000ff87e }, 0x200000 }, // 0C81 0095 1101 cmpi.l #$00951101,D1
{ "19xxjr1", { 0x00115df8,0x000ff87e }, 0x200000 }, // 0C81 0095 1101 cmpi.l #$00951101,D1
{ "19xxjr2", { 0x00115df8,0x000ff87e }, 0x200000 }, // 0C81 0095 1101 cmpi.l #$00951101,D1
{ "19xxh", { 0x5d49bafa,0xf7216c9f }, 0x200000 }, // 0C81 0095 1101 cmpi.l #$00951101,D1
{ "19xxb", { 0xe5f9476a,0x2dfb623f }, 0x200000 }, // 0C81 0095 1101 cmpi.l #$00951101,D1
{ "ddsom", { 0x87889abc,0xd81f5f63 }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1
{ "ddsomr1", { 0x87889abc,0xd81f5f63 }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1
{ "ddsomr2", { 0x87889abc,0xd81f5f63 }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1
{ "ddsomr3", { 0x87889abc,0xd81f5f63 }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1
{ "ddsomu", { 0x489f0526,0x1bcd3e7a }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1
{ "ddsomur1", { 0x489f0526,0x1bcd3e7a }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1
{ "ddsomj", { 0xae92fa94,0x315a9045 }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1
{ "ddsomjr1", { 0xae92fa94,0x315a9045 }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1
{ "ddsoma", { 0x8719abcd,0xef028345 }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1
{ "ddsomar1", { 0x8719abcd,0xef028345 }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1
{ "ddsomh", { 0x42134245,0x120de607 }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1
{ "ddsomb", { 0x7149a782,0xf3a5bfce }, 0x100000 }, // 0C81 1966 0419 cmpi.l #$19660419,D1
{ "megaman2", { 0x50501cac,0xed346550 }, 0x100000 }, // 0C80 0164 7101 cmpi.l #$01647101,D0
{ "megaman2a",{ 0x3f148a2b,0xd6790a15 }, 0x100000 }, // 0C80 0164 7101 cmpi.l #$01647101,D0
{ "rockman2j",{ 0x319eca73,0x10551270 }, 0x100000 }, // 0C80 0164 7101 cmpi.l #$01647101,D0
{ "megaman2h",{ 0x765573ca,0x250210d0 }, 0x100000 }, // 0C80 0164 7101 cmpi.l #$01647101,D0
{ "qndream", { 0x5804ea73,0xf66b0798 }, 0x080000 }, // 0C81 1973 0827 cmpi.l #$19730827,D1
{ "sfa2", { 0xfc4acf9c,0x3bfbe1f9 }, 0x100000 }, // 0C80 3039 9783 cmpi.l #$30399783,D0
{ "sfa2u", { 0x1bbf3d96,0x8af4614a }, 0x100000 }, // 0C80 3039 9783 cmpi.l #$30399783,D0
{ "sfa2ur1", { 0x1bbf3d96,0x8af4614a }, 0x100000 }, // 0C80 3039 9783 cmpi.l #$30399783,D0
{ "sfz2j", { 0x83f47e99,0xda772111 }, 0x100000 }, // 0C80 3039 9783 cmpi.l #$30399783,D0
{ "sfz2jr1", { 0x83f47e99,0xda772111 }, 0x100000 }, // 0C80 3039 9783 cmpi.l #$30399783,D0
{ "sfz2a", { 0xafc2e8f4,0x43789487 }, 0x100000 }, // 0C80 3039 9783 cmpi.l #$30399783,D0
{ "sfz2b", { 0xac134599,0x61f8bb2e }, 0x100000 }, // 0C80 3039 9783 cmpi.l #$30399783,D0
{ "sfz2br1", { 0xac134599,0x61f8bb2e }, 0x100000 }, // 0C80 3039 9783 cmpi.l #$30399783,D0
{ "sfz2h", { 0xf98a2d42,0x597b089f }, 0x100000 }, // 0C80 3039 9783 cmpi.l #$30399783,D0
{ "sfz2n", { 0xe32bf89c,0xa57b46dc }, 0x100000 }, // 0C80 3039 9783 cmpi.l #$30399783,D0
{ "sfz2al", { 0xf172c0d0,0x040621a6 }, 0x100000 }, // 0C80 8E73 9110 cmpi.l #$8E739110,D0
{ "sfz2alj", { 0x99450c88,0xa00a2c4d }, 0x100000 }, // 0C80 8E73 9110 cmpi.l #$8E739110,D0
{ "sfz2alh", { 0x95f15b7c,0x200c08c6 }, 0x100000 }, // 0C80 8E73 9110 cmpi.l #$8E739110,D0
{ "sfz2alb", { 0x73cd4a28,0xff83af1c }, 0x100000 }, // 0C80 8E73 9110 cmpi.l #$8E739110,D0
{ "spf2t", { 0xdde26f09,0x55821ee7 }, 0x040000 }, // 0C80 3039 9819 cmpi.l #$30399819,D0
{ "spf2tu", { 0x706a8750,0x7d0fc185 }, 0x040000 }, // 0C80 3039 9819 cmpi.l #$30399819,D0
{ "spf2xj", { 0xb12c835a,0xe90976ff }, 0x040000 }, // 0C80 3039 9819 cmpi.l #$30399819,D0
{ "spf2ta", { 0x9c48e1ab,0xd60f34fb }, 0x040000 }, // 0C80 3039 9819 cmpi.l #$30399819,D0
{ "spf2th", { 0x51ed8cab,0x228f85b6 }, 0x040000 }, // 0C80 3039 9819 cmpi.l #$30399819,D0
{ "xmvsf", { 0xbdcf8519,0x3fb2acea }, 0x100000 }, // 0C81 1972 0327 cmpi.l #$19720327,D1
{ "xmvsfr1", { 0xbdcf8519,0x3fb2acea }, 0x100000 }, // 0C81 1972 0327 cmpi.l #$19720327,D1
{ "xmvsfu", { 0x4fcb03d2,0xf8653bc1 }, 0x100000 }, // 0C81 1972 0327 cmpi.l #$19720327,D1
{ "xmvsfur1", { 0x4fcb03d2,0xf8653bc1 }, 0x100000 }, // 0C81 1972 0327 cmpi.l #$19720327,D1
{ "xmvsfj", { 0x38df93bc,0x210373ac }, 0x100000 }, // 0C81 1972 0327 cmpi.l #$19720327,D1
{ "xmvsfjr1", { 0x38df93bc,0x210373ac }, 0x100000 }, // 0C81 1972 0327 cmpi.l #$19720327,D1
{ "xmvsfjr2", { 0x38df93bc,0x210373ac }, 0x100000 }, // 0C81 1972 0327 cmpi.l #$19720327,D1
{ "xmvsfa", { 0x7438fc3e,0x19abed90 }, 0x100000 }, // 0C81 1972 0327 cmpi.l #$19720327,D1
{ "xmvsfar1", { 0x7438fc3e,0x19abed90 }, 0x100000 }, // 0C81 1972 0327 cmpi.l #$19720327,D1
{ "xmvsfar2", { 0x7438fc3e,0x19abed90 }, 0x100000 }, // 0C81 1972 0327 cmpi.l #$19720327,D1
{ "xmvsfar3", { 0x7438fc3e,0x19abed90 }, 0x100000 }, // 0C81 1972 0327 cmpi.l #$19720327,D1
{ "xmvsfh", { 0x835fb2d0,0x42fa9137 }, 0x100000 }, // 0C81 1972 0327 cmpi.l #$19720327,D1
{ "xmvsfb", { 0x8ead9e4a,0xb02184f0 }, 0x100000 }, // 0C81 1972 0327 cmpi.l #$19720327,D1
{ "batcir", { 0xd195e597,0x3cbce2b5 }, 0x200000 }, // 0C81 0097 0131 cmpi.l #$00970131,D1
{ "batcira", { 0x1e5d80cb,0x98882ec7 }, 0x200000 }, // 0C81 0097 0131 cmpi.l #$00970131,D1
{ "batcirj", { 0x00ff4dd8,0x000008e8 }, 0x200000 }, // 0C81 0097 0131 cmpi.l #$00970131,D1
{ "csclub", { 0x662e9fa0,0x4210e7c1 }, 0x200000 }, // 0C81 0097 0310 cmpi.l #$00970310,D1
{ "csclub1", { 0x662e9fa0,0x4210e7c1 }, 0x200000 }, // 0C81 0097 0310 cmpi.l #$00970310,D1
{ "cscluba", { 0x1366de2a,0x9ab42937 }, 0x200000 }, // 0C81 0097 0310 cmpi.l #$00970310,D1
{ "csclubj", { 0x4a2d0be5,0x56c013c0 }, 0x200000 }, // 0C81 0097 0310 cmpi.l #$00970310,D1
{ "csclubjy", { 0x4a2d0be5,0x56c013c0 }, 0x200000 }, // 0C81 0097 0310 cmpi.l #$00970310,D1
{ "csclubh", { 0xf014a8a7,0x2e7794d0 }, 0x200000 }, // 0C81 0097 0310 cmpi.l #$00970310,D1
{ "mshvsf", { 0x1384ae60,0x9cd725bf }, 0x100000 }, // 0C81 1972 1027 cmpi.l #$19721027,D1
{ "mshvsfu", { 0xa36d4971,0xcef51b28 }, 0x100000 }, // 0C81 1972 1027 cmpi.l #$19721027,D1
{ "mshvsfu1", { 0xa36d4971,0xcef51b28 }, 0x100000 }, // 0C81 1972 1027 cmpi.l #$19721027,D1
{ "mshvsfj", { 0x5dc391f8,0xa627e0b4 }, 0x100000 }, // 0C81 1972 1027 cmpi.l #$19721027,D1
{ "mshvsfj1", { 0x5dc391f8,0xa627e0b4 }, 0x100000 }, // 0C81 1972 1027 cmpi.l #$19721027,D1
{ "mshvsfj2", { 0x5dc391f8,0xa627e0b4 }, 0x100000 }, // 0C81 1972 1027 cmpi.l #$19721027,D1
{ "mshvsfh", { 0x7e916fc4,0x03ab852d }, 0x100000 }, // 0C81 1972 1027 cmpi.l #$19721027,D1
{ "mshvsfa", { 0x52e3fa61,0x0c497bd8 }, 0x100000 }, // 0C81 1972 1027 cmpi.l #$19721027,D1
{ "mshvsfa1", { 0x52e3fa61,0x0c497bd8 }, 0x100000 }, // 0C81 1972 1027 cmpi.l #$19721027,D1
{ "mshvsfb", { 0xda68c749,0x5bf3e201 }, 0x100000 }, // 0C81 1972 1027 cmpi.l #$19721027,D1
{ "mshvsfb1", { 0xda68c749,0x5bf3e201 }, 0x100000 }, // 0C81 1972 1027 cmpi.l #$19721027,D1
{ "sgemf", { 0x84234976,0x5e0fbb7e }, 0x080000 }, // 0C80 1F74 0D12 cmpi.l #$1F740D12,D0
{ "pfghtj", { 0x97d2ebc0,0x308f94d7 }, 0x080000 }, // 0C80 1F74 0D12 cmpi.l #$1F740D12,D0
{ "sgemfa", { 0x090b412a,0xc47ee993 }, 0x080000 }, // 0C80 1F74 0D12 cmpi.l #$1F740D12,D0
{ "sgemfh", { 0x8163a71b,0x7c8fd224 }, 0x080000 }, // 0C80 1F74 0D12 cmpi.l #$1F740D12,D0
{ "vhunt2", { 0x36c1eba3,0x26b10f18 }, 0x100000 }, // 0C80 0692 0760 cmpi.l #$06920760,D0
{ "vhunt2r1", { 0x36c1eba3,0x26b10f18 }, 0x100000 }, // 0C80 0692 0760 cmpi.l #$06920760,D0
{ "vsav", { 0xe0cd5881,0x71babb70 }, 0x100000 }, // 0C80 726A 4BAF cmpi.l #$726A4BAF,D0
{ "vsavu", { 0xa62ea0ee,0x573e03e6 }, 0x100000 }, // 0C80 726A 4BAF cmpi.l #$726A4BAF,D0
{ "vsavj", { 0xfa8f4e33,0xa4b881b9 }, 0x100000 }, // 0C80 726A 4BAF cmpi.l #$726A4BAF,D0
{ "vsava", { 0x47ee9930,0x90b412ac }, 0x100000 }, // 0C80 726A 4BAF cmpi.l #$726A4BAF,D0
{ "vsavh", { 0xb2d37c8d,0xd3b7aadd }, 0x100000 }, // 0C80 726A 4BAF cmpi.l #$726A4BAF,D0
{ "vsav2", { 0xd681e4f4,0x60371edf }, 0x100000 }, // 0C80 0692 0760 cmpi.l #$06920760,D0
{ "mvsc", { 0x48025ade,0x1c697b27 }, 0x100000 }, // 0C81 1972 0121 cmpi.l #$19720121,D1
{ "mvscr1", { 0x48025ade,0x1c697b27 }, 0x100000 }, // 0C81 1972 0121 cmpi.l #$19720121,D1
{ "mvscu", { 0x692dc41b,0x7ef1c805 }, 0x100000 }, // 0C81 1972 0121 cmpi.l #$19720121,D1
{ "mvscur1", { 0x692dc41b,0x7ef1c805 }, 0x100000 }, // 0C81 1972 0121 cmpi.l #$19720121,D1
{ "mvscj", { 0xafc16138,0x97123eb0 }, 0x100000 }, // 0C81 1972 0121 cmpi.l #$19720121,D1
{ "mvscjr1", { 0xafc16138,0x97123eb0 }, 0x100000 }, // 0C81 1972 0121 cmpi.l #$19720121,D1
{ "mvscjsing",{ 0xafc16138,0x97123eb0 }, 0x100000 }, // 0C81 1972 0121 cmpi.l #$19720121,D1
{ "mvsca", { 0xf248aec6,0x7905cd17 }, 0x100000 }, // 0C81 1972 0121 cmpi.l #$19720121,D1
{ "mvscar1", { 0xf248aec6,0x7905cd17 }, 0x100000 }, // 0C81 1972 0121 cmpi.l #$19720121,D1
{ "mvsch", { 0x9d5c7a23,0xe56b18ef }, 0x100000 }, // 0C81 1972 0121 cmpi.l #$19720121,D1
{ "mvscb", { 0x0874d6eb,0x51c2b798 }, 0x100000 }, // 0C81 1972 0121 cmpi.l #$19720121,D1
{ "sfa3", { 0x6abfc8e0,0x2780ddc1 }, 0x100000 }, // 0C80 1C62 F5A8 cmpi.l #$1C62F5A8,D0
{ "sfa3u", { 0xe7bbf0e5,0x67943248 }, 0x100000 }, // 0C80 1C62 F5A8 cmpi.l #$1C62F5A8,D0
{ "sfa3ur1", { 0xe7bbf0e5,0x67943248 }, 0x100000 }, // 0C80 1C62 F5A8 cmpi.l #$1C62F5A8,D0
{ "sfa3h", { 0x8422df8c,0x7b17a361 }, 0x100000 }, // 0C80 1C62 F5A8 cmpi.l #$1C62F5A8,D0
{ "sfa3hr1", { 0x8422df8c,0x7b17a361 }, 0x100000 }, // 0C80 1C62 F5A8 cmpi.l #$1C62F5A8,D0
{ "sfa3b", { 0xd421c0b2,0x8116d296 }, 0x100000 }, // 0C80 1C62 F5A8 cmpi.l #$1C62F5A8,D0
{ "sfz3j", { 0x7d49f803,0x0cbe2d79 }, 0x100000 }, // 0C80 1C62 F5A8 cmpi.l #$1C62F5A8,D0
{ "sfz3jr1", { 0x7d49f803,0x0cbe2d79 }, 0x100000 }, // 0C80 1C62 F5A8 cmpi.l #$1C62F5A8,D0
{ "sfz3jr2", { 0x7d49f803,0x0cbe2d79 }, 0x100000 }, // 0C80 1C62 F5A8 cmpi.l #$1C62F5A8,D0
{ "sfz3a", { 0x990b9301,0xa4e42c7e }, 0x100000 }, // 0C80 1C62 F5A8 cmpi.l #$1C62F5A8,D0
{ "sfz3ar1", { 0x990b9301,0xa4e42c7e }, 0x100000 }, // 0C80 1C62 F5A8 cmpi.l #$1C62F5A8,D0
{ "jyangoku", { 0x6ca42ae6,0x92f63f59 }, /*?*/ }, // 0C80 3652 1573 cmpi.l #$36521573,D0
{ "hsf2", { 0x5a369ddd,0xfea3189c }, 0x100000 }, // 0838 0007 2000 btst #7,$2000
{ "hsf2a", { 0xb8ed3630,0xaae30a3d }, 0x100000 }, // 0838 0007 2000 btst #7,$2000
{ "hsf2j", { 0x65d82fe0,0xdbb83e47 }, 0x100000 }, // 0838 0007 2000 btst #7,$2000
{ "gigawing", { 0xe52de290,0x1b60d780 }, 0x100000 }, // 0C81 1972 1027 cmpi.l #$19721027,D1
{ "gigawingj",{ 0x1126196a,0xbef50895 }, 0x100000 }, // 0C81 1972 1027 cmpi.l #$19721027,D1
{ "gigawinga",{ 0x3506a85a,0x66b1b768 }, 0x100000 }, // 0C81 1972 1027 cmpi.l #$19721027,D1
{ "gigawingh",{ 0xcea74211,0x400da385 }, 0x100000 }, // 0C81 1972 1027 cmpi.l #$19721027,D1
{ "gigawingb",{ 0x0fe745b0,0x96ef7f9d }, 0x100000 }, // 0C81 1972 1027 cmpi.l #$19721027,D1
{ "mmatrix", { 0xac9ebd79,0x410467df }, 0x180000 }, // B6C0 B447 BACF cmpa.w D0,A3 cmp.w D7,D2 cmpa.w A7,A5
{ "mmatrixj", { 0x4df81e95,0x72ed9823 }, 0x180000 }, // B6C0 B447 BACF cmpa.w D0,A3 cmp.w D7,D2 cmpa.w A7,A5
{ "mpang", { 0x95f741c6,0xe547a21b }, 0x100000 }, // 0C84 347D 89A3 cmpi.l #$347D89A3,D4
{ "mpangr1", { 0x95f741c6,0xe547a21b }, 0x100000 }, // 0C84 347D 89A3 cmpi.l #$347D89A3,D4
{ "mpangu", { 0x95f741c6,0xe547a21b }, 0x100000 }, // 0C84 347D 89A3 cmpi.l #$347D89A3,D4
{ "mpangj", { 0x95f741c6,0xe547a21b }, 0x100000 }, // 0C84 347D 89A3 cmpi.l #$347D89A3,D4
{ "pzloop2", { 0xa054f812,0xc40d36b4 }, 0x400000 }, // 0C82 9A73 15F1 cmpi.l #$9A7315F1,D2
{ "pzloop2j", { 0xa054f812,0xc40d36b4 }, 0x400000 }, // 0C82 9A73 15F1 cmpi.l #$9A7315F1,D2
{ "pzloop2jr1",{ 0xa054f812,0xc40d36b4 }, 0x400000 }, // 0C82 9A73 15F1 cmpi.l #$9A7315F1,D2
{ "choko", { 0xd3fb12c6,0x7f8e17b5 }, 0x400000 }, // 0C86 4D17 5B3C cmpi.l #$4D175B3C,D6
{ "dimahoo", { 0x0ddb8e40,0x2817fd2b }, 0x080000 }, // BE4C B244 B6C5 cmp.w A4,D7 cmp.w D4,D1 cmpa.w D5,A3
{ "dimahoou", { 0x6575af59,0xb0fea691 }, 0x080000 }, // BE4C B244 B6C5 cmp.w A4,D7 cmp.w D4,D1 cmpa.w D5,A3
{ "gmahou", { 0x97f7be58,0x6121eb62 }, 0x080000 }, // BE4C B244 B6C5 cmp.w A4,D7 cmp.w D4,D1 cmpa.w D5,A3
{ "1944", { 0x1d3e724c,0x8b59fc7a }, 0x080000 }, // 0C86 7B5D 94F1 cmpi.l #$7B5D94F1,D6
{ "1944j", { 0x23d79c3a,0xe18b2746 }, 0x080000 }, // 0C86 7B5D 94F1 cmpi.l #$7B5D94F1,D6
{ "progear", { 0x639ad8c6,0xef130df3 }, 0x400000 }, // 0C81 63A1 B8D3 cmpi.l #$63A1B8D3,D1
{ "progearj", { 0x9f7edc56,0x39fb47be }, 0x400000 }, // 0C81 63A1 B8D3 cmpi.l #$63A1B8D3,D1
{ "progeara", { 0x658ab128,0xfddc9b5e }, 0x400000 }, // 0C81 63A1 B8D3 cmpi.l #$63A1B8D3,D1
{ NULL, { 0,0 }, 0 } // end of table
};
DRIVER_INIT_MEMBER(cps_state,cps2crpt)
{
const char *gamename = machine().system().name;
const struct game_keys *k = &keys_table[0];
UINT32 key[2];
UINT32 lower;
UINT32 upper;
while (k->name)
{
if (strcmp(k->name, gamename) == 0)
{
// we have a proper key so use it to decrypt
cps2_decrypt(machine(), (UINT16 *)memregion("maincpu")->base(), m_decrypted_opcodes, memregion("maincpu")->bytes(), k->keys, k->upper_limit ? k->upper_limit : 0x400000);
std::string skey1 = parameter("cryptkey1");;
key[0] = strtoll(skey1.c_str(), 0, 16);
break;
}
++k;
}
std::string skey2 = parameter("cryptkey2");
key[1] = strtoll(skey2.c_str(), 0, 16);
std::string slower = parameter("cryptlower");
lower = strtoll(slower.c_str(), 0, 16);
std::string supper = parameter("cryptupper");
upper = strtoll(supper.c_str(), 0, 16);
// we have a proper key so use it to decrypt
if (lower!=0xff0000) // don't run the decrypt on 'dead key' games for now
cps2_decrypt(machine(), (UINT16 *)memregion("maincpu")->base(), m_decrypted_opcodes, memregion("maincpu")->bytes(), key, lower,upper);
}

View File

@ -0,0 +1,225 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood
// CPS2 keys
#define CRYPT_PARAMS( _key1, _key2, _lower, _upper ) \
ROM_PARAMETER( "cryptkey1", _key1 ) \
ROM_PARAMETER( "cryptkey2", _key2 ) \
ROM_PARAMETER( "cryptlower", _lower ) \
ROM_PARAMETER( "cryptupper", _upper )
// the watchdog opcode sequence should also be a parameter if we want to emulate that too?
// On a dead board, the only encrypted range is actually FF0000-FFFFFF.
// It doesn't start from 0, and it's the upper half of a 128kB bank.
// key1 key2 lowwer upper watchdog
#define CPS2_DEAD_KEY CRYPT_PARAMS( "ffffffff","ffffffff", "ff0000", "ffffff" ) // ffff ffff ffff
#define SSF2_WORLD_KEY CRYPT_PARAMS( "23456789","abcdef01", "000000", "400000" ) // 0838 0007 2000 btst #7,$2000
#define SSF2_USA_KEY CRYPT_PARAMS( "12345678","9abcdef0", "000000", "400000" ) // 0838 0007 2000 btst #7,$2000
#define SSF2_ASIA_KEY CRYPT_PARAMS( "3456789a","bcdef012", "000000", "400000" ) // 0838 0007 2000 btst #7,$2000
#define SSF2_JAPAN_KEY CRYPT_PARAMS( "01234567","89abcdef", "000000", "400000" ) // 0838 0007 2000 btst #7,$2000
#define SSF2_HISPANIC_KEY CRYPT_PARAMS( "56789abc","def01234", "000000", "400000" ) // 0838 0007 2000 btst #7,$2000
#define SSF2TB_WORLD_KEY CRYPT_PARAMS( "89abcdef","01234567", "000000", "400000" ) // 0838 0007 2000 btst #7,$2000
#define SSF2TB_JAPAN_KEY CRYPT_PARAMS( "6789abcd","ef012345", "000000", "400000" ) // 0838 0007 2000 btst #7,$2000
#define SSF2TB_HISPANIC_KEY CRYPT_PARAMS( "bcdef012","3456789a", "000000", "400000" ) // 0838 0007 2000 btst #7,$2000
#define DDTOD_WORLD_KEY CRYPT_PARAMS( "4767fe08","14ca35d9", "000000", "180000" ) // 0C78 1019 4000 cmpi.w #$1019,$4000
#define DDTOD_USA_KEY CRYPT_PARAMS( "eca19c3d","24736bf0", "000000", "180000" ) // 0C78 1019 4000 cmpi.w #$1019,$4000
#define DDTOD_JAPAN_KEY CRYPT_PARAMS( "4510e79c","f36b8a2d", "000000", "180000" ) // 0C78 1019 4000 cmpi.w #$1019,$4000
#define DDTOD_ASIA_KEY CRYPT_PARAMS( "decac105","19710411", "000000", "180000" ) // 0C78 1019 4000 cmpi.w #$1019,$4000
#define DDTOD_HISPANIC_KEY CRYPT_PARAMS( "19691019","e825dde0", "000000", "180000" ) // 0C78 1019 4000 cmpi.w #$1019,$4000
#define ECOFGHTR_WORLD_KEY CRYPT_PARAMS( "931031dc","ba987654", "000000", "200000" ) // 0838 0003 7345 btst #3,$7345
#define ECOFGHTR_USA_KEY CRYPT_PARAMS( "931031ed","cba98765", "000000", "200000" ) // 0838 0003 7345 btst #3,$7345
#define ECOFGHTR_JAPAN_KEY CRYPT_PARAMS( "931031fe","dcba9876", "000000", "200000" ) // 0838 0003 7345 btst #3,$7345
#define ECOFGHTR_ASIA_KEY CRYPT_PARAMS( "931031ba","98765432", "000000", "200000" ) // 0838 0003 7345 btst #3,$7345
#define ECOFGHTR_HISPANIC_KEY CRYPT_PARAMS( "931031cb","a9876543", "000000", "200000" ) // 0838 0003 7345 btst #3,$7345
#define SSF2T_WORLD_KEY CRYPT_PARAMS( "944e8302","56d3143c", "000000", "400000" ) // 0838 0007 2000 btst #7,$2000
#define SSF2T_ASIA_KEY CRYPT_PARAMS( "94c4d002","664a1471", "000000", "400000" ) // 0838 0007 2000 btst #7,$2000
#define SSF2T_USA_KEY CRYPT_PARAMS( "94fa8902","4c77143f", "000000", "400000" ) // 0838 0007 2000 btst #7,$2000
#define SSF2T_JAPAN_KEY CRYPT_PARAMS( "942a5702","05ac140e", "000000", "400000" ) // 0838 0007 2000 btst #7,$2000
#define SSF2T_JAPAN_RENTAL_KEY CRYPT_PARAMS( "943c2b02","7acd1422", "000000", "400000" ) // 0838 0007 2000 btst #7,$2000 // curious, not the usual Japan key on the rent version
#define XMCOTA_WORLD_KEY CRYPT_PARAMS( "3bc6eda4","97f80251", "000000", "100000" ) // 0C80 1972 0301 cmpi.l #$19720301,D0
#define XMCOTA_USA_KEY CRYPT_PARAMS( "32a57ecd","98016f4b", "000000", "100000" ) // 0C80 1972 0301 cmpi.l #$19720301,D0
#define XMCOTA_HISPANIC_KEY CRYPT_PARAMS( "f5e8dc34","a096b217", "000000", "100000" ) // 0C80 1972 0301 cmpi.l #$19720301,D0
#define XMCOTA_JAPAN_KEY CRYPT_PARAMS( "46027315","af8bcd9e", "000000", "100000" ) // 0C80 1972 0301 cmpi.l #$19720301,D0
#define XMCOTA_ASIA_KEY CRYPT_PARAMS( "0795a4e2","db3f861c", "000000", "100000" ) // 0C80 1972 0301 cmpi.l #$19720301,D0
#define ARMWAR_WORLD_KEY CRYPT_PARAMS( "9e9d4c0b","8a39081f", "000000", "100000" ) // 3039 0080 4020 move.w $00804020,D0
#define ARMWAR_USA_KEY CRYPT_PARAMS( "d4c0b8a3","9081f9e9", "000000", "100000" ) // 3039 0080 4020 move.w $00804020,D0
#define ARMWAR_JAPAN_KEY CRYPT_PARAMS( "9d4c0b8a","39081f9e", "000000", "100000" ) // 3039 0080 4020 move.w $00804020,D0
#define ARMWAR_ASIA_KEY CRYPT_PARAMS( "1f9e9d4c","0b8a3908", "000000", "100000" ) // 3039 0080 4020 move.w $00804020,D0
#define AVSP_WORLD_KEY CRYPT_PARAMS( "15208f79","4ade6cb3", "000000", "100000" ) // 0C80 1234 5678 cmpi.l #$12345678,D0
#define AVSP_USA_KEY CRYPT_PARAMS( "b4f61089","ccf75a23", "000000", "100000" ) // 0C80 1234 5678 cmpi.l #$12345678,D0
#define AVSP_JAPAN_KEY CRYPT_PARAMS( "e9dcb8fa","51372064", "000000", "100000" ) // 0C80 1234 5678 cmpi.l #$12345678,D0
#define AVSP_ASIA_KEY CRYPT_PARAMS( "c168f3bd","2e4a5970", "000000", "100000" ) // 0C80 1234 5678 cmpi.l #$12345678,D0
#define AVSP_HISPANIC_KEY CRYPT_PARAMS( "712b690a","43cd8e5f", "000000", "100000" ) // 0C80 1234 5678 cmpi.l #$12345678,D0
#define DSTLK_WORLD_KEY CRYPT_PARAMS( "13d8a7a8","0008b090", "000000", "100000" ) // 0838 0000 6160 btst #0,$6160
#define DSTLK_USA_KEY CRYPT_PARAMS( "1e80ebf0","10227119", "000000", "100000" ) // 0838 0000 6160 btst #0,$6160
#define DSTLK_ASIA_KEY CRYPT_PARAMS( "205d8398","06221971", "000000", "100000" ) // 0838 0000 6160 btst #0,$6160
#define DSTLK_HISPANIC_KEY CRYPT_PARAMS( "22463efe","011169aa", "000000", "100000" ) // 0838 0000 6160 btst #0,$6160
#define DSTLK_JAPAN_KEY CRYPT_PARAMS( "efcb0804","026819ae", "000000", "100000" ) // 0838 0000 6160 btst #0,$6160
#define RINGDEST_WORLD_KEY CRYPT_PARAMS( "19940727","17444903", "000000", "180000" ) // 3039 0080 4020 move.w $00804020,D0
#define RINGDEST_JAPAN_KEY CRYPT_PARAMS( "19940209","17031403", "000000", "180000" ) // 3039 0080 4020 move.w $00804020,D0
#define RINGDEST_ASIA_KEY CRYPT_PARAMS( "19940727","17452103", "000000", "180000" ) // 3039 0080 4020 move.w $00804020,D0
#define CYBOTS_WORLD_KEY CRYPT_PARAMS( "45425943","05090901", "000000", "100000" ) // 0C38 00FF 0C38 cmpi.b #$FF,$0C38
#define CYBOTS_USA_KEY CRYPT_PARAMS( "43050909","01554259", "000000", "100000" ) // 0C38 00FF 0C38 cmpi.b #$FF,$0C38
#define CYBOTS_JAPAN_KEY CRYPT_PARAMS( "05090901","4a425943", "000000", "100000" ) // 0C38 00FF 0C38 cmpi.b #$FF,$0C38
#define MSH_WORLD_KEY CRYPT_PARAMS( "1a11ee26","e7955d17", "000000", "100000" ) // 0C81 1966 0419 cmpi.l #$19660419,D1
#define MSH_USA_KEY CRYPT_PARAMS( "8705a24e","4a17319b", "000000", "100000" ) // 0C81 1966 0419 cmpi.l #$19660419,D1
#define MSH_JAPAN_KEY CRYPT_PARAMS( "05e88219","31ad2142", "000000", "100000" ) // 0C81 1966 0419 cmpi.l #$19660419,D1
#define MSH_ASIA_KEY CRYPT_PARAMS( "457aeb01","3897c53d", "000000", "100000" ) // 0C81 1966 0419 cmpi.l #$19660419,D1
#define MSH_HISPANIC_KEY CRYPT_PARAMS( "fc4c5a50","b59cc190", "000000", "100000" ) // 0C81 1966 0419 cmpi.l #$19660419,D1
#define MSH_BRAZIL_KEY CRYPT_PARAMS( "7a152416","ad27f8e6", "000000", "100000" ) // 0C81 1966 0419 cmpi.l #$19660419,D1
#define NWARR_WORLD_KEY CRYPT_PARAMS( "1019d145","03f05a05", "000000", "180000" ) // 0838 0000 6160 btst #0,$6160
#define NWARR_USA_KEY CRYPT_PARAMS( "104a7d0c","3f1b7a1e", "000000", "180000" ) // 0838 0000 6160 btst #0,$6160
#define NWARR_HISPANIC_KEY CRYPT_PARAMS( "c4961b01","2a946020", "000000", "180000" ) // 0838 0000 6160 btst #0,$6160
#define NWARR_BRAZIL_KEY CRYPT_PARAMS( "17c67109","b7362a20", "000000", "180000" ) // 0838 0000 6160 btst #0,$6160
#define NWARR_ASIA_KEY CRYPT_PARAMS( "4e940d0c","39b861a4", "000000", "180000" ) // 0838 0000 6160 btst #0,$6160
#define NWARR_JAPAN_KEY CRYPT_PARAMS( "1135b2c3","a4e9d7f2", "000000", "180000" ) // 0838 0000 6160 btst #0,$6160
#define SFA_WORLD_KEY CRYPT_PARAMS( "0f895d6e","c4273a1b", "000000", "080000" ) // 0C80 0564 2194 cmpi.l #$05642194,D0
#define SFA_USA_KEY CRYPT_PARAMS( "25bead36","97cf4018", "000000", "080000" ) // 0C80 0564 2194 cmpi.l #$05642194,D0
#define SFA_ASIA_KEY CRYPT_PARAMS( "e43dc508","621b9a7f", "000000", "080000" ) // 0C80 0564 2194 cmpi.l #$05642194,D0
#define SFA_JAPAN_KEY CRYPT_PARAMS( "8db3167a","c29e0f45", "000000", "080000" ) // 0C80 0564 2194 cmpi.l #$05642194,D0
#define SFA_HISPANIC_KEY CRYPT_PARAMS( "876b0e39","5ca24fd1", "000000", "080000" ) // 0C80 0564 2194 cmpi.l #$05642194,D0
#define SFA_BRAZIL_KEY CRYPT_PARAMS( "ef415bd3","7a92c680", "000000", "080000" ) // 0C80 0564 2194 cmpi.l #$05642194,D0
#define MMANCP2_USA_KEY CRYPT_PARAMS( "054893fa","94642525", "000000", "100000" ) // 0C80 0564 2194 cmpi.l #$05642194,D0
#define MMANCP2_JAPAN_KEY CRYPT_PARAMS( "07215501","37fa32d0", "000000", "100000" ) // 0C80 0564 2194 cmpi.l #$05642194,D0
#define _19XX_USA_KEY CRYPT_PARAMS( "0e07181f","5fd0f080", "000000", "200000" ) // 0C81 0095 1101 cmpi.l #$00951101,D1
#define _19XX_ASIA_KEY CRYPT_PARAMS( "cce74cf5","b7da3711", "000000", "200000" ) // 0C81 0095 1101 cmpi.l #$00951101,D1
#define _19XX_JAPAN_KEY CRYPT_PARAMS( "00115df8","000ff87e", "000000", "200000" ) // 0C81 0095 1101 cmpi.l #$00951101,D1
#define _19XX_HISPANIC_KEY CRYPT_PARAMS( "5d49bafa","f7216c9f", "000000", "200000" ) // 0C81 0095 1101 cmpi.l #$00951101,D1
#define _19XX_BRAZIL_KEY CRYPT_PARAMS( "e5f9476a","2dfb623f", "000000", "200000" ) // 0C81 0095 1101 cmpi.l #$00951101,D1
#define DDSOM_WORLD_KEY CRYPT_PARAMS( "87889abc","d81f5f63", "000000", "100000" ) // 0C81 1966 0419 cmpi.l #$19660419,D1
#define DDSOM_USA_KEY CRYPT_PARAMS( "489f0526","1bcd3e7a", "000000", "100000" ) // 0C81 1966 0419 cmpi.l #$19660419,D1
#define DDSOM_JAPAN_KEY CRYPT_PARAMS( "ae92fa94","315a9045", "000000", "100000" ) // 0C81 1966 0419 cmpi.l #$19660419,D1
#define DDSOM_ASIA_KEY CRYPT_PARAMS( "8719abcd","ef028345", "000000", "100000" ) // 0C81 1966 0419 cmpi.l #$19660419,D1
#define DDSOM_HISPANIC_KEY CRYPT_PARAMS( "42134245","120de607", "000000", "100000" ) // 0C81 1966 0419 cmpi.l #$19660419,D1
#define DDSOM_BRAZIL_KEY CRYPT_PARAMS( "7149a782","f3a5bfce", "000000", "100000" ) // 0C81 1966 0419 cmpi.l #$19660419,D1
#define MEGAMAN2_USA_KEY CRYPT_PARAMS( "50501cac","ed346550", "000000", "100000" ) // 0C80 0164 7101 cmpi.l #$01647101,D0
#define MEGAMAN2_ASIA_KEY CRYPT_PARAMS( "3f148a2b","d6790a15", "000000", "100000" ) // 0C80 0164 7101 cmpi.l #$01647101,D0
#define MEGAMAN2_JAPAN_KEY CRYPT_PARAMS( "319eca73","10551270", "000000", "100000" ) // 0C80 0164 7101 cmpi.l #$01647101,D0
#define MEGAMAN2_HISPANIC_KEY CRYPT_PARAMS( "765573ca","250210d0", "000000", "100000" ) // 0C80 0164 7101 cmpi.l #$01647101,D0
#define QNDREAM_JAPAN_KEY CRYPT_PARAMS( "5804ea73","f66b0798", "000000", "080000" ) // 0C81 1973 0827 cmpi.l #$19730827,D1
#define SFA2_WORLD_KEY CRYPT_PARAMS( "fc4acf9c","3bfbe1f9", "000000", "100000" ) // 0C80 3039 9783 cmpi.l #$30399783,D0
#define SFA2_USA_KEY CRYPT_PARAMS( "1bbf3d96","8af4614a", "000000", "100000" ) // 0C80 3039 9783 cmpi.l #$30399783,D0
#define SFA2_JAPAN_KEY CRYPT_PARAMS( "83f47e99","da772111", "000000", "100000" ) // 0C80 3039 9783 cmpi.l #$30399783,D0
#define SFA2_ASIA_KEY CRYPT_PARAMS( "afc2e8f4","43789487", "000000", "100000" ) // 0C80 3039 9783 cmpi.l #$30399783,D0
#define SFA2_BRAZIL_KEY CRYPT_PARAMS( "ac134599","61f8bb2e", "000000", "100000" ) // 0C80 3039 9783 cmpi.l #$30399783,D0
#define SFA2_HISPANIC_KEY CRYPT_PARAMS( "f98a2d42","597b089f", "000000", "100000" ) // 0C80 3039 9783 cmpi.l #$30399783,D0
#define SFA2_OCEANIA_KEY CRYPT_PARAMS( "e32bf89c","a57b46dc", "000000", "100000" ) // 0C80 3039 9783 cmpi.l #$30399783,D0
#define SFZ2AL_ASIA_KEY CRYPT_PARAMS( "f172c0d0","040621a6", "000000", "100000" ) // 0C80 8E73 9110 cmpi.l #$8E739110,D0
#define SFZ2AL_JAPAN_KEY CRYPT_PARAMS( "99450c88","a00a2c4d", "000000", "100000" ) // 0C80 8E73 9110 cmpi.l #$8E739110,D0
#define SFZ2AL_HISPANIC_KEY CRYPT_PARAMS( "95f15b7c","200c08c6", "000000", "100000" ) // 0C80 8E73 9110 cmpi.l #$8E739110,D0
#define SFZ2AL_BRAZIL_KEY CRYPT_PARAMS( "73cd4a28","ff83af1c", "000000", "100000" ) // 0C80 8E73 9110 cmpi.l #$8E739110,D0
#define SPF2T_WORLD_KEY CRYPT_PARAMS( "dde26f09","55821ee7", "000000", "040000" ) // 0C80 3039 9819 cmpi.l #$30399819,D0
#define SPF2T_USA_KEY CRYPT_PARAMS( "706a8750","7d0fc185", "000000", "040000" ) // 0C80 3039 9819 cmpi.l #$30399819,D0
#define SPF2T_JAPAN_KEY CRYPT_PARAMS( "b12c835a","e90976ff", "000000", "040000" ) // 0C80 3039 9819 cmpi.l #$30399819,D0
#define SPF2T_ASIA_KEY CRYPT_PARAMS( "9c48e1ab","d60f34fb", "000000", "040000" ) // 0C80 3039 9819 cmpi.l #$30399819,D0
#define SPF2T_HISPANIC_KEY CRYPT_PARAMS( "51ed8cab","228f85b6", "000000", "040000" ) // 0C80 3039 9819 cmpi.l #$30399819,D0
#define XMVSSF_WORLD_KEY CRYPT_PARAMS( "bdcf8519","3fb2acea", "000000", "100000" ) // 0C81 1972 0327 cmpi.l #$19720327,D1
#define XMVSSF_USA_KEY CRYPT_PARAMS( "4fcb03d2","f8653bc1", "000000", "100000" ) // 0C81 1972 0327 cmpi.l #$19720327,D1
#define XMVSSF_JAPAN_KEY CRYPT_PARAMS( "38df93bc","210373ac", "000000", "100000" ) // 0C81 1972 0327 cmpi.l #$19720327,D1
#define XMVSSF_ASIA_KEY CRYPT_PARAMS( "7438fc3e","19abed90", "000000", "100000" ) // 0C81 1972 0327 cmpi.l #$19720327,D1
#define XMVSSF_HISPANIC_KEY CRYPT_PARAMS( "835fb2d0","42fa9137", "000000", "100000" ) // 0C81 1972 0327 cmpi.l #$19720327,D1
#define XMVSSF_BRAZIL_KEY CRYPT_PARAMS( "8ead9e4a","b02184f0", "000000", "100000" ) // 0C81 1972 0327 cmpi.l #$19720327,D1
#define BATCIR_WORLD_KEY CRYPT_PARAMS( "d195e597","3cbce2b5", "000000", "200000" ) // 0C81 0097 0131 cmpi.l #$00970131,D1
#define BATCIR_ASIA_KEY CRYPT_PARAMS( "1e5d80cb","98882ec7", "000000", "200000" ) // 0C81 0097 0131 cmpi.l #$00970131,D1
#define BATCIR_JAPAN_KEY CRYPT_PARAMS( "00ff4dd8","000008e8", "000000", "200000" ) // 0C81 0097 0131 cmpi.l #$00970131,D1
#define CSCLUB_WORLD_KEY CRYPT_PARAMS( "662e9fa0","4210e7c1", "000000", "200000" ) // 0C81 0097 0310 cmpi.l #$00970310,D1
#define CSCLUB_ASIA_KEY CRYPT_PARAMS( "1366de2a","9ab42937", "000000", "200000" ) // 0C81 0097 0310 cmpi.l #$00970310,D1
#define CSCLUB_JAPAN_KEY CRYPT_PARAMS( "4a2d0be5","56c013c0", "000000", "200000" ) // 0C81 0097 0310 cmpi.l #$00970310,D1
#define CSCLUB_HISPANIC_KEY CRYPT_PARAMS( "f014a8a7","2e7794d0", "000000", "200000" ) // 0C81 0097 0310 cmpi.l #$00970310,D1
#define MSHVSSF_WORLD_KEY CRYPT_PARAMS( "1384ae60","9cd725bf", "000000", "100000" ) // 0C81 1972 1027 cmpi.l #$19721027,D1
#define MSHVSSF_USA_KEY CRYPT_PARAMS( "a36d4971","cef51b28", "000000", "100000" ) // 0C81 1972 1027 cmpi.l #$19721027,D1
#define MSHVSSF_JAPAN_KEY CRYPT_PARAMS( "5dc391f8","a627e0b4", "000000", "100000" ) // 0C81 1972 1027 cmpi.l #$19721027,D1
#define MSHVSSF_HISPANIC_KEY CRYPT_PARAMS( "7e916fc4","03ab852d", "000000", "100000" ) // 0C81 1972 1027 cmpi.l #$19721027,D1
#define MSHVSSF_ASIA_KEY CRYPT_PARAMS( "52e3fa61","0c497bd8", "000000", "100000" ) // 0C81 1972 1027 cmpi.l #$19721027,D1
#define MSHVSSF_BRAZIL_KEY CRYPT_PARAMS( "da68c749","5bf3e201", "000000", "100000" ) // 0C81 1972 1027 cmpi.l #$19721027,D1
#define SGEMF_USA_KEY CRYPT_PARAMS( "84234976","5e0fbb7e", "000000", "080000" ) // 0C80 1F74 0D12 cmpi.l #$1F740D12,D0
#define SGEMF_JAPAN_KEY CRYPT_PARAMS( "97d2ebc0","308f94d7", "000000", "080000" ) // 0C80 1F74 0D12 cmpi.l #$1F740D12,D0
#define SGEMF_ASIA_KEY CRYPT_PARAMS( "090b412a","c47ee993", "000000", "080000" ) // 0C80 1F74 0D12 cmpi.l #$1F740D12,D0
#define SGEMF_HISPANIC_KEY CRYPT_PARAMS( "8163a71b","7c8fd224", "000000", "080000" ) // 0C80 1F74 0D12 cmpi.l #$1F740D12,D0
#define VHUNT2_JAPAN_KEY CRYPT_PARAMS( "36c1eba3","26b10f18", "000000", "100000" ) // 0C80 0692 0760 cmpi.l #$06920760,D0
#define VSAV_WORLD_KEY CRYPT_PARAMS( "e0cd5881","71babb70", "000000", "100000" ) // 0C80 726A 4BAF cmpi.l #$726A4BAF,D0
#define VSAV_USA_KEY CRYPT_PARAMS( "a62ea0ee","573e03e6", "000000", "100000" ) // 0C80 726A 4BAF cmpi.l #$726A4BAF,D0
#define VSAV_JAPAN_KEY CRYPT_PARAMS( "fa8f4e33","a4b881b9", "000000", "100000" ) // 0C80 726A 4BAF cmpi.l #$726A4BAF,D0
#define VSAV_ASIA_KEY CRYPT_PARAMS( "47ee9930","90b412ac", "000000", "100000" ) // 0C80 726A 4BAF cmpi.l #$726A4BAF,D0
#define VSAV_HISPANIC_KEY CRYPT_PARAMS( "b2d37c8d","d3b7aadd", "000000", "100000" ) // 0C80 726A 4BAF cmpi.l #$726A4BAF,D0
#define VSAV2_JAPAN_KEY CRYPT_PARAMS( "d681e4f4","60371edf", "000000", "100000" ) // 0C80 0692 0760 cmpi.l #$06920760,D0
#define MVSC_WORLD_KEY CRYPT_PARAMS( "48025ade","1c697b27", "000000", "100000" ) // 0C81 1972 0121 cmpi.l #$19720121,D1
#define MVSC_USA_KEY CRYPT_PARAMS( "692dc41b","7ef1c805", "000000", "100000" ) // 0C81 1972 0121 cmpi.l #$19720121,D1
#define MVSC_JAPAN_KEY CRYPT_PARAMS( "afc16138","97123eb0", "000000", "100000" ) // 0C81 1972 0121 cmpi.l #$19720121,D1
#define MVSC_ASIA_KEY CRYPT_PARAMS( "f248aec6","7905cd17", "000000", "100000" ) // 0C81 1972 0121 cmpi.l #$19720121,D1
#define MVSC_HISPANIC_KEY CRYPT_PARAMS( "9d5c7a23","e56b18ef", "000000", "100000" ) // 0C81 1972 0121 cmpi.l #$19720121,D1
#define MVSC_BRAZIL_KEY CRYPT_PARAMS( "0874d6eb","51c2b798", "000000", "100000" ) // 0C81 1972 0121 cmpi.l #$19720121,D1
#define SFA3_WORLD_KEY CRYPT_PARAMS( "6abfc8e0","2780ddc1", "000000", "100000" ) // 0C80 1C62 F5A8 cmpi.l #$1C62F5A8,D0
#define SFA3_USA_KEY CRYPT_PARAMS( "e7bbf0e5","67943248", "000000", "100000" ) // 0C80 1C62 F5A8 cmpi.l #$1C62F5A8,D0
#define SFA3_HISPANIC_KEY CRYPT_PARAMS( "8422df8c","7b17a361", "000000", "100000" ) // 0C80 1C62 F5A8 cmpi.l #$1C62F5A8,D0
#define SFA3_BRAZIL_KEY CRYPT_PARAMS( "d421c0b2","8116d296", "000000", "100000" ) // 0C80 1C62 F5A8 cmpi.l #$1C62F5A8,D0
#define SFA3_JAPAN_KEY CRYPT_PARAMS( "7d49f803","0cbe2d79", "000000", "100000" ) // 0C80 1C62 F5A8 cmpi.l #$1C62F5A8,D0
#define SFA3_ASIA_KEY CRYPT_PARAMS( "990b9301","a4e42c7e", "000000", "100000" ) // 0C80 1C62 F5A8 cmpi.l #$1C62F5A8,D0
#define JYANGOKU_JAPAN_KEY CRYPT_PARAMS( "6ca42ae6","92f63f59", "000000", "400000" ) // 0C80 3652 1573 cmpi.l #$36521573,D0 // range unknown
#define HSF2_USA_KEY CRYPT_PARAMS( "5a369ddd","fea3189c", "000000", "100000" ) // 0838 0007 2000 btst #7,$2000
#define HSF2_ASIA_KEY CRYPT_PARAMS( "b8ed3630","aae30a3d", "000000", "100000" ) // 0838 0007 2000 btst #7,$2000
#define HSF2_JAPAN_KEY CRYPT_PARAMS( "65d82fe0","dbb83e47", "000000", "100000" ) // 0838 0007 2000 btst #7,$2000
#define GIGAWING_USA_KEY CRYPT_PARAMS( "e52de290","1b60d780", "000000", "100000" ) // 0C81 1972 1027 cmpi.l #$19721027,D1
#define GIGAWING_JAPAN_KEY CRYPT_PARAMS( "1126196a","bef50895", "000000", "100000" ) // 0C81 1972 1027 cmpi.l #$19721027,D1
#define GIGAWING_ASIA_KEY CRYPT_PARAMS( "3506a85a","66b1b768", "000000", "100000" ) // 0C81 1972 1027 cmpi.l #$19721027,D1
#define GIGAWING_HISPANIC_KEY CRYPT_PARAMS( "cea74211","400da385", "000000", "100000" ) // 0C81 1972 1027 cmpi.l #$19721027,D1
#define GIGAWING_BRAZIL_KEY CRYPT_PARAMS( "0fe745b0","96ef7f9d", "000000", "100000" ) // 0C81 1972 1027 cmpi.l #$19721027,D1
#define MMATRIX_USA_KEY CRYPT_PARAMS( "ac9ebd79","410467df", "000000", "180000" ) // B6C0 B447 BACF cmpa.w D0,A3 cmp.w D7,D2 cmpa.w A7,A5
#define MMATRIX_JAPAN_KEY CRYPT_PARAMS( "4df81e95","72ed9823", "000000", "180000" ) // B6C0 B447 BACF cmpa.w D0,A3 cmp.w D7,D2 cmpa.w A7,A5
#define MPANG_ALLREGIONS_KEY CRYPT_PARAMS( "95f741c6","e547a21b", "000000", "100000" ) // 0C84 347D 89A3 cmpi.l #$347D89A3,D4
#define PZLOOP2_ALLREGIONS_KEY CRYPT_PARAMS( "a054f812","c40d36b4", "000000", "400000" ) // 0C82 9A73 15F1 cmpi.l #$9A7315F1,D2
#define CHOKO_JAPAN_KEY CRYPT_PARAMS( "d3fb12c6","7f8e17b5", "000000", "400000" ) // 0C86 4D17 5B3C cmpi.l #$4D175B3C,D6
#define DIMAHOO_WORLD_KEY CRYPT_PARAMS( "0ddb8e40","2817fd2b", "000000", "080000" ) // BE4C B244 B6C5 cmp.w A4,D7 cmp.w D4,D1 cmpa.w D5,A3
#define DIMAHOO_USA_KEY CRYPT_PARAMS( "6575af59","b0fea691", "000000", "080000" ) // BE4C B244 B6C5 cmp.w A4,D7 cmp.w D4,D1 cmpa.w D5,A3
#define DIMAHOO_JAPAN_KEY CRYPT_PARAMS( "97f7be58","6121eb62", "000000", "080000" ) // BE4C B244 B6C5 cmp.w A4,D7 cmp.w D4,D1 cmpa.w D5,A3
#define _1944_USA_KEY CRYPT_PARAMS( "1d3e724c","8b59fc7a", "000000", "080000" ) // 0C86 7B5D 94F1 cmpi.l #$7B5D94F1,D6
#define _1944_JAPAN_KEY CRYPT_PARAMS( "23d79c3a","e18b2746", "000000", "080000" ) // 0C86 7B5D 94F1 cmpi.l #$7B5D94F1,D6
#define PROGEAR_USA_KEY CRYPT_PARAMS( "639ad8c6","ef130df3", "000000", "400000" ) // 0C81 63A1 B8D3 cmpi.l #$63A1B8D3,D1
#define PROGEAR_JAPAN_KEY CRYPT_PARAMS( "9f7edc56","39fb47be", "000000", "400000" ) // 0C81 63A1 B8D3 cmpi.l #$63A1B8D3,D1
#define PROGEAR_ASIA_KEY CRYPT_PARAMS( "658ab128","fddc9b5e", "000000", "400000" ) // 0C81 63A1 B8D3 cmpi.l #$63A1B8D3,D1