diff options
author | 2015-05-27 13:47:22 +0200 | |
---|---|---|
committer | 2015-05-27 23:18:44 +0200 | |
commit | cef370aa13953c3bcfa185c818c76812c34f13fc (patch) | |
tree | 6ecc90526c03f1e2411328ac2e3d635f9b952922 | |
parent | e9fe1e74c46f40379bcdc472b97c4aef4d3a91e6 (diff) |
Moved all files in src/emu/netlist starting with p into plib folder.
This is a first step to ease synchronisation with a stand alone, e.g.
outside mame, netlist implementation. More signed/unsigned cleanups and
started work on generic truthtable devices. (nw)
33 files changed, 355 insertions, 228 deletions
diff --git a/nl_examples/todo.c b/nl_examples/todo.c index 9da1a2c66f6..9d7765ea925 100644 --- a/nl_examples/todo.c +++ b/nl_examples/todo.c @@ -3,6 +3,60 @@ * */ +#include "netlist/devices/net_lib.h" + +struct ttd +{ + nl_util::pstring_list a; +}; + +ttd * nl_register_tt(pstring name, int in, int out); + + +#define NETLIST_TT(_name, _in, _out) \ + { \ + ttd *a = setup.register_tt(# _name, _in, _out); \ + +#define TT_LINE(_x) \ + a->a.add(_x); + +#define TT_END() } + +NETLIST_START(7400_TTL) + NET_REGISTER_DEV(7400, s1) + NET_REGISTER_DEV(7400, s2) + NET_REGISTER_DEV(7400, s3) + NET_REGISTER_DEV(7400, s4) + + ALIAS(1, s1.A); + ALIAS(2, s1.B); + ALIAS(3, s1.Q); + + ALIAS(4, s2.A); + ALIAS(5, s2.B); + ALIAS(6, s2.Q); + + ALIAS(9, s3.A); + ALIAS(10, s3.B) + ALIAS(8, s3.Q); + + ALIAS(12, s4.A); + ALIAS(13, s4.B); + ALIAS(11, s4.Q); + +NETLIST_END() + +NETLIST_START(lib) + NETLIST_TT(7400, 2, 1) + TT_LINE("A,B | Q ") + TT_LINE("0,X|1|22") + TT_LINE("X,0|1|22") + TT_LINE("1,1|0|15") + TT_END() +NETLIST_END() + + + #if 0 RES(R1, 10) RES(R2, 10) @@ -98,4 +152,4 @@ LOG(logY, 4V) #endif -d + diff --git a/scripts/src/netlist.lua b/scripts/src/netlist.lua index d1f9c97a74b..9d61b0d4892 100644 --- a/scripts/src/netlist.lua +++ b/scripts/src/netlist.lua @@ -15,16 +15,17 @@ files { MAME_DIR .. "src/emu/netlist/nl_setup.h", MAME_DIR .. "src/emu/netlist/nl_factory.c", MAME_DIR .. "src/emu/netlist/nl_factory.h", - MAME_DIR .. "src/emu/netlist/pconfig.h", - MAME_DIR .. "src/emu/netlist/palloc.c", - MAME_DIR .. "src/emu/netlist/palloc.h", - MAME_DIR .. "src/emu/netlist/plists.h", - MAME_DIR .. "src/emu/netlist/pparser.c", - MAME_DIR .. "src/emu/netlist/pparser.h", - MAME_DIR .. "src/emu/netlist/pstate.c", - MAME_DIR .. "src/emu/netlist/pstate.h", - MAME_DIR .. "src/emu/netlist/pstring.c", - MAME_DIR .. "src/emu/netlist/pstring.h", + MAME_DIR .. "src/emu/netlist/plib/pconfig.h", + MAME_DIR .. "src/emu/netlist/plib/palloc.c", + MAME_DIR .. "src/emu/netlist/plib/palloc.h", + MAME_DIR .. "src/emu/netlist/plib/plists.h", + MAME_DIR .. "src/emu/netlist/plib/poptions.h", + MAME_DIR .. "src/emu/netlist/plib/pparser.c", + MAME_DIR .. "src/emu/netlist/plib/pparser.h", + MAME_DIR .. "src/emu/netlist/plib/pstate.c", + MAME_DIR .. "src/emu/netlist/plib/pstate.h", + MAME_DIR .. "src/emu/netlist/plib/pstring.c", + MAME_DIR .. "src/emu/netlist/plib/pstring.h", MAME_DIR .. "src/emu/netlist/analog/nld_bjt.c", MAME_DIR .. "src/emu/netlist/analog/nld_bjt.h", MAME_DIR .. "src/emu/netlist/analog/nld_fourterm.c", diff --git a/scripts/src/tools.lua b/scripts/src/tools.lua index 0c1cbc3075e..936afb54346 100644 --- a/scripts/src/tools.lua +++ b/scripts/src/tools.lua @@ -448,7 +448,7 @@ links { includedirs { MAME_DIR .. "src/osd", MAME_DIR .. "src/lib/util", - MAME_DIR .. "src/emu", + MAME_DIR .. "src/emu/netlist", } files { diff --git a/src/emu/netlist/analog/nld_ms_direct.h b/src/emu/netlist/analog/nld_ms_direct.h index 08894933000..b5021e1c9f6 100644 --- a/src/emu/netlist/analog/nld_ms_direct.h +++ b/src/emu/netlist/analog/nld_ms_direct.h @@ -10,7 +10,7 @@ #include "nld_solver.h" -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> class netlist_matrix_solver_direct_t: public netlist_matrix_solver_t { public: @@ -23,7 +23,7 @@ public: /* ATTR_COLD */ virtual void vsetup(netlist_analog_net_t::list_t &nets); /* ATTR_COLD */ virtual void reset() { netlist_matrix_solver_t::reset(); } - ATTR_HOT inline int N() const { return (m_N == 0 ? m_dim : m_N); } + ATTR_HOT inline unsigned N() const { if (m_N == 0) return m_dim; else return m_N; } ATTR_HOT inline int vsolve_non_dynamic(const bool newton_raphson); @@ -56,7 +56,7 @@ protected: private: - const int m_dim; + const unsigned m_dim; nl_double m_lp_fact; }; @@ -64,10 +64,10 @@ private: // netlist_matrix_solver_direct // ---------------------------------------------------------------------------------------- -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> netlist_matrix_solver_direct_t<m_N, _storage_N>::~netlist_matrix_solver_direct_t() { - for (int k = 0; k < N(); k++) + for (unsigned k = 0; k < N(); k++) { pfree(m_terms[k]); } @@ -75,7 +75,7 @@ netlist_matrix_solver_direct_t<m_N, _storage_N>::~netlist_matrix_solver_direct_t pfree_array(m_rails_temp); } -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> ATTR_HOT nl_double netlist_matrix_solver_direct_t<m_N, _storage_N>::compute_next_timestep() { nl_double new_solver_timestep = m_params.m_max_timestep; @@ -86,7 +86,7 @@ ATTR_HOT nl_double netlist_matrix_solver_direct_t<m_N, _storage_N>::compute_next * FIXME: We should extend the logic to use either all nets or * only output nets. */ - for (int k = 0; k < N(); k++) + for (unsigned k = 0; k < N(); k++) { netlist_analog_net_t *n = m_nets[k]; @@ -114,7 +114,7 @@ ATTR_HOT nl_double netlist_matrix_solver_direct_t<m_N, _storage_N>::compute_next return new_solver_timestep; } -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> ATTR_COLD void netlist_matrix_solver_direct_t<m_N, _storage_N>::add_term(int k, netlist_terminal_t *term) { if (term->m_otherterm->net().isRailNet()) @@ -139,13 +139,13 @@ ATTR_COLD void netlist_matrix_solver_direct_t<m_N, _storage_N>::add_term(int k, } -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> ATTR_COLD void netlist_matrix_solver_direct_t<m_N, _storage_N>::vsetup(netlist_analog_net_t::list_t &nets) { if (m_dim < nets.size()) netlist().error("Dimension %d less than %" SIZETFMT, m_dim, nets.size()); - for (int k = 0; k < N(); k++) + for (unsigned k = 0; k < N(); k++) { m_terms[k]->clear(); m_rails_temp[k].clear(); @@ -153,10 +153,10 @@ ATTR_COLD void netlist_matrix_solver_direct_t<m_N, _storage_N>::vsetup(netlist_a netlist_matrix_solver_t::setup(nets); - for (int k = 0; k < N(); k++) + for (unsigned k = 0; k < N(); k++) { m_terms[k]->m_railstart = m_terms[k]->count(); - for (int i = 0; i < m_rails_temp[k].count(); i++) + for (unsigned i = 0; i < m_rails_temp[k].count(); i++) this->m_terms[k]->add(m_rails_temp[k].terms()[i], m_rails_temp[k].net_other()[i]); m_rails_temp[k].clear(); // no longer needed @@ -187,8 +187,8 @@ ATTR_COLD void netlist_matrix_solver_direct_t<m_N, _storage_N>::vsetup(netlist_a int sort_order = (type() == GAUSS_SEIDEL ? 1 : -1); - for (int k = 0; k < N() / 2; k++) - for (int i = 0; i < N() - 1; i++) + for (unsigned k = 0; k < N() / 2; k++) + for (unsigned i = 0; i < N() - 1; i++) { if ((m_terms[i]->m_railstart - m_terms[i+1]->m_railstart) * sort_order < 0) { @@ -197,10 +197,10 @@ ATTR_COLD void netlist_matrix_solver_direct_t<m_N, _storage_N>::vsetup(netlist_a } } - for (int k = 0; k < N(); k++) + for (unsigned k = 0; k < N(); k++) { int *other = m_terms[k]->net_other(); - for (int i = 0; i < m_terms[k]->count(); i++) + for (unsigned i = 0; i < m_terms[k]->count(); i++) if (other[i] != -1) other[i] = get_net_idx(&m_terms[k]->terms()[i]->m_otherterm->net()); } @@ -209,35 +209,35 @@ ATTR_COLD void netlist_matrix_solver_direct_t<m_N, _storage_N>::vsetup(netlist_a } -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> ATTR_HOT void netlist_matrix_solver_direct_t<m_N, _storage_N>::build_LE_A() { - for (int k = 0; k < N(); k++) + for (unsigned k = 0; k < N(); k++) { - for (int i=0; i < N(); i++) + for (unsigned i=0; i < N(); i++) m_A[k][i] = 0.0; nl_double akk = 0.0; - const int terms_count = m_terms[k]->count(); - const int railstart = m_terms[k]->m_railstart; + const unsigned terms_count = m_terms[k]->count(); + const unsigned railstart = m_terms[k]->m_railstart; const nl_double * RESTRICT gt = m_terms[k]->gt(); const nl_double * RESTRICT go = m_terms[k]->go(); const int * RESTRICT net_other = m_terms[k]->net_other(); - for (int i = 0; i < terms_count; i++) + for (unsigned i = 0; i < terms_count; i++) akk = akk + gt[i]; m_A[k][k] += akk; - for (int i = 0; i < railstart; i++) + for (unsigned i = 0; i < railstart; i++) m_A[k][net_other[i]] += -go[i]; } } -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> ATTR_HOT void netlist_matrix_solver_direct_t<m_N, _storage_N>::build_LE_RHS() { - for (int k = 0; k < N(); k++) + for (unsigned k = 0; k < N(); k++) { nl_double rhsk_a = 0.0; nl_double rhsk_b = 0.0; @@ -258,7 +258,7 @@ ATTR_HOT void netlist_matrix_solver_direct_t<m_N, _storage_N>::build_LE_RHS() } } -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> ATTR_HOT void netlist_matrix_solver_direct_t<m_N, _storage_N>::LE_solve() { #if 0 @@ -271,15 +271,15 @@ ATTR_HOT void netlist_matrix_solver_direct_t<m_N, _storage_N>::LE_solve() printf("\n"); #endif - const int kN = N(); + const unsigned kN = N(); - for (int i = 0; i < kN; i++) { + for (unsigned i = 0; i < kN; i++) { // FIXME: use a parameter to enable pivoting? if (USE_PIVOT_SEARCH) { /* Find the row with the largest first value */ - int maxrow = i; - for (int j = i + 1; j < kN; j++) + unsigned maxrow = i; + for (unsigned j = i + 1; j < kN; j++) { if (nl_math::abs(m_A[j][i]) > nl_math::abs(m_A[maxrow][i])) maxrow = j; @@ -288,7 +288,7 @@ ATTR_HOT void netlist_matrix_solver_direct_t<m_N, _storage_N>::LE_solve() if (maxrow != i) { /* Swap the maxrow and ith row */ - for (int k = i; k < kN; k++) { + for (unsigned k = i; k < kN; k++) { std::swap(m_A[i][k], m_A[maxrow][k]); } std::swap(m_RHS[i], m_RHS[maxrow]); @@ -300,12 +300,12 @@ ATTR_HOT void netlist_matrix_solver_direct_t<m_N, _storage_N>::LE_solve() /* Eliminate column i from row j */ - for (int j = i + 1; j < kN; j++) + for (unsigned j = i + 1; j < kN; j++) { const nl_double f1 = - m_A[j][i] * f; if (f1 != NL_FCONST(0.0)) { - for (int k = i + 1; k < kN; k++) + for (unsigned k = i + 1; k < kN; k++) m_A[j][k] += m_A[i][k] * f1; m_RHS[j] += m_RHS[i] * f1; } @@ -313,18 +313,18 @@ ATTR_HOT void netlist_matrix_solver_direct_t<m_N, _storage_N>::LE_solve() } } -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> ATTR_HOT void netlist_matrix_solver_direct_t<m_N, _storage_N>::LE_back_subst( nl_double * RESTRICT x) { - const int kN = N(); + const unsigned kN = N(); /* back substitution */ for (int j = kN - 1; j >= 0; j--) { nl_double tmp = 0; - for (int k = j + 1; k < kN; k++) + for (unsigned k = j + 1; k < kN; k++) tmp += m_A[j][k] * x[k]; x[j] = (m_RHS[j] - tmp) / m_A[j][j]; @@ -342,13 +342,13 @@ ATTR_HOT void netlist_matrix_solver_direct_t<m_N, _storage_N>::LE_back_subst( } -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> ATTR_HOT nl_double netlist_matrix_solver_direct_t<m_N, _storage_N>::delta( const nl_double * RESTRICT V) { nl_double cerr = 0; nl_double cerr2 = 0; - for (int i = 0; i < this->N(); i++) + for (unsigned i = 0; i < this->N(); i++) { const nl_double e = nl_math::abs(V[i] - this->m_nets[i]->m_cur_Analog); const nl_double e2 = nl_math::abs(m_RHS[i] - this->m_last_RHS[i]); @@ -359,24 +359,24 @@ ATTR_HOT nl_double netlist_matrix_solver_direct_t<m_N, _storage_N>::delta( return cerr + cerr2*NL_FCONST(100000.0); } -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> ATTR_HOT void netlist_matrix_solver_direct_t<m_N, _storage_N>::store( const nl_double * RESTRICT V, const bool store_RHS) { - for (int i = 0; i < this->N(); i++) + for (unsigned i = 0; i < this->N(); i++) { this->m_nets[i]->m_cur_Analog = V[i]; } if (store_RHS) { - for (int i = 0; i < this->N(); i++) + for (unsigned i = 0; i < this->N(); i++) { this->m_last_RHS[i] = m_RHS[i]; } } } -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> ATTR_HOT nl_double netlist_matrix_solver_direct_t<m_N, _storage_N>::vsolve() { solve_base<netlist_matrix_solver_direct_t>(this); @@ -384,7 +384,7 @@ ATTR_HOT nl_double netlist_matrix_solver_direct_t<m_N, _storage_N>::vsolve() } -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> ATTR_HOT int netlist_matrix_solver_direct_t<m_N, _storage_N>::solve_non_dynamic(ATTR_UNUSED const bool newton_raphson) { nl_double new_v[_storage_N]; // = { 0.0 }; @@ -406,7 +406,7 @@ ATTR_HOT int netlist_matrix_solver_direct_t<m_N, _storage_N>::solve_non_dynamic( } } -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> ATTR_HOT inline int netlist_matrix_solver_direct_t<m_N, _storage_N>::vsolve_non_dynamic(const bool newton_raphson) { this->build_LE_A(); @@ -416,7 +416,7 @@ ATTR_HOT inline int netlist_matrix_solver_direct_t<m_N, _storage_N>::vsolve_non_ return this->solve_non_dynamic(newton_raphson); } -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> netlist_matrix_solver_direct_t<m_N, _storage_N>::netlist_matrix_solver_direct_t(const netlist_solver_parameters_t ¶ms, const int size) : netlist_matrix_solver_t(GAUSSIAN_ELIMINATION, params) , m_dim(size) @@ -425,7 +425,7 @@ netlist_matrix_solver_direct_t<m_N, _storage_N>::netlist_matrix_solver_direct_t( m_terms = palloc_array(terms_t *, N()); m_rails_temp = palloc_array(terms_t, N()); - for (int k = 0; k < N(); k++) + for (unsigned k = 0; k < N(); k++) { m_terms[k] = palloc(terms_t); m_last_RHS[k] = 0.0; @@ -433,7 +433,7 @@ netlist_matrix_solver_direct_t<m_N, _storage_N>::netlist_matrix_solver_direct_t( } } -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> netlist_matrix_solver_direct_t<m_N, _storage_N>::netlist_matrix_solver_direct_t(const eSolverType type, const netlist_solver_parameters_t ¶ms, const int size) : netlist_matrix_solver_t(type, params) , m_dim(size) @@ -442,7 +442,7 @@ netlist_matrix_solver_direct_t<m_N, _storage_N>::netlist_matrix_solver_direct_t( m_terms = palloc_array(terms_t *, N()); m_rails_temp = palloc_array(terms_t, N()); - for (int k = 0; k < N(); k++) + for (unsigned k = 0; k < N(); k++) { m_terms[k] = palloc(terms_t); m_last_RHS[k] = 0.0; diff --git a/src/emu/netlist/analog/nld_ms_sor.h b/src/emu/netlist/analog/nld_ms_sor.h index 11ee4273d62..25799dbb1e6 100644 --- a/src/emu/netlist/analog/nld_ms_sor.h +++ b/src/emu/netlist/analog/nld_ms_sor.h @@ -15,7 +15,7 @@ #include "nld_solver.h" #include "nld_ms_direct.h" -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> class netlist_matrix_solver_SOR_t: public netlist_matrix_solver_direct_t<m_N, _storage_N> { public: @@ -46,7 +46,7 @@ private: // netlist_matrix_solver - Gauss - Seidel // ---------------------------------------------------------------------------------------- -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> void netlist_matrix_solver_SOR_t<m_N, _storage_N>::log_stats() { if (this->m_stat_calculations != 0 && this->m_params.m_log_stats) @@ -66,14 +66,14 @@ void netlist_matrix_solver_SOR_t<m_N, _storage_N>::log_stats() } } -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> ATTR_HOT nl_double netlist_matrix_solver_SOR_t<m_N, _storage_N>::vsolve() { this->solve_base(this); return this->compute_next_timestep(); } -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> ATTR_HOT inline int netlist_matrix_solver_SOR_t<m_N, _storage_N>::vsolve_non_dynamic(const bool newton_raphson) { const int iN = this->N(); diff --git a/src/emu/netlist/analog/nld_ms_sor_mat.h b/src/emu/netlist/analog/nld_ms_sor_mat.h index 184df6313ff..9c5a29382f1 100644 --- a/src/emu/netlist/analog/nld_ms_sor_mat.h +++ b/src/emu/netlist/analog/nld_ms_sor_mat.h @@ -15,7 +15,7 @@ #include "nld_solver.h" #include "nld_ms_direct.h" -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> class netlist_matrix_solver_SOR_mat_t: public netlist_matrix_solver_direct_t<m_N, _storage_N> { public: @@ -57,7 +57,7 @@ private: // netlist_matrix_solver - Gauss - Seidel // ---------------------------------------------------------------------------------------- -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> void netlist_matrix_solver_SOR_mat_t<m_N, _storage_N>::log_stats() { if (this->m_stat_calculations != 0 && m_log_stats) @@ -77,7 +77,7 @@ void netlist_matrix_solver_SOR_mat_t<m_N, _storage_N>::log_stats() } } -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> ATTR_HOT nl_double netlist_matrix_solver_SOR_mat_t<m_N, _storage_N>::vsolve() { /* @@ -85,13 +85,13 @@ ATTR_HOT nl_double netlist_matrix_solver_SOR_mat_t<m_N, _storage_N>::vsolve() */ if (USE_LINEAR_PREDICTION) - for (int k = 0; k < this->N(); k++) + for (unsigned k = 0; k < this->N(); k++) { this->m_last_V[k] = this->m_nets[k]->m_cur_Analog; this->m_nets[k]->m_cur_Analog = this->m_nets[k]->m_cur_Analog + this->m_Vdelta[k] * this->current_timestep() * m_lp_fact; } else - for (int k = 0; k < this->N(); k++) + for (unsigned k = 0; k < this->N(); k++) { this->m_last_V[k] = this->m_nets[k]->m_cur_Analog; } @@ -103,7 +103,7 @@ ATTR_HOT nl_double netlist_matrix_solver_SOR_mat_t<m_N, _storage_N>::vsolve() nl_double sq = 0; nl_double sqo = 0; const nl_double rez_cts = 1.0 / this->current_timestep(); - for (int k = 0; k < this->N(); k++) + for (unsigned k = 0; k < this->N(); k++) { const netlist_analog_net_t *n = this->m_nets[k]; const nl_double nv = (n->m_cur_Analog - this->m_last_V[k]) * rez_cts ; @@ -123,7 +123,7 @@ ATTR_HOT nl_double netlist_matrix_solver_SOR_mat_t<m_N, _storage_N>::vsolve() return this->compute_next_timestep(); } -template <int m_N, int _storage_N> +template <unsigned m_N, unsigned _storage_N> ATTR_HOT inline int netlist_matrix_solver_SOR_mat_t<m_N, _storage_N>::vsolve_non_dynamic(const bool newton_raphson) { /* The matrix based code looks a lot nicer but actually is 30% slower than diff --git a/src/emu/netlist/analog/nld_solver.c b/src/emu/netlist/analog/nld_solver.c index 703f6f35770..3d1eaf5b636 100644 --- a/src/emu/netlist/analog/nld_solver.c +++ b/src/emu/netlist/analog/nld_solver.c @@ -51,7 +51,7 @@ ATTR_COLD void terms_t::add(netlist_terminal_t *term, int net_other) ATTR_COLD void terms_t::set_pointers() { - for (int i = 0; i < count(); i++) + for (unsigned i = 0; i < count(); i++) { m_term[i]->m_gt1 = &m_gt[i]; m_term[i]->m_go1 = &m_go[i]; diff --git a/src/emu/netlist/analog/nld_solver.h b/src/emu/netlist/analog/nld_solver.h index 874c8dc7e1d..7ab2f4a7733 100644 --- a/src/emu/netlist/analog/nld_solver.h +++ b/src/emu/netlist/analog/nld_solver.h @@ -65,7 +65,7 @@ class terms_t ATTR_COLD void add(netlist_terminal_t *term, int net_other); - ATTR_HOT inline int count() { return m_term.size(); } + ATTR_HOT inline unsigned count() { return m_term.size(); } ATTR_HOT inline netlist_terminal_t **terms() { return m_term.data(); } ATTR_HOT inline int *net_other() { return m_net_other.data(); } @@ -76,7 +76,7 @@ class terms_t ATTR_COLD void set_pointers(); - int m_railstart; + unsigned m_railstart; private: plist_t<netlist_terminal_t *> m_term; diff --git a/src/emu/netlist/devices/nld_system.c b/src/emu/netlist/devices/nld_system.c index f97a0e14147..b7a5cf6c71e 100644 --- a/src/emu/netlist/devices/nld_system.c +++ b/src/emu/netlist/devices/nld_system.c @@ -76,7 +76,7 @@ NETLIB_START(extclock) connect(m_feedback, m_Q); { netlist_time base = netlist_time::from_hz(m_freq.Value()*2); - nl_util::pstring_list pat = nl_util::split(m_pattern.Value(),","); + pstring_list_t pat(m_pattern.Value(),","); m_off = netlist_time::from_double(m_offset.Value()); int pati[256]; diff --git a/src/emu/netlist/devices/nld_truthtable.c b/src/emu/netlist/devices/nld_truthtable.c index 85fc56ac34b..4d32c079ac3 100644 --- a/src/emu/netlist/devices/nld_truthtable.c +++ b/src/emu/netlist/devices/nld_truthtable.c @@ -6,7 +6,7 @@ */ #include "nld_truthtable.h" -#include "../plists.h" +#include "../plib/plists.h" unsigned truthtable_desc_t::count_bits(UINT32 v) { @@ -97,7 +97,7 @@ UINT32 truthtable_desc_t::get_ignored_extended(UINT32 i) // desc // ---------------------------------------------------------------------------------------- -ATTR_COLD void truthtable_desc_t::help(unsigned cur, nl_util::pstring_list list, +ATTR_COLD void truthtable_desc_t::help(unsigned cur, pstring_list_t list, UINT64 state,UINT16 val, UINT8 *timing_index) { pstring elem = list[cur].trim(); @@ -142,15 +142,17 @@ ATTR_COLD void truthtable_desc_t::help(unsigned cur, nl_util::pstring_list list, } } -ATTR_COLD void truthtable_desc_t::setup(const char **truthtable, UINT32 disabled_ignore) +ATTR_COLD void truthtable_desc_t::setup(const pstring_list_t &truthtable, UINT32 disabled_ignore) { + unsigned line = 0; + if (*m_initialized) return; - pstring ttline = pstring(truthtable[0]); - truthtable++; - ttline = pstring(truthtable[0]); - truthtable++; + pstring ttline = truthtable[line]; + line++; + ttline = truthtable[line]; + line++; for (unsigned j=0; j < m_size; j++) m_outs[j] = ~0L; @@ -160,14 +162,14 @@ ATTR_COLD void truthtable_desc_t::setup(const char **truthtable, UINT32 disabled while (!ttline.equals("")) { - nl_util::pstring_list io = nl_util::split(ttline,"|"); + pstring_list_t io(ttline,"|"); // checks nl_assert_always(io.size() == 3, "io.count mismatch"); - nl_util::pstring_list inout = nl_util::split(io[0], ","); + pstring_list_t inout(io[0], ","); nl_assert_always(inout.size() == m_num_bits, "number of bits not matching"); - nl_util::pstring_list out = nl_util::split(io[1], ","); + pstring_list_t out(io[1], ","); nl_assert_always(out.size() == m_NO, "output count not matching"); - nl_util::pstring_list times = nl_util::split(io[2], ","); + pstring_list_t times(io[2], ","); nl_assert_always(times.size() == m_NO, "timing count not matching"); UINT16 val = 0; @@ -189,8 +191,8 @@ ATTR_COLD void truthtable_desc_t::setup(const char **truthtable, UINT32 disabled } help(0, inout, 0 , val, tindex.data()); - ttline = pstring(truthtable[0]); - truthtable++; + ttline = truthtable[line]; + line++; } // determine ignore diff --git a/src/emu/netlist/devices/nld_truthtable.h b/src/emu/netlist/devices/nld_truthtable.h index d12dd3c578b..cf52be69164 100644 --- a/src/emu/netlist/devices/nld_truthtable.h +++ b/src/emu/netlist/devices/nld_truthtable.h @@ -11,6 +11,7 @@ #define NLD_TRUTHTABLE_H_ #include "../nl_base.h" +#include "../nl_factory.h" #define NETLIB_TRUTHTABLE(_name, _nIN, _nOUT, _state) \ class NETLIB_NAME(_name) : public nld_truthtable_t<_nIN, _nOUT, _state> \ @@ -44,10 +45,10 @@ struct truthtable_desc_t { } - ATTR_COLD void setup(const char **truthtable, UINT32 disabled_ignore); + ATTR_COLD void setup(const pstring_list_t &desc, UINT32 disabled_ignore); private: - ATTR_COLD void help(unsigned cur, nl_util::pstring_list list, + ATTR_COLD void help(unsigned cur, pstring_list_t list, UINT64 state,UINT16 val, UINT8 *timing_index); static unsigned count_bits(UINT32 v); static UINT32 set_bits(UINT32 v, UINT32 b); @@ -89,28 +90,40 @@ public: }; nld_truthtable_t(truthtable_t *ttbl, const char *desc[]) - : netlist_device_t(), m_last_state(0), m_ign(0), m_active(1), m_ttp(ttbl), m_desc(desc) + : netlist_device_t(), m_last_state(0), m_ign(0), m_active(1), m_ttp(ttbl) { + while (*desc != NULL && **desc != 0 ) + { + m_desc.add(*desc); + desc++; + } + + } + + nld_truthtable_t(truthtable_t *ttbl, const pstring_list_t &desc) + : netlist_device_t(), m_last_state(0), m_ign(0), m_active(1), m_ttp(ttbl) + { + m_desc = desc; } /* ATTR_COLD */ virtual void start() { - pstring ttline = pstring(m_desc[0]); + pstring header = m_desc[0]; - nl_util::pstring_list io = nl_util::split(ttline,"|"); + pstring_list_t io(header,"|"); // checks nl_assert_always(io.size() == 2, "too many '|'"); - nl_util::pstring_list inout = nl_util::split(io[0], ","); + pstring_list_t inout(io[0], ","); nl_assert_always(inout.size() == m_num_bits, "bitcount wrong"); - nl_util::pstring_list out = nl_util::split(io[1], ","); + pstring_list_t out(io[1], ","); nl_assert_always(out.size() == m_NO, "output count wrong"); - for (int i=0; i < m_NI; i++) + for (unsigned i=0; i < m_NI; i++) { inout[i] = inout[i].trim(); register_input(inout[i], m_i[i]); } - for (int i=0; i < m_NO; i++) + for (unsigned i=0; i < m_NO; i++) { out[i] = out[i].trim(); register_output(out[i], m_Q[i]); @@ -118,7 +131,7 @@ public: // Connect output "Q" to input "_Q" if this exists // This enables timed state without having explicit state .... UINT32 disabled_ignore = 0; - for (int i=0; i < m_NO; i++) + for (unsigned i=0; i < m_NO; i++) { pstring tmp = "_" + out[i]; const int idx = inout.indexof(tmp); @@ -154,7 +167,7 @@ public: ATTR_COLD void reset() { m_active = 0; - for (int i=0; i<m_NO;i++) + for (unsigned i=0; i<m_NO;i++) if (this->m_Q[i].net().num_cons()>0) m_active++; m_last_state = 0; @@ -193,14 +206,14 @@ public: const UINT32 timebase = nstate * m_NO; if (doOUT) { - for (int i = 0; i < m_NO; i++) + for (unsigned i = 0; i < m_NO; i++) OUTLOGIC(m_Q[i], (out >> i) & 1, m_ttp->m_timing_nt[m_ttp->m_timing[timebase + i]]); } else - for (int i = 0; i < m_NO; i++) + for (unsigned i = 0; i < m_NO; i++) m_Q[i].net().set_Q_time((out >> i) & 1, mt + m_ttp->m_timing_nt[m_ttp->m_timing[timebase + i]]); - for (int i = 0; i < m_NI; i++) + for (unsigned i = 0; i < m_NI; i++) if (m_ign & (1 << i)) m_i[i].inactivate(); @@ -227,7 +240,7 @@ public: if (has_state == 0) if (--m_active == 0) { - for (int i = 0; i< m_NI; i++) + for (unsigned i = 0; i< m_NI; i++) m_i[i].inactivate(); } } @@ -242,9 +255,40 @@ private: INT32 m_active; truthtable_t *m_ttp; - const char **m_desc; + pstring_list_t m_desc; }; +class net_device_t_base_factory_tt : public net_device_t_base_factory +{ + NETLIST_PREVENT_COPYING(net_device_t_base_factory_tt) +public: + ATTR_COLD net_device_t_base_factory_tt(const pstring &name, const pstring &classname, + const pstring &def_param) + : net_device_t_base_factory(name, classname, def_param) + {} + pstring_list_t m_desc; +}; + + +template<unsigned m_NI, unsigned m_NO, int has_state> +class net_device_t_factory_tt : public net_device_t_base_factory_tt +{ + NETLIST_PREVENT_COPYING(net_device_t_factory_tt) +public: + ATTR_COLD net_device_t_factory_tt(const pstring &name, const pstring &classname, + const pstring &def_param) + : net_device_t_base_factory(name, classname, def_param) { } + + ATTR_COLD netlist_device_t *Create() const + { + typedef nld_truthtable_t<m_NI, m_NO, has_state> tt_type; + netlist_device_t *r = palloc(tt_type, &m_ttbl, m_desc); + //r->init(setup, name); + return r; + } +private: + typename nld_truthtable_t<m_NI, m_NO, has_state>::truthtable_t m_ttbl; +}; diff --git a/src/emu/netlist/nl_base.c b/src/emu/netlist/nl_base.c index 0a8da9fda8b..1bc33ed7e37 100644 --- a/src/emu/netlist/nl_base.c +++ b/src/emu/netlist/nl_base.c @@ -7,12 +7,11 @@ #include <cstring> -#include "palloc.h" +#include "plib/palloc.h" #include "nl_base.h" #include "devices/nld_system.h" #include "analog/nld_solver.h" -#include "pstring.h" #include "nl_util.h" const netlist_time netlist_time::zero = netlist_time::from_raw(0); diff --git a/src/emu/netlist/nl_base.h b/src/emu/netlist/nl_base.h index a293ec95dd4..a20309f7566 100644 --- a/src/emu/netlist/nl_base.h +++ b/src/emu/netlist/nl_base.h @@ -158,8 +158,7 @@ #include "nl_lists.h" #include "nl_time.h" #include "nl_util.h" -#include "pstring.h" -#include "pstate.h" +#include "plib/pstate.h" // ---------------------------------------------------------------------------------------- // Type definitions @@ -1197,7 +1196,7 @@ public: plist_t<_C *> get_device_list() { plist_t<_C *> tmp; - for (int i = 0; i < m_devices.size(); i++) + for (std::size_t i = 0; i < m_devices.size(); i++) { _C *dev = dynamic_cast<_C *>(m_devices[i]); if (dev != NULL) @@ -1209,7 +1208,7 @@ public: template<class _C> _C *get_first_device() { - for (int i = 0; i < m_devices.size(); i++) + for (std::size_t i = 0; i < m_devices.size(); i++) { _C *dev = dynamic_cast<_C *>(m_devices[i]); if (dev != NULL) @@ -1222,7 +1221,7 @@ public: _C *get_single_device(const char *classname) { _C *ret = NULL; - for (int i = 0; i < m_devices.size(); i++) + for (std::size_t i = 0; i < m_devices.size(); i++) { _C *dev = dynamic_cast<_C *>(m_devices[i]); if (dev != NULL) diff --git a/src/emu/netlist/nl_config.h b/src/emu/netlist/nl_config.h index d01f6154e92..a7b493ac56d 100644 --- a/src/emu/netlist/nl_config.h +++ b/src/emu/netlist/nl_config.h @@ -8,7 +8,7 @@ #ifndef NLCONFIG_H_ #define NLCONFIG_H_ -#include "pconfig.h" +#include "plib/pconfig.h" //============================================================ // SETUP diff --git a/src/emu/netlist/nl_factory.c b/src/emu/netlist/nl_factory.c index 4c611af4c18..624b09bf023 100644 --- a/src/emu/netlist/nl_factory.c +++ b/src/emu/netlist/nl_factory.c @@ -15,20 +15,20 @@ // net_device_t_base_factory // ---------------------------------------------------------------------------------------- -ATTR_COLD const nl_util::pstring_list net_device_t_base_factory::term_param_list() +ATTR_COLD const pstring_list_t net_device_t_base_factory::term_param_list() { if (m_def_param.startsWith("+")) - return nl_util::split(m_def_param.substr(1), ","); + return pstring_list_t(m_def_param.substr(1), ","); else - return nl_util::pstring_list(); + return pstring_list_t(); } -ATTR_COLD const nl_util::pstring_list net_device_t_base_factory::def_params() +ATTR_COLD const pstring_list_t net_device_t_base_factory::def_params() { if (m_def_param.startsWith("+") || m_def_param.equals("-")) - return nl_util::pstring_list(); + return pstring_list_t(); else - return nl_util::split(m_def_param, ","); + return pstring_list_t(m_def_param, ","); } diff --git a/src/emu/netlist/nl_factory.h b/src/emu/netlist/nl_factory.h index 970a5024c5a..224e90e7a31 100644 --- a/src/emu/netlist/nl_factory.h +++ b/src/emu/netlist/nl_factory.h @@ -10,10 +10,9 @@ #define NLFACTORY_H_ #include "nl_config.h" -#include "palloc.h" -#include "plists.h" +#include "plib/palloc.h" +#include "plib/plists.h" #include "nl_base.h" -#include "pstring.h" // ----------------------------------------------------------------------------- // net_dev class factory @@ -35,8 +34,8 @@ public: ATTR_COLD const pstring &name() const { return m_name; } ATTR_COLD const pstring &classname() const { return m_classname; } ATTR_COLD const pstring ¶m_desc() const { return m_def_param; } - ATTR_COLD const nl_util::pstring_list term_param_list(); - ATTR_COLD const nl_util::pstring_list def_params(); + ATTR_COLD const pstring_list_t term_param_list(); + ATTR_COLD const pstring_list_t def_params(); protected: pstring m_name; /* device name */ @@ -76,6 +75,11 @@ public: m_list.add(palloc(net_device_t_factory< _C >, name, classname, def_param)); } + ATTR_COLD void register_device(net_device_t_base_factory *factory) + { + m_list.add(factory); + } + ATTR_COLD netlist_device_t *new_device_by_classname(const pstring &classname) const; ATTR_COLD netlist_device_t *new_device_by_name(const pstring &name, netlist_setup_t &setup) const; ATTR_COLD net_device_t_base_factory * factory_by_name(const pstring &name, netlist_setup_t &setup) const; diff --git a/src/emu/netlist/nl_parser.c b/src/emu/netlist/nl_parser.c index 7d7b29733be..cb2534222b4 100644 --- a/src/emu/netlist/nl_parser.c +++ b/src/emu/netlist/nl_parser.c @@ -225,8 +225,8 @@ void netlist_parser::device(const pstring &dev_type) pstring devname; net_device_t_base_factory *f = m_setup.factory().factory_by_name(dev_type, m_setup); netlist_device_t *dev; - nl_util::pstring_list termlist = f->term_param_list(); - nl_util::pstring_list def_params = f->def_params(); + pstring_list_t termlist = f->term_param_list(); + pstring_list_t def_params = f->def_params(); std::size_t cnt; diff --git a/src/emu/netlist/nl_parser.h b/src/emu/netlist/nl_parser.h index 582aad49de7..b435a3194fb 100644 --- a/src/emu/netlist/nl_parser.h +++ b/src/emu/netlist/nl_parser.h @@ -10,7 +10,7 @@ #include "nl_setup.h" #include "nl_util.h" -#include "pparser.h" +#include "plib/pparser.h" class netlist_parser : public ptokenizer { diff --git a/src/emu/netlist/nl_setup.c b/src/emu/netlist/nl_setup.c index 6b98f14d452..b286f800945 100644 --- a/src/emu/netlist/nl_setup.c +++ b/src/emu/netlist/nl_setup.c @@ -7,7 +7,7 @@ #include <cstdio> -#include "palloc.h" +#include "plib/palloc.h" #include "nl_base.h" #include "nl_setup.h" #include "nl_parser.h" @@ -286,7 +286,7 @@ void netlist_setup_t::register_object(netlist_device_t &dev, const pstring &name void netlist_setup_t::register_link_arr(const pstring &terms) { - nl_util::pstring_list list = nl_util::split(terms,", "); + pstring_list_t list(terms,", "); if (list.size() < 2) netlist().error("You must pass at least 2 terminals to NET_C"); for (std::size_t i = 1; i < list.size(); i++) @@ -776,7 +776,7 @@ void netlist_setup_t::start_devices() if (env != "") { NL_VERBOSE_OUT(("Creating dynamic logs ...\n")); - nl_util::pstring_list ll = nl_util::split(env, ":"); + pstring_list_t ll(env, ":"); for (std::size_t i=0; i < ll.size(); i++) { NL_VERBOSE_OUT(("%d: <%s>\n",i, ll[i].cstr())); diff --git a/src/emu/netlist/nl_time.h b/src/emu/netlist/nl_time.h index 457f7622307..7b56b03628a 100644 --- a/src/emu/netlist/nl_time.h +++ b/src/emu/netlist/nl_time.h @@ -8,7 +8,7 @@ #define NLTIME_H_ #include "nl_config.h" -#include "pstate.h" +#include "plib/pstate.h" //============================================================ // MACROS diff --git a/src/emu/netlist/nl_util.h b/src/emu/netlist/nl_util.h index cf5ee6a3a7b..09a06ce976a 100644 --- a/src/emu/netlist/nl_util.h +++ b/src/emu/netlist/nl_util.h @@ -8,11 +8,12 @@ #ifndef NL_UTIL_H_ #define NL_UTIL_H_ -#include "pstring.h" -#include "plists.h" #include <cmath> #include <cstring> +#include "plib/pstring.h" +#include "plib/plists.h" + class nl_util { // this is purely static @@ -20,68 +21,7 @@ private: nl_util() {}; public: - typedef plist_t<pstring> pstring_list; - - static pstring_list split(const pstring &str, const pstring &onstr, bool ignore_empty = false) - { - pstring_list temp; - - int p = 0; - int pn; - - pn = str.find(onstr, p); - while (pn>=0) - { - pstring t = str.substr(p, pn - p); - if (!ignore_empty || t.len() != 0) - temp.add(t); - p = pn + onstr.len(); - pn = str.find(onstr, p); - } - if (p<str.len()) - { - pstring t = str.substr(p); - if (!ignore_empty || t.len() != 0) - temp.add(t); - } - return temp; - } - static pstring_list splitexpr(const pstring &str, const pstring_list &onstrl) - { - pstring_list temp; - pstring col = ""; - - int i = 0; - while (i<str.len()) - { - int p = -1; - for (std::size_t j=0; j < onstrl.size(); j++) - { - if (std::strncmp(onstrl[j].cstr(), &(str.cstr()[i]), onstrl[j].len())==0) - { - p = j; - break; - } - } - if (p>=0) - { - if (col != "") - temp.add(col); - col = ""; - temp.add(onstrl[p]); - i += onstrl[p].len(); - } - else - { - col += str.cstr()[i]; - i++; - } - } - if (col != "") - temp.add(col); - return temp; - } static const pstring environment(const pstring &var, const pstring &default_val = "") { diff --git a/src/emu/netlist/palloc.c b/src/emu/netlist/plib/palloc.c index 5f9dbc5fee7..5f9dbc5fee7 100644 --- a/src/emu/netlist/palloc.c +++ b/src/emu/netlist/plib/palloc.c diff --git a/src/emu/netlist/palloc.h b/src/emu/netlist/plib/palloc.h index e78bbc6e3ab..e78bbc6e3ab 100644 --- a/src/emu/netlist/palloc.h +++ b/src/emu/netlist/plib/palloc.h diff --git a/src/emu/netlist/pconfig.h b/src/emu/netlist/plib/pconfig.h index b05292b26e4..6c00cdd3411 100644 --- a/src/emu/netlist/pconfig.h +++ b/src/emu/netlist/plib/pconfig.h @@ -77,6 +77,23 @@ typedef int64_t INT64; #define S64(val) val #endif +/* MINGW has adopted the MSVC formatting for 64-bit ints as of gcc 4.4 */ +#if (defined(__MINGW32__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))) || defined(_MSC_VER) +#define I64FMT "I64" +#else +#define I64FMT "ll" +#endif + +#if defined(_MSC_VER) || defined(__MINGW32__) +#ifdef PTR64 +#define SIZETFMT "I64u" +#else +#define SIZETFMT "u" +#endif +#else +#define SIZETFMT "zu" +#endif + #endif #endif /* PCONFIG_H_ */ diff --git a/src/emu/netlist/plists.h b/src/emu/netlist/plib/plists.h index 25ded23fe83..fb121b798b6 100644 --- a/src/emu/netlist/plists.h +++ b/src/emu/netlist/plib/plists.h @@ -10,6 +10,8 @@ #ifndef PLISTS_H_ #define PLISTS_H_ +#include <cstring> + #include "palloc.h" #include "pstring.h" @@ -236,7 +238,7 @@ public: { //nl_assert((pos>=0) && (pos<m_count)); m_count--; - for (int i = pos; i < m_count; i++) + for (std::size_t i = pos; i < m_count; i++) { m_list[i] = m_list[i+1]; } @@ -339,7 +341,7 @@ class pnamedlist_t : public plist_t<_ListClass> public: _ListClass find(const pstring &name) const { - for (int i=0; i < this->size(); i++) + for (std::size_t i=0; i < this->size(); i++) if (get_name((*this)[i]) == name) return (*this)[i]; return _ListClass(NULL); @@ -510,4 +512,74 @@ private: _ListClass *m_head; }; +// ---------------------------------------------------------------------------------------- +// string list +// ---------------------------------------------------------------------------------------- + +class pstring_list_t : public plist_t<pstring> +{ +public: + pstring_list_t() : plist_t<pstring>() { } + + pstring_list_t(const pstring &str, const pstring &onstr, bool ignore_empty = false) + : plist_t<pstring>() + { + + int p = 0; + int pn; + + pn = str.find(onstr, p); + while (pn>=0) + { + pstring t = str.substr(p, pn - p); + if (!ignore_empty || t.len() != 0) + this->add(t); + p = pn + onstr.len(); + pn = str.find(onstr, p); + } + if (p<str.len()) + { + pstring t = str.substr(p); + if (!ignore_empty || t.len() != 0) + this->add(t); + } + } + + static pstring_list_t splitexpr(const pstring &str, const pstring_list_t &onstrl) + { + pstring_list_t temp; + pstring col = ""; + + int i = 0; + while (i<str.len()) + { + int p = -1; + for (std::size_t j=0; j < onstrl.size(); j++) + { + if (std::strncmp(onstrl[j].cstr(), &(str.cstr()[i]), onstrl[j].len())==0) + { + p = j; + break; + } + } + if (p>=0) + { + if (col != "") + temp.add(col); + col = ""; + temp.add(onstrl[p]); + i += onstrl[p].len(); + } + else + { + col += str.cstr()[i]; + i++; + } + } + if (col != "") + temp.add(col); + return temp; + } +}; + #endif /* PLISTS_H_ */ diff --git a/src/emu/netlist/poptions.h b/src/emu/netlist/plib/poptions.h index 7803a315d94..7803a315d94 100644 --- a/src/emu/netlist/poptions.h +++ b/src/emu/netlist/plib/poptions.h diff --git a/src/emu/netlist/pparser.c b/src/emu/netlist/plib/pparser.c index 8e58f0dcae7..6a8c184c0cb 100644 --- a/src/emu/netlist/pparser.c +++ b/src/emu/netlist/plib/pparser.c @@ -227,7 +227,7 @@ void ppreprocessor::error(const pstring &err) -double ppreprocessor::expr(const nl_util::pstring_list &sexpr, std::size_t &start, int prio) +double ppreprocessor::expr(const pstring_list_t &sexpr, std::size_t &start, int prio) { double val; pstring tok=sexpr[start]; @@ -300,7 +300,7 @@ ppreprocessor::define_t *ppreprocessor::get_define(const pstring &name) pstring ppreprocessor::replace_macros(const pstring &line) { - nl_util::pstring_list elems = nl_util::splitexpr(line, m_expr_sep); + pstring_list_t elems = pstring_list_t::splitexpr(line, m_expr_sep); pstringbuffer ret = ""; for (std::size_t i=0; i<elems.size(); i++) { @@ -313,7 +313,7 @@ pstring ppreprocessor::replace_macros(const pstring &line) return pstring(ret.cstr()); } -static pstring catremainder(const nl_util::pstring_list &elems, std::size_t start, pstring sep) +static pstring catremainder(const pstring_list_t &elems, std::size_t start, pstring sep) { pstringbuffer ret = ""; for (std::size_t i=start; i<elems.size(); i++) @@ -327,7 +327,7 @@ static pstring catremainder(const nl_util::pstring_list &elems, std::size_t star pstring ppreprocessor::process(const pstring &contents) { pstringbuffer ret = ""; - nl_util::pstring_list lines = nl_util::split(contents,"\n", false); + pstring_list_t lines(contents,"\n", false); UINT32 ifflag = 0; // 31 if levels int level = 0; @@ -339,12 +339,12 @@ pstring ppreprocessor::process(const pstring &contents) lt = replace_macros(lt); if (lt.startsWith("#")) { - nl_util::pstring_list lti = nl_util::split(lt, " ", true); + pstring_list_t lti(lt, " ", true); if (lti[0].equals("#if")) { level++; std::size_t start = 0; - nl_util::pstring_list t = nl_util::splitexpr(lt.substr(3).replace(" ",""), m_expr_sep); + pstring_list_t t = pstring_list_t::splitexpr(lt.substr(3).replace(" ",""), m_expr_sep); int val = expr(t, start, 0); if (val == 0) ifflag |= (1 << level); diff --git a/src/emu/netlist/pparser.h b/src/emu/netlist/plib/pparser.h index b44e83f649c..b21b06659cc 100644 --- a/src/emu/netlist/pparser.h +++ b/src/emu/netlist/plib/pparser.h @@ -9,8 +9,8 @@ #define PPARSER_H_ #include "pconfig.h" -#include "nl_config.h" // FIXME -#include "nl_util.h" +#include "../nl_config.h" // FIXME +#include "../nl_util.h" class ptokenizer { @@ -161,7 +161,7 @@ public: protected: - double expr(const nl_util::pstring_list &sexpr, std::size_t &start, int prio); + double expr(const pstring_list_t &sexpr, std::size_t &start, int prio); define_t *get_define(const pstring &name); @@ -172,7 +172,7 @@ protected: private: plist_t<define_t> m_defines; - nl_util::pstring_list m_expr_sep; + pstring_list_t m_expr_sep; }; #endif /* PPARSER_H_ */ diff --git a/src/emu/netlist/pstate.c b/src/emu/netlist/plib/pstate.c index 07532032405..07532032405 100644 --- a/src/emu/netlist/pstate.c +++ b/src/emu/netlist/plib/pstate.c diff --git a/src/emu/netlist/pstate.h b/src/emu/netlist/plib/pstate.h index 73b83e65a00..73b83e65a00 100644 --- a/src/emu/netlist/pstate.h +++ b/src/emu/netlist/plib/pstate.h diff --git a/src/emu/netlist/pstring.c b/src/emu/netlist/plib/pstring.c index ec930808e7b..ec930808e7b 100644 --- a/src/emu/netlist/pstring.c +++ b/src/emu/netlist/plib/pstring.c diff --git a/src/emu/netlist/pstring.h b/src/emu/netlist/plib/pstring.h index 7cfb936472c..7cfb936472c 100644 --- a/src/emu/netlist/pstring.h +++ b/src/emu/netlist/plib/pstring.h diff --git a/src/tools/nltool.c b/src/tools/nltool.c index 555131defce..78d0633d121 100644 --- a/src/tools/nltool.c +++ b/src/tools/nltool.c @@ -11,23 +11,24 @@ #include <cstdio> #ifdef PSTANDALONE -#if (PSTANDALONE) + #if (PSTANDALONE) #define PSTANDALONE_PROVIDED + #endif #endif -#endif - -#ifdef PSTANDALONE_PROVIDED -#include <ctime> - -#include "poptions.h" -#include "pstring.h" -#include "plists.h" +#include "plib/poptions.h" +#include "plib/pstring.h" +#include "plib/plists.h" #include "nl_setup.h" #include "nl_factory.h" #include "nl_parser.h" #include "devices/net_lib.h" + +#ifdef PSTANDALONE_PROVIDED + +#include <ctime> + #define osd_ticks_t clock_t inline osd_ticks_t osd_ticks_per_second() { return CLOCKS_PER_SEC; } @@ -35,14 +36,8 @@ inline osd_ticks_t osd_ticks_per_second() { return CLOCKS_PER_SEC; } osd_ticks_t osd_ticks(void) { return clock(); } #else -#include "netlist/poptions.h" -#include "netlist/pstring.h" -#include "netlist/plists.h" -#include "netlist/nl_setup.h" -#include "netlist/nl_factory.h" -#include "netlist/nl_parser.h" -#include "netlist/devices/net_lib.h" #endif + /*************************************************************************** * MAME COMPATIBILITY ... * @@ -209,7 +204,7 @@ public: void log_setup() { NL_VERBOSE_OUT(("Creating dynamic logs ...\n")); - nl_util::pstring_list ll = nl_util::split(m_logs, ":"); + pstring_list_t ll(m_logs, ":"); for (int i=0; i < ll.size(); i++) { pstring name = "log_" + ll[i]; @@ -360,7 +355,7 @@ public: void convert(const pstring &contents) { - nl_util::pstring_list spnl = nl_util::split(contents, "\n"); + pstring_list_t spnl(contents, "\n"); // Add gnd net @@ -369,7 +364,7 @@ public: pstring line = ""; - for (int i=0; i < spnl.size(); i++) + for (std::size_t i=0; i < spnl.size(); i++) { // Basic preprocessing pstring inl = spnl[i].trim().ucase(); @@ -393,14 +388,14 @@ protected: : m_name(aname), m_no_export(false) {} const pstring &name() { return m_name;} - nl_util::pstring_list &terminals() { return m_terminals; } + pstring_list_t &terminals() { return m_terminals; } void set_no_export() { m_no_export = true; } bool is_no_export() { return m_no_export; } private: pstring m_name; bool m_no_export; - nl_util::pstring_list m_terminals; + pstring_list_t m_terminals; }; struct sp_dev_t @@ -538,7 +533,7 @@ protected: { if (line != "") { - nl_util::pstring_list tt = nl_util::split(line, " ", true); + pstring_list_t tt(line, " ", true); double val = 0.0; switch (tt[0].cstr()[0]) { @@ -646,7 +641,7 @@ convert_t::sp_unit convert_t::m_sp_units[] = { {"", "%g", 1.0e0 }, {"M", "CAP_M(%g)", 1.0e-3 }, {"U", "CAP_U(%g)", 1.0e-6 }, - {"??", "CAP_U(%g)", 1.0e-6 }, + {"ยต", "CAP_U(%g)", 1.0e-6 }, {"N", "CAP_N(%g)", 1.0e-9 }, {"P", "CAP_P(%g)", 1.0e-12}, {"F", "%ge-15", 1.0e-15}, |