summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author fulivi <fulivi@users.noreply.github.com>2017-10-25 16:22:40 +0200
committer fulivi <fulivi@users.noreply.github.com>2017-10-25 16:22:40 +0200
commita6b76aab2f65744c0367a9908c96f3f674803c42 (patch)
treedc1d489bf18040f0ad28ce2b26dfa69220b6b46e
parent65d697d94d4b3beab0547a40243c5f546c548b7b (diff)
hp9895: 2 bugs fixed: NMI handling & secondary addressing in PHI chip
-rw-r--r--src/devices/bus/ieee488/hp9895.cpp4
-rw-r--r--src/devices/machine/phi.cpp2
2 files changed, 5 insertions, 1 deletions
diff --git a/src/devices/bus/ieee488/hp9895.cpp b/src/devices/bus/ieee488/hp9895.cpp
index a3a52535f23..2d2d623aadf 100644
--- a/src/devices/bus/ieee488/hp9895.cpp
+++ b/src/devices/bus/ieee488/hp9895.cpp
@@ -484,6 +484,10 @@ WRITE8_MEMBER(hp9895_device::phi_dio_w)
WRITE_LINE_MEMBER(hp9895_device::phi_int_w)
{
m_cpu->set_input_line(INPUT_LINE_NMI , state);
+ if (state) {
+ // Ensure the event queue is emptied before executing any other instruction
+ m_cpu->yield();
+ }
}
READ8_MEMBER(hp9895_device::phi_reg_r)
diff --git a/src/devices/machine/phi.cpp b/src/devices/machine/phi.cpp
index 42cede7e6d8..e86a7bb72ce 100644
--- a/src/devices/machine/phi.cpp
+++ b/src/devices/machine/phi.cpp
@@ -1246,7 +1246,7 @@ bool phi_device::if_cmd_received(uint8_t byte)
}
} else {
// command is a secondary address
- if (m_t_state == PHI_T_ID1 && my_addr) {
+ if (m_t_state == PHI_T_ID1 && (m_l_state == PHI_L_LADS) == !!lon_msg() && my_addr) {
// Start IDENTIFY sequence
m_t_state = PHI_T_ID2;
} else if (m_t_state >= PHI_T_ID2 && m_t_state <= PHI_T_ID6 && !my_addr) {