SMS: fix Dinobasher & Spacegun boot, fix palette for sms games which use the tms9918 & blank screen on savestate load.
This commit is contained in:
parent
936b9f616f
commit
5b0a0153a8
|
@ -177,23 +177,16 @@ void system_manage_sram(UINT8 */*sram*/, INT32 /*slot*/, INT32 /*mode*/)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Notes:
|
// Notes:
|
||||||
// X-prefix = not working, possibly a different mapper(?)
|
// Super Arkanoid / Woody Pop - no input (needs paddle controller)
|
||||||
// Sangokushi 3 (Kor) is broke. maybe its a korean 8k mapper?
|
// Back to the Future II - bottom of the screen is corrupt
|
||||||
// Super Arkanoid - no input??
|
// Space Gun - won't boot (needs lightgun)
|
||||||
// Dinobasher - weird!
|
|
||||||
// Earthworm Jim - crashes after title
|
|
||||||
// GP Rider - goes mental in-game
|
|
||||||
// Jang Pung 3 - goes mental @ boot
|
|
||||||
// Space Gun - won't boot
|
|
||||||
// Shadow Dancer - won't boot
|
|
||||||
// Street Fighter II - reboots @ game start
|
// Street Fighter II - reboots @ game start
|
||||||
// Spiderman - Sinister Six - won't boot
|
|
||||||
// The Best Game Collection - don't work
|
// The Best Game Collection - don't work
|
||||||
|
|
||||||
// GG:
|
// GG:
|
||||||
// Terminator 1 and 2 - weird issues, weird graphics at boot
|
// Terminator 1 and 2 - weird issues in game, weird graphics at boot
|
||||||
// Surf ninjas - weird graphics at boot
|
// Surf ninjas - weird graphics at boot
|
||||||
// Tarzan - freezes at game start
|
// Tarzan - weird graphics at bottom of the screen
|
||||||
|
|
||||||
static INT32 load_rom()
|
static INT32 load_rom()
|
||||||
{
|
{
|
||||||
|
@ -334,26 +327,27 @@ INT32 SMSInit()
|
||||||
static void system_load_state()
|
static void system_load_state()
|
||||||
{
|
{
|
||||||
if(cart.mapper == MAPPER_MSX || cart.mapper == MAPPER_MSX_NEMESIS || cart.mapper == MAPPER_KOREA8K) {
|
if(cart.mapper == MAPPER_MSX || cart.mapper == MAPPER_MSX_NEMESIS || cart.mapper == MAPPER_KOREA8K) {
|
||||||
sms_mapper8k_w(3, cart.fcr[3]);
|
if (cart.fcr[3]) sms_mapper8k_w(3, cart.fcr[3]);
|
||||||
sms_mapper8k_w(2, cart.fcr[2]);
|
if (cart.fcr[2]) sms_mapper8k_w(2, cart.fcr[2]);
|
||||||
sms_mapper8k_w(1, cart.fcr[1]);
|
if (cart.fcr[1]) sms_mapper8k_w(1, cart.fcr[1]);
|
||||||
sms_mapper8k_w(0, cart.fcr[0]);
|
if (cart.fcr[0]) sms_mapper8k_w(0, cart.fcr[0]);
|
||||||
} else {
|
} else {
|
||||||
sms_mapper_w(3, cart.fcr[3]);
|
sms_mapper_w(3, cart.fcr[3]);
|
||||||
sms_mapper_w(2, cart.fcr[2]);
|
sms_mapper_w(2, cart.fcr[2]);
|
||||||
sms_mapper_w(1, cart.fcr[1]);
|
sms_mapper_w(1, cart.fcr[1]);
|
||||||
sms_mapper_w(0, cart.fcr[0]);
|
sms_mapper_w(0, cart.fcr[0]);
|
||||||
|
|
||||||
/* Force full pattern cache update */
|
if (!smsvdp_tmsmode) {
|
||||||
bg_list_index = 0x200;
|
/* Force full pattern cache update when not in a TMS9918 mode */
|
||||||
for(INT32 i = 0; i < 0x200; i++) {
|
bg_list_index = 0x200;
|
||||||
bg_name_list[i] = i;
|
for(INT32 i = 0; i < 0x200; i++) {
|
||||||
bg_name_dirty[i] = (UINT8)-1;
|
bg_name_list[i] = i;
|
||||||
|
bg_name_dirty[i] = (UINT8)-1;
|
||||||
|
}
|
||||||
|
/* Restore palette */
|
||||||
|
for(INT32 i = 0; i < PALETTE_SIZE; i++)
|
||||||
|
palette_sync(i, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Restore palette */
|
|
||||||
for(INT32 i = 0; i < PALETTE_SIZE; i++)
|
|
||||||
palette_sync(i, 1);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -450,7 +444,7 @@ static struct BurnRomInfo sms_4pakRomDesc[] = {
|
||||||
STD_ROM_PICK(sms_4pak)
|
STD_ROM_PICK(sms_4pak)
|
||||||
STD_ROM_FN(sms_4pak)
|
STD_ROM_FN(sms_4pak)
|
||||||
|
|
||||||
struct BurnDriver BurnDrvsms_4pak = {
|
struct BurnDriverD BurnDrvsms_4pak = {
|
||||||
"sms_4pak", NULL, NULL, NULL, "1995",
|
"sms_4pak", NULL, NULL, NULL, "1995",
|
||||||
"4 PAK All Action (Aus)\0", NULL, "HES", "Sega Master System",
|
"4 PAK All Action (Aus)\0", NULL, "HES", "Sega Master System",
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
|
@ -470,7 +464,7 @@ static struct BurnRomInfo sms_20em1RomDesc[] = {
|
||||||
STD_ROM_PICK(sms_20em1)
|
STD_ROM_PICK(sms_20em1)
|
||||||
STD_ROM_FN(sms_20em1)
|
STD_ROM_FN(sms_20em1)
|
||||||
|
|
||||||
struct BurnDriver BurnDrvsms_20em1 = {
|
struct BurnDriverD BurnDrvsms_20em1 = {
|
||||||
"sms_20em1", NULL, NULL, NULL, "1995",
|
"sms_20em1", NULL, NULL, NULL, "1995",
|
||||||
"20 em 1 (Bra)\0", NULL, "Tec Toy", "Sega Master System",
|
"20 em 1 (Bra)\0", NULL, "Tec Toy", "Sega Master System",
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
|
@ -492,7 +486,7 @@ STD_ROM_FN(sms_3dragon)
|
||||||
|
|
||||||
struct BurnDriver BurnDrvsms_3dragon = {
|
struct BurnDriver BurnDrvsms_3dragon = {
|
||||||
"sms_3dragon", NULL, NULL, NULL, "19??",
|
"sms_3dragon", NULL, NULL, NULL, "19??",
|
||||||
"The Three Dragon Story (Kor)\0", NULL, "Zemina?", "Sega Master System",
|
"The Three Dragon Story (Kor)\0", NULL, "Zemina", "Sega Master System",
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
BDF_GAME_WORKING, 2, HARDWARE_SEGA_MASTER_SYSTEM, GBF_MISC, 0,
|
BDF_GAME_WORKING, 2, HARDWARE_SEGA_MASTER_SYSTEM, GBF_MISC, 0,
|
||||||
SMSGetZipName, sms_3dragonRomInfo, sms_3dragonRomName, NULL, NULL, SMSInputInfo, SMSDIPInfo,
|
SMSGetZipName, sms_3dragonRomInfo, sms_3dragonRomName, NULL, NULL, SMSInputInfo, SMSDIPInfo,
|
||||||
|
@ -1710,7 +1704,7 @@ static struct BurnRomInfo sms_hicom3aRomDesc[] = {
|
||||||
STD_ROM_PICK(sms_hicom3a)
|
STD_ROM_PICK(sms_hicom3a)
|
||||||
STD_ROM_FN(sms_hicom3a)
|
STD_ROM_FN(sms_hicom3a)
|
||||||
|
|
||||||
struct BurnDriver BurnDrvsms_hicom3a = {
|
struct BurnDriverD BurnDrvsms_hicom3a = {
|
||||||
"sms_hicom3a", NULL, NULL, NULL, "1990",
|
"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",
|
"The Best Game Collection - Hang On + Pit Pot + Spy vs Spy (Kor)\0", NULL, "Hi-Com", "Sega Master System",
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
|
@ -1730,7 +1724,7 @@ static struct BurnRomInfo sms_hicom3bRomDesc[] = {
|
||||||
STD_ROM_PICK(sms_hicom3b)
|
STD_ROM_PICK(sms_hicom3b)
|
||||||
STD_ROM_FN(sms_hicom3b)
|
STD_ROM_FN(sms_hicom3b)
|
||||||
|
|
||||||
struct BurnDriver BurnDrvsms_hicom3b = {
|
struct BurnDriverD BurnDrvsms_hicom3b = {
|
||||||
"sms_hicom3b", "sms_hicom3a", NULL, NULL, "1990",
|
"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",
|
"The Best Game Collection - Great Baseball + Great Soccer + Super Tennis (Kor)\0", NULL, "Hi-Com", "Sega Master System",
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
|
@ -1750,7 +1744,7 @@ static struct BurnRomInfo sms_hicom3cRomDesc[] = {
|
||||||
STD_ROM_PICK(sms_hicom3c)
|
STD_ROM_PICK(sms_hicom3c)
|
||||||
STD_ROM_FN(sms_hicom3c)
|
STD_ROM_FN(sms_hicom3c)
|
||||||
|
|
||||||
struct BurnDriver BurnDrvsms_hicom3c = {
|
struct BurnDriverD BurnDrvsms_hicom3c = {
|
||||||
"sms_hicom3c", "sms_hicom3a", NULL, NULL, "1990",
|
"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",
|
"The Best Game Collection - Teddy Boy Blues + Pit-Pot + Astro Flash (Kor)\0", NULL, "Hi-Com", "Sega Master System",
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
|
@ -1770,7 +1764,7 @@ static struct BurnRomInfo sms_hicom3dRomDesc[] = {
|
||||||
STD_ROM_PICK(sms_hicom3d)
|
STD_ROM_PICK(sms_hicom3d)
|
||||||
STD_ROM_FN(sms_hicom3d)
|
STD_ROM_FN(sms_hicom3d)
|
||||||
|
|
||||||
struct BurnDriver BurnDrvsms_hicom3d = {
|
struct BurnDriverD BurnDrvsms_hicom3d = {
|
||||||
"sms_hicom3d", "sms_hicom3a", NULL, NULL, "1990",
|
"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",
|
"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,
|
NULL, NULL, NULL, NULL,
|
||||||
|
@ -1790,7 +1784,7 @@ static struct BurnRomInfo sms_hicom3eRomDesc[] = {
|
||||||
STD_ROM_PICK(sms_hicom3e)
|
STD_ROM_PICK(sms_hicom3e)
|
||||||
STD_ROM_FN(sms_hicom3e)
|
STD_ROM_FN(sms_hicom3e)
|
||||||
|
|
||||||
struct BurnDriver BurnDrvsms_hicom3e = {
|
struct BurnDriverD BurnDrvsms_hicom3e = {
|
||||||
"sms_hicom3e", "sms_hicom3a", NULL, NULL, "1990",
|
"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",
|
"The Best Game Collection - Ghost House + Teddy Boy Blues + Seishun Scandal (Kor)\0", NULL, "Hi-Com", "Sega Master System",
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
|
@ -1810,7 +1804,7 @@ static struct BurnRomInfo sms_hicom3fRomDesc[] = {
|
||||||
STD_ROM_PICK(sms_hicom3f)
|
STD_ROM_PICK(sms_hicom3f)
|
||||||
STD_ROM_FN(sms_hicom3f)
|
STD_ROM_FN(sms_hicom3f)
|
||||||
|
|
||||||
struct BurnDriver BurnDrvsms_hicom3f = {
|
struct BurnDriverD BurnDrvsms_hicom3f = {
|
||||||
"sms_hicom3f", "sms_hicom3a", NULL, NULL, "1990",
|
"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",
|
"The Best Game Collection - Satellite-7 + Great Baseball + Seishun Scandal (Kor)\0", NULL, "Hi-Com", "Sega Master System",
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
|
@ -1830,7 +1824,7 @@ static struct BurnRomInfo sms_hicom8aRomDesc[] = {
|
||||||
STD_ROM_PICK(sms_hicom8a)
|
STD_ROM_PICK(sms_hicom8a)
|
||||||
STD_ROM_FN(sms_hicom8a)
|
STD_ROM_FN(sms_hicom8a)
|
||||||
|
|
||||||
struct BurnDriver BurnDrvsms_hicom8a = {
|
struct BurnDriverD BurnDrvsms_hicom8a = {
|
||||||
"sms_hicom8a", "sms_hicom3a", NULL, NULL, "1990",
|
"sms_hicom8a", "sms_hicom3a", NULL, NULL, "1990",
|
||||||
"The Best Game Collection (Kor, 8 in 1 Ver. A)\0", NULL, "Hi-Com", "Sega Master System",
|
"The Best Game Collection (Kor, 8 in 1 Ver. A)\0", NULL, "Hi-Com", "Sega Master System",
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
|
@ -1850,7 +1844,7 @@ static struct BurnRomInfo sms_hicom8bRomDesc[] = {
|
||||||
STD_ROM_PICK(sms_hicom8b)
|
STD_ROM_PICK(sms_hicom8b)
|
||||||
STD_ROM_FN(sms_hicom8b)
|
STD_ROM_FN(sms_hicom8b)
|
||||||
|
|
||||||
struct BurnDriver BurnDrvsms_hicom8b = {
|
struct BurnDriverD BurnDrvsms_hicom8b = {
|
||||||
"sms_hicom8b", "sms_hicom3a", NULL, NULL, "1990",
|
"sms_hicom8b", "sms_hicom3a", NULL, NULL, "1990",
|
||||||
"The Best Game Collection (Kor, 8 in 1 Ver. B)\0", NULL, "Hi-Com", "Sega Master System",
|
"The Best Game Collection (Kor, 8 in 1 Ver. B)\0", NULL, "Hi-Com", "Sega Master System",
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
|
@ -1870,7 +1864,7 @@ static struct BurnRomInfo sms_hicom8cRomDesc[] = {
|
||||||
STD_ROM_PICK(sms_hicom8c)
|
STD_ROM_PICK(sms_hicom8c)
|
||||||
STD_ROM_FN(sms_hicom8c)
|
STD_ROM_FN(sms_hicom8c)
|
||||||
|
|
||||||
struct BurnDriver BurnDrvsms_hicom8c = {
|
struct BurnDriverD BurnDrvsms_hicom8c = {
|
||||||
"sms_hicom8c", "sms_hicom3a", NULL, NULL, "1990",
|
"sms_hicom8c", "sms_hicom3a", NULL, NULL, "1990",
|
||||||
"The Best Game Collection (Kor, 8 in 1 Ver. C)\0", NULL, "Hi-Com", "Sega Master System",
|
"The Best Game Collection (Kor, 8 in 1 Ver. C)\0", NULL, "Hi-Com", "Sega Master System",
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
|
@ -3114,7 +3108,7 @@ struct BurnDriver BurnDrvsms_dinobash = {
|
||||||
"sms_dinobash", NULL, NULL, NULL, "19??",
|
"sms_dinobash", NULL, NULL, NULL, "19??",
|
||||||
"Dinobasher Starring Bignose the Caveman (Euro, Prototype)\0", NULL, "Codemasters", "Sega Master System",
|
"Dinobasher Starring Bignose the Caveman (Euro, Prototype)\0", NULL, "Codemasters", "Sega Master System",
|
||||||
NULL, NULL, NULL, NULL,
|
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_CODIES | HARDWARE_SMS_DISPLAY_PAL, GBF_MISC, 0,
|
||||||
SMSGetZipName, sms_dinobashRomInfo, sms_dinobashRomName, NULL, NULL, SMSInputInfo, SMSDIPInfo,
|
SMSGetZipName, sms_dinobashRomInfo, sms_dinobashRomName, NULL, NULL, SMSInputInfo, SMSDIPInfo,
|
||||||
SMSInit, SMSExit, SMSFrame, SMSDraw, SMSScan, &SMSPaletteRecalc, 0x1000,
|
SMSInit, SMSExit, SMSFrame, SMSDraw, SMSScan, &SMSPaletteRecalc, 0x1000,
|
||||||
256, 192, 4, 3
|
256, 192, 4, 3
|
||||||
|
@ -5712,7 +5706,7 @@ STD_ROM_FN(sms_knightm2)
|
||||||
|
|
||||||
struct BurnDriver BurnDrvsms_knightm2 = {
|
struct BurnDriver BurnDrvsms_knightm2 = {
|
||||||
"sms_knightm2", NULL, NULL, NULL, "199?",
|
"sms_knightm2", NULL, NULL, NULL, "199?",
|
||||||
"Knightmare II - The Maze of Galious (Kor)\0", NULL, "Zemina?", "Sega Master System",
|
"Knightmare II - The Maze of Galious (Kor)\0", NULL, "Zemina", "Sega Master System",
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
BDF_GAME_WORKING, 2, HARDWARE_SEGA_MASTER_SYSTEM | HARDWARE_SMS_MAPPER_MSX, GBF_MISC, 0,
|
BDF_GAME_WORKING, 2, HARDWARE_SEGA_MASTER_SYSTEM | HARDWARE_SMS_MAPPER_MSX, GBF_MISC, 0,
|
||||||
SMSGetZipName, sms_knightm2RomInfo, sms_knightm2RomName, NULL, NULL, SMSInputInfo, SMSDIPInfo,
|
SMSGetZipName, sms_knightm2RomInfo, sms_knightm2RomName, NULL, NULL, SMSInputInfo, SMSDIPInfo,
|
||||||
|
|
|
@ -222,6 +222,11 @@ void sms_reset(void)
|
||||||
if (IS_SMS)
|
if (IS_SMS)
|
||||||
sms.wram[0] = 0xA8; // BIOS usually sets this. (memory control register)
|
sms.wram[0] = 0xA8; // BIOS usually sets this. (memory control register)
|
||||||
|
|
||||||
|
cart.fcr[0] = 0x00;
|
||||||
|
cart.fcr[1] = 0x00;
|
||||||
|
cart.fcr[2] = 0x01;
|
||||||
|
cart.fcr[3] = 0x00;
|
||||||
|
|
||||||
ZetMapMemory(cart.rom + 0x0000, 0x0000, 0x03ff, MAP_ROM);
|
ZetMapMemory(cart.rom + 0x0000, 0x0000, 0x03ff, MAP_ROM);
|
||||||
ZetMapMemory(cart.rom + 0x0400, 0x0400, 0x3fff, MAP_ROM);
|
ZetMapMemory(cart.rom + 0x0400, 0x0400, 0x3fff, MAP_ROM);
|
||||||
ZetMapMemory(cart.rom + 0x4000, 0x4000, 0x7fff, MAP_ROM);
|
ZetMapMemory(cart.rom + 0x4000, 0x4000, 0x7fff, MAP_ROM);
|
||||||
|
@ -241,15 +246,11 @@ void sms_reset(void)
|
||||||
ZetMapMemory((UINT8 *)&sms.wram + 0x0000, 0xc000, 0xdfff, MAP_RAM);
|
ZetMapMemory((UINT8 *)&sms.wram + 0x0000, 0xc000, 0xdfff, MAP_RAM);
|
||||||
ZetMapMemory((UINT8 *)&sms.wram + 0x0000, 0xe000, 0xffff, MAP_RAM);
|
ZetMapMemory((UINT8 *)&sms.wram + 0x0000, 0xe000, 0xffff, MAP_RAM);
|
||||||
memset(&sms.wram[1], 0xf0, sizeof(sms.wram) - 1); // this fixes a few korean games
|
memset(&sms.wram[1], 0xf0, sizeof(sms.wram) - 1); // this fixes a few korean games
|
||||||
|
cart.fcr[2] = 0x00;
|
||||||
}
|
}
|
||||||
ZetReset();
|
ZetReset();
|
||||||
ZetClose();
|
ZetClose();
|
||||||
|
|
||||||
cart.fcr[0] = 0x00;
|
|
||||||
cart.fcr[1] = 0x00;
|
|
||||||
cart.fcr[2] = 0x01;
|
|
||||||
cart.fcr[3] = 0x00;
|
|
||||||
|
|
||||||
switch (cart.mapper)
|
switch (cart.mapper)
|
||||||
{
|
{
|
||||||
case MAPPER_MSX_NEMESIS: {
|
case MAPPER_MSX_NEMESIS: {
|
||||||
|
@ -277,6 +278,7 @@ void sms_mapper8k_w(INT32 address, UINT8 data) // WIP
|
||||||
|
|
||||||
/* Save frame control register data */
|
/* Save frame control register data */
|
||||||
cart.fcr[address & 3] = data;
|
cart.fcr[address & 3] = data;
|
||||||
|
//bprintf(0, _T("pof(%X)a%X = %X,"), poffset, address, data);
|
||||||
|
|
||||||
/* 4 x 8k banks */
|
/* 4 x 8k banks */
|
||||||
switch (address & 3)
|
switch (address & 3)
|
||||||
|
@ -327,6 +329,8 @@ void sms_mapper_w(INT32 address, UINT8 data)
|
||||||
|
|
||||||
case 1: // page 0
|
case 1: // page 0
|
||||||
ZetMapMemory(cart.rom + poffset, 0x0000, 0x3fff, MAP_ROM);
|
ZetMapMemory(cart.rom + poffset, 0x0000, 0x3fff, MAP_ROM);
|
||||||
|
if(cart.mapper != MAPPER_CODIES) // first 1k is in the Sega mapper
|
||||||
|
ZetMapMemory(cart.rom + 0x0000, 0x0000, 0x03ff, MAP_ROM);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: // page 1
|
case 2: // page 1
|
||||||
|
|
|
@ -14,6 +14,11 @@ static const UINT8 tms_crom[] =
|
||||||
0x04, 0x33, 0x15, 0x3F
|
0x04, 0x33, 0x15, 0x3F
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static UINT32 TMS9928A_palette[16] = {
|
||||||
|
0x000000, 0x000000, 0x21c842, 0x5edc78, 0x5455ed, 0x7d76fc, 0xd4524d, 0x42ebf5,
|
||||||
|
0xfc5554, 0xff7978, 0xd4c154, 0xe6ce80, 0x21b03b, 0xc95bba, 0xcccccc, 0xffffff
|
||||||
|
};
|
||||||
|
|
||||||
/* Mark a pattern as dirty */
|
/* Mark a pattern as dirty */
|
||||||
#define MARK_BG_DIRTY(addr) \
|
#define MARK_BG_DIRTY(addr) \
|
||||||
{ \
|
{ \
|
||||||
|
@ -29,7 +34,7 @@ static const UINT8 tms_crom[] =
|
||||||
|
|
||||||
/* VDP context */
|
/* VDP context */
|
||||||
vdp_t vdp;
|
vdp_t vdp;
|
||||||
|
UINT32 smsvdp_tmsmode;
|
||||||
|
|
||||||
/* Initialize VDP emulation */
|
/* Initialize VDP emulation */
|
||||||
void vdp_init(void)
|
void vdp_init(void)
|
||||||
|
@ -86,7 +91,8 @@ void viewport_check(void)
|
||||||
{
|
{
|
||||||
if(m4)
|
if(m4)
|
||||||
{
|
{
|
||||||
/* Restore SMS palette */
|
smsvdp_tmsmode = 0;
|
||||||
|
/* Restore SMS palette */
|
||||||
for(i = 0; i < PALETTE_SIZE; i++)
|
for(i = 0; i < PALETTE_SIZE; i++)
|
||||||
{
|
{
|
||||||
palette_sync(i, 1);
|
palette_sync(i, 1);
|
||||||
|
@ -94,26 +100,30 @@ void viewport_check(void)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
smsvdp_tmsmode = 1;
|
||||||
/* Load TMS9918 palette */
|
/* Load TMS9918 palette */
|
||||||
for(i = 0; i < PALETTE_SIZE; i++)
|
for(i = 0; i < PALETTE_SIZE; i++)
|
||||||
{
|
{
|
||||||
INT32 r, g, b;
|
INT32 r, g, b;
|
||||||
|
|
||||||
r = (tms_crom[i & 0x0F] >> 0) & 3;
|
/*r = (tms_crom[i & 0x0F] >> 0) & 3;
|
||||||
g = (tms_crom[i & 0x0F] >> 2) & 3;
|
g = (tms_crom[i & 0x0F] >> 2) & 3;
|
||||||
b = (tms_crom[i & 0x0F] >> 4) & 3;
|
b = (tms_crom[i & 0x0F] >> 4) & 3;
|
||||||
|
|
||||||
r = sms_cram_expand_table[r];
|
r = sms_cram_expand_table[r];
|
||||||
g = sms_cram_expand_table[g];
|
g = sms_cram_expand_table[g];
|
||||||
b = sms_cram_expand_table[b];
|
b = sms_cram_expand_table[b];*/
|
||||||
|
r = TMS9928A_palette[i & 0x0f] >> 16;
|
||||||
bitmap.pal.color[i][0] = r;
|
g = TMS9928A_palette[i & 0x0f] >> 8;
|
||||||
bitmap.pal.color[i][1] = g;
|
b = TMS9928A_palette[i & 0x0f] >> 0;
|
||||||
bitmap.pal.color[i][2] = b;
|
|
||||||
|
bitmap.pal.color[i][0] = r;
|
||||||
pixel[i] = MAKE_PIXEL(r, g, b);
|
bitmap.pal.color[i][1] = g;
|
||||||
|
bitmap.pal.color[i][2] = b;
|
||||||
bitmap.pal.dirty[i] = bitmap.pal.update = 1;
|
|
||||||
|
pixel[i] = MAKE_PIXEL(r, g, b);
|
||||||
|
|
||||||
|
bitmap.pal.dirty[i] = bitmap.pal.update = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -49,6 +49,7 @@ typedef struct
|
||||||
|
|
||||||
/* Global data */
|
/* Global data */
|
||||||
extern vdp_t vdp;
|
extern vdp_t vdp;
|
||||||
|
extern UINT32 smsvdp_tmsmode;
|
||||||
|
|
||||||
/* Function prototypes */
|
/* Function prototypes */
|
||||||
void vdp_init(void);
|
void vdp_init(void);
|
||||||
|
|
Loading…
Reference in New Issue