diff --git a/src/devices/cpu/z80/z80.cpp b/src/devices/cpu/z80/z80.cpp index 3c5a9da6b9001..994cd0ba60f45 100644 --- a/src/devices/cpu/z80/z80.cpp +++ b/src/devices/cpu/z80/z80.cpp @@ -789,11 +789,9 @@ void z80_device::execute_set_input(int inputnum, int state) switch (inputnum) { case Z80_INPUT_LINE_BUSRQ: - m_busrq_state = state; - if (state != CLEAR_LINE) + if (m_busrq_state == CLEAR_LINE && state != CLEAR_LINE) set_service_attention(); - else - set_service_attention(); + m_busrq_state = state; break; case INPUT_LINE_NMI: diff --git a/src/devices/cpu/z80/z80.h b/src/devices/cpu/z80/z80.h index dc6068348e6e4..ceaa50ce3f0a0 100644 --- a/src/devices/cpu/z80/z80.h +++ b/src/devices/cpu/z80/z80.h @@ -140,13 +140,12 @@ class z80_device : public cpu_device, public z80_daisy_chain_interface devcb_write_line m_busack_cb; static constexpr u8 SA_BUSRQ = 0; - static constexpr u8 SA_BUSACK = 1; - static constexpr u8 SA_NMI_PENDING = 2; - static constexpr u8 SA_IRQ_ON = 3; - static constexpr u8 SA_HALT = 4; - static constexpr u8 SA_AFTER_EI = 5; - static constexpr u8 SA_AFTER_LDAIR = 6; - static constexpr u8 SA_NSC800_IRQ_ON = 7; + static constexpr u8 SA_NMI_PENDING = 1; + static constexpr u8 SA_IRQ_ON = 2; + static constexpr u8 SA_HALT = 3; + static constexpr u8 SA_AFTER_EI = 4; + static constexpr u8 SA_AFTER_LDAIR = 5; + static constexpr u8 SA_NSC800_IRQ_ON = 6; u8 m_service_attention; // bitmap for required handling in service step PAIR16 m_prvpc; diff --git a/src/devices/cpu/z80/z80.lst b/src/devices/cpu/z80/z80.lst index 37337b26c57af..238c86797d908 100644 --- a/src/devices/cpu/z80/z80.lst +++ b/src/devices/cpu/z80/z80.lst @@ -1048,17 +1048,18 @@ ffff if (m_busrq_state) { // SA_BUSRQ if (!m_busack_state) { m_busack_state = 1; - set_service_attention(); m_busack_cb(1); } if (m_icount > 0) m_icount = 0; m_ref = 0xffff00; return; - } else if (m_busack_state) { // SA_BUSACK - m_busack_state = 0; - set_service_attention(); - m_busack_cb(0); + } else { + set_service_attention(); + if (m_busack_state) { + m_busack_state = 0; + m_busack_cb(0); + } } @check_interrupts set_service_attention();