diff --git a/src/burn/drv/pgm/d_pgm.cpp b/src/burn/drv/pgm/d_pgm.cpp index 9cbb33053..62535ee3a 100644 --- a/src/burn/drv/pgm/d_pgm.cpp +++ b/src/burn/drv/pgm/d_pgm.cpp @@ -4301,6 +4301,7 @@ static INT32 ddp3Init() { pPgmInitCallback = pgm_decrypt_py2k2; pPgmProtCallback = install_protection_asic27a_ddp3; // simulation + pgm_cave_refresh = 1; return pgmInit(); } @@ -4452,6 +4453,7 @@ static INT32 ddp3blkInit() { pPgmInitCallback = pgm_decrypt_py2k2; pPgmProtCallback = install_protection_asic27a_ddp3; // simulation + pgm_cave_refresh = 1; INT32 nRet = pgmInit(); diff --git a/src/burn/drv/pgm/pgm.h b/src/burn/drv/pgm/pgm.h index 5927233ee..085929488 100644 --- a/src/burn/drv/pgm/pgm.h +++ b/src/burn/drv/pgm/pgm.h @@ -54,6 +54,7 @@ extern void (*pPgmProtCallback)(); extern INT32 nPGMDisableIRQ4; extern INT32 nPGMArm7Type; extern UINT32 nPgmAsicRegionHackAddress; +extern INT32 pgm_cave_refresh; INT32 pgmInit(); INT32 pgmExit(); diff --git a/src/burn/drv/pgm/pgm_run.cpp b/src/burn/drv/pgm/pgm_run.cpp index 9080c8fec..b29b322aa 100644 --- a/src/burn/drv/pgm/pgm_run.cpp +++ b/src/burn/drv/pgm/pgm_run.cpp @@ -59,6 +59,8 @@ INT32 nPGMDisableIRQ4 = 0; INT32 nPGMArm7Type = 0; UINT32 nPgmAsicRegionHackAddress = 0; +INT32 pgm_cave_refresh = 0; + #define Z80_FREQ 8468000 #define M68K_CYCS_PER_FRAME ((20000000 * 100) / nBurnFPS) #define ARM7_CYCS_PER_FRAME ((20000000 * 100) / nBurnFPS) @@ -519,7 +521,6 @@ INT32 PgmDoReset() SekOpen(0); SekReset(); SekClose(); - nExtraCycles = 0; if (nEnableArm7) { Arm7Open(0); @@ -542,6 +543,7 @@ INT32 PgmDoReset() memset (hold_coin, 0, sizeof(hold_coin)); nCyclesDone[0] = nCyclesDone[1] = nCyclesDone[2] = 0; + nExtraCycles = 0; return 0; } @@ -671,7 +673,7 @@ static void ics2115_sound_irq(INT32 nState) INT32 pgmInit() { - BurnSetRefreshRate((BurnDrvGetHardwareCode() & HARDWARE_IGS_JAMMAPCB) ? 59.17 : 60.00); // different? + BurnSetRefreshRate(((BurnDrvGetHardwareCode() & HARDWARE_IGS_JAMMAPCB) || pgm_cave_refresh) ? 59.17 : 60.00); Mem = NULL; @@ -830,6 +832,8 @@ INT32 pgmExit() nPgmCurrentBios = -1; + pgm_cave_refresh = 0; + return 0; } @@ -881,7 +885,6 @@ INT32 pgmFrame() PgmInput[4] |= PgmCoins & ~0xf; // add non-coin buttons } - INT32 nCyclesNext[3] = {0, 0, 0}; nCyclesDone[0] = 0; nCyclesDone[1] = 0; nCyclesDone[2] = 0; @@ -908,18 +911,14 @@ INT32 pgmFrame() SekOpen(0); ZetOpen(0); if (nEnableArm7) Arm7Open(0); + nCyclesDone[0] += SekIdle(nExtraCycles); for (INT32 i = 0; i < PGM_INTER_LEAVE; i++) { - nCyclesNext[0] += M68K_CYCS_PER_INTER; - nCyclesNext[1] += Z80_CYCS_PER_INTER; - nCyclesNext[2] += ARM7_CYCS_PER_INTER; - INT32 cycles = M68K_CYCS_PER_INTER; INT32 nSegmentS = (M68K_CYCS_PER_FRAME - nCyclesDone[0]) / (PGM_INTER_LEAVE - i); - nCyclesDone[0] += SekRun(nSegmentS + nExtraCycles); - nExtraCycles = 0; + nCyclesDone[0] += SekRun(nSegmentS); if (nEnableArm7) { cycles = SekTotalCycles() - Arm7TotalCycles(); @@ -1045,6 +1044,8 @@ INT32 pgmScan(INT32 nAction,INT32 *pnMin) v3021Scan(); + SCAN_VAR(nExtraCycles); + SCAN_VAR(PgmInput); SCAN_VAR(nPgmZ80Work);