summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/devices/nld_tristate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/devices/nld_tristate.cpp')
-rw-r--r--src/lib/netlist/devices/nld_tristate.cpp77
1 files changed, 37 insertions, 40 deletions
diff --git a/src/lib/netlist/devices/nld_tristate.cpp b/src/lib/netlist/devices/nld_tristate.cpp
index b05d09ea71e..75576313af5 100644
--- a/src/lib/netlist/devices/nld_tristate.cpp
+++ b/src/lib/netlist/devices/nld_tristate.cpp
@@ -3,75 +3,72 @@
/*
* nld_tristate.cpp
*
+ * tristate: Hack to merge two tri-stated outputs together
+ *
*/
-#include "nld_tristate.h"
-#include "netlist/nl_base.h"
+#include "nl_base.h"
+
+// FIXME: netlist now supports proper tristate outputs. All of this is legacy
+// now and needs to be removed at some time.
+
+namespace netlist::devices {
-namespace netlist
-{
- namespace devices
- {
NETLIB_OBJECT(tristate)
{
NETLIB_CONSTRUCTOR(tristate)
- , m_CEQ(*this, {{ "CEQ1", "CEQ2" }})
- , m_D(*this, {{ "D1", "D2" }})
+ , m_CEQ(*this, { "CEQ1", "CEQ2" }, NETLIB_DELEGATE(inputs))
+ , m_D(*this, { "D1", "D2" }, NETLIB_DELEGATE(inputs))
, m_Q(*this, "Q")
{
}
- NETLIB_UPDATEI();
-
protected:
object_array_t<logic_input_t, 2> m_CEQ;
object_array_t<logic_input_t, 2> m_D;
logic_output_t m_Q;
+ private:
+ NETLIB_HANDLERI(inputs)
+ {
+ unsigned q = 0;
+ if (!m_CEQ[0]())
+ q |= m_D[0]();
+ if (!m_CEQ[1]())
+ q |= m_D[1]();
+
+ m_Q.push(q, NLTIME_FROM_NS(1));
+ }
};
NETLIB_OBJECT(tristate3)
{
NETLIB_CONSTRUCTOR(tristate3)
- , m_CEQ(*this, {{ "CEQ1", "CEQ2", "CEQ3" }} )
- , m_D(*this, {{ "D1", "D2", "D3" }} )
+ , m_CEQ(*this, { "CEQ1", "CEQ2", "CEQ3" }, NETLIB_DELEGATE(inputs) )
+ , m_D(*this, { "D1", "D2", "D3" }, NETLIB_DELEGATE(inputs) )
, m_Q(*this, "Q")
{
}
- NETLIB_UPDATEI();
-
protected:
object_array_t<logic_input_t, 3> m_CEQ;
object_array_t<logic_input_t, 3> m_D;
logic_output_t m_Q;
- };
-
- NETLIB_UPDATE(tristate)
- {
- unsigned q = 0;
- if (!m_CEQ[0]())
- q |= m_D[0]();
- if (!m_CEQ[1]())
- q |= m_D[1]();
-
- m_Q.push(q, NLTIME_FROM_NS(1));
- }
-
- NETLIB_UPDATE(tristate3)
- {
- unsigned q = 0;
- if (!m_CEQ[0]())
- q |= m_D[0]();
- if (!m_CEQ[1]())
- q |= m_D[1]();
- if (!m_CEQ[2]())
- q |= m_D[2]();
+ private:
+ NETLIB_HANDLERI(inputs)
+ {
+ unsigned q = 0;
+ if (!m_CEQ[0]())
+ q |= m_D[0]();
+ if (!m_CEQ[1]())
+ q |= m_D[1]();
+ if (!m_CEQ[2]())
+ q |= m_D[2]();
- m_Q.push(q, NLTIME_FROM_NS(1));
- }
+ m_Q.push(q, NLTIME_FROM_NS(1));
+ }
+ };
NETLIB_DEVICE_IMPL(tristate, "TTL_TRISTATE", "+CEQ1,+D1,+CEQ2,+D2")
NETLIB_DEVICE_IMPL(tristate3, "TTL_TRISTATE3", "")
- } //namespace devices
-} // namespace netlist
+} // namespace netlist::devices