From 2602b5251763a2abf93e0c2774ae85837fcdb414 Mon Sep 17 00:00:00 2001 From: fulivi Date: Tue, 31 Jan 2017 15:19:19 +0100 Subject: [PATCH] hp9845: fixed a bug in PHI driver (no data freeze when a sec. address is received) --- src/devices/machine/phi.cpp | 18 +++++++++++------- src/devices/machine/phi.h | 1 + 2 files changed, 12 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); diff --git a/src/devices/machine/phi.h b/src/devices/machine/phi.h index 23a9d224108..bd1a0906143 100644 --- a/src/devices/machine/phi.h +++ b/src/devices/machine/phi.h @@ -276,6 +276,7 @@ private: void clear_nba(nba_origin_t origin); bool if_cmd_received(uint8_t byte); bool byte_received(uint8_t byte , bool eoi); + void rx_n_data_freeze(uint16_t word); bool ton_msg(void) const; bool lon_msg(void) const; bool odd_parity(uint8_t byte) const;