mirror of
https://github.com/ekeeke/Genesis-Plus-GX.git
synced 2024-12-26 11:11:48 +01:00
[Core/MD] added support for Thunderbolt II (unlicensed) copy protection
This commit is contained in:
parent
606b2d688d
commit
529112f321
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user