diff options
author | 2017-02-12 19:21:54 +0100 | |
---|---|---|
committer | 2017-02-17 09:05:30 +0100 | |
commit | f9f149a57978ca2836346c75b5ba820f6ecd5035 (patch) | |
tree | 27fc65a3e7765acecda9cc97d0a179e7286f9b5a | |
parent | eed65a01ac23ee7ad2f6641b6133b89ec2bf7a76 (diff) |
new netlist device: 74164 - 8bit parallel output serial shift register
-rw-r--r-- | src/lib/netlist/devices/net_lib.cpp | 2 | ||||
-rw-r--r-- | src/lib/netlist/devices/net_lib.h | 1 | ||||
-rw-r--r-- | src/lib/netlist/devices/nld_74164.cpp | 104 | ||||
-rw-r--r-- | src/lib/netlist/devices/nld_74164.h | 57 |
4 files changed, 164 insertions, 0 deletions
diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp index f13117bb3e4..7f7f8d0cd43 100644 --- a/src/lib/netlist/devices/net_lib.cpp +++ b/src/lib/netlist/devices/net_lib.cpp @@ -78,6 +78,7 @@ namespace netlist ENTRYX(74123, TTL_74123, "") ENTRYX(74153, TTL_74153, "+C0,+C1,+C2,+C3,+A,+B,+G") ENTRYX(74161, TTL_74161, "+A,+B,+C,+D,+CLRQ,+LOADQ,+CLK,+ENABLEP,+ENABLET") + ENTRYX(74164, TTL_74164, "+A,+B,+CLRQ,+CLK") ENTRYX(74165, TTL_74165, "+CLK,+CLKINH,+SH_LDQ,+SER,+A,+B,+C,+D,+E,+F,+G,+H") ENTRYX(74166, TTL_74166, "+CLK,+CLKINH,+SH_LDQ,+SER,+A,+B,+C,+D,+E,+F,+G,+H,+CLRQ") ENTRYX(74174, TTL_74174, "+CLK,+D1,+D2,+D3,+D4,+D5,+D6,+CLRQ") @@ -126,6 +127,7 @@ namespace netlist ENTRYX(74123_dip, TTL_74123_DIP, "") ENTRYX(74153_dip, TTL_74153_DIP, "") ENTRYX(74161_dip, TTL_74161_DIP, "") + ENTRYX(74164_dip, TTL_74164_DIP, "") ENTRYX(74165_dip, TTL_74165_DIP, "") ENTRYX(74166_dip, TTL_74166_DIP, "") ENTRYX(74174_dip, TTL_74174_DIP, "") diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h index 6b0ecd815f5..58a587ed808 100644 --- a/src/lib/netlist/devices/net_lib.h +++ b/src/lib/netlist/devices/net_lib.h @@ -52,6 +52,7 @@ #include "nld_74123.h" #include "nld_74153.h" #include "nld_74161.h" +#include "nld_74164.h" #include "nld_74165.h" #include "nld_74166.h" #include "nld_74174.h" diff --git a/src/lib/netlist/devices/nld_74164.cpp b/src/lib/netlist/devices/nld_74164.cpp new file mode 100644 index 00000000000..5b2b1d8d080 --- /dev/null +++ b/src/lib/netlist/devices/nld_74164.cpp @@ -0,0 +1,104 @@ +// license:BSD-3-Clause +// copyright-holders:Joakim Larsson Edstrom +/* + * nld_74164.cpp + * + * Thanks to the 74161 work of Ryan and the huge Netlist effort by Couriersud + * implementing this was simple. + * + */ + +#include "nld_74164.h" +#include "../nl_base.h" + +namespace netlist +{ + namespace devices + { + NETLIB_OBJECT(74164) + { + NETLIB_CONSTRUCTOR(74164) + , m_A(*this, "A") + , m_B(*this, "B") + , m_CLRQ(*this, "CLRQ") + , m_CLK(*this, "CLK") + , m_cnt(*this, "m_cnt", 0) + , m_last_CLK(*this, "m_last_CLK", 0) + , m_Q(*this, {{"QA", "QB", "QC", "QD", "QE", "QF", "QG", "QH"}}) + { + } + + NETLIB_RESETI(); + NETLIB_UPDATEI(); + + protected: + logic_input_t m_A; + logic_input_t m_B; + logic_input_t m_CLRQ; + logic_input_t m_CLK; + + state_var<unsigned> m_cnt; + state_var<unsigned> m_last_CLK; + + object_array_t<logic_output_t, 8> m_Q; + }; + + NETLIB_OBJECT_DERIVED(74164_dip, 74164) + { + NETLIB_CONSTRUCTOR_DERIVED(74164_dip, 74164) + { + register_subalias("1", m_A); + register_subalias("2", m_B); + register_subalias("3", m_Q[0]); + register_subalias("4", m_Q[1]); + register_subalias("5", m_Q[2]); + register_subalias("6", m_Q[3]); + + register_subalias("8", m_CLK); + register_subalias("9", m_CLRQ); + register_subalias("10", m_Q[4]); + register_subalias("11", m_Q[5]); + register_subalias("12", m_Q[6]); + register_subalias("13", m_Q[7]); + + } + }; + + NETLIB_RESET(74164) + { + m_cnt = 0; + m_last_CLK = 0; + } + + NETLIB_UPDATE(74164) + { + if (!m_CLRQ()) + { + m_cnt = 0; + } + else if (m_CLK() && !m_last_CLK) + { + m_cnt = (m_cnt << 1) & 0xfe; + if (m_A() && m_B()) + { + m_cnt |= 0x01; + } + else + { + m_cnt &= 0xfe; + } + } + + m_last_CLK = m_CLK(); + + for (std::size_t i=0; i<8; i++) + { + m_Q[i].push((m_cnt >> i) & 1, NLTIME_FROM_NS(30)); + } + } + + NETLIB_DEVICE_IMPL(74164) + NETLIB_DEVICE_IMPL(74164_dip) + + } //namespace devices +} // namespace netlist diff --git a/src/lib/netlist/devices/nld_74164.h b/src/lib/netlist/devices/nld_74164.h new file mode 100644 index 00000000000..d7f29d386de --- /dev/null +++ b/src/lib/netlist/devices/nld_74164.h @@ -0,0 +1,57 @@ +// license:BSD-3-Clause +// copyright-holders:Joakim Larsson Edstrom +/***************************************************************************** + + 5/74164 8-bit parallel-out serial shift registers + +*********************************************************************** + + Connection Diagram: + ___ ___ + A 1 |* u | 14 Vcc + B 2 | | 13 QH + QA 3 | | 12 QG + QB 4 | | 11 QF + QC 5 | | 10 QE + QD 6 | | 9 *Clear + GND 7 |_______| 8 Clock + +*********************************************************************** + Function Table: + +-------------------------+----------------+ + | Inputs | Qutputs* | + +-------+-------+---------+----------------+ + | Clear | Clock | A B | QA QB ... QH | + +-------+-------+---------+----------------+ + | L | X | X X | L L L | + | H | L | X X | QA0 QB0 QH0 | + | H | ^ | H H | H QAn QGn | + | H | ^ | L X | L QAn QGn | + | H | ^ | X L | L QAn QGn | + +-------+-------+---------+----------------+ + + H = High Level (steady state) + L = Low Level (steady state) + X = Don't Care + ^ = Transition from low to high level + QA0, QB0 ... QH0 = The level of QA, QB ... QH before the indicated steady-state input conditions were established. + QAn, QGn = The level of QA or QG before the most recent ^ transition of the clock; indicates a 1 bit shift. + +**********************************************************************/ + +#ifndef NLD_74164_H_ +#define NLD_74164_H_ + +#include "../nl_setup.h" + +#define TTL_74164(name, cA, cB, cCLRQ, cCLK) \ + NET_REGISTER_DEV(TTL_74164, name) \ + NET_CONNECT(name, A, cA) \ + NET_CONNECT(name, B, cB) \ + NET_CONNECT(name, CLRQ, cCLRQ) \ + NET_CONNECT(name, CLK, cCLK) + +#define TTL_74164_DIP(name) \ + NET_REGISTER_DEV(TTL_74164_DIP, name) + +#endif /* NLD_74164_H_ */ |