[Core/MD] added support for Thunderbolt II (unlicensed) copy protection

This commit is contained in:
EkeEke 2013-10-20 20:31:51 +02:00
parent 4d8b89edce
commit 23b1167ac3

View File

@ -46,7 +46,7 @@
#include "eeprom_spi.h" #include "eeprom_spi.h"
#include "gamepad.h" #include "gamepad.h"
#define CART_CNT (54) #define CART_CNT (55)
/* Cart database entry */ /* Cart database entry */
typedef struct typedef struct
@ -176,6 +176,8 @@ static const md_entry_t rom_database[CART_CNT] =
{0xfb40,0x4bed,0x40,0x40,{{0x00,0xaa,0x00,0xf0},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x400002,0x000000,0x400006},0,0,NULL,NULL,default_regs_r_16,NULL}}, {0xfb40,0x4bed,0x40,0x40,{{0x00,0xaa,0x00,0xf0},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x400002,0x000000,0x400006},0,0,NULL,NULL,default_regs_r_16,NULL}},
/* 16 Tiles Mahjong II (uses 16-bits reads) */ /* 16 Tiles Mahjong II (uses 16-bits reads) */
{0xffff,0x0903,0x40,0x40,{{0x00,0x00,0xc9,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x400004,0x000000},0,0,NULL,NULL,default_regs_r_16,NULL}}, {0xffff,0x0903,0x40,0x40,{{0x00,0x00,0xc9,0x00},{0xffffff,0xffffff,0xffffff,0xffffff},{0x000000,0x000000,0x400004,0x000000},0,0,NULL,NULL,default_regs_r_16,NULL}},
/* Thunderbolt II (uses 16-bits reads) */
{0x0000,0x1585,0x40,0x40,{{0x55,0x0f,0xaa,0xf0},{0xffffff,0xffffff,0xffffff,0xffffff},{0x400000,0x400002,0x400004,0x400006},0,0,NULL,NULL,default_regs_r_16,NULL}},
/* Super Bubble Bobble */ /* Super Bubble Bobble */
@ -299,7 +301,7 @@ void md_cart_init(void)
} }
/* Sonic & Knuckles */ /* Sonic & Knuckles */
if (strstr(rominfo.international,"SONIC & KNUCKLES") != NULL) if (strstr(rominfo.international,"SONIC & KNUCKLES"))
{ {
/* disable ROM mirroring at $200000-$3fffff (normally mapped to external cartridge) */ /* disable ROM mirroring at $200000-$3fffff (normally mapped to external cartridge) */
size = 0x400000; size = 0x400000;
@ -336,7 +338,7 @@ void md_cart_init(void)
} }
/* support for Quackshot REV 01 (real) dump */ /* support for Quackshot REV 01 (real) dump */
if ((strstr(rominfo.product,"00004054-01") != NULL) && (cart.romsize == 0x80000)) if (strstr(rominfo.product,"00004054-01") && (cart.romsize == 0x80000))
{ {
/* $000000-$0fffff: first 256K mirrored (A18 not connected to ROM chip, A19 not decoded) */ /* $000000-$0fffff: first 256K mirrored (A18 not connected to ROM chip, A19 not decoded) */
for (i=0x00; i<0x10; i++) for (i=0x00; i<0x10; i++)
@ -380,7 +382,7 @@ void md_cart_init(void)
SVP CHIP SVP CHIP
***********************************************/ ***********************************************/
svp = NULL; svp = NULL;
if (strstr(rominfo.international,"Virtua Racing") != NULL) if (strstr(rominfo.international,"Virtua Racing"))
{ {
svp_init(); svp_init();
@ -400,14 +402,14 @@ void md_cart_init(void)
J-CART J-CART
***********************************************/ ***********************************************/
cart.special = 0; cart.special = 0;
if (((strstr(rominfo.product,"00000000") != NULL) && (rominfo.checksum == 0x168b)) || /* Super Skidmarks, Micro Machines Military */ if ((strstr(rominfo.product,"00000000") && (rominfo.checksum == 0x168b)) || /* Super Skidmarks, Micro Machines Military */
((strstr(rominfo.product,"00000000") != NULL) && (rominfo.checksum == 0x165e)) || /* Pete Sampras Tennis (1991), Micro Machines 96 */ (strstr(rominfo.product,"00000000") && (rominfo.checksum == 0x165e)) || /* Pete Sampras Tennis (1991), Micro Machines 96 */
((strstr(rominfo.product,"00000000") != NULL) && (rominfo.checksum == 0xcee0)) || /* Micro Machines Military (bad) */ (strstr(rominfo.product,"00000000") && (rominfo.checksum == 0xcee0)) || /* Micro Machines Military (bad) */
((strstr(rominfo.product,"00000000") != NULL) && (rominfo.checksum == 0x2c41)) || /* Micro Machines 96 (bad) */ (strstr(rominfo.product,"00000000") && (rominfo.checksum == 0x2c41)) || /* Micro Machines 96 (bad) */
((strstr(rominfo.product,"XXXXXXXX") != NULL) && (rominfo.checksum == 0xdf39)) || /* Sampras Tennis 96 */ (strstr(rominfo.product,"XXXXXXXX") && (rominfo.checksum == 0xdf39)) || /* Sampras Tennis 96 */
((strstr(rominfo.product,"T-123456") != NULL) && (rominfo.checksum == 0x1eae)) || /* Sampras Tennis 96 */ (strstr(rominfo.product,"T-123456") && (rominfo.checksum == 0x1eae)) || /* Sampras Tennis 96 */
((strstr(rominfo.product,"T-120066") != NULL) && (rominfo.checksum == 0x16a4)) || /* Pete Sampras Tennis (1994)*/ (strstr(rominfo.product,"T-120066") && (rominfo.checksum == 0x16a4)) || /* Pete Sampras Tennis (1994)*/
(strstr(rominfo.product,"T-120096") != NULL)) /* Micro Machines 2 */ strstr(rominfo.product,"T-120096")) /* Micro Machines 2 */
{ {
if (cart.romsize <= 0x380000) /* just to be sure (checksum might not be enough) */ if (cart.romsize <= 0x380000) /* just to be sure (checksum might not be enough) */
{ {
@ -567,7 +569,7 @@ void md_cart_init(void)
} }
/* detect specific mappers */ /* detect specific mappers */
if (strstr(rominfo.domestic,"SUPER STREET FIGHTER2") != NULL) if (strstr(rominfo.domestic,"SUPER STREET FIGHTER2"))
{ {
/* SSF2 mapper */ /* SSF2 mapper */
cart.hw.bankshift = 1; cart.hw.bankshift = 1;
@ -575,7 +577,7 @@ void md_cart_init(void)
/* specific !TIME handler */ /* specific !TIME handler */
cart.hw.time_w = mapper_ssf2_w; cart.hw.time_w = mapper_ssf2_w;
} }
else if (strstr(rominfo.product,"T-5740") != NULL) else if (strstr(rominfo.product,"T-5740"))
{ {
/* T-5740XX-XX mapper */ /* T-5740XX-XX mapper */
cart.hw.bankshift = 1; cart.hw.bankshift = 1;
@ -589,7 +591,7 @@ void md_cart_init(void)
/* initialize SPI EEPROM board */ /* initialize SPI EEPROM board */
eeprom_spi_init(); eeprom_spi_init();
} }
else if ((strstr(rominfo.ROMType,"SF") != NULL) && (strstr(rominfo.product,"001") != NULL)) else if (strstr(rominfo.ROMType,"SF") && strstr(rominfo.product,"001"))
{ {
/* SF-001 mapper */ /* SF-001 mapper */
m68k.memory_map[0x00].write8 = mapper_sf001_w; m68k.memory_map[0x00].write8 = mapper_sf001_w;
@ -599,7 +601,7 @@ void md_cart_init(void)
/* no !TIME handler */ /* no !TIME handler */
cart.hw.time_w = m68k_unused_8_w; cart.hw.time_w = m68k_unused_8_w;
} }
else if ((strstr(rominfo.ROMType,"SF") != NULL) && (strstr(rominfo.product,"002") != NULL)) else if (strstr(rominfo.ROMType,"SF") && strstr(rominfo.product,"002"))
{ {
/* SF-002 mapper */ /* SF-002 mapper */
m68k.memory_map[0x00].write8 = mapper_sf002_w; m68k.memory_map[0x00].write8 = mapper_sf002_w;
@ -609,7 +611,7 @@ void md_cart_init(void)
/* no !TIME handler */ /* no !TIME handler */
cart.hw.time_w = m68k_unused_8_w; cart.hw.time_w = m68k_unused_8_w;
} }
else if ((strstr(rominfo.ROMType,"SF") != NULL) && (strstr(rominfo.product,"004") != NULL)) else if (strstr(rominfo.ROMType,"SF") && strstr(rominfo.product,"004"))
{ {
/* SF-004 mapper */ /* SF-004 mapper */
m68k.memory_map[0x00].write8 = mapper_sf004_w; m68k.memory_map[0x00].write8 = mapper_sf004_w;