hp9845: fixed a bug in PHI driver (no data freeze when a sec. address

is received)
This commit is contained in:
fulivi 2017-01-31 15:19:19 +01:00
parent a7f9dcd63b
commit 2602b52517
2 changed files with 12 additions and 7 deletions

View File

@ -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);

View File

@ -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;