summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/devices/nld_4020.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/devices/nld_4020.cpp')
-rw-r--r--src/lib/netlist/devices/nld_4020.cpp20
1 files changed, 9 insertions, 11 deletions
diff --git a/src/lib/netlist/devices/nld_4020.cpp b/src/lib/netlist/devices/nld_4020.cpp
index 4143f66da8d..9e2dd386654 100644
--- a/src/lib/netlist/devices/nld_4020.cpp
+++ b/src/lib/netlist/devices/nld_4020.cpp
@@ -46,17 +46,15 @@ namespace netlist
namespace devices
{
- template <unsigned _LiveBitmask>
+ template <unsigned _TotalBits, unsigned _LiveBitmask>
NETLIB_OBJECT(CD4020_sub)
{
- static constexpr unsigned MAX_BITS = 14;
- static constexpr unsigned MAX_BITMASK = (1 << MAX_BITS) - 1;
+ static_assert((_LiveBitmask >> _TotalBits) == 0, "Live bitmask too large");
NETLIB_CONSTRUCTOR_MODEL(CD4020_sub, "CD4XXX")
, m_IP(*this, "IP", NETLIB_DELEGATE(ip))
, m_RESET(*this, "RESET", NETLIB_DELEGATE(reseti))
- , m_Q(*this, {"Q1", "_Q2", "_Q3", "Q4", "Q5", "Q6", "Q7", "Q8", "Q9",
- "Q10", "Q11", "Q12", "Q13", "Q14"})
+ , m_Q(*this, 1, "Q{}")
, m_cnt(*this, "m_cnt", 0)
, m_supply(*this)
{
@@ -81,7 +79,7 @@ namespace netlist
m_cnt = 0;
m_IP.inactivate();
/* static */ const netlist_time reset_time = netlist_time::from_nsec(140);
- for (unsigned i = 0; i < MAX_BITS; i++)
+ for (int i = 0; i < _TotalBits; i++)
if (((_LiveBitmask >> i) & 1) != 0)
m_Q[i].push(0, reset_time);
}
@@ -102,13 +100,13 @@ namespace netlist
NLTIME_FROM_NS(1380), NLTIME_FROM_NS(1480),
};
- for (unsigned i = 0; i < MAX_BITS; i++)
+ for (int i = 0; i < _TotalBits; i++)
if (((_LiveBitmask >> i) & 1) != 0)
- m_Q[i].push(cnt & 1, out_delayQn[i]);
+ m_Q[i].push((cnt >> i) & 1, out_delayQn[i]);
}
logic_input_t m_IP;
logic_input_t m_RESET;
- object_array_t<logic_output_t, MAX_BITS> m_Q;
+ object_array_t<logic_output_t, _TotalBits> m_Q;
state_var<unsigned> m_cnt;
nld_power_pins m_supply;
@@ -140,7 +138,7 @@ namespace netlist
//NETLIB_RESETI() {}
private:
- NETLIB_SUB(CD4020_sub)<0x3ff9> m_sub;
+ NETLIB_SUB(CD4020_sub)<14, 0x3ff9> m_sub;
};
NETLIB_OBJECT(CD4024)
@@ -164,7 +162,7 @@ namespace netlist
//NETLIB_RESETI() {}
private:
- NETLIB_SUB(CD4020_sub)<0x7f> m_sub;
+ NETLIB_SUB(CD4020_sub)<7, 0x7f> m_sub;
};