diff options
Diffstat (limited to 'src/emu/netlist/devices/nld_ne555.c')
-rw-r--r-- | src/emu/netlist/devices/nld_ne555.c | 105 |
1 files changed, 52 insertions, 53 deletions
diff --git a/src/emu/netlist/devices/nld_ne555.c b/src/emu/netlist/devices/nld_ne555.c index 06a616f2bb9..4eb20c75980 100644 --- a/src/emu/netlist/devices/nld_ne555.c +++ b/src/emu/netlist/devices/nld_ne555.c @@ -11,74 +11,73 @@ inline double NETLIB_NAME(NE555)::clamp(const double v, const double a, const double b) { - double ret = v; - double vcc = TERMANALOG(m_R1.m_P); + double ret = v; + double vcc = TERMANALOG(m_R1.m_P); - if (ret > vcc - a) - ret = vcc - a; - if (ret < b) - ret = b; - return ret; + if (ret > vcc - a) + ret = vcc - a; + if (ret < b) + ret = b; + return ret; } NETLIB_START(NE555) { + register_sub(m_R1, "R1"); + register_sub(m_R2, "R2"); + register_sub(m_R3, "R3"); + register_sub(m_RDIS, "RDIS"); - register_sub(m_R1, "R1"); - register_sub(m_R2, "R2"); - register_sub(m_R3, "R3"); - register_sub(m_RDIS, "RDIS"); + register_subalias("GND", m_R3.m_N); // Pin 1 + register_input("TRIG", m_TRIG); // Pin 2 + register_output("OUT", m_OUT); // Pin 3 + register_input("RESET", m_RESET); // Pin 4 + register_subalias("CONT", m_R1.m_N); // Pin 5 + register_input("THRESH", m_THRES); // Pin 6 + register_subalias("DISCH", m_RDIS.m_P); // Pin 7 + register_subalias("VCC", m_R1.m_P); // Pin 8 - register_subalias("GND", m_R3.m_N); // Pin 1 - register_input("TRIG", m_TRIG); // Pin 2 - register_output("OUT", m_OUT); // Pin 3 - register_input("RESET", m_RESET); // Pin 4 - register_subalias("CONT", m_R1.m_N); // Pin 5 - register_input("THRESH", m_THRES); // Pin 6 - register_subalias("DISCH", m_RDIS.m_P); // Pin 7 - register_subalias("VCC", m_R1.m_P); // Pin 8 + m_R1.set_R(5000); + m_R2.set_R(5000); + m_R3.set_R(5000); + m_RDIS.set_R(R_OFF); - m_R1.set_R(5000); - m_R2.set_R(5000); - m_R3.set_R(5000); - m_RDIS.set_R(R_OFF); + setup().connect(m_R1.m_N, m_R2.m_P); + setup().connect(m_R2.m_N, m_R3.m_P); + setup().connect(m_RDIS.m_N, m_R3.m_N); - setup().connect(m_R1.m_N, m_R2.m_P); - setup().connect(m_R2.m_N, m_R3.m_P); - setup().connect(m_RDIS.m_N, m_R3.m_N); + m_last_out = false; - m_last_out = false; - - save(NAME(m_last_out)); + save(NAME(m_last_out)); } NETLIB_UPDATE(NE555) { - // FIXME: assumes GND is connected to 0V. + // FIXME: assumes GND is connected to 0V. - double vt = clamp(TERMANALOG(m_R2.m_P), 0.7, 1.4); - bool bthresh = (INPANALOG(m_THRES) > vt); - bool btrig = (INPANALOG(m_TRIG) > clamp(TERMANALOG(m_R2.m_N), 0.7, 1.4)); - bool out = m_last_out; + double vt = clamp(TERMANALOG(m_R2.m_P), 0.7, 1.4); + bool bthresh = (INPANALOG(m_THRES) > vt); + bool btrig = (INPANALOG(m_TRIG) > clamp(TERMANALOG(m_R2.m_N), 0.7, 1.4)); + bool out = m_last_out; - if (!btrig) - { - out = true; - } - else if (bthresh) - { - out = false; - } + if (!btrig) + { + out = true; + } + else if (bthresh) + { + out = false; + } - if (!m_last_out && out) - { - OUTANALOG(m_OUT, TERMANALOG(m_R1.m_P), NLTIME_FROM_NS(100)); - m_RDIS.set_R(R_OFF); - } - else if (m_last_out && !out) - { - OUTANALOG(m_OUT, TERMANALOG(m_R3.m_N), NLTIME_FROM_NS(100)); - m_RDIS.set_R(R_ON); - } - m_last_out = out; + if (!m_last_out && out) + { + OUTANALOG(m_OUT, TERMANALOG(m_R1.m_P), NLTIME_FROM_NS(100)); + m_RDIS.set_R(R_OFF); + } + else if (m_last_out && !out) + { + OUTANALOG(m_OUT, TERMANALOG(m_R3.m_N), NLTIME_FROM_NS(100)); + m_RDIS.set_R(R_ON); + } + m_last_out = out; } |