diff --git a/src/devices/machine/netlist.cpp b/src/devices/machine/netlist.cpp index f85ee04c4a8..93e9e020a76 100644 --- a/src/devices/machine/netlist.cpp +++ b/src/devices/machine/netlist.cpp @@ -960,7 +960,8 @@ netlist_mame_cpu_device_t::netlist_mame_cpu_device_t(const machine_config &mconf device_state_interface(mconfig, *this), device_disasm_interface(mconfig, *this), device_memory_interface(mconfig, *this), - m_program_config("program", ENDIANNESS_LITTLE, 8, 12) // Interface is needed to keep debugger happy + m_program_config("program", ENDIANNESS_LITTLE, 8, 12), // Interface is needed to keep debugger happy + m_genPC(0) { } @@ -1055,7 +1056,12 @@ ATTR_HOT void netlist_mame_cpu_device_t::execute_run() netlist_mame_sound_device_t::netlist_mame_sound_device_t(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : netlist_mame_device_t(mconfig, NETLIST_CPU, "Netlist Sound Device", tag, owner, clock, "netlist_sound", __FILE__), - device_sound_interface(mconfig, *this) + device_sound_interface(mconfig, *this), + m_out{nullptr}, + m_in(nullptr), + m_stream(nullptr), + m_num_inputs(0), + m_num_outputs(0) { } diff --git a/src/lib/netlist/analog/nld_bjt.cpp b/src/lib/netlist/analog/nld_bjt.cpp index 0544f67b20a..57c19c87ca9 100644 --- a/src/lib/netlist/analog/nld_bjt.cpp +++ b/src/lib/netlist/analog/nld_bjt.cpp @@ -309,11 +309,11 @@ NETLIB_RESET(QBJT_switch) NETLIB_UPDATE(QBJT_switch) { if (!m_RB.m_P.net().isRailNet()) - m_RB.m_P.schedule_solve(); // Basis + m_RB.m_P.solve_now(); // Basis else if (!m_RB.m_N.net().isRailNet()) - m_RB.m_N.schedule_solve(); // Emitter + m_RB.m_N.solve_now(); // Emitter else if (!m_RC.m_P.net().isRailNet()) - m_RC.m_P.schedule_solve(); // Collector + m_RC.m_P.solve_now(); // Collector } @@ -372,11 +372,11 @@ NETLIB_UPDATE_TERMINALS(QBJT_switch) NETLIB_UPDATE(QBJT_EB) { if (!m_D_EB.m_P.net().isRailNet()) - m_D_EB.m_P.schedule_solve(); // Basis + m_D_EB.m_P.solve_now(); // Basis else if (!m_D_EB.m_N.net().isRailNet()) - m_D_EB.m_N.schedule_solve(); // Emitter + m_D_EB.m_N.solve_now(); // Emitter else - m_D_CB.m_N.schedule_solve(); // Collector + m_D_CB.m_N.solve_now(); // Collector } NETLIB_RESET(QBJT_EB) diff --git a/src/lib/netlist/analog/nld_twoterm.h b/src/lib/netlist/analog/nld_twoterm.h index e89c347984f..d5cf6f6d228 100644 --- a/src/lib/netlist/analog/nld_twoterm.h +++ b/src/lib/netlist/analog/nld_twoterm.h @@ -49,10 +49,8 @@ // Generic macros // ----------------------------------------------------------------------------- - #ifdef RES_R -// FIXME: avoid compile fails -// #warning "Do not include rescap.h in a netlist environment" +#warning "Do not include rescap.h in a netlist environment" #endif #ifndef RES_R #define RES_R(res) (static_cast(res)) diff --git a/src/lib/netlist/analog/nlid_fourterm.cpp b/src/lib/netlist/analog/nlid_fourterm.cpp index 35ebe515092..aa2723fe8e1 100644 --- a/src/lib/netlist/analog/nlid_fourterm.cpp +++ b/src/lib/netlist/analog/nlid_fourterm.cpp @@ -40,13 +40,13 @@ NETLIB_UPDATE(VCCS) { /* only called if connected to a rail net ==> notify the solver to recalculate */ if (!m_IP.net().isRailNet()) - m_IP.schedule_solve(); + m_IP.solve_now(); else if (!m_IN.net().isRailNet()) - m_IN.schedule_solve(); + m_IN.solve_now(); else if (!m_OP.net().isRailNet()) - m_OP.schedule_solve(); + m_OP.solve_now(); else if (!m_ON.net().isRailNet()) - m_ON.schedule_solve(); + m_ON.solve_now(); } // ---------------------------------------------------------------------------------------- diff --git a/src/lib/netlist/analog/nlid_twoterm.cpp b/src/lib/netlist/analog/nlid_twoterm.cpp index b9d6dde10f5..676042850ad 100644 --- a/src/lib/netlist/analog/nlid_twoterm.cpp +++ b/src/lib/netlist/analog/nlid_twoterm.cpp @@ -88,9 +88,9 @@ NETLIB_UPDATE(twoterm) /* only called if connected to a rail net ==> notify the solver to recalculate */ /* we only need to call the non-rail terminal */ if (m_P.has_net() && !m_P.net().isRailNet()) - m_P.schedule_solve(); + m_P.solve_now(); else if (m_N.has_net() && !m_N.net().isRailNet()) - m_N.schedule_solve(); + m_N.solve_now(); } // ---------------------------------------------------------------------------------------- diff --git a/src/lib/netlist/devices/nld_4066.cpp b/src/lib/netlist/devices/nld_4066.cpp index e0890adabcb..ebd269a023a 100644 --- a/src/lib/netlist/devices/nld_4066.cpp +++ b/src/lib/netlist/devices/nld_4066.cpp @@ -67,7 +67,7 @@ namespace netlist { m_R.update_dev(); m_R.set_R(R); - m_R.m_P.schedule_after(NLTIME_FROM_NS(1)); + m_R.m_P.schedule_solve_after(NLTIME_FROM_NS(1)); } else { diff --git a/src/lib/netlist/devices/nld_4316.cpp b/src/lib/netlist/devices/nld_4316.cpp index 9110eb0e569..b9758ff036b 100644 --- a/src/lib/netlist/devices/nld_4316.cpp +++ b/src/lib/netlist/devices/nld_4316.cpp @@ -47,7 +47,7 @@ namespace netlist { namespace devices { m_R.set_R(m_base_r()); else m_R.set_R(NL_FCONST(1.0) / netlist().gmin()); - m_R.m_P.schedule_after(NLTIME_FROM_NS(1)); + m_R.m_P.schedule_solve_after(NLTIME_FROM_NS(1)); } NETLIB_DEVICE_IMPL(CD4316_GATE) diff --git a/src/lib/netlist/devices/nld_mm5837.cpp b/src/lib/netlist/devices/nld_mm5837.cpp index 3c5b301de9b..6d2931ba3af 100644 --- a/src/lib/netlist/devices/nld_mm5837.cpp +++ b/src/lib/netlist/devices/nld_mm5837.cpp @@ -109,7 +109,7 @@ namespace netlist if (m_is_timestep) m_RV.update_dev(); m_RV.set(NL_FCONST(1.0) / R, V, 0.0); - m_RV.m_P.schedule_after(NLTIME_FROM_NS(1)); + m_RV.m_P.schedule_solve_after(NLTIME_FROM_NS(1)); } } diff --git a/src/lib/netlist/devices/nld_system.cpp b/src/lib/netlist/devices/nld_system.cpp index 4baf8696fca..aaa181911ba 100644 --- a/src/lib/netlist/devices/nld_system.cpp +++ b/src/lib/netlist/devices/nld_system.cpp @@ -110,12 +110,12 @@ namespace netlist { m_R.update_dev(); m_R.set_R(R); - m_R.m_P.schedule_after(NLTIME_FROM_NS(1)); + m_R.m_P.schedule_solve_after(NLTIME_FROM_NS(1)); } else { m_R.set_R(R); - m_R.m_P.schedule_after(NLTIME_FROM_NS(1)); + m_R.m_P.schedule_solve_after(NLTIME_FROM_NS(1)); //m_R->update_dev(); } } diff --git a/src/lib/netlist/devices/nlid_proxy.cpp b/src/lib/netlist/devices/nlid_proxy.cpp index 8d1f3c61adb..c71e9f2919e 100644 --- a/src/lib/netlist/devices/nlid_proxy.cpp +++ b/src/lib/netlist/devices/nlid_proxy.cpp @@ -165,7 +165,7 @@ namespace netlist m_RV.update_dev(); } m_RV.set(NL_FCONST(1.0) / R, V, 0.0); - m_RV.m_P.schedule_after(NLTIME_FROM_NS(1)); + m_RV.m_P.schedule_solve_after(NLTIME_FROM_NS(1)); } } diff --git a/src/lib/netlist/macro/nlm_ttl74xx.cpp b/src/lib/netlist/macro/nlm_ttl74xx.cpp index 14a6eb233be..5a8120518b1 100644 --- a/src/lib/netlist/macro/nlm_ttl74xx.cpp +++ b/src/lib/netlist/macro/nlm_ttl74xx.cpp @@ -476,7 +476,7 @@ NETLIST_END() * * Naming conventions follow National Semiconductor datasheet * - * FIXME: Same as 7400, but drains higher output currents. + * NOTE: Same as 7400, but drains higher output currents. * Netlist currently does not model over currents (should it ever?) */ diff --git a/src/lib/netlist/nl_base.cpp b/src/lib/netlist/nl_base.cpp index e20b102c147..51eb0eacf7e 100644 --- a/src/lib/netlist/nl_base.cpp +++ b/src/lib/netlist/nl_base.cpp @@ -845,7 +845,7 @@ void detail::net_t::update_devs() NL_NOEXCEPT { nl_assert(this->isRailNet()); - const unsigned masks[4] = + const uint8_t masks[4] = { 0, core_terminal_t::STATE_INP_LH | core_terminal_t::STATE_INP_ACTIVE, @@ -853,7 +853,7 @@ void detail::net_t::update_devs() NL_NOEXCEPT 0 }; - const unsigned mask = masks[ (m_cur_Q << 1) | m_new_Q ]; + const auto mask = masks[ (m_cur_Q << 1) | m_new_Q ]; m_cur_Q = m_new_Q; m_in_queue = 2; /* mark as taken ... */ @@ -1029,19 +1029,17 @@ terminal_t::~terminal_t() { } -void terminal_t::schedule_solve() +void terminal_t::solve_now() { // Nets may belong to railnets which do not have a solver attached - // FIXME: Enforce that all terminals get connected? if (this->has_net()) if (net().solver() != nullptr) net().solver()->update_forced(); } -void terminal_t::schedule_after(const netlist_time &after) +void terminal_t::schedule_solve_after(const netlist_time &after) { // Nets may belong to railnets which do not have a solver attached - // FIXME: Enforce that all terminals get connected? if (this->has_net()) if (net().solver() != nullptr) net().solver()->update_after(after); diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h index 9d5e0cb7b7c..ff457d21d4d 100644 --- a/src/lib/netlist/nl_base.h +++ b/src/lib/netlist/nl_base.h @@ -573,8 +573,8 @@ namespace netlist set_ptr(m_gt1, GT); } - void schedule_solve(); - void schedule_after(const netlist_time &after); + void solve_now(); + void schedule_solve_after(const netlist_time &after); void set_ptrs(nl_double *gt, nl_double *go, nl_double *Idr) { @@ -698,11 +698,15 @@ namespace netlist void reset(); - void toggle_new_Q() NL_NOEXCEPT { m_new_Q ^= 1; } - void force_queue_execution() NL_NOEXCEPT { m_new_Q = (m_cur_Q ^ 1); } + void toggle_new_Q() NL_NOEXCEPT { m_new_Q = (m_cur_Q ^ 1); } + + void toggle_and_push_to_queue(const netlist_time delay) NL_NOEXCEPT + { + toggle_new_Q(); + push_to_queue(delay); + } void push_to_queue(const netlist_time delay) NL_NOEXCEPT; - void reschedule_in_queue(const netlist_time delay) NL_NOEXCEPT; bool is_queued() const NL_NOEXCEPT { return m_in_queue == 1; } void update_devs() NL_NOEXCEPT; @@ -1403,18 +1407,6 @@ namespace netlist } } - // FIXME: this could be removed after testing - inline void detail::net_t::reschedule_in_queue(const netlist_time delay) NL_NOEXCEPT - { - if (is_queued()) - netlist().queue().remove(this); - - m_time = netlist().time() + delay; - m_in_queue = (m_active > 0); /* queued ? */ - if (m_in_queue) - netlist().queue().push(queue_t::entry_t(m_time, this)); - } - inline const analog_net_t & analog_t::net() const NL_NOEXCEPT { return static_cast(core_terminal_t::net()); @@ -1452,8 +1444,7 @@ namespace netlist if (newQ != m_my_net.Q_Analog()) { m_my_net.set_Q_Analog(newQ); - m_my_net.toggle_new_Q(); - m_my_net.push_to_queue(NLTIME_FROM_NS(1)); + m_my_net.toggle_and_push_to_queue(NLTIME_FROM_NS(1)); } } diff --git a/src/lib/netlist/solver/nld_matrix_solver.cpp b/src/lib/netlist/solver/nld_matrix_solver.cpp index d252d554d70..45e25d83793 100644 --- a/src/lib/netlist/solver/nld_matrix_solver.cpp +++ b/src/lib/netlist/solver/nld_matrix_solver.cpp @@ -380,8 +380,7 @@ void matrix_solver_t::update() NL_NOEXCEPT if (m_params.m_dynamic_ts && has_timestep_devices() && new_timestep > netlist_time::zero()) { - m_Q_sync.net().force_queue_execution(); - m_Q_sync.net().reschedule_in_queue(new_timestep); + m_Q_sync.net().toggle_and_push_to_queue(new_timestep); } } @@ -392,8 +391,7 @@ void matrix_solver_t::update_forced() if (m_params.m_dynamic_ts && has_timestep_devices()) { - m_Q_sync.net().force_queue_execution(); - m_Q_sync.net().reschedule_in_queue(netlist_time::from_double(m_params.m_min_timestep)); + m_Q_sync.net().toggle_and_push_to_queue(netlist_time::from_double(m_params.m_min_timestep)); } } @@ -424,8 +422,7 @@ void matrix_solver_t::solve_base() if (this_resched > 1 && !m_Q_sync.net().is_queued()) { log().warning(MW_1_NEWTON_LOOPS_EXCEEDED_ON_NET_1, this->name()); - m_Q_sync.net().toggle_new_Q(); - m_Q_sync.net().reschedule_in_queue(m_params.m_nr_recalc_delay); + m_Q_sync.net().toggle_and_push_to_queue(m_params.m_nr_recalc_delay); } } else diff --git a/src/lib/netlist/solver/nld_matrix_solver.h b/src/lib/netlist/solver/nld_matrix_solver.h index ebcdcc2209d..49bb6a85c68 100644 --- a/src/lib/netlist/solver/nld_matrix_solver.h +++ b/src/lib/netlist/solver/nld_matrix_solver.h @@ -125,8 +125,7 @@ public: void update_forced(); void update_after(const netlist_time &after) { - m_Q_sync.net().force_queue_execution(); - m_Q_sync.net().reschedule_in_queue(after); + m_Q_sync.net().toggle_and_push_to_queue(after); } /* netdevice functions */ diff --git a/src/lib/netlist/solver/nld_solver.cpp b/src/lib/netlist/solver/nld_solver.cpp index 5c4eb2c7f77..36cd5692674 100644 --- a/src/lib/netlist/solver/nld_solver.cpp +++ b/src/lib/netlist/solver/nld_solver.cpp @@ -136,8 +136,7 @@ NETLIB_UPDATE(solver) /* step circuit */ if (!m_Q_step.net().is_queued()) { - m_Q_step.net().toggle_new_Q(); - m_Q_step.net().push_to_queue(netlist_time::from_double(m_params.m_max_timestep)); + m_Q_step.net().toggle_and_push_to_queue(netlist_time::from_double(m_params.m_max_timestep)); } } diff --git a/src/lib/netlist/tools/nl_convert.cpp b/src/lib/netlist/tools/nl_convert.cpp index acd83a61caf..c7df75dd274 100644 --- a/src/lib/netlist/tools/nl_convert.cpp +++ b/src/lib/netlist/tools/nl_convert.cpp @@ -228,7 +228,7 @@ nl_convert_base_t::unit_t nl_convert_base_t::m_units[] = { {"M", "CAP_M({1})", 1.0e-3 }, {"u", "CAP_U({1})", 1.0e-6 }, /* eagle */ {"U", "CAP_U({1})", 1.0e-6 }, - {"??", "CAP_U({1})", 1.0e-6 }, /* FIXME */ + {"μ", "CAP_U({1})", 1.0e-6 }, {"N", "CAP_N({1})", 1.0e-9 }, {"pF", "CAP_P({1})", 1.0e-12}, {"P", "CAP_P({1})", 1.0e-12}, diff --git a/src/mame/audio/irem.cpp b/src/mame/audio/irem.cpp index fb238b97995..57ede17fd0c 100644 --- a/src/mame/audio/irem.cpp +++ b/src/mame/audio/irem.cpp @@ -10,7 +10,6 @@ #include "cpu/m6800/m6800.h" #include "sound/discrete.h" #include "audio/irem.h" -#include "netlist/devices/net_lib.h" const device_type IREM_M62_AUDIO = &device_creator; const device_type IREM_M52_SOUNDC_AUDIO = &device_creator;