fix glitching sprites in Star Fighter (v1) and Spark Man (Suna8), fix savestates revisited
This commit is contained in:
parent
5ce218d58c
commit
b77eeecd72
|
@ -14,6 +14,8 @@ extern "C" {
|
||||||
|
|
||||||
Needs cleaned. Badly.
|
Needs cleaned. Badly.
|
||||||
Missing Brick Zone
|
Missing Brick Zone
|
||||||
|
Bugs:
|
||||||
|
Star Fighter (v1) - the first boss has some broken tiles
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static UINT8 *AllMem;
|
static UINT8 *AllMem;
|
||||||
|
@ -57,9 +59,11 @@ static UINT8 m_palettebank = 0;
|
||||||
static UINT8 m_spritebank = 0;
|
static UINT8 m_spritebank = 0;
|
||||||
static UINT8 m_spritebank_latch = 0;
|
static UINT8 m_spritebank_latch = 0;
|
||||||
static UINT8 m_rombank_latch = 0;
|
static UINT8 m_rombank_latch = 0;
|
||||||
|
static UINT8 m_rambank = 0;
|
||||||
static UINT8 disable_mainram_write = 0;
|
static UINT8 disable_mainram_write = 0;
|
||||||
static UINT8 protection_val = 0;
|
static UINT8 protection_val = 0;
|
||||||
static UINT8 hardhead_ip = 0;
|
static UINT8 hardhead_ip = 0;
|
||||||
|
static UINT8 Sparkman = 0, Hardhead2 = 0;
|
||||||
|
|
||||||
static UINT8 DrvJoy1[8];
|
static UINT8 DrvJoy1[8];
|
||||||
static UINT8 DrvJoy2[8];
|
static UINT8 DrvJoy2[8];
|
||||||
|
@ -640,7 +644,8 @@ static void __fastcall hardhea2_write(UINT16 address, UINT8 data)
|
||||||
switch (address)
|
switch (address)
|
||||||
{
|
{
|
||||||
case 0xc200:
|
case 0xc200:
|
||||||
ZetMapMemory(DrvSprRAM + ((data & 0x02) ? 0x2000 : 0), 0xe000, 0xffff, ZET_RAM);
|
m_spritebank = ((data & 0x02) ? 1 : 0);
|
||||||
|
ZetMapMemory(DrvSprRAM + (m_spritebank * 0x2000), 0xe000, 0xffff, ZET_RAM);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case 0xc280:
|
case 0xc280:
|
||||||
|
@ -669,22 +674,26 @@ static void __fastcall hardhea2_write(UINT16 address, UINT8 data)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case 0xc508:
|
case 0xc508:
|
||||||
|
m_spritebank = 0;
|
||||||
ZetMapMemory(DrvSprRAM + 0x0000, 0xe000, 0xffff, ZET_RAM);
|
ZetMapMemory(DrvSprRAM + 0x0000, 0xe000, 0xffff, ZET_RAM);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case 0xc50f:
|
case 0xc50f:
|
||||||
|
m_spritebank = 1;
|
||||||
ZetMapMemory(DrvSprRAM + 0x2000, 0xe000, 0xffff, ZET_RAM);
|
ZetMapMemory(DrvSprRAM + 0x2000, 0xe000, 0xffff, ZET_RAM);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case 0xc507:
|
case 0xc507:
|
||||||
case 0xc556:
|
case 0xc556:
|
||||||
case 0xc560:
|
case 0xc560:
|
||||||
|
m_rambank = 1;
|
||||||
ZetMapMemory(DrvZ80RAM0 + 0x1800, 0xc800, 0xdfff, ZET_RAM);
|
ZetMapMemory(DrvZ80RAM0 + 0x1800, 0xc800, 0xdfff, ZET_RAM);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case 0xc522:
|
case 0xc522:
|
||||||
case 0xc528:
|
case 0xc528:
|
||||||
case 0xc533:
|
case 0xc533:
|
||||||
|
m_rambank = 0;
|
||||||
ZetMapMemory(DrvZ80RAM0 + 0x0000, 0xc800, 0xdfff, ZET_RAM);
|
ZetMapMemory(DrvZ80RAM0 + 0x0000, 0xc800, 0xdfff, ZET_RAM);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1274,6 +1283,7 @@ static void CommonDoReset(INT32 clear_ram)
|
||||||
m_spritebank = 0;
|
m_spritebank = 0;
|
||||||
m_spritebank_latch = 0;
|
m_spritebank_latch = 0;
|
||||||
m_rombank_latch = 0;
|
m_rombank_latch = 0;
|
||||||
|
m_rambank = 0;
|
||||||
disable_mainram_write = 0;
|
disable_mainram_write = 0;
|
||||||
protection_val = 0;
|
protection_val = 0;
|
||||||
hardhead_ip = 0;
|
hardhead_ip = 0;
|
||||||
|
@ -1439,6 +1449,8 @@ static INT32 SparkmanInit()
|
||||||
|
|
||||||
HardheadDoReset();
|
HardheadDoReset();
|
||||||
|
|
||||||
|
Sparkman = 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1605,6 +1617,8 @@ static INT32 HardheadExit()
|
||||||
|
|
||||||
BurnFree(AllMem);
|
BurnFree(AllMem);
|
||||||
|
|
||||||
|
Sparkman = 0;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1758,6 +1772,7 @@ static INT32 Hardhea2Init()
|
||||||
ZetMapArea(0x0000, 0x7fff, 0, DrvZ80ROM0);
|
ZetMapArea(0x0000, 0x7fff, 0, DrvZ80ROM0);
|
||||||
ZetMapArea(0x0000, 0x7fff, 2, DrvZ80Decrypted, DrvZ80ROM0);
|
ZetMapArea(0x0000, 0x7fff, 2, DrvZ80Decrypted, DrvZ80ROM0);
|
||||||
bankswitch(0); // ?
|
bankswitch(0); // ?
|
||||||
|
m_rambank = 0;
|
||||||
ZetMapMemory(DrvPalRAM, 0xc600, 0xc7ff, ZET_ROM);
|
ZetMapMemory(DrvPalRAM, 0xc600, 0xc7ff, ZET_ROM);
|
||||||
ZetMapMemory(DrvZ80RAM0, 0xc800, 0xdfff, ZET_RAM);
|
ZetMapMemory(DrvZ80RAM0, 0xc800, 0xdfff, ZET_RAM);
|
||||||
ZetMapMemory(DrvSprRAM, 0xe000, 0xffff, ZET_RAM);
|
ZetMapMemory(DrvSprRAM, 0xe000, 0xffff, ZET_RAM);
|
||||||
|
@ -1800,6 +1815,8 @@ static INT32 Hardhea2Init()
|
||||||
|
|
||||||
Hardhea2DoReset();
|
Hardhea2DoReset();
|
||||||
|
|
||||||
|
Hardhead2 = 1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1813,6 +1830,8 @@ static INT32 Hardhea2Exit()
|
||||||
|
|
||||||
BurnFree(AllMem);
|
BurnFree(AllMem);
|
||||||
|
|
||||||
|
Hardhead2 = 0;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2310,7 +2329,7 @@ static INT32 SparkmanFrame() // & starfigh
|
||||||
|
|
||||||
INT32 nCyclesSegment;
|
INT32 nCyclesSegment;
|
||||||
INT32 nInterleave = 256;
|
INT32 nInterleave = 256;
|
||||||
INT32 nCyclesTotal[2] = { 6000000 / 60, 6000000 / 60 };
|
INT32 nCyclesTotal[2] = { (Sparkman ? 6000000 : 9000000) / 60, 6000000 / 60 };
|
||||||
INT32 nCyclesDone[2] = { 0, 0 };
|
INT32 nCyclesDone[2] = { 0, 0 };
|
||||||
|
|
||||||
vblank = 0;
|
vblank = 0;
|
||||||
|
@ -2321,7 +2340,12 @@ static INT32 SparkmanFrame() // & starfigh
|
||||||
nCyclesSegment = nCyclesTotal[0] / nInterleave;
|
nCyclesSegment = nCyclesTotal[0] / nInterleave;
|
||||||
nCyclesDone[0] += ZetRun(nCyclesSegment);
|
nCyclesDone[0] += ZetRun(nCyclesSegment);
|
||||||
if (i == 112 && *nmi_enable) ZetNmi();
|
if (i == 112 && *nmi_enable) ZetNmi();
|
||||||
if (i == 240) { vblank = 1; ZetSetIRQLine(0, ZET_IRQSTATUS_AUTO); }
|
if (i == (Sparkman ? 250 : 255)) { // any other value and the sprites glitch (MAME uses 240 here, hmmm)
|
||||||
|
vblank = 1;
|
||||||
|
ZetSetIRQLine(0, ZET_IRQSTATUS_ACK);
|
||||||
|
ZetRun(100);
|
||||||
|
ZetSetIRQLine(0, ZET_IRQSTATUS_NONE);
|
||||||
|
}
|
||||||
ZetClose();
|
ZetClose();
|
||||||
|
|
||||||
ZetOpen(1);
|
ZetOpen(1);
|
||||||
|
@ -2371,7 +2395,7 @@ static INT32 DrvScan(INT32 nAction, INT32 *pnMin)
|
||||||
if (nAction & ACB_DRIVER_DATA) {
|
if (nAction & ACB_DRIVER_DATA) {
|
||||||
ZetScan(nAction); // Scan Z80
|
ZetScan(nAction); // Scan Z80
|
||||||
|
|
||||||
if (strstr(BurnDrvGetTextA(DRV_NAME), "hardhea2")) {
|
if (Hardhead2) {
|
||||||
DACScan(nAction, pnMin);
|
DACScan(nAction, pnMin);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2388,15 +2412,26 @@ static INT32 DrvScan(INT32 nAction, INT32 *pnMin)
|
||||||
SCAN_VAR(m_spritebank);
|
SCAN_VAR(m_spritebank);
|
||||||
SCAN_VAR(m_spritebank_latch);
|
SCAN_VAR(m_spritebank_latch);
|
||||||
SCAN_VAR(m_rombank_latch);
|
SCAN_VAR(m_rombank_latch);
|
||||||
|
SCAN_VAR(m_rambank);
|
||||||
SCAN_VAR(disable_mainram_write);
|
SCAN_VAR(disable_mainram_write);
|
||||||
SCAN_VAR(protection_val);
|
SCAN_VAR(protection_val);
|
||||||
SCAN_VAR(hardhead_ip);
|
SCAN_VAR(hardhead_ip);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nAction & ACB_WRITE) {
|
if (nAction & ACB_WRITE) {
|
||||||
// todo: set banks here. (hardhead2, sparkman)
|
|
||||||
ZetOpen(0);
|
ZetOpen(0);
|
||||||
bankswitch(*mainbank);
|
bankswitch(*mainbank);
|
||||||
|
ZetMapMemory(DrvSprRAM + (m_spritebank * 0x2000), 0xe000, 0xffff, ZET_RAM);
|
||||||
|
if (Sparkman) {
|
||||||
|
if (disable_mainram_write) {
|
||||||
|
ZetUnmapMemory(0xc800,0xdfff, ZET_WRITE);
|
||||||
|
} else {
|
||||||
|
ZetMapMemory(DrvZ80RAM0,0xc800,0xdfff, ZET_WRITE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (Hardhead2) {
|
||||||
|
ZetMapMemory(DrvZ80RAM0 + (m_rambank * 0x1800), 0xc800, 0xdfff, ZET_RAM);
|
||||||
|
}
|
||||||
ZetClose();
|
ZetClose();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2505,7 +2540,7 @@ STD_ROM_FN(hardhea2)
|
||||||
|
|
||||||
struct BurnDriver BurnDrvHardhea2 = {
|
struct BurnDriver BurnDrvHardhea2 = {
|
||||||
"hardhea2", NULL, NULL, NULL, "1991",
|
"hardhea2", NULL, NULL, NULL, "1991",
|
||||||
"Hard Head 2 (v2.0)\0", "Savestates may fail.", "SunA", "Miscellaneous",
|
"Hard Head 2 (v2.0)\0", NULL, "SunA", "Miscellaneous",
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
BDF_GAME_WORKING, 2, HARDWARE_MISC_POST90S, GBF_MISC, 0,
|
BDF_GAME_WORKING, 2, HARDWARE_MISC_POST90S, GBF_MISC, 0,
|
||||||
NULL, hardhea2RomInfo, hardhea2RomName, NULL, NULL, DrvInputInfo, Hardhea2DIPInfo,
|
NULL, hardhea2RomInfo, hardhea2RomName, NULL, NULL, DrvInputInfo, Hardhea2DIPInfo,
|
||||||
|
@ -2544,7 +2579,7 @@ STD_ROM_FN(sparkman)
|
||||||
|
|
||||||
struct BurnDriver BurnDrvSparkman = {
|
struct BurnDriver BurnDrvSparkman = {
|
||||||
"sparkman", NULL, NULL, NULL, "1989",
|
"sparkman", NULL, NULL, NULL, "1989",
|
||||||
"Spark Man (v2.0, set 1)\0", "Savestates may fail.", "SunA", "Miscellaneous",
|
"Spark Man (v2.0, set 1)\0", NULL, "SunA", "Miscellaneous",
|
||||||
NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL,
|
||||||
BDF_GAME_WORKING, 2, HARDWARE_MISC_PRE90S, GBF_MISC, 0,
|
BDF_GAME_WORKING, 2, HARDWARE_MISC_PRE90S, GBF_MISC, 0,
|
||||||
NULL, sparkmanRomInfo, sparkmanRomName, NULL, NULL, SparkmanInputInfo, SparkmanDIPInfo,
|
NULL, sparkmanRomInfo, sparkmanRomName, NULL, NULL, SparkmanInputInfo, SparkmanDIPInfo,
|
||||||
|
|
Loading…
Reference in New Issue