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.cpp21
1 files changed, 10 insertions, 11 deletions
diff --git a/src/devices/machine/68340.cpp b/src/devices/machine/68340.cpp
index 7f9671fa12d..5e4fc3fc121 100644
--- a/src/devices/machine/68340.cpp
+++ b/src/devices/machine/68340.cpp
@@ -69,21 +69,20 @@ void m68340_cpu_device::update_ipl()
void m68340_cpu_device::internal_vectors_r(address_map &map)
{
- map(0xfffff2, 0xffffff).r(FUNC(m68340_cpu_device::int_ack));
+ map(0xfffff0, 0xffffff).r(FUNC(m68340_cpu_device::int_ack)).umask16(0x00ff);
}
-u16 m68340_cpu_device::int_ack(offs_t offset)
+uint8_t 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);
- uint8_t t2_iarb = m_timer[1]->arbitrate(irqline);
+ uint8_t pit_iarb = pit_arbitrate(offset);
+ uint8_t scu_iarb = m_serial->arbitrate(offset);
+ uint8_t t1_iarb = m_timer[0]->arbitrate(offset);
+ uint8_t t2_iarb = m_timer[1]->arbitrate(offset);
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);
+ LOGMASKED(LOG_IPL, "Level %d interrupt arbitration: PIT = %X, SCU = %X, T1 = %X, T2 = %X\n", offset, pit_iarb, scu_iarb, t1_iarb, t2_iarb);
int response = 0;
- uint32_t vector = 0x18; // Spurious interrupt
+ uint8_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)
@@ -118,9 +117,9 @@ u16 m68340_cpu_device::int_ack(offs_t offset)
}
if (response == 0)
- logerror("Spurious interrupt (level %d)\n", irqline);
+ logerror("Spurious interrupt (level %d)\n", offset);
else if (response > 1)
- logerror("%d modules responded to interrupt (level %d, IARB = %X)\n", response, irqline, iarb);
+ logerror("%d modules responded to interrupt (level %d, IARB = %X)\n", response, offset, iarb);
return vector;
}