void mie_device::raise_irq(int level) { if(level>=0 && level<7) { irq_pending |= 1<<level; recalc_irq(); } }
int mie_device::irq_callback() { if(!(irq_enable & irq_pending & 0x7f)) throw emu_fatalerror("MIE irq callback called with enable=%02x, pending=%02x", irq_enable, irq_pending); int level = -1; for(level = 0; level < 7; level++) if((irq_enable & irq_pending) & (1 << level)) break; irq_pending &= ~(1 << level); recalc_irq(); return 0xf2+2*level; }