static inline void cpu_sync() // sync z80 & 68k { int t = ((SekTotalCycles() * 3) / 10) - ZetTotalCycles(); if (t > 0) { BurnTimerUpdate(t); } }
void QsndSyncZ80() { int nCycles = (long long)SekTotalCycles() * nCpsZ80Cycles / nCpsCycles; if (nCycles <= ZetTotalCycles()) { return; } BurnTimerUpdate(nCycles); }
inline void toaplan1SynchroniseZ80(int nExtraCycles) { int nCycles = ((long long)SekTotalCycles() * nCyclesTotal[1] / nCyclesTotal[0]) + nExtraCycles; if (nCycles <= ZetTotalCycles()) { return; } nToa1Cycles68KSync = nCycles - nExtraCycles; BurnTimerUpdate(nCycles); }
void BurnTimerEndFrame(int nCycles) { int nTicks = MAKE_TIMER_TICKS(nCycles, nCPUClockspeed); BurnTimerUpdate(nCycles); if (nTimerCount[0] < MAX_TIMER_VALUE) nTimerCount[0] -= nTicks; if (nTimerCount[1] < MAX_TIMER_VALUE) nTimerCount[1] -= nTicks; nTicksDone -= nTicks; if (nTicksDone < 0) { // bprintf(PRINT_ERROR, _T(" -- ticks done -> %08X\n"), nTicksDone); nTicksDone = 0; } }
void QsndSyncZ80() { int nCycles = (long long)SekTotalCycles() * nCpsZ80Cycles / nCpsCycles; QUARK_LOG_VAR(nCycles); QUARK_LOG_VAR(nCpsZ80Cycles); QUARK_LOG_VAR(nCpsCycles); QUARK_LOG_VAR(SekTotalCycles()); QUARK_LOG_VAR(nSekCyclesTotal); QUARK_LOG_VAR(nSekCyclesToDo); QUARK_LOG_VAR(ZetTotalCycles()); if (nCycles <= ZetTotalCycles()) { return; } BurnTimerUpdate(nCycles); }
static int DrvFrame() { if (DrvReset) { DrvDoReset(); } ZetNewFrame(); { memset (DrvInputs, 0xff, 3); for (int i = 0; i < 8; i++) { DrvInputs[0] ^= (DrvJoy1[i] & 1) << i; DrvInputs[1] ^= (DrvJoy2[i] & 1) << i; DrvInputs[2] ^= (DrvJoy3[i] & 1) << i; } // Clear opposites if ((DrvInputs[1] & 0x03) == 0) DrvInputs[1] |= 0x03; if ((DrvInputs[1] & 0x0c) == 0) DrvInputs[1] |= 0x0c; if ((DrvInputs[2] & 0x03) == 0) DrvInputs[1] |= 0x03; if ((DrvInputs[2] & 0x0c) == 0) DrvInputs[1] |= 0x0c; } int nInterleave = 100; int nSoundBufferPos = 0; int nCyclesTotal[2] = { 3072000 / 60, 3072000 / 60 }; M6809Open(0); ZetOpen(0); for (int i = 0; i < nInterleave; i++) { M6809Run(nCyclesTotal[0] / nInterleave); BurnTimerUpdate(i * (nCyclesTotal[1] / nInterleave)); if (pBurnSoundOut) { int nSegmentLength = nBurnSoundLen - nSoundBufferPos; short* pSoundBuf = pBurnSoundOut + (nSoundBufferPos << 1); BurnYM2203Update(pSoundBuf, nSegmentLength); nSoundBufferPos += nSegmentLength; } } BurnTimerEndFrame(nCyclesTotal[1]); if (*irq_enable) M6809SetIRQ(0, M6809_IRQSTATUS_AUTO); if (pBurnSoundOut) { int nSegmentLength = nBurnSoundLen - nSoundBufferPos; short* pSoundBuf = pBurnSoundOut + (nSoundBufferPos << 1); if (nSegmentLength) { BurnYM2203Update(pSoundBuf, nSegmentLength); } } ZetClose(); M6809Close(); if (pBurnDraw) { DrvDraw(); } return 0; }
static int dec0SynchroniseStream(int nSoundRate) { int result = (long long)SekTotalCycles() * nSoundRate / 10000000; BurnTimerUpdate(result); return result; }