summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2020-07-10 02:07:01 -0700
committer couriersud <couriersud@gmx.org>2020-07-10 20:04:17 +0200
commita6239d582b25be01038722ee61b6cc6884c8ef09 (patch)
tree928d3266d4115210cee60e8dc86155d0c253609d
parent5eef12fe18ec426ebdb7df1b4e4d3afe7634ca11 (diff)
netlist: Add 74113 device.
-rw-r--r--scripts/src/netlist.lua2
-rwxr-xr-xsrc/lib/netlist/buildVS/netlistlib.vcxproj2
-rwxr-xr-xsrc/lib/netlist/buildVS/netlistlib.vcxproj.filters6
-rw-r--r--src/lib/netlist/devices/net_lib.cpp4
-rw-r--r--src/lib/netlist/devices/net_lib.h1
-rw-r--r--src/lib/netlist/devices/nld_74113.cpp165
-rw-r--r--src/lib/netlist/devices/nld_74113.h84
-rw-r--r--src/lib/netlist/devices/nld_devinc.h21
8 files changed, 285 insertions, 0 deletions
diff --git a/scripts/src/netlist.lua b/scripts/src/netlist.lua
index 4910d7484e1..0a949221079 100644
--- a/scripts/src/netlist.lua
+++ b/scripts/src/netlist.lua
@@ -165,6 +165,8 @@ project "netlist"
MAME_DIR .. "src/lib/netlist/devices/nld_7497.h",
MAME_DIR .. "src/lib/netlist/devices/nld_74107.cpp",
MAME_DIR .. "src/lib/netlist/devices/nld_74107.h",
+ MAME_DIR .. "src/lib/netlist/devices/nld_74113.cpp",
+ MAME_DIR .. "src/lib/netlist/devices/nld_74113.h",
MAME_DIR .. "src/lib/netlist/devices/nld_74123.cpp",
MAME_DIR .. "src/lib/netlist/devices/nld_74123.h",
MAME_DIR .. "src/lib/netlist/devices/nld_74125.cpp",
diff --git a/src/lib/netlist/buildVS/netlistlib.vcxproj b/src/lib/netlist/buildVS/netlistlib.vcxproj
index 5effaa1e649..1d4df8f0649 100755
--- a/src/lib/netlist/buildVS/netlistlib.vcxproj
+++ b/src/lib/netlist/buildVS/netlistlib.vcxproj
@@ -131,6 +131,7 @@
<ClCompile Include="..\devices\nld_4066.cpp" />
<ClCompile Include="..\devices\nld_4316.cpp" />
<ClCompile Include="..\devices\nld_74107.cpp" />
+ <ClCompile Include="..\devices\nld_74113.cpp" />
<ClCompile Include="..\devices\nld_74123.cpp" />
<ClCompile Include="..\devices\nld_74153.cpp" />
<ClCompile Include="..\devices\nld_74161.cpp" />
@@ -217,6 +218,7 @@
<ClInclude Include="..\devices\nld_4066.h" />
<ClInclude Include="..\devices\nld_4316.h" />
<ClInclude Include="..\devices\nld_74107.h" />
+ <ClInclude Include="..\devices\nld_74113.h" />
<ClInclude Include="..\devices\nld_74123.h" />
<ClInclude Include="..\devices\nld_74153.h" />
<ClInclude Include="..\devices\nld_74161.h" />
diff --git a/src/lib/netlist/buildVS/netlistlib.vcxproj.filters b/src/lib/netlist/buildVS/netlistlib.vcxproj.filters
index e8aeb09c28c..c41348819b8 100755
--- a/src/lib/netlist/buildVS/netlistlib.vcxproj.filters
+++ b/src/lib/netlist/buildVS/netlistlib.vcxproj.filters
@@ -174,6 +174,9 @@
<ClCompile Include="..\devices\nld_7473.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="..\devices\nld_74113.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
<ClCompile Include="..\devices\nld_4066.cpp">
<Filter>Source Files</Filter>
</ClCompile>
@@ -509,6 +512,9 @@
<ClInclude Include="..\devices\nld_7473.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="..\devices\nld_74113.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
<ClInclude Include="..\devices\nld_74161.h">
<Filter>Header Files</Filter>
</ClInclude>
diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp
index 02d888a1f3f..da6babfc092 100644
--- a/src/lib/netlist/devices/net_lib.cpp
+++ b/src/lib/netlist/devices/net_lib.cpp
@@ -106,6 +106,10 @@ namespace devices
LIB_ENTRY(74107_dip)
#endif
LIB_ENTRY(74107A) // FIXME: implement missing DIP
+ LIB_ENTRY(74113)
+ LIB_ENTRY(74113_dip)
+ LIB_ENTRY(74113A)
+ LIB_ENTRY(74113A_dip)
LIB_ENTRY(74121)
LIB_ENTRY(74123)
LIB_ENTRY(74125)
diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h
index ae788f06ba4..b4f65bf2322 100644
--- a/src/lib/netlist/devices/net_lib.h
+++ b/src/lib/netlist/devices/net_lib.h
@@ -53,6 +53,7 @@
#include "nld_4066.h"
#include "nld_4316.h"
#include "nld_74107.h"
+#include "nld_74113.h"
#include "nld_74123.h"
#include "nld_74125.h"
#include "nld_74153.h"
diff --git a/src/lib/netlist/devices/nld_74113.cpp b/src/lib/netlist/devices/nld_74113.cpp
new file mode 100644
index 00000000000..d98133fe473
--- /dev/null
+++ b/src/lib/netlist/devices/nld_74113.cpp
@@ -0,0 +1,165 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
+/*
+ * nld_74113.c
+ *
+ */
+
+#include "nld_74113.h"
+#include "netlist/nl_base.h"
+
+// Note: this can probably be merged with nld_7473.cpp
+
+namespace netlist
+{
+ namespace devices
+ {
+ NETLIB_OBJECT(74113)
+ {
+ NETLIB_CONSTRUCTOR(74113)
+ , m_CLK(*this, "CLK")
+ , m_J(*this, "J")
+ , m_K(*this, "K")
+ , m_SETQ(*this, "SETQ")
+ , m_last_CLK(*this, "m_last_CLK", 0)
+ , m_q(*this, "m_q", 0)
+ , m_Q(*this, "Q")
+ , m_QQ(*this, "QQ")
+ , m_power_pins(*this)
+ {
+ }
+
+ NETLIB_RESETI();
+ NETLIB_UPDATEI();
+
+ public:
+ logic_input_t m_CLK;
+ logic_input_t m_J;
+ logic_input_t m_K;
+ logic_input_t m_SETQ;
+
+ state_var<unsigned> m_last_CLK;
+ state_var<unsigned> m_q;
+
+ logic_output_t m_Q;
+ logic_output_t m_QQ;
+ nld_power_pins m_power_pins;
+ };
+
+ NETLIB_OBJECT_DERIVED(74113A, 74113)
+ {
+ public:
+ NETLIB_CONSTRUCTOR(74113A) { }
+
+ };
+
+ NETLIB_OBJECT(74113_dip)
+ {
+ NETLIB_CONSTRUCTOR(74113_dip)
+ , m_A(*this, "A")
+ , m_B(*this, "B")
+ {
+ register_subalias("1", m_A.m_CLK);
+ register_subalias("2", m_A.m_K);
+ register_subalias("3", m_A.m_J);
+ register_subalias("4", m_A.m_SETQ);
+ register_subalias("5", m_A.m_Q);
+ register_subalias("6", m_A.m_QQ);
+ register_subalias("7", "A.GND");
+
+ register_subalias("8", m_B.m_QQ);
+ register_subalias("9", m_B.m_Q);
+ register_subalias("10", m_B.m_SETQ);
+ register_subalias("11", m_B.m_J);
+ register_subalias("12", m_B.m_K);
+ register_subalias("13", m_B.m_CLK);
+ register_subalias("14", "A.VCC");
+
+ connect("A.GND", "B.GND");
+ connect("A.VCC", "B.VCC");
+ }
+
+ private:
+ NETLIB_SUB(74113) m_A;
+ NETLIB_SUB(74113) m_B;
+ };
+
+ NETLIB_OBJECT(74113A_dip)
+ {
+ NETLIB_CONSTRUCTOR(74113A_dip)
+ , m_A(*this, "A")
+ , m_B(*this, "B")
+ {
+ register_subalias("1", m_A.m_CLK);
+ register_subalias("2", m_A.m_K);
+ register_subalias("3", m_A.m_J);
+ register_subalias("4", m_A.m_SETQ);
+ register_subalias("5", m_A.m_Q);
+ register_subalias("6", m_A.m_QQ);
+ register_subalias("7", "A.GND");
+
+ register_subalias("8", m_B.m_QQ);
+ register_subalias("9", m_B.m_Q);
+ register_subalias("10", m_B.m_SETQ);
+ register_subalias("11", m_B.m_J);
+ register_subalias("12", m_B.m_K);
+ register_subalias("13", m_B.m_CLK);
+ register_subalias("14", "A.VCC");
+
+ connect("A.GND", "B.GND");
+ connect("A.VCC", "B.VCC");
+ }
+
+ private:
+ NETLIB_SUB(74113A) m_A;
+ NETLIB_SUB(74113A) m_B;
+ };
+
+ NETLIB_RESET(74113)
+ {
+ m_last_CLK = 0;
+ }
+
+ NETLIB_UPDATE(74113)
+ {
+ const auto JK = (m_J() << 1) | m_K();
+
+ if (m_SETQ())
+ {
+ if (!m_CLK() && m_last_CLK)
+ {
+ switch (JK)
+ {
+ case 1: // (!m_J) & m_K))
+ m_q = 0;
+ break;
+ case 2: // (m_J) & !m_K))
+ m_q = 1;
+ break;
+ case 3: // (m_J) & m_K))
+ m_q ^= 1;
+ break;
+ default:
+ case 0:
+ break;
+ }
+ }
+ }
+ else
+ {
+ m_q = 1;
+ }
+
+ m_last_CLK = m_CLK();
+
+ m_Q.push(m_q, NLTIME_FROM_NS(20)); // FIXME: timing
+ m_QQ.push(m_q ^ 1, NLTIME_FROM_NS(20)); // FIXME: timing
+ }
+
+ NETLIB_DEVICE_IMPL(74113, "TTL_74113", "+CLK,+J,+K,+CLRQ,@VCC,@GND")
+ NETLIB_DEVICE_IMPL(74113A, "TTL_74113A", "+CLK,+J,+K,+CLRQ,@VCC,@GND")
+ NETLIB_DEVICE_IMPL(74113_dip, "TTL_74113_DIP", "")
+ NETLIB_DEVICE_IMPL(74113A_dip, "TTL_74113A_DIP", "")
+
+ } //namespace devices
+} // namespace netlist
diff --git a/src/lib/netlist/devices/nld_74113.h b/src/lib/netlist/devices/nld_74113.h
new file mode 100644
index 00000000000..02f38973594
--- /dev/null
+++ b/src/lib/netlist/devices/nld_74113.h
@@ -0,0 +1,84 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
+/*
+ * nld_74113.h
+ *
+ * 74113: Dual Master-Slave J-K Flip-Flops with Set and Complementary Outputs
+ * 74113A: Dual Negative-Edge-Triggered Master-Slave J-K Flip-Flops with Set and Complementary Outputs
+ *
+ * +----------+
+ * 1CLK |1 ++ 14| VCC
+ * 1K |2 13| 2CLK
+ * 1J |3 12| 2K
+ * 1SETQ |4 74113 11| 2J
+ * 1Q |5 10| 2SETQ
+ * 1QQ |6 9| 2Q
+ * GND |7 8| 2QQ
+ * +----------+
+ *
+ *
+ * Function table 113
+ *
+ * +-----+-----+-----+---++---+-----+
+ * | SETQ| CLK | J | K || Q | QQ |
+ * +=====+=====+=====+===++===+=====+
+ * | 0 | X | X | X || 1 | 0 |
+ * | 1 | * | 0 | 0 || Q0| Q0Q |
+ * | 1 | * | 1 | 0 || 1 | 0 |
+ * | 1 | * | 0 | 1 || 0 | 1 |
+ * | 1 | * | 1 | 1 || TOGGLE |
+ * +-----+-----+-----+---++---+-----+
+ * _
+ * * = _| |_
+ *
+ * This is positive triggered, J and K
+ * are latched during clock high and
+ * transferred when CLK falls.
+ *
+ * Function table 113A
+ *
+ * +-----+-----+-----+---++---+-----+
+ * | CLRQ| CLK | J | K || Q | QQ |
+ * +=====+=====+=====+===++===+=====+
+ * | 0 | X | X | X || 0 | 1 |
+ * | 1 | F | 0 | 0 || Q0| Q0Q |
+ * | 1 | F | 1 | 0 || 1 | 0 |
+ * | 1 | F | 0 | 1 || 0 | 1 |
+ * | 1 | F | 1 | 1 || TOGGLE |
+ * | 1 | 1 | X | X || Q0| Q0Q |
+ * +-----+-----+-----+---++---+-----+
+ *
+ * THe 113A is negative triggered.
+ *
+ * Naming conventions follow Texas instruments datasheet
+ *
+ * FIXME: Currently, only the 113 is implemented.
+ * The 113A uses the same model.
+ *
+ */
+
+#ifndef NLD_74113_H_
+#define NLD_74113_H_
+
+#include "netlist/nl_setup.h"
+
+#define TTL_74113(name, cCLK, cJ, cK, cCLRQ) \
+ NET_REGISTER_DEV(TTL_74113, name) \
+ NET_CONNECT(name, GND, GND) \
+ NET_CONNECT(name, VCC, VCC) \
+ NET_CONNECT(name, CLK, cCLK) \
+ NET_CONNECT(name, J, cJ) \
+ NET_CONNECT(name, K, cK) \
+ NET_CONNECT(name, CLRQ, cCLRQ)
+
+#define TTL_74113A(name, cCLK, cJ, cK, cCLRQ) \
+ TTL_74113(name, cCLK, cJ, cK, cCLRQ)
+
+#define TTL_74113_DIP(name) \
+ NET_REGISTER_DEV(TTL_74113_DIP, name)
+
+
+#define TTL_74113A_DIP(name) \
+ NET_REGISTER_DEV(TTL_74113A_DIP, name)
+
+#endif /* NLD_74113_H_ */
diff --git a/src/lib/netlist/devices/nld_devinc.h b/src/lib/netlist/devices/nld_devinc.h
index 2b6cab33189..28f97f2bd98 100644
--- a/src/lib/netlist/devices/nld_devinc.h
+++ b/src/lib/netlist/devices/nld_devinc.h
@@ -418,6 +418,27 @@
NET_REGISTER_DEVEXT(TTL_74107A, __VA_ARGS__)
// ---------------------------------------------------------------------
+// Source: src/lib/netlist/devices/nld_74113.cpp
+// ---------------------------------------------------------------------
+// usage : TTL_74113(name, pCLK, pJ, pK, pCLRQ)
+// auto connect: VCC, GND
+#define TTL_74113(...) \
+ NET_REGISTER_DEVEXT(TTL_74113, __VA_ARGS__)
+
+// usage : TTL_74113_DIP(name)
+#define TTL_74113_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74113_DIP, __VA_ARGS__)
+
+// usage : TTL_74113A(name, pCLK, pJ, pK, pCLRQ)
+// auto connect: VCC, GND
+#define TTL_74113A(...) \
+ NET_REGISTER_DEVEXT(TTL_74113A, __VA_ARGS__)
+
+// usage : TTL_74113A_DIP(name)
+#define TTL_74113A_DIP(...) \
+ NET_REGISTER_DEVEXT(TTL_74113A_DIP, __VA_ARGS__)
+
+// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74123.cpp
// ---------------------------------------------------------------------
// usage : TTL_74123(name)