trunk/src/emu/netlist/nl_base.h
| r26439 | r26440 | |
| 190 | 190 | #define NETLIB_DEVICE(_name, _priv) \ |
| 191 | 191 | NETLIB_DEVICE_BASE(NETLIB_NAME(_name), netlist_device_t, , _priv) |
| 192 | 192 | |
| 193 | | #define NETLIB_SUBDEVICE(_name, _priv) \ |
| 194 | | class NETLIB_NAME(_name) : public netlist_core_device_t \ |
| 195 | | { \ |
| 196 | | public: \ |
| 197 | | NETLIB_NAME(_name) () \ |
| 198 | | : netlist_core_device_t() \ |
| 199 | | { } \ |
| 200 | | /*protected:*/ \ |
| 201 | | ATTR_HOT void update(); \ |
| 202 | | _priv \ |
| 203 | | } |
| 193 | #define NETLIB_SUBDEVICE(_name, _priv) \ |
| 194 | class NETLIB_NAME(_name) : public netlist_device_t \ |
| 195 | { \ |
| 196 | public: \ |
| 197 | NETLIB_NAME(_name) () \ |
| 198 | : netlist_device_t() \ |
| 199 | { } \ |
| 200 | /*protected:*/ \ |
| 201 | ATTR_HOT void update(); \ |
| 202 | ATTR_HOT void start(); \ |
| 203 | public: \ |
| 204 | _priv \ |
| 205 | } |
| 204 | 206 | |
| 205 | 207 | #define NETLIB_DEVICE_WITH_PARAMS(_name, _priv) \ |
| 206 | 208 | NETLIB_DEVICE_BASE(NETLIB_NAME(_name), netlist_device_t, \ |
| r26439 | r26440 | |
| 789 | 791 | |
| 790 | 792 | ATTR_COLD bool variable_input_count() { return m_variable_input_count; } |
| 791 | 793 | |
| 792 | | ATTR_COLD void register_sub(netlist_core_device_t &dev, const pstring &name); |
| 794 | ATTR_COLD void register_sub(netlist_device_t &dev, const pstring &name); |
| 795 | ATTR_COLD void register_subalias(const pstring &name, netlist_terminal_t &term); |
| 793 | 796 | |
| 794 | 797 | ATTR_COLD void register_terminal(const pstring &name, netlist_terminal_t &port); |
| 795 | 798 | |
| 796 | 799 | ATTR_COLD void register_output(const pstring &name, netlist_output_t &out); |
| 797 | | ATTR_COLD void register_output(netlist_core_device_t &dev, const pstring &name, netlist_output_t &out); |
| 798 | 800 | |
| 799 | 801 | ATTR_COLD void register_input(const pstring &name, netlist_input_t &in, netlist_input_t::state_e state = netlist_input_t::STATE_INP_ACTIVE); |
| 800 | | ATTR_COLD void register_input(netlist_core_device_t &dev, const pstring &name, netlist_input_t &in, netlist_input_t::state_e state = netlist_input_t::STATE_INP_ACTIVE); |
| 801 | 802 | |
| 802 | 803 | ATTR_COLD void register_link_internal(netlist_input_t &in, netlist_output_t &out, netlist_input_t::state_e aState); |
| 803 | 804 | ATTR_COLD void register_link_internal(netlist_core_device_t &dev, netlist_input_t &in, netlist_output_t &out, netlist_input_t::state_e aState); |
trunk/src/emu/netlist/devices/net_lib.c
| r26439 | r26440 | |
| 270 | 270 | { |
| 271 | 271 | register_sub(sub, "sub"); |
| 272 | 272 | |
| 273 | | sub.m_state = 0; |
| 274 | | |
| 275 | | register_input(sub, "A0", sub.m_A0); |
| 276 | | register_input(sub, "A1", sub.m_A1); |
| 277 | | register_input(sub, "A2", sub.m_A2); |
| 278 | | register_input(sub, "A3", sub.m_A3); |
| 273 | register_subalias("A0", sub.m_A0); |
| 274 | register_subalias("A1", sub.m_A1); |
| 275 | register_subalias("A2", sub.m_A2); |
| 276 | register_subalias("A3", sub.m_A3); |
| 279 | 277 | register_input("LTQ", m_LTQ); |
| 280 | 278 | register_input("BIQ", m_BIQ); |
| 281 | | register_input(sub, "RBIQ",sub.m_RBIQ); |
| 279 | register_subalias("RBIQ",sub.m_RBIQ); |
| 282 | 280 | |
| 283 | | register_output(sub, "a", sub.m_a); |
| 284 | | register_output(sub, "b", sub.m_b); |
| 285 | | register_output(sub, "c", sub.m_c); |
| 286 | | register_output(sub, "d", sub.m_d); |
| 287 | | register_output(sub, "e", sub.m_e); |
| 288 | | register_output(sub, "f", sub.m_f); |
| 289 | | register_output(sub, "g", sub.m_g); |
| 281 | register_subalias("a", sub.m_a); |
| 282 | register_subalias("b", sub.m_b); |
| 283 | register_subalias("c", sub.m_c); |
| 284 | register_subalias("d", sub.m_d); |
| 285 | register_subalias("e", sub.m_e); |
| 286 | register_subalias("f", sub.m_f); |
| 287 | register_subalias("g", sub.m_g); |
| 290 | 288 | } |
| 291 | 289 | |
| 292 | 290 | NETLIB_UPDATE(nic7448) |
| r26439 | r26440 | |
| 318 | 316 | |
| 319 | 317 | } |
| 320 | 318 | |
| 319 | NETLIB_START(nic7448_sub) |
| 320 | { |
| 321 | m_state = 0; |
| 322 | |
| 323 | register_input("A0", m_A0); |
| 324 | register_input("A1", m_A1); |
| 325 | register_input("A2", m_A2); |
| 326 | register_input("A3", m_A3); |
| 327 | register_input("RBIQ", m_RBIQ); |
| 328 | |
| 329 | register_output("a", m_a); |
| 330 | register_output("b", m_b); |
| 331 | register_output("c", m_c); |
| 332 | register_output("d", m_d); |
| 333 | register_output("e", m_e); |
| 334 | register_output("f", m_f); |
| 335 | register_output("g", m_g); |
| 336 | } |
| 337 | |
| 321 | 338 | NETLIB_UPDATE(nic7448_sub) |
| 322 | 339 | { |
| 323 | 340 | UINT8 v; |
| r26439 | r26440 | |
| 511 | 528 | register_sub(C, "C"); |
| 512 | 529 | register_sub(D, "D"); |
| 513 | 530 | |
| 514 | | register_input(A, "CLKA", A.m_I, netlist_input_t::STATE_INP_HL); |
| 515 | | register_input(B, "CLKB", B.m_I, netlist_input_t::STATE_INP_HL); |
| 531 | register_subalias("CLKA", A.m_I); |
| 532 | register_subalias("CLKB", B.m_I); |
| 516 | 533 | register_input("R1", m_R1); |
| 517 | 534 | register_input("R2", m_R2); |
| 518 | 535 | |
| 519 | | register_output(A, "QA", A.m_Q); |
| 520 | | register_output(B, "QB", B.m_Q); |
| 521 | | register_output(C, "QC", C.m_Q); |
| 522 | | register_output(D, "QD", D.m_Q); |
| 536 | register_subalias("QA", A.m_Q); |
| 537 | register_subalias("QB", B.m_Q); |
| 538 | register_subalias("QC", C.m_Q); |
| 539 | register_subalias("QD", D.m_Q); |
| 523 | 540 | |
| 524 | 541 | register_link_internal(C, C.m_I, B.m_Q, netlist_input_t::STATE_INP_HL); |
| 525 | 542 | register_link_internal(D, D.m_I, C.m_Q, netlist_input_t::STATE_INP_HL); |
| 543 | } |
| 526 | 544 | |
| 545 | NETLIB_START(nic7493ff) |
| 546 | { |
| 547 | register_input("CLK", m_I, netlist_input_t::STATE_INP_HL); |
| 548 | register_output("Q", m_Q); |
| 527 | 549 | } |
| 528 | 550 | |
| 529 | 551 | NETLIB_UPDATE(nic7493ff) |
| r26439 | r26440 | |
| 637 | 659 | } |
| 638 | 660 | #endif |
| 639 | 661 | |
| 662 | NETLIB_START(nic74107Asub) |
| 663 | { |
| 664 | register_input("CLK", m_clk, netlist_input_t::STATE_INP_HL); |
| 665 | register_output("Q", m_Q); |
| 666 | register_output("QQ", m_QQ); |
| 667 | |
| 668 | m_Q.initial(0); |
| 669 | m_QQ.initial(1); |
| 670 | } |
| 671 | |
| 640 | 672 | NETLIB_START(nic74107A) |
| 641 | 673 | { |
| 642 | 674 | register_sub(sub, "sub"); |
| 643 | 675 | |
| 644 | | register_input(sub, "CLK", sub.m_clk, netlist_input_t::STATE_INP_HL); |
| 676 | register_subalias("CLK", sub.m_clk); |
| 645 | 677 | register_input("J", m_J); |
| 646 | 678 | register_input("K", m_K); |
| 647 | 679 | register_input("CLRQ", m_clrQ); |
| 648 | | register_output(sub, "Q", sub.m_Q); |
| 649 | | register_output(sub, "QQ", sub.m_QQ); |
| 680 | register_subalias("Q", sub.m_Q); |
| 681 | register_subalias("QQ", sub.m_QQ); |
| 650 | 682 | |
| 651 | 683 | sub.m_Q.initial(0); |
| 652 | 684 | sub.m_QQ.initial(1); |
| r26439 | r26440 | |
| 747 | 779 | { |
| 748 | 780 | register_sub(sub, "sub"); |
| 749 | 781 | |
| 750 | | sub.m_cnt = 0; |
| 751 | | sub.m_loadq = 1; |
| 752 | | sub.m_ent = 1; |
| 782 | register_subalias("CLK", sub.m_clk); |
| 753 | 783 | |
| 754 | | register_input(sub, "CLK", sub.m_clk, netlist_input_t::STATE_INP_LH); |
| 755 | | |
| 756 | 784 | register_input("ENP", m_ENP); |
| 757 | 785 | register_input("ENT", m_ENT); |
| 758 | 786 | register_input("CLRQ", m_CLRQ); |
| 759 | 787 | register_input("LOADQ", m_LOADQ); |
| 760 | 788 | |
| 761 | | register_input(sub, "A", sub.m_A, netlist_input_t::STATE_INP_PASSIVE); |
| 762 | | register_input(sub, "B", sub.m_B, netlist_input_t::STATE_INP_PASSIVE); |
| 763 | | register_input(sub, "C", sub.m_C, netlist_input_t::STATE_INP_PASSIVE); |
| 764 | | register_input(sub, "D", sub.m_D, netlist_input_t::STATE_INP_PASSIVE); |
| 789 | register_subalias("A", sub.m_A); |
| 790 | register_subalias("B", sub.m_B); |
| 791 | register_subalias("C", sub.m_C); |
| 792 | register_subalias("D", sub.m_D); |
| 765 | 793 | |
| 766 | | register_output(sub, "QA", sub.m_QA); |
| 767 | | register_output(sub, "QB", sub.m_QB); |
| 768 | | register_output(sub, "QC", sub.m_QC); |
| 769 | | register_output(sub, "QD", sub.m_QD); |
| 770 | | register_output(sub, "RC", sub.m_RC); |
| 794 | register_subalias("QA", sub.m_QA); |
| 795 | register_subalias("QB", sub.m_QB); |
| 796 | register_subalias("QC", sub.m_QC); |
| 797 | register_subalias("QD", sub.m_QD); |
| 798 | register_subalias("RC", sub.m_RC); |
| 771 | 799 | |
| 772 | 800 | } |
| 773 | 801 | |
| 802 | NETLIB_START(nic9316_sub) |
| 803 | { |
| 804 | m_cnt = 0; |
| 805 | m_loadq = 1; |
| 806 | m_ent = 1; |
| 807 | |
| 808 | register_input("CLK", m_clk, netlist_input_t::STATE_INP_LH); |
| 809 | |
| 810 | register_input("A", m_A, netlist_input_t::STATE_INP_PASSIVE); |
| 811 | register_input("B", m_B, netlist_input_t::STATE_INP_PASSIVE); |
| 812 | register_input("C", m_C, netlist_input_t::STATE_INP_PASSIVE); |
| 813 | register_input("D", m_D, netlist_input_t::STATE_INP_PASSIVE); |
| 814 | |
| 815 | register_output("QA", m_QA); |
| 816 | register_output("QB", m_QB); |
| 817 | register_output("QC", m_QC); |
| 818 | register_output("QD", m_QD); |
| 819 | register_output("RC", m_RC); |
| 820 | |
| 821 | } |
| 822 | |
| 774 | 823 | NETLIB_UPDATE(nic9316_sub) |
| 775 | 824 | { |
| 776 | 825 | if (m_loadq) |
trunk/src/emu/netlist/nl_base.c
| r26439 | r26440 | |
| 261 | 261 | } |
| 262 | 262 | |
| 263 | 263 | |
| 264 | | ATTR_COLD void netlist_device_t::register_sub(netlist_core_device_t &dev, const pstring &name) |
| 264 | ATTR_COLD void netlist_device_t::register_sub(netlist_device_t &dev, const pstring &name) |
| 265 | 265 | { |
| 266 | 266 | dev.init(*m_setup, this->name() + "." + name); |
| 267 | 267 | } |
| 268 | 268 | |
| 269 | | ATTR_COLD void netlist_device_t::register_output(netlist_core_device_t &dev, const pstring &name, netlist_output_t &port) |
| 269 | ATTR_COLD void netlist_device_t::register_subalias(const pstring &name, netlist_terminal_t &term) |
| 270 | 270 | { |
| 271 | | m_setup->register_object(*this, dev, name, port, netlist_terminal_t::STATE_OUT); |
| 271 | pstring alias = this->name() + "." + name; |
| 272 | |
| 273 | //printf("alias: %s\n", alias.cstr()); |
| 274 | |
| 275 | m_setup->register_alias(alias, term.name()); |
| 276 | |
| 277 | if (term.isType(netlist_terminal_t::INPUT)) |
| 278 | m_terminals.add(name); |
| 272 | 279 | } |
| 273 | 280 | |
| 274 | 281 | ATTR_COLD void netlist_device_t::register_terminal(const pstring &name, netlist_terminal_t &port) |
| r26439 | r26440 | |
| 281 | 288 | m_setup->register_object(*this,*this,name, port, netlist_terminal_t::STATE_OUT); |
| 282 | 289 | } |
| 283 | 290 | |
| 284 | | ATTR_COLD void netlist_device_t::register_input(netlist_core_device_t &dev, const pstring &name, netlist_input_t &inp, netlist_input_t::state_e type) |
| 291 | ATTR_COLD void netlist_device_t::register_input(const pstring &name, netlist_input_t &inp, netlist_input_t::state_e type) |
| 285 | 292 | { |
| 286 | 293 | m_terminals.add(name); |
| 287 | | m_setup->register_object(*this, dev, name, inp, type); |
| 294 | m_setup->register_object(*this, *this, name, inp, type); |
| 288 | 295 | } |
| 289 | 296 | |
| 290 | | ATTR_COLD void netlist_device_t::register_input(const pstring &name, netlist_input_t &inp, netlist_input_t::state_e type) |
| 291 | | { |
| 292 | | register_input(*this, name, inp, type); |
| 293 | | } |
| 294 | | |
| 295 | 297 | static void init_term(netlist_core_device_t &dev, netlist_terminal_t &term, netlist_input_t::state_e aState) |
| 296 | 298 | { |
| 297 | 299 | if (!term.isInitalized()) |