diff options
Diffstat (limited to 'src/lib/netlist/nl_base.h')
-rw-r--r-- | src/lib/netlist/nl_base.h | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h index 35ecc694cfd..2d8f8154ed0 100644 --- a/src/lib/netlist/nl_base.h +++ b/src/lib/netlist/nl_base.h @@ -493,9 +493,9 @@ namespace netlist using list_t = std::vector<core_terminal_t *>; - static constexpr const unsigned INP_HL_SHIFT = 0; - static constexpr const unsigned INP_LH_SHIFT = 1; - static constexpr const unsigned INP_ACTIVE_SHIFT = 2; + static constexpr const auto INP_HL_SHIFT = 0; + static constexpr const auto INP_LH_SHIFT = 1; + static constexpr const auto INP_ACTIVE_SHIFT = 2; enum state_e { STATE_INP_PASSIVE = 0, @@ -1084,19 +1084,27 @@ namespace netlist { if (m_hint_deactivate) { - m_stat_inc_active.inc(); - inc_active(); + if (++m_active_outputs == 1) + { + m_stat_inc_active.inc(); + inc_active(); + } } } void do_dec_active() NL_NOEXCEPT { if (m_hint_deactivate) - dec_active(); + if (--m_active_outputs == 0) + { + dec_active(); + } } void set_hint_deactivate(bool v) { m_hint_deactivate = v; } bool get_hint_deactivate() { return m_hint_deactivate; } + /* Has to be set in device reset */ + void set_active_outputs(int n) { m_active_outputs = n; } void set_default_delegate(detail::core_terminal_t &term); @@ -1124,7 +1132,8 @@ namespace netlist virtual bool is_timestep() const { return false; } private: - bool m_hint_deactivate; + bool m_hint_deactivate; + state_var_s32 m_active_outputs; }; // ----------------------------------------------------------------------------- |