SMS: add mapper for korean 3 in 1 and 8 in 1 carts
This commit is contained in:
parent
63bb982c97
commit
bdce6b0fe9
|
@ -258,6 +258,11 @@ static INT32 load_rom()
|
|||
break;
|
||||
}
|
||||
|
||||
case HARDWARE_SMS_MAPPER_XIN1: {
|
||||
cart.mapper = MAPPER_XIN1;
|
||||
break;
|
||||
}
|
||||
|
||||
default: {
|
||||
cart.mapper = MAPPER_SEGA;
|
||||
break;
|
||||
|
@ -339,7 +344,7 @@ static void system_load_state()
|
|||
if (cart.fcr[2]) sms_mapper8kvirt_w(2, cart.fcr[2]);
|
||||
if (cart.fcr[1]) sms_mapper8kvirt_w(1, cart.fcr[1]);
|
||||
if (cart.fcr[0]) sms_mapper8kvirt_w(0, cart.fcr[0]);
|
||||
} else {
|
||||
} else if (cart.mapper != MAPPER_XIN1 && cart.mapper != MAPPER_NONE) {
|
||||
sms_mapper_w(3, cart.fcr[3]);
|
||||
sms_mapper_w(2, cart.fcr[2]);
|
||||
sms_mapper_w(1, cart.fcr[1]);
|
||||
|
@ -357,7 +362,7 @@ static void system_load_state()
|
|||
for(INT32 i = 0; i < PALETTE_SIZE; i++)
|
||||
palette_sync(i, 1);
|
||||
}
|
||||
viewport_check(); // maybe! - fixes 4pak all action sstates!
|
||||
viewport_check(); // fixes 4pak all action sstate screen corruption
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1714,11 +1719,11 @@ static struct BurnRomInfo sms_hicom3aRomDesc[] = {
|
|||
STD_ROM_PICK(sms_hicom3a)
|
||||
STD_ROM_FN(sms_hicom3a)
|
||||
|
||||
struct BurnDriverD BurnDrvsms_hicom3a = {
|
||||
struct BurnDriver BurnDrvsms_hicom3a = {
|
||||
"sms_hicom3a", NULL, NULL, NULL, "1990",
|
||||
"The Best Game Collection - Hang On + Pit Pot + Spy vs Spy (Kor)\0", NULL, "Hi-Com", "Sega Master System",
|
||||
NULL, NULL, NULL, NULL,
|
||||
BDF_GAME_WORKING, 2, HARDWARE_SEGA_MASTER_SYSTEM, GBF_MISC, 0,
|
||||
BDF_GAME_WORKING, 2, HARDWARE_SEGA_MASTER_SYSTEM | HARDWARE_SMS_MAPPER_XIN1, GBF_MISC, 0,
|
||||
SMSGetZipName, sms_hicom3aRomInfo, sms_hicom3aRomName, NULL, NULL, SMSInputInfo, SMSDIPInfo,
|
||||
SMSInit, SMSExit, SMSFrame, SMSDraw, SMSScan, &SMSPaletteRecalc, 0x1000,
|
||||
256, 192, 4, 3
|
||||
|
@ -1734,11 +1739,11 @@ static struct BurnRomInfo sms_hicom3bRomDesc[] = {
|
|||
STD_ROM_PICK(sms_hicom3b)
|
||||
STD_ROM_FN(sms_hicom3b)
|
||||
|
||||
struct BurnDriverD BurnDrvsms_hicom3b = {
|
||||
struct BurnDriver BurnDrvsms_hicom3b = {
|
||||
"sms_hicom3b", "sms_hicom3a", NULL, NULL, "1990",
|
||||
"The Best Game Collection - Great Baseball + Great Soccer + Super Tennis (Kor)\0", NULL, "Hi-Com", "Sega Master System",
|
||||
NULL, NULL, NULL, NULL,
|
||||
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SEGA_MASTER_SYSTEM, GBF_MISC, 0,
|
||||
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SEGA_MASTER_SYSTEM | HARDWARE_SMS_MAPPER_XIN1, GBF_MISC, 0,
|
||||
SMSGetZipName, sms_hicom3bRomInfo, sms_hicom3bRomName, NULL, NULL, SMSInputInfo, SMSDIPInfo,
|
||||
SMSInit, SMSExit, SMSFrame, SMSDraw, SMSScan, &SMSPaletteRecalc, 0x1000,
|
||||
256, 192, 4, 3
|
||||
|
@ -1754,11 +1759,11 @@ static struct BurnRomInfo sms_hicom3cRomDesc[] = {
|
|||
STD_ROM_PICK(sms_hicom3c)
|
||||
STD_ROM_FN(sms_hicom3c)
|
||||
|
||||
struct BurnDriverD BurnDrvsms_hicom3c = {
|
||||
struct BurnDriver BurnDrvsms_hicom3c = {
|
||||
"sms_hicom3c", "sms_hicom3a", NULL, NULL, "1990",
|
||||
"The Best Game Collection - Teddy Boy Blues + Pit-Pot + Astro Flash (Kor)\0", NULL, "Hi-Com", "Sega Master System",
|
||||
NULL, NULL, NULL, NULL,
|
||||
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SEGA_MASTER_SYSTEM, GBF_MISC, 0,
|
||||
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SEGA_MASTER_SYSTEM | HARDWARE_SMS_MAPPER_XIN1, GBF_MISC, 0,
|
||||
SMSGetZipName, sms_hicom3cRomInfo, sms_hicom3cRomName, NULL, NULL, SMSInputInfo, SMSDIPInfo,
|
||||
SMSInit, SMSExit, SMSFrame, SMSDraw, SMSScan, &SMSPaletteRecalc, 0x1000,
|
||||
256, 192, 4, 3
|
||||
|
@ -1774,11 +1779,11 @@ static struct BurnRomInfo sms_hicom3dRomDesc[] = {
|
|||
STD_ROM_PICK(sms_hicom3d)
|
||||
STD_ROM_FN(sms_hicom3d)
|
||||
|
||||
struct BurnDriverD BurnDrvsms_hicom3d = {
|
||||
struct BurnDriver BurnDrvsms_hicom3d = {
|
||||
"sms_hicom3d", "sms_hicom3a", NULL, NULL, "1990",
|
||||
"The Best Game Collection - Teddy Boy Blues + Great Soccer + Comical Machine Gun Joe (Kor)\0", NULL, "Hi-Com", "Sega Master System",
|
||||
NULL, NULL, NULL, NULL,
|
||||
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SEGA_MASTER_SYSTEM, GBF_MISC, 0,
|
||||
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SEGA_MASTER_SYSTEM | HARDWARE_SMS_MAPPER_XIN1, GBF_MISC, 0,
|
||||
SMSGetZipName, sms_hicom3dRomInfo, sms_hicom3dRomName, NULL, NULL, SMSInputInfo, SMSDIPInfo,
|
||||
SMSInit, SMSExit, SMSFrame, SMSDraw, SMSScan, &SMSPaletteRecalc, 0x1000,
|
||||
256, 192, 4, 3
|
||||
|
@ -1794,11 +1799,11 @@ static struct BurnRomInfo sms_hicom3eRomDesc[] = {
|
|||
STD_ROM_PICK(sms_hicom3e)
|
||||
STD_ROM_FN(sms_hicom3e)
|
||||
|
||||
struct BurnDriverD BurnDrvsms_hicom3e = {
|
||||
struct BurnDriver BurnDrvsms_hicom3e = {
|
||||
"sms_hicom3e", "sms_hicom3a", NULL, NULL, "1990",
|
||||
"The Best Game Collection - Ghost House + Teddy Boy Blues + Seishun Scandal (Kor)\0", NULL, "Hi-Com", "Sega Master System",
|
||||
NULL, NULL, NULL, NULL,
|
||||
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SEGA_MASTER_SYSTEM, GBF_MISC, 0,
|
||||
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SEGA_MASTER_SYSTEM | HARDWARE_SMS_MAPPER_XIN1, GBF_MISC, 0,
|
||||
SMSGetZipName, sms_hicom3eRomInfo, sms_hicom3eRomName, NULL, NULL, SMSInputInfo, SMSDIPInfo,
|
||||
SMSInit, SMSExit, SMSFrame, SMSDraw, SMSScan, &SMSPaletteRecalc, 0x1000,
|
||||
256, 192, 4, 3
|
||||
|
@ -1814,11 +1819,11 @@ static struct BurnRomInfo sms_hicom3fRomDesc[] = {
|
|||
STD_ROM_PICK(sms_hicom3f)
|
||||
STD_ROM_FN(sms_hicom3f)
|
||||
|
||||
struct BurnDriverD BurnDrvsms_hicom3f = {
|
||||
struct BurnDriver BurnDrvsms_hicom3f = {
|
||||
"sms_hicom3f", "sms_hicom3a", NULL, NULL, "1990",
|
||||
"The Best Game Collection - Satellite-7 + Great Baseball + Seishun Scandal (Kor)\0", NULL, "Hi-Com", "Sega Master System",
|
||||
NULL, NULL, NULL, NULL,
|
||||
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SEGA_MASTER_SYSTEM, GBF_MISC, 0,
|
||||
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SEGA_MASTER_SYSTEM | HARDWARE_SMS_MAPPER_XIN1, GBF_MISC, 0,
|
||||
SMSGetZipName, sms_hicom3fRomInfo, sms_hicom3fRomName, NULL, NULL, SMSInputInfo, SMSDIPInfo,
|
||||
SMSInit, SMSExit, SMSFrame, SMSDraw, SMSScan, &SMSPaletteRecalc, 0x1000,
|
||||
256, 192, 4, 3
|
||||
|
@ -1834,11 +1839,11 @@ static struct BurnRomInfo sms_hicom8aRomDesc[] = {
|
|||
STD_ROM_PICK(sms_hicom8a)
|
||||
STD_ROM_FN(sms_hicom8a)
|
||||
|
||||
struct BurnDriverD BurnDrvsms_hicom8a = {
|
||||
struct BurnDriver BurnDrvsms_hicom8a = {
|
||||
"sms_hicom8a", "sms_hicom3a", NULL, NULL, "1990",
|
||||
"The Best Game Collection (Kor, 8 in 1 Ver. A)\0", NULL, "Hi-Com", "Sega Master System",
|
||||
NULL, NULL, NULL, NULL,
|
||||
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SEGA_MASTER_SYSTEM, GBF_MISC, 0,
|
||||
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SEGA_MASTER_SYSTEM | HARDWARE_SMS_MAPPER_XIN1, GBF_MISC, 0,
|
||||
SMSGetZipName, sms_hicom8aRomInfo, sms_hicom8aRomName, NULL, NULL, SMSInputInfo, SMSDIPInfo,
|
||||
SMSInit, SMSExit, SMSFrame, SMSDraw, SMSScan, &SMSPaletteRecalc, 0x1000,
|
||||
256, 192, 4, 3
|
||||
|
@ -1854,11 +1859,11 @@ static struct BurnRomInfo sms_hicom8bRomDesc[] = {
|
|||
STD_ROM_PICK(sms_hicom8b)
|
||||
STD_ROM_FN(sms_hicom8b)
|
||||
|
||||
struct BurnDriverD BurnDrvsms_hicom8b = {
|
||||
struct BurnDriver BurnDrvsms_hicom8b = {
|
||||
"sms_hicom8b", "sms_hicom3a", NULL, NULL, "1990",
|
||||
"The Best Game Collection (Kor, 8 in 1 Ver. B)\0", NULL, "Hi-Com", "Sega Master System",
|
||||
NULL, NULL, NULL, NULL,
|
||||
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SEGA_MASTER_SYSTEM, GBF_MISC, 0,
|
||||
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SEGA_MASTER_SYSTEM | HARDWARE_SMS_MAPPER_XIN1, GBF_MISC, 0,
|
||||
SMSGetZipName, sms_hicom8bRomInfo, sms_hicom8bRomName, NULL, NULL, SMSInputInfo, SMSDIPInfo,
|
||||
SMSInit, SMSExit, SMSFrame, SMSDraw, SMSScan, &SMSPaletteRecalc, 0x1000,
|
||||
256, 192, 4, 3
|
||||
|
@ -1874,11 +1879,11 @@ static struct BurnRomInfo sms_hicom8cRomDesc[] = {
|
|||
STD_ROM_PICK(sms_hicom8c)
|
||||
STD_ROM_FN(sms_hicom8c)
|
||||
|
||||
struct BurnDriverD BurnDrvsms_hicom8c = {
|
||||
struct BurnDriver BurnDrvsms_hicom8c = {
|
||||
"sms_hicom8c", "sms_hicom3a", NULL, NULL, "1990",
|
||||
"The Best Game Collection (Kor, 8 in 1 Ver. C)\0", NULL, "Hi-Com", "Sega Master System",
|
||||
NULL, NULL, NULL, NULL,
|
||||
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SEGA_MASTER_SYSTEM, GBF_MISC, 0,
|
||||
BDF_GAME_WORKING | BDF_CLONE, 2, HARDWARE_SEGA_MASTER_SYSTEM | HARDWARE_SMS_MAPPER_XIN1, GBF_MISC, 0,
|
||||
SMSGetZipName, sms_hicom8cRomInfo, sms_hicom8cRomName, NULL, NULL, SMSInputInfo, SMSDIPInfo,
|
||||
SMSInit, SMSExit, SMSFrame, SMSDraw, SMSScan, &SMSPaletteRecalc, 0x1000,
|
||||
256, 192, 4, 3
|
||||
|
|
|
@ -87,6 +87,30 @@ void __fastcall writemem_mapper_4pak(UINT16 offset, UINT8 data)
|
|||
sms.wram[offset & 0x1fff] = data;
|
||||
}
|
||||
|
||||
void __fastcall writemem_mapper_xin1(UINT16 offset, UINT8 data)
|
||||
{
|
||||
if (offset == 0xFFFF) {
|
||||
sms.wram[0x1fff] = data;
|
||||
cart.fcr[0] = data % (cart.pages * 2);
|
||||
return;
|
||||
}
|
||||
|
||||
sms.wram[offset & 0x1fff] = data;
|
||||
}
|
||||
|
||||
UINT8 __fastcall readmem_mapper_xin1(UINT16 offset) // HiCom Xin1
|
||||
{
|
||||
if(offset >= 0xc000 && offset <= 0xffff)
|
||||
return sms.wram[offset & 0x1fff];
|
||||
else
|
||||
if (offset >= 0x8000) {
|
||||
return cart.rom[offset & 0x3fff];
|
||||
}
|
||||
|
||||
return cart.rom[(cart.fcr[0] * 0x8000) + offset];
|
||||
}
|
||||
|
||||
|
||||
void __fastcall writemem_mapper_korea8k(UINT16 offset, UINT8 data)
|
||||
{
|
||||
if (offset == 0x4000) {
|
||||
|
@ -199,6 +223,12 @@ void sms_init(void)
|
|||
bprintf(0, _T("4PAK All Action\n"));
|
||||
ZetSetWriteHandler(writemem_mapper_4pak);
|
||||
}
|
||||
else if (cart.mapper == MAPPER_XIN1)
|
||||
{
|
||||
bprintf(0, _T("Hi Com Xin1\n"));
|
||||
ZetSetWriteHandler(writemem_mapper_xin1);
|
||||
ZetSetReadHandler(readmem_mapper_xin1);
|
||||
}
|
||||
else {
|
||||
bprintf(0, _T("Sega\n"));
|
||||
ZetSetWriteHandler(writemem_mapper_sega);
|
||||
|
@ -286,6 +316,10 @@ void sms_reset(void)
|
|||
korean8kmap8000_9fff = cart.rom + 0x8000;
|
||||
korean8kmapa000_bfff = cart.rom + 0xa000;
|
||||
cart.fcr[2] = 0x00;
|
||||
} else
|
||||
if (cart.mapper == MAPPER_XIN1) {
|
||||
// HiCom Xin1 Carts
|
||||
// Nothing here (uses virtual mapping, see readmem/writemem_mapper_xin1())
|
||||
} else {
|
||||
ZetMapMemory(cart.rom + 0x0000, 0x0000, 0x03ff, MAP_ROM);
|
||||
ZetMapMemory(cart.rom + 0x0400, 0x0400, 0x3fff, MAP_ROM);
|
||||
|
@ -298,7 +332,7 @@ void sms_reset(void)
|
|||
ZetMapMemory((UINT8 *)&sms.wram + 0x0000, 0xc000, 0xdfff, MAP_RAM);
|
||||
ZetMapMemory((UINT8 *)&sms.wram + 0x0000, 0xe000, 0xffff, MAP_RAM);
|
||||
} else
|
||||
if(cart.mapper == MAPPER_SEGA || cart.mapper == MAPPER_KOREA8K) {
|
||||
if(cart.mapper == MAPPER_SEGA || cart.mapper == MAPPER_KOREA8K || cart.mapper == MAPPER_XIN1) {
|
||||
ZetMapMemory((UINT8 *)&sms.wram + 0x0000, 0xc000, 0xdfff, MAP_RAM);
|
||||
ZetMapMemory((UINT8 *)&dummy_write, 0x0000, 0xbfff, MAP_WRITE);
|
||||
ZetMapMemory((UINT8 *)&sms.wram + 0x0000, 0xe000, 0xffff, MAP_READ);
|
||||
|
@ -396,6 +430,7 @@ void sms_mapper_w(INT32 address, UINT8 data)
|
|||
{
|
||||
/* Calculate ROM page index */
|
||||
UINT32 poffset = (data % cart.pages) << 14;
|
||||
//bprintf(0, _T("address[%X] pof(%X) data[%X],"), address, poffset, data);
|
||||
|
||||
/* Save frame control register data */
|
||||
cart.fcr[address & 3] = data;
|
||||
|
@ -420,7 +455,7 @@ void sms_mapper_w(INT32 address, UINT8 data)
|
|||
|
||||
case 1: // page 0
|
||||
ZetMapMemory(cart.rom + poffset, 0x0000, 0x3fff, MAP_ROM);
|
||||
if(cart.mapper != MAPPER_CODIES && cart.mapper != MAPPER_4PAK) // first 1k is in the Sega mapper
|
||||
if(cart.mapper != MAPPER_CODIES && cart.mapper != MAPPER_4PAK && cart.mapper != MAPPER_XIN1) // first 1k is in the Sega mapper
|
||||
ZetMapMemory(cart.rom + 0x0000, 0x0000, 0x03ff, MAP_ROM);
|
||||
break;
|
||||
|
||||
|
|
|
@ -17,7 +17,8 @@ enum {
|
|||
MAPPER_MSX_NEMESIS = 4,
|
||||
MAPPER_KOREA = 5,
|
||||
MAPPER_KOREA8K = 6,
|
||||
MAPPER_4PAK = 7
|
||||
MAPPER_4PAK = 7,
|
||||
MAPPER_XIN1 = 8
|
||||
};
|
||||
|
||||
enum {
|
||||
|
|
Loading…
Reference in New Issue