From eac5b0f438d9c92a7afc063cbfff566c132564f2 Mon Sep 17 00:00:00 2001 From: AJR Date: Fri, 30 Jul 2021 10:43:28 -0400 Subject: swim1: Disable read side effects to help debugging --- src/devices/machine/swim1.cpp | 29 ++++++++++++++++++++--------- src/devices/machine/swim1.h | 2 +- 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(); -- cgit v1.2.3