diff options
Diffstat (limited to 'src/lib/netlist/devices/nld_tristate.cpp')
-rw-r--r-- | src/lib/netlist/devices/nld_tristate.cpp | 77 |
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 |