diff options
Diffstat (limited to 'src/devices/machine/6850acia.cpp')
-rw-r--r-- | src/devices/machine/6850acia.cpp | 64 |
1 files changed, 35 insertions, 29 deletions
diff --git a/src/devices/machine/6850acia.cpp b/src/devices/machine/6850acia.cpp index 6527608bf0f..08e8459fd36 100644 --- a/src/devices/machine/6850acia.cpp +++ b/src/devices/machine/6850acia.cpp @@ -150,24 +150,27 @@ void acia6850_device::device_reset() output_irq(1); } -READ8_MEMBER( acia6850_device::status_r ) +uint8_t acia6850_device::status_r() { uint8_t status = m_status; - if (status & SR_CTS) + if (!machine().side_effects_disabled()) { - status &= ~SR_TDRE; - } + if (status & SR_CTS) + { + status &= ~SR_TDRE; + } - if (m_dcd_irq_pending == DCD_IRQ_READ_STATUS) - { - m_dcd_irq_pending = DCD_IRQ_READ_DATA; + if (m_dcd_irq_pending == DCD_IRQ_READ_STATUS) + { + m_dcd_irq_pending = DCD_IRQ_READ_DATA; + } } return status; } -WRITE8_MEMBER( acia6850_device::control_w ) +void acia6850_device::control_w(uint8_t data) { LOG("MC6850 '%s' Control: %02x\n", tag(), data); @@ -237,7 +240,7 @@ void acia6850_device::update_irq() output_irq(calculate_txirq() && calculate_rxirq()); } -WRITE8_MEMBER( acia6850_device::data_w ) +void acia6850_device::data_w(uint8_t data) { LOG("MC6850 '%s' Data: %02x\n", tag(), data); @@ -254,40 +257,43 @@ WRITE8_MEMBER( acia6850_device::data_w ) update_irq(); } -READ8_MEMBER( acia6850_device::data_r ) +uint8_t acia6850_device::data_r() { - if (m_overrun_pending) + if (!machine().side_effects_disabled()) { - m_status |= SR_OVRN; - m_overrun_pending = false; - } - else - { - m_status &= ~SR_OVRN; - m_status &= ~SR_RDRF; - } + if (m_overrun_pending) + { + m_status |= SR_OVRN; + m_overrun_pending = false; + } + else + { + m_status &= ~SR_OVRN; + m_status &= ~SR_RDRF; + } - if (m_dcd_irq_pending == DCD_IRQ_READ_DATA) - { - m_dcd_irq_pending = DCD_IRQ_NONE; - } + if (m_dcd_irq_pending == DCD_IRQ_READ_DATA) + { + m_dcd_irq_pending = DCD_IRQ_NONE; + } - update_irq(); + update_irq(); + } return m_rdr; } -WRITE8_MEMBER( acia6850_device::write ) +void acia6850_device::write(offs_t offset, uint8_t data) { if (BIT(offset, 0)) - data_w(space, 0, data); + data_w(data); else - control_w(space, 0, data); + control_w(data); } -READ8_MEMBER( acia6850_device::read ) +uint8_t acia6850_device::read(offs_t offset) { - return BIT(offset, 0) ? data_r(space, 0) : status_r(space, 0); + return BIT(offset, 0) ? data_r() : status_r(); } DECLARE_WRITE_LINE_MEMBER( acia6850_device::write_cts ) |