summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist
diff options
context:
space:
mode:
author Joakim Larsson Edstrom <joakimlarsson42@gmail.com>2017-02-12 19:21:54 +0100
committer Joakim Larsson Edstrom <joakimlarsson42@gmail.com>2017-02-17 09:05:30 +0100
commitf9f149a57978ca2836346c75b5ba820f6ecd5035 (patch)
tree27fc65a3e7765acecda9cc97d0a179e7286f9b5a /src/lib/netlist
parenteed65a01ac23ee7ad2f6641b6133b89ec2bf7a76 (diff)
new netlist device: 74164 - 8bit parallel output serial shift register
Diffstat (limited to 'src/lib/netlist')
-rw-r--r--src/lib/netlist/devices/net_lib.cpp2
-rw-r--r--src/lib/netlist/devices/net_lib.h1
-rw-r--r--src/lib/netlist/devices/nld_74164.cpp104
-rw-r--r--src/lib/netlist/devices/nld_74164.h57
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_ */