summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2019-05-15 11:52:21 -0400
committer AJR <ajrhacker@users.noreply.github.com>2019-05-15 11:52:21 -0400
commit8ca5b0051d66cd97f284befb98ace4f4bbf5ab9a (patch)
treedc913bc6778fbd8f2dfbdc0f1f913c72fee46fd8
parentfd0d4bf93b801ef6a46146fb9cd850d9680bde5c (diff)
6821pia: Add port line write handlers (nw)
-rw-r--r--src/devices/machine/6821pia.cpp32
-rw-r--r--src/devices/machine/6821pia.h20
2 files changed, 52 insertions, 0 deletions
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
@@ -911,6 +911,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
//-------------------------------------------------
@@ -1023,6 +1040,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 );