From a6239d582b25be01038722ee61b6cc6884c8ef09 Mon Sep 17 00:00:00 2001 From: Aaron Giles Date: Fri, 10 Jul 2020 02:07:01 -0700 Subject: netlist: Add 74113 device. --- scripts/src/netlist.lua | 2 + src/lib/netlist/buildVS/netlistlib.vcxproj | 2 + src/lib/netlist/buildVS/netlistlib.vcxproj.filters | 6 + src/lib/netlist/devices/net_lib.cpp | 4 + src/lib/netlist/devices/net_lib.h | 1 + src/lib/netlist/devices/nld_74113.cpp | 165 +++++++++++++++++++++ src/lib/netlist/devices/nld_74113.h | 84 +++++++++++ src/lib/netlist/devices/nld_devinc.h | 21 +++ 8 files changed, 285 insertions(+) create mode 100644 src/lib/netlist/devices/nld_74113.cpp create mode 100644 src/lib/netlist/devices/nld_74113.h 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 @@ + @@ -217,6 +218,7 @@ + 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 @@ Source Files + + Source Files + Source Files @@ -509,6 +512,9 @@ Header Files + + Header Files + Header Files 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 m_last_CLK; + state_var 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 @@ -417,6 +417,27 @@ #define TTL_74107A(...) \ 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 // --------------------------------------------------------------------- -- cgit v1.2.3