summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/devices/nld_legacy.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/devices/nld_legacy.c')
-rw-r--r--src/lib/netlist/devices/nld_legacy.c78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/lib/netlist/devices/nld_legacy.c b/src/lib/netlist/devices/nld_legacy.c
new file mode 100644
index 00000000000..834dda31110
--- /dev/null
+++ b/src/lib/netlist/devices/nld_legacy.c
@@ -0,0 +1,78 @@
+// license:GPL-2.0+
+// copyright-holders:Couriersud
+/*
+ * nld_legacy.c
+ *
+ */
+
+#include "nld_legacy.h"
+#include "nl_setup.h"
+
+NETLIB_NAMESPACE_DEVICES_START()
+
+NETLIB_START(nicRSFF)
+{
+ register_input("S", m_S);
+ register_input("R", m_R);
+ register_output("Q", m_Q);
+ register_output("QQ", m_QQ);
+}
+
+NETLIB_RESET(nicRSFF)
+{
+ m_Q.initial(0);
+ m_QQ.initial(1);
+}
+
+NETLIB_UPDATE(nicRSFF)
+{
+ if (!INPLOGIC(m_S))
+ {
+ OUTLOGIC(m_Q, 1, NLTIME_FROM_NS(20));
+ OUTLOGIC(m_QQ, 0, NLTIME_FROM_NS(20));
+ }
+ else if (!INPLOGIC(m_R))
+ {
+ OUTLOGIC(m_Q, 0, NLTIME_FROM_NS(20));
+ OUTLOGIC(m_QQ, 1, NLTIME_FROM_NS(20));
+ }
+}
+
+NETLIB_START(nicDelay)
+{
+ register_input("1", m_I);
+ register_output("2", m_Q);
+
+ register_param("L_TO_H", m_L_to_H, 10);
+ register_param("H_TO_L", m_H_to_L, 10);
+
+ save(NLNAME(m_last));
+
+}
+
+NETLIB_RESET(nicDelay)
+{
+ m_Q.initial(0);
+}
+
+NETLIB_UPDATE_PARAM(nicDelay)
+{
+}
+
+NETLIB_UPDATE(nicDelay)
+{
+ netlist_sig_t nval = INPLOGIC(m_I);
+ if (nval && !m_last)
+ {
+ // L_to_H
+ OUTLOGIC(m_Q, 1, NLTIME_FROM_NS(m_L_to_H.Value()));
+ }
+ else if (!nval && m_last)
+ {
+ // H_to_L
+ OUTLOGIC(m_Q, 0, NLTIME_FROM_NS(m_H_to_L.Value()));
+ }
+ m_last = nval;
+}
+
+NETLIB_NAMESPACE_DEVICES_END()