void nec_common_device::execute_run() { int prev_ICount; if (m_halted) { m_icount = 0; debugger_instruction_hook(this, (Sreg(PS)<<4) + m_ip); return; } while(m_icount>0) { /* Dispatch IRQ */ if (m_pending_irq && m_no_interrupt==0) { if (m_pending_irq & NMI_IRQ) external_int(); else if (m_IF) external_int(); } /* No interrupt allowed between last instruction and this one */ if (m_no_interrupt) m_no_interrupt--; debugger_instruction_hook(this, (Sreg(PS)<<4) + m_ip); prev_ICount = m_icount; (this->*s_nec_instruction[fetchop()])(); do_prefetch(prev_ICount); } }
static CPU_EXECUTE( necv ) { nec_state_t *nec_state = get_safe_token(device); int prev_ICount; if (nec_state->halted) { nec_state->icount = 0; debugger_instruction_hook(device, (Sreg(PS)<<4) + nec_state->ip); return; } while(nec_state->icount>0) { /* Dispatch IRQ */ if (nec_state->pending_irq && nec_state->no_interrupt==0) { if (nec_state->pending_irq & NMI_IRQ) external_int(nec_state); else if (nec_state->IF) external_int(nec_state); } /* No interrupt allowed between last instruction and this one */ if (nec_state->no_interrupt) nec_state->no_interrupt--; debugger_instruction_hook(device, (Sreg(PS)<<4) + nec_state->ip); prev_ICount = nec_state->icount; nec_instruction[fetchop(nec_state)](nec_state); do_prefetch(nec_state, prev_ICount); } }
int nec_execute(int cycles) { nec_state_t *nec_state = sChipsPtr; int prev_ICount; nec_state->icount = cycles; nec_state->cycles_remaining = cycles; if (nec_state->halted) { nec_state->icount = 0; //debugger_instruction_hook(device, (Sreg(PS)<<4) + nec_state->ip); return cycles; } while((nec_state->icount>0) && (!nec_state->stop_run)) { /* Dispatch IRQ */ if (nec_state->pending_irq && nec_state->no_interrupt==0) { if (nec_state->pending_irq & NMI_IRQ) external_int(nec_state); else if (nec_state->IF) external_int(nec_state); } /* No interrupt allowed between last instruction and this one */ if (nec_state->no_interrupt) nec_state->no_interrupt--; //debugger_instruction_hook(device, (Sreg(PS)<<4) + nec_state->ip); prev_ICount = nec_state->icount; nec_instruction[fetchop(nec_state)](nec_state); do_prefetch(nec_state, prev_ICount); } nec_state->cycles_total += cycles - nec_state->icount; nec_state->cycles_remaining = 0; nec_state->stop_run = 0; return (cycles - nec_state->icount); }