summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/analog/nld_switches.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/analog/nld_switches.c')
-rw-r--r--src/lib/netlist/analog/nld_switches.c107
1 files changed, 107 insertions, 0 deletions
diff --git a/src/lib/netlist/analog/nld_switches.c b/src/lib/netlist/analog/nld_switches.c
new file mode 100644
index 00000000000..6166463c6f8
--- /dev/null
+++ b/src/lib/netlist/analog/nld_switches.c
@@ -0,0 +1,107 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
+/*
+ * nld_legacy.c
+ *
+ */
+
+#include "nld_switches.h"
+#include "nl_setup.h"
+
+#define R_OFF (1.0 / netlist().gmin())
+#define R_ON 0.01
+
+NETLIB_NAMESPACE_DEVICES_START()
+
+// ----------------------------------------------------------------------------------------
+// SWITCH
+// ----------------------------------------------------------------------------------------
+
+NETLIB_START(switch1)
+{
+ register_sub("R", m_R);
+
+ register_param("POS", m_POS, 0);
+
+ register_subalias("1", m_R.m_P);
+ register_subalias("2", m_R.m_N);
+}
+
+NETLIB_RESET(switch1)
+{
+ m_R.do_reset();
+
+ m_R.set_R(R_OFF);
+}
+
+NETLIB_UPDATE(switch1)
+{
+ if (m_POS.Value() == 0)
+ {
+ m_R.set_R(R_OFF);
+ }
+ else
+ {
+ m_R.set_R(R_ON);
+ }
+
+ m_R.update_dev();
+}
+
+NETLIB_UPDATE_PARAM(switch1)
+{
+ update();
+}
+
+// ----------------------------------------------------------------------------------------
+// SWITCH2
+// ----------------------------------------------------------------------------------------
+
+
+NETLIB_START(switch2)
+{
+ register_sub("R1", m_R[0]);
+ register_sub("R2", m_R[1]);
+
+ register_param("POS", m_POS, 0);
+
+ connect_late(m_R[0].m_N, m_R[1].m_N);
+
+ register_subalias("1", m_R[0].m_P);
+ register_subalias("2", m_R[1].m_P);
+
+ register_subalias("Q", m_R[0].m_N);
+}
+
+NETLIB_RESET(switch2)
+{
+ m_R[0].do_reset();
+ m_R[1].do_reset();
+
+ m_R[0].set_R(R_ON);
+ m_R[1].set_R(R_OFF);
+}
+
+NETLIB_UPDATE(switch2)
+{
+ if (m_POS.Value() == 0)
+ {
+ m_R[0].set_R(R_ON);
+ m_R[1].set_R(R_OFF);
+ }
+ else
+ {
+ m_R[0].set_R(R_OFF);
+ m_R[1].set_R(R_ON);
+ }
+
+ m_R[0].update_dev();
+ m_R[1].update_dev();
+}
+
+NETLIB_UPDATE_PARAM(switch2)
+{
+ update();
+}
+
+NETLIB_NAMESPACE_DEVICES_END()