d_gunsmoke, fix an old fix of mine the right way now that we have CPU_IRQSTATUS_HOLD on z80

This commit is contained in:
dinkc64 2017-04-11 01:59:22 +00:00
parent 6bd9c3eb2e
commit b4adf68196
1 changed files with 12 additions and 19 deletions

View File

@ -644,11 +644,11 @@ static INT32 DrvDraw()
DrvCalcPal = 0;
}
if (!bgon) memset (pTransDraw, 0, 224 * 256 * 2);
BurnTransferClear();
if (bgon) draw_bg_layer();
if (objon) draw_sprites();
if (chon) draw_fg_layer();
if (bgon && nBurnLayer & 1) draw_bg_layer();
if (objon && nSpriteEnable & 1) draw_sprites();
if (chon && nBurnLayer & 2) draw_fg_layer();
BurnTransferCopy(DrvPalette);
@ -664,15 +664,11 @@ static INT32 DrvFrame()
ZetNewFrame();
INT32 nInterleave = 278;
INT32 nInterleave = 256;
INT32 nCyclesSegment;
INT32 nCyclesDone[2], nCyclesTotal[2];
nCyclesTotal[0] = 4000000 / 60;
nCyclesTotal[1] = 3000000 / 60;
nCyclesDone[0] = nCyclesDone[1] = 0;
INT32 nCyclesDone[2] = { 0, 0 };
INT32 nCyclesTotal[2] = { 4000000 / 60, 3000000 / 60 };
for (INT32 i = 0; i < nInterleave; i++) {
INT32 nCurrentCPU, nNext;
@ -683,18 +679,14 @@ static INT32 DrvFrame()
nNext = (i + 1) * nCyclesTotal[nCurrentCPU] / nInterleave;
nCyclesSegment = nNext - nCyclesDone[nCurrentCPU];
nCyclesDone[nCurrentCPU] += ZetRun(nCyclesSegment);
if (i == 274) ZetSetIRQLine(0, CPU_IRQSTATUS_ACK);
if (i == 276) ZetSetIRQLine(0, CPU_IRQSTATUS_NONE);
if (i == 240) ZetSetIRQLine(0, CPU_IRQSTATUS_HOLD);
ZetClose();
// Run Z80 #1
nCurrentCPU = 1;
ZetOpen(nCurrentCPU);
BurnTimerUpdate((i + 1) * (nCyclesTotal[nCurrentCPU] / nInterleave));
// execute IRQ quarterly 68.5 (or 69) is 25% of 278 (nInterleave)
if (i%69 == 0 && i>0) ZetSetIRQLine(0, CPU_IRQSTATUS_ACK);
// execute CPU_IRQSTATUS_NONE 1 interleave past the last one
if ((i-1)%69 == 0 && i>1) ZetSetIRQLine(0, CPU_IRQSTATUS_NONE);
if (i%64 == 63) ZetSetIRQLine(0, CPU_IRQSTATUS_HOLD);
ZetClose();
}
@ -712,7 +704,7 @@ static INT32 DrvFrame()
return 0;
}
static INT32 DrvScan(INT32 nAction,INT32 *pnMin)
static INT32 DrvScan(INT32 nAction, INT32 *pnMin)
{
struct BurnArea ba;
@ -720,7 +712,7 @@ static INT32 DrvScan(INT32 nAction,INT32 *pnMin)
*pnMin = 0x029521;
}
if (nAction & ACB_VOLATILE) {
if (nAction & ACB_VOLATILE) {
memset(&ba, 0, sizeof(ba));
ba.Data = Ram;
@ -741,6 +733,7 @@ static INT32 DrvScan(INT32 nAction,INT32 *pnMin)
SCAN_VAR(objon);
SCAN_VAR(gunsmoke_scrollx);
SCAN_VAR(gunsmoke_scrolly);
if (nAction & ACB_WRITE) {
INT32 banktemp = nGunsmokeBank;
ZetOpen(0);