diff --git a/src/lib/netlist/devices/net_lib.cpp b/src/lib/netlist/devices/net_lib.cpp index bc391e98728..860380b6d90 100644 --- a/src/lib/netlist/devices/net_lib.cpp +++ b/src/lib/netlist/devices/net_lib.cpp @@ -80,15 +80,15 @@ static void initialize_factory(factory_list_t &factory) ENTRY(C, CAP, "C") ENTRY(L, IND, "L") ENTRY(D, DIODE, "MODEL") - ENTRY(VCVS, VCVS, "-") - ENTRY(VCCS, VCCS, "-") - ENTRY(CCCS, CCCS, "-") - ENTRY(LVCCS, LVCCS, "-") + ENTRY(VCVS, VCVS, "") + ENTRY(VCCS, VCCS, "") + ENTRY(CCCS, CCCS, "") + ENTRY(LVCCS, LVCCS, "") ENTRY(VS, VS, "V") ENTRY(CS, CS, "I") ENTRY(OPAMP, OPAMP, "MODEL") - ENTRYX(dummy_input, DUMMY_INPUT, "-") - ENTRYX(frontier, FRONTIER_DEV, "+I,G,Q") // not intended to be used directly + ENTRYX(dummy_input, DUMMY_INPUT, "") + ENTRYX(frontier, FRONTIER_DEV, "+I,+G,+Q") // not intended to be used directly ENTRYX(function, AFUNC, "N,FUNC") // only for macro devices - NO FEEDBACK loops ENTRY(QBJT_EB, QBJT_EB, "MODEL") ENTRY(QBJT_switch, QBJT_SW, "MODEL") @@ -96,106 +96,107 @@ static void initialize_factory(factory_list_t &factory) ENTRYX(logic_input, LOGIC_INPUT, "IN,FAMILY") ENTRYX(analog_input, ANALOG_INPUT, "IN") ENTRYX(log, LOG, "+I") - ENTRYX(logD, LOGD, "+I,I2") + ENTRYX(logD, LOGD, "+I,+I2") ENTRYX(clock, CLOCK, "FREQ") ENTRYX(extclock, EXTCLOCK, "FREQ") ENTRYX(mainclock, MAINCLOCK, "FREQ") - ENTRYX(gnd, GND, "-") - ENTRYX(netlistparams, PARAMETER, "-") + ENTRYX(gnd, GND, "") + ENTRYX(netlistparams, PARAMETER, "") ENTRY(solver, SOLVER, "FREQ") - ENTRYX(res_sw, RES_SWITCH, "+IN,P1,P2") - ENTRY(switch1, SWITCH, "-") - ENTRY(switch2, SWITCH2, "-") - ENTRYX(nicRSFF, NETDEV_RSFF, "+S,R") - ENTRYX(nicDelay, NETDEV_DELAY, "-") - ENTRYX(2716, EPROM_2716, "+GQ,EPQ,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10") - ENTRYX(2102A, RAM_2102A, "+CEQ,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,RWQ,DI") - ENTRYX(7450, TTL_7450_ANDORINVERT, "+A,B,C,D") - ENTRYX(7448, TTL_7448, "+A,B,C,D,LTQ,BIQ,RBIQ") - ENTRYX(7473, TTL_7473, "+CLK,J,K,CLRQ") - ENTRYX(7473A, TTL_7473A, "+CLK,J,K,CLRQ") - ENTRYX(7474, TTL_7474, "+CLK,D,CLRQ,PREQ") - ENTRYX(7475, TTL_7475, "-") - ENTRYX(7477, TTL_7477, "-") - ENTRYX(7483, TTL_7483, "+A1,A2,A3,A4,B1,B2,B3,B4,C0") - ENTRYX(7485, TTL_7485, "+A0,A1,A2,A3,B0,B1,B2,B3,LTIN,EQIN,GTIN") - ENTRYX(7490, TTL_7490, "+A,B,R1,R2,R91,R92") - ENTRYX(7493, TTL_7493, "+CLKA,CLKB,R1,R2") - ENTRYX(74107, TTL_74107, "+CLK,J,K,CLRQ") - ENTRYX(74107A, TTL_74107A, "+CLK,J,K,CLRQ") - ENTRYX(74123, TTL_74123, "-") - ENTRYX(74153, TTL_74153, "+C0,C1,C2,C3,A,B,G") - ENTRYX(74161, TTL_74161, "+A,B,C,D,CLRQ,LOADQ,CLK,ENABLEP,ENABLET") - ENTRYX(74165, TTL_74165, "+CLK,CLKINH,SH_LDQ,SER,A,B,C,D,E,F,G,H") - ENTRYX(74166, TTL_74166, "+CLK,CLKINH,SH_LDQ,SER,A,B,C,D,E,F,G,H,CLRQ") - ENTRYX(74174, TTL_74174, "+CLK,D1,D2,D3,D4,D5,D6,CLRQ") - ENTRYX(74175, TTL_74175, "+CLK,D1,D2,D3,D4,CLRQ") - ENTRYX(74192, TTL_74192, "+A,B,C,D,CLEAR,LOADQ,CU,CD") - ENTRYX(74193, TTL_74193, "+A,B,C,D,CLEAR,LOADQ,CU,CD") - ENTRYX(74194, TTL_74194, "+CLK,S0,S1,SRIN,A,B,C,D,SLIN,CLRQ") - ENTRYX(74365, TTL_74365, "+G1Q,G2Q,A1,A2,A3,A4,A5,A6") - //ENTRY(74279, TTL_74279, "-") // only dip available + ENTRYX(res_sw, RES_SWITCH, "+IN,+P1,+P2") + ENTRY(switch1, SWITCH, "") + ENTRY(switch2, SWITCH2, "") + ENTRYX(nicRSFF, NETDEV_RSFF, "+S,+R") + ENTRYX(nicDelay, NETDEV_DELAY, "") + ENTRYX(2716, EPROM_2716, "+GQ,+EPQ,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7,+A8,+A9,+A10") + ENTRYX(2102A, RAM_2102A, "+CEQ,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7,+A8,+A9,+RWQ,+DI") + ENTRYX(7450, TTL_7450_ANDORINVERT, "+A,+B,+C,+D") + ENTRYX(7448, TTL_7448, "+A,+B,+C,+D,+LTQ,+BIQ,+RBIQ") + ENTRYX(7473, TTL_7473, "+CLK,+J,+K,+CLRQ") + ENTRYX(7473A, TTL_7473A, "+CLK,+J,+K,+CLRQ") + ENTRYX(7474, TTL_7474, "+CLK,+D,+CLRQ,+PREQ") + ENTRYX(7475, TTL_7475, "") + ENTRYX(7477, TTL_7477, "") + ENTRYX(7483, TTL_7483, "+A1,+A2,+A3,+A4,+B1,+B2,+B3,+B4,+C0") + ENTRYX(7485, TTL_7485, "+A0,+A1,+A2,+A3,+B0,+B1,+B2,+B3,+LTIN,+EQIN,+GTIN") + ENTRYX(7490, TTL_7490, "+A,+B,+R1,+R2,+R91,+R92") + ENTRYX(7493, TTL_7493, "+CLKA,+CLKB,+R1,+R2") + ENTRYX(74107, TTL_74107, "+CLK,+J,+K,+CLRQ") + ENTRYX(74107A, TTL_74107A, "+CLK,+J,+K,+CLRQ") + ENTRYX(74123, TTL_74123, "") + ENTRYX(74153, TTL_74153, "+C0,+C1,+C2,+C3,+A,+B,+G") + ENTRYX(74161, TTL_74161, "+A,+B,+C,+D,+CLRQ,+LOADQ,+CLK,+ENABLEP,+ENABLET") + ENTRYX(74165, TTL_74165, "+CLK,+CLKINH,+SH_LDQ,+SER,+A,+B,+C,+D,+E,+F,+G,+H") + ENTRYX(74166, TTL_74166, "+CLK,+CLKINH,+SH_LDQ,+SER,+A,+B,+C,+D,+E,+F,+G,+H,+CLRQ") + ENTRYX(74174, TTL_74174, "+CLK,+D1,+D2,+D3,+D4,+D5,+D6,+CLRQ") + ENTRYX(74175, TTL_74175, "+CLK,+D1,+D2,+D3,+D4,+CLRQ") + ENTRYX(74192, TTL_74192, "+A,+B,+C,+D,+CLEAR,+LOADQ,+CU,+CD") + ENTRYX(74193, TTL_74193, "+A,+B,+C,+D,+CLEAR,+LOADQ,+CU,+CD") + ENTRYX(74194, TTL_74194, "+CLK,+S0,+S1,+SRIN,+A,+B,+C,+D,+SLIN,+CLRQ") + ENTRYX(74365, TTL_74365, "+G1Q,+G2Q,+A1,+A2,+A3,+A4,+A5,+A6") + //ENTRY(74279, TTL_74279, "") // only dip available ENTRYX(SN74LS629, SN74LS629, "CAP") - ENTRYX(82S16, TTL_82S16, "-") - ENTRYX(82S115, PROM_82S115, "+CE1Q,CE2,A0,A1,A2,A3,A4,A5,A6,A7,A8,STROBE") - ENTRYX(82S123, PROM_82S123, "+CEQ,A0,A1,A2,A3,A4") - ENTRYX(82S126, PROM_82S126, "+CE1Q,CE2Q,A0,A1,A2,A3,A4,A5,A6,A7") - ENTRYX(9310, TTL_9310, "-") - ENTRYX(9312, TTL_9312, "+A,B,C,D0,D1,D2,D3,D4,D5,D6,D7,G") - ENTRYX(9316, TTL_9316, "+CLK,ENP,ENT,CLRQ,LOADQ,A,B,C,D") - ENTRYX(9322, TTL_9322, "+SELECT,A1,B1,A2,B2,A3,B3,A4,B4,STROBE") - ENTRYX(9334, TTL_9334, "+CQ,EQ,D,A0,A1,A2") - ENTRYX(AM2847, TTL_AM2847, "+CP,INA,INB,INC,IND,RCA,RCB,RCC,RCD") + ENTRYX(82S16, TTL_82S16, "") + ENTRYX(82S115, PROM_82S115, "+CE1Q,+CE2,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7,+A8,+STROBE") + ENTRYX(82S123, PROM_82S123, "+CEQ,+A0,+A1,+A2,+A3,+A4") + ENTRYX(82S126, PROM_82S126, "+CE1Q,+CE2Q,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7") + ENTRYX(9310, TTL_9310, "") + ENTRYX(9312, TTL_9312, "+A,+B,+C,+D0,+D1,+D2,+D3,+D4,+D5,+D6,+D7,+G") + ENTRYX(9316, TTL_9316, "+CLK,+ENP,+ENT,+CLRQ,+LOADQ,+A,+B,+C,+D") + ENTRYX(9322, TTL_9322, "+SELECT,+A1,+B1,+A2,+B2,+A3,+B3,+A4,+B4,+STROBE") + ENTRYX(9334, TTL_9334, "+CQ,+EQ,+D,+A0,+A1,+A2") + ENTRYX(AM2847, TTL_AM2847, "+CP,+INA,+INB,+INC,+IND,+RCA,+RCB,+RCC,+RCD") ENTRYX(CD4020, CD4020, "") ENTRYX(CD4066_GATE, CD4066_GATE, "") + ENTRYX(CD4316_GATE, CD4316_GATE, "") /* entries with suffix WI are legacy only */ - ENTRYX(CD4020, CD4020_WI, "+IP,RESET,VDD,VSS") + ENTRYX(CD4020, CD4020_WI, "+IP,+RESET,+VDD,+VSS") //ENTRY(4066, CD_4066, "+A,B") - ENTRYX(NE555, NE555, "-") + ENTRYX(NE555, NE555, "") ENTRYX(r2r_dac, R2R_DAC, "VIN,R,N") - ENTRYX(tristate, TTL_TRISTATE, "+CEQ1,D1,CEQ2,D2") - ENTRYX(tristate3, TTL_TRISTATE3, "-") - ENTRYX(2102A_dip, RAM_2102A_DIP, "-") - ENTRYX(2716_dip, EPROM_2716_DIP, "-") - ENTRYX(4538_dip, CD4538_DIP, "-") - ENTRYX(7448_dip, TTL_7448_DIP, "-") - ENTRYX(7450_dip, TTL_7450_DIP, "-") - ENTRYX(7473_dip, TTL_7473_DIP, "-") - ENTRYX(7473A_dip, TTL_7473A_DIP, "-") - ENTRYX(7474_dip, TTL_7474_DIP, "-") - ENTRYX(7475_dip, TTL_7475_DIP, "-") - ENTRYX(7477_dip, TTL_7477_DIP, "-") - ENTRYX(7483_dip, TTL_7483_DIP, "-") - ENTRYX(7485_dip, TTL_7485_DIP, "-") - ENTRYX(7490_dip, TTL_7490_DIP, "-") - ENTRYX(7493_dip, TTL_7493_DIP, "-") - ENTRYX(74107_dip, TTL_74107_DIP, "-") - ENTRYX(74123_dip, TTL_74123_DIP, "-") - ENTRYX(74153_dip, TTL_74153_DIP, "-") - ENTRYX(74161_dip, TTL_74161_DIP, "-") - ENTRYX(74165_dip, TTL_74165_DIP, "-") - ENTRYX(74166_dip, TTL_74166_DIP, "-") - ENTRYX(74174_dip, TTL_74174_DIP, "-") - ENTRYX(74175_dip, TTL_74175_DIP, "-") - ENTRYX(74192_dip, TTL_74192_DIP, "-") - ENTRYX(74193_dip, TTL_74193_DIP, "-") - ENTRYX(74194_dip, TTL_74194_DIP, "-") - ENTRYX(74279_dip, TTL_74279_DIP, "-") - ENTRYX(74365_dip, TTL_74365_DIP, "-") - ENTRYX(82S16_dip, TTL_82S16_DIP, "-") - ENTRYX(82S115_dip, PROM_82S115_DIP, "-") - ENTRYX(82S123_dip, PROM_82S123_DIP, "-") - ENTRYX(82S126_dip, PROM_82S126_DIP, "-") - ENTRYX(9602_dip, TTL_9602_DIP, "-") - ENTRYX(9310_dip, TTL_9310_DIP, "-") - ENTRYX(9312_dip, TTL_9312_DIP, "-") - ENTRYX(9316_dip, TTL_9316_DIP, "-") - ENTRYX(9322_dip, TTL_9322_DIP, "-") - ENTRYX(9334_dip, TTL_9334_DIP, "-") - ENTRYX(AM2847_dip, TTL_AM2847_DIP, "-") + ENTRYX(tristate, TTL_TRISTATE, "+CEQ1,+D1,+CEQ2,+D2") + ENTRYX(tristate3, TTL_TRISTATE3, "") + ENTRYX(2102A_dip, RAM_2102A_DIP, "") + ENTRYX(2716_dip, EPROM_2716_DIP, "") + ENTRYX(4538_dip, CD4538_DIP, "") + ENTRYX(7448_dip, TTL_7448_DIP, "") + ENTRYX(7450_dip, TTL_7450_DIP, "") + ENTRYX(7473_dip, TTL_7473_DIP, "") + ENTRYX(7473A_dip, TTL_7473A_DIP, "") + ENTRYX(7474_dip, TTL_7474_DIP, "") + ENTRYX(7475_dip, TTL_7475_DIP, "") + ENTRYX(7477_dip, TTL_7477_DIP, "") + ENTRYX(7483_dip, TTL_7483_DIP, "") + ENTRYX(7485_dip, TTL_7485_DIP, "") + ENTRYX(7490_dip, TTL_7490_DIP, "") + ENTRYX(7493_dip, TTL_7493_DIP, "") + ENTRYX(74107_dip, TTL_74107_DIP, "") + ENTRYX(74123_dip, TTL_74123_DIP, "") + ENTRYX(74153_dip, TTL_74153_DIP, "") + ENTRYX(74161_dip, TTL_74161_DIP, "") + ENTRYX(74165_dip, TTL_74165_DIP, "") + ENTRYX(74166_dip, TTL_74166_DIP, "") + ENTRYX(74174_dip, TTL_74174_DIP, "") + ENTRYX(74175_dip, TTL_74175_DIP, "") + ENTRYX(74192_dip, TTL_74192_DIP, "") + ENTRYX(74193_dip, TTL_74193_DIP, "") + ENTRYX(74194_dip, TTL_74194_DIP, "") + ENTRYX(74279_dip, TTL_74279_DIP, "") + ENTRYX(74365_dip, TTL_74365_DIP, "") + ENTRYX(82S16_dip, TTL_82S16_DIP, "") + ENTRYX(82S115_dip, PROM_82S115_DIP, "") + ENTRYX(82S123_dip, PROM_82S123_DIP, "") + ENTRYX(82S126_dip, PROM_82S126_DIP, "") + ENTRYX(9602_dip, TTL_9602_DIP, "") + ENTRYX(9310_dip, TTL_9310_DIP, "") + ENTRYX(9312_dip, TTL_9312_DIP, "") + ENTRYX(9316_dip, TTL_9316_DIP, "") + ENTRYX(9322_dip, TTL_9322_DIP, "") + ENTRYX(9334_dip, TTL_9334_DIP, "") + ENTRYX(AM2847_dip, TTL_AM2847_DIP, "") ENTRYX(SN74LS629_dip, SN74LS629_DIP, "1.CAP1,2.CAP2") - ENTRYX(NE555_dip, NE555_DIP, "-") - ENTRYX(MM5837_dip, MM5837_DIP, "-") + ENTRYX(NE555_dip, NE555_DIP, "") + ENTRYX(MM5837_dip, MM5837_DIP, "") } } //namespace devices diff --git a/src/lib/netlist/devices/nlid_system.h b/src/lib/netlist/devices/nlid_system.h index ff08177cfdb..13812b50ec7 100644 --- a/src/lib/netlist/devices/nlid_system.h +++ b/src/lib/netlist/devices/nlid_system.h @@ -429,23 +429,25 @@ namespace netlist class wrapper : public device_t { public: - wrapper(const pstring &devname, netlist_t &anetlist, const pstring &name) - : device_t(anetlist, name), m_devname(devname) + wrapper(netlist_t &anetlist, const pstring &name) + : device_t(anetlist, name) { - anetlist.setup().namespace_push(name); - anetlist.setup().include(m_devname); - anetlist.setup().namespace_pop(); } protected: NETLIB_RESETI() { } NETLIB_UPDATEI() { } - - pstring m_devname; }; plib::owned_ptr Create(netlist_t &anetlist, const pstring &name) override { - return plib::owned_ptr::Create(this->name(), anetlist, name); + return plib::owned_ptr::Create(anetlist, name); + } + + void macro_actions(netlist_t &anetlist, const pstring &name) override + { + anetlist.setup().namespace_push(name); + anetlist.setup().include(this->name()); + anetlist.setup().namespace_pop(); } private: diff --git a/src/lib/netlist/macro/nlm_opamp.cpp b/src/lib/netlist/macro/nlm_opamp.cpp index 5c68cfc86a3..146f95b72b4 100644 --- a/src/lib/netlist/macro/nlm_opamp.cpp +++ b/src/lib/netlist/macro/nlm_opamp.cpp @@ -52,7 +52,7 @@ static NETLIST_START(opamp_layout_2_13_9_4) A.GND, /* |4 11| */ NC, B.N1, /* |5 10| */ B.OUT, B.PLUS, /* |6 9| */ B.VCC, - B.MINUS /* |7 8| */ B.N2 + B.MINUS, /* |7 8| */ B.N2 /* +--------------+ */ ) NET_C(A.GND, B.GND) diff --git a/src/lib/netlist/macro/nlm_ttl74xx.cpp b/src/lib/netlist/macro/nlm_ttl74xx.cpp index 2120d88eb3f..c66314366d2 100644 --- a/src/lib/netlist/macro/nlm_ttl74xx.cpp +++ b/src/lib/netlist/macro/nlm_ttl74xx.cpp @@ -588,7 +588,7 @@ NETLIST_START(TTL74XX_lib) TT_FAMILY("74XX") TRUTHTABLE_END() - TRUTHTABLE_START(TTL_7400_NAND, 2, 1, "A,B") + TRUTHTABLE_START(TTL_7400_NAND, 2, 1, "+A,+B") TT_HEAD("A,B|Q ") TT_LINE("0,X|1|22") TT_LINE("X,0|1|22") @@ -604,7 +604,7 @@ NETLIST_START(TTL74XX_lib) TT_FAMILY("74XX") TRUTHTABLE_END() - TRUTHTABLE_START(TTL_7402_NOR, 2, 1, "A,B") + TRUTHTABLE_START(TTL_7402_NOR, 2, 1, "+A,+B") TT_HEAD("A,B|Q ") TT_LINE("0,0|1|22") TT_LINE("X,1|0|15") @@ -619,7 +619,7 @@ NETLIST_START(TTL74XX_lib) TT_FAMILY("74XX") TRUTHTABLE_END() - TRUTHTABLE_START(TTL_7404_INVERT, 1, 1, "A") + TRUTHTABLE_START(TTL_7404_INVERT, 1, 1, "+A") TT_HEAD(" A | Q ") TT_LINE(" 0 | 1 |22") TT_LINE(" 1 | 0 |15") @@ -634,7 +634,7 @@ NETLIST_START(TTL74XX_lib) TT_FAMILY("74XX") TRUTHTABLE_END() - TRUTHTABLE_START(TTL_7408_AND, 2, 1, "A,B") + TRUTHTABLE_START(TTL_7408_AND, 2, 1, "+A,+B") TT_HEAD("A,B|Q ") TT_LINE("0,X|0|15") TT_LINE("X,0|0|15") @@ -642,7 +642,7 @@ NETLIST_START(TTL74XX_lib) TT_FAMILY("74XX") TRUTHTABLE_END() - TRUTHTABLE_START(TTL_7410_NAND, 3, 1, "A,B,C") + TRUTHTABLE_START(TTL_7410_NAND, 3, 1, "+A,+B,+C") TT_HEAD("A,B,C|Q ") TT_LINE("0,X,X|1|22") TT_LINE("X,0,X|1|22") @@ -660,7 +660,7 @@ NETLIST_START(TTL74XX_lib) TT_FAMILY("74XX") TRUTHTABLE_END() - TRUTHTABLE_START(TTL_7411_AND, 3, 1, "A,B,C") + TRUTHTABLE_START(TTL_7411_AND, 3, 1, "+A,+B,+C") TT_HEAD("A,B,C|Q ") TT_LINE("0,X,X|0|15") TT_LINE("X,0,X|0|15") @@ -696,7 +696,7 @@ NETLIST_START(TTL74XX_lib) TT_FAMILY("74XX") TRUTHTABLE_END() - TRUTHTABLE_START(TTL_7420_NAND, 4, 1, "A,B,C,D") + TRUTHTABLE_START(TTL_7420_NAND, 4, 1, "+A,+B,+C,+D") TT_HEAD("A,B,C,D|Q ") TT_LINE("0,X,X,X|1|22") TT_LINE("X,0,X,X|1|22") @@ -716,7 +716,7 @@ NETLIST_START(TTL74XX_lib) TT_FAMILY("74XX") TRUTHTABLE_END() - TRUTHTABLE_START(TTL_7425_NOR, 4, 1, "A,B,C,D") + TRUTHTABLE_START(TTL_7425_NOR, 4, 1, "+A,+B,+C,+D") TT_HEAD("A,B,C,D|Q ") TT_LINE("1,X,X,X|0|15") TT_LINE("X,1,X,X|0|15") @@ -735,7 +735,7 @@ NETLIST_START(TTL74XX_lib) TT_FAMILY("74XX") TRUTHTABLE_END() - TRUTHTABLE_START(TTL_7427_NOR, 3, 1, "A,B,C") + TRUTHTABLE_START(TTL_7427_NOR, 3, 1, "+A,+B,+C") TT_HEAD("A,B,C|Q ") TT_LINE("1,X,X|0|15") TT_LINE("X,1,X|0|15") @@ -758,7 +758,7 @@ NETLIST_START(TTL74XX_lib) TT_FAMILY("74XX") TRUTHTABLE_END() - TRUTHTABLE_START(TTL_7430_NAND, 8, 1, "A,B,C,D,E,F,G,H") + TRUTHTABLE_START(TTL_7430_NAND, 8, 1, "+A,+B,+C,+D,+E,+F,+G,+H") TT_HEAD("A,B,C,D,E,F,G,H|Q ") TT_LINE("0,X,X,X,X,X,X,X|1|22") TT_LINE("X,0,X,X,X,X,X,X|1|22") @@ -780,7 +780,7 @@ NETLIST_START(TTL74XX_lib) TT_FAMILY("74XX") TRUTHTABLE_END() - TRUTHTABLE_START(TTL_7432_OR, 2, 1, "A,B") + TRUTHTABLE_START(TTL_7432_OR, 2, 1, "+A,+B") TT_HEAD("A,B|Q ") TT_LINE("1,X|1|22") TT_LINE("X,1|1|22") @@ -800,7 +800,7 @@ NETLIST_START(TTL74XX_lib) TT_FAMILY("74XX") TRUTHTABLE_END() - TRUTHTABLE_START(TTL_7437_NAND, 2, 1, "A,B") + TRUTHTABLE_START(TTL_7437_NAND, 2, 1, "+A,+B") TT_HEAD("A,B|Q ") TT_LINE("0,X|1|22") TT_LINE("X,0|1|22") @@ -817,7 +817,7 @@ NETLIST_START(TTL74XX_lib) TT_FAMILY("74XX") TRUTHTABLE_END() - TRUTHTABLE_START(TTL_7486_XOR, 2, 1, "A,B") + TRUTHTABLE_START(TTL_7486_XOR, 2, 1, "+A,+B") TT_HEAD("A,B|Q ") TT_LINE("0,0|0|15") TT_LINE("0,1|1|22") @@ -837,7 +837,7 @@ NETLIST_START(TTL74XX_lib) TT_FAMILY("74XX") TRUTHTABLE_END() - TRUTHTABLE_START(TTL_74260_NOR, 5, 1, "A,B,C,D,E") + TRUTHTABLE_START(TTL_74260_NOR, 5, 1, "+A,+B,+C,+D,+E") TT_HEAD("A,B,C,D,E|Q ") TT_LINE("0,0,0,0,0|1|10") TT_LINE("X,X,X,X,1|0|12") diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h index 6b515a20c1c..045f7c9b1cb 100644 --- a/src/lib/netlist/nl_base.h +++ b/src/lib/netlist/nl_base.h @@ -960,28 +960,6 @@ namespace netlist virtual void changed() override { } }; - template - class param_rom_t final: public param_data_t - { - public: - - param_rom_t(device_t &device, const pstring name) - : param_data_t(device, name) - { - stream()->read(&m_data[0],1<read(&m_data[0],1< + class param_rom_t final: public param_data_t + { + public: + + param_rom_t(device_t &device, const pstring name) + : param_data_t(device, name) + { + auto f = stream(); + if (f != nullptr) + f->read(&m_data[0],1<read(&m_data[0],1< Create(netlist_t &anetlist, const pstring &name) = 0; + virtual void macro_actions(netlist_t &anetlist, const pstring &name) {}; const pstring &name() const { return m_name; } const pstring &classname() const { return m_classname; } const pstring ¶m_desc() const { return m_def_param; } - const plib::pstring_vector_t term_param_list(); - const plib::pstring_vector_t def_params(); protected: pstring m_name; /* device name */ diff --git a/src/lib/netlist/nl_parser.cpp b/src/lib/netlist/nl_parser.cpp index 6760873a4af..8487e235506 100644 --- a/src/lib/netlist/nl_parser.cpp +++ b/src/lib/netlist/nl_parser.cpp @@ -316,7 +316,7 @@ void parser_t::dippins() error(plib::pfmt("expected a comma, found <{1}>")(n.str()) ); } if ((pins.size() % 2) == 1) - error("You must pass an equal number of pins to DIPPINS"); + error(plib::pfmt("You must pass an equal number of pins to DIPPINS, first pin is {}")(pins[0])); std::size_t n = pins.size(); for (std::size_t i = 0; i < n / 2; i++) { @@ -356,35 +356,29 @@ void parser_t::netdev_hint() void parser_t::device(const pstring &dev_type) { - if (m_setup.is_library_item(dev_type)) + base_factory_t *f = m_setup.factory().factory_by_name(dev_type); + auto paramlist = plib::pstring_vector_t(f->param_desc(), ","); + + pstring devname = get_identifier(); + + m_setup.register_dev(dev_type, m_setup.build_fqn(devname)); + m_setup.log().debug("Parser: IC: {1}\n", devname); + + for (pstring tp : paramlist) { - pstring devname = get_identifier(); - m_setup.namespace_push(devname); - m_setup.include(dev_type); - m_setup.namespace_pop(); - require_token(m_tok_param_right); - } - else - { - base_factory_t *f = m_setup.factory().factory_by_name(dev_type); - plib::pstring_vector_t termlist = f->term_param_list(); - plib::pstring_vector_t def_params = f->def_params(); - - std::size_t cnt; - - pstring devname = get_identifier(); - - m_setup.register_dev(dev_type, m_setup.build_fqn(devname)); - - m_setup.log().debug("Parser: IC: {1}\n", devname); - - cnt = 0; - while (cnt < def_params.size()) + require_token(m_tok_comma); + if (tp.startsWith("+")) { - pstring paramfq = devname + "." + def_params[cnt]; + pstring output_name = get_identifier(); + m_setup.log().debug("Link: {1} {2}\n", tp, output_name); + + m_setup.register_link(devname + "." + tp.substr(1), output_name); + } + else + { + pstring paramfq = devname + "." + tp; m_setup.log().debug("Defparam: {1}\n", paramfq); - require_token(m_tok_comma); token_t tok = get_token(); if (tok.is_type(STRING)) { @@ -395,24 +389,11 @@ void parser_t::device(const pstring &dev_type) nl_double val = eval_param(tok); m_setup.register_param(paramfq, val); } - cnt++; } - - token_t tok = get_token(); - cnt = 0; - while (tok.is(m_tok_comma) && cnt < termlist.size()) - { - pstring output_name = get_identifier(); - - m_setup.register_link(devname + "." + termlist[cnt], output_name); - - cnt++; - tok = get_token(); - } - if (cnt != termlist.size()) - error(plib::pfmt("Input count mismatch for {1} - expected {2} found {3}")(devname)(termlist.size())(cnt)); - require_token(tok, m_tok_param_right); } + + // error(plib::pfmt("Input count mismatch for {1} - expected {2} found {3}")(devname)(termlist.size())(cnt)); + require_token(m_tok_param_right); } diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp index 8ece4c616ec..588b98ae4f4 100644 --- a/src/lib/netlist/nl_setup.cpp +++ b/src/lib/netlist/nl_setup.cpp @@ -103,27 +103,17 @@ void setup_t::namespace_pop() void setup_t::register_lib_entry(const pstring &name) { - if (plib::container::contains(m_lib, name)) - log().warning("Lib entry collection already contains {1}. IGNORED", name); - else - m_lib.push_back(name); + factory().register_device(plib::make_unique_base(*this, name, name, "")); } void setup_t::register_dev(const pstring &classname, const pstring &name) { - if (plib::container::contains(m_lib, classname)) - { - namespace_push(name); - include(classname); - namespace_pop(); - } - else - { - auto f = factory().factory_by_name(classname); - if (f == nullptr) - log().fatal("Class {1} not found!\n", classname); - m_device_factory.push_back(std::pair(build_fqn(name), f)); - } + auto f = factory().factory_by_name(classname); + if (f == nullptr) + log().fatal("Class {1} not found!\n", classname); + /* make sure we parse macro library entries */ + f->macro_actions(netlist(), build_fqn(name)); + m_device_factory.push_back(std::pair(build_fqn(name), f)); } bool setup_t::device_exists(const pstring name) const @@ -165,7 +155,7 @@ void setup_t::register_dippins_arr(const pstring &terms) { plib::pstring_vector_t list(terms,", "); if (list.size() == 0 || (list.size() % 2) == 1) - log().fatal("You must pass an equal number of pins to DIPPINS"); + log().fatal("You must pass an equal number of pins to DIPPINS {1}" , build_fqn("")); std::size_t n = list.size(); for (std::size_t i = 0; i < n / 2; i++) { @@ -349,7 +339,7 @@ const pstring setup_t::resolve_alias(const pstring &name) const ret = temp; auto p = m_alias.find(ret); temp = (p != m_alias.end() ? p->second : ""); - } while (temp != ""); + } while (temp != "" && temp != ret); log().debug("{1}==>{2}\n", name, ret); return ret; @@ -1040,7 +1030,8 @@ std::unique_ptr setup_t::get_data_stream(const pstring name) return strm; } } - log().fatal("unable to find data named {1} in source collection", name); + //log().fatal("unable to find data named {1} in source collection", name); + log().warning("unable to find data named {1} in source collection", name); return std::unique_ptr(nullptr); } diff --git a/src/lib/netlist/nl_setup.h b/src/lib/netlist/nl_setup.h index 399c44e3dbe..617920d0f6b 100644 --- a/src/lib/netlist/nl_setup.h +++ b/src/lib/netlist/nl_setup.h @@ -92,7 +92,7 @@ void NETLIST_NAME(name)(netlist::setup_t &setup) \ desc.classname = #cname ; \ desc.ni = in; \ desc.no = out; \ - desc.def_param = pstring("+") + def_params; \ + desc.def_param = def_params; \ desc.family = ""; #define TT_HEAD(x) \ @@ -255,8 +255,6 @@ namespace netlist factory_list_t &factory() { return m_factory; } const factory_list_t &factory() const { return m_factory; } - bool is_library_item(const pstring &name) const { return plib::container::contains(m_lib, name); } - /* model / family related */ const logic_family_desc_t *family_from_model(const pstring &model); @@ -311,7 +309,6 @@ namespace netlist std::stack m_namespace_stack; source_t::list_t m_sources; std::vector m_defines; - std::vector m_lib; unsigned m_proxy_cnt; unsigned m_frontier_cnt; diff --git a/src/lib/netlist/plib/putil.h b/src/lib/netlist/plib/putil.h index cc388cd3393..9e79e958927 100644 --- a/src/lib/netlist/plib/putil.h +++ b/src/lib/netlist/plib/putil.h @@ -45,6 +45,11 @@ namespace plib con.insert(con.begin() + static_cast(index), elem); } + template + void remove(C &con, const typename C::value_type &elem) + { + con.erase(std::remove(con.begin(), con.end(), elem), con.end()); + } } template diff --git a/src/lib/netlist/prg/nltool.cpp b/src/lib/netlist/prg/nltool.cpp index 0f3d29d00d8..57b6dc6f179 100644 --- a/src/lib/netlist/prg/nltool.cpp +++ b/src/lib/netlist/prg/nltool.cpp @@ -363,6 +363,7 @@ static void listdevices(tool_options_t &opts) pstring out = plib::pfmt("{1} {2}(")(f->classname(),"-20")(f->name()); std::vector terms; + f->macro_actions(nt.setup().netlist(), f->name() + "_lc"); auto d = f->Create(nt.setup().netlist(), f->name() + "_lc"); // get the list of terminals ... @@ -395,18 +396,13 @@ static void listdevices(tool_options_t &opts) } } - if (f->param_desc().startsWith("+")) + out += "," + f->param_desc(); + for (auto p : plib::pstring_vector_t(f->param_desc(),",") ) { - out += "," + f->param_desc().substr(1); - terms.clear(); - } - else if (f->param_desc() == "-") - { - /* no params at all */ - } - else - { - out += "," + f->param_desc(); + if (p.startsWith("+")) + { + plib::container::remove(terms, p.substr(1)); + } } out += ")"; printf("%s\n", out.c_str());