diff --git a/src/emu/cpu/z80/z80.c b/src/emu/cpu/z80/z80.c index d3359479b35..9c6112843b6 100644 --- a/src/emu/cpu/z80/z80.c +++ b/src/emu/cpu/z80/z80.c @@ -3679,7 +3679,7 @@ static void set_irq_line(z80_state *z80, int irqline, int state) /* update the IRQ state via the daisy chain */ z80->irq_state = state; if (z80->daisy.present()) - z80->irq_state = z80->daisy.update_irq_state(); + z80->irq_state = ( z80->daisy.update_irq_state() == ASSERT_LINE ) ? ASSERT_LINE : z80->irq_state; /* the main execute loop will take the interrupt */ } diff --git a/src/emu/cpu/z80/z80daisy.c b/src/emu/cpu/z80/z80daisy.c index cd0880bed77..9b789d0e38d 100644 --- a/src/emu/cpu/z80/z80daisy.c +++ b/src/emu/cpu/z80/z80daisy.c @@ -144,16 +144,19 @@ int z80_daisy_chain::update_irq_state() int z80_daisy_chain::call_ack_device() { + int vector = 0; + // loop over all devices; dev[0] is the highest priority for (daisy_entry *daisy = m_daisy_list; daisy != NULL; daisy = daisy->m_next) { // if this device is asserting the INT line, that's the one we want int state = daisy->m_interface->z80daisy_irq_state(); + vector = daisy->m_interface->z80daisy_irq_ack(); if (state & Z80_DAISY_INT) - return daisy->m_interface->z80daisy_irq_ack(); + return vector; } logerror("z80daisy_call_ack_device: failed to find an device to ack!\n"); - return 0; + return vector; }