6821pia: Add port line write handlers (nw)

This commit is contained in:
AJR 2019-05-15 11:52:21 -04:00
parent fd0d4bf93b
commit 8ca5b0051d
2 changed files with 52 additions and 0 deletions

View File

@ -910,6 +910,23 @@ void pia6821_device::write_porta(uint8_t data)
}
//-------------------------------------------------
// write_porta_line
//-------------------------------------------------
void pia6821_device::write_porta_line(int line, bool state)
{
if (!m_in_a_pushed)
m_port_a_z_mask = 0xff;
uint8_t mask = 1 << line;
if (state)
set_a_input(m_in_a | mask, m_port_a_z_mask & ~mask);
else
set_a_input(m_in_a & ~mask, m_port_a_z_mask & ~mask);
}
//-------------------------------------------------
// a_output
//-------------------------------------------------
@ -1022,6 +1039,21 @@ void pia6821_device::write_portb(uint8_t data)
}
//-------------------------------------------------
// write_portb_line
//-------------------------------------------------
void pia6821_device::write_portb_line(int line, bool state)
{
uint8_t mask = 1 << line;
if (state)
write_portb(m_in_b | mask);
else
write_portb(m_in_b & ~mask);
}
//-------------------------------------------------
// b_output
//-------------------------------------------------

View File

@ -65,9 +65,19 @@ public:
DECLARE_WRITE8_MEMBER( porta_w ) { write_porta(data); }
void write_porta(uint8_t data);
void write_porta_line(int line, bool state);
void set_a_input(uint8_t data, uint8_t z_mask);
uint8_t a_output();
DECLARE_WRITE_LINE_MEMBER( pa0_w ) { write_porta_line(0, state); }
DECLARE_WRITE_LINE_MEMBER( pa1_w ) { write_porta_line(1, state); }
DECLARE_WRITE_LINE_MEMBER( pa2_w ) { write_porta_line(2, state); }
DECLARE_WRITE_LINE_MEMBER( pa3_w ) { write_porta_line(3, state); }
DECLARE_WRITE_LINE_MEMBER( pa4_w ) { write_porta_line(4, state); }
DECLARE_WRITE_LINE_MEMBER( pa5_w ) { write_porta_line(5, state); }
DECLARE_WRITE_LINE_MEMBER( pa6_w ) { write_porta_line(6, state); }
DECLARE_WRITE_LINE_MEMBER( pa7_w ) { write_porta_line(7, state); }
DECLARE_WRITE_LINE_MEMBER( ca1_w );
DECLARE_WRITE_LINE_MEMBER( ca2_w );
@ -76,8 +86,18 @@ public:
DECLARE_WRITE8_MEMBER( portb_w ) { write_portb(data); }
void write_portb(uint8_t data);
void write_portb_line(int line, bool state);
uint8_t b_output();
DECLARE_WRITE_LINE_MEMBER( pb0_w ) { write_portb_line(0, state); }
DECLARE_WRITE_LINE_MEMBER( pb1_w ) { write_portb_line(1, state); }
DECLARE_WRITE_LINE_MEMBER( pb2_w ) { write_portb_line(2, state); }
DECLARE_WRITE_LINE_MEMBER( pb3_w ) { write_portb_line(3, state); }
DECLARE_WRITE_LINE_MEMBER( pb4_w ) { write_portb_line(4, state); }
DECLARE_WRITE_LINE_MEMBER( pb5_w ) { write_portb_line(5, state); }
DECLARE_WRITE_LINE_MEMBER( pb6_w ) { write_portb_line(6, state); }
DECLARE_WRITE_LINE_MEMBER( pb7_w ) { write_portb_line(7, state); }
DECLARE_WRITE_LINE_MEMBER( cb1_w );
DECLARE_WRITE_LINE_MEMBER( cb2_w );