Previous 199869 Revisions Next

r26366 Friday 22nd November, 2013 at 19:19:43 UTC by Couriersud
Netlist: Checkpoint. Every object has a name
[src/emu/netlist]nl_base.c nl_base.h nl_setup.c
[src/emu/netlist/devices]net_lib.c nld_system.h
[src/mame/drivers]pong.c

trunk/src/emu/netlist/devices/nld_system.h
r26365r26366
4949#define NETDEV_D(_name)                                                             \
5050        NET_REGISTER_DEV(D, _name)
5151
52// .model 1N914 D(Is=2.52n Rs=.568 N=1.752 Cjo=4p M=.4 tt=20n Iave=200m Vpk=75 mfg=OnSemi type=silicon)
53
5254// ----------------------------------------------------------------------------------------
5355// netdev_*_const
5456// ----------------------------------------------------------------------------------------
trunk/src/emu/netlist/devices/net_lib.c
r26365r26366
194194   register_param("VS", m_VS, 5.0);
195195   register_param("VL", m_VL, 0.0 *5.0);
196196
197   m_THRESHOLD_OUT.init_terminal(*this);
197   m_THRESHOLD_OUT.init_terminal(*this, "THRESHOLD");
198198   register_link_internal(m_THRESHOLD, m_THRESHOLD_OUT, netlist_input_t::STATE_INP_ACTIVE);
199199
200200   m_Q.initial(5.0 * 0.4);
trunk/src/emu/netlist/nl_base.c
r26365r26366
153153
154154ATTR_COLD void netlist_core_device_t::init(netlist_setup_t &setup, const astring &name)
155155{
156    init_object(setup.netlist());
157   m_name = name;
156    init_object(setup.netlist(), name);
158157
159158#if USE_DELEGATES
160159#if USE_PMFDELEGATES
r26365r26366
213212
214213ATTR_COLD void netlist_device_t::register_sub(netlist_core_device_t &dev, const astring &name)
215214{
216   dev.init(*m_setup, name);
215   dev.init(*m_setup, this->name() + "." + name);
217216}
218217
219218ATTR_COLD void netlist_device_t::register_output(netlist_core_device_t &dev, const astring &name, netlist_output_t &port)
r26365r26366
242241   register_input(*this, name, inp, type);
243242}
244243
244// FIXME: Revise internal links ...
245245ATTR_COLD void netlist_device_t::register_link_internal(netlist_core_device_t &dev, netlist_input_t &in, netlist_output_t &out, netlist_input_t::state_e aState)
246246{
247    in.init_terminal(dev, aState);
247    in.init_terminal(dev, "internal input", aState);
248248    // ensure we are not yet initialized ...
249249    if (!out.net().isRailNet())
250        out.init_terminal(dev);
250        out.init_terminal(dev, "internal output");
251251   //if (in.state() != net_input_t::INP_STATE_PASSIVE)
252252      out.net().register_con(in);
253253}
r26365r26366
377377// netlist_terminal_t
378378// ----------------------------------------------------------------------------------------
379379
380ATTR_COLD void netlist_terminal_t::init_terminal(netlist_core_device_t &dev, const state_e astate)
380ATTR_COLD void netlist_terminal_t::init_terminal(netlist_core_device_t &dev, const astring &aname, const state_e astate)
381381{
382382   m_netdev = &dev;
383383   set_state(astate);
384   init_object(dev.netlist());
384   init_object(dev.netlist(), aname);
385385}
386386
387387// ----------------------------------------------------------------------------------------
r26365r26366
402402    this->set_net(m_my_net);
403403}
404404
405ATTR_COLD void netlist_output_t::init_terminal(netlist_core_device_t &dev)
405ATTR_COLD void netlist_output_t::init_terminal(netlist_core_device_t &dev, const astring &aname)
406406{
407    netlist_terminal_t::init_terminal(dev, STATE_OUT);
408    net().init_object(dev.netlist());
407    netlist_terminal_t::init_terminal(dev, aname, STATE_OUT);
408    net().init_object(dev.netlist(), aname);
409409    net().register_railterminal(*this);
410410}
411411
trunk/src/emu/netlist/nl_base.h
r26365r26366
245245    };
246246
247247   ATTR_COLD netlist_object_t(const type_t atype, const family_t afamily)
248      : m_objtype(atype)
248       : m_name(NULL)
249      , m_objtype(atype)
249250        , m_family(afamily)
250251        , m_netlist(NULL)
251252        {}
252253
253   virtual ~netlist_object_t() {}
254   virtual ~netlist_object_t()
255   {
256       delete m_name;
257   }
254258
255    ATTR_COLD void init_object(netlist_base_t &nl)
259    ATTR_COLD void init_object(netlist_base_t &nl, const astring &aname)
256260    {
257261        m_netlist = &nl;
262        m_name = new astring(aname);
258263    }
259264
265    ATTR_COLD const astring &name() const { if (m_name == NULL) fatalerror("object not initialized"); return *m_name; }
266
260267   ATTR_HOT inline const type_t type() const { return m_objtype; }
261268    ATTR_HOT inline const family_t family() const { return m_family; }
262269
r26365r26366
267274    ATTR_HOT inline const netlist_base_t & RESTRICT netlist() const { return *m_netlist; }
268275
269276private:
277    astring *m_name;
270278   const type_t m_objtype;
271279    const family_t m_family;
272280    netlist_base_t * RESTRICT m_netlist;
r26365r26366
310318    , m_state(STATE_NONEX)
311319    {}
312320
313   ATTR_COLD void init_terminal(netlist_core_device_t &dev, const state_e astate);
321   ATTR_COLD void init_terminal(netlist_core_device_t &dev, const astring &aname, const state_e astate);
314322
315323    ATTR_COLD void set_net(netlist_net_t &anet)   { m_net = &anet; }
316324    ATTR_COLD bool has_net() { return (m_net != NULL); }
r26365r26366
527535
528536   netlist_output_t(const type_t atype, const family_t afamily);
529537
530    ATTR_COLD void init_terminal(netlist_core_device_t &dev);
538    ATTR_COLD void init_terminal(netlist_core_device_t &dev, const astring &aname);
531539
532540   double m_low_V;
533541   double m_high_V;
r26365r26366
615623
616624   ATTR_COLD virtual void init(netlist_setup_t &setup, const astring &name);
617625
618   ATTR_COLD const astring &name() const { return m_name; }
619626
620627   ATTR_HOT virtual void update_param() {}
621628
r26365r26366
683690   ATTR_HOT virtual void start() { }
684691
685692private:
686   astring m_name;
687693};
688694
689695
r26365r26366
835841protected:
836842   void start()
837843   {
838      m_I.init_terminal(*this, netlist_terminal_t::STATE_INP_ACTIVE);
844      m_I.init_terminal(*this, "I", netlist_terminal_t::STATE_INP_ACTIVE);
839845
840      m_Q.init_terminal(*this);
846      m_Q.init_terminal(*this, "Q");
841847      m_Q.initial(1);
842848   }
843849
r26365r26366
877883protected:
878884   void start()
879885   {
880      m_I.init_terminal(*this, netlist_terminal_t::STATE_INP_ACTIVE);
881      m_Q.init_terminal(*this);
886      m_I.init_terminal(*this, "I", netlist_terminal_t::STATE_INP_ACTIVE);
887      m_Q.init_terminal(*this, "Q");
882888      m_Q.initial(0);
883889   }
884890
trunk/src/emu/netlist/nl_setup.c
r26365r26366
143143        case netlist_terminal_t::OUTPUT:
144144            {
145145                netlist_terminal_t &term = dynamic_cast<netlist_terminal_t &>(obj);
146                astring temp = dev.name();
147                temp.cat(".");
148                temp.cat(name);
149146                if (obj.isType(netlist_terminal_t::OUTPUT))
150                    dynamic_cast<netlist_output_t &>(term).init_terminal(upd_dev);
147                    dynamic_cast<netlist_output_t &>(term).init_terminal(upd_dev, dev.name() + "." + name);
151148                else
152                    term.init_terminal(upd_dev, state);
149                    term.init_terminal(upd_dev, dev.name() + "." + name, state);
153150
154                if (!(m_terminals.add(temp, &term, false)==TMERR_NONE))
155                    fatalerror("Error adding %s %s to terminal list\n", objtype_as_astr(term).cstr(), temp.cstr());
151                if (!(m_terminals.add(term.name(), &term, false)==TMERR_NONE))
152                    fatalerror("Error adding %s %s to terminal list\n", objtype_as_astr(term).cstr(), term.name().cstr());
156153                NL_VERBOSE_OUT(("%s %s\n", objtype_as_astr(term).cstr(), name.cstr()));
157154            }
158155            break;
r26365r26366
366363        netlist_net_t *anet =  new netlist_net_t(netlist_object_t::NET, netlist_object_t::ANALOG);
367364        t1.set_net(*anet);
368365        m_netlist.solver()->m_nets.add(anet);
369        t1.net().init_object(netlist());
366        // FIXME: Nets should have a unique name
367        t1.net().init_object(netlist(),"some net");
370368        t1.net().register_con(t2);
371369        t1.net().register_con(t1);
372370    }
trunk/src/mame/drivers/pong.c
r26365r26366
465465   NETDEV_PARAM(videomix.R2, RES_K(1.2))
466466   NETDEV_PARAM(videomix.R3, RES_K(22))
467467
468#if 0
468469    NETDEV_SOLVER(Solver)
469470    NETDEV_ANALOG_CONST(V5, 5)
470471    NETDEV_ANALOG_CONST(V1, 1)
471472    NETDEV_ANALOG_CONST(V0, 0)
472#if 0
473
473474    NETDEV_R(R1, 10)
474475    NETDEV_R(R2, 10)
475476    NETDEV_R(R3, 10)
r26365r26366
515516    //NETDEV_LOG(log1, D1.A)
516517#endif
517518
519#if 0
518520    // astable NAND Multivibrator
519521    NETDEV_R(R1, 1000)
520522    NETDEV_C(C1, 1e-6)
r26365r26366
526528    //NETDEV_LOG(log2, C1.2)
527529    //NETDEV_LOG(log2, n1.Q)
528530    //NETDEV_LOG(log3, n2.Q)
531#endif
529532NETLIST_END
530533
531534static NETLIST_START(pong)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team