void mos6530_base_t::timer_w(offs_t offset, UINT8 data, bool ie) { live_sync(); m_timer = data; switch (offset & 0x03) { case 0: m_prescale = 1; break; case 1: m_prescale = 8; break; case 2: m_prescale = 64; break; case 3: m_prescale = 1024; break; } m_ie_timer = ie; if (cur_live.tm_irq != machine().time()) { m_irq_timer = false; } update_irq(); if (LOG_TIMER) logerror("%s %s %s '%s' Timer value %02x prescale %u IE %u\n", machine().time().as_string(), machine().describe_context(), name(), tag(), data, m_prescale, m_ie_timer ? 1 : 0); checkpoint(); if (cur_live.state != IDLE) { live_abort(); } live_start(); live_run(); }
void mos6530_base_t::device_reset() { m_pa_out = 0; m_pa_ddr = 0; m_pb_out = 0; m_pb_ddr = 0; m_ie_timer = false; m_irq_timer = false; m_ie_edge = false; m_irq_edge = false; m_pa7_dir = 0; update_pa(); update_pb(); update_irq(); edge_detect(); m_timer = 0xff; m_prescale = 1024; if (cur_live.state != IDLE) { live_abort(); } live_start(); live_run(); }
void amiga_fdc::dmacon_set(uint16_t data) { live_sync(); dmacon = data; dma_check(); live_run(); }
void victor_9000_fdc_t::live_start() { cur_live.tm = machine().time(); cur_live.state = RUNNING; cur_live.next_state = -1; cur_live.shift_reg = 0; cur_live.shift_reg_write = 0; cur_live.bit_counter = 0; cur_live.sync_bit_counter = 0; cur_live.sync_byte_counter = 0; cur_live.drive = m_drive; cur_live.side = m_side; cur_live.drw = m_drw; cur_live.wd = m_wd; cur_live.wrsync = m_wrsync; cur_live.erase = m_erase; pll_reset(cur_live.tm, attotime::from_nsec(2130)); checkpoint_live = cur_live; pll_save_checkpoint(); live_run(); }
void amiga_fdc::dmacon_set(UINT16 data) { live_sync(); dmacon = data; dma_check(); live_run(); }
void mos6530_base_t::device_reset() { m_pa_out = 0xff; m_pa_ddr = 0; m_pb_out = 0xff; // a7800 One-On-One Basketball (1on1u) needs this or you can't start a game, it doesn't initialize it. (see MT6060) m_pb_ddr = 0; m_ie_timer = false; m_irq_timer = false; m_ie_edge = false; m_irq_edge = false; m_pa7_dir = 0; update_pa(); update_pb(); update_irq(); edge_detect(); m_timer = 0xff; m_prescale = 1024; if (cur_live.state != IDLE) { live_abort(); } live_start(); live_run(); }
void c2040_fdc_t::stp0_w(int stp) { if (m_stp0 != stp) { live_sync(); this->stp_w(m_floppy0, m_mtr0, m_stp0, stp); checkpoint(); live_run(); } }
void c8050_fdc_device::stp1_w(int stp) { if (m_stp1 != stp) { live_sync(); if (m_floppy1) stp_w(m_floppy1, m_mtr1, m_stp1, stp); checkpoint(); live_run(); } }
void c8050_fdc_device::stp0_w(int stp) { if (m_stp0 != stp) { live_sync(); stp_w(m_floppy0, m_mtr0, m_stp0, stp); checkpoint(); live_run(); } }
void amiga_fdc::dmacon_set(UINT16 data) { live_sync(); dmacon = data; dma_check(); dskbyt = dskbyt & 0xbfff; if(dma_state != DMA_IDLE) dskbyt |= 0x4000; live_run(); }
void c2040_fdc_t::stp1_w(int stp) { if (m_stp1 != stp) { live_sync(); if (m_floppy1) this->stp_w(m_floppy1, m_mtr1, m_stp1, stp); checkpoint(); live_run(); } }
void amiga_fdc::dsklen_w(UINT16 data) { live_sync(); if(!(data & 0x8000) || (data == pre_dsklen)) { dsklen = pre_dsklen = data; dma_check(); } else pre_dsklen = data; live_run(); }
void c2040_fdc_t::ds_w(int ds) { if (m_ds != ds) { live_sync(); m_ds = cur_live.ds = ds; if (LOG) logerror("%s %s DS %u\n", machine().time().as_string(), machine().describe_context(), ds); checkpoint(); live_run(); } }
void c64h156_device::ds_w(int ds) { if (m_ds != ds) { live_sync(); m_ds = cur_live.ds = ds; checkpoint(); if (LOG) logerror("%s DS %u\n", machine().time().as_string(), ds); live_run(); } }
void amiga_fdc::live_abort() { if(!cur_live.tm.is_never() && cur_live.tm > machine().time()) { rollback(); live_run(machine().time()); } cur_live.pll.stop_writing(floppy, cur_live.tm); cur_live.tm = attotime::never; cur_live.state = IDLE; cur_live.next_state = -1; }
void mos6530_base_t::live_abort() { if(!cur_live.tm.is_never() && cur_live.tm > machine().time()) { rollback(); live_run(machine().time()); } cur_live.tm = attotime::never; cur_live.state = IDLE; cur_live.next_state = -1; cur_live.tm_irq = attotime::never; }
void c8050_fdc_device::ds_w(int ds) { if (m_ds != ds) { live_sync(); m_ds = cur_live.ds = ds; pll_reset(cur_live.tm); if (LOG) logerror("%s %s DS %u\n", machine().time().as_string(), machine().describe_context(), ds); checkpoint(); live_run(); } }
void amiga_fdc::live_start() { cur_live.tm = machine().time(); cur_live.state = RUNNING; cur_live.next_state = -1; cur_live.shift_reg = 0; cur_live.bit_counter = 0; cur_live.pll.reset(cur_live.tm); cur_live.pll.set_clock(clocks_to_attotime(1)); checkpoint_live = cur_live; live_run(); }
void mos6530_base_t::live_start() { cur_live.period = attotime::from_ticks(m_prescale, clock()); cur_live.tm = machine().time() + attotime::from_hz(clock()); cur_live.state = RUNNING; cur_live.next_state = -1; cur_live.value = m_timer; checkpoint(); live_run(); }
void amiga_fdc::dsklen_w(UINT16 data) { live_sync(); if(!(data & 0x8000) || (data == pre_dsklen)) { dsklen = pre_dsklen = data; dma_check(); dskbyt = dskbyt & 0x9fff; if(data & 0x4000) dskbyt |= 0x2000; if(dma_state != DMA_IDLE) dskbyt |= 0x4000; } else pre_dsklen = data; live_run(); }
void c64h156_device::live_abort() { if(!cur_live.tm.is_never() && cur_live.tm > machine().time()) { rollback(); live_run(machine().time()); } stop_writing(cur_live.tm); cur_live.tm = attotime::never; cur_live.state = IDLE; cur_live.next_state = -1; cur_live.write_position = 0; cur_live.write_start_time = attotime::never; cur_live.sync = 1; cur_live.byte = 1; }
void c8050_fdc_t::live_abort() { if(!cur_live.tm.is_never() && cur_live.tm > machine().time()) { rollback(); live_run(machine().time()); } pll_stop_writing(get_floppy(), cur_live.tm); cur_live.tm = attotime::never; cur_live.state = IDLE; cur_live.next_state = -1; cur_live.ready = 1; cur_live.brdy = 1; cur_live.sync = 1; cur_live.error = 1; }
void amiga_fdc::live_sync() { if(!cur_live.tm.is_never()) { if(cur_live.tm > machine().time()) { rollback(); live_run(machine().time()); } if(cur_live.tm == machine().time()) { if(cur_live.next_state != -1) { cur_live.state = cur_live.next_state; cur_live.next_state = -1; } if(cur_live.state == IDLE) cur_live.tm = attotime::never; } checkpoint(); } }
void mos6530_base_t::live_sync() { if(!cur_live.tm.is_never()) { if(cur_live.tm > machine().time()) { rollback(); live_run(machine().time()); } else { if(cur_live.next_state != -1) { cur_live.state = cur_live.next_state; cur_live.next_state = -1; } if(cur_live.state == IDLE) { cur_live.tm = attotime::never; } } cur_live.next_state = -1; checkpoint(); } }
void c2040_fdc_t::live_abort() { if(!cur_live.tm.is_never() && cur_live.tm > machine().time()) { rollback(); live_run(machine().time()); } stop_writing(cur_live.tm); cur_live.tm = attotime::never; cur_live.state = IDLE; cur_live.next_state = -1; cur_live.write_position = 0; cur_live.write_start_time = attotime::never; cur_live.ready = 1; cur_live.sync = 1; cur_live.error = 1; }
void victor_9000_fdc_t::live_abort() { if(!cur_live.tm.is_never() && cur_live.tm > machine().time()) { rollback(); live_run(machine().time()); } pll_stop_writing(get_floppy(), cur_live.tm); cur_live.tm = attotime::never; cur_live.state = IDLE; cur_live.next_state = -1; cur_live.brdy = 1; cur_live.lbrdy_changed = true; cur_live.sync = 1; cur_live.syn = 1; cur_live.syn_changed = true; cur_live.gcr_err = 1; }
void victor_9000_fdc_t::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { switch (id) { case TM_GEN: live_sync(); live_run(); break; case TM_TACH0: m_tach0 = !m_tach0; if (LOG_SCP) logerror("TACH0 %u\n", m_tach0); break; case TM_TACH1: m_tach1 = !m_tach1; if (LOG_SCP) logerror("TACH1 %u\n", m_tach1); break; } }
void c8050_fdc_device::live_start() { cur_live.tm = machine().time(); cur_live.state = RUNNING; cur_live.next_state = -1; cur_live.shift_reg = 0; cur_live.shift_reg_write = 0; cur_live.bit_counter = 0; cur_live.ds = m_ds; cur_live.drv_sel = m_drv_sel; cur_live.mode_sel = m_mode_sel; cur_live.rw_sel = m_rw_sel; cur_live.pi = m_pi; pll_reset(cur_live.tm); checkpoint_live = cur_live; pll_save_checkpoint(); live_run(); }
void c2040_fdc_t::live_start() { cur_live.tm = machine().time(); cur_live.state = RUNNING; cur_live.next_state = -1; cur_live.shift_reg = 0; cur_live.shift_reg_write = 0; cur_live.cycle_counter = 0; cur_live.cell_counter = 0; cur_live.bit_counter = 0; cur_live.ds = m_ds; cur_live.drv_sel = m_drv_sel; cur_live.mode_sel = m_mode_sel; cur_live.rw_sel = m_rw_sel; cur_live.pi = m_pi; checkpoint_live = cur_live; live_run(); }
UINT8 mos6530_base_t::timer_r(bool ie) { UINT8 data; live_sync(); m_ie_timer = ie; if (cur_live.tm_irq != machine().time()) { m_irq_timer = false; } update_irq(); data = cur_live.value; if (LOG_TIMER) logerror("%s %s %s '%s' Timer read %02x IE %u\n", machine().time().as_string(), machine().describe_context(), name(), tag(), data, m_ie_timer ? 1 : 0); checkpoint(); live_run(); return data; }