mirror of
https://github.com/holub/mame
synced 2025-07-05 18:08:04 +03:00
uPD1990AC: Only latch CSx bits when STB is high. [R. Belmont]
This commit is contained in:
parent
3bdeec4ad3
commit
4468e3e7cc
@ -193,6 +193,7 @@ void upd1990a_device::device_start()
|
||||
save_item(NAME(m_c));
|
||||
save_item(NAME(m_clk));
|
||||
save_item(NAME(m_tp));
|
||||
save_item(NAME(m_c_unlatched));
|
||||
}
|
||||
|
||||
|
||||
@ -298,6 +299,8 @@ WRITE_LINE_MEMBER( upd1990a_device::stb_w )
|
||||
|
||||
if (m_cs && m_stb && !m_clk)
|
||||
{
|
||||
m_c = m_c_unlatched; // if STB = 1, latch in the command bits
|
||||
|
||||
switch (m_c)
|
||||
{
|
||||
case MODE_REGISTER_HOLD:
|
||||
@ -426,8 +429,10 @@ WRITE_LINE_MEMBER( upd1990a_device::clk_w )
|
||||
|
||||
if (!m_clk && state) // rising edge
|
||||
{
|
||||
logerror("Rising edge\n");
|
||||
if (m_c == MODE_SHIFT)
|
||||
{
|
||||
logerror("MODE_SHIFT\n");
|
||||
m_shift_reg[0] >>= 1;
|
||||
m_shift_reg[0] |= (BIT(m_shift_reg[1], 0) << 7);
|
||||
|
||||
@ -445,6 +450,7 @@ WRITE_LINE_MEMBER( upd1990a_device::clk_w )
|
||||
|
||||
if (m_oe)
|
||||
{
|
||||
logerror("OE\n");
|
||||
m_data_out = BIT(m_shift_reg[0], 0);
|
||||
|
||||
if (LOG) logerror("uPD1990A '%s' DATA OUT %u\n", tag(), m_data_out);
|
||||
@ -466,7 +472,7 @@ WRITE_LINE_MEMBER( upd1990a_device::c0_w )
|
||||
{
|
||||
if (LOG) logerror("uPD1990A '%s' C0 %u\n", tag(), state);
|
||||
|
||||
m_c = (m_c & 0x06) | state;
|
||||
m_c_unlatched = (m_c_unlatched & 0x06) | state;
|
||||
}
|
||||
|
||||
|
||||
@ -478,7 +484,7 @@ WRITE_LINE_MEMBER( upd1990a_device::c1_w )
|
||||
{
|
||||
if (LOG) logerror("uPD1990A '%s' C1 %u\n", tag(), state);
|
||||
|
||||
m_c = (m_c & 0x05) | (state << 1);
|
||||
m_c_unlatched = (m_c_unlatched & 0x05) | (state << 1);
|
||||
}
|
||||
|
||||
|
||||
@ -490,7 +496,7 @@ WRITE_LINE_MEMBER( upd1990a_device::c2_w )
|
||||
{
|
||||
if (LOG) logerror("uPD1990A '%s' C2 %u\n", tag(), state);
|
||||
|
||||
m_c = (m_c & 0x03) | (state << 2);
|
||||
m_c_unlatched = (m_c_unlatched & 0x03) | (state << 2);
|
||||
}
|
||||
|
||||
|
||||
|
@ -115,6 +115,7 @@ private:
|
||||
int m_c; // command
|
||||
int m_clk; // shift clock
|
||||
int m_tp; // time pulse
|
||||
int m_c_unlatched; // command waiting for STB
|
||||
|
||||
// timers
|
||||
emu_timer *m_timer_clock;
|
||||
|
Loading…
Reference in New Issue
Block a user