summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--.gitattributes3
-rw-r--r--nl_examples/cd4066.c44
-rw-r--r--src/emu/netlist/devices/net_lib.c1
-rw-r--r--src/emu/netlist/devices/net_lib.h1
-rw-r--r--src/emu/netlist/devices/nld_4066.c94
-rw-r--r--src/emu/netlist/devices/nld_4066.h60
-rw-r--r--src/emu/netlist/netlist.mak1
7 files changed, 204 insertions, 0 deletions
diff --git a/.gitattributes b/.gitattributes
index 34933b7f5b0..2d5f87db331 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -362,6 +362,7 @@ nl_examples/7400_astable.c svneol=native#text/plain
nl_examples/bjt.c svneol=native#text/plain
nl_examples/bjt_eb.c svneol=native#text/plain
nl_examples/bjt_eb_pnp.c svneol=native#text/plain
+nl_examples/cd4066.c svneol=native#text/plain
nl_examples/msx_mixer_stage.c svneol=native#text/plain
nl_examples/ne555_astable.c svneol=native#text/plain
nl_examples/opamp.c svneol=native#text/plain
@@ -2210,6 +2211,8 @@ src/emu/netlist/analog/nld_twoterm.c svneol=native#text/plain
src/emu/netlist/analog/nld_twoterm.h svneol=native#text/plain
src/emu/netlist/devices/net_lib.c svneol=native#text/plain
src/emu/netlist/devices/net_lib.h svneol=native#text/plain
+src/emu/netlist/devices/nld_4066.c svneol=native#text/plain
+src/emu/netlist/devices/nld_4066.h svneol=native#text/plain
src/emu/netlist/devices/nld_7400.c svneol=native#text/plain
src/emu/netlist/devices/nld_7400.h svneol=native#text/plain
src/emu/netlist/devices/nld_7402.c svneol=native#text/plain
diff --git a/nl_examples/cd4066.c b/nl_examples/cd4066.c
new file mode 100644
index 00000000000..1db59b670ed
--- /dev/null
+++ b/nl_examples/cd4066.c
@@ -0,0 +1,44 @@
+/*
+ * bjt.c
+ *
+ */
+
+
+#include "netlist/devices/net_lib.h"
+
+NETLIST_START(cd4066)
+ /* Standard stuff */
+
+ CLOCK(clk, 1000) // 1000 Hz
+ SOLVER(Solver, 48000)
+
+ ANALOG_INPUT(V5, 5)
+
+ CD_4066_DIP(SW)
+ RES(R1, 1000)
+
+ NET_C(SW.7, GND)
+ NET_C(SW.14, V5)
+
+ NET_C(SW.13, clk)
+ NET_C(SW.1, V5)
+
+ NET_C(SW.2, R1.1)
+ NET_C(R1.2, GND)
+
+ // ground anything else
+
+ NET_C(SW.3, GND)
+ NET_C(SW.4, GND)
+ NET_C(SW.5, GND)
+ NET_C(SW.6, GND)
+ NET_C(SW.8, GND)
+ NET_C(SW.9, GND)
+ NET_C(SW.10, GND)
+ NET_C(SW.11, GND)
+ NET_C(SW.12, GND)
+
+ LOG(logB, clk)
+ LOG(logC, R1.1)
+
+NETLIST_END()
diff --git a/src/emu/netlist/devices/net_lib.c b/src/emu/netlist/devices/net_lib.c
index 6136f8f906e..b038d27db8d 100644
--- a/src/emu/netlist/devices/net_lib.c
+++ b/src/emu/netlist/devices/net_lib.c
@@ -122,6 +122,7 @@ void netlist_factory_t::initialize()
ENTRY(SN74LS629, SN74LS629, "CAP")
ENTRY(9316, TTL_9316, "+CLK,ENP,ENT,CLRQ,LOADQ,A,B,C,D")
ENTRY(NE555, NE555, "-")
+ ENTRY(4066_dip, CD_4066_DIP, "-")
ENTRY(7400_dip, TTL_7400_DIP, "-")
ENTRY(7402_dip, TTL_7402_DIP, "-")
ENTRY(7404_dip, TTL_7404_DIP, "-")
diff --git a/src/emu/netlist/devices/net_lib.h b/src/emu/netlist/devices/net_lib.h
index 8367f1fda84..e73d9ee849b 100644
--- a/src/emu/netlist/devices/net_lib.h
+++ b/src/emu/netlist/devices/net_lib.h
@@ -54,6 +54,7 @@
#include "nld_signal.h"
#include "nld_system.h"
+#include "nld_4066.h"
#include "nld_7400.h"
#include "nld_7402.h"
#include "nld_7404.h"
diff --git a/src/emu/netlist/devices/nld_4066.c b/src/emu/netlist/devices/nld_4066.c
new file mode 100644
index 00000000000..0d9dd97ead4
--- /dev/null
+++ b/src/emu/netlist/devices/nld_4066.c
@@ -0,0 +1,94 @@
+/*
+ * nld_4066.c
+ *
+ */
+
+#include "nld_4066.h"
+
+NETLIB_START(vdd_vss)
+{
+}
+
+NETLIB_RESET(vdd_vss)
+{
+}
+
+NETLIB_UPDATE(vdd_vss)
+{
+}
+
+NETLIB_START(4066)
+{
+ register_input("CTL", m_control);
+ register_sub(m_R, "R");
+}
+
+NETLIB_RESET(4066)
+{
+ m_R.do_reset();
+}
+
+NETLIB_UPDATE(4066)
+{
+ double sup = (supply->vdd() - supply->vss());
+ double low = 0.45 * sup;
+ double high = 0.55 * sup;
+ double in = INPANALOG(m_control) - supply->vss();
+ double rON = 270.0 * 5.0 / sup;
+
+ if (in < low)
+ {
+ m_R.set_R(1.0 / NETLIST_GMIN);
+ m_R.update_dev();
+ }
+ else if (in > high)
+ {
+ m_R.set_R(rON);
+ m_R.update_dev();
+ }
+}
+
+
+NETLIB_START(4066_dip)
+{
+ register_sub(supply, "supply");
+ m_A.supply = m_B.supply = m_C.supply = m_D.supply = &supply;
+ register_sub(m_A, "A");
+ register_sub(m_B, "B");
+ register_sub(m_C, "C");
+ register_sub(m_D, "D");
+
+ register_subalias("1", m_A.m_R.m_P);
+ register_subalias("2", m_A.m_R.m_N);
+ register_subalias("3", m_B.m_R.m_P);
+ register_subalias("4", m_B.m_R.m_N);
+ register_subalias("5", m_B.m_control);
+ register_subalias("6", m_C.m_control);
+ register_input("7", supply.m_vss);
+
+ register_subalias("8", m_C.m_R.m_P);
+ register_subalias("9", m_C.m_R.m_N);
+ register_subalias("10", m_D.m_R.m_P);
+ register_subalias("11", m_D.m_R.m_N);
+ register_subalias("12", m_D.m_control);
+ register_subalias("13", m_A.m_control);
+ register_input("14", supply.m_vdd);
+
+}
+
+NETLIB_RESET(4066_dip)
+{
+ m_A.do_reset();
+ m_B.do_reset();
+ m_C.do_reset();
+ m_D.do_reset();
+}
+
+NETLIB_UPDATE(4066_dip)
+{
+ /* only called during startup */
+ m_A.update_dev();
+ m_B.update_dev();
+ m_C.update_dev();
+ m_D.update_dev();
+}
diff --git a/src/emu/netlist/devices/nld_4066.h b/src/emu/netlist/devices/nld_4066.h
new file mode 100644
index 00000000000..74695dc573a
--- /dev/null
+++ b/src/emu/netlist/devices/nld_4066.h
@@ -0,0 +1,60 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
+/*
+ * nld_4066.h
+ *
+ * CD4066: Quad Bilateral Switch
+ *
+ * +--------------+
+ * INOUTA |1 ++ 14| VDD
+ * OUTINA |2 13| CONTROLA
+ * OUTINB |3 12| CONTROLD
+ * INOUTB |4 4066 11| INOUTD
+ * CONTROLB |5 10| OUTIND
+ * CONTROLC |6 9| OUTINC
+ * VSS |7 8| INOUTC
+ * +--------------+
+ *
+ * FIXME: These devices are slow (~125 ns). THis is currently not reflected
+ *
+ * Naming conventions follow National semiconductor datasheet
+ *
+ */
+
+#ifndef NLD_4066_H_
+#define NLD_4066_H_
+
+#include "../nl_base.h"
+#include "../analog/nld_twoterm.h"
+
+#define CD_4066_DIP(_name) \
+ NET_REGISTER_DEV(4066_dip, _name)
+
+NETLIB_SUBDEVICE(vdd_vss,
+ netlist_analog_input_t m_vdd;
+ netlist_analog_input_t m_vss;
+
+public:
+ ATTR_HOT inline double vdd() { return INPANALOG(m_vdd); }
+ ATTR_HOT inline double vss() { return INPANALOG(m_vss); }
+);
+
+NETLIB_SUBDEVICE(4066,
+public:
+
+ netlist_analog_input_t m_control;
+ NETLIB_NAME(R) m_R;
+
+ NETLIB_NAME(vdd_vss) *supply;
+);
+
+NETLIB_DEVICE(4066_dip,
+
+ NETLIB_NAME(4066) m_A;
+ NETLIB_NAME(4066) m_B;
+ NETLIB_NAME(4066) m_C;
+ NETLIB_NAME(4066) m_D;
+ NETLIB_NAME(vdd_vss) supply;
+);
+
+#endif /* NLD_4066_H_ */
diff --git a/src/emu/netlist/netlist.mak b/src/emu/netlist/netlist.mak
index 4e02ec04c29..94e863ea69b 100644
--- a/src/emu/netlist/netlist.mak
+++ b/src/emu/netlist/netlist.mak
@@ -33,6 +33,7 @@ NETLISTOBJS+= \
$(NETLISTOBJ)/analog/nld_solver.o \
$(NETLISTOBJ)/analog/nld_switches.o \
$(NETLISTOBJ)/analog/nld_twoterm.o \
+ $(NETLISTOBJ)/devices/nld_4066.o \
$(NETLISTOBJ)/devices/nld_7400.o \
$(NETLISTOBJ)/devices/nld_7402.o \
$(NETLISTOBJ)/devices/nld_7404.o \