netlist: Add 74377/74378/74379 devices to netlist. [Aaron Giles]

This commit is contained in:
Aaron Giles 2020-05-13 09:58:48 -07:00 committed by couriersud
parent cfc3a76d04
commit 5739043ced
7 changed files with 348 additions and 1 deletions

View File

@ -180,6 +180,8 @@ project "netlist"
MAME_DIR .. "src/lib/netlist/devices/nld_74193.h",
MAME_DIR .. "src/lib/netlist/devices/nld_74194.cpp",
MAME_DIR .. "src/lib/netlist/devices/nld_74194.h",
MAME_DIR .. "src/lib/netlist/devices/nld_74377.cpp",
MAME_DIR .. "src/lib/netlist/devices/nld_74377.h",
MAME_DIR .. "src/lib/netlist/devices/nld_74393.cpp",
MAME_DIR .. "src/lib/netlist/devices/nld_74393.h",
MAME_DIR .. "src/lib/netlist/devices/nld_74365.cpp",

View File

@ -73,7 +73,7 @@ TIDY_DB = $(OBJ)/compile_commands.json
# LTO = -flto=4 -fuse-linker-plugin -flto-partition=balanced -Wodr
CCOREFLAGS = -g -O3 -std=c++17 -I$(CURDIR)/.. -I$(CURDIR)/../..
CCOREFLAGS = -g -O3 -std=c++14 -I$(CURDIR)/.. -I$(CURDIR)/../..
CFLAGS = $(LTO) $(CCOREFLAGS) $(CEXTRAFLAGS)
@ -174,6 +174,7 @@ NLOBJS := \
$(NLOBJ)/devices/nld_74193.o \
$(NLOBJ)/devices/nld_74194.o \
$(NLOBJ)/devices/nld_74365.o \
$(NLOBJ)/devices/nld_74377.o \
$(NLOBJ)/devices/nld_74393.o \
$(NLOBJ)/devices/nld_74ls629.o \
$(NLOBJ)/devices/nld_82S16.o \

View File

@ -129,6 +129,9 @@ namespace devices
LIB_ENTRY(74193)
LIB_ENTRY(74194)
LIB_ENTRY(74365)
LIB_ENTRY(74377_dip)
LIB_ENTRY(74378_dip)
LIB_ENTRY(74379_dip)
LIB_ENTRY(74393)
LIB_ENTRY(74393_dip)
//ENTRY(74279, TTL_74279, "") // only dip available

View File

@ -64,6 +64,7 @@
#include "nld_74193.h"
#include "nld_74194.h"
#include "nld_74365.h"
#include "nld_74377.h"
#include "nld_74393.h"
#include "nld_7448.h"
#include "nld_7450.h"

View File

@ -0,0 +1,256 @@
// license:GPL-2.0+
// copyright-holders:Couriersud
/*
* nld_74377.c
*
*/
#include "nld_74377.h"
#include "netlist/nl_base.h"
namespace netlist
{
namespace devices
{
constexpr const std::array<netlist_time, 2> delay = { NLTIME_FROM_NS(25), NLTIME_FROM_NS(25) };
NETLIB_OBJECT(74377_gate)
{
NETLIB_CONSTRUCTOR(74377_gate)
, m_E(*this, "E")
, m_D(*this, "D")
, m_CP(*this, "CP")
, m_Q(*this, "Q")
, m_QQ(*this, "QQ")
, m_cp(*this, "m_cp", 0)
, m_power_pins(*this)
{
}
NETLIB_RESETI()
{
}
NETLIB_UPDATEI()
{
netlist_sig_t last_cp = m_cp;
m_cp = m_CP();
if (!m_E() && !last_cp && m_cp)
{
netlist_sig_t d = m_D();
m_Q.push(d, delay[d]);
m_QQ.push(d ^ 1, delay[d ^ 1]);
}
}
friend class NETLIB_NAME(74377_dip);
friend class NETLIB_NAME(74378_dip);
friend class NETLIB_NAME(74379_dip);
private:
logic_input_t m_E;
logic_input_t m_D;
logic_input_t m_CP;
logic_output_t m_Q;
logic_output_t m_QQ;
state_var_sig m_cp;
nld_power_pins m_power_pins;
};
NETLIB_OBJECT(74377_dip)
{
NETLIB_CONSTRUCTOR(74377_dip)
, m_A(*this, "A")
, m_B(*this, "B")
, m_C(*this, "C")
, m_D(*this, "D")
, m_E(*this, "E")
, m_F(*this, "F")
, m_G(*this, "G")
, m_H(*this, "H")
{
register_subalias("1", m_A.m_E);
register_subalias("2", m_A.m_Q);
register_subalias("3", m_A.m_D);
register_subalias("4", m_B.m_D);
register_subalias("5", m_B.m_Q);
register_subalias("6", m_C.m_Q);
register_subalias("7", m_C.m_D);
register_subalias("8", m_D.m_D);
register_subalias("9", m_D.m_Q);
register_subalias("10", "A.GND");
register_subalias("11", m_A.m_CP);
register_subalias("12", m_E.m_Q);
register_subalias("13", m_E.m_D);
register_subalias("14", m_F.m_D);
register_subalias("15", m_F.m_Q);
register_subalias("16", m_G.m_Q);
register_subalias("17", m_G.m_D);
register_subalias("18", m_H.m_D);
register_subalias("19", m_H.m_Q);
register_subalias("20", "A.VCC");
connect("A.GND", "B.GND");
connect("A.GND", "C.GND");
connect("A.GND", "D.GND");
connect("A.GND", "E.GND");
connect("A.GND", "F.GND");
connect("A.GND", "G.GND");
connect("A.GND", "H.GND");
connect("A.VCC", "B.VCC");
connect("A.VCC", "C.VCC");
connect("A.VCC", "D.VCC");
connect("A.VCC", "E.VCC");
connect("A.VCC", "F.VCC");
connect("A.VCC", "G.VCC");
connect("A.VCC", "H.VCC");
connect(m_A.m_E, m_B.m_E);
connect(m_A.m_E, m_C.m_E);
connect(m_A.m_E, m_D.m_E);
connect(m_A.m_E, m_E.m_E);
connect(m_A.m_E, m_F.m_E);
connect(m_A.m_E, m_G.m_E);
connect(m_A.m_E, m_H.m_E);
connect(m_A.m_CP, m_B.m_CP);
connect(m_A.m_CP, m_C.m_CP);
connect(m_A.m_CP, m_D.m_CP);
connect(m_A.m_CP, m_E.m_CP);
connect(m_A.m_CP, m_F.m_CP);
connect(m_A.m_CP, m_G.m_CP);
connect(m_A.m_CP, m_H.m_CP);
}
//NETLIB_RESETI();
//NETLIB_UPDATEI();
protected:
NETLIB_SUB(74377_gate) m_A;
NETLIB_SUB(74377_gate) m_B;
NETLIB_SUB(74377_gate) m_C;
NETLIB_SUB(74377_gate) m_D;
NETLIB_SUB(74377_gate) m_E;
NETLIB_SUB(74377_gate) m_F;
NETLIB_SUB(74377_gate) m_G;
NETLIB_SUB(74377_gate) m_H;
};
NETLIB_OBJECT(74378_dip)
{
NETLIB_CONSTRUCTOR(74378_dip)
, m_A(*this, "A")
, m_B(*this, "B")
, m_C(*this, "C")
, m_D(*this, "D")
, m_E(*this, "E")
, m_F(*this, "F")
{
register_subalias("1", m_A.m_E);
register_subalias("2", m_A.m_Q);
register_subalias("3", m_A.m_D);
register_subalias("4", m_B.m_D);
register_subalias("5", m_B.m_Q);
register_subalias("6", m_C.m_D);
register_subalias("7", m_C.m_Q);
register_subalias("8", "A.GND");
register_subalias("9", m_A.m_CP);
register_subalias("10", m_D.m_Q);
register_subalias("11", m_D.m_D);
register_subalias("12", m_E.m_Q);
register_subalias("13", m_E.m_D);
register_subalias("14", m_F.m_D);
register_subalias("15", m_F.m_Q);
register_subalias("16", "A.VCC");
connect("A.GND", "B.GND");
connect("A.GND", "C.GND");
connect("A.GND", "D.GND");
connect("A.GND", "E.GND");
connect("A.GND", "F.GND");
connect("A.VCC", "B.VCC");
connect("A.VCC", "C.VCC");
connect("A.VCC", "D.VCC");
connect("A.VCC", "E.VCC");
connect("A.VCC", "F.VCC");
connect(m_A.m_E, m_B.m_E);
connect(m_A.m_E, m_C.m_E);
connect(m_A.m_E, m_D.m_E);
connect(m_A.m_E, m_E.m_E);
connect(m_A.m_E, m_F.m_E);
connect(m_A.m_CP, m_B.m_CP);
connect(m_A.m_CP, m_C.m_CP);
connect(m_A.m_CP, m_D.m_CP);
connect(m_A.m_CP, m_E.m_CP);
connect(m_A.m_CP, m_F.m_CP);
}
//NETLIB_RESETI();
//NETLIB_UPDATEI();
protected:
NETLIB_SUB(74377_gate) m_A;
NETLIB_SUB(74377_gate) m_B;
NETLIB_SUB(74377_gate) m_C;
NETLIB_SUB(74377_gate) m_D;
NETLIB_SUB(74377_gate) m_E;
NETLIB_SUB(74377_gate) m_F;
};
NETLIB_OBJECT(74379_dip)
{
NETLIB_CONSTRUCTOR(74379_dip)
, m_A(*this, "A")
, m_B(*this, "B")
, m_C(*this, "C")
, m_D(*this, "D")
{
register_subalias("1", m_A.m_E);
register_subalias("2", m_A.m_Q);
register_subalias("3", m_A.m_QQ);
register_subalias("4", m_A.m_D);
register_subalias("5", m_B.m_D);
register_subalias("6", m_B.m_QQ);
register_subalias("7", m_B.m_Q);
register_subalias("8", "A.GND");
register_subalias("9", m_A.m_CP);
register_subalias("10", m_C.m_Q);
register_subalias("11", m_C.m_QQ);
register_subalias("12", m_C.m_D);
register_subalias("13", m_D.m_D);
register_subalias("14", m_D.m_QQ);
register_subalias("15", m_D.m_Q);
register_subalias("16", "A.VCC");
connect("A.GND", "B.GND");
connect("A.GND", "C.GND");
connect("A.GND", "D.GND");
connect("A.VCC", "B.VCC");
connect("A.VCC", "C.VCC");
connect("A.VCC", "D.VCC");
connect(m_A.m_E, m_B.m_E);
connect(m_A.m_E, m_C.m_E);
connect(m_A.m_E, m_D.m_E);
connect(m_A.m_CP, m_B.m_CP);
connect(m_A.m_CP, m_C.m_CP);
connect(m_A.m_CP, m_D.m_CP);
}
//NETLIB_RESETI();
//NETLIB_UPDATEI();
protected:
NETLIB_SUB(74377_gate) m_A;
NETLIB_SUB(74377_gate) m_B;
NETLIB_SUB(74377_gate) m_C;
NETLIB_SUB(74377_gate) m_D;
};
NETLIB_DEVICE_IMPL(74377_gate, "TTL_74377_GATE", "")
NETLIB_DEVICE_IMPL(74377_dip, "TTL_74377_DIP", "")
NETLIB_DEVICE_IMPL(74378_dip, "TTL_74378_DIP", "")
NETLIB_DEVICE_IMPL(74379_dip, "TTL_74379_DIP", "")
} //namespace devices
} // namespace netlist

View File

@ -0,0 +1,69 @@
// license:GPL-2.0+
// copyright-holders:Couriersud,Aaron Giles
/*
* nld_74377.h
*
* DM74377: Octal D Flip-Flop With Enable
*
* +--------------+
* /E |1 ++ 20| VCC
* Q0 |2 19| Q7
* D0 |3 18| D7
* D1 |4 74377 17| D6
* Q1 |5 16| Q6
* Q2 |6 15| Q5
* D2 |7 14| D5
* D3 |8 13| D4
* Q3 |9 12| Q4
* GND |10 11| CP
* +--------------+
*
* DM74378: Hex D Flip-Flop With Enable
*
* +--------------+
* /E |1 ++ 16| VCC
* Q0 |2 15| Q5
* D0 |3 14| D5
* D1 |4 74378 13| D4
* Q1 |5 12| Q4
* D2 |6 11| D3
* Q2 |7 10| Q3
* GND |8 9| CP
* +--------------+
*
* DM74379: 4-bit D Flip-Flop With Enable
*
* +--------------+
* /E |1 ++ 16| VCC
* Q0 |2 15| Q3
* /Q0 |3 14| /Q3
* D0 |4 74379 13| D3
* D1 |5 12| D2
* /Q1 |6 11| /Q2
* Q1 |7 10| Q2
* GND |8 9| CP
* +--------------+
*
* Naming conventions follow Motorola datasheet
*
*/
#ifndef NLD_74377_H_
#define NLD_74377_H_
#include "netlist/nl_setup.h"
#define TTL_74377_GATE(name) \
NET_REGISTER_DEV(TTL_74377_GATE, name)
#define TTL_74377_DIP(name) \
NET_REGISTER_DEV(TTL_74377_DIP, name)
#define TTL_74378_DIP(name) \
NET_REGISTER_DEV(TTL_74378_DIP, name)
#define TTL_74379_DIP(name) \
NET_REGISTER_DEV(TTL_74379_DIP, name)
#endif /* NLD_74377_H_ */

View File

@ -426,6 +426,21 @@
#define TTL_74365(name, pG1Q, pG2Q, pA1, pA2, pA3, pA4, pA5, pA6) \
NET_REGISTER_DEVEXT(TTL_74365, name, pG1Q, pG2Q, pA1, pA2, pA3, pA4, pA5, pA6)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74377.cpp
// ---------------------------------------------------------------------
#define TTL_74377_GATE(name) \
NET_REGISTER_DEVEXT(TTL_74377_GATE, name)
#define TTL_74377_DIP(name) \
NET_REGISTER_DEVEXT(TTL_74377_DIP, name)
#define TTL_74378_DIP(name) \
NET_REGISTER_DEVEXT(TTL_74378_DIP, name)
#define TTL_74379_DIP(name) \
NET_REGISTER_DEVEXT(TTL_74379_DIP, name)
// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_74393.cpp
// ---------------------------------------------------------------------