summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/devices/nlid_proxy.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/devices/nlid_proxy.h')
-rw-r--r--src/lib/netlist/devices/nlid_proxy.h118
1 files changed, 59 insertions, 59 deletions
diff --git a/src/lib/netlist/devices/nlid_proxy.h b/src/lib/netlist/devices/nlid_proxy.h
index 7a8377276a1..0f1b2ffeacd 100644
--- a/src/lib/netlist/devices/nlid_proxy.h
+++ b/src/lib/netlist/devices/nlid_proxy.h
@@ -1,120 +1,120 @@
-// license:GPL-2.0+
+// license:BSD-3-Clause
// copyright-holders:Couriersud
-/*
- * nlid_proxy.h
- *
- * netlist proxy devices
- *
- * This file contains internal headers
- */
#ifndef NLID_PROXY_H_
#define NLID_PROXY_H_
-#include "netlist/analog/nlid_twoterm.h"
-#include "netlist/nl_setup.h"
+///
+/// \file nlid_proxy.h
+///
+/// netlist proxy devices
+///
+/// This file contains internal headers
+///
-namespace netlist
-{
- namespace devices
- {
+
+#include "analog/nlid_twoterm.h"
+#include "nl_base.h"
+
+namespace netlist::devices {
// -----------------------------------------------------------------------------
// nld_base_proxy
// -----------------------------------------------------------------------------
- NETLIB_OBJECT(base_proxy)
+ class nld_base_proxy : public device_t
{
public:
- nld_base_proxy(netlist_state_t &anetlist, const pstring &name,
- logic_t *inout_proxied, detail::core_terminal_t *proxy_inout);
+ nld_base_proxy(device_param_t data, const logic_t *inout_proxied);
- logic_t &term_proxied() const { return *m_term_proxied; }
- detail::core_terminal_t &proxy_term() const { return *m_proxy_term; }
+ // only used during setup
+ virtual detail::core_terminal_t &proxy_term() noexcept = 0;
protected:
+ // FIXME: these should be core_terminal_t and only used for connecting
+ // inputs. Fix, once the ugly hacks have been removed
+ analog_t *m_tp;
+ analog_t *m_tn;
- private:
- logic_t *m_term_proxied;
- detail::core_terminal_t *m_proxy_term;
};
// -----------------------------------------------------------------------------
// nld_a_to_d_proxy
// -----------------------------------------------------------------------------
- NETLIB_OBJECT_DERIVED(base_a_to_d_proxy, base_proxy)
+ class nld_base_a_to_d_proxy : public nld_base_proxy
{
public:
-
- virtual logic_output_t &out() { return m_Q; }
+ virtual logic_output_t &out() noexcept = 0;
protected:
-
- nld_base_a_to_d_proxy(netlist_state_t &anetlist, const pstring &name,
- logic_input_t *in_proxied, detail::core_terminal_t *in_proxy);
-
- private:
-
- logic_output_t m_Q;
+ nld_base_a_to_d_proxy(device_param_t data, const logic_input_t *in_proxied);
};
- NETLIB_OBJECT_DERIVED(a_to_d_proxy, base_a_to_d_proxy)
+ class nld_a_to_d_proxy : public nld_base_a_to_d_proxy
{
public:
- nld_a_to_d_proxy(netlist_state_t &anetlist, const pstring &name, logic_input_t *in_proxied);
-
- analog_input_t m_I;
+ nld_a_to_d_proxy(device_param_t data, const logic_input_t *in_proxied);
- protected:
+ logic_output_t &out() noexcept override { return m_Q; }
- NETLIB_RESETI();
- NETLIB_UPDATEI();
+ detail::core_terminal_t &proxy_term() noexcept override
+ {
+ return m_I;
+ }
+ protected:
+ //NETLIB_RESETI();
private:
+ NETLIB_HANDLERI(input);
+
+ logic_output_t m_Q;
+ analog_input_t m_I;
};
// -----------------------------------------------------------------------------
// nld_base_d_to_a_proxy
// -----------------------------------------------------------------------------
- NETLIB_OBJECT_DERIVED(base_d_to_a_proxy, base_proxy)
+ class nld_base_d_to_a_proxy : public nld_base_proxy
{
public:
-
- virtual logic_input_t &in() { return m_I; }
+ // only used in setup
+ virtual logic_input_t &in() noexcept = 0;
protected:
- nld_base_d_to_a_proxy(netlist_state_t &anetlist, const pstring &name,
- logic_output_t *out_proxied, detail::core_terminal_t &proxy_out);
+ nld_base_d_to_a_proxy(device_param_t data, const logic_output_t *out_proxied);
- logic_input_t m_I;
};
- NETLIB_OBJECT_DERIVED(d_to_a_proxy, base_d_to_a_proxy)
+ class nld_d_to_a_proxy : public nld_base_d_to_a_proxy
{
public:
- nld_d_to_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *out_proxied);
+ nld_d_to_a_proxy(device_param_t data, const logic_output_t *out_proxied);
+
+ logic_input_t &in() noexcept override { return m_I; }
+
+ detail::core_terminal_t &proxy_term() noexcept override
+ {
+ return m_RN().setup_P();
+ }
protected:
NETLIB_RESETI();
- NETLIB_UPDATEI();
private:
+ NETLIB_HANDLERI(input);
- static constexpr const nl_double G_OFF = 1e-9;
+ static constexpr const nl_fptype G_OFF = nlconst::cgmin();
- plib::unique_ptr<analog_output_t> m_GNDHack; // FIXME: Long term, we need to connect proxy gnd to device gnd
- plib::unique_ptr<analog_output_t> m_VCCHack; // FIXME: Long term, we need to connect proxy gnd to device gnd
- analog::NETLIB_NAME(twoterm) m_RP;
- analog::NETLIB_NAME(twoterm) m_RN;
- state_var<int> m_last_state;
- bool m_is_timestep;
-};
+ logic_input_t m_I;
+ NETLIB_SUB_NS(analog, two_terminal) m_RP;
+ NETLIB_SUB_NS(analog, two_terminal) m_RN;
+ state_var<netlist_sig_t> m_last_state;
+ };
- } //namespace devices
-} // namespace netlist
+} // namespace netlist::devices
-#endif /* NLD_PROXY_H_ */
+#endif // NLD_PROXY_H_