mirror of
https://github.com/holub/mame
synced 2025-04-22 08:22:15 +03:00
netlist: Add more validations and fix issues identified.
This commit is contained in:
parent
f9f5fc63fe
commit
7dfd781e22
@ -21,6 +21,7 @@
|
||||
|
||||
#include "debugger.h"
|
||||
#include "romload.h"
|
||||
#include "emuopts.h"
|
||||
|
||||
#include <cmath>
|
||||
#include <memory>
|
||||
@ -680,9 +681,18 @@ void netlist_mame_analog_input_device::device_start()
|
||||
// disable automatic scaling for ioports
|
||||
m_auto_port = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void netlist_mame_analog_input_device::validity_helper(validity_checker &valid,
|
||||
netlist::netlist_state_t &nlstate) const
|
||||
{
|
||||
netlist::param_t *p = nlstate.setup().find_param(pstring(m_param_name));
|
||||
auto *param = dynamic_cast<netlist::param_double_t *>(p);
|
||||
if (param == nullptr)
|
||||
{
|
||||
osd_printf_warning("device %s wrong parameter type for %s\n", basetag(), m_param_name);
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------------
|
||||
// netlist_mame_analog_output_device
|
||||
@ -790,6 +800,17 @@ void netlist_mame_int_input_device::device_start()
|
||||
}
|
||||
}
|
||||
|
||||
void netlist_mame_int_input_device::validity_helper(validity_checker &valid,
|
||||
netlist::netlist_state_t &nlstate) const
|
||||
{
|
||||
netlist::param_t *p = nlstate.setup().find_param(pstring(m_param_name));
|
||||
auto *param = dynamic_cast<netlist::param_int_t *>(p);
|
||||
if (param == nullptr)
|
||||
{
|
||||
osd_printf_warning("device %s wrong parameter type for %s\n", basetag(), m_param_name);
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------------
|
||||
// netlist_mame_logic_input_device
|
||||
// ----------------------------------------------------------------------------------------
|
||||
@ -821,6 +842,17 @@ void netlist_mame_logic_input_device::device_start()
|
||||
}
|
||||
}
|
||||
|
||||
void netlist_mame_logic_input_device::validity_helper(validity_checker &valid,
|
||||
netlist::netlist_state_t &nlstate) const
|
||||
{
|
||||
netlist::param_t *p = nlstate.setup().find_param(pstring(m_param_name));
|
||||
auto *param = dynamic_cast<netlist::param_logic_t *>(p);
|
||||
if (param == nullptr)
|
||||
{
|
||||
osd_printf_warning("device %s wrong parameter type for %s\n", basetag(), m_param_name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------------------
|
||||
// netlist_mame_ram_pointer_device
|
||||
@ -863,6 +895,17 @@ void netlist_mame_ram_pointer_device::device_start()
|
||||
m_data = (*m_param)();
|
||||
}
|
||||
|
||||
void netlist_mame_ram_pointer_device::validity_helper(validity_checker &valid,
|
||||
netlist::netlist_state_t &nlstate) const
|
||||
{
|
||||
netlist::param_t *p = nlstate.setup().find_param(pstring(m_param_name));
|
||||
auto *param = dynamic_cast<netlist::param_ptr_t *>(p);
|
||||
if (param == nullptr)
|
||||
{
|
||||
osd_printf_warning("device %s wrong parameter type for %s\n", basetag(), m_param_name);
|
||||
}
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------------------
|
||||
// netlist_mame_stream_input_device
|
||||
// ----------------------------------------------------------------------------------------
|
||||
@ -1005,22 +1048,27 @@ void netlist_mame_device::common_dev_start(netlist::netlist_t *lnetlist) const
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
void netlist_mame_device::device_validity_check(validity_checker &valid) const
|
||||
plib::unique_ptr<netlist::netlist_t> netlist_mame_device::base_validity_check(validity_checker &valid) const
|
||||
{
|
||||
#if 1
|
||||
|
||||
//rom_exists(mconfig().root_device());
|
||||
LOGDEVCALLS("device_validity_check %s\n", this->mconfig().gamedrv().name);
|
||||
|
||||
try
|
||||
{
|
||||
//netlist_mame_t lnetlist(*this, "netlist", plib::make_unique<netlist_validate_callbacks_t>());
|
||||
netlist::netlist_t lnetlist("netlist", plib::make_unique<netlist_validate_callbacks_t>());
|
||||
auto lnetlist = plib::make_unique<netlist::netlist_t>("netlist", plib::make_unique<netlist_validate_callbacks_t>());
|
||||
// enable validation mode
|
||||
lnetlist.nlstate().setup().enable_validation();
|
||||
common_dev_start(&lnetlist);
|
||||
lnetlist->nlstate().setup().enable_validation();
|
||||
common_dev_start(lnetlist.get());
|
||||
|
||||
for (device_t &d : subdevices())
|
||||
{
|
||||
netlist_mame_sub_interface *sdev = dynamic_cast<netlist_mame_sub_interface *>(&d);
|
||||
if( sdev != nullptr )
|
||||
{
|
||||
LOGDEVCALLS("Validity check on subdevice %s/%s\n", d.name(), d.shortname());
|
||||
sdev->validity_helper(valid, lnetlist->nlstate());
|
||||
}
|
||||
}
|
||||
|
||||
return lnetlist;
|
||||
}
|
||||
catch (memregion_not_set &err)
|
||||
{
|
||||
@ -1034,7 +1082,14 @@ void netlist_mame_device::device_validity_check(validity_checker &valid) const
|
||||
{
|
||||
osd_printf_error("%s\n", err.what());
|
||||
}
|
||||
#endif
|
||||
return plib::unique_ptr<netlist::netlist_t>(nullptr);
|
||||
}
|
||||
|
||||
void netlist_mame_device::device_validity_check(validity_checker &valid) const
|
||||
{
|
||||
base_validity_check(valid);
|
||||
//rom_exists(mconfig().root_device());
|
||||
LOGDEVCALLS("device_validity_check %s\n", this->mconfig().gamedrv().name);
|
||||
}
|
||||
|
||||
|
||||
@ -1043,6 +1098,11 @@ void netlist_mame_device::device_start()
|
||||
LOGDEVCALLS("device_start entry\n");
|
||||
|
||||
m_netlist = netlist::pool().make_poolptr<netlist_mame_t>(*this, "netlist");
|
||||
if (!machine().options().verbose())
|
||||
{
|
||||
m_netlist->nlstate().log().verbose.set_enabled(false);
|
||||
m_netlist->nlstate().log().debug.set_enabled(false);
|
||||
}
|
||||
|
||||
common_dev_start(m_netlist.get());
|
||||
|
||||
@ -1271,6 +1331,33 @@ netlist_mame_sound_device::netlist_mame_sound_device(const machine_config &mconf
|
||||
{
|
||||
}
|
||||
|
||||
void netlist_mame_sound_device::device_validity_check(validity_checker &valid) const
|
||||
{
|
||||
LOGDEVCALLS("sound device_validity check\n");
|
||||
auto lnetlist = base_validity_check(valid);
|
||||
if (lnetlist)
|
||||
{
|
||||
/*Ok - do some more checks */
|
||||
std::vector<nld_sound_out *> outdevs = lnetlist->nlstate().get_device_list<nld_sound_out>();
|
||||
if (outdevs.size() == 0)
|
||||
osd_printf_error("No output devices\n");
|
||||
else
|
||||
{
|
||||
for (auto &outdev : outdevs)
|
||||
{
|
||||
int chan = outdev->m_channel();
|
||||
if (chan < 0 || chan >= outdevs.size())
|
||||
osd_printf_error("illegal channel number %d\n", chan);
|
||||
}
|
||||
}
|
||||
std::vector<nld_sound_in *> indevs = lnetlist->nlstate().get_device_list<nld_sound_in>();
|
||||
if (indevs.size() > 1)
|
||||
osd_printf_error("A maximum of one input device is allowed but found %d!\n", (int)indevs.size());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
void netlist_mame_sound_device::device_start()
|
||||
{
|
||||
netlist_mame_device::device_start();
|
||||
@ -1327,7 +1414,6 @@ void netlist_mame_sound_device::nl_register_devices(netlist::setup_t &lsetup) co
|
||||
lsetup.factory().register_device<nld_sound_in>("NETDEV_SOUND_IN", "nld_sound_in", "-");
|
||||
}
|
||||
|
||||
|
||||
void netlist_mame_sound_device::sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples)
|
||||
{
|
||||
|
||||
|
@ -146,6 +146,8 @@ protected:
|
||||
|
||||
netlist::netlist_time m_div;
|
||||
|
||||
plib::unique_ptr<netlist::netlist_t> base_validity_check(validity_checker &valid) const;
|
||||
|
||||
private:
|
||||
void save_state();
|
||||
|
||||
@ -267,6 +269,7 @@ public:
|
||||
|
||||
// device_sound_interface overrides
|
||||
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
|
||||
virtual void device_validity_check(validity_checker &valid) const override;
|
||||
|
||||
protected:
|
||||
// netlist_mame_device
|
||||
@ -302,6 +305,8 @@ public:
|
||||
|
||||
virtual void custom_netlist_additions(netlist::netlist_state_t &nlstate) { }
|
||||
virtual void pre_parse_action(netlist::netlist_state_t &nlstate) { }
|
||||
virtual void validity_helper(validity_checker &valid,
|
||||
netlist::netlist_state_t &nlstate) const { }
|
||||
|
||||
inline netlist_mame_device &nl_owner() const { return *m_owner; }
|
||||
|
||||
@ -352,6 +357,8 @@ public:
|
||||
inline DECLARE_WRITE32_MEMBER(write32) { write(data); }
|
||||
inline DECLARE_WRITE64_MEMBER(write64) { write(data); }
|
||||
|
||||
virtual void validity_helper(validity_checker &valid,
|
||||
netlist::netlist_state_t &nlstate) const override;
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
@ -454,6 +461,8 @@ public:
|
||||
DECLARE_WRITE32_MEMBER(write32) { write(data); }
|
||||
DECLARE_WRITE64_MEMBER(write64) { write(data); }
|
||||
|
||||
virtual void validity_helper(validity_checker &valid, netlist::netlist_state_t &nlstate) const override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
@ -493,6 +502,8 @@ public:
|
||||
DECLARE_WRITE32_MEMBER(write32) { write(data); }
|
||||
DECLARE_WRITE64_MEMBER(write64) { write(data); }
|
||||
|
||||
virtual void validity_helper(validity_checker &valid, netlist::netlist_state_t &nlstate) const override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
@ -519,6 +530,8 @@ public:
|
||||
|
||||
void set_params(const char *param_name);
|
||||
|
||||
virtual void validity_helper(validity_checker &valid, netlist::netlist_state_t &nlstate) const override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
|
@ -281,7 +281,7 @@ namespace analog
|
||||
|
||||
m_vto = m_model.m_VTO;
|
||||
if(m_vto != 0.0)
|
||||
log().info("Threshold voltage not specified for {1}", m_model.name());
|
||||
log().warning(MW_MOSFET_THRESHOLD_VOLTAGE(m_model.name()));
|
||||
|
||||
/* FIXME: VTO if missing may be calculated from TPG, NSS and temperature. Usually models
|
||||
* specify VTO so skip this here.
|
||||
|
@ -116,7 +116,7 @@ namespace netlist
|
||||
{
|
||||
m_type = static_cast<int>(m_model.m_TYPE);
|
||||
if (m_type < 1 || m_type > 3)
|
||||
log().fatal(MF_UNKNOWN_OPAMP_TYPE(m_type));
|
||||
log().fatal(MF_OPAMP_UNKNOWN_TYPE(m_type));
|
||||
|
||||
if (m_type == 1)
|
||||
{
|
||||
@ -225,7 +225,7 @@ namespace netlist
|
||||
|
||||
//printf("OPAMP %s: %g %g %g\n", name().c_str(), CP, RP, G);
|
||||
if (m_model.m_SLEW / (4.0 * constants::pi() * 0.0258) < m_model.m_UGF)
|
||||
log().warning("Opamp <{1}> parameters fail convergence criteria", this->name());
|
||||
log().warning(MW_OPAMP_FAIL_CONVERGENCE(this->name()));
|
||||
|
||||
m_CP->m_C.setTo(CP);
|
||||
m_RP.set_R(RP);
|
||||
|
@ -436,7 +436,7 @@ namespace devices
|
||||
}
|
||||
else
|
||||
{
|
||||
owner.create_and_register_subdevice("_RVG", m_RVG);
|
||||
owner.create_and_register_subdevice(sPowerDevRes, m_RVG);
|
||||
owner.register_subalias(sVCC, "_RVG.1");
|
||||
owner.register_subalias(sGND, "_RVG.2");
|
||||
}
|
||||
|
@ -1342,6 +1342,8 @@ namespace netlist
|
||||
return dynamic_cast<C *>(p) != nullptr;
|
||||
}
|
||||
|
||||
core_device_t *get_single_device(const pstring &classname, bool (*cc)(core_device_t *)) const;
|
||||
|
||||
template<class C>
|
||||
C *get_single_device(const pstring &classname) const
|
||||
{
|
||||
@ -1374,8 +1376,6 @@ namespace netlist
|
||||
this->run_state_manager().save_state_ptr(static_cast<void *>(&owner), module + pstring(".") + stname, plib::state_manager_t::dtype<C>(), count, state);
|
||||
}
|
||||
|
||||
core_device_t *get_single_device(const pstring &classname, bool (*cc)(core_device_t *)) const;
|
||||
|
||||
detail::net_t *find_net(const pstring &name) const;
|
||||
std::size_t find_net_id(const detail::net_t *net) const;
|
||||
|
||||
@ -1395,6 +1395,14 @@ namespace netlist
|
||||
return tmp;
|
||||
}
|
||||
|
||||
core_device_t *find_device(const pstring &name)
|
||||
{
|
||||
for (auto & d : m_devices)
|
||||
if (d.first == name)
|
||||
return d.second.get();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void add_dev(const pstring &name, pool_owned_ptr<T> &&dev)
|
||||
{
|
||||
@ -1601,7 +1609,7 @@ namespace netlist
|
||||
if (f != nullptr)
|
||||
f->read(reinterpret_cast<plib::pistream::value_type *>(&m_data[0]),1<<AW);
|
||||
else
|
||||
device.state().log().warning("Rom {1} not found", str());
|
||||
device.state().log().warning(MW_ROM_NOT_FOUND(str()));
|
||||
}
|
||||
|
||||
inline void logic_input_t::inactivate() NL_NOEXCEPT
|
||||
|
@ -27,104 +27,121 @@
|
||||
pstring m_m; \
|
||||
};
|
||||
|
||||
// nl_base.cpp
|
||||
namespace netlist
|
||||
{
|
||||
|
||||
PERRMSGV(MF_DUPLICATE_NAME_DEVICE_LIST, 1, "Error adding {1} to device list. Duplicate name.")
|
||||
PERRMSGV(MF_UNKNOWN_TYPE_FOR_OBJECT, 1, "Unknown type for object {1},")
|
||||
PERRMSGV(MF_NET_1_DUPLICATE_TERMINAL_2, 2, "net {1}: duplicate terminal {2}")
|
||||
PERRMSGV(MF_REMOVE_TERMINAL_1_FROM_NET_2, 2, "Can not remove terminal {1} from net {2}.")
|
||||
PERRMSGV(MF_UNKNOWN_PARAM_TYPE, 1, "Can not determine param_type for {1}")
|
||||
PERRMSGV(MF_ERROR_CONNECTING_1_TO_2, 2, "Error connecting {1} to {2}")
|
||||
PERRMSGV(MF_NO_SOLVER, 0, "No solver found for this netlist although analog elements are present")
|
||||
PERRMSGV(MF_HND_VAL_NOT_SUPPORTED, 1, "HINT_NO_DEACTIVATE value not supported: <{1}>")
|
||||
static constexpr const char * sHINT_NO_DEACTIVATE = ".HINT_NO_DEACTIVATE";
|
||||
static constexpr const char * sPowerDevRes = "_RVG";
|
||||
|
||||
// nl_factory.cpp
|
||||
// nl_base.cpp
|
||||
|
||||
PERRMSGV(MF_FACTORY_ALREADY_CONTAINS_1, 1, "factory already contains {1}")
|
||||
PERRMSGV(MF_CLASS_1_NOT_FOUND, 1, "Class <{1}> not found!")
|
||||
PERRMSGV(MF_DUPLICATE_NAME_DEVICE_LIST, 1, "Error adding {1} to device list. Duplicate name.")
|
||||
PERRMSGV(MF_UNKNOWN_TYPE_FOR_OBJECT, 1, "Unknown type for object {1},")
|
||||
PERRMSGV(MF_NET_1_DUPLICATE_TERMINAL_2, 2, "net {1}: duplicate terminal {2}")
|
||||
PERRMSGV(MF_REMOVE_TERMINAL_1_FROM_NET_2, 2, "Can not remove terminal {1} from net {2}.")
|
||||
PERRMSGV(MF_UNKNOWN_PARAM_TYPE, 1, "Can not determine param_type for {1}")
|
||||
PERRMSGV(MF_ERROR_CONNECTING_1_TO_2, 2, "Error connecting {1} to {2}")
|
||||
PERRMSGV(MF_NO_SOLVER, 0, "No solver found for this netlist although analog elements are present")
|
||||
PERRMSGV(MF_HND_VAL_NOT_SUPPORTED, 1, "HINT_NO_DEACTIVATE value not supported: <{1}>")
|
||||
PERRMSGV(MW_ROM_NOT_FOUND, 1, "Rom {1} not found")
|
||||
|
||||
// nld_opamps.cpp
|
||||
// nl_factory.cpp
|
||||
|
||||
PERRMSGV(MF_UNKNOWN_OPAMP_TYPE, 1, "Unknown opamp type: {1}")
|
||||
PERRMSGV(MF_FACTORY_ALREADY_CONTAINS_1, 1, "factory already contains {1}")
|
||||
PERRMSGV(MF_CLASS_1_NOT_FOUND, 1, "Class <{1}> not found!")
|
||||
|
||||
// nld_matrix_solver.cpp
|
||||
// nl_base.cpp
|
||||
|
||||
PERRMSGV(MF_UNHANDLED_ELEMENT_1_FOUND, 1, "setup_base:unhandled element <{1}> found")
|
||||
PERRMSGV(MF_FOUND_TERM_WITH_MISSING_OTHERNET, 1, "found term with missing othernet {1}")
|
||||
PERRMSGV(MF_MODEL_1_CAN_NOT_BE_CHANGED_AT_RUNTIME, 1, "Model {1} can not be changed at runtime")
|
||||
PERRMSGV(MF_MORE_THAN_ONE_1_DEVICE_FOUND, 1, "more than one {1} device found")
|
||||
|
||||
PERRMSGV(MW_NEWTON_LOOPS_EXCEEDED_ON_NET_1, 1, "NEWTON_LOOPS exceeded on net {1}... reschedule")
|
||||
// nl_parser.cpp
|
||||
|
||||
// nld_solver.cpp
|
||||
PERRMSGV(MF_UNEXPECTED_NETLIST_END, 0, "Unexpected NETLIST_END")
|
||||
PERRMSGV(MF_UNEXPECTED_NETLIST_START, 0, "Unexpected NETLIST_START")
|
||||
|
||||
PERRMSGV(MF_UNKNOWN_SOLVER_TYPE, 1, "Unknown solver type: {1}")
|
||||
PERRMSGV(MF_NETGROUP_SIZE_EXCEEDED_1, 1, "Encountered netgroup with > {1} nets")
|
||||
// nl_setup.cpp
|
||||
|
||||
PERRMSGV(MI_NO_SPECIFIC_SOLVER, 1, "No specific solver found for netlist of size {1}")
|
||||
PERRMSGV(MF_UNABLE_TO_PARSE_MODEL_1, 1, "Unable to parse model: {1}")
|
||||
PERRMSGV(MF_MODEL_ALREADY_EXISTS_1, 1, "Model already exists: {1}")
|
||||
PERRMSGV(MF_DEVICE_ALREADY_EXISTS_1, 1, "Device already exists: {1}")
|
||||
PERRMSGV(MF_ADDING_ALI1_TO_ALIAS_LIST, 1, "Error adding alias {1} to alias list")
|
||||
PERRMSGV(MF_DIP_PINS_MUST_BE_AN_EQUAL_NUMBER_OF_PINS_1, 1,"You must pass an equal number of pins to DIPPINS {1}")
|
||||
PERRMSGV(MF_UNKNOWN_OBJECT_TYPE_1, 1, "Unknown object type {1}")
|
||||
PERRMSGV(MF_INVALID_NUMBER_CONVERSION_1_2, 2, "Invalid number conversion {1} : {2}")
|
||||
PERRMSGV(MF_ADDING_PARAMETER_1_TO_PARAMETER_LIST,1, "Error adding parameter {1} to parameter list")
|
||||
PERRMSGV(MF_ADDING_1_2_TO_TERMINAL_LIST, 2, "Error adding {1} {2} to terminal list")
|
||||
PERRMSGV(MF_NET_C_NEEDS_AT_LEAST_2_TERMINAL, 0, "You must pass at least 2 terminals to NET_C")
|
||||
PERRMSGV(MF_FOUND_NO_OCCURRENCE_OF_1, 1, "Found no occurrence of {1}")
|
||||
PERRMSGV(MF_TERMINAL_1_2_NOT_FOUND, 2, "Alias {1} was resolved to be terminal {2}. Terminal {2} was not found.")
|
||||
PERRMSGV(MF_OBJECT_1_2_WRONG_TYPE, 2, "object {1}({2}) found but wrong type")
|
||||
PERRMSGV(MF_PARAMETER_1_2_NOT_FOUND, 2, "parameter {1}({2}) not found!")
|
||||
PERRMSGV(MF_CONNECTING_1_TO_2, 2, "Error connecting {1} to {2}")
|
||||
PERRMSGV(MF_MERGE_RAIL_NETS_1_AND_2, 2, "Trying to merge two rail nets: {1} and {2}")
|
||||
PERRMSGV(MF_OBJECT_INPUT_TYPE_1, 1, "Unable to determine input type of {1}")
|
||||
PERRMSGV(MF_OBJECT_OUTPUT_TYPE_1, 1, "Unable to determine output type of {1}")
|
||||
PERRMSGV(MF_INPUT_1_ALREADY_CONNECTED, 1, "Input {1} already connected")
|
||||
PERRMSGV(MF_LINK_TRIES_EXCEEDED, 1, "Error connecting, {1} tries exceeded")
|
||||
PERRMSGV(MF_MODEL_NOT_FOUND, 1, "Model {1} not found")
|
||||
PERRMSGV(MF_MODEL_ERROR_1, 1, "Model error {1}")
|
||||
PERRMSGV(MF_MODEL_ERROR_ON_PAIR_1, 1, "Model error on pair {1}")
|
||||
PERRMSGV(MF_MODEL_PARAMETERS_NOT_UPPERCASE_1_2, 2, "Model parameters should be uppercase:{1} {2}")
|
||||
PERRMSGV(MF_ENTITY_1_NOT_FOUND_IN_MODEL_2, 2, "Entity {1} not found in model {2}")
|
||||
PERRMSGV(MF_UNKNOWN_NUMBER_FACTOR_IN_1, 1, "Unknown number factor in: {1}")
|
||||
PERRMSGV(MF_NOT_FOUND_IN_SOURCE_COLLECTION, 1, "unable to find {1} in sources collection")
|
||||
|
||||
// nl_base.cpp
|
||||
PERRMSGV(MW_OVERWRITING_PARAM_1_OLD_2_NEW_3, 3, "Overwriting {1} old <{2}> new <{3}>")
|
||||
PERRMSGV(MW_CONNECTING_1_TO_ITSELF, 1, "Connecting {1} to itself. This may be right, though")
|
||||
PERRMSGV(MI_DUMMY_1_WITHOUT_CONNECTIONS, 1, "Found dummy terminal {1} without connections")
|
||||
PERRMSGV(MI_ANALOG_OUTPUT_1_WITHOUT_CONNECTIONS,1, "Found analog output {1} without connections")
|
||||
PERRMSGV(MI_LOGIC_OUTPUT_1_WITHOUT_CONNECTIONS, 1, "Found logic output {1} without connections")
|
||||
PERRMSGV(MW_LOGIC_INPUT_1_WITHOUT_CONNECTIONS, 1, "Found logic input {1} without connections")
|
||||
PERRMSGV(MW_TERMINAL_1_WITHOUT_CONNECTIONS, 1, "Found terminal {1} without connections")
|
||||
|
||||
PERRMSGV(MF_MODEL_1_CAN_NOT_BE_CHANGED_AT_RUNTIME, 1, "Model {1} can not be changed at runtime")
|
||||
PERRMSGV(MF_MORE_THAN_ONE_1_DEVICE_FOUND, 1, "more than one {1} device found")
|
||||
PERRMSGV(ME_TERMINAL_1_WITHOUT_NET, 1, "Found terminal {1} without a net")
|
||||
PERRMSGV(MF_TERMINALS_WITHOUT_NET, 0, "Found terminals without a net")
|
||||
|
||||
// nl_parser.cpp
|
||||
PERRMSGV(MI_REMOVE_DEVICE_1_CONNECTED_ONLY_TO_RAILS_2_3, 3, "Found device {1} connected only to railterminals {2}/{3}. Will be removed")
|
||||
PERRMSGV(MI_POWER_TERMINALS_1_CONNECTED_ANALOG_2_3, 3, "Power terminals {1} connected to analog nets {2}/{3}.")
|
||||
|
||||
PERRMSGV(MF_UNEXPECTED_NETLIST_END, 0, "Unexpected NETLIST_END")
|
||||
PERRMSGV(MF_UNEXPECTED_NETLIST_START, 0, "Unexpected NETLIST_START")
|
||||
PERRMSGV(MW_DATA_1_NOT_FOUND, 1, "unable to find data {1} in sources collection")
|
||||
|
||||
// nl_setup.cpp
|
||||
PERRMSGV(MW_DEVICE_NOT_FOUND_FOR_HINT, 1, "Device not found for hint {1}")
|
||||
PERRMSGV(MW_UNKNOWN_PARAMETER, 1, "Unknown parameter {1}")
|
||||
|
||||
//PERRMSG(MF_1_CLASS_1_NOT_FOUND ,"Class {1} not found!")
|
||||
PERRMSGV(MF_UNABLE_TO_PARSE_MODEL_1, 1, "Unable to parse model: {1}")
|
||||
PERRMSGV(MF_MODEL_ALREADY_EXISTS_1, 1, "Model already exists: {1}")
|
||||
PERRMSGV(MF_DEVICE_ALREADY_EXISTS_1, 1, "Device already exists: {1}")
|
||||
PERRMSGV(MF_ADDING_ALI1_TO_ALIAS_LIST, 1, "Error adding alias {1} to alias list")
|
||||
PERRMSGV(MF_DIP_PINS_MUST_BE_AN_EQUAL_NUMBER_OF_PINS_1, 1,"You must pass an equal number of pins to DIPPINS {1}")
|
||||
PERRMSGV(MF_UNKNOWN_OBJECT_TYPE_1, 1, "Unknown object type {1}")
|
||||
PERRMSGV(MF_INVALID_NUMBER_CONVERSION_1_2, 2, "Invalid number conversion {1} : {2}")
|
||||
PERRMSGV(MF_ADDING_PARAMETER_1_TO_PARAMETER_LIST,1, "Error adding parameter {1} to parameter list")
|
||||
PERRMSGV(MF_ADDING_1_2_TO_TERMINAL_LIST, 2, "Error adding {1} {2} to terminal list")
|
||||
PERRMSGV(MF_NET_C_NEEDS_AT_LEAST_2_TERMINAL, 0, "You must pass at least 2 terminals to NET_C")
|
||||
PERRMSGV(MF_FOUND_NO_OCCURRENCE_OF_1, 1, "Found no occurrence of {1}")
|
||||
PERRMSGV(MF_TERMINAL_1_2_NOT_FOUND, 2, "Alias {1} was resolved to be terminal {2}. Terminal {2} was not found.")
|
||||
PERRMSGV(MF_OBJECT_1_2_WRONG_TYPE, 2, "object {1}({2}) found but wrong type")
|
||||
PERRMSGV(MF_PARAMETER_1_2_NOT_FOUND, 2, "parameter {1}({2}) not found!")
|
||||
PERRMSGV(MF_CONNECTING_1_TO_2, 2, "Error connecting {1} to {2}")
|
||||
PERRMSGV(MF_MERGE_RAIL_NETS_1_AND_2, 2, "Trying to merge two rail nets: {1} and {2}")
|
||||
PERRMSGV(MF_OBJECT_INPUT_TYPE_1, 1, "Unable to determine input type of {1}")
|
||||
PERRMSGV(MF_OBJECT_OUTPUT_TYPE_1, 1, "Unable to determine output type of {1}")
|
||||
PERRMSGV(MF_INPUT_1_ALREADY_CONNECTED, 1, "Input {1} already connected")
|
||||
PERRMSGV(MF_LINK_TRIES_EXCEEDED, 1, "Error connecting, {1} tries exceeded")
|
||||
PERRMSGV(MF_MODEL_NOT_FOUND, 1, "Model {1} not found")
|
||||
PERRMSGV(MF_MODEL_ERROR_1, 1, "Model error {1}")
|
||||
PERRMSGV(MF_MODEL_ERROR_ON_PAIR_1, 1, "Model error on pair {1}")
|
||||
PERRMSGV(MF_MODEL_PARAMETERS_NOT_UPPERCASE_1_2, 2, "Model parameters should be uppercase:{1} {2}")
|
||||
PERRMSGV(MF_ENTITY_1_NOT_FOUND_IN_MODEL_2, 2, "Entity {1} not found in model {2}")
|
||||
PERRMSGV(MF_UNKNOWN_NUMBER_FACTOR_IN_1, 1, "Unknown number factor in: {1}")
|
||||
PERRMSGV(MF_NOT_FOUND_IN_SOURCE_COLLECTION, 1, "unable to find {1} in sources collection")
|
||||
// nlid_proxy.cpp
|
||||
|
||||
PERRMSGV(MW_OVERWRITING_PARAM_1_OLD_2_NEW_3, 3, "Overwriting {1} old <{2}> new <{3}>")
|
||||
PERRMSGV(MW_CONNECTING_1_TO_ITSELF, 1, "Connecting {1} to itself. This may be right, though")
|
||||
PERRMSGV(MI_DUMMY_1_WITHOUT_CONNECTIONS, 1, "Found dummy terminal {1} without connections")
|
||||
PERRMSGV(MI_ANALOG_OUTPUT_1_WITHOUT_CONNECTIONS,1, "Found analog output {1} without connections")
|
||||
PERRMSGV(MI_LOGIC_OUTPUT_1_WITHOUT_CONNECTIONS, 1, "Found logic output {1} without connections")
|
||||
PERRMSGV(MW_LOGIC_INPUT_1_WITHOUT_CONNECTIONS, 1, "Found logic input {1} without connections")
|
||||
PERRMSGV(MW_TERMINAL_1_WITHOUT_CONNECTIONS, 1, "Found terminal {1} without connections")
|
||||
PERRMSGV(MI_NO_POWER_TERMINALS_ON_DEVICE_1, 1, "D/A Proxy: Found no valid combination of power terminals on device {1}")
|
||||
PERRMSGV(MI_MULTIPLE_POWER_TERMINALS_ON_DEVICE, 5, "D/A Proxy: Found multiple power terminals on device {1}: {2} {3} {4} {5}")
|
||||
|
||||
PERRMSGV(ME_TERMINAL_1_WITHOUT_NET, 1, "Found terminal {1} without a net")
|
||||
PERRMSGV(MF_TERMINALS_WITHOUT_NET, 0, "Found terminals without a net")
|
||||
// nld_matrix_solver.cpp
|
||||
|
||||
PERRMSGV(MI_REMOVE_DEVICE_1_CONNECTED_ONLY_TO_RAILS_2_3, 3, "Found device {1} connected only to railterminals {2}/{3}. Will be removed")
|
||||
PERRMSGV(MF_UNHANDLED_ELEMENT_1_FOUND, 1, "setup_base:unhandled element <{1}> found")
|
||||
PERRMSGV(MF_FOUND_TERM_WITH_MISSING_OTHERNET, 1, "found term with missing othernet {1}")
|
||||
|
||||
PERRMSGV(MW_DATA_1_NOT_FOUND, 1, "unable to find data {1} in sources collection")
|
||||
PERRMSGV(MW_NEWTON_LOOPS_EXCEEDED_ON_NET_1, 1, "NEWTON_LOOPS exceeded on net {1}... reschedule")
|
||||
|
||||
// nld_mm5837.cpp
|
||||
// nld_solver.cpp
|
||||
|
||||
PERRMSGV(MW_FREQUENCY_OUTSIDE_OF_SPECS_1, 1, "MM5837: Frequency outside of specs: {1}")
|
||||
PERRMSGV(MF_UNKNOWN_SOLVER_TYPE, 1, "Unknown solver type: {1}")
|
||||
PERRMSGV(MF_NETGROUP_SIZE_EXCEEDED_1, 1, "Encountered netgroup with > {1} nets")
|
||||
|
||||
// nlid_proxy.cpp
|
||||
PERRMSGV(MI_NO_SPECIFIC_SOLVER, 1, "No specific solver found for netlist of size {1}")
|
||||
|
||||
PERRMSGV(MI_NO_POWER_TERMINALS_ON_DEVICE_1, 1, "D/A Proxy: Found no valid combination of power terminals on device {1}")
|
||||
PERRMSGV(MI_MULTIPLE_POWER_TERMINALS_ON_DEVICE, 5, "D/A Proxy: Found multiple power terminals on device {1}: {2} {3} {4} {5}")
|
||||
// nld_mm5837.cpp
|
||||
|
||||
PERRMSGV(MW_FREQUENCY_OUTSIDE_OF_SPECS_1, 1, "MM5837: Frequency outside of specs: {1}")
|
||||
|
||||
// nld_opamps.cpp
|
||||
|
||||
PERRMSGV(MF_OPAMP_UNKNOWN_TYPE, 1, "Unknown opamp type: {1}")
|
||||
PERRMSGV(MW_OPAMP_FAIL_CONVERGENCE, 1, "Opamp <{1}> parameters fail convergence criteria")
|
||||
|
||||
// nld_mosfet.cpp
|
||||
|
||||
PERRMSGV(MW_MOSFET_THRESHOLD_VOLTAGE, 1, "Mosfet: Threshold voltage not specified for {1}")
|
||||
|
||||
}
|
||||
|
||||
|
||||
#endif /* NL_ERRSTR_H_ */
|
||||
|
@ -733,7 +733,6 @@ bool setup_t::connect(detail::core_terminal_t &t1_in, detail::core_terminal_t &t
|
||||
}
|
||||
else
|
||||
ret = false;
|
||||
//netlist().error("Connecting {1} to {2} not supported!\n", t1.name(), t2.name());
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -1097,12 +1096,15 @@ void setup_t::prepare_to_run()
|
||||
auto f = m_params.find(p.first);
|
||||
if (f == m_params.end())
|
||||
{
|
||||
if (plib::endsWith(p.first, pstring(".HINT_NO_DEACTIVATE")))
|
||||
if (plib::endsWith(p.first, sHINT_NO_DEACTIVATE))
|
||||
{
|
||||
// FIXME: get device name, check for device
|
||||
auto *dev = m_nlstate.find_device(plib::replace_all(p.first, sHINT_NO_DEACTIVATE, ""));
|
||||
if (dev == nullptr)
|
||||
log().warning(MW_DEVICE_NOT_FOUND_FOR_HINT(p.first));
|
||||
}
|
||||
else
|
||||
log().warning("Unknown parameter: {}", p.first);
|
||||
log().warning(MW_UNKNOWN_PARAMETER(p.first));
|
||||
}
|
||||
}
|
||||
|
||||
@ -1112,7 +1114,7 @@ void setup_t::prepare_to_run()
|
||||
{
|
||||
if (use_deactivate)
|
||||
{
|
||||
auto p = m_param_values.find(d.second->name() + ".HINT_NO_DEACTIVATE");
|
||||
auto p = m_param_values.find(d.second->name() + sHINT_NO_DEACTIVATE);
|
||||
if (p != m_param_values.end())
|
||||
{
|
||||
//FIXME: check for errors ...
|
||||
@ -1134,12 +1136,20 @@ void setup_t::prepare_to_run()
|
||||
{
|
||||
if (t->m_N.net().isRailNet() && t->m_P.net().isRailNet())
|
||||
{
|
||||
log().info(MI_REMOVE_DEVICE_1_CONNECTED_ONLY_TO_RAILS_2_3(
|
||||
t->name(), t->m_N.net().name(), t->m_P.net().name()));
|
||||
// We are not interested in power terminals - This is intended behaviour
|
||||
if (!plib::endsWith(t->name(), pstring(".") + sPowerDevRes))
|
||||
log().info(MI_REMOVE_DEVICE_1_CONNECTED_ONLY_TO_RAILS_2_3(
|
||||
t->name(), t->m_N.net().name(), t->m_P.net().name()));
|
||||
t->m_N.net().remove_terminal(t->m_N);
|
||||
t->m_P.net().remove_terminal(t->m_P);
|
||||
m_nlstate.remove_dev(t);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (plib::endsWith(t->name(), pstring(".") + sPowerDevRes))
|
||||
log().info(MI_POWER_TERMINALS_1_CONNECTED_ANALOG_2_3(
|
||||
t->name(), t->m_N.net().name(), t->m_P.net().name()));
|
||||
}
|
||||
}
|
||||
|
||||
log().verbose("initialize solver ...\n");
|
||||
|
@ -592,7 +592,6 @@ namespace devices
|
||||
}
|
||||
if (new_solver_timestep < m_params.m_min_timestep)
|
||||
{
|
||||
//log().warning("Dynamic timestep below min timestep. Consider decreasing MIN_TIMESTEP: {1} us", new_solver_timestep*1.0e6);
|
||||
new_solver_timestep = m_params.m_min_timestep;
|
||||
}
|
||||
}
|
||||
|
@ -190,11 +190,10 @@ namespace devices
|
||||
pstring symname = static_compile_name();
|
||||
m_proc.load(this->state().lib(), symname);
|
||||
if (m_proc.resolved())
|
||||
this->log().warning("External static solver {1} found ...", symname);
|
||||
this->log().info("External static solver {1} found ...", symname);
|
||||
else
|
||||
this->log().warning("External static solver {1} not found ...", symname);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
template <typename FT, int SIZE>
|
||||
|
@ -215,7 +215,6 @@ namespace devices
|
||||
if (resched)
|
||||
{
|
||||
this->m_iterative_fail++;
|
||||
//this->netlist().warning("Falling back to direct solver .. Consider increasing RESCHED_LOOPS");
|
||||
return matrix_solver_direct_t<FT, SIZE>::solve_non_dynamic(newton_raphson);
|
||||
}
|
||||
|
||||
|
@ -458,12 +458,9 @@ void m62_audio_device::device_add_mconfig(machine_config &config)
|
||||
NETLIST_STREAM_INPUT(config, "snd_nl:cin4", 4, "R_AY45L_B.R");
|
||||
NETLIST_STREAM_INPUT(config, "snd_nl:cin5", 5, "R_AY45L_C.R");
|
||||
|
||||
|
||||
NETLIST_STREAM_INPUT(config, "snd_nl:cin6", 6, "I_MSM2K0.IN").set_mult_offset(5.0/65535.0, 2.5);
|
||||
NETLIST_STREAM_INPUT(config, "snd_nl:cin7", 7, "I_MSM3K0.IN").set_mult_offset(5.0/65535.0, 2.5);
|
||||
|
||||
//MCFG_NETLIST_STREAM_OUTPUT("snd_nl", 0, "RV1.1")
|
||||
//MCFG_NETLIST_ANALOG_MULT_OFFSET(30000.0, -35000.0)
|
||||
NETLIST_STREAM_OUTPUT(config, "snd_nl:cout0", 0, "R26.1").set_mult_offset(30000.0 * 10.0, 0.0);
|
||||
}
|
||||
|
||||
|
@ -1735,65 +1735,65 @@ CIRCUIT_LAYOUT( breakout )
|
||||
|
||||
#if 1
|
||||
// 163% -- manually optimized
|
||||
HINT(B6.s3, NO_DEACTIVATE)
|
||||
HINT(C4.s3, NO_DEACTIVATE)
|
||||
HINT(C4.s4, NO_DEACTIVATE)
|
||||
HINT(C5.s3, NO_DEACTIVATE)
|
||||
HINT(C5.s4, NO_DEACTIVATE)
|
||||
HINT(E2.s2, NO_DEACTIVATE)
|
||||
HINT(E3.s2, NO_DEACTIVATE)
|
||||
HINT(E5.s4, NO_DEACTIVATE)
|
||||
HINT(E9.s6, NO_DEACTIVATE)
|
||||
HINT(H2.s1, NO_DEACTIVATE)
|
||||
HINT(H3.s1, NO_DEACTIVATE)
|
||||
HINT(J3.s4, NO_DEACTIVATE)
|
||||
HINT(B6.C, NO_DEACTIVATE)
|
||||
HINT(C4.C, NO_DEACTIVATE)
|
||||
HINT(C4.D, NO_DEACTIVATE)
|
||||
HINT(C5.C, NO_DEACTIVATE)
|
||||
HINT(C5.D, NO_DEACTIVATE)
|
||||
HINT(E2.B, NO_DEACTIVATE)
|
||||
HINT(E3.B, NO_DEACTIVATE)
|
||||
HINT(E5.D, NO_DEACTIVATE)
|
||||
HINT(E9.F, NO_DEACTIVATE)
|
||||
HINT(H2.A, NO_DEACTIVATE)
|
||||
HINT(H3.A, NO_DEACTIVATE)
|
||||
HINT(J3.D, NO_DEACTIVATE)
|
||||
HINT(J5, NO_DEACTIVATE)
|
||||
HINT(J6.sub, NO_DEACTIVATE)
|
||||
HINT(J8.1, NO_DEACTIVATE)
|
||||
HINT(J8.3, NO_DEACTIVATE)
|
||||
HINT(K4.s4, NO_DEACTIVATE)
|
||||
HINT(M3.s2, NO_DEACTIVATE)
|
||||
HINT(M3.s4, NO_DEACTIVATE)
|
||||
HINT(M4.s2, NO_DEACTIVATE)
|
||||
HINT(M6.sub, NO_DEACTIVATE)
|
||||
HINT(M8.s1, NO_DEACTIVATE)
|
||||
HINT(N7.s3, NO_DEACTIVATE)
|
||||
HINT(J6, NO_DEACTIVATE)
|
||||
HINT(J8.A, NO_DEACTIVATE)
|
||||
HINT(J8.C, NO_DEACTIVATE)
|
||||
HINT(K4.D, NO_DEACTIVATE)
|
||||
HINT(M3.B, NO_DEACTIVATE)
|
||||
HINT(M3.D, NO_DEACTIVATE)
|
||||
HINT(M4.B, NO_DEACTIVATE)
|
||||
HINT(M6, NO_DEACTIVATE)
|
||||
HINT(M8.A, NO_DEACTIVATE)
|
||||
HINT(N7.C, NO_DEACTIVATE)
|
||||
|
||||
#else
|
||||
// 167% hints provided by log output - manually optimized
|
||||
HINT(M4.s2, NO_DEACTIVATE) // 29.001761 197676 6816
|
||||
HINT(M3.s3, NO_DEACTIVATE) // inf 129571 0
|
||||
HINT(N7.s3, NO_DEACTIVATE) // inf 7850387 0 xx
|
||||
HINT(M3.s2, NO_DEACTIVATE) // 23.234535 395870 17038
|
||||
HINT(M3.s1, NO_DEACTIVATE) // 14.500880 197676 13632
|
||||
HINT(L7.s3, NO_DEACTIVATE) // 122672.000000 122672 1
|
||||
HINT(L7.s2, NO_DEACTIVATE) // 122672.000000 122672 1
|
||||
HINT(K7.s4, NO_DEACTIVATE) // 122673.000000 122673 1
|
||||
HINT(K7.s3, NO_DEACTIVATE) // 122672.000000 122672 1
|
||||
HINT(K7.s2, NO_DEACTIVATE) // 122673.000000 122673 1
|
||||
HINT(K7.s1, NO_DEACTIVATE) // 122673.000000 122673 1
|
||||
HINT(K4.s4, NO_DEACTIVATE) // 1438.774735 4202661 2921 xx
|
||||
HINT(K4.s2, NO_DEACTIVATE) // 3.939380 847790 215209 xx
|
||||
HINT(E2.s2, NO_DEACTIVATE) // 108.050000 315506 2920 xx
|
||||
HINT(L7.s4, NO_DEACTIVATE) // 122672.000000 122672 1
|
||||
HINT(E9.s6, NO_DEACTIVATE) // inf 129571 0
|
||||
//HINT(J2.s6, NO_DEACTIVATE) // 493.408951 959187 1944
|
||||
HINT(C5.s3, NO_DEACTIVATE) // inf 195514 0
|
||||
HINT(M3.s4, NO_DEACTIVATE) // 27.744898 418726 15092 xx
|
||||
HINT(J8.s1, NO_DEACTIVATE) // 40890.000000 122670 3
|
||||
HINT(E3.s2, NO_DEACTIVATE) // 203581.000000 203581 1
|
||||
HINT(M9.s4, NO_DEACTIVATE) // inf 323268 0
|
||||
//HINT(L4.s2, NO_DEACTIVATE) // 7.290053 1192536 163584
|
||||
HINT(J3.s4, NO_DEACTIVATE) // 393.639951 957726 2433 xx
|
||||
HINT(L7.s1, NO_DEACTIVATE) // inf 122672 0
|
||||
HINT(F2.s1, NO_DEACTIVATE) // 286289.000000 286289 1
|
||||
HINT(M8.s1, NO_DEACTIVATE) // 129571.000000 129571 1
|
||||
HINT(J7.s2, NO_DEACTIVATE) // inf 122672 0
|
||||
//HINT(H2.s1, NO_DEACTIVATE) // 393.839704 958212 2433
|
||||
HINT(H3.s1, NO_DEACTIVATE) // 3.932473 850122 216180 xx
|
||||
HINT(J2.s5, NO_DEACTIVATE) // 26.140344 203581 7788
|
||||
HINT(J7.s1, NO_DEACTIVATE) // inf 122672 0
|
||||
HINT(J8.s3, NO_DEACTIVATE) // 40890.000000 122670 3
|
||||
HINT(M4.B, NO_DEACTIVATE) // 29.001761 197676 6816
|
||||
HINT(M3.C, NO_DEACTIVATE) // inf 129571 0
|
||||
HINT(N7.C, NO_DEACTIVATE) // inf 7850387 0 xx
|
||||
HINT(M3.B, NO_DEACTIVATE) // 23.234535 395870 17038
|
||||
HINT(M3.A, NO_DEACTIVATE) // 14.500880 197676 13632
|
||||
HINT(L7.C, NO_DEACTIVATE) // 122672.000000 122672 1
|
||||
HINT(L7.B, NO_DEACTIVATE) // 122672.000000 122672 1
|
||||
HINT(K7.D, NO_DEACTIVATE) // 122673.000000 122673 1
|
||||
HINT(K7.C, NO_DEACTIVATE) // 122672.000000 122672 1
|
||||
HINT(K7.B, NO_DEACTIVATE) // 122673.000000 122673 1
|
||||
HINT(K7.A, NO_DEACTIVATE) // 122673.000000 122673 1
|
||||
HINT(K4.D, NO_DEACTIVATE) // 1438.774735 4202661 2921 xx
|
||||
HINT(K4.B, NO_DEACTIVATE) // 3.939380 847790 215209 xx
|
||||
HINT(E2.B, NO_DEACTIVATE) // 108.050000 315506 2920 xx
|
||||
HINT(L7.D, NO_DEACTIVATE) // 122672.000000 122672 1
|
||||
HINT(E9.F, NO_DEACTIVATE) // inf 129571 0
|
||||
//HINT(J2.F, NO_DEACTIVATE) // 493.408951 959187 1944
|
||||
HINT(C5.C, NO_DEACTIVATE) // inf 195514 0
|
||||
HINT(M3.D, NO_DEACTIVATE) // 27.744898 418726 15092 xx
|
||||
HINT(J8.A, NO_DEACTIVATE) // 40890.000000 122670 3
|
||||
HINT(E3.B, NO_DEACTIVATE) // 203581.000000 203581 1
|
||||
HINT(M9.D, NO_DEACTIVATE) // inf 323268 0
|
||||
//HINT(L4.B, NO_DEACTIVATE) // 7.290053 1192536 163584
|
||||
HINT(J3.D, NO_DEACTIVATE) // 393.639951 957726 2433 xx
|
||||
HINT(L7.A, NO_DEACTIVATE) // inf 122672 0
|
||||
HINT(F2.A, NO_DEACTIVATE) // 286289.000000 286289 1
|
||||
HINT(M8.A, NO_DEACTIVATE) // 129571.000000 129571 1
|
||||
HINT(J7.B, NO_DEACTIVATE) // inf 122672 0
|
||||
//HINT(H2.A, NO_DEACTIVATE) // 393.839704 958212 2433
|
||||
HINT(H3.A, NO_DEACTIVATE) // 3.932473 850122 216180 xx
|
||||
HINT(J2.E, NO_DEACTIVATE) // 26.140344 203581 7788
|
||||
HINT(J7.A, NO_DEACTIVATE) // inf 122672 0
|
||||
HINT(J8.C, NO_DEACTIVATE) // 40890.000000 122670 3
|
||||
#endif
|
||||
|
||||
CIRCUIT_LAYOUT_END
|
||||
|
@ -575,32 +575,31 @@ NETLIST_START(pong_fast)
|
||||
HINT(clk, NO_DEACTIVATE)
|
||||
HINT(ic_e1d, NO_DEACTIVATE)
|
||||
HINT(ic_e1c, NO_DEACTIVATE)
|
||||
HINT(ic_f1.A, NO_DEACTIVATE)
|
||||
HINT(ic_f1.D, NO_DEACTIVATE)
|
||||
HINT(ic_f1, NO_DEACTIVATE)
|
||||
HINT(ic_g1d, NO_DEACTIVATE)
|
||||
HINT(ic_h1a, NO_DEACTIVATE)
|
||||
HINT(ic_h1d, NO_DEACTIVATE)
|
||||
HINT(ic_h3b.sub, NO_DEACTIVATE)
|
||||
HINT(ic_g6b.sub, NO_DEACTIVATE)
|
||||
HINT(ic_c2a.sub, NO_DEACTIVATE)
|
||||
HINT(ic_h3b, NO_DEACTIVATE)
|
||||
HINT(ic_g6b, NO_DEACTIVATE)
|
||||
HINT(ic_c2a, NO_DEACTIVATE)
|
||||
HINT(hit_sound, NO_DEACTIVATE)
|
||||
HINT(topbothitsound, NO_DEACTIVATE)
|
||||
HINT(ic_c9b, NO_DEACTIVATE)
|
||||
HINT(ic_b8.D, NO_DEACTIVATE)
|
||||
HINT(ic_b8, NO_DEACTIVATE)
|
||||
HINT(ic_b7a, NO_DEACTIVATE)
|
||||
HINT(ic_a7b, NO_DEACTIVATE)
|
||||
HINT(ic_c9a, NO_DEACTIVATE)
|
||||
HINT(ic_a8.D, NO_DEACTIVATE)
|
||||
HINT(ic_a8, NO_DEACTIVATE)
|
||||
HINT(ic_b7d, NO_DEACTIVATE)
|
||||
HINT(ic_a7a, NO_DEACTIVATE)
|
||||
HINT(ic_g1a, NO_DEACTIVATE)
|
||||
HINT(ic_c8a.sub, NO_DEACTIVATE)
|
||||
HINT(ic_c8b.sub, NO_DEACTIVATE)
|
||||
HINT(ic_c8a, NO_DEACTIVATE)
|
||||
HINT(ic_c8b, NO_DEACTIVATE)
|
||||
HINT(ic_d8b, NO_DEACTIVATE)
|
||||
HINT(ic_d6a.sub, NO_DEACTIVATE)
|
||||
HINT(ic_d6b.sub, NO_DEACTIVATE)
|
||||
HINT(ic_c6a.sub, NO_DEACTIVATE)
|
||||
HINT(ic_c6b.sub, NO_DEACTIVATE)
|
||||
HINT(ic_d6a, NO_DEACTIVATE)
|
||||
HINT(ic_d6b, NO_DEACTIVATE)
|
||||
HINT(ic_c6a, NO_DEACTIVATE)
|
||||
HINT(ic_c6b, NO_DEACTIVATE)
|
||||
HINT(ic_e5b, NO_DEACTIVATE)
|
||||
HINT(ic_e4c, NO_DEACTIVATE)
|
||||
HINT(ic_d4b, NO_DEACTIVATE)
|
||||
|
@ -78,7 +78,7 @@ NETLIST_START(rebound_schematics)
|
||||
PARAM(Solver.PARALLEL, 0) // Don't do parallel solvers
|
||||
PARAM(Solver.ACCURACY, 1e-9)
|
||||
PARAM(NETLIST.USE_DEACTIVATE, 1)
|
||||
HINT(F9.s2, NO_DEACTIVATE)
|
||||
HINT(F9.B, NO_DEACTIVATE)
|
||||
|
||||
ANALOG_INPUT(V5, 5)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user