static void reset(MSXMidi* msxMidi) { boardClearInt(INT_TMR); boardClearInt(INT_RXRDY); msxMidi->timerIRQlatch = 0; msxMidi->timerIRQenabled = 0; msxMidi->rxrdyIRQlatch = 0; msxMidi->rxrdyIRQenabled = 0; i8251Reset(msxMidi->i8251); i8254Reset(msxMidi->i8254); }
UInt8 philipsMidiReadStatus(PhilipsMidi* midi) { UInt8 val = midi->status; boardClearInt(0x400); midi->status &= ~ST_INT; return val; }
static void enableRxRDYIRQ(MSXMidi* msxMidi, int enabled) { if (msxMidi->rxrdyIRQenabled != enabled) { msxMidi->rxrdyIRQenabled = enabled; if (!msxMidi->rxrdyIRQenabled && msxMidi->rxrdyIRQlatch) { boardClearInt(INT_RXRDY); } } }
static UInt8 ym2148ReadStatus(YM2148* midi) { UInt8 val = midi->status; boardClearInt(0x800); midi->status &= ~ST_INT; return val; }
static void setRxReady(MSXRs232* msxRs232, int status) { if (~msxRs232->intmask & INTMASK_RXREADY) { if (status) boardSetInt(1); else boardClearInt(1); } }
void ym2151Irq(void* ptr, int irq) { YM2151* ym2151 = (YM2151*)ptr; if (irq) { boardSetDataBus(ym2151->irqVector, 0, 0); boardSetInt(0x40); } else { boardClearInt(0x40); } }
/* status reset and IRQ handling */ void OPL_STATUS_RESET(FM_OPL *OPL,int flag) { /* reset status flag */ OPL->status &=~flag; if((OPL->status & 0x80)) { if (!(OPL->status & OPL->statusmask) ) { OPL->status &= 0x7f; boardClearInt(0x10); } } }
static void setRxRDYIRQ(MSXMidi* msxMidi, int status) { if (msxMidi->rxrdyIRQlatch != status) { msxMidi->rxrdyIRQlatch = status; if (msxMidi->rxrdyIRQenabled) { if (msxMidi->rxrdyIRQlatch) { boardSetInt(INT_RXRDY); } else { boardClearInt(INT_RXRDY); } } } }
static void enableTimerIRQ(MSXMidi* msxMidi, int enabled) { if (msxMidi->timerIRQenabled != enabled) { msxMidi->timerIRQenabled = enabled; if (msxMidi->timerIRQlatch) { if (msxMidi->timerIRQenabled) { boardSetInt(INT_TMR); } else { boardClearInt(INT_TMR); } } i8254SetGate(msxMidi->i8254, 2, msxMidi->timerIRQenabled && !msxMidi->timerIRQlatch); } }
static void setTimerIRQ(MSXMidi* msxMidi, int status) { if (msxMidi->timerIRQlatch != status) { msxMidi->timerIRQlatch = status; if (msxMidi->timerIRQenabled) { if (msxMidi->timerIRQlatch) { boardSetInt(INT_TMR); } else { boardClearInt(INT_TMR); } } i8254SetGate(msxMidi->i8254, 2, msxMidi->timerIRQenabled && !msxMidi->timerIRQlatch); } }