diff options
Diffstat (limited to 'src/devices/machine/swim2.cpp')
-rw-r--r-- | src/devices/machine/swim2.cpp | 44 |
1 files changed, 20 insertions, 24 deletions
diff --git a/src/devices/machine/swim2.cpp b/src/devices/machine/swim2.cpp index 70a1950bbbd..5d51dba66ad 100644 --- a/src/devices/machine/swim2.cpp +++ b/src/devices/machine/swim2.cpp @@ -71,7 +71,7 @@ void swim2_device::device_reset() m_devsel_cb(0); m_sel35_cb(true); m_hdsel_cb(false); - m_dat1byte_cb(0); + m_dat1byte_cb(CLEAR_LINE); m_flux_write_start = 0; m_flux_write_count = 0; std::fill(m_flux_write.begin(), m_flux_write.end(), 0); @@ -280,15 +280,13 @@ void swim2_device::write(offs_t offset, u8 data) m_mode |= 0x40; m_param_idx = 0; show_mode(); - if(data & 0x10) - m_dat1byte_cb((m_fifo_pos != 0) ? 1 : 0); + update_dat1byte(); break; case 7: // mode set m_mode |= data; show_mode(); - if(data & 0x10) - m_dat1byte_cb((m_fifo_pos != 2) ? 1 : 0); + update_dat1byte(); break; default: @@ -369,7 +367,7 @@ attotime swim2_device::cycles_to_time(u64 cycles) const void swim2_device::fifo_clear() { m_fifo_pos = 0; - m_dat1byte_cb((m_mode & 0x10) ? 1 : 0); + update_dat1byte(); crc_clear(); } @@ -378,15 +376,7 @@ bool swim2_device::fifo_push(u16 data) if(m_fifo_pos == 2) return true; m_fifo[m_fifo_pos ++] = data; - if(m_mode & 0x10) { - // write - if(m_fifo_pos == 2) - m_dat1byte_cb(0); - } else { - // read - if(m_fifo_pos == 1) - m_dat1byte_cb(1); - } + update_dat1byte(); return false; } @@ -397,15 +387,7 @@ u16 swim2_device::fifo_pop() u16 r = m_fifo[0]; m_fifo[0] = m_fifo[1]; m_fifo_pos --; - if(m_mode & 0x10) { - // write - if(m_fifo_pos == 1) - m_dat1byte_cb(1); - } else { - // read - if(m_fifo_pos == 0) - m_dat1byte_cb(0); - } + update_dat1byte(); return r; } @@ -567,3 +549,17 @@ void swim2_device::sync() m_last_sync = next_sync; } + +void swim2_device::update_dat1byte() +{ + if (m_mode & 0x10) + { + // write: Does FIFO have room? + m_dat1byte_cb((m_fifo_pos < 2) ? ASSERT_LINE : CLEAR_LINE); + } + else + { + // read: is FIFO not empty? + m_dat1byte_cb((m_fifo_pos > 0) ? ASSERT_LINE : CLEAR_LINE); + } +} |