summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2021-07-30 10:43:28 -0400
committer AJR <ajrhacker@users.noreply.github.com>2021-07-30 10:43:28 -0400
commiteac5b0f438d9c92a7afc063cbfff566c132564f2 (patch)
tree792d75ee5499322e79b8a259a7cc285750dc5c09
parent88589c115d44246b12a610385293271a23d893b5 (diff)
swim1: Disable read side effects to help debugging
-rw-r--r--src/devices/machine/swim1.cpp29
-rw-r--r--src/devices/machine/swim1.h2
2 files changed, 21 insertions, 10 deletions
diff --git a/src/devices/machine/swim1.cpp b/src/devices/machine/swim1.cpp
index 8e747a219bd..cb847fd50c6 100644
--- a/src/devices/machine/swim1.cpp
+++ b/src/devices/machine/swim1.cpp
@@ -142,7 +142,19 @@ u8 swim1_device::read(offs_t offset)
if(m_ism_mode & 0x40)
return ism_read(offset);
else
- return iwm_control(offset, 0x00);
+ {
+ if(!machine().side_effects_disabled())
+ iwm_control(offset, 0x00);
+
+ switch(m_iwm_control & 0xc0) {
+ case 0x00: return m_iwm_active ? m_iwm_data : 0xff;
+ case 0x40: return (m_iwm_status & 0x7f) | ((!m_floppy || m_floppy->wpt_r()) ? 0x80 : 0x00);
+ case 0x80: return m_iwm_whd;
+ case 0xc0: return 0xff;
+ }
+
+ abort();
+ }
}
void swim1_device::write(offs_t offset, u8 data)
@@ -409,7 +421,7 @@ void swim1_device::flush_write(u64 when)
m_flux_write_count = 0;
}
-u8 swim1_device::iwm_control(int offset, u8 data)
+void swim1_device::iwm_control(int offset, u8 data)
{
iwm_sync();
@@ -549,14 +561,13 @@ u8 swim1_device::iwm_control(int offset, u8 data)
else
logerror("iwm counter = %d\n", m_iwm_to_ism_counter);
- switch(m_iwm_control & 0xc0) {
- case 0x00: return m_iwm_active ? m_iwm_data : 0xff;
- case 0x40: return (m_iwm_status & 0x7f) | ((!m_floppy || m_floppy->wpt_r()) ? 0x80 : 0x00);
- case 0x80: return m_iwm_whd;
- case 0xc0: if(offset & 1) { if(m_iwm_active) iwm_data_w(data); else iwm_mode_w(data); } return 0xff;
+ if((m_iwm_control & 0xc0) == 0xc0 && (offset & 1))
+ {
+ if(m_iwm_active)
+ iwm_data_w(data);
+ else
+ iwm_mode_w(data);
}
-
- abort();
}
void swim1_device::ism_crc_clear()
diff --git a/src/devices/machine/swim1.h b/src/devices/machine/swim1.h
index 1ce4f7f3a56..a9cdfd18931 100644
--- a/src/devices/machine/swim1.h
+++ b/src/devices/machine/swim1.h
@@ -121,7 +121,7 @@ private:
inline bool iwm_is_sync() const;
void iwm_mode_w(u8 data);
void iwm_data_w(u8 data);
- u8 iwm_control(int offset, u8 data);
+ void iwm_control(int offset, u8 data);
void iwm_sync();
void ism_fifo_clear();