summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/swim2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/swim2.cpp')
-rw-r--r--src/devices/machine/swim2.cpp44
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);
+ }
+}