summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2019-04-04 21:21:40 -0400
committer AJR <ajrhacker@users.noreply.github.com>2019-04-04 21:22:17 -0400
commita4742d0129692fb708171e93a55af1cbc97da3e3 (patch)
treea8a77926f66e0ecbe276a85c314338ec5fcf808c
parent3826322efb26fde99721ffd5df5d9995bdbb42db (diff)
68307, mc68681, tmp68301: Disable side effects for interrupt acknowledgment (nw)
-rw-r--r--src/devices/machine/68307.cpp3
-rw-r--r--src/devices/machine/mc68681.cpp8
-rw-r--r--src/devices/machine/mc68681.h2
-rw-r--r--src/devices/machine/tmp68301.cpp15
4 files changed, 20 insertions, 8 deletions
diff --git a/src/devices/machine/68307.cpp b/src/devices/machine/68307.cpp
index 121a729b1fd..ca98bbfa85b 100644
--- a/src/devices/machine/68307.cpp
+++ b/src/devices/machine/68307.cpp
@@ -225,7 +225,8 @@ void m68307_cpu_device::licr2_interrupt()
uint8_t m68307_cpu_device::int_ack(offs_t offset)
{
uint8_t type = m_m68307SIM->get_int_type(this, offset);
- logerror("Interrupt acknowledged: level %d, type %01X\n", offset, type);
+ if (!machine().side_effects_disabled())
+ logerror("Interrupt acknowledged: level %d, type %01X\n", offset, type);
// UART provides its own vector
if (type == 0x0c)
diff --git a/src/devices/machine/mc68681.cpp b/src/devices/machine/mc68681.cpp
index a3a3b480979..87f1c31ce07 100644
--- a/src/devices/machine/mc68681.cpp
+++ b/src/devices/machine/mc68681.cpp
@@ -357,6 +357,14 @@ void mc68681_device::update_interrupts()
m_read_vector = false; // clear IACK too
}
+uint8_t mc68681_device::get_irq_vector()
+{
+ if (!machine().side_effects_disabled())
+ m_read_vector = true;
+
+ return IVR;
+}
+
double duart_base_device::get_ct_rate()
{
double rate = 0.0f;
diff --git a/src/devices/machine/mc68681.h b/src/devices/machine/mc68681.h
index 50e5cdd1489..aa92ec598f6 100644
--- a/src/devices/machine/mc68681.h
+++ b/src/devices/machine/mc68681.h
@@ -197,7 +197,7 @@ public:
virtual uint8_t read(offs_t offset) override;
virtual void write(offs_t offset, uint8_t data) override;
- uint8_t get_irq_vector() { m_read_vector = true; return IVR; }
+ uint8_t get_irq_vector();
protected:
virtual void device_start() override;
diff --git a/src/devices/machine/tmp68301.cpp b/src/devices/machine/tmp68301.cpp
index 7e2afbe3aca..75b1f070ad8 100644
--- a/src/devices/machine/tmp68301.cpp
+++ b/src/devices/machine/tmp68301.cpp
@@ -217,12 +217,15 @@ uint8_t tmp68301_device::irq_callback(offs_t offset)
u16 mask = (src > 2 ? 2 : 1) << src;
if ((m_ipr & mask) != 0 && (m_imr & mask) == 0)
{
- // add cause to interrupt in-service register
- m_iisr |= mask;
-
- // no longer pending
- m_ipr &= ~mask;
- update_ipl();
+ if (!machine().side_effects_disabled())
+ {
+ // add cause to interrupt in-service register
+ m_iisr |= mask;
+
+ // no longer pending
+ m_ipr &= ~mask;
+ update_ipl();
+ }
// vary vector number by type
if (src > 6)