void m58846_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { if (id != 0) return; // timer 1: 7-bit fixed counter (manual specifically says 127) if (++m_tmr_count[0] == 127) { m_tmr_count[0] = 0; m_irqflag[1] = true; m_possible_irq = true; } // timer 2: 8-bit user defined counter with auto-reload if (m_v & 8 && ++m_tmr_count[1] == 0) { m_tmr_count[1] = m_tmr_reload; m_irqflag[2] = true; m_possible_irq = true; m_port_t ^= 1; m_write_t(m_port_t); } // schedule next timeout reset_timer(); }
void melps4_cpu_device::device_reset() { m_sm = m_sms = false; m_ba_flag = false; m_skip = false; m_op = m_prev_op = 0; m_pc = m_prev_pc = 0; op_lcps(); // CPS=0 // clear interrupts m_inte = 0; m_intp = 1; write_v(0); write_w(0); m_irqflag[0] = m_irqflag[1] = m_irqflag[2] = false; m_prohibit_irq = false; m_possible_irq = false; // clear ports write_d_pin(MELPS4_PORTD_CLR, 0); write_gen_port(MELPS4_PORTS, 0); write_gen_port(MELPS4_PORTF, 0); write_gen_port(MELPS4_PORTG, 0); write_gen_port(MELPS4_PORTU, 0); m_write_t(0); m_port_t = 0; }