void moonsoundTimerStart(void* ref, int timer, int start, UInt8 timerRef) { Moonsound* moonsound = (Moonsound*)ref; if (timer == 1) { moonsound->timerRef1 = timerRef; moonsound->timerStarted1 = start; if (start) { moonsound->timeout1 = boardCalcRelativeTimeout(12380, moonsound->timerValue1); boardTimerAdd(moonsound->timer1, moonsound->timeout1); } else { boardTimerRemove(moonsound->timer1); } } else { moonsound->timerRef2 = timerRef; moonsound->timerStarted2 = start; if (start) { moonsound->timeout2 = boardCalcRelativeTimeout(12380, moonsound->timerValue2); boardTimerAdd(moonsound->timer2, moonsound->timeout2); } else { boardTimerRemove(moonsound->timer2); } } }
void philipsMidiReset(PhilipsMidi* midi) { midi->status = STAT_TXEMPTY; midi->txPending = 0; midi->rxPending = 0; midi->command = 0; midi->timeRecv = 0; midi->timeTrans = 0; midi->charTime = 10 * boardFrequency() / 31250; boardTimerRemove(midi->timerRecv); boardTimerRemove(midi->timerTrans); midi->timeRecv = boardSystemTime() + midi->charTime; boardTimerAdd(midi->timerRecv, midi->timeRecv); }
void ym2151TimerStart(void* ptr, int timer, int start) { YM2151* ym2151 = (YM2151*)ptr; if (timer == 0) { if (start != 0) { if (!ym2151->timerRunning1) { UInt32 systemTime = boardSystemTime(); UInt32 adjust = systemTime % TIMER_FREQUENCY; ym2151->timeout1 = systemTime + TIMER_FREQUENCY * ym2151->timerValue1 - adjust; boardTimerAdd(ym2151->timer1, ym2151->timeout1); ym2151->timerRunning1 = 1; } } else { if (ym2151->timerRunning1) { boardTimerRemove(ym2151->timer1); ym2151->timerRunning1 = 0; } } } else { if (start != 0) { if (!ym2151->timerRunning2) { UInt32 systemTime = boardSystemTime(); UInt32 adjust = systemTime % (16 * TIMER_FREQUENCY); ym2151->timeout2 = systemTime + TIMER_FREQUENCY * ym2151->timerValue2 - adjust; boardTimerAdd(ym2151->timer2, ym2151->timeout2); ym2151->timerRunning2 = 1; } } else { if (ym2151->timerRunning2) { boardTimerRemove(ym2151->timer2); ym2151->timerRunning2 = 0; } } } }
void boardCaptureStop() { boardTimerRemove(cap.timer); if (cap.state == CAPTURE_REC) { SaveState* state; FILE* f; cap.endTime = boardSystemTime(); cap.endTime64 = boardSystemTime64(); cap.state = CAPTURE_PLAY; cap.inputCnt = rleEncGetLength(); f = fopen(cap.filename, "wb"); if (f != NULL) { fwrite(cap.initState, 1, cap.initStateSize, f); fclose(f); } saveStateCreateForWrite(cap.filename); state = saveStateOpenForWrite("capture"); saveStateSet(state, "version", CAPTURE_VERSION); saveStateSet(state, "state", cap.state); saveStateSet(state, "endTime", cap.endTime); saveStateSet(state, "endTime64Hi", (UInt32)(cap.endTime64 >> 32)); saveStateSet(state, "endTime64Lo", (UInt32)cap.endTime64); saveStateSet(state, "inputCnt", cap.inputCnt); if (cap.inputCnt > 0) { saveStateSetBuffer(state, "inputs", cap.inputs, cap.inputCnt * sizeof(RleData)); } saveStateClose(state); saveStateDestroy(); }