summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2020-08-01 18:26:52 +0200
committer couriersud <couriersud@gmx.org>2020-08-01 18:27:21 +0200
commit9414a219a950297ececac52675c083eaed4d66eb (patch)
treeefa5c56cd73a79c076932f4fb2e90797b7e314f9
parent2719654114e4aa693c44f92eeacf199e7db722e0 (diff)
netlist: Added CD4017/4022 devices.
* Also contains squashed clang signedness fixes
-rw-r--r--scripts/src/netlist.lua2
-rw-r--r--src/lib/netlist/build/makefile1
-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_4017.cpp86
-rw-r--r--src/lib/netlist/devices/nld_4017.h51
-rw-r--r--src/lib/netlist/devices/nld_devinc.h19
-rw-r--r--src/lib/netlist/macro/nlm_cd4xxx.cpp64
-rw-r--r--src/lib/netlist/macro/nlm_cd4xxx.h6
9 files changed, 232 insertions, 0 deletions
diff --git a/scripts/src/netlist.lua b/scripts/src/netlist.lua
index 481f2add692..2607d419576 100644
--- a/scripts/src/netlist.lua
+++ b/scripts/src/netlist.lua
@@ -138,6 +138,8 @@ project "netlist"
MAME_DIR .. "src/lib/netlist/devices/nld_4006.h",
MAME_DIR .. "src/lib/netlist/devices/nld_4013.cpp",
MAME_DIR .. "src/lib/netlist/devices/nld_4013.h",
+ MAME_DIR .. "src/lib/netlist/devices/nld_4017.cpp",
+ MAME_DIR .. "src/lib/netlist/devices/nld_4017.h",
MAME_DIR .. "src/lib/netlist/devices/nld_4020.cpp",
MAME_DIR .. "src/lib/netlist/devices/nld_4020.h",
MAME_DIR .. "src/lib/netlist/devices/nld_4053.cpp",
diff --git a/src/lib/netlist/build/makefile b/src/lib/netlist/build/makefile
index 9e10f19a60c..c4ad5397515 100644
--- a/src/lib/netlist/build/makefile
+++ b/src/lib/netlist/build/makefile
@@ -154,6 +154,7 @@ NLOBJS := \
$(NLOBJ)/devices/nld_tms4800.o \
$(NLOBJ)/devices/nld_4006.o \
$(NLOBJ)/devices/nld_4013.o \
+ $(NLOBJ)/devices/nld_4017.o \
$(NLOBJ)/devices/nld_4020.o \
$(NLOBJ)/devices/nld_4053.o \
$(NLOBJ)/devices/nld_4066.o \
diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp
index 40510225b82..460d129dff1 100644
--- a/src/lib/netlist/devices/net_lib.cpp
+++ b/src/lib/netlist/devices/net_lib.cpp
@@ -142,6 +142,8 @@ namespace devices
// FIXME: duplicate?
LIB_ENTRY(CD4006)
LIB_ENTRY(CD4006_dip)
+ LIB_ENTRY(CD4017)
+ LIB_ENTRY(CD4022)
LIB_ENTRY(CD4020_WI)
LIB_ENTRY(CD4020)
LIB_ENTRY(CD4024)
diff --git a/src/lib/netlist/devices/net_lib.h b/src/lib/netlist/devices/net_lib.h
index 60040f4589f..c3d818de17d 100644
--- a/src/lib/netlist/devices/net_lib.h
+++ b/src/lib/netlist/devices/net_lib.h
@@ -48,6 +48,7 @@ NETLIST_EXTERNAL(ROMS_lib)
#include "nld_2102A.h"
#include "nld_4006.h"
#include "nld_4013.h"
+#include "nld_4017.h"
#include "nld_4020.h"
#include "nld_4053.h"
#include "nld_4066.h"
diff --git a/src/lib/netlist/devices/nld_4017.cpp b/src/lib/netlist/devices/nld_4017.cpp
new file mode 100644
index 00000000000..c396ff73cd2
--- /dev/null
+++ b/src/lib/netlist/devices/nld_4017.cpp
@@ -0,0 +1,86 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
+/*
+ * nld_4017.c
+ *
+ */
+
+#include "nld_4017.h"
+#include "nl_base.h"
+#include "nl_factory.h"
+
+namespace netlist
+{
+ namespace devices
+ {
+
+ template <std::size_t _MaxCount>
+ NETLIB_OBJECT(CD4017_base)
+ {
+ NETLIB_CONSTRUCTOR_MODEL(CD4017_base, "CD4XXX")
+ , m_CLK(*this, "CLK", NETLIB_DELEGATE(clk))
+ , m_CLKEN(*this, "CLKEN", NETLIB_DELEGATE(inputs))
+ , m_RESET(*this, "RESET", NETLIB_DELEGATE(inputs))
+ , m_CO(*this, "CO")
+ , m_Q(*this, 0, "Q{}")
+ , m_cnt(*this, "m_cnt", 0)
+ , m_supply(*this)
+ {
+ }
+
+ NETLIB_RESETI()
+ {
+ m_CLK.set_state(logic_t::STATE_INP_LH);
+ m_cnt = 0;
+ }
+
+ NETLIB_HANDLERI(clk)
+ {
+ ++m_cnt;
+ update_outputs(m_cnt);
+ }
+
+ NETLIB_HANDLERI(inputs)
+ {
+ if (m_RESET())
+ {
+ m_CLK.inactivate();
+ m_cnt = 0;
+ update_outputs(m_cnt);
+ }
+ else if (m_CLKEN())
+ {
+ m_CLK.inactivate();
+ }
+ else
+ {
+ m_CLK.activate_lh();
+ }
+ }
+
+ public:
+ void update_outputs(const unsigned cnt) noexcept
+ {
+ for (std::size_t i = 0; i < _MaxCount; i++)
+ m_Q[i].push(i == cnt, NLTIME_FROM_NS(200));
+ m_CO.push(cnt < _MaxCount / 2, NLTIME_FROM_NS(160));
+ }
+ logic_input_t m_CLK;
+ logic_input_t m_CLKEN;
+ logic_input_t m_RESET;
+ logic_output_t m_CO;
+ object_array_t<logic_output_t, _MaxCount> m_Q;
+
+ state_var<unsigned> m_cnt;
+ nld_power_pins m_supply;
+ };
+
+ using NETLIB_NAME(CD4017) = NETLIB_NAME(CD4017_base)<10>;
+ using NETLIB_NAME(CD4022) = NETLIB_NAME(CD4017_base)<8>;
+
+
+ NETLIB_DEVICE_IMPL(CD4017, "CD4017", "")
+ NETLIB_DEVICE_IMPL(CD4022, "CD4022", "")
+
+ } //namespace devices
+} // namespace netlist
diff --git a/src/lib/netlist/devices/nld_4017.h b/src/lib/netlist/devices/nld_4017.h
new file mode 100644
index 00000000000..58ff0dabcb9
--- /dev/null
+++ b/src/lib/netlist/devices/nld_4017.h
@@ -0,0 +1,51 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
+/*
+ * nld_4017.h
+ *
+ * CD4017: Decade Counter/Divider with 10 Decoded Outputs
+ *
+ * +--------------+
+ * Q5 |1 ++ 16| VDD
+ * Q1 |2 15| RESET
+ * Q0 |3 14| CLOCK
+ * Q2 |4 4017 13| CLOCK ENABLE
+ * Q6 |5 12| CARRY OUT
+ * Q7 |6 11| Q9
+ * Q3 |7 10| Q4
+ * VSS |8 9| Q8
+ * +--------------+
+ *
+ *
+ * CD4022: Divide-by-8 Counter/Divider with 8 Decoded Outputs
+ *
+ * +--------------+
+ * Q1 |1 ++ 16| VDD
+ * Q0 |2 15| RESET
+ * Q2 |3 14| CLOCK
+ * Q5 |4 4022 13| CLOCK ENABLE
+ * Q6 |5 12| CARRY OUT
+ * NC |6 11| Q4
+ * Q3 |7 10| Q7
+ * VSS |8 9| NC
+ * +--------------+
+ *
+ * Naming conventions follow Fairchild datasheet
+ *
+ * FIXME: Timing depends on VDD-VSS
+ * This needs a cmos d-a/a-d proxy implementation.
+ *
+ */
+
+#ifndef NLD_4017_H_
+#define NLD_4017_H_
+
+#include "netlist/nl_setup.h"
+
+#define CD4017(name) \
+ NET_REGISTER_DEV(CD4017, name)
+
+#define CD4022(name) \
+ NET_REGISTER_DEV(CD4022, name)
+
+#endif /* NLD_4017_H_ */
diff --git a/src/lib/netlist/devices/nld_devinc.h b/src/lib/netlist/devices/nld_devinc.h
index 260c794763d..371bdb6f59b 100644
--- a/src/lib/netlist/devices/nld_devinc.h
+++ b/src/lib/netlist/devices/nld_devinc.h
@@ -685,6 +685,17 @@
NET_REGISTER_DEVEXT(CD4006_DIP, __VA_ARGS__)
// ---------------------------------------------------------------------
+// Source: src/lib/netlist/devices/nld_4017.cpp
+// ---------------------------------------------------------------------
+// usage : CD4017(name)
+#define CD4017(...) \
+ NET_REGISTER_DEVEXT(CD4017, __VA_ARGS__)
+
+// usage : CD4022(name)
+#define CD4022(...) \
+ NET_REGISTER_DEVEXT(CD4022, __VA_ARGS__)
+
+// ---------------------------------------------------------------------
// Source: src/lib/netlist/devices/nld_4020.cpp
// ---------------------------------------------------------------------
// usage : CD4020_WI(name, pIP, pRESET, pVDD, pVSS)
@@ -1264,6 +1275,14 @@
#define CD4013_DIP(...) \
NET_REGISTER_DEVEXT(CD4013_DIP, __VA_ARGS__)
+// usage : CD4017_DIP(name)
+#define CD4017_DIP(...) \
+ NET_REGISTER_DEVEXT(CD4017_DIP, __VA_ARGS__)
+
+// usage : CD4022_DIP(name)
+#define CD4022_DIP(...) \
+ NET_REGISTER_DEVEXT(CD4022_DIP, __VA_ARGS__)
+
// usage : CD4020_DIP(name)
#define CD4020_DIP(...) \
NET_REGISTER_DEVEXT(CD4020_DIP, __VA_ARGS__)
diff --git a/src/lib/netlist/macro/nlm_cd4xxx.cpp b/src/lib/netlist/macro/nlm_cd4xxx.cpp
index 3da618b866c..e948b6786d6 100644
--- a/src/lib/netlist/macro/nlm_cd4xxx.cpp
+++ b/src/lib/netlist/macro/nlm_cd4xxx.cpp
@@ -113,6 +113,68 @@ static NETLIST_START(CD4013_DIP)
)
NETLIST_END()
+/*
+ * CD4017: Decade Counter/Divider with 10 Decoded Outputs
+ *
+ * +--------------+
+ * Q5 |1 ++ 16| VDD
+ * Q1 |2 15| RESET
+ * Q0 |3 14| CLOCK
+ * Q2 |4 4017 13| CLOCK ENABLE
+ * Q6 |5 12| CARRY OUT
+ * Q7 |6 11| Q9
+ * Q3 |7 10| Q4
+ * VSS |8 9| Q8
+ * +--------------+
+ *
+ *
+ * CD4022: Divide-by-8 Counter/Divider with 8 Decoded Outputs
+ *
+ * +--------------+
+ * Q1 |1 ++ 16| VDD
+ * Q0 |2 15| RESET
+ * Q2 |3 14| CLOCK
+ * Q5 |4 4022 13| CLOCK ENABLE
+ * Q6 |5 12| CARRY OUT
+ * NC |6 11| Q4
+ * Q3 |7 10| Q7
+ * VSS |8 9| NC
+ * +--------------+
+ */
+
+static NETLIST_START(CD4017_DIP)
+ CD4017(A)
+
+ DIPPINS( /* +--------------+ */
+ A.Q5, /* Q5 |1 ++ 16| VDD */ A.VDD,
+ A.Q1, /* Q1 |2 15| RESET */ A.RESET,
+ A.Q0, /* Q0 |3 14| CLOCK */ A.CLK,
+ A.Q2, /* Q2 |4 4017 13| CLOCK ENABLE */ A.CLKEN,
+ A.Q6, /* Q6 |5 12| CARRY OUT */ A.CO,
+ A.Q7, /* Q7 |6 11| Q9 */ A.Q9,
+ A.Q3, /* Q3 |7 10| Q4 */ A.Q4,
+ A.VSS, /* VSS |8 9| Q8 */ A.Q8
+ /* +--------------+ */
+ )
+NETLIST_END()
+
+static NETLIST_START(CD4022_DIP)
+ CD4022(A)
+ NC_PIN(NC)
+
+ DIPPINS( /* +--------------+ */
+ A.Q1, /* Q1 |1 ++ 16| VDD */ A.VDD,
+ A.Q0, /* Q0 |2 15| RESET */ A.RESET,
+ A.Q2, /* Q2 |3 14| CLOCK */ A.CLK,
+ A.Q5, /* Q5 |4 4022 13| CLOCK ENABLE */ A.CLKEN,
+ A.Q6, /* Q6 |5 12| CARRY OUT */ A.CO,
+ NC.I, /* NC |6 11| Q4 */ A.Q4,
+ A.Q3, /* Q3 |7 10| Q7 */ A.Q7,
+ A.VSS, /* VSS |8 9| NC */ NC.I
+ /* +--------------+ */
+ )
+NETLIST_END()
+
/* CD4020: 14-Stage Ripple Carry Binary Counters
*
* +--------------+
@@ -508,6 +570,8 @@ NETLIST_START(CD4XXX_lib)
/* DIP ONLY */
LOCAL_LIB_ENTRY(CD4013_DIP)
+ LOCAL_LIB_ENTRY(CD4017_DIP)
+ LOCAL_LIB_ENTRY(CD4022_DIP)
LOCAL_LIB_ENTRY(CD4020_DIP)
LOCAL_LIB_ENTRY(CD4024_DIP)
LOCAL_LIB_ENTRY(CD4053_DIP)
diff --git a/src/lib/netlist/macro/nlm_cd4xxx.h b/src/lib/netlist/macro/nlm_cd4xxx.h
index 7e56a515923..8db793216b1 100644
--- a/src/lib/netlist/macro/nlm_cd4xxx.h
+++ b/src/lib/netlist/macro/nlm_cd4xxx.h
@@ -61,6 +61,12 @@
#define CD4013_DIP(name) \
NET_REGISTER_DEV(CD4013_DIP, name)
+#define CD4017_DIP(name) \
+ NET_REGISTER_DEV(CD4017_DIP, name)
+
+#define CD4022_DIP(name) \
+ NET_REGISTER_DEV(CD4022_DIP, name)
+
#define CD4020_DIP(name) \
NET_REGISTER_DEV(CD4020_DIP, name)