ddragon: run at the right speed + carry over cycles for better netgame + inputs recording sync

This commit is contained in:
dinkc64 2018-05-28 04:13:25 +00:00
parent 860a832171
commit 2c2fe14903
1 changed files with 18 additions and 10 deletions

View File

@ -59,8 +59,9 @@ static UINT16 DrvScrollYHi;
static UINT8 DrvScrollXLo;
static UINT8 DrvScrollYLo;
static INT32 nCyclesDone[4], nCyclesTotal[4];
static INT32 nCyclesTotal[4];
static INT32 nCyclesSegment;
static INT32 nExtraCycles[4];
#define DD_CPU_TYPE_NONE 0
#define DD_CPU_TYPE_HD63701 1
@ -1047,6 +1048,8 @@ static INT32 DrvDoReset()
DrvLastSubPort = 0;
DrvLast3808Data = 0;
nExtraCycles[0] = nExtraCycles[1] = nExtraCycles[2] = nExtraCycles[3] = 0;
return 0;
}
@ -2068,8 +2071,8 @@ static INT32 DrvMachineInit()
m6805SetWriteHandler(DrvMCUWriteByte);
}
nCyclesTotal[0] = (INT32)((double)4000000 / 57.44853);
nCyclesTotal[1] = (INT32)((double)4000000 / 57.44853);
nCyclesTotal[0] = (INT32)((double)3000000 / 57.44853);
nCyclesTotal[1] = (INT32)((double)1500000 / 57.44853);
nCyclesTotal[2] = (INT32)((double)1500000 / 57.44853);
GenericTilesInit();
@ -2127,7 +2130,7 @@ static INT32 Drv2MachineInit()
BurnSetRefreshRate(57.444853);
nCyclesTotal[0] = (INT32)((double)4000000 / 57.44853);
nCyclesTotal[0] = (INT32)((double)3000000 / 57.44853);
nCyclesTotal[1] = (INT32)((double)4000000 / 57.44853);
nCyclesTotal[2] = (INT32)((double)3579545 / 57.44853);
nCyclesTotal[3] = (INT32)((double)4000000 / 57.44853); // darktower
@ -2161,8 +2164,6 @@ static INT32 DrvbInit()
if (DrvLoadRoms()) return 1;
if (DrvMachineInit()) return 1;
nCyclesTotal[1] = (INT32)((double)1500000 / 57.44853);
return 0;
}
@ -2516,11 +2517,11 @@ static INT32 DrvFrame()
DrvMakeInputs();
UINT32 nCyclesToDo[2];
nCyclesToDo[0] = (INT32)((double)nCyclesTotal[0] * nBurnCPUSpeedAdjust / 0x0100);
nCyclesToDo[1] = (INT32)((double)nCyclesTotal[1] * nBurnCPUSpeedAdjust / 0x0100);
INT32 nCyclesToDo[2] = {
(INT32)((double)nCyclesTotal[0] * nBurnCPUSpeedAdjust / 0x0100),
(INT32)((double)nCyclesTotal[1] * nBurnCPUSpeedAdjust / 0x0100) };
nCyclesDone[0] = nCyclesDone[1] = nCyclesDone[2] = nCyclesDone[3] = 0;
INT32 nCyclesDone[4] = { nExtraCycles[0], nExtraCycles[1], nExtraCycles[2], nExtraCycles[3] };
HD6309NewFrame();
if (DrvSubCPUType == DD_CPU_TYPE_HD63701) HD63701NewFrame();
@ -2669,6 +2670,11 @@ static INT32 DrvFrame()
}
}
nExtraCycles[0] = nCyclesDone[0] - nCyclesTotal[0];
nExtraCycles[1] = nCyclesDone[1] - nCyclesTotal[1];
nExtraCycles[2] = nCyclesDone[2] - nCyclesTotal[2];
nExtraCycles[3] = nCyclesDone[3] - nCyclesTotal[3];
if (pBurnDraw) DrvDraw();
return 0;
@ -2718,6 +2724,8 @@ static INT32 DrvScan(INT32 nAction, INT32 *pnMin)
SCAN_VAR(DrvLastSubPort);
SCAN_VAR(DrvLast3808Data);
SCAN_VAR(nExtraCycles);
if (nAction & ACB_WRITE) {
HD6309Open(0);
HD6309MapMemory(DrvHD6309Rom + 0x8000 + (DrvRomBank * 0x4000), 0x4000, 0x7fff, MAP_ROM);