mirror of
https://github.com/holub/mame
synced 2025-04-22 16:31:49 +03:00
Small object tree maintenance. (nw)
This commit is contained in:
parent
0bb61ddc43
commit
1dd58681aa
@ -230,17 +230,17 @@ private:
|
||||
class nld_a_to_d_proxy : public netlist_device_t
|
||||
{
|
||||
public:
|
||||
ATTR_COLD nld_a_to_d_proxy(netlist_input_t &in_proxied)
|
||||
ATTR_COLD nld_a_to_d_proxy(netlist_logic_input_t &in_proxied)
|
||||
: netlist_device_t()
|
||||
{
|
||||
nl_assert(in_proxied.family() == LOGIC);
|
||||
m_I.set_logic_family(in_proxied.logic_family());
|
||||
m_logic_family = in_proxied.logic_family();
|
||||
}
|
||||
|
||||
ATTR_COLD virtual ~nld_a_to_d_proxy() {}
|
||||
|
||||
netlist_analog_input_t m_I;
|
||||
netlist_ttl_output_t m_Q;
|
||||
netlist_logic_output_t m_Q;
|
||||
|
||||
protected:
|
||||
ATTR_COLD void start()
|
||||
@ -255,14 +255,15 @@ protected:
|
||||
|
||||
ATTR_HOT ATTR_ALIGN void update()
|
||||
{
|
||||
if (m_I.Q_Analog() > m_I.logic_family()->m_high_thresh_V)
|
||||
if (m_I.Q_Analog() > m_logic_family->m_high_thresh_V)
|
||||
OUTLOGIC(m_Q, 1, NLTIME_FROM_NS(1));
|
||||
else if (m_I.Q_Analog() < m_I.logic_family()->m_low_thresh_V)
|
||||
else if (m_I.Q_Analog() < m_logic_family->m_low_thresh_V)
|
||||
OUTLOGIC(m_Q, 0, NLTIME_FROM_NS(1));
|
||||
//else
|
||||
// OUTLOGIC(m_Q, m_Q.net().last_Q(), NLTIME_FROM_NS(1));
|
||||
}
|
||||
|
||||
private:
|
||||
const netlist_logic_family_desc_t *m_logic_family;
|
||||
};
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
@ -272,7 +273,7 @@ protected:
|
||||
class nld_base_d_to_a_proxy : public netlist_device_t
|
||||
{
|
||||
public:
|
||||
ATTR_COLD nld_base_d_to_a_proxy(netlist_output_t &out_proxied)
|
||||
ATTR_COLD nld_base_d_to_a_proxy(netlist_logic_output_t &out_proxied)
|
||||
: netlist_device_t()
|
||||
{
|
||||
nl_assert(out_proxied.family() == LOGIC);
|
||||
@ -282,8 +283,7 @@ public:
|
||||
ATTR_COLD virtual ~nld_base_d_to_a_proxy() {}
|
||||
|
||||
ATTR_COLD virtual netlist_core_terminal_t &out() = 0;
|
||||
|
||||
netlist_ttl_input_t m_I;
|
||||
ATTR_COLD virtual netlist_logic_input_t &in() { return m_I; }
|
||||
|
||||
protected:
|
||||
ATTR_COLD virtual void start()
|
||||
@ -297,6 +297,9 @@ protected:
|
||||
}
|
||||
|
||||
const netlist_logic_family_desc_t *m_logic_family;
|
||||
|
||||
netlist_ttl_input_t m_I;
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
@ -340,7 +343,7 @@ private:
|
||||
class nld_d_to_a_proxy : public nld_base_d_to_a_proxy
|
||||
{
|
||||
public:
|
||||
ATTR_COLD nld_d_to_a_proxy(netlist_output_t &out_proxied)
|
||||
ATTR_COLD nld_d_to_a_proxy(netlist_logic_output_t &out_proxied)
|
||||
: nld_base_d_to_a_proxy(out_proxied)
|
||||
, m_RV(TWOTERM)
|
||||
, m_last_state(-1)
|
||||
|
@ -453,19 +453,32 @@ ATTR_COLD void netlist_device_t::register_terminal(const pstring &name, netlist_
|
||||
m_terminals.add(port.name());
|
||||
}
|
||||
|
||||
ATTR_COLD void netlist_device_t::register_output(const pstring &name, netlist_output_t &port)
|
||||
ATTR_COLD void netlist_device_t::register_output(const pstring &name, netlist_logic_output_t &port)
|
||||
{
|
||||
port.set_logic_family(this->logic_family());
|
||||
setup().register_object(*this, name, port);
|
||||
}
|
||||
|
||||
ATTR_COLD void netlist_device_t::register_input(const pstring &name, netlist_input_t &inp)
|
||||
ATTR_COLD void netlist_device_t::register_output(const pstring &name, netlist_output_t &port)
|
||||
{
|
||||
//port.set_logic_family(this->logic_family());
|
||||
setup().register_object(*this, name, port);
|
||||
}
|
||||
|
||||
ATTR_COLD void netlist_device_t::register_input(const pstring &name, netlist_logic_input_t &inp)
|
||||
{
|
||||
inp.set_logic_family(this->logic_family());
|
||||
setup().register_object(*this, name, inp);
|
||||
m_terminals.add(inp.name());
|
||||
}
|
||||
|
||||
ATTR_COLD void netlist_device_t::register_input(const pstring &name, netlist_input_t &inp)
|
||||
{
|
||||
//inp.set_logic_family(this->logic_family());
|
||||
setup().register_object(*this, name, inp);
|
||||
m_terminals.add(inp.name());
|
||||
}
|
||||
|
||||
ATTR_COLD void netlist_device_t::connect(netlist_core_terminal_t &t1, netlist_core_terminal_t &t2)
|
||||
{
|
||||
setup().connect(t1, t2);
|
||||
@ -788,7 +801,6 @@ ATTR_COLD netlist_core_terminal_t::netlist_core_terminal_t(const type_t atype, c
|
||||
, plinkedlist_element_t<netlist_core_terminal_t>()
|
||||
, m_net(NULL)
|
||||
, m_state(STATE_NONEX)
|
||||
, m_logic_family(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
@ -873,7 +885,7 @@ ATTR_COLD void netlist_output_t::init_object(netlist_core_device_t &dev, const p
|
||||
// ----------------------------------------------------------------------------------------
|
||||
|
||||
ATTR_COLD netlist_logic_output_t::netlist_logic_output_t()
|
||||
: netlist_output_t(OUTPUT, LOGIC), m_proxy(NULL)
|
||||
: netlist_output_t(OUTPUT, LOGIC), m_proxy(NULL), m_logic_family(NULL)
|
||||
{
|
||||
this->set_net(m_my_net);
|
||||
}
|
||||
|
@ -457,9 +457,6 @@ public:
|
||||
m_state = astate;
|
||||
}
|
||||
|
||||
ATTR_HOT inline const netlist_logic_family_desc_t *logic_family() { return m_logic_family; }
|
||||
ATTR_COLD void set_logic_family(const netlist_logic_family_desc_t *fam) { m_logic_family = fam; }
|
||||
|
||||
protected:
|
||||
ATTR_COLD virtual void save_register()
|
||||
{
|
||||
@ -470,7 +467,6 @@ protected:
|
||||
private:
|
||||
netlist_net_t * RESTRICT m_net;
|
||||
state_e m_state;
|
||||
const netlist_logic_family_desc_t *m_logic_family;
|
||||
};
|
||||
|
||||
NETLIST_SAVE_TYPE(netlist_core_terminal_t::state_e, DT_INT);
|
||||
@ -564,7 +560,7 @@ class netlist_logic_input_t : public netlist_input_t
|
||||
{
|
||||
public:
|
||||
ATTR_COLD netlist_logic_input_t()
|
||||
: netlist_input_t(INPUT, LOGIC)
|
||||
: netlist_input_t(INPUT, LOGIC), m_logic_family(NULL)
|
||||
{
|
||||
}
|
||||
|
||||
@ -574,6 +570,11 @@ public:
|
||||
ATTR_HOT inline void activate_hl();
|
||||
ATTR_HOT inline void activate_lh();
|
||||
|
||||
ATTR_HOT inline const netlist_logic_family_desc_t *logic_family() { return m_logic_family; }
|
||||
ATTR_COLD void set_logic_family(const netlist_logic_family_desc_t *fam) { m_logic_family = fam; }
|
||||
|
||||
private:
|
||||
const netlist_logic_family_desc_t *m_logic_family;
|
||||
};
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
@ -813,18 +814,22 @@ public:
|
||||
|
||||
ATTR_COLD void initial(const netlist_sig_t val);
|
||||
|
||||
ATTR_COLD bool has_proxy() const { return (m_proxy != NULL); }
|
||||
ATTR_COLD nld_base_d_to_a_proxy *get_proxy() const { return m_proxy; }
|
||||
ATTR_COLD void set_proxy(nld_base_d_to_a_proxy *proxy) { m_proxy = proxy; }
|
||||
|
||||
ATTR_HOT inline void set_Q(const netlist_sig_t newQ, const netlist_time &delay)
|
||||
{
|
||||
net().as_logic().set_Q(newQ, delay);
|
||||
}
|
||||
|
||||
ATTR_COLD bool has_proxy() const { return (m_proxy != NULL); }
|
||||
ATTR_COLD nld_base_d_to_a_proxy *get_proxy() const { return m_proxy; }
|
||||
ATTR_COLD void set_proxy(nld_base_d_to_a_proxy *proxy) { m_proxy = proxy; }
|
||||
|
||||
ATTR_HOT inline const netlist_logic_family_desc_t *logic_family() { return m_logic_family; }
|
||||
ATTR_COLD void set_logic_family(const netlist_logic_family_desc_t *fam) { m_logic_family = fam; }
|
||||
|
||||
private:
|
||||
netlist_logic_net_t m_my_net;
|
||||
nld_base_d_to_a_proxy *m_proxy;
|
||||
const netlist_logic_family_desc_t *m_logic_family;
|
||||
};
|
||||
|
||||
class netlist_ttl_output_t : public netlist_logic_output_t
|
||||
@ -1067,7 +1072,9 @@ public:
|
||||
ATTR_COLD void register_subalias(const pstring &name, netlist_core_terminal_t &term);
|
||||
ATTR_COLD void register_terminal(const pstring &name, netlist_terminal_t &port);
|
||||
ATTR_COLD void register_output(const pstring &name, netlist_output_t &out);
|
||||
ATTR_COLD void register_output(const pstring &name, netlist_logic_output_t &out);
|
||||
ATTR_COLD void register_input(const pstring &name, netlist_input_t &in);
|
||||
ATTR_COLD void register_input(const pstring &name, netlist_logic_input_t &in);
|
||||
|
||||
ATTR_COLD void connect(netlist_core_terminal_t &t1, netlist_core_terminal_t &t2);
|
||||
|
||||
|
@ -399,7 +399,7 @@ nld_base_d_to_a_proxy *netlist_setup_t::get_d_a_proxy(netlist_output_t &out)
|
||||
if (proxy == NULL)
|
||||
{
|
||||
// create a new one ...
|
||||
proxy = out.logic_family()->create_d_a_proxy(out_cast);
|
||||
proxy = out_cast.logic_family()->create_d_a_proxy(out_cast);
|
||||
pstring x = pstring::sprintf("proxy_da_%s_%d", out.name().cstr(), m_proxy_cnt);
|
||||
m_proxy_cnt++;
|
||||
|
||||
@ -417,7 +417,7 @@ nld_base_d_to_a_proxy *netlist_setup_t::get_d_a_proxy(netlist_output_t &out)
|
||||
}
|
||||
out.net().m_core_terms.clear(); // clear the list
|
||||
#endif
|
||||
out.net().register_con(proxy->m_I);
|
||||
out.net().register_con(proxy->in());
|
||||
out_cast.set_proxy(proxy);
|
||||
|
||||
}
|
||||
@ -428,7 +428,8 @@ void netlist_setup_t::connect_input_output(netlist_input_t &in, netlist_output_t
|
||||
{
|
||||
if (out.isFamily(netlist_terminal_t::ANALOG) && in.isFamily(netlist_terminal_t::LOGIC))
|
||||
{
|
||||
nld_a_to_d_proxy *proxy = nl_alloc(nld_a_to_d_proxy, in);
|
||||
netlist_logic_input_t &incast = dynamic_cast<netlist_logic_input_t &>(in);
|
||||
nld_a_to_d_proxy *proxy = nl_alloc(nld_a_to_d_proxy, incast);
|
||||
pstring x = pstring::sprintf("proxy_ad_%s_%d", in.name().cstr(), m_proxy_cnt);
|
||||
m_proxy_cnt++;
|
||||
|
||||
@ -463,8 +464,9 @@ void netlist_setup_t::connect_terminal_input(netlist_terminal_t &term, netlist_i
|
||||
}
|
||||
else if (inp.isFamily(netlist_terminal_t::LOGIC))
|
||||
{
|
||||
netlist_logic_input_t &incast = dynamic_cast<netlist_logic_input_t &>(inp);
|
||||
NL_VERBOSE_OUT(("connect_terminal_input: connecting proxy\n"));
|
||||
nld_a_to_d_proxy *proxy = nl_alloc(nld_a_to_d_proxy, inp);
|
||||
nld_a_to_d_proxy *proxy = nl_alloc(nld_a_to_d_proxy, incast);
|
||||
pstring x = pstring::sprintf("proxy_ad_%s_%d", inp.name().cstr(), m_proxy_cnt);
|
||||
m_proxy_cnt++;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user