diff --git a/src/devices/machine/6821pia.cpp b/src/devices/machine/6821pia.cpp index 60efe473f19..4171b9c6f82 100644 --- a/src/devices/machine/6821pia.cpp +++ b/src/devices/machine/6821pia.cpp @@ -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 //------------------------------------------------- diff --git a/src/devices/machine/6821pia.h b/src/devices/machine/6821pia.h index 8457399cf1a..5682b43ecef 100644 --- a/src/devices/machine/6821pia.h +++ b/src/devices/machine/6821pia.h @@ -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 );