cps1: draw future frame for most games, at vblank for problematic ones

This commit is contained in:
dinkc64 2019-06-23 09:25:16 -04:00
parent d053292ea9
commit 3600140fe8
3 changed files with 28 additions and 12 deletions

View File

@ -194,6 +194,7 @@ extern INT32 nIrqLine50, nIrqLine52; // The scanlines at which the interr
extern INT32 nCpsNumScanlines;
extern INT32 Cps1VBlankIRQLine;
extern INT32 CpsDrawSpritesInReverse;
extern INT32 Cps1DrawAtVblank;
INT32 CpsRunInit();
INT32 CpsRunExit();
INT32 Cps1Frame();

View File

@ -20,6 +20,8 @@ INT32 nIrqLine50, nIrqLine52;
INT32 nCpsNumScanlines = 262;
INT32 Cps1VBlankIRQLine = 2;
INT32 Cps1DrawAtVblank = 0;
CpsRunInitCallback CpsRunInitCallbackFunction = NULL;
CpsRunInitCallback CpsRunExitCallbackFunction = NULL;
CpsRunResetCallback CpsRunResetCallbackFunction = NULL;
@ -203,6 +205,8 @@ INT32 CpsRunExit()
Cps2DisableQSnd = 0;
CpsBootlegEEPROM = 0;
Cps1DrawAtVblank = 0;
return 0;
}
@ -335,7 +339,7 @@ INT32 Cps1Frame()
SekSetIRQLine(Cps1VBlankIRQLine, CPU_IRQSTATUS_AUTO); // Trigger VBlank interrupt
if (pBurnDraw) {
if (Cps1DrawAtVblank && pBurnDraw) {
CpsDraw(); // Draw frame
}
}
@ -343,6 +347,10 @@ INT32 Cps1Frame()
SekRun(nNext - SekTotalCycles()); // run 68K
}
if (pBurnDraw && !Cps1DrawAtVblank) {
CpsDraw(); // Draw frame
}
if (Cps1Qs == 1) {
QsndEndFrame();
} else {

View File

@ -14775,6 +14775,13 @@ static INT32 Wonder3bInit()
return nRet;
}
static INT32 Cps1RasterInit()
{
Cps1DrawAtVblank = 1;
return DrvInit();
}
static INT32 CaptcommbInit()
{
CpsLayer1XOffs = -8;
@ -14783,8 +14790,8 @@ static INT32 CaptcommbInit()
CpsDrawSpritesInReverse = 1;
Cps1DetectEndSpriteList8000 = 1;
Cps1GfxLoadCallbackFunction = CpsLoadTilesCaptcommb;
return DrvInit();
return Cps1RasterInit();
}
static INT32 Captcommb2Init()
@ -14798,7 +14805,7 @@ static INT32 Captcommb2Init()
CpsRWSoundCommandCallbackFunction = Sf2mdtSoundCommand;
CpsMemScanCallbackFunction = Sf2mdtScanSound;
return DrvInit();
return Cps1RasterInit();
}
UINT8 __fastcall CawingblInputReadByte(UINT32 a)
@ -15997,7 +16004,7 @@ static INT32 MtwinsbInit()
Cps1ObjDrawCallbackFunction = FcrashObjDraw;
CpsMemScanCallbackFunction = CpsBootlegSpriteRamScanCallback;
nRet = DrvInit();
nRet = Cps1RasterInit();
CpsBootlegSpriteRam = (UINT8*)BurnMalloc(0x4000);
@ -18783,7 +18790,7 @@ struct BurnDriver BurnDrvCpsCaptcomm = {
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_HISCORE_SUPPORTED, 4, HARDWARE_CAPCOM_CPS1, GBF_SCRFIGHT, 0,
NULL, CaptcommRomInfo, CaptcommRomName, NULL, NULL, NULL, NULL, CaptcommInputInfo, CaptcommDIPInfo,
DrvInit, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan,
Cps1RasterInit, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan,
&CpsRecalcPal, 0x1000, 384, 224, 4, 3
};
@ -18793,7 +18800,7 @@ struct BurnDriver BurnDrvCpsCaptcommr1 = {
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_HISCORE_SUPPORTED, 4, HARDWARE_CAPCOM_CPS1, GBF_SCRFIGHT, 0,
NULL, Captcommr1RomInfo, Captcommr1RomName, NULL, NULL, NULL, NULL, CaptcommInputInfo, CaptcommDIPInfo,
DrvInit, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan,
Cps1RasterInit, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan,
&CpsRecalcPal, 0x1000, 384, 224, 4, 3
};
@ -18803,7 +18810,7 @@ struct BurnDriver BurnDrvCpsCaptcommu = {
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_HISCORE_SUPPORTED, 4, HARDWARE_CAPCOM_CPS1, GBF_SCRFIGHT, 0,
NULL, CaptcommuRomInfo, CaptcommuRomName, NULL, NULL, NULL, NULL, CaptcommInputInfo, CaptcommDIPInfo,
DrvInit, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan,
Cps1RasterInit, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan,
&CpsRecalcPal, 0x1000, 384, 224, 4, 3
};
@ -18813,7 +18820,7 @@ struct BurnDriver BurnDrvCpsCaptcommj = {
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_HISCORE_SUPPORTED, 4, HARDWARE_CAPCOM_CPS1, GBF_SCRFIGHT, 0,
NULL, CaptcommjRomInfo, CaptcommjRomName, NULL, NULL, NULL, NULL, CaptcommInputInfo, CaptcommDIPInfo,
DrvInit, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan,
Cps1RasterInit, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan,
&CpsRecalcPal, 0x1000, 384, 224, 4, 3
};
@ -18823,7 +18830,7 @@ struct BurnDriver BurnDrvCpsCaptcommjr1 = {
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_HISCORE_SUPPORTED, 4, HARDWARE_CAPCOM_CPS1, GBF_SCRFIGHT, 0,
NULL, Captcommjr1RomInfo, Captcommjr1RomName, NULL, NULL, NULL, NULL, CaptcommInputInfo, CaptcommDIPInfo,
DrvInit, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan,
Cps1RasterInit, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan,
&CpsRecalcPal, 0x1000, 384, 224, 4, 3
};
@ -19763,7 +19770,7 @@ struct BurnDriver BurnDrvCpsMtwins = {
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_HISCORE_SUPPORTED, 2, HARDWARE_CAPCOM_CPS1, GBF_PLATFORM, 0,
NULL, MtwinsRomInfo, MtwinsRomName, NULL, NULL, NULL, NULL, MtwinsInputInfo, MtwinsDIPInfo,
DrvInit, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan,
Cps1RasterInit, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan,
&CpsRecalcPal, 0x1000, 384, 224, 4, 3
};
@ -19773,7 +19780,7 @@ struct BurnDriver BurnDrvCpsChikij = {
NULL, NULL, NULL, NULL,
BDF_GAME_WORKING | BDF_CLONE | BDF_HISCORE_SUPPORTED, 2, HARDWARE_CAPCOM_CPS1, GBF_PLATFORM, 0,
NULL, ChikijRomInfo, ChikijRomName, NULL, NULL, NULL, NULL, MtwinsInputInfo, MtwinsDIPInfo,
DrvInit, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan,
Cps1RasterInit, DrvExit, Cps1Frame, CpsRedraw, CpsAreaScan,
&CpsRecalcPal, 0x1000, 384, 224, 4, 3
};