summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/phi.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/phi.cpp')
-rw-r--r--src/devices/machine/phi.cpp18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/devices/machine/phi.cpp b/src/devices/machine/phi.cpp
index 0fd0c4a90b9..18166c068cc 100644
--- a/src/devices/machine/phi.cpp
+++ b/src/devices/machine/phi.cpp
@@ -1274,7 +1274,7 @@ bool phi_device::if_cmd_received(uint8_t byte)
if (m_t_state == PHI_T_TADS) {
BIT_SET(word, REG_IFIFO_TALK_BIT);
}
- m_fifo_in.enqueue(word);
+ rx_n_data_freeze(word);
}
}
}
@@ -1320,13 +1320,8 @@ bool phi_device::byte_received(uint8_t byte , bool eoi)
LOG_0(("..stalled\n"));
return false;
} else {
- m_fifo_in.enqueue(word);
LOG_0(("..OK\n"));
- if (m_t_state != PHI_T_TACS && m_t_state != PHI_T_ID3 &&
- m_t_state != PHI_T_ID5 && m_t_state != PHI_T_SPAS) {
- // If PHI didn't send this byte to itself, set data freeze
- BIT_SET(m_reg_status, REG_STATUS_DATA_FREEZE_BIT);
- }
+ rx_n_data_freeze(word);
}
}
if (end_of_transfer) {
@@ -1340,6 +1335,15 @@ bool phi_device::byte_received(uint8_t byte , bool eoi)
return true;
}
+void phi_device::rx_n_data_freeze(uint16_t word)
+{
+ m_fifo_in.enqueue(word);
+ if (m_sh_state != PHI_SH_STRS) {
+ // If PHI didn't send this byte to itself, set data freeze
+ BIT_SET(m_reg_status, REG_STATUS_DATA_FREEZE_BIT);
+ }
+}
+
bool phi_device::ton_msg(void) const
{
return BIT(m_reg_address , REG_ADDR_TA_BIT);