diff --git a/src/lib/netlist/macro/nlm_roms.cpp b/src/lib/netlist/macro/nlm_roms.cpp index 14c86d45636..e5d6cdc7d06 100644 --- a/src/lib/netlist/macro/nlm_roms.cpp +++ b/src/lib/netlist/macro/nlm_roms.cpp @@ -42,7 +42,7 @@ static NETLIST_START(PROM_82S126_DIP) DEFPARAM(ROM, "unknown") DEFPARAM(FORCE_TRISTATE_LOGIC, 0) - DEFPARAM(MODEL, "$(A.MODEL)") + DEFPARAM(MODEL, "$(@.A.MODEL)") PARAM(A.ROM, "$(@.ROM)") PARAM(A.FORCE_TRISTATE_LOGIC, "$(@.FORCE_TRISTATE_LOGIC)") PARAM(A.MODEL, "$(@.MODEL)") @@ -102,7 +102,7 @@ static NETLIST_START(PROM_74S287_DIP) DEFPARAM(ROM, "unknown") DEFPARAM(FORCE_TRISTATE_LOGIC, 0) - DEFPARAM(MODEL, "$(A.MODEL)") + DEFPARAM(MODEL, "$(@.A.MODEL)") PARAM(A.ROM, "$(@.ROM)") PARAM(A.FORCE_TRISTATE_LOGIC, "$(@.FORCE_TRISTATE_LOGIC)") PARAM(A.MODEL, "$(@.MODEL)") @@ -162,7 +162,7 @@ static NETLIST_START(PROM_82S123_DIP) DEFPARAM(ROM, "unknown") DEFPARAM(FORCE_TRISTATE_LOGIC, 0) - DEFPARAM(MODEL, "$(A.MODEL)") + DEFPARAM(MODEL, "$(@.A.MODEL)") PARAM(A.ROM, "$(@.ROM)") PARAM(A.FORCE_TRISTATE_LOGIC, "$(@.FORCE_TRISTATE_LOGIC)") PARAM(A.MODEL, "$(@.MODEL)") @@ -233,7 +233,7 @@ static NETLIST_START(EPROM_2716_DIP) DEFPARAM(ROM, "unknown") DEFPARAM(FORCE_TRISTATE_LOGIC, 0) - DEFPARAM(MODEL, "$(A.MODEL)") + DEFPARAM(MODEL, "$(@.A.MODEL)") PARAM(A.ROM, "$(@.ROM)") PARAM(A.FORCE_TRISTATE_LOGIC, "$(@.FORCE_TRISTATE_LOGIC)") PARAM(A.MODEL, "$(@.MODEL)") diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h index 63ae96a6a57..53921418fdf 100644 --- a/src/lib/netlist/nl_base.h +++ b/src/lib/netlist/nl_base.h @@ -1240,7 +1240,7 @@ namespace netlist } protected: virtual void changed() noexcept; - pstring str() const noexcept { pstring ret = *m_param; return ret;} + pstring str() const noexcept { return *m_param; } private: host_arena::unique_ptr m_param; }; diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp index d759ce13e92..784cb67ffcf 100644 --- a/src/lib/netlist/nl_setup.cpp +++ b/src/lib/netlist/nl_setup.cpp @@ -434,6 +434,13 @@ pstring setup_t::termtype_as_str(detail::core_terminal_t &in) pstring setup_t::get_initial_param_val(const pstring &name, const pstring &def) const { + // when get_intial_param_val is called the parameter is already registered + // and the value (valstr()) is set to the default value, e.g. "74XX" + // If thus $(IC5E.A.MODEL) is given for name=="IC5E.A.MODEL" valstr() below + // will return the default. + // FIXME: It may be more explicit and stable to test if pattern==name and return + // def in this case. + auto i = m_abstract.m_param_values.find(name); auto found_pat(false); pstring v = (i == m_abstract.m_param_values.end()) ? def : i->second; @@ -1440,7 +1447,7 @@ void setup_t::prepare_to_run() m_parser.register_dynamic_log_devices(loglist); } - // create defparams! + // create defparams first! for (auto & e : m_abstract.m_defparams) {