summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/68340.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/68340.cpp')
-rw-r--r--src/devices/machine/68340.cpp14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/devices/machine/68340.cpp b/src/devices/machine/68340.cpp
index bae8be35b62..7f9671fa12d 100644
--- a/src/devices/machine/68340.cpp
+++ b/src/devices/machine/68340.cpp
@@ -67,8 +67,15 @@ void m68340_cpu_device::update_ipl()
}
}
-IRQ_CALLBACK_MEMBER(m68340_cpu_device::int_ack)
+void m68340_cpu_device::internal_vectors_r(address_map &map)
{
+ map(0xfffff2, 0xffffff).r(FUNC(m68340_cpu_device::int_ack));
+}
+
+
+u16 m68340_cpu_device::int_ack(offs_t offset)
+{
+ int irqline = offset + 1;
uint8_t pit_iarb = pit_arbitrate(irqline);
uint8_t scu_iarb = m_serial->arbitrate(irqline);
uint8_t t1_iarb = m_timer[0]->arbitrate(irqline);
@@ -76,7 +83,7 @@ IRQ_CALLBACK_MEMBER(m68340_cpu_device::int_ack)
uint8_t iarb = std::max({pit_iarb, scu_iarb, t1_iarb, t2_iarb});
LOGMASKED(LOG_IPL, "Level %d interrupt arbitration: PIT = %X, SCU = %X, T1 = %X, T2 = %X\n", irqline, pit_iarb, scu_iarb, t1_iarb, t2_iarb);
int response = 0;
- uint32_t vector = standard_irq_callback(irqline);
+ uint32_t vector = 0x18; // Spurious interrupt
// Valid IARB levels are F (high) to 1 (low) and should be unique among modules using the same interrupt level
if (iarb != 0)
@@ -228,6 +235,7 @@ m68340_cpu_device::m68340_cpu_device(const machine_config &mconfig, const char *
m_m68340DMA = nullptr;
m_m68340_base = 0;
m_ipl = 0;
+ m_cpu_space_config.m_internal_map = address_map_constructor(FUNC(m68340_cpu_device::internal_vectors_r), this);
}
void m68340_cpu_device::device_reset()
@@ -259,8 +267,6 @@ void m68340_cpu_device::device_start()
m_m68340_base = 0x00000000;
m_internal = &space(AS_PROGRAM);
-
- m_int_ack_callback = device_irq_acknowledge_delegate(FUNC(m68340_cpu_device::int_ack), this);
}
void m68340_cpu_device::m68k_reset_peripherals()