INT32 BurnTimerUpdateYM3812(INT32 nCycles) { INT32 nIRQStatus = 0; nTicksTotal = MAKE_TIMER_TICKS(nCycles, nCPUClockspeed); // bprintf(PRINT_NORMAL, _T(" -- Ticks: %08X, cycles %i\n"), nTicksTotal, nCycles); while (nTicksDone < nTicksTotal) { INT32 nTimer, nCyclesSegment, nTicksSegment; // Determine which timer fires first if (nTimerCount[0] <= nTimerCount[1]) { nTicksSegment = nTimerCount[0]; } else { nTicksSegment = nTimerCount[1]; } if (nTicksSegment > nTicksTotal) { nTicksSegment = nTicksTotal; } nCyclesSegment = MAKE_CPU_CYLES(nTicksSegment + nTicksExtra, nCPUClockspeed); // bprintf(PRINT_NORMAL, _T(" - Timer: %08X, %08X, %08X, cycles %i, %i\n"), nTicksDone, nTicksSegment, nTicksTotal, nCyclesSegment, pCPUTotalCycles()); pCPURun(nCyclesSegment - pCPUTotalCycles()); nTicksDone = MAKE_TIMER_TICKS(pCPUTotalCycles() + 1, nCPUClockspeed) - 1; // bprintf(PRINT_NORMAL, _T(" - ticks done -> %08X cycles -> %i\n"), nTicksDone, pCPUTotalCycles()); nTimer = 0; if (nTicksDone >= nTimerCount[0]) { if (nTimerStart[0] == MAX_TIMER_VALUE) { nTimerCount[0] = MAX_TIMER_VALUE; } else { nTimerCount[0] += nTimerStart[0]; } // bprintf(PRINT_NORMAL, _T(" - timer 0 fired\n")); nTimer |= 1; } if (nTicksDone >= nTimerCount[1]) { if (nTimerStart[1] == MAX_TIMER_VALUE) { nTimerCount[1] = MAX_TIMER_VALUE; } else { nTimerCount[1] += nTimerStart[1]; } // bprintf(PRINT_NORMAL, _T(" - timer 1 fired\n")); nTimer |= 2; } if (nTimer & 1) { nIRQStatus |= pTimerOverCallback(0, 0); } if (nTimer & 2) { nIRQStatus |= pTimerOverCallback(0, 1); } } return nIRQStatus; }
INT32 BurnTimerUpdate(INT32 nCycles) { INT32 nIRQStatus = 0; nTicksTotal = MAKE_TIMER_TICKS(nCycles, nCPUClockspeed); while (nTicksDone < nTicksTotal) { INT32 nTimer, nCyclesSegment, nTicksSegment; // Determine which timer fires first if (nTimerCount[0] <= nTimerCount[1]) { nTicksSegment = nTimerCount[0]; } else { nTicksSegment = nTimerCount[1]; } if (nTicksSegment > nTicksTotal) { nTicksSegment = nTicksTotal; } nCyclesSegment = MAKE_CPU_CYLES(nTicksSegment + nTicksExtra, nCPUClockspeed); pCPURun(nCyclesSegment - pCPUTotalCycles()); nTicksDone = MAKE_TIMER_TICKS(pCPUTotalCycles() + 1, nCPUClockspeed) - 1; nTimer = 0; if (nTicksDone >= nTimerCount[0]) { if (nTimerStart[0] == MAX_TIMER_VALUE) { nTimerCount[0] = MAX_TIMER_VALUE; } else { nTimerCount[0] += nTimerStart[0]; } nTimer |= 1; } if (nTicksDone >= nTimerCount[1]) { if (nTimerStart[1] == MAX_TIMER_VALUE) { nTimerCount[1] = MAX_TIMER_VALUE; } else { nTimerCount[1] += nTimerStart[1]; } nTimer |= 2; } if (nTimer & 1) { nIRQStatus |= pTimerOverCallback(0, 0); } if (nTimer & 2) { nIRQStatus |= pTimerOverCallback(0, 1); } } return nIRQStatus; }
void BurnOPMTimerCallback(int c, double period) { pCPURunEnd(); if (period == 0.0) { nTimerCount[c] = MAX_TIMER_VALUE; return; } nTimerCount[c] = (int)(period * (double)TIMER_TICKS_PER_SECOND); nTimerCount[c] += MAKE_TIMER_TICKS(pCPUTotalCycles(), nCPUClockspeed); }
void BurnOPLTimerCallbackYM3812(INT32 c, double period) { pCPURunEnd(); if (period == 0.0) { nTimerCount[c] = MAX_TIMER_VALUE; // bprintf(PRINT_NORMAL, _T(" - timer %i stopped\n"), c); return; } nTimerCount[c] = (INT32)(period * (double)TIMER_TICKS_PER_SECOND); nTimerCount[c] += MAKE_TIMER_TICKS(pCPUTotalCycles(), nCPUClockspeed); // bprintf(PRINT_NORMAL, _T(" - timer %i started, %08X ticks (fires in %lf seconds)\n"), c, nTimerCount[c], period); }
void BurnOPNTimerCallback(int /*n */, int c, int cnt, double stepTime) { pCPURunEnd(); if (cnt == 0) { nTimerCount[c] = MAX_TIMER_VALUE; // bprintf(PRINT_NORMAL, _T(" - timer %i stopped\n"), c); return; } nTimerCount[c] = (int)(stepTime * cnt * (double)TIMER_TICKS_PER_SECOND); nTimerCount[c] += MAKE_TIMER_TICKS(pCPUTotalCycles(), nCPUClockspeed); // bprintf(PRINT_NORMAL, _T(" - timer %i started, %08X ticks (fires in %lf seconds)\n"), c, nTimerCount[c], stepTime * cnt); }
void BurnTimerSetOneshot(int c, double period) { pCPURunEnd(); if (period == 0.0) { nTimerStart[c] = nTimerCount[c] = MAX_TIMER_VALUE; // bprintf(PRINT_NORMAL, _T(" - timer %i stopped\n"), c); return; } nTimerCount[c] = (int)(period * (double)(TIMER_TICKS_PER_SECOND)); nTimerCount[c] += MAKE_TIMER_TICKS(pCPUTotalCycles(), nCPUClockspeed); // bprintf(PRINT_NORMAL, _T(" - timer %i started, %08X ticks (fires in %lf seconds)\n"), c, nTimerCount[c], period / 1000000.0); }