static int deco16_execute(int cycles) { m6502_ICount = cycles; change_pc(PCD); do { UINT8 op; PPC = PCD; CALL_MAME_DEBUG; op = RDOP(); (*m6502.insn[op])(); /* if an irq is pending, take it now */ if( m6502.pending_irq ) deco16_take_irq(); /* check if the I flag was just reset (interrupts enabled) */ if( m6502.after_cli ) { LOG(("M6502#%d after_cli was >0", cpu_getactivecpu())); m6502.after_cli = 0; if (m6502.irq_state != CLEAR_LINE) { LOG((": irq line is asserted: set pending IRQ\n")); m6502.pending_irq = 1; } else { LOG((": irq line is clear\n")); } } else if( m6502.pending_irq ) deco16_take_irq(); } while (m6502_ICount > 0); return cycles - m6502_ICount; }
static CPU_EXECUTE( deco16 ) { m6502_Regs *cpustate = get_safe_token(device); do { UINT8 op; PPC = PCD; debugger_instruction_hook(device, PCD); op = RDOP(); (*cpustate->insn[op])(cpustate); /* if an irq is pending, take it now */ if( cpustate->pending_irq ) deco16_take_irq(cpustate); /* check if the I flag was just reset (interrupts enabled) */ if( cpustate->after_cli ) { LOG(("M6502 %s after_cli was >0", cpustate->device->tag())); cpustate->after_cli = 0; if (cpustate->irq_state != CLEAR_LINE) { LOG((": irq line is asserted: set pending IRQ\n")); cpustate->pending_irq = 1; } else { LOG((": irq line is clear\n")); } } else if( cpustate->pending_irq ) deco16_take_irq(cpustate); } while (cpustate->icount > 0); }