netlist: Add 74113 device.

This commit is contained in:
Aaron Giles 2020-07-10 02:07:01 -07:00 committed by couriersud
parent 5eef12fe18
commit a6239d582b
8 changed files with 285 additions and 0 deletions

View File

@ -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",

View File

@ -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" />

View File

@ -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>

View File

@ -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)

View File

@ -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"

View File

@ -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

View File

@ -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_ */

View File

@ -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
// ---------------------------------------------------------------------