mirror of
https://github.com/holub/mame
synced 2025-05-16 19:00:43 +03:00
megadrive cart handling cleanup, part 2 (still in progress): hookedup pirate mappers handlers and (partial) eeprom handlers to softlist loading. no whatsnew (the code is used by MESS only)
This commit is contained in:
parent
ff56305b0b
commit
5635b3f24c
@ -17,34 +17,50 @@ struct _md_pcb
|
||||
// Here, we take the feature attribute from .xml (i.e. the PCB name) and we assign a unique ID to it
|
||||
static const md_pcb pcb_list[] =
|
||||
{
|
||||
/* Standard Sega PCB (one rom) */
|
||||
{"171-5703", STD_ROM},
|
||||
{"171-5927", STD_ROM},
|
||||
{"171-5978B", STD_ROM},
|
||||
{"171-5978BA", STD_ROM},
|
||||
{"171-6329A", STD_ROM},
|
||||
{"SEGA-EEPROM", SEGA_EEPROM},
|
||||
{"SEGA-SRAM", SEGA_SRAM},
|
||||
{"SEGA-FRAM", SEGA_FRAM},
|
||||
|
||||
/* Sega PCB with two roms */
|
||||
{"171-5841", STD_ROM},
|
||||
{"CM-JCART", CM_JCART},
|
||||
{"CM-JCART-SEPROM", CM_JCART_SEPROM},
|
||||
{"CM-SEPROM", CODE_MASTERS},
|
||||
|
||||
/* Sega PCB with Serial EEPROM */
|
||||
{"171-5878", SEGA_5878},
|
||||
{"171-6584A", SEGA_6584A},
|
||||
{"SSF2", SSF2},
|
||||
{"NBAJAM", NBA_JAM},
|
||||
{"NBAJAMTE", NBA_JAM_TE},
|
||||
{"NFLQB96", NFL_QB_96},
|
||||
{"CSLAM", C_SLAM},
|
||||
{"NHLPA", EA_NHLPA},
|
||||
{"WBOY5", WBOY_V},
|
||||
|
||||
/* Sega PCB with sram */
|
||||
{"171-5921", SEGA_5921},
|
||||
{"171-6278A", SEGA_6278A},
|
||||
|
||||
/* Sega PCB with fram */
|
||||
{"171-6658A", SEGA_6658A},
|
||||
|
||||
/* Namcot PCB (blob epoxy chip) */
|
||||
{"837-8861", STD_ROM},
|
||||
|
||||
/* Codemasters PCB */
|
||||
{"SRJCV1-2", CM_JCART},
|
||||
{"SRJCV2-1", CM_JCART_SEPROM},
|
||||
{"SRJCV2-2", CM_JCART_SEPROM}
|
||||
{"LIONK3", LIONK3},
|
||||
{"SDK99", SDK99},
|
||||
{"SKINGKONG", SKINGKONG},
|
||||
{"REDCLIFF", REDCL_EN},
|
||||
{"RADICA", RADICA},
|
||||
{"KOF98", KOF98},
|
||||
{"KOF99", KOF99},
|
||||
{"SOULBLAD", SOULBLAD},
|
||||
{"MJLOVER", MJLOVER},
|
||||
{"SQUIRRELK", SQUIRRELK},
|
||||
{"SMOUSE", SMOUSE},
|
||||
{"SMB", SMB},
|
||||
{"SMB2", SMB2},
|
||||
{"KAIJU", KAIJU},
|
||||
{"CHINFIGHT3", CHINFIGHT3},
|
||||
{"LIONK2", LIONK2},
|
||||
{"BUGSLIFE", BUGSLIFE},
|
||||
{"ELFWOR", ELFWOR},
|
||||
{"ROCKMANX3", ROCKMANX3},
|
||||
{"SBUBBOB", SBUBBOB},
|
||||
{"REALTEC", REALTEC},
|
||||
{"MC_SUP19IN1", MC_SUP19IN1},
|
||||
{"MC_SUP15IN1", MC_SUP15IN1},
|
||||
{"MC_12IN1", MC_12IN1},
|
||||
{"TOPFIGHTER", TOPFIGHTER},
|
||||
{"POKEMON", POKEMON},
|
||||
{"POKEMON2", POKEMON},
|
||||
{"MULAN", MULAN}
|
||||
};
|
||||
|
||||
int md_get_pcb_id(const char *pcb)
|
||||
@ -57,5 +73,5 @@ int md_get_pcb_id(const char *pcb)
|
||||
return pcb_list[i].pcb_id;
|
||||
}
|
||||
|
||||
return STD_ROM;
|
||||
return SEGA_STD;
|
||||
}
|
||||
|
@ -3,15 +3,55 @@
|
||||
|
||||
/* PCB */
|
||||
enum
|
||||
{
|
||||
STD_ROM = 0,
|
||||
{
|
||||
SEGA_STD = 0,
|
||||
|
||||
/* Sega PCB */
|
||||
SEGA_5878, SEGA_6584A, SEGA_5921, SEGA_6278A, SEGA_6658A,
|
||||
SEGA_EEPROM, SEGA_SRAM, SEGA_FRAM,
|
||||
|
||||
/* Codemasters PCB (J-Carts and SEPROM) */
|
||||
CM_JCART, CM_JCART_SEPROM
|
||||
};
|
||||
CM_JCART, CM_JCART_SEPROM,
|
||||
|
||||
SSF2, /* Super Street Fighter 2 */
|
||||
// EEPROM
|
||||
NBA_JAM, /* NBA Jam */
|
||||
NBA_JAM_TE, /* NBA Jam TE / NFL Quarterback Club */
|
||||
NFL_QB_96, /* NFL Quarterback Club '96 */
|
||||
C_SLAM, /* College Slam / Frank Thomas Big Hurt Baseball */
|
||||
EA_NHLPA, /* NHLPA Hockey 93 / Rings of Power */
|
||||
WBOY_V, /* Wonder Boy V / Evander Holyfield's Boxing / Greatest Heavyweights of the Ring / Sports Talk Baseball / Megaman */
|
||||
CODE_MASTERS, /* Micro Machines 2 / Military / 96 / Brian Lara Cricket 96 */
|
||||
|
||||
LIONK3, /* Lion King 3 */
|
||||
SKINGKONG, /* Super King Kong 99 */
|
||||
SDK99, /* Super Donkey Kong 99 */
|
||||
REDCLIFF, /* Romance of the Three Kingdoms - Battle of Red Cliffs, already decoded from .mdx format */
|
||||
REDCL_EN, /* The encoded version... */
|
||||
RADICA, /* Radica TV games.. these probably should be a seperate driver since they are a seperate 'console' */
|
||||
KOF99, /* King of Fighters '99 */
|
||||
SOULBLAD, /* Soul Blade */
|
||||
MJLOVER, /* Mahjong Lover */
|
||||
SQUIRRELK, /* Squirrel King */
|
||||
SMOUSE, /* Smart Mouse */
|
||||
SMB, /* Super Mario Bros. */
|
||||
SMB2, /* Super Mario Bros. 2 */
|
||||
KAIJU, /* Pokemon Stadium */
|
||||
CHINFIGHT3, /* Chinese Fighters 3 */
|
||||
LIONK2, /* Lion King 2 */
|
||||
BUGSLIFE, /* A Bug's Life */
|
||||
ELFWOR, /* Elf Wor */
|
||||
ROCKMANX3, /* Rockman X3 */
|
||||
SBUBBOB, /* Super Bubble Bobble */
|
||||
KOF98, /* King of Fighters '98 */
|
||||
REALTEC, /* Whac a Critter/Mallet legend, Defend the Earth, Funnyworld/Ballonboy */
|
||||
MC_SUP19IN1, /* Super 19 in 1 */
|
||||
MC_SUP15IN1, /* Super 15 in 1 */
|
||||
MC_12IN1, /* 12 in 1 and a few more multicarts */
|
||||
TOPFIGHTER, /* Top Fighter 2000 MK VIII */
|
||||
POKEMON, /* Pocket Monster */
|
||||
POKEMON2, /* Pocket Monster 2 */
|
||||
MULAN /* Hua Mu Lan - Mulan */
|
||||
};
|
||||
|
||||
int md_get_pcb_id(const char *pcb);
|
||||
|
||||
|
@ -58,51 +58,13 @@
|
||||
/* where a fresh copy of rom is stashed for reset and banking setup */
|
||||
#define VIRGIN_COPY_GEN 0xd00000
|
||||
|
||||
enum t_cart_type
|
||||
{
|
||||
STANDARD = 0,
|
||||
SSF2, /* Super Street Fighter 2 */
|
||||
LIONK3, /* Lion King 3 */
|
||||
SKINGKONG, /* Super King Kong 99 */
|
||||
SDK99, /* Super Donkey Kong 99 */
|
||||
REDCLIFF, /* Romance of the Three Kingdoms - Battle of Red Cliffs, already decoded from .mdx format */
|
||||
REDCL_EN, /* The encoded version... */
|
||||
RADICA, /* Radica TV games.. these probably should be a seperate driver since they are a seperate 'console' */
|
||||
KOF99, /* King of Fighters '99 */
|
||||
SOULBLAD, /* Soul Blade */
|
||||
MJLOVER, /* Mahjong Lover */
|
||||
SQUIRRELK, /* Squirrel King */
|
||||
SMOUSE, /* Smart Mouse */
|
||||
SMB, /* Super Mario Bros. */
|
||||
SMB2, /* Super Mario Bros. 2 */
|
||||
KAIJU, /* Pokemon Stadium */
|
||||
CHINFIGHT3, /* Chinese Fighters 3 */
|
||||
LIONK2, /* Lion King 2 */
|
||||
BUGSLIFE, /* A Bug's Life */
|
||||
ELFWOR, /* Elf Wor */
|
||||
ROCKMANX3, /* Rockman X3 */
|
||||
SBUBBOB, /* Super Bubble Bobble */
|
||||
KOF98, /* King of Fighters '98 */
|
||||
REALTEC, /* Whac a Critter/Mallet legend, Defend the Earth, Funnyworld/Ballonboy */
|
||||
MC_SUP19IN1, /* Super 19 in 1 */
|
||||
MC_SUP15IN1, /* Super 15 in 1 */
|
||||
MC_12IN1, /* 12 in 1 and a few more multicarts */
|
||||
TOPFIGHTER, /* Top Fighter 2000 MK VIII */
|
||||
NBA_JAM, /* NBA Jam */
|
||||
NBA_JAM_TE, /* NBA Jam TE / NFL Quarterback Club */
|
||||
NFL_QB_96, /* NFL Quarterback Club '96 */
|
||||
C_SLAM, /* College Slam / Frank Thomas Big Hurt Baseball */
|
||||
EA_NHLPA, /* NHLPA Hockey 93 / Rings of Power */
|
||||
WBOY_V, /* Wonder Boy V / Evander Holyfield's Boxing / Greatest Heavyweights of the Ring / Sports Talk Baseball / Megaman */
|
||||
CODE_MASTERS /* Micro Machines 2 / Military / 96 / Brian Lara Cricket */
|
||||
};
|
||||
static enum t_cart_type cart_type;
|
||||
|
||||
|
||||
// later, this has to be moved to the driver class
|
||||
typedef struct _megadriv_cart megadriv_cart;
|
||||
struct _megadriv_cart
|
||||
{
|
||||
int type;
|
||||
|
||||
// SRAM related
|
||||
UINT16 *sram;
|
||||
int last_loaded_image_length;
|
||||
@ -230,8 +192,7 @@ static READ16_HANDLER( l3alt_prot_r )
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
printf("protection read, unknown offset\n");
|
||||
logerror("protection read, unknown offset\n");
|
||||
break;
|
||||
}
|
||||
|
||||
@ -253,7 +214,7 @@ static WRITE16_HANDLER( l3alt_prot_w )
|
||||
md_cart.l3alt_pcmd = data;
|
||||
break;
|
||||
default:
|
||||
printf("protection write, unknown offst\n");
|
||||
logerror("protection write, unknown offst\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -273,7 +234,7 @@ static WRITE16_HANDLER( l3alt_bank_w )
|
||||
break;
|
||||
|
||||
default:
|
||||
printf("unk bank w\n");
|
||||
logerror("unk bank w\n");
|
||||
break;
|
||||
|
||||
}
|
||||
@ -542,9 +503,9 @@ static READ16_HANDLER( kof99_A13000_r )
|
||||
*************************************/
|
||||
static READ16_HANDLER( radica_bank_select )
|
||||
{
|
||||
int bank = offset&0x3f;
|
||||
int bank = offset & 0x3f;
|
||||
UINT8 *ROM = space->machine->region("maincpu")->base();
|
||||
memcpy(ROM, ROM + (bank * 0x10000) + 0x400000, 0x400000);
|
||||
memcpy(ROM, ROM + (bank * 0x10000) + VIRGIN_COPY_GEN, 0x400000);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -935,16 +896,12 @@ static WRITE16_HANDLER( sega_6658a_reg_w )
|
||||
*
|
||||
*************************************/
|
||||
|
||||
|
||||
static void setup_megadriv_custom_mappers(running_machine *machine)
|
||||
{
|
||||
static int relocate = VIRGIN_COPY_GEN;
|
||||
unsigned char *ROM;
|
||||
UINT32 mirroraddr;
|
||||
UINT8 *ROM = machine->region("maincpu")->base();
|
||||
|
||||
ROM = machine->region("maincpu")->base();
|
||||
|
||||
if (cart_type == SSF2)
|
||||
if (md_cart.type == SSF2)
|
||||
{
|
||||
memcpy(&ROM[0x800000], &ROM[VIRGIN_COPY_GEN + 0x400000], 0x100000);
|
||||
memcpy(&ROM[0x400000], &ROM[VIRGIN_COPY_GEN], 0x400000);
|
||||
@ -953,7 +910,7 @@ static void setup_megadriv_custom_mappers(running_machine *machine)
|
||||
memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xa130f0, 0xa130ff, 0, 0, genesis_ssf2_bank_w);
|
||||
}
|
||||
|
||||
if (cart_type == LIONK3 || cart_type == SKINGKONG)
|
||||
if (md_cart.type == LIONK3 || md_cart.type == SKINGKONG)
|
||||
{
|
||||
md_cart.l3alt_pdat = md_cart.l3alt_pcmd = 0;
|
||||
memcpy(&ROM[0x000000], &ROM[VIRGIN_COPY_GEN], 0x200000); /* default rom */
|
||||
@ -963,7 +920,7 @@ static void setup_megadriv_custom_mappers(running_machine *machine)
|
||||
memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x700000, 0x7fffff, 0, 0, l3alt_bank_w);
|
||||
}
|
||||
|
||||
if (cart_type == SDK99)
|
||||
if (md_cart.type == SDK99)
|
||||
{
|
||||
md_cart.l3alt_pdat = md_cart.l3alt_pcmd = 0;
|
||||
|
||||
@ -974,13 +931,13 @@ static void setup_megadriv_custom_mappers(running_machine *machine)
|
||||
memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x700000, 0x7fffff, 0, 0, l3alt_bank_w);
|
||||
}
|
||||
|
||||
if (cart_type == REDCLIFF)
|
||||
if (md_cart.type == REDCLIFF)
|
||||
{
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x400000, 0x400001, 0, 0, redclif_prot2_r);
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x400004, 0x400005, 0, 0, redclif_prot_r);
|
||||
}
|
||||
|
||||
if (cart_type == REDCL_EN)
|
||||
if (md_cart.type == REDCL_EN)
|
||||
{
|
||||
int x;
|
||||
|
||||
@ -995,7 +952,7 @@ static void setup_megadriv_custom_mappers(running_machine *machine)
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x400004, 0x400005, 0, 0, redclif_prot_r);
|
||||
}
|
||||
|
||||
if (cart_type == RADICA)
|
||||
if (md_cart.type == RADICA)
|
||||
{
|
||||
memcpy(&ROM[0x400000], &ROM[VIRGIN_COPY_GEN], 0x400000); // keep a copy for later banking.. making use of huge ROM_REGION allocated to genesis driver
|
||||
memcpy(&ROM[0x800000], &ROM[VIRGIN_COPY_GEN], 0x400000); // wraparound banking (from hazemd code)
|
||||
@ -1003,7 +960,7 @@ static void setup_megadriv_custom_mappers(running_machine *machine)
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xa13000, 0xa1307f, 0, 0, radica_bank_select);
|
||||
}
|
||||
|
||||
if (cart_type == KOF99)
|
||||
if (md_cart.type == KOF99)
|
||||
{
|
||||
//memcpy(&ROM[0x000000],&ROM[VIRGIN_COPY_GEN],0x300000);
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xa13000, 0xa13001, 0, 0, kof99_A13000_r);
|
||||
@ -1011,42 +968,42 @@ static void setup_megadriv_custom_mappers(running_machine *machine)
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xa1303e, 0xa1303f, 0, 0, kof99_00A1303E_r);
|
||||
}
|
||||
|
||||
if (cart_type == SOULBLAD)
|
||||
if (md_cart.type == SOULBLAD)
|
||||
{
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x400002, 0x400003, 0, 0, soulb_400002_r);
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x400004, 0x400005, 0, 0, soulb_400004_r);
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x400006, 0x400007, 0, 0, soulb_400006_r);
|
||||
}
|
||||
|
||||
if (cart_type == MJLOVER)
|
||||
if (md_cart.type == MJLOVER)
|
||||
{
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x400000, 0x400001, 0, 0, mjlovr_prot_1_r);
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x401000, 0x401001, 0, 0, mjlovr_prot_2_r);
|
||||
}
|
||||
|
||||
if (cart_type == SQUIRRELK)
|
||||
if (md_cart.type == SQUIRRELK)
|
||||
{
|
||||
md_cart.squirrel_king_extra = 0;
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x400000, 0x400007, 0, 0, squirrel_king_extra_r);
|
||||
memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x400000, 0x400007, 0, 0, squirrel_king_extra_w);
|
||||
}
|
||||
|
||||
if (cart_type == SMOUSE)
|
||||
if (md_cart.type == SMOUSE)
|
||||
{
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x400000, 0x400007, 0, 0, smous_prot_r);
|
||||
}
|
||||
|
||||
if (cart_type == SMB)
|
||||
if (md_cart.type == SMB)
|
||||
{
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xa13000, 0xa13001, 0, 0, smbro_prot_r);
|
||||
}
|
||||
|
||||
if (cart_type == SMB2)
|
||||
if (md_cart.type == SMB2)
|
||||
{
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xa13000, 0xa13001, 0, 0, smb2_extra_r);
|
||||
}
|
||||
|
||||
if (cart_type == KAIJU)
|
||||
if (md_cart.type == KAIJU)
|
||||
{
|
||||
memcpy(&ROM[0x400000], &ROM[VIRGIN_COPY_GEN], 0x200000);
|
||||
memcpy(&ROM[0x600000], &ROM[VIRGIN_COPY_GEN], 0x200000);
|
||||
@ -1055,7 +1012,7 @@ static void setup_megadriv_custom_mappers(running_machine *machine)
|
||||
memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x700000, 0x7fffff, 0, 0, kaiju_bank_w);
|
||||
}
|
||||
|
||||
if (cart_type == CHINFIGHT3)
|
||||
if (md_cart.type == CHINFIGHT3)
|
||||
{
|
||||
memcpy(&ROM[0x400000], &ROM[VIRGIN_COPY_GEN], 0x200000);
|
||||
memcpy(&ROM[0x600000], &ROM[VIRGIN_COPY_GEN], 0x200000);
|
||||
@ -1065,7 +1022,7 @@ static void setup_megadriv_custom_mappers(running_machine *machine)
|
||||
memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x600000, 0x6fffff, 0, 0, chifi3_bank_w);
|
||||
}
|
||||
|
||||
if (cart_type == LIONK2)
|
||||
if (md_cart.type == LIONK2)
|
||||
{
|
||||
md_cart.lion2_prot1_data = md_cart.lion2_prot2_data = 0;
|
||||
|
||||
@ -1075,12 +1032,12 @@ static void setup_megadriv_custom_mappers(running_machine *machine)
|
||||
memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x400004, 0x400005, 0, 0, lion2_prot2_w);
|
||||
}
|
||||
|
||||
if (cart_type == BUGSLIFE)
|
||||
if (md_cart.type == BUGSLIFE)
|
||||
{
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xa13000, 0xa13001, 0, 0, bugl_extra_r);
|
||||
}
|
||||
|
||||
if (cart_type == ELFWOR)
|
||||
if (md_cart.type == ELFWOR)
|
||||
{
|
||||
/* It return (0x55 @ 0x400000 OR 0xc9 @ 0x400004) AND (0x0f @ 0x400002 OR 0x18 @ 0x400006). It is probably best to add handlers for all 4 addresses. */
|
||||
|
||||
@ -1090,18 +1047,18 @@ static void setup_megadriv_custom_mappers(running_machine *machine)
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x400006, 0x400007, 0, 0, elfwor_400006_r);
|
||||
}
|
||||
|
||||
if (cart_type == ROCKMANX3)
|
||||
if (md_cart.type == ROCKMANX3)
|
||||
{
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xa13000, 0xa13001, 0, 0, rx3_extra_r);
|
||||
}
|
||||
|
||||
if (cart_type == SBUBBOB)
|
||||
if (md_cart.type == SBUBBOB)
|
||||
{
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x400000, 0x400001, 0, 0, sbub_extra1_r);
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x400002, 0x400003, 0, 0, sbub_extra2_r);
|
||||
}
|
||||
|
||||
if (cart_type == KOF98)
|
||||
if (md_cart.type == KOF98)
|
||||
{
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x480000, 0x480001, 0, 0, kof98_aa_r);
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x4800e0, 0x4800e1, 0, 0, kof98_aa_r);
|
||||
@ -1112,17 +1069,17 @@ static void setup_megadriv_custom_mappers(running_machine *machine)
|
||||
memory_install_read16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x4f8820, 0x4f8821, 0, 0, kof98_00_r);
|
||||
}
|
||||
|
||||
if (cart_type == REALTEC)
|
||||
if (md_cart.type == REALTEC)
|
||||
{
|
||||
/* Realtec mapper!*/
|
||||
md_cart.realtec_bank_addr = md_cart.realtec_bank_size = 0;
|
||||
md_cart.realtec_old_bank_addr = -1;
|
||||
|
||||
memcpy(&ROM[0x400000], &ROM[relocate], 0x80000);
|
||||
memcpy(&ROM[0x400000], &ROM[VIRGIN_COPY_GEN], 0x80000);
|
||||
|
||||
for (mirroraddr = 0; mirroraddr < 0x400000; mirroraddr += 0x2000)
|
||||
{
|
||||
memcpy(ROM + mirroraddr, ROM + relocate + 0x7e000, 0x002000); /* copy last 8kb across the whole rom region */
|
||||
memcpy(ROM + mirroraddr, ROM + VIRGIN_COPY_GEN + 0x7e000, 0x002000); /* copy last 8kb across the whole rom region */
|
||||
}
|
||||
|
||||
memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x400000, 0x400001, 0, 0, realtec_400000_w);
|
||||
@ -1130,25 +1087,25 @@ static void setup_megadriv_custom_mappers(running_machine *machine)
|
||||
memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x404000, 0x404001, 0, 0, realtec_404000_w);
|
||||
}
|
||||
|
||||
if (cart_type == MC_SUP19IN1)
|
||||
if (md_cart.type == MC_SUP19IN1)
|
||||
{
|
||||
memcpy(&ROM[0x400000], &ROM[VIRGIN_COPY_GEN], 0x400000); // allow hard reset to menu
|
||||
memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xa13000, 0xa13039, 0, 0, s19in1_bank);
|
||||
}
|
||||
|
||||
if (cart_type == MC_SUP15IN1)
|
||||
if (md_cart.type == MC_SUP15IN1)
|
||||
{
|
||||
memcpy(&ROM[0x400000], &ROM[VIRGIN_COPY_GEN], 0x200000); // allow hard reset to menu
|
||||
memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xa13000, 0xa13039, 0, 0, s19in1_bank);
|
||||
}
|
||||
|
||||
if (cart_type == MC_12IN1)
|
||||
if (md_cart.type == MC_12IN1)
|
||||
{
|
||||
memcpy(&ROM[0x000000], &ROM[VIRGIN_COPY_GEN], 0x400000); /* default rom */
|
||||
memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xa13000, 0xa1303f, 0, 0, mc_12in1_bank_w);
|
||||
}
|
||||
|
||||
if (cart_type == TOPFIGHTER)
|
||||
if (md_cart.type == TOPFIGHTER)
|
||||
{
|
||||
memcpy(&ROM[0x000000], &ROM[VIRGIN_COPY_GEN], 0x400000); /* default rom */
|
||||
|
||||
@ -1163,32 +1120,92 @@ static void setup_megadriv_custom_mappers(running_machine *machine)
|
||||
memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x700000, 0x7fffff, 0, 0, topfig_bank_w );
|
||||
}
|
||||
|
||||
if (md_cart.type == POKEMON)
|
||||
{
|
||||
/*todo: emulate protection instead
|
||||
0DD19E:47F8
|
||||
0DD1A0:FFF0
|
||||
0DD1A2:4E63
|
||||
0DD46E:4EF8
|
||||
0DD470:0300
|
||||
0DD49C:6002
|
||||
*/
|
||||
|
||||
/*
|
||||
|
||||
you need to return 1 @ 0xa13002 and 0???1f @ 0xa1303E (it does word reads).
|
||||
|
||||
*/
|
||||
UINT16 *ROM16 = (UINT16 *)machine->region("maincpu")->base();
|
||||
|
||||
ROM16[0x0dd19e/2] = 0x47F8;
|
||||
ROM16[0x0dd1a0/2] = 0xFFF0;
|
||||
ROM16[0x0dd1a2/2] = 0x4E63;
|
||||
ROM16[0x0dd46e/2] = 0x4EF8;
|
||||
ROM16[0x0dd470/2] = 0x0300;
|
||||
ROM16[0x0dd49c/2] = 0x6002;
|
||||
}
|
||||
|
||||
if (md_cart.type == POKEMON2)
|
||||
{
|
||||
/*todo: emulate protection instead
|
||||
006036:E000
|
||||
002540:6026
|
||||
001ED0:6026
|
||||
002476:6022
|
||||
|
||||
*/
|
||||
UINT16 *ROM16 = (UINT16 *)machine->region("maincpu")->base();
|
||||
|
||||
ROM16[0x06036/2] = 0xE000;
|
||||
ROM16[0x02540/2] = 0x6026;
|
||||
ROM16[0x01ED0/2] = 0x6026;
|
||||
ROM16[0x02476/2] = 0x6022;
|
||||
|
||||
ROM16[0x7E300/2] = 0x60FE;
|
||||
}
|
||||
|
||||
if (md_cart.type == MULAN)
|
||||
{
|
||||
/*todo: emulate protection instead
|
||||
006036:E000
|
||||
+more?
|
||||
|
||||
*/
|
||||
// ROM[0x01ED0/2] = 0xE000;
|
||||
// ROM[0x02540/2] = 0xE000;
|
||||
|
||||
UINT16 *ROM16 = (UINT16 *)machine->region("maincpu")->base();
|
||||
|
||||
ROM16[0x06036/2] = 0xE000;
|
||||
}
|
||||
|
||||
/* install i2c handlers */
|
||||
if (cart_type == NBA_JAM)
|
||||
if (md_cart.type == NBA_JAM)
|
||||
{
|
||||
md_cart.has_serial_eeprom = 1;
|
||||
memory_install_readwrite16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x200000, 0x200001, 0, 0, nba_jam_eeprom_r, nba_jam_eeprom_w);
|
||||
}
|
||||
|
||||
if (cart_type == WBOY_V)
|
||||
if (md_cart.type == WBOY_V)
|
||||
{
|
||||
md_cart.has_serial_eeprom = 1;
|
||||
memory_install_readwrite16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x200000, 0x200001, 0, 0, wboy_v_eeprom_r, wboy_v_eeprom_w);
|
||||
}
|
||||
|
||||
if (cart_type == NBA_JAM_TE || cart_type == NFL_QB_96 || cart_type == C_SLAM) // same handling but different sizes
|
||||
if (md_cart.type == NBA_JAM_TE || md_cart.type == NFL_QB_96 || md_cart.type == C_SLAM) // same handling but different sizes
|
||||
{
|
||||
md_cart.has_serial_eeprom = 1;
|
||||
memory_install_readwrite16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x200000, 0x200001, 0, 0, nba_jam_te_eeprom_r, nba_jam_te_eeprom_w);
|
||||
}
|
||||
|
||||
if (cart_type == EA_NHLPA)
|
||||
if (md_cart.type == EA_NHLPA)
|
||||
{
|
||||
md_cart.has_serial_eeprom = 1;
|
||||
memory_install_readwrite16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x200000, 0x200001, 0, 0, ea_nhlpa_eeprom_r, ea_nhlpa_eeprom_w);
|
||||
}
|
||||
|
||||
if (cart_type == CODE_MASTERS)
|
||||
if (md_cart.type == CODE_MASTERS || md_cart.type == CM_JCART_SEPROM)
|
||||
{
|
||||
md_cart.has_serial_eeprom = 1;
|
||||
memory_install_write16_handler(cputag_get_address_space(machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x300000, 0x300001, 0, 0, codemasters_eeprom_w);
|
||||
@ -1355,7 +1372,7 @@ static int megadrive_load_nonlist(device_image_interface &image)
|
||||
}
|
||||
#endif
|
||||
md_cart.last_loaded_image_length = length - 512;
|
||||
memcpy(&ROM[VIRGIN_COPY_GEN], &ROM[0x000000], MAX_MD_CART_SIZE); /* store a copy of data for MACHINE_RESET processing */
|
||||
memcpy(&ROM[VIRGIN_COPY_GEN], &ROM[0x000000], MAX_MD_CART_SIZE); /* store a copy of data */
|
||||
|
||||
relocate = 0;
|
||||
|
||||
@ -1391,7 +1408,7 @@ static int megadrive_load_nonlist(device_image_interface &image)
|
||||
}
|
||||
#endif
|
||||
md_cart.last_loaded_image_length = length;
|
||||
memcpy(&ROM[VIRGIN_COPY_GEN], &ROM[0x000000], MAX_MD_CART_SIZE); /* store a copy of data for MACHINE_RESET processing */
|
||||
memcpy(&ROM[VIRGIN_COPY_GEN], &ROM[0x000000], MAX_MD_CART_SIZE); /* store a copy of data */
|
||||
relocate = 0;
|
||||
|
||||
}
|
||||
@ -1414,13 +1431,13 @@ static int megadrive_load_nonlist(device_image_interface &image)
|
||||
#endif
|
||||
}
|
||||
|
||||
memcpy(&ROM[VIRGIN_COPY_GEN], &ROM[0x000000], MAX_MD_CART_SIZE); /* store a copy of data for MACHINE_RESET processing */
|
||||
memcpy(&ROM[VIRGIN_COPY_GEN], &ROM[0x000000], MAX_MD_CART_SIZE); /* store a copy of data */
|
||||
}
|
||||
|
||||
// STEP 2: determine the cart type (to deal with pirate mappers)
|
||||
// STEP 2: determine the cart type (to deal with pirate mappers & eeprom)
|
||||
|
||||
/* Default cartridge type */
|
||||
cart_type = STANDARD;
|
||||
md_cart.type = SEGA_STD;
|
||||
|
||||
/* Detect carts which need additional handlers */
|
||||
{
|
||||
@ -1451,151 +1468,151 @@ static int megadrive_load_nonlist(device_image_interface &image)
|
||||
{
|
||||
case 0x80000:
|
||||
if (!allendianmemcmp(&ROM[0x08c8], &smouse_sig[0], sizeof(smouse_sig)))
|
||||
cart_type = SMOUSE;
|
||||
md_cart.type = SMOUSE;
|
||||
|
||||
if (!allendianmemcmp((char *)&ROM[0x7e30e], "SEGA", 4) ||
|
||||
!allendianmemcmp((char *)&ROM[0x7e100], "SEGA", 4) ||
|
||||
!allendianmemcmp((char *)&ROM[0x7e1e6], "SEGA", 4))
|
||||
cart_type = REALTEC;
|
||||
md_cart.type = REALTEC;
|
||||
|
||||
if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-50396", 10)) // NHLPA Hockey 93
|
||||
cart_type = EA_NHLPA;
|
||||
md_cart.type = EA_NHLPA;
|
||||
|
||||
if (!allendianmemcmp((char *)&ROM[0x0180], "GM MK-1215", 10)) // Evander Holyfield
|
||||
cart_type = WBOY_V;
|
||||
md_cart.type = WBOY_V;
|
||||
|
||||
break;
|
||||
|
||||
case 0xc0000:
|
||||
|
||||
if (!allendianmemcmp((char *)&ROM[0x0180], "GM G-4060 ", 8)) // Wonder Boy V
|
||||
cart_type = WBOY_V;
|
||||
md_cart.type = WBOY_V;
|
||||
|
||||
break;
|
||||
|
||||
case 0x100000:
|
||||
if (!allendianmemcmp(&ROM[0x01b24], &mjlover_sig[0], sizeof(mjlover_sig)))
|
||||
cart_type = MJLOVER;
|
||||
md_cart.type = MJLOVER;
|
||||
|
||||
if (!allendianmemcmp(&ROM[0x03b4], &squir_sig[0], sizeof(squir_sig)))
|
||||
cart_type = SQUIRRELK;
|
||||
md_cart.type = SQUIRRELK;
|
||||
|
||||
if (!allendianmemcmp(&ROM[0xee0d0], &bugsl_sig[0], sizeof(bugsl_sig)))
|
||||
cart_type = BUGSLIFE;
|
||||
md_cart.type = BUGSLIFE;
|
||||
|
||||
if (!allendianmemcmp((char *)&ROM[0x0172], "GAME : ELF WOR", 14))
|
||||
cart_type = ELFWOR;
|
||||
md_cart.type = ELFWOR;
|
||||
|
||||
if (!allendianmemcmp(&ROM[0x123e4], &sbub_sig[0], sizeof(sbub_sig)))
|
||||
cart_type = SBUBBOB;
|
||||
md_cart.type = SBUBBOB;
|
||||
|
||||
if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-50176", 10)) // Rings of Power
|
||||
cart_type = EA_NHLPA;
|
||||
md_cart.type = EA_NHLPA;
|
||||
|
||||
if (!allendianmemcmp((char *)&ROM[0x0180], "MK 00001211-00", 14)) // Sports Talk Baseball
|
||||
cart_type = WBOY_V;
|
||||
md_cart.type = WBOY_V;
|
||||
|
||||
if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-120096-", 12)) // Micro Machines 2
|
||||
cart_type = CODE_MASTERS;
|
||||
md_cart.type = CODE_MASTERS;
|
||||
|
||||
if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-120146-", 12)) // Brian Lara Cricket 96 / Shane Wayne Cricket 96
|
||||
cart_type = CODE_MASTERS;
|
||||
md_cart.type = CODE_MASTERS;
|
||||
|
||||
if (!allendianmemcmp((char *)&ROM[0x0190], "OJKRPTBVFCA ", 0x10)) // Micro Machines '96 / Military TODO: better way to recognize these?
|
||||
cart_type = CODE_MASTERS;
|
||||
md_cart.type = CODE_MASTERS;
|
||||
break;
|
||||
|
||||
case 0x200000:
|
||||
if (!allendianmemcmp(&ROM[0x18c6], &lk3_sig[0], sizeof(lk3_sig)))
|
||||
cart_type = LIONK3;
|
||||
md_cart.type = LIONK3;
|
||||
|
||||
if (!allendianmemcmp(&ROM[0x220], &sdk_sig[0], sizeof(sdk_sig)))
|
||||
cart_type = SKINGKONG;
|
||||
md_cart.type = SKINGKONG;
|
||||
|
||||
if (!allendianmemcmp(&ROM[0xce560], &redcliff_sig[0], sizeof(redcliff_sig)))
|
||||
cart_type = REDCLIFF;
|
||||
md_cart.type = REDCLIFF;
|
||||
|
||||
if (!allendianmemcmp(&ROM[0xc8cb0], &smb_sig[0], sizeof(smb_sig)))
|
||||
cart_type = SMB;
|
||||
md_cart.type = SMB;
|
||||
|
||||
if (!allendianmemcmp(&ROM[0xf24d6], &smb2_sig[0], sizeof(smb2_sig)))
|
||||
cart_type = SMB2;
|
||||
md_cart.type = SMB2;
|
||||
|
||||
if (!allendianmemcmp(&ROM[0x674e], &kaiju_sig[0], sizeof(kaiju_sig)))
|
||||
cart_type = KAIJU;
|
||||
md_cart.type = KAIJU;
|
||||
|
||||
if (!allendianmemcmp(&ROM[0x1780], &chifi3_sig[0], sizeof(chifi3_sig)))
|
||||
cart_type = CHINFIGHT3;
|
||||
md_cart.type = CHINFIGHT3;
|
||||
|
||||
if (!allendianmemcmp(&ROM[0x03c2], &lionk2_sig[0], sizeof(lionk2_sig)))
|
||||
cart_type = LIONK2;
|
||||
md_cart.type = LIONK2;
|
||||
|
||||
if (!allendianmemcmp(&ROM[0xc8b90], &rx3_sig[0], sizeof(rx3_sig)))
|
||||
cart_type = ROCKMANX3;
|
||||
md_cart.type = ROCKMANX3;
|
||||
|
||||
if (!allendianmemcmp(&ROM[0x56ae2], &kof98_sig[0], sizeof(kof98_sig)))
|
||||
cart_type = KOF98;
|
||||
md_cart.type = KOF98;
|
||||
|
||||
if (!allendianmemcmp(&ROM[0x17bb2], &s15in1_sig[0], sizeof(s15in1_sig)))
|
||||
cart_type = MC_SUP15IN1;
|
||||
md_cart.type = MC_SUP15IN1;
|
||||
|
||||
if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-081326 ", 12)) // NBA Jam
|
||||
cart_type = NBA_JAM;
|
||||
md_cart.type = NBA_JAM;
|
||||
|
||||
if (!allendianmemcmp((char *)&ROM[0x0180], "GM MK-1228", 10)) // Greatest Heavyweight of the Ring
|
||||
cart_type = WBOY_V;
|
||||
md_cart.type = WBOY_V;
|
||||
|
||||
if ((!allendianmemcmp((char *)&ROM[0x0180], "GM T-12046", 10)) || // Mega Man
|
||||
(!allendianmemcmp((char *)&ROM[0x0180], "GM T-12053", 10) && !allendianmemcmp(&ROM[0x18e], &rockman_sig[0], sizeof(rockman_sig)))) // / Rock Man (EEPROM version)
|
||||
cart_type = WBOY_V;
|
||||
md_cart.type = WBOY_V;
|
||||
|
||||
break;
|
||||
|
||||
case 0x200005:
|
||||
if (!allendianmemcmp(&ROM[0xce564], &redcl_en_sig[0], sizeof(redcliff_sig)))
|
||||
cart_type = REDCL_EN;
|
||||
md_cart.type = REDCL_EN;
|
||||
break;
|
||||
|
||||
case 0x300000:
|
||||
if (!allendianmemcmp(&ROM[0x220], &sdk_sig[0], sizeof(sdk_sig)))
|
||||
cart_type = SDK99;
|
||||
md_cart.type = SDK99;
|
||||
|
||||
if (!allendianmemcmp(&ROM[0x1fd0d2], &kof99_sig[0], sizeof(kof99_sig)))
|
||||
cart_type = KOF99;
|
||||
md_cart.type = KOF99;
|
||||
|
||||
if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-81406", 10)) // NBA Jam TE
|
||||
cart_type = NBA_JAM_TE;
|
||||
md_cart.type = NBA_JAM_TE;
|
||||
|
||||
if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-081276 ", 12)) // NFL Quarterback Club
|
||||
cart_type = NBA_JAM_TE;
|
||||
md_cart.type = NBA_JAM_TE;
|
||||
|
||||
break;
|
||||
|
||||
case 0x400000:
|
||||
if (!allendianmemcmp(&ROM[0x3c031c], &radica_sig[0], sizeof(radica_sig)) ||
|
||||
!allendianmemcmp(&ROM[0x3f031c], &radica_sig[0], sizeof(radica_sig))) // ssf+gng + radica vol1
|
||||
cart_type = RADICA;
|
||||
md_cart.type = RADICA;
|
||||
|
||||
if (!allendianmemcmp(&ROM[0x028460], &soulb_sig[0], sizeof(soulb_sig)))
|
||||
cart_type = SOULBLAD;
|
||||
md_cart.type = SOULBLAD;
|
||||
|
||||
if (!allendianmemcmp(&ROM[0x1e700], &s19in1_sig[0], sizeof(s19in1_sig)))
|
||||
cart_type = MC_SUP19IN1;
|
||||
md_cart.type = MC_SUP19IN1;
|
||||
|
||||
if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-081586-", 12)) // NFL Quarterback Club 96
|
||||
cart_type = NFL_QB_96;
|
||||
md_cart.type = NFL_QB_96;
|
||||
|
||||
if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-081576 ", 12)) // College Slam
|
||||
cart_type = C_SLAM;
|
||||
md_cart.type = C_SLAM;
|
||||
|
||||
if (!allendianmemcmp((char *)&ROM[0x0180], "GM T-81476", 10)) // Big Hurt Baseball
|
||||
cart_type = C_SLAM;
|
||||
md_cart.type = C_SLAM;
|
||||
|
||||
break;
|
||||
|
||||
case 0x500000:
|
||||
if (!allendianmemcmp((char *)&ROM[0x0120], "SUPER STREET FIGHTER2 ", 22))
|
||||
cart_type = SSF2;
|
||||
md_cart.type = SSF2;
|
||||
break;
|
||||
|
||||
default:
|
||||
@ -1603,7 +1620,7 @@ static int megadrive_load_nonlist(device_image_interface &image)
|
||||
}
|
||||
}
|
||||
|
||||
logerror("cart type: %d\n", cart_type);
|
||||
logerror("cart type: %d\n", md_cart.type);
|
||||
|
||||
// STEP 3: install memory handlers for this type of cart
|
||||
setup_megadriv_custom_mappers(image.device().machine);
|
||||
@ -1682,13 +1699,9 @@ static int megadrive_load_nonlist(device_image_interface &image)
|
||||
|
||||
static int megadrive_load_list(device_image_interface &image)
|
||||
{
|
||||
unsigned char *ROM;
|
||||
int length;
|
||||
int pcb_id;
|
||||
UINT8 *ROM = image.device().machine->region("maincpu")->base();
|
||||
UINT32 length = image.get_software_region_length("rom");
|
||||
const char *pcb_name;
|
||||
|
||||
length = image.get_software_region_length("rom");
|
||||
ROM = image.device().machine->region("maincpu")->base();
|
||||
memcpy(ROM, image.get_software_region("rom"), length);
|
||||
|
||||
md_cart.last_loaded_image_length = length;
|
||||
@ -1701,26 +1714,28 @@ static int megadrive_load_list(device_image_interface &image)
|
||||
md_cart.sram_readonly = 0;
|
||||
md_cart.sram_active = 0;
|
||||
|
||||
if ((pcb_name = image.get_feature("pcb")) == NULL)
|
||||
pcb_id = STD_ROM;
|
||||
if ((pcb_name = image.get_feature("pcb_type")) == NULL)
|
||||
md_cart.type = SEGA_STD;
|
||||
else
|
||||
pcb_id = md_get_pcb_id(pcb_name);
|
||||
md_cart.type = md_get_pcb_id(pcb_name);
|
||||
|
||||
switch (pcb_id)
|
||||
memcpy(&ROM[VIRGIN_COPY_GEN], &ROM[0x000000], MAX_MD_CART_SIZE); /* store a copy of data */
|
||||
setup_megadriv_custom_mappers(image.device().machine);
|
||||
|
||||
switch (md_cart.type)
|
||||
{
|
||||
/* Sega PCB */
|
||||
case SEGA_6584A:
|
||||
case SEGA_EEPROM: // still used by Game Toshokan, to be fixed
|
||||
fatalerror("Need Serial EEPROM emulation");
|
||||
break;
|
||||
case SEGA_5921:
|
||||
case SEGA_6278A:
|
||||
case SEGA_SRAM:
|
||||
md_cart.sram_start = 0x200000;
|
||||
md_cart.sram_end = md_cart.sram_start + 0x3fff;
|
||||
md_cart.sram_detected = 1;
|
||||
megadriv_backupram = (UINT16*) (ROM + (md_cart.sram_start & 0x3fffff));
|
||||
md_cart.sram_active = 1;
|
||||
break;
|
||||
case SEGA_6658A:
|
||||
case SEGA_FRAM:
|
||||
md_cart.sram_start = 0x200000;
|
||||
md_cart.sram_end = md_cart.sram_start + 0x3ff;
|
||||
md_cart.sram_detected = 1;
|
||||
@ -1728,8 +1743,7 @@ static int megadrive_load_list(device_image_interface &image)
|
||||
memory_install_read16_handler(cputag_get_address_space(image.device().machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xa130f0, 0xa130f1, 0, 0, sega_6658a_reg_r);
|
||||
memory_install_write16_handler(cputag_get_address_space(image.device().machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0xa130f0, 0xa130f1, 0, 0, sega_6658a_reg_w);
|
||||
break;
|
||||
|
||||
/* Codemasters PCB (J-Carts) */
|
||||
/* Codemasters PCB (J-Carts) */
|
||||
case CM_JCART:
|
||||
memory_install_read16_handler(cputag_get_address_space(image.device().machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x38fffe, 0x38ffff, 0, 0, jcart_ctrl_r);
|
||||
memory_install_write16_handler(cputag_get_address_space(image.device().machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x38fffe, 0x38ffff, 0, 0, jcart_ctrl_w);
|
||||
@ -1737,7 +1751,6 @@ static int megadrive_load_list(device_image_interface &image)
|
||||
case CM_JCART_SEPROM:
|
||||
memory_install_read16_handler(cputag_get_address_space(image.device().machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x38fffe, 0x38ffff, 0, 0, jcart_ctrl_r);
|
||||
memory_install_write16_handler(cputag_get_address_space(image.device().machine, "maincpu", ADDRESS_SPACE_PROGRAM), 0x38fffe, 0x38ffff, 0, 0, jcart_ctrl_w);
|
||||
/* TODO add SEPROM part */
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1749,7 +1762,7 @@ static int megadrive_load_list(device_image_interface &image)
|
||||
|
||||
static DEVICE_IMAGE_LOAD( genesis_cart )
|
||||
{
|
||||
cart_type = STANDARD;
|
||||
md_cart.type = SEGA_STD;
|
||||
|
||||
if (image.software_entry() == NULL)
|
||||
return megadrive_load_nonlist(image);
|
||||
@ -1817,7 +1830,7 @@ static DEVICE_IMAGE_LOAD( _32x_cart )
|
||||
|
||||
auto_free(image.device().machine, temp_copy);
|
||||
|
||||
cart_type = NBA_JAM_TE;
|
||||
md_cart.type = NBA_JAM_TE;
|
||||
|
||||
return IMAGE_INIT_PASS;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user