From 6b96f7ba60a384ff8d219ad480b9b2dd77e2986e Mon Sep 17 00:00:00 2001 From: couriersud Date: Fri, 19 Apr 2019 13:54:51 +0200 Subject: netlist: Add power terminals to most logic devices. This fixes an over simplification. Logic devices implicitly assumed that GND/VDD actually is connected to GND(i.e. 0V). There is no immediate benefit from this change. It is a preparation for the future scalability. Now all power terminals (typically 7/14, 8/16) have to be explicitly connected to the supply rails. Also added a validation mode to the netlist core. This is not intended for running, but solely to better indentify pins which are not properly connected. --- src/devices/machine/netlist.cpp | 6 +- src/lib/netlist/devices/nld_2102A.cpp | 9 +- src/lib/netlist/devices/nld_2102A.h | 30 +-- src/lib/netlist/devices/nld_2716.cpp | 8 +- src/lib/netlist/devices/nld_2716.h | 30 +-- src/lib/netlist/devices/nld_74107.cpp | 14 +- src/lib/netlist/devices/nld_74107.h | 16 +- src/lib/netlist/devices/nld_74153.cpp | 130 +++++------- src/lib/netlist/devices/nld_74153.h | 20 +- src/lib/netlist/devices/nld_74161.cpp | 8 +- src/lib/netlist/devices/nld_74161.h | 24 ++- src/lib/netlist/devices/nld_74164.cpp | 10 +- src/lib/netlist/devices/nld_74164.h | 14 +- src/lib/netlist/devices/nld_74165.cpp | 8 +- src/lib/netlist/devices/nld_74165.h | 28 +-- src/lib/netlist/devices/nld_74166.cpp | 8 +- src/lib/netlist/devices/nld_74166.h | 30 +-- src/lib/netlist/devices/nld_74174.cpp | 109 ++++------ src/lib/netlist/devices/nld_74174.h | 22 +- src/lib/netlist/devices/nld_74175.cpp | 8 +- src/lib/netlist/devices/nld_74175.h | 18 +- src/lib/netlist/devices/nld_74192.cpp | 68 +++---- src/lib/netlist/devices/nld_74192.h | 22 +- src/lib/netlist/devices/nld_74193.cpp | 8 +- src/lib/netlist/devices/nld_74193.h | 22 +- src/lib/netlist/devices/nld_74194.cpp | 7 +- src/lib/netlist/devices/nld_74194.h | 26 +-- src/lib/netlist/devices/nld_74365.cpp | 7 +- src/lib/netlist/devices/nld_74365.h | 22 +- src/lib/netlist/devices/nld_7450.cpp | 13 +- src/lib/netlist/devices/nld_7450.h | 14 +- src/lib/netlist/devices/nld_7473.cpp | 11 +- src/lib/netlist/devices/nld_7473.h | 14 +- src/lib/netlist/devices/nld_7474.cpp | 13 +- src/lib/netlist/devices/nld_7474.h | 14 +- src/lib/netlist/devices/nld_7475.cpp | 7 +- src/lib/netlist/devices/nld_7475.h | 26 +-- src/lib/netlist/devices/nld_7483.cpp | 10 +- src/lib/netlist/devices/nld_7483.h | 24 ++- src/lib/netlist/devices/nld_7485.cpp | 7 +- src/lib/netlist/devices/nld_7485.h | 24 ++- src/lib/netlist/devices/nld_7490.cpp | 9 +- src/lib/netlist/devices/nld_7490.h | 18 +- src/lib/netlist/devices/nld_7493.cpp | 9 +- src/lib/netlist/devices/nld_7493.h | 14 +- src/lib/netlist/devices/nld_7497.cpp | 7 +- src/lib/netlist/devices/nld_7497.h | 26 +-- src/lib/netlist/devices/nld_82S115.cpp | 8 +- src/lib/netlist/devices/nld_82S115.h | 28 +-- src/lib/netlist/devices/nld_82S123.cpp | 12 +- src/lib/netlist/devices/nld_82S123.h | 18 +- src/lib/netlist/devices/nld_82S126.cpp | 8 +- src/lib/netlist/devices/nld_82S126.h | 24 ++- src/lib/netlist/devices/nld_82S16.cpp | 8 +- src/lib/netlist/devices/nld_9310.cpp | 328 +++++++++++++----------------- src/lib/netlist/devices/nld_9310.h | 24 ++- src/lib/netlist/devices/nld_9316.cpp | 9 +- src/lib/netlist/devices/nld_9316.h | 24 ++- src/lib/netlist/devices/nld_9322.cpp | 18 +- src/lib/netlist/devices/nld_9322.h | 22 +- src/lib/netlist/devices/nld_am2847.cpp | 19 +- src/lib/netlist/devices/nld_am2847.h | 22 +- src/lib/netlist/devices/nld_dm9314.cpp | 7 +- src/lib/netlist/devices/nld_dm9314.h | 26 +-- src/lib/netlist/devices/nld_dm9334.cpp | 7 +- src/lib/netlist/devices/nld_dm9334.h | 18 +- src/lib/netlist/devices/nlid_cmos.h | 7 +- src/lib/netlist/devices/nlid_proxy.cpp | 102 +++++++--- src/lib/netlist/devices/nlid_proxy.h | 9 +- src/lib/netlist/devices/nlid_system.h | 35 +++- src/lib/netlist/devices/nlid_truthtable.h | 5 + src/lib/netlist/macro/nlm_other.cpp | 11 +- src/lib/netlist/macro/nlm_ttl74xx.cpp | 205 +++++++++---------- src/lib/netlist/macro/nlm_ttl74xx.h | 155 ++++++++------ src/lib/netlist/nl_base.h | 4 +- src/lib/netlist/nl_errstr.h | 4 + src/lib/netlist/nl_parser.cpp | 14 +- src/lib/netlist/nl_setup.cpp | 53 +++-- src/lib/netlist/nl_setup.h | 15 +- src/mame/audio/nl_mario.cpp | 2 + src/mame/audio/nl_zac1b11142.cpp | 7 + src/mame/machine/nl_breakout.cpp | 29 +++ src/mame/machine/nl_gtrak10.cpp | 1 + src/mame/machine/nl_hazelvid.cpp | 4 + src/mame/machine/nl_palestra.cpp | 1 + src/mame/machine/nl_pong.cpp | 1 + src/mame/machine/nl_pongd.cpp | 24 ++- src/mame/machine/nl_prodigy.cpp | 2 + src/mame/machine/nl_rebound.cpp | 22 ++ src/mame/machine/nl_stuntcyc.cpp | 1 + src/mame/machine/nl_tp1983.cpp | 1 + src/mame/machine/nl_tp1985.cpp | 1 + 92 files changed, 1357 insertions(+), 980 deletions(-) diff --git a/src/devices/machine/netlist.cpp b/src/devices/machine/netlist.cpp index 82ee40bf1c2..a5ea1febc75 100644 --- a/src/devices/machine/netlist.cpp +++ b/src/devices/machine/netlist.cpp @@ -81,7 +81,7 @@ protected: m_parent.logerror("netlist ERROR: %s\n", ls.c_str()); break; case plib::plog_level::FATAL: - throw emu_fatalerror(1, "netlist ERROR: %s\n", ls.c_str()); + throw emu_fatalerror(1, "netlist FATAL: %s\n", ls.c_str()); } } @@ -117,7 +117,7 @@ protected: osd_printf_error("netlist ERROR: %s\n", ls.c_str()); break; case plib::plog_level::FATAL: - throw emu_fatalerror(1, "netlist ERROR: %s\n", ls.c_str()); + throw emu_fatalerror(1, "netlist FATAL: %s\n", ls.c_str()); } } @@ -1018,6 +1018,8 @@ void netlist_mame_device::device_validity_check(validity_checker &valid) const { //netlist_mame_t lnetlist(*this, "netlist", plib::make_unique()); netlist::netlist_t lnetlist("netlist", plib::make_unique()); + // enable validation mode + lnetlist.nlstate().setup().enable_validation(); common_dev_start(&lnetlist); } catch (memregion_not_set &err) diff --git a/src/lib/netlist/devices/nld_2102A.cpp b/src/lib/netlist/devices/nld_2102A.cpp index 0ec7132b401..54922ad71cf 100644 --- a/src/lib/netlist/devices/nld_2102A.cpp +++ b/src/lib/netlist/devices/nld_2102A.cpp @@ -7,6 +7,7 @@ #include "nld_2102A.h" #include "netlist/nl_base.h" +#include "nlid_system.h" #define ADDR2BYTE(a) ((a) >> 3) #define ADDR2BIT(a) ((a) & 0x7) @@ -25,6 +26,7 @@ namespace netlist , m_DO(*this, "DO") , m_ram(*this, "m_ram", 0) , m_RAM(*this, "m_RAM", &m_ram[0]) + , m_power_pins(*this) { } @@ -41,6 +43,7 @@ namespace netlist state_array m_ram; // 1024x1 bits param_ptr_t m_RAM; + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(2102A_dip, 2102A) @@ -63,6 +66,10 @@ namespace netlist register_subalias("11", m_DI); register_subalias("12", m_DO); + + register_subalias("10", "VCC"); + register_subalias("9", "GND"); + } }; @@ -97,7 +104,7 @@ namespace netlist m_ram[i] = 0; } - NETLIB_DEVICE_IMPL(2102A, "RAM_2102A", "+CEQ,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7,+A8,+A9,+RWQ,+DI") + NETLIB_DEVICE_IMPL(2102A, "RAM_2102A", "+CEQ,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7,+A8,+A9,+RWQ,+DI,@VCC,@GND") NETLIB_DEVICE_IMPL(2102A_dip,"RAM_2102A_DIP","") } //namespace devices diff --git a/src/lib/netlist/devices/nld_2102A.h b/src/lib/netlist/devices/nld_2102A.h index aa53efde47d..9d2279445f1 100644 --- a/src/lib/netlist/devices/nld_2102A.h +++ b/src/lib/netlist/devices/nld_2102A.h @@ -27,22 +27,24 @@ #include "netlist/nl_setup.h" #define RAM_2102A(name, cCEQ, cA0, cA1, cA2, cA3, cA4, cA5, cA6, cA7, cA8, cA9, cRWQ, cDI) \ - NET_REGISTER_DEV(RAM_2102A, name) \ - NET_CONNECT(name, CEQ, cCEQ) \ - NET_CONNECT(name, A0, cA0) \ - NET_CONNECT(name, A1, cA1) \ - NET_CONNECT(name, A2, cA2) \ - NET_CONNECT(name, A3, cA3) \ - NET_CONNECT(name, A4, cA4) \ - NET_CONNECT(name, A5, cA5) \ - NET_CONNECT(name, A6, cA6) \ - NET_CONNECT(name, A7, cA7) \ - NET_CONNECT(name, A8, cA8) \ - NET_CONNECT(name, A9, cA9) \ - NET_CONNECT(name, RWQ, cRWQ) \ + NET_REGISTER_DEV(RAM_2102A, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, CEQ, cCEQ) \ + NET_CONNECT(name, A0, cA0) \ + NET_CONNECT(name, A1, cA1) \ + NET_CONNECT(name, A2, cA2) \ + NET_CONNECT(name, A3, cA3) \ + NET_CONNECT(name, A4, cA4) \ + NET_CONNECT(name, A5, cA5) \ + NET_CONNECT(name, A6, cA6) \ + NET_CONNECT(name, A7, cA7) \ + NET_CONNECT(name, A8, cA8) \ + NET_CONNECT(name, A9, cA9) \ + NET_CONNECT(name, RWQ, cRWQ) \ NET_CONNECT(name, DI, cDI) -#define RAM_2102A_DIP(name) \ +#define RAM_2102A_DIP(name) \ NET_REGISTER_DEV(RAM_2102A_DIP, name) #endif /* NLD_2102A_H_ */ diff --git a/src/lib/netlist/devices/nld_2716.cpp b/src/lib/netlist/devices/nld_2716.cpp index b021bc95003..02fbec5b4d0 100644 --- a/src/lib/netlist/devices/nld_2716.cpp +++ b/src/lib/netlist/devices/nld_2716.cpp @@ -7,6 +7,7 @@ #include "nld_2716.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -21,6 +22,7 @@ namespace netlist , m_D(*this, {{ "D0", "D1", "D2", "D3", "D4", "D5", "D6", "D7" }}) , m_last_EPQ(*this, "m_last_EPQ", 1) , m_ROM(*this, "ROM") + , m_power_pins(*this) { } @@ -35,6 +37,7 @@ namespace netlist state_var m_last_EPQ; param_rom_t m_ROM; // 16 Kbits, used as 2 Kbit x 8 + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(2716_dip, 2716) @@ -64,6 +67,9 @@ namespace netlist register_subalias("15", m_D[5]); register_subalias("16", m_D[6]); register_subalias("17", m_D[7]); + + register_subalias("12", "GND"); + register_subalias("24", "VCC"); } }; @@ -92,7 +98,7 @@ namespace netlist m_D[i].push((d >> i) & 1, delay); } - NETLIB_DEVICE_IMPL(2716, "EPROM_2716", "+GQ,+EPQ,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7,+A8,+A9,+A10") + NETLIB_DEVICE_IMPL(2716, "EPROM_2716", "+GQ,+EPQ,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7,+A8,+A9,+A10,@VCC,@GND") NETLIB_DEVICE_IMPL(2716_dip, "EPROM_2716_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_2716.h b/src/lib/netlist/devices/nld_2716.h index 363086d6a37..c5e039e1421 100644 --- a/src/lib/netlist/devices/nld_2716.h +++ b/src/lib/netlist/devices/nld_2716.h @@ -31,22 +31,24 @@ #include "netlist/nl_setup.h" #define EPROM_2716(name, cGQ, cEPQ, cA0, cA1, cA2, cA3, cA4, cA5, cA6, cA7, cA8, cA9, cA10) \ - NET_REGISTER_DEV(EPROM_2716, name) \ - NET_CONNECT(name, GQ, cGQ) \ - NET_CONNECT(name, EPQ, cEPQ) \ - NET_CONNECT(name, A0, cA0) \ - NET_CONNECT(name, A1, cA1) \ - NET_CONNECT(name, A2, cA2) \ - NET_CONNECT(name, A3, cA3) \ - NET_CONNECT(name, A4, cA4) \ - NET_CONNECT(name, A5, cA5) \ - NET_CONNECT(name, A6, cA6) \ - NET_CONNECT(name, A7, cA7) \ - NET_CONNECT(name, A8, cA8) \ - NET_CONNECT(name, A9, cA9) \ + NET_REGISTER_DEV(EPROM_2716, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, GQ, cGQ) \ + NET_CONNECT(name, EPQ, cEPQ) \ + NET_CONNECT(name, A0, cA0) \ + NET_CONNECT(name, A1, cA1) \ + NET_CONNECT(name, A2, cA2) \ + NET_CONNECT(name, A3, cA3) \ + NET_CONNECT(name, A4, cA4) \ + NET_CONNECT(name, A5, cA5) \ + NET_CONNECT(name, A6, cA6) \ + NET_CONNECT(name, A7, cA7) \ + NET_CONNECT(name, A8, cA8) \ + NET_CONNECT(name, A9, cA9) \ NET_CONNECT(name, A10, cA10) -#define EPROM_2716_DIP(name) \ +#define EPROM_2716_DIP(name) \ NET_REGISTER_DEV(EPROM_2716_DIP, name) #endif /* NLD_2716_H_ */ diff --git a/src/lib/netlist/devices/nld_74107.cpp b/src/lib/netlist/devices/nld_74107.cpp index 763760e2c6a..a164b9dddbf 100644 --- a/src/lib/netlist/devices/nld_74107.cpp +++ b/src/lib/netlist/devices/nld_74107.cpp @@ -7,6 +7,7 @@ #include "nld_74107.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -25,6 +26,7 @@ namespace netlist , m_J(*this, "J") , m_K(*this, "K") , m_clrQ(*this, "CLRQ") + , m_power_pins(*this) { m_delay[0] = delay_107A[0]; m_delay[1] = delay_107A[1]; @@ -50,6 +52,7 @@ namespace netlist logic_input_t m_K; logic_input_t m_clrQ; + nld_power_pins m_power_pins; void newstate(const netlist_sig_t state) { m_Q.push(state, m_delay[state]); @@ -81,7 +84,7 @@ namespace netlist register_subalias("5", m_2.m_Q); register_subalias("6", m_2.m_QQ); - // register_subalias("7", ); ==> GND + register_subalias("7", "1.GND"); register_subalias("8", m_2.m_J); register_subalias("9", m_2.m_clk); @@ -91,7 +94,10 @@ namespace netlist register_subalias("12", m_1.m_clk); register_subalias("13", m_1.m_clrQ); - // register_subalias("14", ); ==> VCC + register_subalias("14", "1.VCC" ); + + connect("1.GND", "2.GND"); + connect("1.VCC", "2.VCC"); } //NETLIB_RESETI(); @@ -139,8 +145,8 @@ namespace netlist m_clk.activate_hl(); } - NETLIB_DEVICE_IMPL(74107, "TTL_74107", "+CLK,+J,+K,+CLRQ") - NETLIB_DEVICE_IMPL(74107A, "TTL_74107A", "+CLK,+J,+K,+CLRQ") + NETLIB_DEVICE_IMPL(74107, "TTL_74107", "+CLK,+J,+K,+CLRQ,@VCC,@GND") + NETLIB_DEVICE_IMPL(74107A, "TTL_74107A", "+CLK,+J,+K,+CLRQ,@VCC,@GND") NETLIB_DEVICE_IMPL(74107_dip, "TTL_74107_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_74107.h b/src/lib/netlist/devices/nld_74107.h index c6f8864610a..fe0bfbe2fab 100644 --- a/src/lib/netlist/devices/nld_74107.h +++ b/src/lib/netlist/devices/nld_74107.h @@ -66,17 +66,19 @@ #include "netlist/nl_setup.h" -#define TTL_74107A(name, cCLK, cJ, cK, cCLRQ) \ - NET_REGISTER_DEV(TTL_74107A, name) \ - NET_CONNECT(name, CLK, cCLK) \ - NET_CONNECT(name, J, cJ) \ - NET_CONNECT(name, K, cK) \ +#define TTL_74107A(name, cCLK, cJ, cK, cCLRQ) \ + NET_REGISTER_DEV(TTL_74107A, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, CLK, cCLK) \ + NET_CONNECT(name, J, cJ) \ + NET_CONNECT(name, K, cK) \ NET_CONNECT(name, CLRQ, cCLRQ) -#define TTL_74107(name, cCLK, cJ, cK, cCLRQ) \ +#define TTL_74107(name, cCLK, cJ, cK, cCLRQ) \ TTL_74107A(name, cCLK, cJ, cK, cCLRQ) -#define TTL_74107_DIP(name) \ +#define TTL_74107_DIP(name) \ NET_REGISTER_DEV(TTL_74107_DIP, name) #endif /* NLD_74107_H_ */ diff --git a/src/lib/netlist/devices/nld_74153.cpp b/src/lib/netlist/devices/nld_74153.cpp index 136fe61520b..7a7bf61b41c 100644 --- a/src/lib/netlist/devices/nld_74153.cpp +++ b/src/lib/netlist/devices/nld_74153.cpp @@ -7,28 +7,55 @@ #include "nld_74153.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { - namespace devices - { -/* FIXME: timing is not 100% accurate, Strobe and Select inputs have a - * slightly longer timing. - * Convert this to sub-devices at some time. - */ +namespace devices +{ - NETLIB_OBJECT(74153sub) + /* FIXME: timing is not 100% accurate, Strobe and Select inputs have a + * slightly longer timing. + * Convert this to sub-devices at some time. + */ + + NETLIB_OBJECT(74153) { - NETLIB_CONSTRUCTOR(74153sub) - , m_C(*this, {{"C0", "C1", "C2", "C3"}}) - , m_G(*this, "G") + NETLIB_CONSTRUCTOR(74153) + , m_C(*this, {{"C0", "C1", "C2", "C3"}}, NETLIB_DELEGATE(74153, sub)) + , m_G(*this, "G", NETLIB_DELEGATE(74153, sub)) , m_Y(*this, "AY") //FIXME: Change netlists , m_chan(*this, "m_chan", 0) + , m_A(*this, "A") + , m_B(*this, "B") + , m_power_pins(*this) + { + } + + NETLIB_RESETI() { + m_chan = 0; } - NETLIB_RESETI(); - NETLIB_UPDATEI(); + NETLIB_UPDATEI() + { + m_chan = (m_A() | (m_B()<<1)); + sub(); + } + + NETLIB_HANDLERI(sub) + { + constexpr const netlist_time delay[2] = { NLTIME_FROM_NS(23), NLTIME_FROM_NS(18) }; + if (!m_G()) + { + auto t = m_C[m_chan](); + m_Y.push(t, delay[t]); + } + else + { + m_Y.push(0, delay[0]); + } + } public: object_array_t m_C; @@ -37,29 +64,11 @@ namespace netlist logic_output_t m_Y; state_var m_chan; - }; - - NETLIB_OBJECT(74153) - { - NETLIB_CONSTRUCTOR(74153) - , m_sub(*this, "sub") - , m_A(*this, "A") - , m_B(*this, "B") - { - register_subalias("C0", m_sub.m_C[0]); - register_subalias("C1", m_sub.m_C[1]); - register_subalias("C2", m_sub.m_C[2]); - register_subalias("C3", m_sub.m_C[3]); - register_subalias("G", m_sub.m_G); - register_subalias("AY", m_sub.m_Y); //FIXME: Change netlists - } - NETLIB_RESETI() { } - NETLIB_UPDATEI(); - public: - NETLIB_SUB(74153sub) m_sub; logic_input_t m_A; logic_input_t m_B; + + nld_power_pins m_power_pins; }; NETLIB_OBJECT(74153_dip) @@ -67,72 +76,41 @@ namespace netlist NETLIB_CONSTRUCTOR(74153_dip) , m_1(*this, "1") , m_2(*this, "2") - , m_A(*this, "14") // m_2.m_B - , m_B(*this, "2") // m_2.m_B { register_subalias("1", m_1.m_G); + register_subalias("2", m_1.m_B); register_subalias("3", m_1.m_C[3]); register_subalias("4", m_1.m_C[2]); register_subalias("5", m_1.m_C[1]); register_subalias("6", m_1.m_C[0]); register_subalias("7", m_1.m_Y); + register_subalias("8", "1.GND"); register_subalias("9", m_2.m_Y); register_subalias("10", m_2.m_C[0]); register_subalias("11", m_2.m_C[1]); register_subalias("12", m_2.m_C[2]); register_subalias("13", m_2.m_C[3]); + register_subalias("14", m_1.m_A); register_subalias("15", m_2.m_G); + register_subalias("16", "1.VCC"); + connect("1.GND", "2.GND"); + connect("1.VCC", "2.VCC"); + connect(m_1.m_A, m_2.m_A); + connect(m_1.m_B, m_2.m_B); } //NETLIB_RESETI(); - NETLIB_UPDATEI(); + //NETLIB_UPDATEI(); protected: - NETLIB_SUB(74153sub) m_1; - NETLIB_SUB(74153sub) m_2; - logic_input_t m_A; - logic_input_t m_B; + NETLIB_SUB(74153) m_1; + NETLIB_SUB(74153) m_2; }; - - NETLIB_RESET(74153sub) - { - m_chan = 0; - } - - NETLIB_UPDATE(74153sub) - { - const netlist_time delay[2] = { NLTIME_FROM_NS(23), NLTIME_FROM_NS(18) }; - if (!m_G()) - { - auto t = m_C[m_chan](); - m_Y.push(t, delay[t]); - } - else - { - m_Y.push(0, delay[0]); - } - } - - - NETLIB_UPDATE(74153) - { - m_sub.m_chan = (m_A() | (m_B()<<1)); - m_sub.update(); - } - - - NETLIB_UPDATE(74153_dip) - { - m_2.m_chan = m_1.m_chan = (m_A() | (m_B()<<1)); - m_1.update(); - m_2.update(); - } - - NETLIB_DEVICE_IMPL(74153, "TTL_74153", "+C0,+C1,+C2,+C3,+A,+B,+G") + NETLIB_DEVICE_IMPL(74153, "TTL_74153", "+C0,+C1,+C2,+C3,+A,+B,+G,@VCC,@GND") NETLIB_DEVICE_IMPL(74153_dip, "TTL_74153_DIP", "") - } //namespace devices +} //namespace devices } // namespace netlist diff --git a/src/lib/netlist/devices/nld_74153.h b/src/lib/netlist/devices/nld_74153.h index f1c0f056cf7..996ca5931af 100644 --- a/src/lib/netlist/devices/nld_74153.h +++ b/src/lib/netlist/devices/nld_74153.h @@ -47,17 +47,19 @@ #include "netlist/nl_setup.h" -#define TTL_74153(name, cC0, cC1, cC2, cC3, cA, cB, cG) \ - NET_REGISTER_DEV(TTL_74153, name) \ - NET_CONNECT(name, C0, cC0) \ - NET_CONNECT(name, C1, cC1) \ - NET_CONNECT(name, C2, cC2) \ - NET_CONNECT(name, C3, cC3) \ - NET_CONNECT(name, A, cA) \ - NET_CONNECT(name, B, cB) \ +#define TTL_74153(name, cC0, cC1, cC2, cC3, cA, cB, cG) \ + NET_REGISTER_DEV(TTL_74153, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, C0, cC0) \ + NET_CONNECT(name, C1, cC1) \ + NET_CONNECT(name, C2, cC2) \ + NET_CONNECT(name, C3, cC3) \ + NET_CONNECT(name, A, cA) \ + NET_CONNECT(name, B, cB) \ NET_CONNECT(name, G, cG) -#define TTL_74153_DIP(name) \ +#define TTL_74153_DIP(name) \ NET_REGISTER_DEV(TTL_74153_DIP, name) #endif /* NLD_74153_H_ */ diff --git a/src/lib/netlist/devices/nld_74161.cpp b/src/lib/netlist/devices/nld_74161.cpp index 7a3b54d6368..b2d371a6946 100644 --- a/src/lib/netlist/devices/nld_74161.cpp +++ b/src/lib/netlist/devices/nld_74161.cpp @@ -7,6 +7,7 @@ #include "nld_74161.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -31,6 +32,7 @@ namespace netlist , m_last_CLK(*this, "m_last_CLK", 0) , m_Q(*this, {{"QA", "QB", "QC", "QD"}}) , m_RCO(*this, "RCO") + , m_power_pins(*this) { } @@ -53,6 +55,8 @@ namespace netlist object_array_t m_Q; logic_output_t m_RCO; + + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(74161_dip, 74161) @@ -66,6 +70,7 @@ namespace netlist register_subalias("5", m_C); register_subalias("6", m_D); register_subalias("7", m_ENABLEP); + register_subalias("8", "GND"); register_subalias("9", m_LOADQ); register_subalias("10", m_ENABLET); @@ -74,6 +79,7 @@ namespace netlist register_subalias("13", m_Q[1]); register_subalias("14", m_Q[0]); register_subalias("15", m_RCO); + register_subalias("16", "VCC"); } }; @@ -126,7 +132,7 @@ namespace netlist m_RCO.push(tRippleCarryOut, NLTIME_FROM_NS(20)); //FIXME } - NETLIB_DEVICE_IMPL(74161, "TTL_74161", "+A,+B,+C,+D,+CLRQ,+LOADQ,+CLK,+ENABLEP,+ENABLET") + NETLIB_DEVICE_IMPL(74161, "TTL_74161", "+A,+B,+C,+D,+CLRQ,+LOADQ,+CLK,+ENABLEP,+ENABLET,@VCC,@GND") NETLIB_DEVICE_IMPL(74161_dip, "TTL_74161_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_74161.h b/src/lib/netlist/devices/nld_74161.h index f3fa3eab043..91025446891 100644 --- a/src/lib/netlist/devices/nld_74161.h +++ b/src/lib/netlist/devices/nld_74161.h @@ -27,19 +27,21 @@ #include "netlist/nl_setup.h" -#define TTL_74161(name, cA, cB, cC, cD, cCLRQ, cLOADQ, cCLK, cENABLEP, cENABLET) \ - NET_REGISTER_DEV(TTL_74161, name) \ - NET_CONNECT(name, A, cA) \ - NET_CONNECT(name, B, cB) \ - NET_CONNECT(name, C, cC) \ - NET_CONNECT(name, D, cD) \ - NET_CONNECT(name, CLRQ, cCLRQ) \ - NET_CONNECT(name, LOADQ, cLOADQ) \ - NET_CONNECT(name, CLK, cCLK) \ - NET_CONNECT(name, ENABLEP, cENABLEP) \ +#define TTL_74161(name, cA, cB, cC, cD, cCLRQ, cLOADQ, cCLK, cENABLEP, cENABLET) \ + NET_REGISTER_DEV(TTL_74161, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, A, cA) \ + NET_CONNECT(name, B, cB) \ + NET_CONNECT(name, C, cC) \ + NET_CONNECT(name, D, cD) \ + NET_CONNECT(name, CLRQ, cCLRQ) \ + NET_CONNECT(name, LOADQ, cLOADQ) \ + NET_CONNECT(name, CLK, cCLK) \ + NET_CONNECT(name, ENABLEP, cENABLEP) \ NET_CONNECT(name, ENABLET, cENABLET) -#define TTL_74161_DIP(name) \ +#define TTL_74161_DIP(name) \ NET_REGISTER_DEV(TTL_74161_DIP, name) #endif /* NLD_74161_H_ */ diff --git a/src/lib/netlist/devices/nld_74164.cpp b/src/lib/netlist/devices/nld_74164.cpp index b1eb30bb1ba..ed401603181 100644 --- a/src/lib/netlist/devices/nld_74164.cpp +++ b/src/lib/netlist/devices/nld_74164.cpp @@ -10,6 +10,7 @@ #include "nld_74164.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -25,6 +26,7 @@ namespace netlist , m_cnt(*this, "m_cnt", 0) , m_last_CLK(*this, "m_last_CLK", 0) , m_Q(*this, {{"QA", "QB", "QC", "QD", "QE", "QF", "QG", "QH"}}) + , m_power_pins(*this) { } @@ -41,6 +43,7 @@ namespace netlist state_var m_last_CLK; object_array_t m_Q; + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(74164_dip, 74164) @@ -53,6 +56,7 @@ namespace netlist register_subalias("4", m_Q[1]); register_subalias("5", m_Q[2]); register_subalias("6", m_Q[3]); + register_subalias("7", "A.GND"); register_subalias("8", m_CLK); register_subalias("9", m_CLRQ); @@ -60,6 +64,10 @@ namespace netlist register_subalias("11", m_Q[5]); register_subalias("12", m_Q[6]); register_subalias("13", m_Q[7]); + register_subalias("14", "A.VCC"); + + connect("A.GND", "B.GND"); + connect("A.VCC", "B.VCC"); } }; @@ -97,7 +105,7 @@ namespace netlist } } - NETLIB_DEVICE_IMPL(74164, "TTL_74164", "+A,+B,+CLRQ,+CLK") + NETLIB_DEVICE_IMPL(74164, "TTL_74164", "+A,+B,+CLRQ,+CLK,@VCC,@GND") NETLIB_DEVICE_IMPL(74164_dip, "TTL_74164_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_74164.h b/src/lib/netlist/devices/nld_74164.h index dd4e6bd1303..2efe339df2b 100644 --- a/src/lib/netlist/devices/nld_74164.h +++ b/src/lib/netlist/devices/nld_74164.h @@ -44,14 +44,16 @@ #include "netlist/nl_setup.h" -#define TTL_74164(name, cA, cB, cCLRQ, cCLK) \ - NET_REGISTER_DEV(TTL_74164, name) \ - NET_CONNECT(name, A, cA) \ - NET_CONNECT(name, B, cB) \ - NET_CONNECT(name, CLRQ, cCLRQ) \ +#define TTL_74164(name, cA, cB, cCLRQ, cCLK) \ + NET_REGISTER_DEV(TTL_74164, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, A, cA) \ + NET_CONNECT(name, B, cB) \ + NET_CONNECT(name, CLRQ, cCLRQ) \ NET_CONNECT(name, CLK, cCLK) -#define TTL_74164_DIP(name) \ +#define TTL_74164_DIP(name) \ NET_REGISTER_DEV(TTL_74164_DIP, name) #endif /* NLD_74164_H_ */ diff --git a/src/lib/netlist/devices/nld_74165.cpp b/src/lib/netlist/devices/nld_74165.cpp index 521bf4d63d2..9e5d6607fbd 100644 --- a/src/lib/netlist/devices/nld_74165.cpp +++ b/src/lib/netlist/devices/nld_74165.cpp @@ -7,6 +7,7 @@ #include "nld_74165.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -24,6 +25,7 @@ namespace netlist , m_QHQ(*this, "QHQ") , m_shifter(*this, "m_shifter", 0) , m_last_CLK(*this, "m_last_CLK", 0) + , m_power_pins(*this) { } @@ -41,6 +43,7 @@ namespace netlist state_var m_shifter; state_var m_last_CLK; + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(74165_dip, 74165) @@ -54,6 +57,7 @@ namespace netlist register_subalias("5", m_DATA[6]); register_subalias("6", m_DATA[7]); register_subalias("7", m_QHQ); + register_subalias("8", "GND"); register_subalias("9", m_QH); register_subalias("10", m_SER); @@ -62,7 +66,7 @@ namespace netlist register_subalias("13", m_DATA[2]); register_subalias("14", m_DATA[3]); register_subalias("15", m_CLKINH); - + register_subalias("16", "VCC"); } }; @@ -102,7 +106,7 @@ namespace netlist m_QH.push(qh, NLTIME_FROM_NS(20)); // FIXME: Timing } - NETLIB_DEVICE_IMPL(74165, "TTL_74165", "+CLK,+CLKINH,+SH_LDQ,+SER,+A,+B,+C,+D,+E,+F,+G,+H") + NETLIB_DEVICE_IMPL(74165, "TTL_74165", "+CLK,+CLKINH,+SH_LDQ,+SER,+A,+B,+C,+D,+E,+F,+G,+H,@VCC,@GND") NETLIB_DEVICE_IMPL(74165_dip, "TTL_74165_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_74165.h b/src/lib/netlist/devices/nld_74165.h index d282bab622b..51133157dbd 100644 --- a/src/lib/netlist/devices/nld_74165.h +++ b/src/lib/netlist/devices/nld_74165.h @@ -30,21 +30,23 @@ #include "netlist/nl_setup.h" #define TTL_74165(name, cCLK, cCLKINH, cSH_LDQ, cSER, cA, cB, cC, cD, cE, cF, cG, cH) \ - NET_REGISTER_DEV(TTL_74165, name) \ - NET_CONNECT(name, CLK, cCLK) \ - NET_CONNECT(name, CLKINH, cCLKINH) \ - NET_CONNECT(name, SH_LDQ, cSH_LDQ) \ - NET_CONNECT(name, SER, cSER) \ - NET_CONNECT(name, A, cA) \ - NET_CONNECT(name, B, cB) \ - NET_CONNECT(name, C, cC) \ - NET_CONNECT(name, D, cD) \ - NET_CONNECT(name, E, cE) \ - NET_CONNECT(name, F, cF) \ - NET_CONNECT(name, G, cG) \ + NET_REGISTER_DEV(TTL_74165, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, CLK, cCLK) \ + NET_CONNECT(name, CLKINH, cCLKINH) \ + NET_CONNECT(name, SH_LDQ, cSH_LDQ) \ + NET_CONNECT(name, SER, cSER) \ + NET_CONNECT(name, A, cA) \ + NET_CONNECT(name, B, cB) \ + NET_CONNECT(name, C, cC) \ + NET_CONNECT(name, D, cD) \ + NET_CONNECT(name, E, cE) \ + NET_CONNECT(name, F, cF) \ + NET_CONNECT(name, G, cG) \ NET_CONNECT(name, H, cH) -#define TTL_74165_DIP(name) \ +#define TTL_74165_DIP(name) \ NET_REGISTER_DEV(TTL_74165_DIP, name) #endif /* NLD_74165_H_ */ diff --git a/src/lib/netlist/devices/nld_74166.cpp b/src/lib/netlist/devices/nld_74166.cpp index a5049014576..2b9d6be1a3b 100644 --- a/src/lib/netlist/devices/nld_74166.cpp +++ b/src/lib/netlist/devices/nld_74166.cpp @@ -7,6 +7,7 @@ #include "nld_74166.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -25,6 +26,7 @@ namespace netlist , m_shifter(*this, "m_shifter", 0) , m_last_CLRQ(*this, "m_last_CLRQ", 0) , m_last_CLK(*this, "m_last_CLK", 0) + , m_power_pins(*this) { } @@ -43,6 +45,7 @@ namespace netlist state_var m_shifter; state_var m_last_CLRQ; state_var m_last_CLK; + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(74166_dip, 74166) @@ -56,6 +59,7 @@ namespace netlist register_subalias("5", m_DATA[4]); register_subalias("6", m_CLKINH); register_subalias("7", m_CLK); + register_subalias("8", "GND"); register_subalias("9", m_CLRQ); register_subalias("10", m_DATA[3]); @@ -64,7 +68,7 @@ namespace netlist register_subalias("13", m_QH); register_subalias("14", m_DATA[0]); register_subalias("15", m_SH_LDQ); - + register_subalias("16", "VCC"); } }; @@ -121,7 +125,7 @@ namespace netlist m_QH.push(qh, delay); //FIXME } - NETLIB_DEVICE_IMPL(74166, "TTL_74166", "+CLK,+CLKINH,+SH_LDQ,+SER,+A,+B,+C,+D,+E,+F,+G,+H,+CLRQ") + NETLIB_DEVICE_IMPL(74166, "TTL_74166", "+CLK,+CLKINH,+SH_LDQ,+SER,+A,+B,+C,+D,+E,+F,+G,+H,+CLRQ,@VCC,@GND") NETLIB_DEVICE_IMPL(74166_dip,"TTL_74166_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_74166.h b/src/lib/netlist/devices/nld_74166.h index 80c86bb3422..be9cb7fdc4c 100644 --- a/src/lib/netlist/devices/nld_74166.h +++ b/src/lib/netlist/devices/nld_74166.h @@ -30,22 +30,24 @@ #include "netlist/nl_setup.h" #define TTL_74166(name, cCLK, cCLKINH, cSH_LDQ, cSER, cA, cB, cC, cD, cE, cF, cG, cH, cCLRQ) \ - NET_REGISTER_DEV(TTL_74166, name) \ - NET_CONNECT(name, CLK, cCLK) \ - NET_CONNECT(name, CLKINH, cCLKINH) \ - NET_CONNECT(name, SH_LDQ, cSH_LDQ) \ - NET_CONNECT(name, SER, cSER) \ - NET_CONNECT(name, A, cA) \ - NET_CONNECT(name, B, cB) \ - NET_CONNECT(name, C, cC) \ - NET_CONNECT(name, D, cD) \ - NET_CONNECT(name, E, cE) \ - NET_CONNECT(name, F, cF) \ - NET_CONNECT(name, G, cG) \ - NET_CONNECT(name, H, cH) \ + NET_REGISTER_DEV(TTL_74166, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, CLK, cCLK) \ + NET_CONNECT(name, CLKINH, cCLKINH) \ + NET_CONNECT(name, SH_LDQ, cSH_LDQ) \ + NET_CONNECT(name, SER, cSER) \ + NET_CONNECT(name, A, cA) \ + NET_CONNECT(name, B, cB) \ + NET_CONNECT(name, C, cC) \ + NET_CONNECT(name, D, cD) \ + NET_CONNECT(name, E, cE) \ + NET_CONNECT(name, F, cF) \ + NET_CONNECT(name, G, cG) \ + NET_CONNECT(name, H, cH) \ NET_CONNECT(name, CLRQ, cCLRQ) -#define TTL_74166_DIP(name) \ +#define TTL_74166_DIP(name) \ NET_REGISTER_DEV(TTL_74166_DIP, name) #endif /* NLD_74166_H_ */ diff --git a/src/lib/netlist/devices/nld_74174.cpp b/src/lib/netlist/devices/nld_74174.cpp index 83369075db6..bb6ecc1510b 100644 --- a/src/lib/netlist/devices/nld_74174.cpp +++ b/src/lib/netlist/devices/nld_74174.cpp @@ -7,56 +7,51 @@ #include "nld_74174.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { - namespace devices - { - NETLIB_OBJECT(74174_sub) +namespace devices +{ + NETLIB_OBJECT(74174) { - NETLIB_CONSTRUCTOR(74174_sub) - , m_CLK(*this, "CLK") + NETLIB_CONSTRUCTOR(74174) + , m_CLK(*this, "CLK", NETLIB_DELEGATE(74174, sub)) , m_Q(*this, {{"Q1", "Q2", "Q3", "Q4", "Q5", "Q6"}}) , m_clrq(*this, "m_clr", 0) , m_data(*this, "m_data", 0) + , m_D(*this, {{"D1", "D2", "D3", "D4", "D5", "D6"}}) + , m_CLRQ(*this, "CLRQ") + , m_power_pins(*this) { } NETLIB_RESETI(); NETLIB_UPDATEI(); - public: + NETLIB_HANDLERI(sub) + { + if (m_clrq) + { + for (std::size_t i=0; i<6; i++) + { + netlist_sig_t d = (m_data >> i) & 1; + m_Q[i].push(d, NLTIME_FROM_NS(25)); + } + m_CLK.inactivate(); + } + } + + protected: logic_input_t m_CLK; object_array_t m_Q; state_var m_clrq; state_var m_data; - }; - - NETLIB_OBJECT(74174) - { - NETLIB_CONSTRUCTOR(74174) - , m_sub(*this, "sub") - , m_D(*this, {{"D1", "D2", "D3", "D4", "D5", "D6"}}) - , m_CLRQ(*this, "CLRQ") - { - register_subalias("CLK", m_sub.m_CLK); - - register_subalias("Q1", m_sub.m_Q[0]); - register_subalias("Q2", m_sub.m_Q[1]); - register_subalias("Q3", m_sub.m_Q[2]); - register_subalias("Q4", m_sub.m_Q[3]); - register_subalias("Q5", m_sub.m_Q[4]); - register_subalias("Q6", m_sub.m_Q[5]); - } - NETLIB_RESETI(); - NETLIB_UPDATEI(); - - protected: - NETLIB_SUB(74174_sub) m_sub; object_array_t m_D; logic_input_t m_CLRQ; + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(74174_dip, 74174) @@ -64,47 +59,31 @@ namespace netlist NETLIB_CONSTRUCTOR_DERIVED(74174_dip, 74174) { register_subalias("1", m_CLRQ); - register_subalias("9", m_sub.m_CLK); + register_subalias("9", m_CLK); register_subalias("3", m_D[0]); - register_subalias("2", m_sub.m_Q[0]); + register_subalias("2", m_Q[0]); register_subalias("4", m_D[1]); - register_subalias("5", m_sub.m_Q[1]); + register_subalias("5", m_Q[1]); register_subalias("6", m_D[2]); - register_subalias("7", m_sub.m_Q[2]); + register_subalias("7", m_Q[2]); register_subalias("11", m_D[3]); - register_subalias("10", m_sub.m_Q[3]); + register_subalias("10", m_Q[3]); register_subalias("13", m_D[4]); - register_subalias("12", m_sub.m_Q[4]); + register_subalias("12", m_Q[4]); register_subalias("14", m_D[5]); - register_subalias("15", m_sub.m_Q[5]); - } - }; + register_subalias("15", m_Q[5]); - NETLIB_RESET(74174_sub) - { - m_CLK.set_state(logic_t::STATE_INP_LH); - m_clrq = 0; - m_data = 0xFF; - } + register_subalias("8", "GND"); + register_subalias("16", "VCC"); - NETLIB_UPDATE(74174_sub) - { - if (m_clrq) - { - for (std::size_t i=0; i<6; i++) - { - netlist_sig_t d = (m_data >> i) & 1; - m_Q[i].push(d, NLTIME_FROM_NS(25)); - } - m_CLK.inactivate(); } - } + }; NETLIB_UPDATE(74174) { @@ -113,28 +92,30 @@ namespace netlist { d |= (m_D[i]() << i); } - m_sub.m_clrq = m_CLRQ(); - if (!m_sub.m_clrq) + m_clrq = m_CLRQ(); + if (!m_clrq) { for (std::size_t i=0; i<6; i++) { - m_sub.m_Q[i].push(0, NLTIME_FROM_NS(40)); + m_Q[i].push(0, NLTIME_FROM_NS(40)); } - m_sub.m_data = 0; - } else if (d != m_sub.m_data) + m_data = 0; + } else if (d != m_data) { - m_sub.m_data = d; - m_sub.m_CLK.activate_lh(); + m_data = d; + m_CLK.activate_lh(); } } NETLIB_RESET(74174) { - //m_sub.do_reset(); + m_CLK.set_state(logic_t::STATE_INP_LH); + m_clrq = 0; + m_data = 0xFF; } - NETLIB_DEVICE_IMPL(74174, "TTL_74174", "+CLK,+D1,+D2,+D3,+D4,+D5,+D6,+CLRQ") + NETLIB_DEVICE_IMPL(74174, "TTL_74174", "+CLK,+D1,+D2,+D3,+D4,+D5,+D6,+CLRQ,@VCC,@GND") NETLIB_DEVICE_IMPL(74174_dip,"TTL_74174_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_74174.h b/src/lib/netlist/devices/nld_74174.h index f1854801291..4fe23739aad 100644 --- a/src/lib/netlist/devices/nld_74174.h +++ b/src/lib/netlist/devices/nld_74174.h @@ -38,18 +38,20 @@ #include "netlist/nl_setup.h" -#define TTL_74174(name, cCLK, cD1, cD2, cD3, cD4, cD5, cD6, cCLRQ) \ - NET_REGISTER_DEV(TTL_74174, name) \ - NET_CONNECT(name, CLK, cCLK) \ - NET_CONNECT(name, D1, cD1) \ - NET_CONNECT(name, D2, cD2) \ - NET_CONNECT(name, D3, cD3) \ - NET_CONNECT(name, D4, cD4) \ - NET_CONNECT(name, D5, cD5) \ - NET_CONNECT(name, D6, cD6) \ +#define TTL_74174(name, cCLK, cD1, cD2, cD3, cD4, cD5, cD6, cCLRQ) \ + NET_REGISTER_DEV(TTL_74174, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, CLK, cCLK) \ + NET_CONNECT(name, D1, cD1) \ + NET_CONNECT(name, D2, cD2) \ + NET_CONNECT(name, D3, cD3) \ + NET_CONNECT(name, D4, cD4) \ + NET_CONNECT(name, D5, cD5) \ + NET_CONNECT(name, D6, cD6) \ NET_CONNECT(name, CLRQ, cCLRQ) -#define TTL_74174_DIP(name) \ +#define TTL_74174_DIP(name) \ NET_REGISTER_DEV(TTL_74174_DIP, name) diff --git a/src/lib/netlist/devices/nld_74175.cpp b/src/lib/netlist/devices/nld_74175.cpp index a15adb5c60f..145c5887476 100644 --- a/src/lib/netlist/devices/nld_74175.cpp +++ b/src/lib/netlist/devices/nld_74175.cpp @@ -7,6 +7,7 @@ #include "nld_74175.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -22,6 +23,7 @@ namespace netlist , m_Q(*this, {{"Q1", "Q2", "Q3", "Q4"}}) , m_QQ(*this, {{"Q1Q", "Q2Q", "Q3Q", "Q4Q"}}) , m_data(*this, "m_data", 0) + , m_power_pins(*this) { } @@ -38,6 +40,7 @@ namespace netlist object_array_t m_QQ; state_var m_data; + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(74175_dip, 74175) @@ -62,6 +65,9 @@ namespace netlist register_subalias("13", m_D[3]); register_subalias("15", m_Q[3]); register_subalias("14", m_QQ[3]); + + register_subalias("8", "GND"); + register_subalias("16", "VCC"); } }; @@ -111,7 +117,7 @@ namespace netlist m_data = 0xFF; } - NETLIB_DEVICE_IMPL(74175, "TTL_74175", "+CLK,+D1,+D2,+D3,+D4,+CLRQ") + NETLIB_DEVICE_IMPL(74175, "TTL_74175", "+CLK,+D1,+D2,+D3,+D4,+CLRQ,@VCC,@GND") NETLIB_DEVICE_IMPL(74175_dip,"TTL_74175_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_74175.h b/src/lib/netlist/devices/nld_74175.h index 4bc8c1175ba..b29d4680813 100644 --- a/src/lib/netlist/devices/nld_74175.h +++ b/src/lib/netlist/devices/nld_74175.h @@ -38,16 +38,18 @@ #include "netlist/nl_setup.h" -#define TTL_74175(name, cCLK, cD1, cD2, cD3, cD4, cCLRQ) \ - NET_REGISTER_DEV(TTL_74175, name) \ - NET_CONNECT(name, CLK, cCLK) \ - NET_CONNECT(name, D1, cD1) \ - NET_CONNECT(name, D2, cD2) \ - NET_CONNECT(name, D3, cD3) \ - NET_CONNECT(name, D4, cD4) \ +#define TTL_74175(name, cCLK, cD1, cD2, cD3, cD4, cCLRQ) \ + NET_REGISTER_DEV(TTL_74175, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, CLK, cCLK) \ + NET_CONNECT(name, D1, cD1) \ + NET_CONNECT(name, D2, cD2) \ + NET_CONNECT(name, D3, cD3) \ + NET_CONNECT(name, D4, cD4) \ NET_CONNECT(name, CLRQ, cCLRQ) -#define TTL_74175_DIP(name) \ +#define TTL_74175_DIP(name) \ NET_REGISTER_DEV(TTL_74175_DIP, name) diff --git a/src/lib/netlist/devices/nld_74192.cpp b/src/lib/netlist/devices/nld_74192.cpp index 954fc351179..bedc045164d 100644 --- a/src/lib/netlist/devices/nld_74192.cpp +++ b/src/lib/netlist/devices/nld_74192.cpp @@ -7,6 +7,7 @@ #include "nld_74192.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -15,35 +16,9 @@ namespace netlist static constexpr const unsigned MAXCNT = 9; - NETLIB_OBJECT(74192_subABCD) - { - NETLIB_CONSTRUCTOR(74192_subABCD) - , m_A(*this, "A") - , m_B(*this, "B") - , m_C(*this, "C") - , m_D(*this, "D") - { - } - - //NETLIB_RESETI() - //NETLIB_UPDATEI(); - - public: - logic_input_t m_A; - logic_input_t m_B; - logic_input_t m_C; - logic_input_t m_D; - - unsigned read_ABCD() const - { - return (m_D() << 3) | (m_C() << 2) | (m_B() << 1) | (m_A() << 0); - } - }; - NETLIB_OBJECT(74192) { NETLIB_CONSTRUCTOR(74192) - , m_ABCD(*this, "subABCD") , m_CLEAR(*this, "CLEAR") , m_LOADQ(*this, "LOADQ") , m_CU(*this, "CU") @@ -54,18 +29,18 @@ namespace netlist , m_Q(*this, {{"QA", "QB", "QC", "QD"}}) , m_BORROWQ(*this, "BORROWQ") , m_CARRYQ(*this, "CARRYQ") + , m_A(*this, "A", NETLIB_DELEGATE(74192, sub)) + , m_B(*this, "B", NETLIB_DELEGATE(74192, sub)) + , m_C(*this, "C", NETLIB_DELEGATE(74192, sub)) + , m_D(*this, "D", NETLIB_DELEGATE(74192, sub)) + , m_power_pins(*this) { - register_subalias("A", m_ABCD.m_A); - register_subalias("B", m_ABCD.m_B); - register_subalias("C", m_ABCD.m_C); - register_subalias("D", m_ABCD.m_D); } NETLIB_RESETI(); NETLIB_UPDATEI(); protected: - NETLIB_SUB(74192_subABCD) m_ABCD; logic_input_t m_CLEAR; logic_input_t m_LOADQ; logic_input_t m_CU; @@ -78,27 +53,46 @@ namespace netlist object_array_t m_Q; logic_output_t m_BORROWQ; logic_output_t m_CARRYQ; + + logic_input_t m_A; + logic_input_t m_B; + logic_input_t m_C; + logic_input_t m_D; + nld_power_pins m_power_pins; + + NETLIB_HANDLERI(sub) + { + // FIXME: can use more optimization + } + + unsigned read_ABCD() const + { + return (m_D() << 3) | (m_C() << 2) | (m_B() << 1) | (m_A() << 0); + } + }; NETLIB_OBJECT_DERIVED(74192_dip, 74192) { NETLIB_CONSTRUCTOR_DERIVED(74192_dip, 74192) { - register_subalias("1", m_ABCD.m_B); + register_subalias("1", m_B); register_subalias("2", m_Q[1]); register_subalias("3", m_Q[0]); register_subalias("4", m_CD); register_subalias("5", m_CU); register_subalias("6", m_Q[2]); register_subalias("7", m_Q[3]); + register_subalias("8", "GND"); - register_subalias("9", m_ABCD.m_D); - register_subalias("10", m_ABCD.m_C); + register_subalias("9", m_D); + register_subalias("10", m_C); register_subalias("11", m_LOADQ); register_subalias("12", m_CARRYQ); register_subalias("13", m_BORROWQ); register_subalias("14", m_CLEAR); - register_subalias("15", m_ABCD.m_A); + register_subalias("15", m_A); + register_subalias("16", "VCC"); } }; @@ -128,7 +122,7 @@ namespace netlist } else if (!m_LOADQ()) { - m_cnt = m_ABCD.read_ABCD(); + m_cnt = read_ABCD(); } else { @@ -162,7 +156,7 @@ namespace netlist m_CARRYQ.push(tCarry, NLTIME_FROM_NS(20)); //FIXME } - NETLIB_DEVICE_IMPL(74192, "TTL_74192", "+A,+B,+C,+D,+CLEAR,+LOADQ,+CU,+CD") + NETLIB_DEVICE_IMPL(74192, "TTL_74192", "+A,+B,+C,+D,+CLEAR,+LOADQ,+CU,+CD,@VCC,@GND") NETLIB_DEVICE_IMPL(74192_dip,"TTL_74192_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_74192.h b/src/lib/netlist/devices/nld_74192.h index 9b0139070b8..81397f355ae 100644 --- a/src/lib/netlist/devices/nld_74192.h +++ b/src/lib/netlist/devices/nld_74192.h @@ -31,18 +31,20 @@ #include "netlist/nl_setup.h" -#define TTL_74192(name, cA, cB, cC, cD, cCLEAR, cLOADQ, cCU, cCD) \ - NET_REGISTER_DEV(TTL_74192, name) \ - NET_CONNECT(name, A, cA) \ - NET_CONNECT(name, B, cB) \ - NET_CONNECT(name, C, cC) \ - NET_CONNECT(name, D, cD) \ - NET_CONNECT(name, CLEAR, cCLEAR) \ - NET_CONNECT(name, LOADQ, cLOADQ) \ - NET_CONNECT(name, CU, cCU) \ +#define TTL_74192(name, cA, cB, cC, cD, cCLEAR, cLOADQ, cCU, cCD) \ + NET_REGISTER_DEV(TTL_74192, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, A, cA) \ + NET_CONNECT(name, B, cB) \ + NET_CONNECT(name, C, cC) \ + NET_CONNECT(name, D, cD) \ + NET_CONNECT(name, CLEAR, cCLEAR) \ + NET_CONNECT(name, LOADQ, cLOADQ) \ + NET_CONNECT(name, CU, cCU) \ NET_CONNECT(name, CD, cCD) -#define TTL_74192_DIP(name) \ +#define TTL_74192_DIP(name) \ NET_REGISTER_DEV(TTL_74192_DIP, name) #endif /* NLD_74192_H_ */ diff --git a/src/lib/netlist/devices/nld_74193.cpp b/src/lib/netlist/devices/nld_74193.cpp index 16d7438d799..5e919a78a9a 100644 --- a/src/lib/netlist/devices/nld_74193.cpp +++ b/src/lib/netlist/devices/nld_74193.cpp @@ -7,6 +7,7 @@ #include "nld_74193.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -31,6 +32,7 @@ namespace netlist , m_Q(*this, {{"QA", "QB", "QC", "QD"}}) , m_BORROWQ(*this, "BORROWQ") , m_CARRYQ(*this, "CARRYQ") + , m_power_pins(*this) { } @@ -54,6 +56,7 @@ namespace netlist object_array_t m_Q; logic_output_t m_BORROWQ; logic_output_t m_CARRYQ; + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(74193_dip, 74193) @@ -67,6 +70,7 @@ namespace netlist register_subalias("5", m_CU); register_subalias("6", m_Q[2]); register_subalias("7", m_Q[3]); + register_subalias("8", "GND"); register_subalias("9", m_D); register_subalias("10", m_C); @@ -75,7 +79,7 @@ namespace netlist register_subalias("13", m_BORROWQ); register_subalias("14", m_CLEAR); register_subalias("15", m_A); - + register_subalias("16", "VCC"); } }; @@ -139,7 +143,7 @@ namespace netlist m_CARRYQ.push(tCarry, NLTIME_FROM_NS(20)); //FIXME timing } - NETLIB_DEVICE_IMPL(74193, "TTL_74193", "+A,+B,+C,+D,+CLEAR,+LOADQ,+CU,+CD") + NETLIB_DEVICE_IMPL(74193, "TTL_74193", "+A,+B,+C,+D,+CLEAR,+LOADQ,+CU,+CD,@VCC,@GND") NETLIB_DEVICE_IMPL(74193_dip, "TTL_74193_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_74193.h b/src/lib/netlist/devices/nld_74193.h index a4c745d5386..493e6854266 100644 --- a/src/lib/netlist/devices/nld_74193.h +++ b/src/lib/netlist/devices/nld_74193.h @@ -28,18 +28,20 @@ #include "netlist/nl_setup.h" -#define TTL_74193(name, cA, cB, cC, cD, cCLEAR, cLOADQ, cCU, cCD) \ - NET_REGISTER_DEV(TTL_74193, name) \ - NET_CONNECT(name, A, cA) \ - NET_CONNECT(name, B, cB) \ - NET_CONNECT(name, C, cC) \ - NET_CONNECT(name, D, cD) \ - NET_CONNECT(name, CLEAR, cCLEAR) \ - NET_CONNECT(name, LOADQ, cLOADQ) \ - NET_CONNECT(name, CU, cCU) \ +#define TTL_74193(name, cA, cB, cC, cD, cCLEAR, cLOADQ, cCU, cCD) \ + NET_REGISTER_DEV(TTL_74193, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, A, cA) \ + NET_CONNECT(name, B, cB) \ + NET_CONNECT(name, C, cC) \ + NET_CONNECT(name, D, cD) \ + NET_CONNECT(name, CLEAR, cCLEAR) \ + NET_CONNECT(name, LOADQ, cLOADQ) \ + NET_CONNECT(name, CU, cCU) \ NET_CONNECT(name, CD, cCD) -#define TTL_74193_DIP(name) \ +#define TTL_74193_DIP(name) \ NET_REGISTER_DEV(TTL_74193_DIP, name) #endif /* NLD_74193_H_ */ diff --git a/src/lib/netlist/devices/nld_74194.cpp b/src/lib/netlist/devices/nld_74194.cpp index 9876aa6b170..f42032ef91b 100644 --- a/src/lib/netlist/devices/nld_74194.cpp +++ b/src/lib/netlist/devices/nld_74194.cpp @@ -7,6 +7,7 @@ #include "nld_74194.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -25,6 +26,7 @@ namespace netlist , m_Q(*this, {{"QD", "QC", "QB", "QA"}}) , m_last_CLK(*this, "m_last_CLK", 0) , m_last_Q(*this, "m_last_Q", 0) + , m_power_pins(*this) { } @@ -43,6 +45,7 @@ namespace netlist state_var m_last_CLK; state_var m_last_Q; + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(74194_dip, 74194) @@ -56,6 +59,7 @@ namespace netlist register_subalias("5", m_DATA[1]); register_subalias("6", m_DATA[0]); register_subalias("7", m_SLIN); + register_subalias("8", "GND"); register_subalias("9", m_S0); register_subalias("10", m_S1); @@ -64,6 +68,7 @@ namespace netlist register_subalias("13", m_Q[1]); register_subalias("14", m_Q[2]); register_subalias("15", m_Q[3]); + register_subalias("16", "VCC"); } }; @@ -116,7 +121,7 @@ namespace netlist m_Q[i].push((q >> i) & 1, NLTIME_FROM_NS(26)); // FIXME: Timing } - NETLIB_DEVICE_IMPL(74194, "TTL_74194", "+CLK,+S0,+S1,+SRIN,+A,+B,+C,+D,+SLIN,+CLRQ") + NETLIB_DEVICE_IMPL(74194, "TTL_74194", "+CLK,+S0,+S1,+SRIN,+A,+B,+C,+D,+SLIN,+CLRQ,@VCC,@GND") NETLIB_DEVICE_IMPL(74194_dip, "TTL_74194_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_74194.h b/src/lib/netlist/devices/nld_74194.h index 5a507982b81..2432a6ece97 100644 --- a/src/lib/netlist/devices/nld_74194.h +++ b/src/lib/netlist/devices/nld_74194.h @@ -28,20 +28,22 @@ #include "netlist/nl_setup.h" -#define TTL_74194(name, cCLK, cS0, cS1, cSRIN, cA, cB, cC, cD, cSLIN, cCLRQ) \ - NET_REGISTER_DEV(TTL_74194, name) \ - NET_CONNECT(name, CLK, cCLK) \ - NET_CONNECT(name, S0, cS0) \ - NET_CONNECT(name, S1, cS1) \ - NET_CONNECT(name, SRIN, cSRIN) \ - NET_CONNECT(name, A, cA) \ - NET_CONNECT(name, B, cB) \ - NET_CONNECT(name, C, cC) \ - NET_CONNECT(name, D, cD) \ - NET_CONNECT(name, SLIN, cSLIN) \ +#define TTL_74194(name, cCLK, cS0, cS1, cSRIN, cA, cB, cC, cD, cSLIN, cCLRQ) \ + NET_REGISTER_DEV(TTL_74194, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, CLK, cCLK) \ + NET_CONNECT(name, S0, cS0) \ + NET_CONNECT(name, S1, cS1) \ + NET_CONNECT(name, SRIN, cSRIN) \ + NET_CONNECT(name, A, cA) \ + NET_CONNECT(name, B, cB) \ + NET_CONNECT(name, C, cC) \ + NET_CONNECT(name, D, cD) \ + NET_CONNECT(name, SLIN, cSLIN) \ NET_CONNECT(name, CLRQ, cCLRQ) -#define TTL_74194_DIP(name) \ +#define TTL_74194_DIP(name) \ NET_REGISTER_DEV(TTL_74194_DIP, name) #endif /* NLD_74194_H_ */ diff --git a/src/lib/netlist/devices/nld_74365.cpp b/src/lib/netlist/devices/nld_74365.cpp index 753f16bfd22..85271d7861b 100644 --- a/src/lib/netlist/devices/nld_74365.cpp +++ b/src/lib/netlist/devices/nld_74365.cpp @@ -7,6 +7,7 @@ #include "nld_74365.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -27,6 +28,7 @@ namespace netlist , m_G2Q(*this, "G2Q") , m_A(*this, {{ "A1", "A2", "A3", "A4", "A5", "A6" }}) , m_Y(*this, {{ "Y1", "Y2", "Y3", "Y4", "Y5", "Y6" }}) + , m_power_pins(*this) { } @@ -37,6 +39,7 @@ namespace netlist logic_input_t m_G2Q; object_array_t m_A; object_array_t m_Y; + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(74365_dip, 74365) @@ -50,6 +53,7 @@ namespace netlist register_subalias("5", m_Y[1]); register_subalias("6", m_A[2]); register_subalias("7", m_Y[2]); + register_subalias("8", "GND"); register_subalias("9", m_A[3]); register_subalias("10", m_Y[3]); @@ -58,6 +62,7 @@ namespace netlist register_subalias("13", m_A[5]); register_subalias("14", m_Y[5]); register_subalias("15", m_G2Q); + register_subalias("16", "VCC"); } }; @@ -76,7 +81,7 @@ namespace netlist } } - NETLIB_DEVICE_IMPL(74365, "TTL_74365", "+G1Q,+G2Q,+A1,+A2,+A3,+A4,+A5,+A6") + NETLIB_DEVICE_IMPL(74365, "TTL_74365", "+G1Q,+G2Q,+A1,+A2,+A3,+A4,+A5,+A6,@VCC,@GND") NETLIB_DEVICE_IMPL(74365_dip, "TTL_74365_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_74365.h b/src/lib/netlist/devices/nld_74365.h index a50b535383f..1aeeddaff8d 100644 --- a/src/lib/netlist/devices/nld_74365.h +++ b/src/lib/netlist/devices/nld_74365.h @@ -27,18 +27,20 @@ #include "netlist/nl_setup.h" -#define TTL_74365(name, cG1Q, cG2Q, cA1, cA2, cA3, cA4, cA5, cA6) \ - NET_REGISTER_DEV(TTL_74365, name) \ - NET_CONNECT(name, G1Q, cG1Q) \ - NET_CONNECT(name, G2Q, cG2Q) \ - NET_CONNECT(name, A1, cA1) \ - NET_CONNECT(name, A2, cA2) \ - NET_CONNECT(name, A3, cA3) \ - NET_CONNECT(name, A4, cA4) \ - NET_CONNECT(name, A5, cA5) \ +#define TTL_74365(name, cG1Q, cG2Q, cA1, cA2, cA3, cA4, cA5, cA6) \ + NET_REGISTER_DEV(TTL_74365, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, G1Q, cG1Q) \ + NET_CONNECT(name, G2Q, cG2Q) \ + NET_CONNECT(name, A1, cA1) \ + NET_CONNECT(name, A2, cA2) \ + NET_CONNECT(name, A3, cA3) \ + NET_CONNECT(name, A4, cA4) \ + NET_CONNECT(name, A5, cA5) \ NET_CONNECT(name, A6, cA6) -#define TTL_74365_DIP(name) \ +#define TTL_74365_DIP(name) \ NET_REGISTER_DEV(TTL_74365_DIP, name) #endif /* NLD_74365_H_ */ diff --git a/src/lib/netlist/devices/nld_7450.cpp b/src/lib/netlist/devices/nld_7450.cpp index aacab46a021..176d27966e9 100644 --- a/src/lib/netlist/devices/nld_7450.cpp +++ b/src/lib/netlist/devices/nld_7450.cpp @@ -7,6 +7,7 @@ #include "nld_7450.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -20,6 +21,7 @@ namespace netlist , m_C(*this, "C") , m_D(*this, "D") , m_Q(*this, "Q") + , m_power_pins(*this) { } //NETLIB_RESETI(); @@ -31,6 +33,7 @@ namespace netlist logic_input_t m_C; logic_input_t m_D; logic_output_t m_Q; + nld_power_pins m_power_pins; }; NETLIB_OBJECT(7450_dip) @@ -45,7 +48,7 @@ namespace netlist register_subalias("4", m_2.m_C); register_subalias("5", m_2.m_D); register_subalias("6", m_2.m_Q); - //register_subalias("7",); GND + register_subalias("7", "1.GND"); register_subalias("8", m_1.m_Q); register_subalias("9", m_1.m_C); @@ -53,7 +56,11 @@ namespace netlist //register_subalias("11", m_1.m_X1); //register_subalias("12", m_1.m_X1Q); register_subalias("13", m_1.m_B); - //register_subalias("14",); VCC + register_subalias("14", "1.VCC"); + + connect("1.GND", "2.GND"); + connect("1.VCC", "2.VCC"); + } //NETLIB_RESETI(); //NETLIB_UPDATEI(); @@ -97,7 +104,7 @@ namespace netlist m_Q.push(res, times[res]);// ? 22000 : 15000); } - NETLIB_DEVICE_IMPL(7450, "TTL_7450_ANDORINVERT", "+A,+B,+C,+D") + NETLIB_DEVICE_IMPL(7450, "TTL_7450_ANDORINVERT", "+A,+B,+C,+D,@VCC,@GND") NETLIB_DEVICE_IMPL(7450_dip, "TTL_7450_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_7450.h b/src/lib/netlist/devices/nld_7450.h index 6718afd8f9e..431eaaaa65d 100644 --- a/src/lib/netlist/devices/nld_7450.h +++ b/src/lib/netlist/devices/nld_7450.h @@ -26,14 +26,16 @@ #include "netlist/nl_setup.h" -#define TTL_7450_ANDORINVERT(name, cI1, cI2, cI3, cI4) \ - NET_REGISTER_DEV(TTL_7450_ANDORINVERT, name) \ - NET_CONNECT(name, A, cI1) \ - NET_CONNECT(name, B, cI2) \ - NET_CONNECT(name, C, cI3) \ +#define TTL_7450_ANDORINVERT(name, cI1, cI2, cI3, cI4) \ + NET_REGISTER_DEV(TTL_7450_ANDORINVERT, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, A, cI1) \ + NET_CONNECT(name, B, cI2) \ + NET_CONNECT(name, C, cI3) \ NET_CONNECT(name, D, cI4) -#define TTL_7450_DIP(name) \ +#define TTL_7450_DIP(name) \ NET_REGISTER_DEV(TTL_7450_DIP, name) #endif /* NLD_7450_H_ */ diff --git a/src/lib/netlist/devices/nld_7473.cpp b/src/lib/netlist/devices/nld_7473.cpp index c8abd829264..905d154466b 100644 --- a/src/lib/netlist/devices/nld_7473.cpp +++ b/src/lib/netlist/devices/nld_7473.cpp @@ -7,6 +7,7 @@ #include "nld_7473.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -23,6 +24,7 @@ namespace netlist , m_q(*this, "m_q", 0) , m_Q(*this, "Q") , m_QQ(*this, "QQ") + , m_power_pins(*this) { } @@ -40,6 +42,7 @@ namespace netlist logic_output_t m_Q; logic_output_t m_QQ; + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(7473A, 7473) @@ -58,7 +61,7 @@ namespace netlist register_subalias("1", m_1.m_CLK); register_subalias("2", m_1.m_CLRQ); register_subalias("3", m_1.m_K); - //register_subalias("4", ); ==> VCC + register_subalias("4", "VCC"); register_subalias("5", m_2.m_CLK); register_subalias("6", m_2.m_CLRQ); register_subalias("7", m_2.m_J); @@ -66,7 +69,7 @@ namespace netlist register_subalias("8", m_2.m_QQ); register_subalias("9", m_2.m_Q); register_subalias("10", m_2.m_K); - //register_subalias("11", ); ==> VCC + register_subalias("11", "GND"); register_subalias("12", m_2.m_Q); register_subalias("13", m_1.m_QQ); register_subalias("14", m_1.m_J); @@ -142,8 +145,8 @@ namespace netlist m_QQ.push(m_q ^ 1, NLTIME_FROM_NS(20)); // FIXME: timing } - NETLIB_DEVICE_IMPL(7473, "TTL_7473", "+CLK,+J,+K,+CLRQ") - NETLIB_DEVICE_IMPL(7473A, "TTL_7473A", "+CLK,+J,+K,+CLRQ") + NETLIB_DEVICE_IMPL(7473, "TTL_7473", "+CLK,+J,+K,+CLRQ,@VCC,@GND") + NETLIB_DEVICE_IMPL(7473A, "TTL_7473A", "+CLK,+J,+K,+CLRQ,@VCC,@GND") NETLIB_DEVICE_IMPL(7473_dip, "TTL_7473_DIP", "") NETLIB_DEVICE_IMPL(7473A_dip, "TTL_7473A_DIP", "") diff --git a/src/lib/netlist/devices/nld_7473.h b/src/lib/netlist/devices/nld_7473.h index 3fbaaf4efbc..e0dc8bdb428 100644 --- a/src/lib/netlist/devices/nld_7473.h +++ b/src/lib/netlist/devices/nld_7473.h @@ -62,14 +62,16 @@ #include "netlist/nl_setup.h" -#define TTL_7473(name, cCLK, cJ, cK, cCLRQ) \ - NET_REGISTER_DEV(TTL_7473, name) \ - NET_CONNECT(name, CLK, cCLK) \ - NET_CONNECT(name, J, cJ) \ - NET_CONNECT(name, K, cK) \ +#define TTL_7473(name, cCLK, cJ, cK, cCLRQ) \ + NET_REGISTER_DEV(TTL_7473, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, CLK, cCLK) \ + NET_CONNECT(name, J, cJ) \ + NET_CONNECT(name, K, cK) \ NET_CONNECT(name, CLRQ, cCLRQ) -#define TTL_7473A(name, cCLK, cJ, cK, cCLRQ) \ +#define TTL_7473A(name, cCLK, cJ, cK, cCLRQ) \ TTL_7473(name, cCLK, cJ, cK, cCLRQ) #define TTL_7473_DIP(name) \ diff --git a/src/lib/netlist/devices/nld_7474.cpp b/src/lib/netlist/devices/nld_7474.cpp index 740af6ad3c1..caf1aa93e13 100644 --- a/src/lib/netlist/devices/nld_7474.cpp +++ b/src/lib/netlist/devices/nld_7474.cpp @@ -8,6 +8,7 @@ #include "nld_7474.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -24,6 +25,7 @@ namespace netlist , m_Q(*this, "Q") , m_QQ(*this, "QQ") , m_nextD(*this, "m_nextD", 0) + , m_power_pins(*this) { } @@ -41,6 +43,8 @@ namespace netlist state_var m_nextD; + nld_power_pins m_power_pins; + void newstate(const netlist_sig_t stateQ, const netlist_sig_t stateQQ) { // 0: High-to-low 40 ns, 1: Low-to-high 25 ns @@ -62,7 +66,7 @@ namespace netlist register_subalias("4", "1.PREQ"); register_subalias("5", "1.Q"); register_subalias("6", "1.QQ"); - // register_subalias("7", ); ==> GND + register_subalias("7", "1.GND"); register_subalias("8", "2.QQ"); register_subalias("9", "2.Q"); @@ -70,7 +74,10 @@ namespace netlist register_subalias("11", "2.CLK"); register_subalias("12", "2.D"); register_subalias("13", "2.CLRQ"); - // register_subalias("14", ); ==> VCC + register_subalias("14", "1.VCC"); + + connect("1.GND", "2.GND"); + connect("1.VCC", "2.VCC"); } NETLIB_UPDATEI(); NETLIB_RESETI(); @@ -119,7 +126,7 @@ namespace netlist { } - NETLIB_DEVICE_IMPL(7474, "TTL_7474", "+CLK,+D,+CLRQ,+PREQ") + NETLIB_DEVICE_IMPL(7474, "TTL_7474", "+CLK,+D,+CLRQ,+PREQ,@VCC,@GND") NETLIB_DEVICE_IMPL(7474_dip, "TTL_7474_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_7474.h b/src/lib/netlist/devices/nld_7474.h index 48fd4f3d842..ccf75b42c6b 100644 --- a/src/lib/netlist/devices/nld_7474.h +++ b/src/lib/netlist/devices/nld_7474.h @@ -44,14 +44,16 @@ #include "netlist/nl_setup.h" -#define TTL_7474(name, cCLK, cD, cCLRQ, cPREQ) \ - NET_REGISTER_DEV(TTL_7474, name) \ - NET_CONNECT(name, CLK, cCLK) \ - NET_CONNECT(name, D, cD) \ - NET_CONNECT(name, CLRQ, cCLRQ) \ +#define TTL_7474(name, cCLK, cD, cCLRQ, cPREQ) \ + NET_REGISTER_DEV(TTL_7474, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, CLK, cCLK) \ + NET_CONNECT(name, D, cD) \ + NET_CONNECT(name, CLRQ, cCLRQ) \ NET_CONNECT(name, PREQ, cPREQ) -#define TTL_7474_DIP(name) \ +#define TTL_7474_DIP(name) \ NET_REGISTER_DEV(TTL_7474_DIP, name) #endif /* NLD_7474_H_ */ diff --git a/src/lib/netlist/devices/nld_7475.cpp b/src/lib/netlist/devices/nld_7475.cpp index 63fd355d406..22c99e18952 100644 --- a/src/lib/netlist/devices/nld_7475.cpp +++ b/src/lib/netlist/devices/nld_7475.cpp @@ -8,6 +8,7 @@ #include "nld_7475.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -21,6 +22,7 @@ namespace netlist , m_last_Q(*this, "m_last_Q", 0) , m_D(*this, {{"D1", "D2", "D3", "D4"}}) , m_Q(*this, {{"Q1", "Q2", "Q3", "Q4"}}) + , m_power_pins(*this) { register_subalias("Q1", m_Q[0]); } @@ -36,6 +38,7 @@ namespace netlist state_var m_last_Q; object_array_t m_D; object_array_t m_Q; + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(7475, 7477) @@ -59,7 +62,7 @@ namespace netlist register_subalias("2", m_D[0]); register_subalias("3", m_D[1]); register_subalias("4", m_C3C4); - //register_subalias("5", ); ==> VCC + register_subalias("5", "VCC"); register_subalias("6", m_D[2]); register_subalias("7", m_D[3]); register_subalias("8", m_QQ[3]); @@ -67,7 +70,7 @@ namespace netlist register_subalias("9", m_Q[3]); register_subalias("10", m_Q[2]); register_subalias("11", m_QQ[2]); - //register_subalias("12", ); ==> GND + register_subalias("12", "GND"); register_subalias("13", m_C1C2); register_subalias("14", m_QQ[1]); register_subalias("15", m_Q[1]); diff --git a/src/lib/netlist/devices/nld_7475.h b/src/lib/netlist/devices/nld_7475.h index b16fabe61b6..78ece9ff443 100644 --- a/src/lib/netlist/devices/nld_7475.h +++ b/src/lib/netlist/devices/nld_7475.h @@ -37,26 +37,28 @@ #include "netlist/nl_setup.h" -#define PARAMS_7475_7477(name, cC1C2, cC3C4, cD1, cD2, cD3, cD4) \ - NET_CONNECT(name, C1C2, cC1C2) \ - NET_CONNECT(name, C3C4, cC3C4) \ - NET_CONNECT(name, D1, cD1) \ - NET_CONNECT(name, D2, cD2) \ - NET_CONNECT(name, D3, cD3) \ +#define PARAMS_7475_7477(name, cC1C2, cC3C4, cD1, cD2, cD3, cD4) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, C1C2, cC1C2) \ + NET_CONNECT(name, C3C4, cC3C4) \ + NET_CONNECT(name, D1, cD1) \ + NET_CONNECT(name, D2, cD2) \ + NET_CONNECT(name, D3, cD3) \ NET_CONNECT(name, D4, cD4) -#define TTL_7475(name, cC1C2, cC3C4, cD1, cD2, cD3, cD4) \ - NET_REGISTER_DEV(TTL_7475, name) \ +#define TTL_7475(name, cC1C2, cC3C4, cD1, cD2, cD3, cD4) \ + NET_REGISTER_DEV(TTL_7475, name) \ PARAMS_7475_7477(name, cC1C2, cC3C4, cD1, cD2, cD3, cD4) -#define TTL_7477(name, cC1C2, cC3C4, cD1, cD2, cD3, cD4) \ - NET_REGISTER_DEV(TTL_7477, name) \ +#define TTL_7477(name, cC1C2, cC3C4, cD1, cD2, cD3, cD4) \ + NET_REGISTER_DEV(TTL_7477, name) \ PARAMS_7475_7477(name, cC1C2, cC3C4, cD1, cD2, cD3, cD4) -#define TTL_7475_DIP(name) \ +#define TTL_7475_DIP(name) \ NET_REGISTER_DEV(TTL_7475_DIP, name) -#define TTL_7477_DIP(name) \ +#define TTL_7477_DIP(name) \ NET_REGISTER_DEV(TTL_7477_DIP, name) #endif /* NLD_7475_H_ */ diff --git a/src/lib/netlist/devices/nld_7483.cpp b/src/lib/netlist/devices/nld_7483.cpp index 5f820162209..a2c479a5488 100644 --- a/src/lib/netlist/devices/nld_7483.cpp +++ b/src/lib/netlist/devices/nld_7483.cpp @@ -7,6 +7,7 @@ #include "nld_7483.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -32,6 +33,7 @@ namespace netlist , m_S3(*this, "S3") , m_S4(*this, "S4") , m_C4(*this, "C4") + , m_power_pins(*this) { } NETLIB_RESETI(); @@ -59,7 +61,7 @@ namespace netlist logic_output_t m_S3; logic_output_t m_S4; logic_output_t m_C4; - + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(7483_dip, 7483) @@ -70,7 +72,7 @@ namespace netlist register_subalias("2", m_S3); register_subalias("3", m_A3); register_subalias("4", m_B3); - // register_subalias("5", ); --> VCC + register_subalias("5", "VCC"); register_subalias("6", m_S2); register_subalias("7", m_B2); register_subalias("8", m_A2); @@ -78,7 +80,7 @@ namespace netlist register_subalias("9", m_S1); register_subalias("10", m_A1); register_subalias("11", m_B1); - // register_subalias("12", ); --> GND + register_subalias("12", "GND"); register_subalias("13", m_C0); register_subalias("14", m_C4); register_subalias("15", m_S4); @@ -120,7 +122,7 @@ namespace netlist } } - NETLIB_DEVICE_IMPL(7483, "TTL_7483", "+A1,+A2,+A3,+A4,+B1,+B2,+B3,+B4,+C0") + NETLIB_DEVICE_IMPL(7483, "TTL_7483", "+A1,+A2,+A3,+A4,+B1,+B2,+B3,+B4,+C0,@VCC,@GND") NETLIB_DEVICE_IMPL(7483_dip, "TTL_7483_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_7483.h b/src/lib/netlist/devices/nld_7483.h index ba82d5bbb9c..fba46f32457 100644 --- a/src/lib/netlist/devices/nld_7483.h +++ b/src/lib/netlist/devices/nld_7483.h @@ -29,19 +29,21 @@ #include "netlist/nl_setup.h" -#define TTL_7483(name, cA1, cA2, cA3, cA4, cB1, cB2, cB3, cB4, cCI) \ - NET_REGISTER_DEV(TTL_7483, name) \ - NET_CONNECT(name, A1, cA1) \ - NET_CONNECT(name, A2, cA2) \ - NET_CONNECT(name, A3, cA3) \ - NET_CONNECT(name, A4, cA4) \ - NET_CONNECT(name, B1, cB1) \ - NET_CONNECT(name, B2, cB2) \ - NET_CONNECT(name, B3, cB3) \ - NET_CONNECT(name, B4, cB4) \ +#define TTL_7483(name, cA1, cA2, cA3, cA4, cB1, cB2, cB3, cB4, cCI) \ + NET_REGISTER_DEV(TTL_7483, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, A1, cA1) \ + NET_CONNECT(name, A2, cA2) \ + NET_CONNECT(name, A3, cA3) \ + NET_CONNECT(name, A4, cA4) \ + NET_CONNECT(name, B1, cB1) \ + NET_CONNECT(name, B2, cB2) \ + NET_CONNECT(name, B3, cB3) \ + NET_CONNECT(name, B4, cB4) \ NET_CONNECT(name, C0, cCI) -#define TTL_7483_DIP(name) \ +#define TTL_7483_DIP(name) \ NET_REGISTER_DEV(TTL_7483_DIP, name) #endif /* NLD_7483_H_ */ diff --git a/src/lib/netlist/devices/nld_7485.cpp b/src/lib/netlist/devices/nld_7485.cpp index cadb73000ff..7cf166a807d 100644 --- a/src/lib/netlist/devices/nld_7485.cpp +++ b/src/lib/netlist/devices/nld_7485.cpp @@ -7,6 +7,7 @@ #include "nld_7485.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -23,6 +24,7 @@ namespace netlist , m_LTOUT(*this, "LTOUT") , m_EQOUT(*this, "EQOUT") , m_GTOUT(*this, "GTOUT") + , m_power_pins(*this) { } @@ -39,6 +41,7 @@ namespace netlist logic_output_t m_LTOUT; logic_output_t m_EQOUT; logic_output_t m_GTOUT; + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(7485_dip, 7485) @@ -52,6 +55,7 @@ namespace netlist register_subalias("5", m_GTOUT); register_subalias("6", m_EQOUT); register_subalias("7", m_LTOUT); + register_subalias("8", "GND"); register_subalias("9", m_B[0]); register_subalias("10", m_A[0]); @@ -60,6 +64,7 @@ namespace netlist register_subalias("13", m_A[2]); register_subalias("14", m_B[2]); register_subalias("15", m_A[3]); + register_subalias("16", "VCC"); } }; @@ -101,7 +106,7 @@ namespace netlist update_outputs(1, 1, 0); } - NETLIB_DEVICE_IMPL(7485, "TTL_7485", "+A0,+A1,+A2,+A3,+B0,+B1,+B2,+B3,+LTIN,+EQIN,+GTIN") + NETLIB_DEVICE_IMPL(7485, "TTL_7485", "+A0,+A1,+A2,+A3,+B0,+B1,+B2,+B3,+LTIN,+EQIN,+GTIN,@VCC,@GND") NETLIB_DEVICE_IMPL(7485_dip, "TTL_7485_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_7485.h b/src/lib/netlist/devices/nld_7485.h index 7890f4dbd2a..d8fcb5c7701 100644 --- a/src/lib/netlist/devices/nld_7485.h +++ b/src/lib/netlist/devices/nld_7485.h @@ -26,17 +26,19 @@ #include "netlist/nl_setup.h" #define TTL_7485(name, cA0, cA1, cA2, cA3, cB0, cB1, cB2, cB3, cLTIN, cEQIN, cGTIN) \ - NET_REGISTER_DEV(TTL_7485, name) \ - NET_CONNECT(name, A0, cA0) \ - NET_CONNECT(name, A1, cA1) \ - NET_CONNECT(name, A2, cA2) \ - NET_CONNECT(name, A3, cA3) \ - NET_CONNECT(name, B0, cB0) \ - NET_CONNECT(name, B1, cB1) \ - NET_CONNECT(name, B2, cB2) \ - NET_CONNECT(name, B3, cB3) \ - NET_CONNECT(name, LTIN, cLTIN) \ - NET_CONNECT(name, EQIN, cEQIN) \ + NET_REGISTER_DEV(TTL_7485, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, A0, cA0) \ + NET_CONNECT(name, A1, cA1) \ + NET_CONNECT(name, A2, cA2) \ + NET_CONNECT(name, A3, cA3) \ + NET_CONNECT(name, B0, cB0) \ + NET_CONNECT(name, B1, cB1) \ + NET_CONNECT(name, B2, cB2) \ + NET_CONNECT(name, B3, cB3) \ + NET_CONNECT(name, LTIN, cLTIN) \ + NET_CONNECT(name, EQIN, cEQIN) \ NET_CONNECT(name, GTIN, cGTIN) #define TTL_7485_DIP(name) \ diff --git a/src/lib/netlist/devices/nld_7490.cpp b/src/lib/netlist/devices/nld_7490.cpp index acbe0fa4d7a..3bd06a58a3a 100644 --- a/src/lib/netlist/devices/nld_7490.cpp +++ b/src/lib/netlist/devices/nld_7490.cpp @@ -7,6 +7,7 @@ #include "nld_7490.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -25,6 +26,7 @@ namespace netlist , m_last_A(*this, "m_last_A", 0) , m_last_B(*this, "m_last_B", 0) , m_Q(*this, {{"QA", "QB", "QC", "QD"}}) + , m_power_pins(*this) { } @@ -46,6 +48,7 @@ namespace netlist state_var m_last_B; object_array_t m_Q; + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(7490_dip, 7490) @@ -57,13 +60,13 @@ namespace netlist register_subalias("3", "R2"); // register_subalias("4", ); --> NC - // register_subalias("5", ); --> VCC + register_subalias("5", "VCC"); register_subalias("6", "R91"); register_subalias("7", "R92"); register_subalias("8", "QC"); register_subalias("9", "QB"); - // register_subalias("10", ); --> GND + register_subalias("10", "GND"); register_subalias("11", "QD"); register_subalias("12", "QA"); // register_subalias("13", ); --> NC @@ -126,7 +129,7 @@ namespace netlist m_Q[i].push((m_cnt >> i) & 1, delay[i]); } - NETLIB_DEVICE_IMPL(7490, "TTL_7490", "+A,+B,+R1,+R2,+R91,+R92") + NETLIB_DEVICE_IMPL(7490, "TTL_7490", "+A,+B,+R1,+R2,+R91,+R92,@VCC,@GND") NETLIB_DEVICE_IMPL(7490_dip, "TTL_7490_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_7490.h b/src/lib/netlist/devices/nld_7490.h index e2fa5094911..e0479ba14b0 100644 --- a/src/lib/netlist/devices/nld_7490.h +++ b/src/lib/netlist/devices/nld_7490.h @@ -57,16 +57,18 @@ #include "netlist/nl_setup.h" -#define TTL_7490(name, cA, cB, cR1, cR2, cR91, cR92) \ - NET_REGISTER_DEV(TTL_7490, name) \ - NET_CONNECT(name, A, cA) \ - NET_CONNECT(name, B, cB) \ - NET_CONNECT(name, R1, cR1) \ - NET_CONNECT(name, R2, cR2) \ - NET_CONNECT(name, R91, cR91) \ +#define TTL_7490(name, cA, cB, cR1, cR2, cR91, cR92) \ + NET_REGISTER_DEV(TTL_7490, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, A, cA) \ + NET_CONNECT(name, B, cB) \ + NET_CONNECT(name, R1, cR1) \ + NET_CONNECT(name, R2, cR2) \ + NET_CONNECT(name, R91, cR91) \ NET_CONNECT(name, R92, cR92) -#define TTL_7490_DIP(name) \ +#define TTL_7490_DIP(name) \ NET_REGISTER_DEV(TTL_7490_DIP, name) #endif /* NLD_7490_H_ */ diff --git a/src/lib/netlist/devices/nld_7493.cpp b/src/lib/netlist/devices/nld_7493.cpp index f26e1c237d5..003c3291096 100644 --- a/src/lib/netlist/devices/nld_7493.cpp +++ b/src/lib/netlist/devices/nld_7493.cpp @@ -7,6 +7,7 @@ #include "nld_7493.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -30,6 +31,7 @@ namespace netlist , m_QB(*this, "QB") , m_QC(*this, "QC") , m_QD(*this, "QD") + , m_power_pins(*this) { } @@ -87,6 +89,7 @@ namespace netlist logic_output_t m_QB; logic_output_t m_QC; logic_output_t m_QD; + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(7493_dip, 7493) @@ -98,13 +101,13 @@ namespace netlist register_subalias("3", "R2"); // register_subalias("4", ); --> NC - // register_subalias("5", ); --> VCC + register_subalias("5", "VCC"); // register_subalias("6", ); --> NC // register_subalias("7", ); --> NC register_subalias("8", "QC"); register_subalias("9", "QB"); - // register_subalias("10", ); -. GND + register_subalias("10", "GND"); register_subalias("11", "QD"); register_subalias("12", "QA"); // register_subalias("13", ); -. NC @@ -113,7 +116,7 @@ namespace netlist }; - NETLIB_DEVICE_IMPL(7493, "TTL_7493", "+CLKA,+CLKB,+R1,+R2") + NETLIB_DEVICE_IMPL(7493, "TTL_7493", "+CLKA,+CLKB,+R1,+R2,@VCC,@GND") NETLIB_DEVICE_IMPL(7493_dip, "TTL_7493_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_7493.h b/src/lib/netlist/devices/nld_7493.h index 68ad90885ec..3498d216b08 100644 --- a/src/lib/netlist/devices/nld_7493.h +++ b/src/lib/netlist/devices/nld_7493.h @@ -59,14 +59,16 @@ #include "netlist/nl_setup.h" -#define TTL_7493(name, cCLKA, cCLKB, cR1, cR2) \ - NET_REGISTER_DEV(TTL_7493, name) \ - NET_CONNECT(name, CLKA, cCLKA) \ - NET_CONNECT(name, CLKB, cCLKB) \ - NET_CONNECT(name, R1, cR1) \ +#define TTL_7493(name, cCLKA, cCLKB, cR1, cR2) \ + NET_REGISTER_DEV(TTL_7493, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, CLKA, cCLKA) \ + NET_CONNECT(name, CLKB, cCLKB) \ + NET_CONNECT(name, R1, cR1) \ NET_CONNECT(name, R2, cR2) -#define TTL_7493_DIP(name) \ +#define TTL_7493_DIP(name) \ NET_REGISTER_DEV(TTL_7493_DIP, name) #endif /* NLD_7493_H_ */ diff --git a/src/lib/netlist/devices/nld_7497.cpp b/src/lib/netlist/devices/nld_7497.cpp index 1432884b8dd..e9ac7833191 100644 --- a/src/lib/netlist/devices/nld_7497.cpp +++ b/src/lib/netlist/devices/nld_7497.cpp @@ -11,6 +11,7 @@ #include "nld_7497.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -36,6 +37,7 @@ namespace netlist , m_rate(*this, "_m_rate", 0) , m_state(*this, "_m_state", 0) , m_lastclock(*this, "_m_lastclock", 0) + , m_power_pins(*this) { } @@ -64,6 +66,7 @@ namespace netlist state_var_u8 m_rate; state_var_sig m_state; state_var_sig m_lastclock; + nld_power_pins m_power_pins; void newstate(const netlist_sig_t state) { @@ -155,6 +158,7 @@ namespace netlist register_subalias("5", m_ZQ); register_subalias("6", m_Y); register_subalias("7", m_ENOUTQ); + register_subalias("8", "GND"); register_subalias("9", m_CLK); register_subalias("10", m_STRBQ); @@ -163,11 +167,12 @@ namespace netlist register_subalias("13", m_CLR); register_subalias("14", m_B[3]); // B2 register_subalias("15", m_B[2]); // B3 + register_subalias("16", "VCC"); } }; - NETLIB_DEVICE_IMPL(7497, "TTL_7497", "+CLK,+STRBQ,+ENQ,+UNITYQ,+CLR,+B0,+B1,+B2,+B3,+B4,+B5") + NETLIB_DEVICE_IMPL(7497, "TTL_7497", "+CLK,+STRBQ,+ENQ,+UNITYQ,+CLR,+B0,+B1,+B2,+B3,+B4,+B5, @VCC, @GND") NETLIB_DEVICE_IMPL(7497_dip, "TTL_7497_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_7497.h b/src/lib/netlist/devices/nld_7497.h index 8d14e08a49b..3e3e2e89e40 100644 --- a/src/lib/netlist/devices/nld_7497.h +++ b/src/lib/netlist/devices/nld_7497.h @@ -38,20 +38,22 @@ #include "netlist/nl_setup.h" #define TTL_7497(name, cCLK, cSTRB, cEN, cUNITY, cCLR, cB0, cB1, cB2, cB3, cB4, cB5) \ - NET_REGISTER_DEV(TTL_7497, name) \ - NET_CONNECT(name, CLK, cCLK) \ - NET_CONNECT(name, STRBQ, cSTRB) \ - NET_CONNECT(name, ENQ, cEN) \ - NET_CONNECT(name, UNITYQ,cUNITY) \ - NET_CONNECT(name, CLR, cCLR) \ - NET_CONNECT(name, B0, cB0) \ - NET_CONNECT(name, B1, cB1) \ - NET_CONNECT(name, B2, cB2) \ - NET_CONNECT(name, B3, cB3) \ - NET_CONNECT(name, B4, cB4) \ + NET_REGISTER_DEV(TTL_7497, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, CLK, cCLK) \ + NET_CONNECT(name, STRBQ, cSTRB) \ + NET_CONNECT(name, ENQ, cEN) \ + NET_CONNECT(name, UNITYQ,cUNITY) \ + NET_CONNECT(name, CLR, cCLR) \ + NET_CONNECT(name, B0, cB0) \ + NET_CONNECT(name, B1, cB1) \ + NET_CONNECT(name, B2, cB2) \ + NET_CONNECT(name, B3, cB3) \ + NET_CONNECT(name, B4, cB4) \ NET_CONNECT(name, B5, cB5) -#define TTL_7497_DIP(name) \ +#define TTL_7497_DIP(name) \ NET_REGISTER_DEV(TTL_7497_DIP, name) #endif /* NLD_7497_H_ */ diff --git a/src/lib/netlist/devices/nld_82S115.cpp b/src/lib/netlist/devices/nld_82S115.cpp index 8ae6cbb6097..85ba43fa1e6 100644 --- a/src/lib/netlist/devices/nld_82S115.cpp +++ b/src/lib/netlist/devices/nld_82S115.cpp @@ -7,6 +7,7 @@ #include "nld_82S115.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -22,6 +23,7 @@ namespace netlist , m_O(*this, {{"O1", "O2", "O3", "O4", "O5", "O6", "O7", "O8"}}) , m_last_O(*this, "m_last_O", 0) , m_ROM(*this, "ROM") + , m_power_pins(*this) { } @@ -38,6 +40,7 @@ namespace netlist state_var m_last_O; param_rom_t m_ROM; // 4096 bits, 512x8 + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(82S115_dip, 82S115) @@ -70,6 +73,9 @@ namespace netlist register_subalias("15", m_O[5]); register_subalias("16", m_O[6]); register_subalias("17", m_O[7]); + + register_subalias("12", "GND"); + register_subalias("24", "VCC"); } }; @@ -106,7 +112,7 @@ namespace netlist m_O[i].push((o >> i) & 1, NLTIME_FROM_NS(40)); // FIXME: Timing } - NETLIB_DEVICE_IMPL(82S115, "PROM_82S115", "+CE1Q,+CE2,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7,+A8,+STROBE") + NETLIB_DEVICE_IMPL(82S115, "PROM_82S115", "+CE1Q,+CE2,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7,+A8,+STROBE,@VCC,@GND") NETLIB_DEVICE_IMPL(82S115_dip, "PROM_82S115_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_82S115.h b/src/lib/netlist/devices/nld_82S115.h index 8c13fd8b51e..da4c1209e81 100644 --- a/src/lib/netlist/devices/nld_82S115.h +++ b/src/lib/netlist/devices/nld_82S115.h @@ -31,21 +31,23 @@ #include "netlist/nl_setup.h" #define PROM_82S115(name, cCE1Q, cCE2, cA0, cA1, cA2, cA3, cA4, cA5, cA6, cA7, cA8, cSTROBE) \ - NET_REGISTER_DEV(PROM_82S115, name) \ - NET_CONNECT(name, CE1Q, cCE1Q) \ - NET_CONNECT(name, CE2, cCE2) \ - NET_CONNECT(name, A0, cA0) \ - NET_CONNECT(name, A1, cA1) \ - NET_CONNECT(name, A2, cA2) \ - NET_CONNECT(name, A3, cA3) \ - NET_CONNECT(name, A4, cA4) \ - NET_CONNECT(name, A5, cA5) \ - NET_CONNECT(name, A6, cA6) \ - NET_CONNECT(name, A7, cA7) \ - NET_CONNECT(name, A8, cA8) \ + NET_REGISTER_DEV(PROM_82S115, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, CE1Q, cCE1Q) \ + NET_CONNECT(name, CE2, cCE2) \ + NET_CONNECT(name, A0, cA0) \ + NET_CONNECT(name, A1, cA1) \ + NET_CONNECT(name, A2, cA2) \ + NET_CONNECT(name, A3, cA3) \ + NET_CONNECT(name, A4, cA4) \ + NET_CONNECT(name, A5, cA5) \ + NET_CONNECT(name, A6, cA6) \ + NET_CONNECT(name, A7, cA7) \ + NET_CONNECT(name, A8, cA8) \ NET_CONNECT(name, STROBE, cSTROBE) -#define PROM_82S115_DIP(name) \ +#define PROM_82S115_DIP(name) \ NET_REGISTER_DEV(PROM_82S115_DIP, name) #endif /* NLD_82S115_H_ */ diff --git a/src/lib/netlist/devices/nld_82S123.cpp b/src/lib/netlist/devices/nld_82S123.cpp index 4a80b57e349..10c715c01bb 100644 --- a/src/lib/netlist/devices/nld_82S123.cpp +++ b/src/lib/netlist/devices/nld_82S123.cpp @@ -7,6 +7,7 @@ #include "nld_82S123.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -19,6 +20,7 @@ namespace netlist , m_CEQ(*this, "CEQ") , m_O(*this, {{"O1", "O2", "O3", "O4", "O5", "O6", "O7", "O8"}}) , m_ROM(*this, "ROM") + , m_power_pins(*this) { } @@ -30,6 +32,7 @@ namespace netlist object_array_t m_O; param_rom_t m_ROM; // 256 bits, 32x8 + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(82S123_dip, 82S123) @@ -43,15 +46,16 @@ namespace netlist register_subalias("5", m_O[4]); register_subalias("6", m_O[5]); register_subalias("7", m_O[6]); - register_subalias("8", m_O[7]); - - register_subalias("15", m_CEQ); + register_subalias("8", "GND"); + register_subalias("9", m_O[7]); register_subalias("10", m_A[0]); register_subalias("11", m_A[1]); register_subalias("12", m_A[2]); register_subalias("13", m_A[3]); register_subalias("14", m_A[4]); + register_subalias("15", m_CEQ); + register_subalias("16", "VCC"); } }; @@ -77,7 +81,7 @@ namespace netlist m_O[i].push((o >> i) & 1, delay); } - NETLIB_DEVICE_IMPL(82S123, "PROM_82S123", "+CEQ,+A0,+A1,+A2,+A3,+A4") + NETLIB_DEVICE_IMPL(82S123, "PROM_82S123", "+CEQ,+A0,+A1,+A2,+A3,+A4,@VCC,@GND") NETLIB_DEVICE_IMPL(82S123_dip, "PROM_82S123_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_82S123.h b/src/lib/netlist/devices/nld_82S123.h index 2c18377934d..69088b03f6b 100644 --- a/src/lib/netlist/devices/nld_82S123.h +++ b/src/lib/netlist/devices/nld_82S123.h @@ -27,16 +27,18 @@ #include "netlist/nl_setup.h" -#define PROM_82S123(name, cCEQ, cA0, cA1, cA2, cA3, cA4) \ - NET_REGISTER_DEV(PROM_82S123, name) \ - NET_CONNECT(name, CEQ, cCEQ) \ - NET_CONNECT(name, A0, cA0) \ - NET_CONNECT(name, A1, cA1) \ - NET_CONNECT(name, A2, cA2) \ - NET_CONNECT(name, A3, cA3) \ +#define PROM_82S123(name, cCEQ, cA0, cA1, cA2, cA3, cA4) \ + NET_REGISTER_DEV(PROM_82S123, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, CEQ, cCEQ) \ + NET_CONNECT(name, A0, cA0) \ + NET_CONNECT(name, A1, cA1) \ + NET_CONNECT(name, A2, cA2) \ + NET_CONNECT(name, A3, cA3) \ NET_CONNECT(name, A4, cA4) -#define PROM_82S123_DIP(name) \ +#define PROM_82S123_DIP(name) \ NET_REGISTER_DEV(PROM_82S123_DIP, name) #endif /* NLD_82S123_H_ */ diff --git a/src/lib/netlist/devices/nld_82S126.cpp b/src/lib/netlist/devices/nld_82S126.cpp index b1752908645..9ce6697c82e 100644 --- a/src/lib/netlist/devices/nld_82S126.cpp +++ b/src/lib/netlist/devices/nld_82S126.cpp @@ -7,6 +7,7 @@ #include "nld_82S126.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -20,6 +21,7 @@ namespace netlist , m_CE2Q(*this, "CE2Q") , m_O(*this, {{"O1", "O2", "O3", "O4" }}) , m_ROM(*this, "ROM") + , m_power_pins(*this) { } @@ -32,6 +34,7 @@ namespace netlist object_array_t m_O; param_rom_t m_ROM; // 1024 bits, 32x32, used as 256x4 + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(82S126_dip, 82S126) @@ -54,6 +57,9 @@ namespace netlist register_subalias("11", m_O[1]); register_subalias("10", m_O[2]); register_subalias("9", m_O[3]); + + register_subalias("8", "GND"); + register_subalias("16", "VCC"); } }; @@ -79,7 +85,7 @@ namespace netlist m_O[i].push((o >> i) & 1, delay); } - NETLIB_DEVICE_IMPL(82S126, "PROM_82S126", "+CE1Q,+CE2Q,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7") + NETLIB_DEVICE_IMPL(82S126, "PROM_82S126", "+CE1Q,+CE2Q,+A0,+A1,+A2,+A3,+A4,+A5,+A6,+A7,@VCC,@GND") NETLIB_DEVICE_IMPL(82S126_dip, "PROM_82S126_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_82S126.h b/src/lib/netlist/devices/nld_82S126.h index ed7aa131819..35f2c0dd725 100644 --- a/src/lib/netlist/devices/nld_82S126.h +++ b/src/lib/netlist/devices/nld_82S126.h @@ -27,19 +27,21 @@ #include "netlist/nl_setup.h" #define PROM_82S126(name, cCE1Q, cCE2Q, cA0, cA1, cA2, cA3, cA4, cA5, cA6, cA7) \ - NET_REGISTER_DEV(PROM_82S126, name) \ - NET_CONNECT(name, CE1Q, cCE1Q) \ - NET_CONNECT(name, CE2Q, cCE2Q) \ - NET_CONNECT(name, A0, cA0) \ - NET_CONNECT(name, A1, cA1) \ - NET_CONNECT(name, A2, cA2) \ - NET_CONNECT(name, A3, cA3) \ - NET_CONNECT(name, A4, cA4) \ - NET_CONNECT(name, A5, cA5) \ - NET_CONNECT(name, A6, cA6) \ + NET_REGISTER_DEV(PROM_82S126, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, CE1Q, cCE1Q) \ + NET_CONNECT(name, CE2Q, cCE2Q) \ + NET_CONNECT(name, A0, cA0) \ + NET_CONNECT(name, A1, cA1) \ + NET_CONNECT(name, A2, cA2) \ + NET_CONNECT(name, A3, cA3) \ + NET_CONNECT(name, A4, cA4) \ + NET_CONNECT(name, A5, cA5) \ + NET_CONNECT(name, A6, cA6) \ NET_CONNECT(name, A7, cA7) -#define PROM_82S126_DIP(name) \ +#define PROM_82S126_DIP(name) \ NET_REGISTER_DEV(PROM_82S126_DIP, name) #endif /* NLD_82S126_H_ */ diff --git a/src/lib/netlist/devices/nld_82S16.cpp b/src/lib/netlist/devices/nld_82S16.cpp index e3176c7b30f..cce10063061 100644 --- a/src/lib/netlist/devices/nld_82S16.cpp +++ b/src/lib/netlist/devices/nld_82S16.cpp @@ -7,6 +7,7 @@ #include "nld_82S16.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -25,6 +26,7 @@ namespace netlist , m_ram(*this, "m_ram", 0) , m_addr(*this, "m_addr", 0) , m_enq(*this, "m_enq", 0) + , m_power_pins(*this) { } @@ -77,6 +79,7 @@ namespace netlist state_array m_ram; // 256 bits state_var_u8 m_addr; // 256 bits state_var_sig m_enq; + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(82S16_dip, 82S16) @@ -99,7 +102,10 @@ namespace netlist register_subalias("12", m_WEQ); register_subalias("13", m_DIN); - register_subalias("6", m_DOUTQ); + register_subalias("6", m_DOUTQ); + + register_subalias("8", "GND"); + register_subalias("16", "VCC"); } }; diff --git a/src/lib/netlist/devices/nld_9310.cpp b/src/lib/netlist/devices/nld_9310.cpp index b416015df24..bb1e9cc46e3 100644 --- a/src/lib/netlist/devices/nld_9310.cpp +++ b/src/lib/netlist/devices/nld_9310.cpp @@ -1,5 +1,5 @@ // license:GPL-2.0+ -// copyright-holders:Couriersud +//+opyright-holders:Couriersud /* * nld_9310.c * @@ -7,6 +7,7 @@ #include "nld_9310.h" #include "netlist/nl_base.h" +#include "nlid_system.h" #define MAXCNT 9 @@ -14,37 +15,19 @@ namespace netlist { namespace devices { - //FIXME: Convert sub devices into NETDEV_DELEGATE logic - NETLIB_OBJECT(9310_subABCD) - { - NETLIB_CONSTRUCTOR(9310_subABCD) - , m_A(*this, "A") - , m_B(*this, "B") - , m_C(*this, "C") - , m_D(*this, "D") - { - } - - NETLIB_RESETI(); - //NETLIB_UPDATEI(); - - public: - logic_input_t m_A; - logic_input_t m_B; - logic_input_t m_C; - logic_input_t m_D; - unsigned read_ABCD() const - { - return (m_D() << 3) | (m_C() << 2) | (m_B() << 1) | (m_A() << 0); - } - }; - - NETLIB_OBJECT(9310_sub) + NETLIB_OBJECT(9310) { - NETLIB_CONSTRUCTOR(9310_sub) - , m_CLK(*this, "CLK") - , m_ABCD(nullptr) + NETLIB_CONSTRUCTOR(9310) + , m_ENP(*this, "ENP") + , m_ENT(*this, "ENT") + , m_CLRQ(*this, "CLRQ") + , m_LOADQ(*this, "LOADQ") + , m_A(*this, "A", NETLIB_DELEGATE(9310, abcd)) + , m_B(*this, "B", NETLIB_DELEGATE(9310, abcd)) + , m_C(*this, "C", NETLIB_DELEGATE(9310, abcd)) + , m_D(*this, "D", NETLIB_DELEGATE(9310, abcd)) + , m_CLK(*this, "CLK", NETLIB_DELEGATE(9310, sub)) , m_QA(*this, "QA") , m_QB(*this, "QB") , m_QC(*this, "QC") @@ -53,65 +36,128 @@ namespace netlist , m_cnt(*this, "m_cnt", 0) , m_loadq(*this, "m_loadq", 0) , m_ent(*this, "m_ent", 0) + , m_power_pins(*this) { } + NETLIB_RESETI(); NETLIB_UPDATEI(); - public: - inline void update_outputs_all(const unsigned cnt, const netlist_time out_delay); - inline void update_outputs(const unsigned cnt); - logic_input_t m_CLK; + NETLIB_HANDLERI(abcd) { } // do nothing - NETLIB_NAME(9310_subABCD) *m_ABCD; + NETLIB_HANDLERI(sub) + { + auto cnt(m_cnt); - logic_output_t m_QA; - logic_output_t m_QB; - logic_output_t m_QC; - logic_output_t m_QD; - logic_output_t m_RC; + if (m_loadq) + { + if (cnt < MAXCNT - 1) + { + ++cnt; + update_outputs(cnt); + } + else if (cnt == MAXCNT - 1) + { + cnt = MAXCNT; + m_RC.push(m_ent, NLTIME_FROM_NS(20)); + m_QA.push(1, NLTIME_FROM_NS(20)); + } + else // MAXCNT + { + m_RC.push(0, NLTIME_FROM_NS(20)); + cnt = 0; + update_outputs_all(cnt, NLTIME_FROM_NS(20)); + } + } + else + { + cnt = read_ABCD(); + m_RC.push(m_ent & (cnt == MAXCNT), NLTIME_FROM_NS(27)); + update_outputs_all(cnt, NLTIME_FROM_NS(22)); + } + m_cnt = cnt; + } - state_var m_cnt; - state_var m_loadq; - state_var m_ent; - }; + protected: - NETLIB_OBJECT(9310) - { - NETLIB_CONSTRUCTOR(9310) - , subABCD(*this, "subABCD") - , sub(*this, "sub") - , m_ENP(*this, "ENP") - , m_ENT(*this, "ENT") - , m_CLRQ(*this, "CLRQ") - , m_LOADQ(*this, "LOADQ") + unsigned read_ABCD() const { - sub.m_ABCD = &(subABCD); - - register_subalias("CLK", sub.m_CLK); + return (m_D() << 3) | (m_C() << 2) | (m_B() << 1) | (m_A() << 0); + } + void update_outputs_all(const unsigned cnt, const netlist_time out_delay) + { + m_QA.push((cnt >> 0) & 1, out_delay); + m_QB.push((cnt >> 1) & 1, out_delay); + m_QC.push((cnt >> 2) & 1, out_delay); + m_QD.push((cnt >> 3) & 1, out_delay); + } - register_subalias("A", subABCD.m_A); - register_subalias("B", subABCD.m_B); - register_subalias("C", subABCD.m_C); - register_subalias("D", subABCD.m_D); + void update_outputs(const unsigned cnt) + { + /* static */ const netlist_time out_delay = NLTIME_FROM_NS(20); + #if 0 + // for (int i=0; i<4; i++) + // m_Q[i], (cnt >> i) & 1, delay[i]); + m_QA.push((cnt >> 0) & 1, out_delay); + m_QB.push((cnt >> 1) & 1, out_delay); + m_QC.push((cnt >> 2) & 1, out_delay); + m_QD.push((cnt >> 3) & 1, out_delay); + #else + if ((cnt & 1) == 1) + m_QA.push(1, out_delay); + else + { + m_QA.push(0, out_delay); + switch (cnt) + { + case 0x00: + m_QB.push(0, out_delay); + m_QC.push(0, out_delay); + m_QD.push(0, out_delay); + break; + case 0x02: + case 0x06: + case 0x0A: + case 0x0E: + m_QB.push(1, out_delay); + break; + case 0x04: + case 0x0C: + m_QB.push(0, out_delay); + m_QC.push(1, out_delay); + break; + case 0x08: + m_QB.push(0, out_delay); + m_QC.push(0, out_delay); + m_QD.push(1, out_delay); + break; + } - register_subalias("QA", sub.m_QA); - register_subalias("QB", sub.m_QB); - register_subalias("QC", sub.m_QC); - register_subalias("QD", sub.m_QD); - register_subalias("RC", sub.m_RC); + } + #endif } - NETLIB_RESETI(); - NETLIB_UPDATEI(); - public: - NETLIB_SUB(9310_subABCD) subABCD; - NETLIB_SUB(9310_sub) sub; logic_input_t m_ENP; logic_input_t m_ENT; logic_input_t m_CLRQ; logic_input_t m_LOADQ; + logic_input_t m_A; + logic_input_t m_B; + logic_input_t m_C; + logic_input_t m_D; + logic_input_t m_CLK; + + logic_output_t m_QA; + logic_output_t m_QB; + logic_output_t m_QC; + logic_output_t m_QD; + logic_output_t m_RC; + + state_var m_cnt; + state_var m_loadq; + state_var m_ent; + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(9310_dip, 9310) @@ -119,36 +165,26 @@ namespace netlist NETLIB_CONSTRUCTOR_DERIVED(9310_dip, 9310) { register_subalias("1", m_CLRQ); - register_subalias("2", sub.m_CLK); - register_subalias("3", subABCD.m_A); - register_subalias("4", subABCD.m_B); - register_subalias("5", subABCD.m_C); - register_subalias("6", subABCD.m_D); + register_subalias("2", m_CLK); + register_subalias("3", m_A); + register_subalias("4", m_B); + register_subalias("5", m_C); + register_subalias("6", m_D); register_subalias("7", m_ENP); - // register_subalias("8", ); -. GND + register_subalias("8", "GND"); register_subalias("9", m_LOADQ); register_subalias("10", m_ENT); - register_subalias("11", sub.m_QD); - register_subalias("12", sub.m_QC); - register_subalias("13", sub.m_QB); - register_subalias("14", sub.m_QA); - register_subalias("15", sub.m_RC); - // register_subalias("16", ); -. VCC + register_subalias("11", m_QD); + register_subalias("12", m_QC); + register_subalias("13", m_QB); + register_subalias("14", m_QA); + register_subalias("15", m_RC); + register_subalias("16", "VCC"); } }; NETLIB_RESET(9310) - { - sub.reset(); - subABCD.reset(); - } - - NETLIB_RESET(9310_subABCD) - { - } - - NETLIB_RESET(9310_sub) { m_CLK.set_state(logic_t::STATE_INP_LH); m_cnt = 0; @@ -156,117 +192,31 @@ namespace netlist m_ent = 1; } - NETLIB_UPDATE(9310_sub) - { - auto cnt(m_cnt); - - if (m_loadq) - { - if (cnt < MAXCNT - 1) - { - ++cnt; - update_outputs(cnt); - } - else if (cnt == MAXCNT - 1) - { - cnt = MAXCNT; - m_RC.push(m_ent, NLTIME_FROM_NS(20)); - m_QA.push(1, NLTIME_FROM_NS(20)); - } - else // MAXCNT - { - m_RC.push(0, NLTIME_FROM_NS(20)); - cnt = 0; - update_outputs_all(cnt, NLTIME_FROM_NS(20)); - } - } - else - { - cnt = m_ABCD->read_ABCD(); - m_RC.push(m_ent & (cnt == MAXCNT), NLTIME_FROM_NS(27)); - update_outputs_all(cnt, NLTIME_FROM_NS(22)); - } - m_cnt = cnt; - } - NETLIB_UPDATE(9310) { - sub.m_loadq = m_LOADQ(); - sub.m_ent = m_ENT(); + m_loadq = m_LOADQ(); + m_ent = m_ENT(); const netlist_sig_t clrq = m_CLRQ(); - if ((!sub.m_loadq || (sub.m_ent & m_ENP())) && clrq) + if ((!m_loadq || (m_ent & m_ENP())) && clrq) { - sub.m_CLK.activate_lh(); - sub.m_RC.push(sub.m_ent & (sub.m_cnt == MAXCNT), NLTIME_FROM_NS(27)); + m_CLK.activate_lh(); + m_RC.push(m_ent & (m_cnt == MAXCNT), NLTIME_FROM_NS(27)); } else { - sub.m_CLK.inactivate(); - if (!clrq && (sub.m_cnt>0)) + m_CLK.inactivate(); + if (!clrq && (m_cnt>0)) { - sub.update_outputs_all(0, NLTIME_FROM_NS(36)); - sub.m_cnt = 0; + update_outputs_all(0, NLTIME_FROM_NS(36)); + m_cnt = 0; //return; } - sub.m_RC.push(sub.m_ent & (sub.m_cnt == MAXCNT), NLTIME_FROM_NS(27)); - } - } - - inline NETLIB_FUNC_VOID(9310_sub, update_outputs_all, (const unsigned cnt, const netlist_time out_delay)) - { - m_QA.push((cnt >> 0) & 1, out_delay); - m_QB.push((cnt >> 1) & 1, out_delay); - m_QC.push((cnt >> 2) & 1, out_delay); - m_QD.push((cnt >> 3) & 1, out_delay); - } - - inline NETLIB_FUNC_VOID(9310_sub, update_outputs, (const unsigned cnt)) - { - /* static */ const netlist_time out_delay = NLTIME_FROM_NS(20); - #if 0 - // for (int i=0; i<4; i++) - // m_Q[i], (cnt >> i) & 1, delay[i]); - m_QA.push((cnt >> 0) & 1, out_delay); - m_QB.push((cnt >> 1) & 1, out_delay); - m_QC.push((cnt >> 2) & 1, out_delay); - m_QD.push((cnt >> 3) & 1, out_delay); - #else - if ((cnt & 1) == 1) - m_QA.push(1, out_delay); - else - { - m_QA.push(0, out_delay); - switch (cnt) - { - case 0x00: - m_QB.push(0, out_delay); - m_QC.push(0, out_delay); - m_QD.push(0, out_delay); - break; - case 0x02: - case 0x06: - case 0x0A: - case 0x0E: - m_QB.push(1, out_delay); - break; - case 0x04: - case 0x0C: - m_QB.push(0, out_delay); - m_QC.push(1, out_delay); - break; - case 0x08: - m_QB.push(0, out_delay); - m_QC.push(0, out_delay); - m_QD.push(1, out_delay); - break; - } - + m_RC.push(m_ent & (m_cnt == MAXCNT), NLTIME_FROM_NS(27)); } - #endif } - NETLIB_DEVICE_IMPL(9310, "TTL_9310", "") + NETLIB_DEVICE_IMPL(9310, "TTL_9310", "+CLK,+ENP,+ENT,+CLRQ,+LOADQ,+A,+B,+C,+D,@VCC,@GND") NETLIB_DEVICE_IMPL(9310_dip, "TTL_9310_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_9310.h b/src/lib/netlist/devices/nld_9310.h index 65df9c04ce4..fa6dc0a3351 100644 --- a/src/lib/netlist/devices/nld_9310.h +++ b/src/lib/netlist/devices/nld_9310.h @@ -47,19 +47,21 @@ #include "netlist/nl_setup.h" -#define TTL_9310(name, cCLK, cENP, cENT, cCLRQ, cLOADQ, cA, cB, cC, cD) \ - NET_REGISTER_DEV(TTL_9310, name) \ - NET_CONNECT(name, CLK, cCLK) \ - NET_CONNECT(name, ENP, cENP) \ - NET_CONNECT(name, ENT, cENT) \ - NET_CONNECT(name, CLRQ, cCLRQ) \ - NET_CONNECT(name, LOADQ,_LOADQ) \ - NET_CONNECT(name, A, cA) \ - NET_CONNECT(name, B, cB) \ - NET_CONNECT(name, C, cC) \ +#define TTL_9310(name, cCLK, cENP, cENT, cCLRQ, cLOADQ, cA, cB, cC, cD) \ + NET_REGISTER_DEV(TTL_9310, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, CLK, cCLK) \ + NET_CONNECT(name, ENP, cENP) \ + NET_CONNECT(name, ENT, cENT) \ + NET_CONNECT(name, CLRQ, cCLRQ) \ + NET_CONNECT(name, LOADQ,_LOADQ) \ + NET_CONNECT(name, A, cA) \ + NET_CONNECT(name, B, cB) \ + NET_CONNECT(name, C, cC) \ NET_CONNECT(name, D, cD) -#define TTL_9310_DIP(name) \ +#define TTL_9310_DIP(name) \ NET_REGISTER_DEV(TTL_9310_DIP, name) #endif /* NLD_9310_H_ */ diff --git a/src/lib/netlist/devices/nld_9316.cpp b/src/lib/netlist/devices/nld_9316.cpp index 2b17eabb3ec..e054f22c3a7 100644 --- a/src/lib/netlist/devices/nld_9316.cpp +++ b/src/lib/netlist/devices/nld_9316.cpp @@ -7,6 +7,7 @@ #include "nld_9316.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -33,6 +34,7 @@ namespace netlist , m_abcd(*this, "m_abcd", 0) , m_loadq(*this, "m_loadq", 0) , m_ent(*this, "m_ent", 0) + , m_power_pins(*this) { } @@ -103,6 +105,7 @@ namespace netlist state_var_u8 m_abcd; state_var_sig m_loadq; state_var_sig m_ent; + nld_power_pins m_power_pins; void update_outputs_all(unsigned cnt, netlist_time out_delay) noexcept { @@ -124,7 +127,7 @@ namespace netlist register_subalias("5", "C"); register_subalias("6", "D"); register_subalias("7", "ENP"); - // register_subalias("8", "); -. GND + register_subalias("8", "GND"); register_subalias("9", "LOADQ"); register_subalias("10", "ENT"); @@ -133,12 +136,12 @@ namespace netlist register_subalias("13", "QB"); register_subalias("14", "QA"); register_subalias("15", "RC"); - // register_subalias("16", ); -. VCC + register_subalias("16", "VCC"); } }; - NETLIB_DEVICE_IMPL(9316, "TTL_9316", "+CLK,+ENP,+ENT,+CLRQ,+LOADQ,+A,+B,+C,+D") + NETLIB_DEVICE_IMPL(9316, "TTL_9316", "+CLK,+ENP,+ENT,+CLRQ,+LOADQ,+A,+B,+C,+D,@VCC,@GND") NETLIB_DEVICE_IMPL(9316_dip, "TTL_9316_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_9316.h b/src/lib/netlist/devices/nld_9316.h index 8ab1789d7c7..bdd925fa9f5 100644 --- a/src/lib/netlist/devices/nld_9316.h +++ b/src/lib/netlist/devices/nld_9316.h @@ -53,19 +53,21 @@ #include "netlist/nl_setup.h" -#define TTL_9316(name, cCLK, cENP, cENT, cCLRQ, cLOADQ, cA, cB, cC, cD) \ - NET_REGISTER_DEV(TTL_9316, name) \ - NET_CONNECT(name, CLK, cCLK) \ - NET_CONNECT(name, ENP, cENP) \ - NET_CONNECT(name, ENT, cENT) \ - NET_CONNECT(name, CLRQ, cCLRQ) \ - NET_CONNECT(name, LOADQ, cLOADQ) \ - NET_CONNECT(name, A, cA) \ - NET_CONNECT(name, B, cB) \ - NET_CONNECT(name, C, cC) \ +#define TTL_9316(name, cCLK, cENP, cENT, cCLRQ, cLOADQ, cA, cB, cC, cD) \ + NET_REGISTER_DEV(TTL_9316, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, CLK, cCLK) \ + NET_CONNECT(name, ENP, cENP) \ + NET_CONNECT(name, ENT, cENT) \ + NET_CONNECT(name, CLRQ, cCLRQ) \ + NET_CONNECT(name, LOADQ, cLOADQ) \ + NET_CONNECT(name, A, cA) \ + NET_CONNECT(name, B, cB) \ + NET_CONNECT(name, C, cC) \ NET_CONNECT(name, D, cD) -#define TTL_9316_DIP(name) \ +#define TTL_9316_DIP(name) \ NET_REGISTER_DEV(TTL_9316_DIP, name) #endif /* NLD_9316_H_ */ diff --git a/src/lib/netlist/devices/nld_9322.cpp b/src/lib/netlist/devices/nld_9322.cpp index abf9bf9f6ef..9247a8a9320 100644 --- a/src/lib/netlist/devices/nld_9322.cpp +++ b/src/lib/netlist/devices/nld_9322.cpp @@ -7,6 +7,7 @@ #include "nld_9322.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -21,6 +22,7 @@ namespace netlist , m_A(*this, "A") , m_B(*this, "B") , m_Y(*this, "Y") + , m_power_pins(*this) { } @@ -31,6 +33,7 @@ namespace netlist logic_input_t m_A; logic_input_t m_B; logic_output_t m_Y; + nld_power_pins m_power_pins; }; NETLIB_OBJECT(9322) @@ -55,6 +58,17 @@ namespace netlist register_subalias("A4", m_4.m_A); register_subalias("B4", m_4.m_B); register_subalias("Y4", m_4.m_Y); + + connect("1.VCC", "2.VCC"); + connect("1.VCC", "3.VCC"); + connect("1.VCC", "4.VCC"); + connect("1.GND", "2.GND"); + connect("1.GND", "3.GND"); + connect("1.GND", "4.GND"); + + register_subalias("GND", "1.GND"); + register_subalias("VCC", "1.VCC"); + } NETLIB_UPDATEI(); @@ -81,6 +95,7 @@ namespace netlist register_subalias("5", m_2.m_A); register_subalias("6", m_2.m_B); register_subalias("7", m_2.m_Y); + register_subalias("8", "GND"); register_subalias("9", m_3.m_Y); register_subalias("10", m_3.m_B); @@ -89,6 +104,7 @@ namespace netlist register_subalias("13", m_4.m_B); register_subalias("14", m_4.m_A); register_subalias("15", m_STROBE); + register_subalias("16", "VCC"); } }; @@ -111,7 +127,7 @@ namespace netlist m_4.update(); } - NETLIB_DEVICE_IMPL(9322, "TTL_9322", "+SELECT,+A1,+B1,+A2,+B2,+A3,+B3,+A4,+B4,+STROBE") + NETLIB_DEVICE_IMPL(9322, "TTL_9322", "+SELECT,+A1,+B1,+A2,+B2,+A3,+B3,+A4,+B4,+STROBE,@VCC,@GND") NETLIB_DEVICE_IMPL(9322_dip, "TTL_9322_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_9322.h b/src/lib/netlist/devices/nld_9322.h index 986c6b9e7f7..e55c73847b3 100644 --- a/src/lib/netlist/devices/nld_9322.h +++ b/src/lib/netlist/devices/nld_9322.h @@ -24,16 +24,18 @@ #include "netlist/nl_setup.h" #define TTL_9322(name, cSELECT, cA1, cB1, cA2, cB2, cA3, cB3, cA4, cB4, cSTROBE) \ - NET_REGISTER_DEV(TTL_9322, name) \ - NET_CONNECT(name, SELECT, cSELECT) \ - NET_CONNECT(name, A1, cA1) \ - NET_CONNECT(name, B1, cB1) \ - NET_CONNECT(name, A2, cA2) \ - NET_CONNECT(name, B2, cB2) \ - NET_CONNECT(name, A3, cA3) \ - NET_CONNECT(name, B3, cB3) \ - NET_CONNECT(name, A4, cA4) \ - NET_CONNECT(name, B4, cB4) \ + NET_REGISTER_DEV(TTL_9322, name) \ + NET_CONNECT(name, SELECT, cSELECT) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, A1, cA1) \ + NET_CONNECT(name, B1, cB1) \ + NET_CONNECT(name, A2, cA2) \ + NET_CONNECT(name, B2, cB2) \ + NET_CONNECT(name, A3, cA3) \ + NET_CONNECT(name, B3, cB3) \ + NET_CONNECT(name, A4, cA4) \ + NET_CONNECT(name, B4, cB4) \ NET_CONNECT(name, STROBE, cSTROBE) #define TTL_9322_DIP(name) \ diff --git a/src/lib/netlist/devices/nld_am2847.cpp b/src/lib/netlist/devices/nld_am2847.cpp index 825696f0938..0e95e70727a 100644 --- a/src/lib/netlist/devices/nld_am2847.cpp +++ b/src/lib/netlist/devices/nld_am2847.cpp @@ -7,6 +7,7 @@ #include "nld_am2847.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -19,6 +20,7 @@ namespace netlist , m_IN(*this, "IN") , m_buffer(*this, "m_buffer", 0) , m_OUT(*this, "OUT") + , m_power_pins(*this, "VSS", "VDD") { } @@ -33,6 +35,7 @@ namespace netlist state_array m_buffer; logic_output_t m_OUT; + nld_power_pins m_power_pins; }; NETLIB_OBJECT(AM2847) @@ -44,6 +47,7 @@ namespace netlist , m_D(*this, "D") , m_CP(*this, "CP") , m_last_CP(*this, "m_last_CP", 0) + // FIXME: needs family! { register_subalias("OUTA", m_A.m_OUT); register_subalias("OUTB", m_B.m_OUT); @@ -57,6 +61,16 @@ namespace netlist register_subalias("RCB", m_B.m_RC); register_subalias("RCC", m_C.m_RC); register_subalias("RCD", m_D.m_RC); + + connect("A.VSS", "B.VSS"); + connect("A.VSS", "C.VSS"); + connect("A.VSS", "D.VSS"); + connect("A.VDD", "B.VDD"); + connect("A.VDD", "C.VDD"); + connect("A.VDD", "D.VDD"); + + register_subalias("VSS", "A.VSS"); + register_subalias("VDD", "A.VDD"); } NETLIB_RESETI(); @@ -83,6 +97,7 @@ namespace netlist register_subalias("5", m_B.m_RC); register_subalias("6", m_B.m_IN); register_subalias("7", m_C.m_OUT); + register_subalias("8", "VDD"); register_subalias("9", m_C.m_RC); register_subalias("10", m_C.m_IN); @@ -90,7 +105,7 @@ namespace netlist register_subalias("13", m_D.m_OUT); register_subalias("14", m_D.m_RC); register_subalias("15", m_D.m_IN); - + register_subalias("8", "VSS"); } }; @@ -130,7 +145,7 @@ namespace netlist m_OUT.push(out, NLTIME_FROM_NS(200)); } - NETLIB_DEVICE_IMPL(AM2847, "TTL_AM2847", "+CP,+INA,+INB,+INC,+IND,+RCA,+RCB,+RCC,+RCD") + NETLIB_DEVICE_IMPL(AM2847, "TTL_AM2847", "+CP,+INA,+INB,+INC,+IND,+RCA,+RCB,+RCC,+RCD,@VSS,@VDD") NETLIB_DEVICE_IMPL(AM2847_dip, "TTL_AM2847_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_am2847.h b/src/lib/netlist/devices/nld_am2847.h index ff4a95b8e81..f1347545984 100644 --- a/src/lib/netlist/devices/nld_am2847.h +++ b/src/lib/netlist/devices/nld_am2847.h @@ -23,16 +23,18 @@ #include "netlist/nl_setup.h" -#define TTL_AM2847(name, cCP, cINA, cINB, cINC, cIND, cRCA, cRCB, cRCC, cRCD) \ - NET_REGISTER_DEV(TTL_AM2847, name) \ - NET_CONNECT(name, CP, cCP) \ - NET_CONNECT(name, INA, cINA) \ - NET_CONNECT(name, INB, cINB) \ - NET_CONNECT(name, INC, cINC) \ - NET_CONNECT(name, IND, cIND) \ - NET_CONNECT(name, RCA, cRCA) \ - NET_CONNECT(name, RCB, cRCB) \ - NET_CONNECT(name, RCC, cRCC) \ +#define TTL_AM2847(name, cCP, cINA, cINB, cINC, cIND, cRCA, cRCB, cRCC, cRCD) \ + NET_REGISTER_DEV(TTL_AM2847, name) \ + NET_CONNECT(name, VDD, VDD) \ + NET_CONNECT(name, VSS, VSS) \ + NET_CONNECT(name, CP, cCP) \ + NET_CONNECT(name, INA, cINA) \ + NET_CONNECT(name, INB, cINB) \ + NET_CONNECT(name, INC, cINC) \ + NET_CONNECT(name, IND, cIND) \ + NET_CONNECT(name, RCA, cRCA) \ + NET_CONNECT(name, RCB, cRCB) \ + NET_CONNECT(name, RCC, cRCC) \ NET_CONNECT(name, RCD, cRCD) #define TTL_AM2847_DIP(name) \ diff --git a/src/lib/netlist/devices/nld_dm9314.cpp b/src/lib/netlist/devices/nld_dm9314.cpp index 93b958de539..e193fd08f46 100644 --- a/src/lib/netlist/devices/nld_dm9314.cpp +++ b/src/lib/netlist/devices/nld_dm9314.cpp @@ -7,6 +7,7 @@ #include "nld_dm9314.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -25,6 +26,7 @@ namespace netlist , m_last_SQ(*this, "m_last_SQ", 0) , m_last_D(*this, "m_last_D", 0) , m_last_Q(*this, "m_last_Q", 0) + , m_power_pins(*this) { } @@ -43,6 +45,7 @@ namespace netlist state_var m_last_SQ; state_var m_last_D; state_var m_last_Q; + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(9314_dip, 9314) @@ -56,6 +59,7 @@ namespace netlist register_subalias("5", m_SQ[2]); register_subalias("6", m_D[2]); register_subalias("7", m_D[3]); + register_subalias("8", "GND"); register_subalias("9", m_MRQ); register_subalias("10", m_Q[3]); @@ -64,6 +68,7 @@ namespace netlist register_subalias("13", m_Q[1]); register_subalias("14", m_SQ[1]); register_subalias("15", m_Q[0]); + register_subalias("16", "VCC"); } }; @@ -107,7 +112,7 @@ namespace netlist } } - NETLIB_DEVICE_IMPL(9314, "TTL_9314", "+EQ,+MRQ,+S0Q,+S1Q,+S2Q,+S3Q,+D0,+D1,+D2,+D3") + NETLIB_DEVICE_IMPL(9314, "TTL_9314", "+EQ,+MRQ,+S0Q,+S1Q,+S2Q,+S3Q,+D0,+D1,+D2,+D3,@VCC,@GND") NETLIB_DEVICE_IMPL(9314_dip, "TTL_9314_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_dm9314.h b/src/lib/netlist/devices/nld_dm9314.h index 59c60591ce7..73edfaa1205 100644 --- a/src/lib/netlist/devices/nld_dm9314.h +++ b/src/lib/netlist/devices/nld_dm9314.h @@ -23,18 +23,20 @@ #include "netlist/nl_setup.h" -#define TTL_9314(name, cEQ, cMRQ, cS0Q, cS1Q, cS2Q, cS3Q, cD0, cD1, cD2, cD3) \ - NET_REGISTER_DEV(TTL_9314, name) \ - NET_CONNECT(name, EQ, cEQ) \ - NET_CONNECT(name, MRQ, cMRQ) \ - NET_CONNECT(name, S0Q, cS0Q) \ - NET_CONNECT(name, S1Q, cS1Q) \ - NET_CONNECT(name, S2Q, cS2Q) \ - NET_CONNECT(name, S3Q, cS3Q) \ - NET_CONNECT(name, D0, cD0) \ - NET_CONNECT(name, D1, cD1) \ - NET_CONNECT(name, D2, cD2) \ - NET_CONNECT(name, D3, cD3) +#define TTL_9314(name, cEQ, cMRQ, cS0Q, cS1Q, cS2Q, cS3Q, cD0, cD1, cD2, cD3) \ + NET_REGISTER_DEV(TTL_9314, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, EQ, cEQ) \ + NET_CONNECT(name, MRQ, cMRQ) \ + NET_CONNECT(name, S0Q, cS0Q) \ + NET_CONNECT(name, S1Q, cS1Q) \ + NET_CONNECT(name, S2Q, cS2Q) \ + NET_CONNECT(name, S3Q, cS3Q) \ + NET_CONNECT(name, D0, cD0) \ + NET_CONNECT(name, D1, cD1) \ + NET_CONNECT(name, D2, cD2) \ + NET_CONNECT(name, D3, cD3) #define TTL_9314_DIP(name) \ NET_REGISTER_DEV(TTL_9314_DIP, name) diff --git a/src/lib/netlist/devices/nld_dm9334.cpp b/src/lib/netlist/devices/nld_dm9334.cpp index c08ce53efed..56226b36fe6 100644 --- a/src/lib/netlist/devices/nld_dm9334.cpp +++ b/src/lib/netlist/devices/nld_dm9334.cpp @@ -7,6 +7,7 @@ #include "nld_dm9334.h" #include "netlist/nl_base.h" +#include "nlid_system.h" namespace netlist { @@ -25,6 +26,7 @@ namespace netlist , m_last_D(*this, "m_last_D", 0) , m_last_A(*this, "m_last_A", 0) , m_last_Q(*this, "m_last_Q", 0) + , m_power_pins(*this) { } @@ -43,6 +45,7 @@ namespace netlist state_var m_last_D; state_var m_last_A; state_var m_last_Q; + nld_power_pins m_power_pins; }; NETLIB_OBJECT_DERIVED(9334_dip, 9334) @@ -56,6 +59,7 @@ namespace netlist register_subalias("5", m_Q[1]); register_subalias("6", m_Q[2]); register_subalias("7", m_Q[3]); + register_subalias("8", "GND"); register_subalias("9", m_Q[4]); register_subalias("10", m_Q[5]); @@ -64,6 +68,7 @@ namespace netlist register_subalias("13", m_D); register_subalias("14", m_EQ); register_subalias("15", m_CQ); + register_subalias("16", "VCC"); } }; @@ -143,7 +148,7 @@ namespace netlist m_Q[i].push((q >> i) & 1, delay); } - NETLIB_DEVICE_IMPL(9334, "TTL_9334", "+CQ,+EQ,+D,+A0,+A1,+A2") + NETLIB_DEVICE_IMPL(9334, "TTL_9334", "+CQ,+EQ,+D,+A0,+A1,+A2,@VCC,@GND") NETLIB_DEVICE_IMPL(9334_dip, "TTL_9334_DIP", "") } //namespace devices diff --git a/src/lib/netlist/devices/nld_dm9334.h b/src/lib/netlist/devices/nld_dm9334.h index e54208e3ba4..2f4ab1f18c1 100644 --- a/src/lib/netlist/devices/nld_dm9334.h +++ b/src/lib/netlist/devices/nld_dm9334.h @@ -67,14 +67,16 @@ #include "netlist/nl_setup.h" -#define TTL_9334(name, cCQ, cEQ, cD, cA0, cA1, cA2) \ - NET_REGISTER_DEV(TTL_9334, name) \ - NET_CONNECT(name, CQ, cCQ) \ - NET_CONNECT(name, EQ, cEQ) \ - NET_CONNECT(name, D, cD) \ - NET_CONNECT(name, A0, cA0) \ - NET_CONNECT(name, A1, cA1) \ - NET_CONNECT(name, A2, cA2) +#define TTL_9334(name, cCQ, cEQ, cD, cA0, cA1, cA2) \ + NET_REGISTER_DEV(TTL_9334, name) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, CQ, cCQ) \ + NET_CONNECT(name, EQ, cEQ) \ + NET_CONNECT(name, D, cD) \ + NET_CONNECT(name, A0, cA0) \ + NET_CONNECT(name, A1, cA1) \ + NET_CONNECT(name, A2, cA2) #define TTL_9334_DIP(name) \ NET_REGISTER_DEV(TTL_9334_DIP, name) diff --git a/src/lib/netlist/devices/nlid_cmos.h b/src/lib/netlist/devices/nlid_cmos.h index d91d691453a..06388a73535 100644 --- a/src/lib/netlist/devices/nlid_cmos.h +++ b/src/lib/netlist/devices/nlid_cmos.h @@ -13,8 +13,9 @@ namespace netlist { - namespace devices - { +namespace devices +{ + // FIXME: this needs to be removed NETLIB_OBJECT(vdd_vss) { NETLIB_CONSTRUCTOR(vdd_vss) @@ -34,7 +35,7 @@ namespace netlist analog_input_t m_vss; }; - } //namespace devices +} //namespace devices } // namespace netlist #endif /* NLID_CMOS_H_ */ diff --git a/src/lib/netlist/devices/nlid_proxy.cpp b/src/lib/netlist/devices/nlid_proxy.cpp index 55970d86c7d..2a9fccd1dc6 100644 --- a/src/lib/netlist/devices/nlid_proxy.cpp +++ b/src/lib/netlist/devices/nlid_proxy.cpp @@ -7,9 +7,6 @@ #include "nlid_proxy.h" #include "netlist/solver/nld_solver.h" -//#include "plib/pstream.h" -//#include "plib/pfmtlog.h" -//#include "nld_log.h" namespace netlist { @@ -79,36 +76,71 @@ namespace netlist } nld_d_to_a_proxy::nld_d_to_a_proxy(netlist_state_t &anetlist, const pstring &name, logic_output_t *out_proxied) - : nld_base_d_to_a_proxy(anetlist, name, out_proxied, m_RV.m_P) - , m_GNDHack(*this, "_Q") - , m_RV(*this, "RV") + : nld_base_d_to_a_proxy(anetlist, name, out_proxied, m_RN.m_P) + , m_RP(*this, "RP") + , m_RN(*this, "RN") , m_last_state(*this, "m_last_var", -1) , m_is_timestep(false) { const std::vector> power_syms = { {"VCC", "VEE"}, {"VCC", "GND"}, {"VDD", "VSS"}}; - register_subalias("Q", m_RV.m_P); + register_subalias("Q", m_RN.m_P); - connect(m_RV.m_N, m_GNDHack); bool f = false; + detail::core_terminal_t *tp(nullptr); + detail::core_terminal_t *tn(nullptr); for (auto & pwr_sym : power_syms) { pstring devname = out_proxied->device().name(); - auto tp = setup().find_terminal(devname + "." + pwr_sym.first, - detail::terminal_type::INPUT, false); - auto tn = setup().find_terminal(devname + "." + pwr_sym.second, - detail::terminal_type::INPUT, false); - if (tp != nullptr && tn != nullptr) + auto tp_t = setup().find_terminal(devname + "." + pwr_sym.first, + /*detail::terminal_type::INPUT,*/ false); + auto tn_t = setup().find_terminal(devname + "." + pwr_sym.second, + /*detail::terminal_type::INPUT,*/ false); + if (f && (tp_t != nullptr && tn_t != nullptr)) + log().warning(MI_MULTIPLE_POWER_TERMINALS_ON_DEVICE(out_proxied->device().name(), + tp->name(), tn->name(), + tp_t ? tp_t->name() : "", + tn_t ? tn_t->name() : "")); + else if (tp_t != nullptr && tn_t != nullptr) { /* alternative logic */ + tp = tp_t; + tn = tn_t; f = true; } } //FIXME: Use power terminals and change info to warning or error if (!f) - log().info(MI_NO_POWER_TERMINALS_ON_DEVICE_1(out_proxied->device().name())); + { + if (logic_family()->fixed_V() == 0.0) + log().error(MI_NO_POWER_TERMINALS_ON_DEVICE_1(setup().de_alias(out_proxied->device().name()))); + else + log().info(MI_NO_POWER_TERMINALS_ON_DEVICE_1(setup().de_alias(out_proxied->device().name()))); + m_GNDHack = plib::make_unique(*this, "_QGND"); + m_VCCHack = plib::make_unique(*this, "_QVCC"); + + connect(m_RN.m_N, *m_GNDHack); + connect(m_RP.m_P, *m_VCCHack); + connect(m_RN.m_P, m_RP.m_N); + } else + { log().verbose("D/A Proxy: Found power terminals on device {1}", out_proxied->device().name()); + if (setup().is_validation()) + { + // During validation, don't connect to terminals found + // This will cause terminals not connected to a rail net to + // fail connection stage. + connect(m_RN.m_N, m_RP.m_P); + } + else + { + connect(m_RN.m_N, *tn); + connect(m_RP.m_P, *tp); + } + connect(m_RN.m_P, m_RP.m_N); + } + //printf("vcc: %f\n", logic_family()->fixed_V()); } @@ -120,10 +152,17 @@ namespace netlist //m_Q.initial(0.0); m_last_state = -1; - m_RV.reset(); - m_is_timestep = m_RV.m_P.net().solver()->has_timestep_devices(); - m_RV.set_G_V_I(plib::constants::one() / logic_family()->R_low(), - logic_family()->low_V(0.0, supply_V), 0.0); + m_RN.reset(); + m_RP.reset(); + if (m_GNDHack) + m_GNDHack->initial(0); + if (m_VCCHack) + m_VCCHack->initial(supply_V); + m_is_timestep = m_RN.m_P.net().solver()->has_timestep_devices(); + m_RN.set_G_V_I(plib::constants::one() / logic_family()->R_low(), + logic_family()->low_offset_V(), 0.0); + m_RP.set_G_V_I(G_OFF, + 0.0, 0.0); } NETLIB_UPDATE(d_to_a_proxy) @@ -131,20 +170,27 @@ namespace netlist const auto state = static_cast(m_I()); if (state != m_last_state) { - // FIXME: Variable voltage - double supply_V = logic_family()->fixed_V(); - if (supply_V == 0.0) supply_V = 5.0; - m_last_state = state; - const nl_double R = state ? logic_family()->R_high() : logic_family()->R_low(); - const nl_double V = state ? logic_family()->high_V(0.0, supply_V) : logic_family()->low_V(0.0, supply_V); - // We only need to update the net first if this is a time stepping net if (m_is_timestep) { - m_RV.update(); + m_RN.update(); // RN, RP are connected ... + } + if (state) + { + m_RN.set_G_V_I(G_OFF, + 0.0, 0.0); + m_RP.set_G_V_I(plib::constants::one() / logic_family()->R_high(), + logic_family()->high_offset_V(), 0.0); } - m_RV.set_G_V_I(plib::constants::one() / R, V, 0.0); - m_RV.solve_later(); + else + { + m_RN.set_G_V_I(plib::constants::one() / logic_family()->R_low(), + logic_family()->low_offset_V(), 0.0); + m_RP.set_G_V_I(G_OFF, + 0.0, 0.0); + } + m_RN.solve_later(); // RN, RP are connected ... + m_last_state = state; } } diff --git a/src/lib/netlist/devices/nlid_proxy.h b/src/lib/netlist/devices/nlid_proxy.h index 9543b8db234..7a8377276a1 100644 --- a/src/lib/netlist/devices/nlid_proxy.h +++ b/src/lib/netlist/devices/nlid_proxy.h @@ -103,8 +103,13 @@ namespace netlist NETLIB_UPDATEI(); private: - analog_output_t m_GNDHack; // FIXME: Long term, we need to connect proxy gnd to device gnd - analog::NETLIB_SUB(twoterm) m_RV; + + static constexpr const nl_double G_OFF = 1e-9; + + plib::unique_ptr m_GNDHack; // FIXME: Long term, we need to connect proxy gnd to device gnd + plib::unique_ptr m_VCCHack; // FIXME: Long term, we need to connect proxy gnd to device gnd + analog::NETLIB_NAME(twoterm) m_RP; + analog::NETLIB_NAME(twoterm) m_RN; state_var m_last_state; bool m_is_timestep; }; diff --git a/src/lib/netlist/devices/nlid_system.h b/src/lib/netlist/devices/nlid_system.h index a88be547abc..b0769e95dd2 100644 --- a/src/lib/netlist/devices/nlid_system.h +++ b/src/lib/netlist/devices/nlid_system.h @@ -18,8 +18,8 @@ namespace netlist { - namespace devices - { +namespace devices +{ // ----------------------------------------------------------------------------- // netlistparams // ----------------------------------------------------------------------------- @@ -420,7 +420,36 @@ namespace netlist state_var m_last_state; }; - } //namespace devices + // ----------------------------------------------------------------------------- + // power pins - not a device, but a helper + // ----------------------------------------------------------------------------- + + class nld_power_pins + { + public: + nld_power_pins(device_t &owner, const char *sVCC = "VCC", const char *sGND = "GND") + { + if (owner.setup().is_validation()) + { + m_GND = plib::make_unique(owner, sGND); + m_VCC = plib::make_unique(owner, sVCC); + } + else + { + owner.create_and_register_subdevice("_RVG", m_RVG); + owner.register_subalias(sVCC, "_RVG.1"); + owner.register_subalias(sGND, "_RVG.2"); + } + } + + NETLIB_SUBXX(analog, R) m_RVG; // dummy resistor between VCC and GND + + private: + plib::unique_ptr m_VCC; // only used during validation + plib::unique_ptr m_GND; // only used during validation + }; + +} //namespace devices } // namespace netlist #endif /* NLD_SYSTEM_H_ */ diff --git a/src/lib/netlist/devices/nlid_truthtable.h b/src/lib/netlist/devices/nlid_truthtable.h index 1217d7ee873..43e32ded893 100644 --- a/src/lib/netlist/devices/nlid_truthtable.h +++ b/src/lib/netlist/devices/nlid_truthtable.h @@ -12,6 +12,7 @@ #include "netlist/nl_base.h" #include "netlist/nl_setup.h" +#include "netlist/devices/nlid_system.h" #include "plib/putil.h" #define NETLIB_TRUTHTABLE(cname, nIN, nOUT) \ @@ -108,6 +109,8 @@ namespace devices , m_fam(*this, fam) , m_ign(*this, "m_ign", 0) , m_ttp(ttp) + /* FIXME: the family should provide the names of the power-terminals! */ + , m_power_pins(*this) { init(desc); } @@ -211,6 +214,8 @@ namespace devices /* FIXME: check width */ state_var m_ign; const truthtable_t &m_ttp; + /* FIXME: the family should provide the names of the power-terminals! */ + nld_power_pins m_power_pins; }; class netlist_base_factory_truthtable_t : public factory::element_t diff --git a/src/lib/netlist/macro/nlm_other.cpp b/src/lib/netlist/macro/nlm_other.cpp index ea0eb1539a8..5d3caa125d0 100644 --- a/src/lib/netlist/macro/nlm_other.cpp +++ b/src/lib/netlist/macro/nlm_other.cpp @@ -28,18 +28,17 @@ static NETLIST_START(MC14584B_DIP) MC14584B_GATE(s5) MC14584B_GATE(s6) - DUMMY_INPUT(GND) - DUMMY_INPUT(VCC) - + NET_C(s1.VCC, s2.VCC, s3.VCC, s4.VCC, s5.VCC, s6.VCC) + NET_C(s1.GND, s2.GND, s3.GND, s4.GND, s5.GND, s6.GND) DIPPINS( /* +--------------+ */ - s1.A, /* A1 |1 ++ 14| VCC */ VCC.I, + s1.A, /* A1 |1 ++ 14| VCC */ s1.VCC, s1.Q, /* Y1 |2 13| A6 */ s6.A, s2.A, /* A2 |3 12| Y6 */ s6.Q, s2.Q, /* Y2 |4 MC14584B 11| A5 */ s5.A, s3.A, /* A3 |5 10| Y5 */ s5.Q, s3.Q, /* Y3 |6 9| A4 */ s4.A, - GND.I, /* GND |7 8| Y4 */ s4.Q - /* +--------------+ */ + s1.GND,/* GND |7 8| Y4 */ s4.Q + /* +--------------+ */ ) NETLIST_END() diff --git a/src/lib/netlist/macro/nlm_ttl74xx.cpp b/src/lib/netlist/macro/nlm_ttl74xx.cpp index 58cab049ae7..cff360af2b6 100644 --- a/src/lib/netlist/macro/nlm_ttl74xx.cpp +++ b/src/lib/netlist/macro/nlm_ttl74xx.cpp @@ -30,18 +30,18 @@ static NETLIST_START(TTL_7400_DIP) TTL_7400_GATE(s3) TTL_7400_GATE(s4) - DUMMY_INPUT(GND) - DUMMY_INPUT(VCC) + NET_C(s1.VCC, s2.VCC, s3.VCC, s4.VCC) + NET_C(s1.GND, s2.GND, s3.GND, s4.GND) DIPPINS( /* +--------------+ */ - s1.A, /* A1 |1 ++ 14| VCC */ VCC.I, + s1.A, /* A1 |1 ++ 14| VCC */ s1.VCC, s1.B, /* B1 |2 13| B4 */ s4.B, s1.Q, /* Y1 |3 12| A4 */ s4.A, s2.A, /* A2 |4 7400 11| Y4 */ s4.Q, s2.B, /* B2 |5 10| B3 */ s3.B, s2.Q, /* Y2 |6 9| A3 */ s3.A, - GND.I, /* GND |7 8| Y3 */ s3.Q - /* +--------------+ */ + s1.GND,/* GND |7 8| Y3 */ s3.Q + /* +--------------+ */ ) NETLIST_END() @@ -68,18 +68,18 @@ static NETLIST_START(TTL_7402_DIP) TTL_7402_GATE(s3) TTL_7402_GATE(s4) - DUMMY_INPUT(GND) - DUMMY_INPUT(VCC) + NET_C(s1.VCC, s2.VCC, s3.VCC, s4.VCC) + NET_C(s1.GND, s2.GND, s3.GND, s4.GND) DIPPINS( /* +--------------+ */ - s1.Q, /* Y1 |1 ++ 14| VCC */ VCC.I, + s1.Q, /* Y1 |1 ++ 14| VCC */ s1.VCC, s1.A, /* A1 |2 13| Y4 */ s4.Q, s1.B, /* B1 |3 12| B4 */ s4.B, s2.Q, /* Y2 |4 7402 11| A4 */ s4.A, s2.A, /* A2 |5 10| Y3 */ s3.Q, s2.B, /* B2 |6 9| B3 */ s3.B, - GND.I, /* GND |7 8| A3 */ s3.A - /* +--------------+ */ + s1.GND,/* GND |7 8| A3 */ s3.A + /* +--------------+ */ ) NETLIST_END() @@ -106,18 +106,18 @@ static NETLIST_START(TTL_7404_DIP) TTL_7404_GATE(s5) TTL_7404_GATE(s6) - DUMMY_INPUT(GND) - DUMMY_INPUT(VCC) + NET_C(s1.VCC, s2.VCC, s3.VCC, s4.VCC, s5.VCC, s6.VCC) + NET_C(s1.GND, s2.GND, s3.GND, s4.GND, s5.GND, s6.GND) DIPPINS( /* +--------------+ */ - s1.A, /* A1 |1 ++ 14| VCC */ VCC.I, + s1.A, /* A1 |1 ++ 14| VCC */ s1.VCC, s1.Q, /* Y1 |2 13| A6 */ s6.A, s2.A, /* A2 |3 12| Y6 */ s6.Q, s2.Q, /* Y2 |4 7404 11| A5 */ s5.A, s3.A, /* A3 |5 10| Y5 */ s5.Q, s3.Q, /* Y3 |6 9| A4 */ s4.A, - GND.I, /* GND |7 8| Y4 */ s4.Q - /* +--------------+ */ + s1.GND,/* GND |7 8| Y4 */ s4.Q + /* +--------------+ */ ) NETLIST_END() @@ -145,18 +145,18 @@ static NETLIST_START(TTL_7408_DIP) TTL_7408_GATE(s3) TTL_7408_GATE(s4) - DUMMY_INPUT(GND) - DUMMY_INPUT(VCC) + NET_C(s1.VCC, s2.VCC, s3.VCC, s4.VCC) + NET_C(s1.GND, s2.GND, s3.GND, s4.GND) DIPPINS( /* +--------------+ */ - s1.A, /* A1 |1 ++ 14| VCC */ VCC.I, + s1.A, /* A1 |1 ++ 14| VCC */ s1.VCC, s1.B, /* B1 |2 13| B4 */ s4.B, s1.Q, /* Y1 |3 12| A4 */ s4.A, s2.A, /* A2 |4 7400 11| Y4 */ s4.Q, s2.B, /* B2 |5 10| B3 */ s3.B, s2.Q, /* Y2 |6 9| A3 */ s3.A, - GND.I, /* GND |7 8| Y3 */ s3.Q - /* +--------------+ */ + s1.GND,/* GND |7 8| Y3 */ s3.Q + /* +--------------+ */ ) NETLIST_END() @@ -182,18 +182,18 @@ static NETLIST_START(TTL_7410_DIP) TTL_7410_GATE(s2) TTL_7410_GATE(s3) - DUMMY_INPUT(GND) - DUMMY_INPUT(VCC) + NET_C(s1.VCC, s2.VCC, s3.VCC) + NET_C(s1.GND, s2.GND, s3.GND) DIPPINS( /* +--------------+ */ - s1.A, /* A1 |1 ++ 14| VCC */ VCC.I, + s1.A, /* A1 |1 ++ 14| VCC */ s1.VCC, s1.B, /* B1 |2 13| C1 */ s1.C, s2.A, /* A2 |3 12| Y1 */ s1.Q, s2.B, /* B2 |4 7410 11| C3 */ s3.C, s2.C, /* C2 |5 10| B3 */ s3.B, s2.Q, /* Y2 |6 9| A3 */ s3.A, - GND.I, /* GND |7 8| Y3 */ s3.Q - /* +--------------+ */ + s1.GND,/* GND |7 8| Y3 */ s3.Q + /* +--------------+ */ ) NETLIST_END() @@ -219,17 +219,17 @@ static NETLIST_START(TTL_7411_DIP) TTL_7411_GATE(s2) TTL_7411_GATE(s3) - DUMMY_INPUT(GND) - DUMMY_INPUT(VCC) + NET_C(s1.VCC, s2.VCC, s3.VCC) + NET_C(s1.GND, s2.GND, s3.GND) DIPPINS( /* +--------------+ */ - s1.A, /* A1 |1 ++ 14| VCC */ VCC.I, + s1.A, /* A1 |1 ++ 14| VCC */ s1.VCC, s1.B, /* B1 |2 13| C1 */ s1.C, s2.A, /* A2 |3 12| Y1 */ s1.Q, s2.B, /* B2 |4 7411 11| C3 */ s3.C, s2.C, /* C2 |5 10| B3 */ s3.B, s2.Q, /* Y2 |6 9| A3 */ s3.A, - GND.I, /* GND |7 8| Y3 */ s3.Q + s1.GND,/* GND |7 8| Y3 */ s3.Q /* +--------------+ */ ) NETLIST_END() @@ -314,18 +314,18 @@ static NETLIST_START(TTL_7416_DIP) TTL_7416_GATE(s5) TTL_7416_GATE(s6) - DUMMY_INPUT(GND) - DUMMY_INPUT(VCC) + NET_C(s1.VCC, s2.VCC, s3.VCC, s4.VCC, s5.VCC, s6.VCC) + NET_C(s1.GND, s2.GND, s3.GND, s4.GND, s5.GND, s6.GND) DIPPINS( /* +--------------+ */ - s1.A, /* A1 |1 ++ 14| VCC */ VCC.I, + s1.A, /* A1 |1 ++ 14| VCC */ s1.VCC, s1.Q, /* Y1 |2 13| A6 */ s6.A, s2.A, /* A2 |3 12| Y6 */ s6.Q, s2.Q, /* Y2 |4 7416 11| A5 */ s5.A, s3.A, /* A3 |5 10| Y5 */ s5.Q, s3.Q, /* Y3 |6 9| A4 */ s4.A, - GND.I, /* GND |7 8| Y4 */ s4.Q - /* +--------------+ */ + s1.GND,/* GND |7 8| Y4 */ s4.Q + /* +--------------+ */ ) NETLIST_END() @@ -351,19 +351,19 @@ static NETLIST_START(TTL_7420_DIP) TTL_7420_GATE(s1) TTL_7420_GATE(s2) - DUMMY_INPUT(GND) - DUMMY_INPUT(VCC) + NET_C(s1.VCC, s2.VCC) + NET_C(s1.GND, s2.GND) DUMMY_INPUT(NC) DIPPINS( /* +--------------+ */ - s1.A, /* A1 |1 ++ 14| VCC */ VCC.I, + s1.A, /* A1 |1 ++ 14| VCC */ s1.VCC, s1.B, /* B1 |2 13| D2 */ s2.D, NC.I, /* NC |3 12| C2 */ s2.C, s1.C, /* C1 |4 7420 11| NC */ NC.I, s1.D, /* D1 |5 10| B2 */ s2.B, s1.Q, /* Y1 |6 9| A2 */ s2.A, - GND.I, /* GND |7 8| Y2 */ s2.Q - /* +--------------+ */ + s1.GND,/* GND |7 8| Y2 */ s2.Q + /* +--------------+ */ ) NETLIST_END() @@ -393,19 +393,19 @@ static NETLIST_START(TTL_7425_DIP) TTL_7425_GATE(s1) TTL_7425_GATE(s2) - DUMMY_INPUT(GND) - DUMMY_INPUT(VCC) + NET_C(s1.VCC, s2.VCC) + NET_C(s1.GND, s2.GND) DUMMY_INPUT(X) DIPPINS( /* +--------------+ */ - s1.A, /* A1 |1 ++ 14| VCC */ VCC.I, + s1.A, /* A1 |1 ++ 14| VCC */ s1.VCC, s1.B, /* B1 |2 13| D2 */ s2.D, - X.I, /* X1 |3 12| C2 */ s2.C, + X.I, /* X1 |3 12| C2 */ s2.C, s1.C, /* C1 |4 7425 11| X2 */ X.I, s1.D, /* D1 |5 10| B2 */ s2.B, s1.Q, /* Y1 |6 9| A2 */ s2.A, - GND.I, /* GND |7 8| Y2 */ s2.Q - /* +--------------+ */ + s1.GND,/* GND |7 8| Y2 */ s2.Q + /* +--------------+ */ ) NETLIST_END() @@ -432,17 +432,17 @@ static NETLIST_START(TTL_7427_DIP) TTL_7427_GATE(s2) TTL_7427_GATE(s3) - DUMMY_INPUT(GND) - DUMMY_INPUT(VCC) + NET_C(s1.VCC, s2.VCC, s3.VCC) + NET_C(s1.GND, s2.GND, s3.GND) DIPPINS( /* +--------------+ */ - s1.A, /* A1 |1 ++ 14| VCC */ VCC.I, + s1.A, /* A1 |1 ++ 14| VCC */ s1.VCC, s1.B, /* B1 |2 13| C1 */ s1.C, s2.A, /* A2 |3 12| Y1 */ s1.Q, s2.B, /* B2 |4 7427 11| C3 */ s3.C, s2.C, /* C2 |5 10| B3 */ s3.B, s2.Q, /* Y2 |6 9| A3 */ s3.A, - GND.I, /* GND |7 8| Y3 */ s3.Q + s1.GND,/* GND |7 8| Y3 */ s3.Q /* +--------------+ */ ) NETLIST_END() @@ -471,18 +471,16 @@ NETLIST_END() static NETLIST_START(TTL_7430_DIP) TTL_7430_GATE(s1) - DUMMY_INPUT(GND) - DUMMY_INPUT(VCC) DUMMY_INPUT(NC) DIPPINS( /* +--------------+ */ - s1.A, /* A |1 ++ 14| VCC */ VCC.I, + s1.A, /* A |1 ++ 14| VCC */ s1.VCC, s1.B, /* B |2 13| NC */ NC.I, s1.C, /* C |3 12| H */ s1.H, s1.D, /* D |4 7430 11| G */ s1.G, s1.E, /* E |5 10| NC */ NC.I, s1.F, /* F |6 9| NC */ NC.I, - GND.I, /* GND |7 8| Y */ s1.Q + s1.GND,/* GND |7 8| Y */ s1.Q /* +--------------+ */ ) NETLIST_END() @@ -511,18 +509,18 @@ static NETLIST_START(TTL_7432_DIP) TTL_7432_GATE(s3) TTL_7432_GATE(s4) - DUMMY_INPUT(GND) - DUMMY_INPUT(VCC) + NET_C(s1.VCC, s2.VCC, s3.VCC, s4.VCC) + NET_C(s1.GND, s2.GND, s3.GND, s4.GND) DIPPINS( /* +--------------+ */ - s1.A, /* A1 |1 ++ 14| VCC */ VCC.I, + s1.A, /* A1 |1 ++ 14| VCC */ s1.VCC, s1.B, /* B1 |2 13| B4 */ s4.B, s1.Q, /* Y1 |3 12| A4 */ s4.A, s2.A, /* A2 |4 7400 11| Y4 */ s4.Q, s2.B, /* B2 |5 10| B3 */ s3.B, s2.Q, /* Y2 |6 9| A3 */ s3.A, - GND.I, /* GND |7 8| Y3 */ s3.Q - /* +--------------+ */ + s1.GND,/* GND |7 8| Y3 */ s3.Q + /* +--------------+ */ ) NETLIST_END() @@ -553,18 +551,18 @@ static NETLIST_START(TTL_7437_DIP) TTL_7437_GATE(s3) TTL_7437_GATE(s4) - DUMMY_INPUT(GND) - DUMMY_INPUT(VCC) + NET_C(s1.VCC, s2.VCC, s3.VCC, s4.VCC) + NET_C(s1.GND, s2.GND, s3.GND, s4.GND) DIPPINS( /* +--------------+ */ - s1.A, /* A1 |1 ++ 14| VCC */ VCC.I, + s1.A, /* A1 |1 ++ 14| VCC */ s1.VCC, s1.B, /* B1 |2 13| B4 */ s4.B, s1.Q, /* Y1 |3 12| A4 */ s4.A, s2.A, /* A2 |4 7400 11| Y4 */ s4.Q, s2.B, /* B2 |5 10| B3 */ s3.B, s2.Q, /* Y2 |6 9| A3 */ s3.A, - GND.I, /* GND |7 8| Y3 */ s3.Q - /* +--------------+ */ + s1.GND,/* GND |7 8| Y3 */ s3.Q + /* +--------------+ */ ) NETLIST_END() @@ -591,17 +589,17 @@ static NETLIST_START(TTL_7486_DIP) TTL_7486_GATE(s3) TTL_7486_GATE(s4) - DUMMY_INPUT(GND) - DUMMY_INPUT(VCC) + NET_C(s1.VCC, s2.VCC, s3.VCC, s4.VCC) + NET_C(s1.GND, s2.GND, s3.GND, s4.GND) DIPPINS( /* +--------------+ */ - s1.A, /* A1 |1 ++ 14| VCC */ VCC.I, + s1.A, /* A1 |1 ++ 14| VCC */ s1.VCC, s1.B, /* B1 |2 13| B4 */ s4.B, s1.Q, /* Y1 |3 12| A4 */ s4.A, s2.A, /* A2 |4 7486 11| Y4 */ s4.Q, s2.B, /* B2 |5 10| B3 */ s3.B, s2.Q, /* Y2 |6 9| A3 */ s3.A, - GND.I, /* GND |7 8| Y3 */ s3.Q + s1.GND,/* GND |7 8| Y3 */ s3.Q /* +--------------+ */ ) NETLIST_END() @@ -642,18 +640,18 @@ static NETLIST_START(TTL_74155_DIP) NET_C(s1.A, s2.A) NET_C(s1.B, s2.B) - DUMMY_INPUT(GND) - DUMMY_INPUT(VCC) + NET_C(s1.VCC, s2.VCC) + NET_C(s1.GND, s2.GND) DIPPINS( /* +--------------+ */ - s1.C, /* C1 |1 ++ 16| VCC */ VCC.I, + s1.C, /* C1 |1 ++ 16| VCC */ s1.VCC, s1.G, /* G1 |2 15| B4 */ s2.C, s1.B, /* B |3 14| B4 */ s2.G, s1.3, /* 1Y3 |4 74155 13| A4 */ s2.A, s2.2, /* 1Y2 |5 12| Y4 */ s2.3, s2.1, /* 1Y1 |6 11| B3 */ s2.2, s2.0, /* 1Y0 |7 10| A3 */ s2.1, - GND.I, /* GND |8 9| Y3 */ s2.0 + s1.GND,/* GND |8 9| Y3 */ s2.0 /* +--------------+ */ ) NETLIST_END() @@ -665,18 +663,18 @@ static NETLIST_START(TTL_74156_DIP) NET_C(s1.A, s2.A) NET_C(s1.B, s2.B) - DUMMY_INPUT(GND) - DUMMY_INPUT(VCC) + NET_C(s1.VCC, s2.VCC) + NET_C(s1.GND, s2.GND) DIPPINS( /* +--------------+ */ - s1.C, /* C1 |1 ++ 16| VCC */ VCC.I, + s1.C, /* C1 |1 ++ 16| VCC */ s1.VCC, s1.G, /* G1 |2 15| B4 */ s2.C, s1.B, /* B |3 14| B4 */ s2.G, s1.3, /* 1Y3 |4 74156 13| A4 */ s2.A, s2.2, /* 1Y2 |5 12| Y4 */ s2.3, s2.1, /* 1Y1 |6 11| B3 */ s2.2, s2.0, /* 1Y0 |7 10| A3 */ s2.1, - GND.I, /* GND |8 9| Y3 */ s2.0 + s1.GND,/* GND |8 9| Y3 */ s2.0 /* +--------------+ */ ) NETLIST_END() @@ -704,18 +702,18 @@ static NETLIST_START(TTL_74260_DIP) TTL_74260_GATE(s1) TTL_74260_GATE(s2) - DUMMY_INPUT(GND) - DUMMY_INPUT(VCC) + NET_C(s1.VCC, s2.VCC) + NET_C(s1.GND, s2.GND) DIPPINS( /* +--------------+ */ - s1.C, /* C1 |1 ++ 14| VCC */ VCC.I, + s1.C, /* C1 |1 ++ 14| VCC */ s1.VCC, s1.D, /* D1 |2 13| B1 */ s1.B, s1.E, /* E1 |3 12| A1 */ s1.A, s2.E, /* E2 |4 74260 11| D2 */ s2.D, s1.Q, /* Y1 |5 10| C2 */ s2.C, s2.Q, /* Y2 |6 9| B2 */ s2.B, - GND.I, /* GND |7 8| A2 */ s2.A - /* +--------------+ */ + s1.GND,/* GND |7 8| A2 */ s2.A + /* +--------------+ */ ) NETLIST_END() @@ -751,18 +749,18 @@ static NETLIST_START(TTL_74279_DIP) TTL_74279B(s3) TTL_74279A(s4) - DUMMY_INPUT(GND) - DUMMY_INPUT(VCC) + NET_C(s1.VCC, s2.VCC, s3.VCC, s4.VCC) + NET_C(s1.GND, s2.GND, s3.GND, s4.GND) DIPPINS( /* +--------------+ */ - s1.R, /* 1R |1 ++ 16| VCC */ VCC.I, + s1.R, /* 1R |1 ++ 16| VCC */ s1.VCC, s1.S1, /* 1S1 |2 15| 4S */ s4.S, s1.S2, /* 1S2 |3 14| 4R */ s4.R, s1.Q, /* 1Q |4 74279 13| 4Q */ s4.Q, s2.R, /* 2R |5 12| 3S2 */ s3.S2, s2.S, /* 2S |6 11| 3S1 */ s3.S1, s2.Q, /* 2Q |7 10| 3R */ s3.R, - GND.I, /* GND |8 9| 3Q */ s3.Q + s1.GND, /* GND |8 9| 3Q */ s3.Q /* +--------------+ */ ) NETLIST_END() @@ -807,18 +805,15 @@ NETLIST_END() static NETLIST_START(DM9312_DIP) DM9312_TT(s) - DUMMY_INPUT(GND) - DUMMY_INPUT(VCC) - -DIPPINS( /* +--------------+ */ - s.D0, /* D0 |1 ++ 16| VCC */ VCC.I, + DIPPINS( /* +--------------+ */ + s.D0, /* D0 |1 ++ 16| VCC */ s.VCC, s.D1, /* D1 |2 15| Y */ s.Y, s.D2, /* D2 |3 14| YQ */ s.YQ, s.D3, /* D3 |4 9312 13| C */ s.C, s.D4, /* D4 |5 12| B */ s.B, s.D5, /* D5 |6 11| A */ s.A, s.D6, /* D6 |7 10| G */ s.G, //Strobe - GND.I, /* GND |8 9| D7 */ s.D7 + s.GND, /* GND |8 9| D7 */ s.D7 /* +--------------+ */ ) NETLIST_END() @@ -839,7 +834,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,@VCC,@GND") TT_HEAD("A,B|Q ") TT_LINE("0,X|1|22") TT_LINE("X,0|1|22") @@ -855,7 +850,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,@VCC,@GND") TT_HEAD("A,B|Q ") TT_LINE("0,0|1|22") TT_LINE("X,1|0|15") @@ -870,7 +865,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,@VCC,@GND") TT_HEAD(" A | Q ") TT_LINE(" 0 | 1 |22") TT_LINE(" 1 | 0 |15") @@ -885,7 +880,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,@VCC,@GND") TT_HEAD("A,B|Q ") TT_LINE("0,X|0|15") TT_LINE("X,0|0|15") @@ -893,7 +888,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,@VCC,@GND") TT_HEAD("A,B,C|Q ") TT_LINE("0,X,X|1|22") TT_LINE("X,0,X|1|22") @@ -911,7 +906,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,@VCC,@GND") TT_HEAD("A,B,C|Q ") TT_LINE("0,X,X|0|15") TT_LINE("X,0,X|0|15") @@ -947,7 +942,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,@VCC,@GND") TT_HEAD("A,B,C,D|Q ") TT_LINE("0,X,X,X|1|22") TT_LINE("X,0,X,X|1|22") @@ -967,7 +962,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,@VCC,@GND") TT_HEAD("A,B,C,D|Q ") TT_LINE("1,X,X,X|0|15") TT_LINE("X,1,X,X|0|15") @@ -986,7 +981,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,@VCC,@GND") TT_HEAD("A,B,C|Q ") TT_LINE("1,X,X|0|15") TT_LINE("X,1,X|0|15") @@ -1009,7 +1004,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,@VCC,@GND") 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") @@ -1031,7 +1026,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,@VCC,@GND") TT_HEAD("A,B|Q ") TT_LINE("1,X|1|22") TT_LINE("X,1|1|22") @@ -1068,7 +1063,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,@VCC,@GND") TT_HEAD("A,B|Q ") TT_LINE("0,0|0|15") TT_LINE("0,1|1|22") @@ -1132,8 +1127,8 @@ NETLIST_START(TTL74XX_lib) TT_FAMILY("74XX") TRUTHTABLE_END() - TRUTHTABLE_START(TTL_74260_NOR, 5, 1, "+A,+B,+C,+D,+E") - TT_HEAD("A,B,C,D,E|Q ") + TRUTHTABLE_START(TTL_74260_NOR, 5, 1, "+A,+B,+C,+D,+E,@VCC,@GND") + 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") TT_LINE("X,X,X,1,X|0|12") @@ -1163,7 +1158,7 @@ NETLIST_START(TTL74XX_lib) TT_FAMILY("74XX") TRUTHTABLE_END() - TRUTHTABLE_START(DM9312_TT, 12, 2, "+A,+B,+C,+G,+D0,+D1,+D2,+D3,+D4,+D5,+D6,+D7") + TRUTHTABLE_START(DM9312_TT, 12, 2, "+A,+B,+C,+G,+D0,+D1,+D2,+D3,+D4,+D5,+D6,+D7,@VCC,@GND") TT_HEAD(" C, B, A, G,D0,D1,D2,D3,D4,D5,D6,D7| Y,YQ") TT_LINE(" X, X, X, 1, X, X, X, X, X, X, X, X| 0, 1|33,19") TT_LINE(" 0, 0, 0, 0, 0, X, X, X, X, X, X, X| 0, 1|33,28") diff --git a/src/lib/netlist/macro/nlm_ttl74xx.h b/src/lib/netlist/macro/nlm_ttl74xx.h index 21ff99f2efe..0cfc7ae27f4 100644 --- a/src/lib/netlist/macro/nlm_ttl74xx.h +++ b/src/lib/netlist/macro/nlm_ttl74xx.h @@ -13,107 +13,118 @@ #ifndef NL_AUTO_DEVICES -#define TTL_7400_GATE(name) \ +#define TTL_7400_GATE(name) \ NET_REGISTER_DEV(TTL_7400_GATE, name) -#define TTL_7400_NAND(name, cA, cB) \ +#define TTL_7400_NAND(name, cA, cB) \ NET_REGISTER_DEV(TTL_7400_NAND, name) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, GND, GND) \ NET_CONNECT(name, A, cA) \ NET_CONNECT(name, B, cB) -#define TTL_7400_DIP(name) \ +#define TTL_7400_DIP(name) \ NET_REGISTER_DEV(TTL_7400_DIP, name) -#define TTL_7402_GATE(name) \ +#define TTL_7402_GATE(name) \ NET_REGISTER_DEV(TTL_7402_GATE, name) -#define TTL_7402_NOR(name, cI1, cI2) \ - NET_REGISTER_DEV(TTL_7402_NOR, name) \ - NET_CONNECT(name, A, cI1) \ +#define TTL_7402_NOR(name, cI1, cI2) \ + NET_REGISTER_DEV(TTL_7402_NOR, name) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, A, cI1) \ NET_CONNECT(name, B, cI2) -#define TTL_7402_DIP(name) \ +#define TTL_7402_DIP(name) \ NET_REGISTER_DEV(TTL_7402_DIP, name) -#define TTL_7404_GATE(name) \ +#define TTL_7404_GATE(name) \ NET_REGISTER_DEV(TTL_7404_GATE, name) -#define TTL_7404_INVERT(name, cA) \ - NET_REGISTER_DEV(TTL_7404_INVERT, name) \ +#define TTL_7404_INVERT(name, cA) \ + NET_REGISTER_DEV(TTL_7404_INVERT, name) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, GND, GND) \ NET_CONNECT(name, A, cA) -#define TTL_7404_DIP(name) \ +#define TTL_7404_DIP(name) \ NET_REGISTER_DEV(TTL_7404_DIP, name) - -#define TTL_7408_GATE(name) \ +#define TTL_7408_GATE(name) \ NET_REGISTER_DEV(TTL_7408_GATE, name) -#define TTL_7408_AND(name, cA, cB) \ +#define TTL_7408_AND(name, cA, cB) \ NET_REGISTER_DEV(TTL_7408_AND, name) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, GND, GND) \ NET_CONNECT(name, A, cA) \ NET_CONNECT(name, B, cB) -#define TTL_7408_DIP(name) \ +#define TTL_7408_DIP(name) \ NET_REGISTER_DEV(TTL_7408_DIP, name) - -#define TTL_7410_GATE(name) \ +#define TTL_7410_GATE(name) \ NET_REGISTER_DEV(TTL_7410_GATE, name) -#define TTL_7410_NAND(name, cI1, cI2, cI3) \ - NET_REGISTER_DEV(TTL_7410_NAND, name) \ - NET_CONNECT(name, A, cI1) \ - NET_CONNECT(name, B, cI2) \ +#define TTL_7410_NAND(name, cI1, cI2, cI3) \ + NET_REGISTER_DEV(TTL_7410_NAND, name) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, A, cI1) \ + NET_CONNECT(name, B, cI2) \ NET_CONNECT(name, C, cI3) -#define TTL_7410_DIP(name) \ +#define TTL_7410_DIP(name) \ NET_REGISTER_DEV(TTL_7410_DIP, name) -#define TTL_7411_GATE(name) \ +#define TTL_7411_GATE(name) \ NET_REGISTER_DEV(TTL_7411_GATE, name) -#define TTL_7411_AND(name, cI1, cI2, cI3) \ - NET_REGISTER_DEV(TTL_7411_AND, name) \ - NET_CONNECT(name, A, cI1) \ - NET_CONNECT(name, B, cI2) \ +#define TTL_7411_AND(name, cI1, cI2, cI3) \ + NET_REGISTER_DEV(TTL_7411_AND, name) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, A, cI1) \ + NET_CONNECT(name, B, cI2) \ NET_CONNECT(name, C, cI3) -#define TTL_7411_DIP(name) \ +#define TTL_7411_DIP(name) \ NET_REGISTER_DEV(TTL_7411_DIP, name) - -#define TTL_7414_GATE(name) \ +#define TTL_7414_GATE(name) \ NET_REGISTER_DEV(TTL_7414_GATE, name) -#define TTL_7414_DIP(name) \ +#define TTL_7414_DIP(name) \ NET_REGISTER_DEV(TTL_7414_DIP, name) -#define TTL_74LS14_GATE(name) \ +#define TTL_74LS14_GATE(name) \ NET_REGISTER_DEV(TTL_74LS14_GATE, name) -#define TTL_74LS14_DIP(name) \ +#define TTL_74LS14_DIP(name) \ NET_REGISTER_DEV(TTL_74LS14_DIP, name) -#define TTL_7416_GATE(name) \ +#define TTL_7416_GATE(name) \ NET_REGISTER_DEV(TTL_7416_GATE, name) -#define TTL_7416_DIP(name) \ +#define TTL_7416_DIP(name) \ NET_REGISTER_DEV(TTL_7416_DIP, name) -#define TTL_7420_GATE(name) \ +#define TTL_7420_GATE(name) \ NET_REGISTER_DEV(TTL_7420_GATE, name) -#define TTL_7420_NAND(name, cI1, cI2, cI3, cI4) \ - NET_REGISTER_DEV(TTL_7420_NAND, name) \ - NET_CONNECT(name, A, cI1) \ - NET_CONNECT(name, B, cI2) \ - NET_CONNECT(name, C, cI3) \ +#define TTL_7420_NAND(name, cI1, cI2, cI3, cI4) \ + NET_REGISTER_DEV(TTL_7420_NAND, name) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, A, cI1) \ + NET_CONNECT(name, B, cI2) \ + NET_CONNECT(name, C, cI3) \ NET_CONNECT(name, D, cI4) #define TTL_7420_DIP(name) \ @@ -125,6 +136,8 @@ #define TTL_7425_NOR(name, cI1, cI2, cI3, cI4) \ NET_REGISTER_DEV(TTL_7425_NOR, name) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, GND, GND) \ NET_CONNECT(name, A, cI1) \ NET_CONNECT(name, B, cI2) \ NET_CONNECT(name, C, cI3) \ @@ -139,6 +152,8 @@ #define TTL_7427_NOR(name, cI1, cI2, cI3) \ NET_REGISTER_DEV(TTL_7427_NOR, name) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, GND, GND) \ NET_CONNECT(name, A, cI1) \ NET_CONNECT(name, B, cI2) \ NET_CONNECT(name, C, cI3) @@ -150,8 +165,10 @@ #define TTL_7430_GATE(name) \ NET_REGISTER_DEV(TTL_7430_GATE, name) -#define TTL_7430_NAND(name, cI1, cI2, cI3, cI4, cI5, cI6, cI7, cI8) \ +#define TTL_7430_NAND(name, cI1, cI2, cI3, cI4, cI5, cI6, cI7, cI8)\ NET_REGISTER_DEV(TTL_7430_NAND, name) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, GND, GND) \ NET_CONNECT(name, A, cI1) \ NET_CONNECT(name, B, cI2) \ NET_CONNECT(name, C, cI3) \ @@ -170,18 +187,21 @@ #define TTL_7432_OR(name, cI1, cI2) \ NET_REGISTER_DEV(TTL_7432_OR, name) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, GND, GND) \ NET_CONNECT(name, A, cI1) \ NET_CONNECT(name, B, cI2) #define TTL_7432_DIP(name) \ NET_REGISTER_DEV(TTL_7432_DIP, name) - #define TTL_7437_GATE(name) \ NET_REGISTER_DEV(TTL_7437_GATE, name) #define TTL_7437_NAND(name, cA, cB) \ NET_REGISTER_DEV(TTL_7437_NAND, name) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, GND, GND) \ NET_CONNECT(name, A, cA) \ NET_CONNECT(name, B, cB) @@ -194,6 +214,8 @@ #define TTL_7486_XOR(name, cA, cB) \ NET_REGISTER_DEV(TTL_7486_XOR, name) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, GND, GND) \ NET_CONNECT(name, A, cA) \ NET_CONNECT(name, B, cB) @@ -206,40 +228,43 @@ #define TTL_74156_DIP(name) \ NET_REGISTER_DEV(TTL_74156_DIP, name) - #define TTL_74260_GATE(name) \ NET_REGISTER_DEV(TTL_74260_GATE, name) -#define TTL_74260_NOR(name, cA, cB, cC, cD, cE) \ - NET_REGISTER_DEV(TTL_74260_NOR, name) \ - NET_CONNECT(name, A, cA) \ - NET_CONNECT(name, B, cB) \ - NET_CONNECT(name, C, cC) \ - NET_CONNECT(name, D, cD) \ +#define TTL_74260_NOR(name, cA, cB, cC, cD, cE) \ + NET_REGISTER_DEV(TTL_74260_NOR, name) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, A, cA) \ + NET_CONNECT(name, B, cB) \ + NET_CONNECT(name, C, cC) \ + NET_CONNECT(name, D, cD) \ NET_CONNECT(name, E, cE) -#define TTL_74260_DIP(name) \ +#define TTL_74260_DIP(name) \ NET_REGISTER_DEV(TTL_74260_DIP, name) #define TTL_74279_DIP(name) \ NET_REGISTER_DEV(TTL_74279_DIP, name) #define DM9312(name, cA, cB, cC, cSTROBE, cD0, cD1, cD2, cD3, cD4, cD5, cD6, cD7) \ - NET_REGISTER_DEV(DM9312_TT, name) \ - NET_CONNECT(name, A, cA) \ - NET_CONNECT(name, B, cB) \ - NET_CONNECT(name, C, cC) \ - NET_CONNECT(name, G, cSTROBE) \ - NET_CONNECT(name, D0, cD0) \ - NET_CONNECT(name, D1, cD1) \ - NET_CONNECT(name, D2, cD2) \ - NET_CONNECT(name, D3, cD3) \ - NET_CONNECT(name, D4, cD4) \ - NET_CONNECT(name, D5, cD5) \ - NET_CONNECT(name, D6, cD6) \ + NET_REGISTER_DEV(DM9312_TT, name) \ + NET_CONNECT(name, VCC, VCC) \ + NET_CONNECT(name, GND, GND) \ + NET_CONNECT(name, A, cA) \ + NET_CONNECT(name, B, cB) \ + NET_CONNECT(name, C, cC) \ + NET_CONNECT(name, G, cSTROBE) \ + NET_CONNECT(name, D0, cD0) \ + NET_CONNECT(name, D1, cD1) \ + NET_CONNECT(name, D2, cD2) \ + NET_CONNECT(name, D3, cD3) \ + NET_CONNECT(name, D4, cD4) \ + NET_CONNECT(name, D5, cD5) \ + NET_CONNECT(name, D6, cD6) \ NET_CONNECT(name, D7, cD7) -#define DM9312_DIP(name) \ +#define DM9312_DIP(name) \ NET_REGISTER_DEV(DM9312_DIP, name) #endif diff --git a/src/lib/netlist/nl_base.h b/src/lib/netlist/nl_base.h index 73abe52f3fb..8e6e961d9ba 100644 --- a/src/lib/netlist/nl_base.h +++ b/src/lib/netlist/nl_base.h @@ -257,8 +257,8 @@ namespace netlist double fixed_V() const { return m_fixed_V; } double low_thresh_V(const double VN, const double VP) const { return VN + (VP - VN) * m_low_thresh_PCNT; } double high_thresh_V(const double VN, const double VP) const { return VN + (VP - VN) * m_high_thresh_PCNT; } - double low_V(const double VN, const double VP) const { plib::unused_var(VP); return VN + m_low_VO; } - double high_V(const double VN, const double VP) const { plib::unused_var(VN); return VP - m_high_VO; } + double low_offset_V() const { return m_low_VO; } + double high_offset_V() const { return m_high_VO; } double R_low() const { return m_R_low; } double R_high() const { return m_R_high; } diff --git a/src/lib/netlist/nl_errstr.h b/src/lib/netlist/nl_errstr.h index d20fc3e134f..7f2ffe600b9 100644 --- a/src/lib/netlist/nl_errstr.h +++ b/src/lib/netlist/nl_errstr.h @@ -110,6 +110,9 @@ PERRMSGV(MI_LOGIC_OUTPUT_1_WITHOUT_CONNECTIONS, 1, "Found logic output {1} witho 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(ME_TERMINAL_1_WITHOUT_NET, 1, "Found terminal {1} without a net") +PERRMSGV(MF_TERMINALS_WITHOUT_NET, 0, "Found terminals without a net") + 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(MW_DATA_1_NOT_FOUND, 1, "unable to find data {1} in sources collection") @@ -121,6 +124,7 @@ PERRMSGV(MW_FREQUENCY_OUTSIDE_OF_SPECS_1, 1, "MM5837: Frequency outside of // nlid_proxy.cpp 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}") #endif /* NL_ERRSTR_H_ */ diff --git a/src/lib/netlist/nl_parser.cpp b/src/lib/netlist/nl_parser.cpp index d23ae4b7439..5cffde0f053 100644 --- a/src/lib/netlist/nl_parser.cpp +++ b/src/lib/netlist/nl_parser.cpp @@ -359,16 +359,28 @@ void parser_t::device(const pstring &dev_type) for (const pstring &tp : paramlist) { - require_token(m_tok_comma); if (plib::startsWith(tp, "+")) { + require_token(m_tok_comma); 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 if (plib::startsWith(tp, "@")) + { + pstring term = tp.substr(1); + m_setup.log().debug("Link: {1} {2}\n", tp, term); + + //FIXME + if (term == "VCC") + m_setup.register_link(devname + "." + term, "V5"); + else + m_setup.register_link(devname + "." + term, term); + } else { + require_token(m_tok_comma); pstring paramfq = devname + "." + tp; m_setup.log().debug("Defparam: {1}\n", paramfq); diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp index 7e58bd4c187..ede026a593d 100644 --- a/src/lib/netlist/nl_setup.cpp +++ b/src/lib/netlist/nl_setup.cpp @@ -194,7 +194,7 @@ namespace netlist void nlparse_t::register_link_fqn(const pstring &sin, const pstring &sout) { link_t temp = link_t(sin, sout); - log().debug("link {1} <== {2}\n", sin, sout); + log().debug("link {1} <== {2}", sin, sout); m_links.push_back(temp); } @@ -230,6 +230,7 @@ setup_t::setup_t(netlist_state_t &nlstate) , m_nlstate(nlstate) , m_netlist_params(nullptr) , m_proxy_cnt(0) + , m_validation(false) { } @@ -296,17 +297,13 @@ void setup_t::remove_connections(const pstring &pin) log().fatal(MF_FOUND_NO_OCCURRENCE_OF_1(pin)); } - - void setup_t::register_param_t(const pstring &name, param_t ¶m) { if (!m_params.insert({param.name(), param_ref_t(param.name(), param.device(), param)}).second) log().fatal(MF_ADDING_PARAMETER_1_TO_PARAMETER_LIST(name)); } - - -const pstring setup_t::resolve_alias(const pstring &name) const +pstring setup_t::resolve_alias(const pstring &name) const { pstring temp = name; pstring ret; @@ -322,7 +319,31 @@ const pstring setup_t::resolve_alias(const pstring &name) const return ret; } -std::vector setup_t::get_terminals_for_device_name(const pstring &devname) +pstring setup_t::de_alias(const pstring &alias) const +{ + pstring temp = alias; + pstring ret; + + /* FIXME: Detect endless loop */ + do { + ret = temp; + temp = ""; + for (auto &e : m_alias) + { + // FIXME: this will resolve first one found + if (e.second == ret) + { + temp = e.first; + break; + } + } + } while (temp != "" && temp != ret); + + log().debug("{1}==>{2}\n", alias, ret); + return ret; +} + +std::vector setup_t::get_terminals_for_device_name(const pstring &devname) const { std::vector terms; for (auto & t : m_terminals) @@ -358,7 +379,7 @@ std::vector setup_t::get_terminals_for_device_name(const pstring &devna return terms; } -detail::core_terminal_t *setup_t::find_terminal(const pstring &terminal_in, bool required) +detail::core_terminal_t *setup_t::find_terminal(const pstring &terminal_in, bool required) const { const pstring &tname = resolve_alias(terminal_in); auto ret = m_terminals.find(tname); @@ -379,7 +400,7 @@ detail::core_terminal_t *setup_t::find_terminal(const pstring &terminal_in, bool } detail::core_terminal_t *setup_t::find_terminal(const pstring &terminal_in, - detail::terminal_type atype, bool required) + detail::terminal_type atype, bool required) const { const pstring &tname = resolve_alias(terminal_in); auto ret = m_terminals.find(tname); @@ -746,7 +767,7 @@ void setup_t::resolve_inputs() if (tries == 0) { for (auto & link : m_links) - log().warning(MF_CONNECTING_1_TO_2(link.first, link.second)); + log().warning(MF_CONNECTING_1_TO_2(setup().de_alias(link.first), setup().de_alias(link.second))); log().fatal(MF_LINK_TRIES_EXCEEDED(NL_MAX_LINK_RESOLVE_LOOPS)); } @@ -757,7 +778,7 @@ void setup_t::resolve_inputs() delete_empty_nets(); - pstring errstr(""); + bool err(false); log().verbose("looking for terminals not connected ..."); for (auto & i : m_terminals) @@ -766,7 +787,10 @@ void setup_t::resolve_inputs() if (!term->has_net() && dynamic_cast< devices::NETLIB_NAME(dummy_input) *>(&term->device()) != nullptr) log().info(MI_DUMMY_1_WITHOUT_CONNECTIONS(term->name())); else if (!term->has_net()) - errstr += plib::pfmt("Found terminal {1} without a net\n")(term->name()); + { + log().error(ME_TERMINAL_1_WITHOUT_NET(setup().de_alias(term->name()))); + err = true; + } else if (term->net().num_cons() == 0) { if (term->is_logic_input()) @@ -779,9 +803,8 @@ void setup_t::resolve_inputs() log().warning(MW_TERMINAL_1_WITHOUT_CONNECTIONS(term->name())); } } - //FIXME: error string handling - if (errstr != "") - log().fatal("{1}", errstr); + if (err) + log().fatal(MF_TERMINALS_WITHOUT_NET()); } diff --git a/src/lib/netlist/nl_setup.h b/src/lib/netlist/nl_setup.h index 3bc27b505cc..4f8bbc3bced 100644 --- a/src/lib/netlist/nl_setup.h +++ b/src/lib/netlist/nl_setup.h @@ -369,16 +369,18 @@ namespace netlist const factory::list_t &factory() const { return m_factory; } /* helper - also used by nltool */ - const pstring resolve_alias(const pstring &name) const; + pstring resolve_alias(const pstring &name) const; + pstring de_alias(const pstring &alias) const; /* needed by nltool */ - std::vector get_terminals_for_device_name(const pstring &devname); + std::vector get_terminals_for_device_name(const pstring &devname) const; log_type &log(); const log_type &log() const; /* needed by proxy */ - detail::core_terminal_t *find_terminal(const pstring &outname_in, const detail::terminal_type atype, bool required = true); + detail::core_terminal_t *find_terminal(const pstring &outname_in, const detail::terminal_type atype, bool required = true) const; + detail::core_terminal_t *find_terminal(const pstring &outname_in, bool required = true) const; /* core net handling */ @@ -388,9 +390,11 @@ namespace netlist void prepare_to_run(); - private: + /* validation */ - detail::core_terminal_t *find_terminal(const pstring &outname_in, bool required = true); + void enable_validation() { m_validation = true; } + bool is_validation() const { return m_validation; } + private: void merge_nets(detail::net_t &thisnet, detail::net_t &othernet); @@ -413,6 +417,7 @@ namespace netlist std::unordered_map m_params; unsigned m_proxy_cnt; + bool m_validation; }; // ---------------------------------------------------------------------------------------- diff --git a/src/mame/audio/nl_mario.cpp b/src/mame/audio/nl_mario.cpp index c2b5cf15291..16ecc712e1a 100644 --- a/src/mame/audio/nl_mario.cpp +++ b/src/mame/audio/nl_mario.cpp @@ -224,7 +224,9 @@ NETLIST_START(mario) /* Dynamic timestepping avoids excessive newton loops on startup */ PARAM(Solver.DYNAMIC_LTE, 5e-2) PARAM(Solver.DYNAMIC_TS, 1) + ANALOG_INPUT(V5, 5) + ALIAS(VCC, V5) // no-ttl-dip devices need VCC! TTL_INPUT(SOUND0, 1) INCLUDE(nl_mario_snd0) diff --git a/src/mame/audio/nl_zac1b11142.cpp b/src/mame/audio/nl_zac1b11142.cpp index 264e3bc6905..087e17a52f8 100644 --- a/src/mame/audio/nl_zac1b11142.cpp +++ b/src/mame/audio/nl_zac1b11142.cpp @@ -425,6 +425,13 @@ NETLIST_START(zac1b11142) OPTIMIZE_FRONTIER(R96.1, RES_K(4.7), 50) #endif + /* ----------------------------------------------------------------------- + * Power terminals + * -----------------------------------------------------------------------*/ + + NET_C(VCC, U3A.14) + NET_C(GND, U3A.7) + // Reverse so that volume raises with raising percentage in ui PARAM(P1.REVERSE, 1) PARAM(P2.REVERSE, 1) diff --git a/src/mame/machine/nl_breakout.cpp b/src/mame/machine/nl_breakout.cpp index 1a19b119b61..e274fa34533 100644 --- a/src/mame/machine/nl_breakout.cpp +++ b/src/mame/machine/nl_breakout.cpp @@ -1704,6 +1704,35 @@ CIRCUIT_LAYOUT( breakout ) NET_C(GND, D9.1, D9.2, D9.13, D9.3, D9.4, D9.5) + //---------------------------------------------------------------- + // Power Pins + //---------------------------------------------------------------- + + NET_C(V5, A3.14, A4.14, A5.14, A6.14, + B3.14, B4.16, B5.16, B6.14, B7.16, B8.16, B9.14, + C2.14, C3.14, C4.14, C5.14, C6.14, C7.16, C8.16, + D2.14, D3.14, D4.16, D5.14, D6.14, D7.14, D8.14, + E1.14, E2.14, E3.14, E4.14, E5.14, E6.14, E7.14, E8.14, E9.14, + F2.14, F4.14, F5.14, F6.16, F7.16, F8.14, F9.14, + H1.14, H2.14, H3.14, H4.14, H5.16, H6.16, H7.14, H8.14, H9.14, + J1.16, J2.14, J3.14, J4.16, J6.16, J7.14, J8.16, J9.14, + K1.16, K2.14, K3.14, K4.14, K5.16, K6.16, K7.14, K8.14, K9.14, + L1.16, L2.14, L3.16, L4.14, L5.16, L6.16, L7.14, L8.16, L9.14, + M1.16, M2.5, M3.14, M4.14, M5.16, M6.16, M8.14, M9.14, + N1.16, N2.5, N3.14, N4.14, N5.16, N6.16, N7.14, N9.16) + NET_C(GND, A3.7, A4.7, A5.7, A6.7, + B3.7, B4.8, B5.8, B6.7, B7.8, B8.8, B9.7, + C2.7, C3.7, C4.7, C5.7, C6.7, C7.8, C8.8, + D2.7, D3.7, D4.8, D5.7, D6.7, D7.7, D8.7, + E1.7, E2.7, E3.7, E4.7, E5.7, E6.7, E7.7, E8.7, E9.7, + F2.7, F4.7, F5.7, F6.8, F7.8, F8.7, F9.7, + H1.7, H2.7, H3.7, H4.7, H5.8, H6.8, H7.7, H8.7, H9.7, + J1.8, J2.7, J3.7, J4.8, J6.8, J7.7, J8.8, J9.7, + K1.8, K2.7, K3.7, K4.7, K5.8, K6.8, K7.7, K8.7, K9.7, + L1.8, L2.7, L3.8, L4.7, L5.8, L6.8, L7.7, L8.8, L9.7, + M1.8, M2.12, M3.7, M4.7, M5.8, M6.8, M8.7, M9.7, + N1.8, N2.12, N3.7, N4.7, N5.8, N6.8, N7.7, N9.8 ) + #if 1 // 163% -- manually optimized HINT(B6.s3, NO_DEACTIVATE) diff --git a/src/mame/machine/nl_gtrak10.cpp b/src/mame/machine/nl_gtrak10.cpp index 7ba8a7adb05..48f76b00aab 100644 --- a/src/mame/machine/nl_gtrak10.cpp +++ b/src/mame/machine/nl_gtrak10.cpp @@ -26,6 +26,7 @@ NETLIST_START(gtrak10) PARAM(NETLIST.USE_DEACTIVATE, 1) ANALOG_INPUT(V5, 5) + ALIAS(VCC, V5) TTL_INPUT(high, 1) TTL_INPUT(low, 0) diff --git a/src/mame/machine/nl_hazelvid.cpp b/src/mame/machine/nl_hazelvid.cpp index acfb9a5e625..49e9ce209e2 100644 --- a/src/mame/machine/nl_hazelvid.cpp +++ b/src/mame/machine/nl_hazelvid.cpp @@ -20,6 +20,10 @@ NETLIST_START(hazelvid) PARAM(NETLIST.USE_DEACTIVATE, 1) ANALOG_INPUT(V5, 5) + ALIAS(VCC, V5) // no-ttl-dip devices need VCC! + + ALIAS(VSS, V5) // CMOS/MOS default + + ALIAS(VDD, GND) // CMOS/MOS default - TTL_INPUT(high, 1) TTL_INPUT(low, 0) diff --git a/src/mame/machine/nl_palestra.cpp b/src/mame/machine/nl_palestra.cpp index 4048a599d23..5dc6a65ac14 100644 --- a/src/mame/machine/nl_palestra.cpp +++ b/src/mame/machine/nl_palestra.cpp @@ -38,6 +38,7 @@ NETLIST_START(palestra) PARAM(NETLIST.USE_DEACTIVATE, 1) ANALOG_INPUT(V5, 5) + ALIAS(VCC, V5) // no-ttl-dip devices need VCC! TTL_INPUT(high, 1) TTL_INPUT(low, 0) diff --git a/src/mame/machine/nl_pong.cpp b/src/mame/machine/nl_pong.cpp index ce374873d9d..c1527b0c7eb 100644 --- a/src/mame/machine/nl_pong.cpp +++ b/src/mame/machine/nl_pong.cpp @@ -23,6 +23,7 @@ NETLIST_START(pong_fast) PARAM(NETLIST.USE_DEACTIVATE, 1) ANALOG_INPUT(V5, 5) + ALIAS(VCC, V5) // we need VCC for TTL chips TTL_INPUT(high, 1) TTL_INPUT(low, 0) diff --git a/src/mame/machine/nl_pongd.cpp b/src/mame/machine/nl_pongd.cpp index e04fb89e304..eb5be0c17f0 100644 --- a/src/mame/machine/nl_pongd.cpp +++ b/src/mame/machine/nl_pongd.cpp @@ -87,7 +87,6 @@ CIRCUIT_LAYOUT( pongdoubles ) ANALOG_INPUT(V5, 5) #define VCC "V5", Q -#undef GND #define GND "GND", Q CHIP("F9", 7493) @@ -1202,6 +1201,29 @@ CIRCUIT_LAYOUT( pongdoubles ) //CONNECTION("AUDIO", 1, "C2", 6) ALIAS(AUDIO, C2.6) + //---------------------------------------------------------------- + // Power Pins + //---------------------------------------------------------------- + + NET_C(V5, A1.16, A2.14, A4.16, A5.14, A6.14, A7.5, A8.14, A9.5, + B1.16, B2.14, B3.14, B4.16, B5.5, B6.14, B7.14, B8.14, + C1.5, C2.14, C3.14, C4.14, C5.14, C7.16, C8.5, C9.14, C10.14, + D1.5, D2.14, D3.14, D4.14, D5.14, D6.14, D7.16, D8.5, D9.14, D10.14, + E1.14, E2.14, E3.14, E4.14, E5.14, E6.14, E7.14, E8.14, E9.5, E10.5, + F1.14, F2.5, F3.14, F4.14, F6.14, F7.14, F8.14, F9.5, F10.5, + G1.14, G2.14, G3.14, G4.14, G6.14, G7.14, G8.16, G10.14, + H1.14, H2.14, H3.14, H4.14, H5.14, H6.14, H7.14, H8.16, H10.14, + J1.14, J10.14) + NET_C(GND, A1.8, A2.7, A4.8, A5.7, A6.7, A7.10, A8.7, A9.10, + B1.8, B2.7, B3.7, B4.8, B5.12, B6.7, B7.7, B8.7, + C1.10, C2.7, C3.7, C4.7, C5.7, C7.8, C8.10, C9.7, C10.7, + D1.10, D2.7, D3.7, D4.7, D5.7, D6.7, D7.8, D8.10, D9.7, D10.7, + E1.7, E2.7, E3.7, E4.7, E5.7, E6.7, E7.7, E8.7, E9.10, E10.10, + F1.7, F2.10, F3.7, F4.7, F6.7, F7.7, F8.7, F9.10, F10.10, + G1.7, G2.7, G3.7, G4.7, G6.7, G7.7, G8.8, G10.7, + H1.7, H2.7, H3.7, H4.7, H5.7, H6.7, H7.7, H8.8, H10.7, + J1.7, J10.7) + #ifdef DEBUG CONNECTION("LOG1", 1, "COIN", 1) CONNECTION("LOG1", 2, "A3", 3) diff --git a/src/mame/machine/nl_prodigy.cpp b/src/mame/machine/nl_prodigy.cpp index 06ec65dd667..9679bc4f801 100644 --- a/src/mame/machine/nl_prodigy.cpp +++ b/src/mame/machine/nl_prodigy.cpp @@ -14,6 +14,8 @@ NETLIST_START(prodigy) SOLVER(Solver, 48000) PARAM(Solver.ACCURACY, 1e-4) // works and is sufficient + ANALOG_INPUT(VCC, 5) // For TTL chips + TTL_INPUT(high, 1) TTL_INPUT(low, 0) diff --git a/src/mame/machine/nl_rebound.cpp b/src/mame/machine/nl_rebound.cpp index 4ef5373d055..37d9defd727 100644 --- a/src/mame/machine/nl_rebound.cpp +++ b/src/mame/machine/nl_rebound.cpp @@ -1270,4 +1270,26 @@ NETLIST_START(rebound_schematics) NET_C(V5, F3.2.CLK, F3.2.CLRQ, F3.2.J, F3.2.K) NET_C(V5, F9.s1.A, F9.s5.A, F9.s6.A) + /* ----------------------------------------------------------------------- + * Power terminals + * -----------------------------------------------------------------------*/ + + NET_C(V5, A1.14, + B1.14, B2.14, B3.14, B4.16, B5.14, B6.16, B7.16, B8.14, + C1.5, C2.14, C3.14, C4.16, C5.14, C6.14, C7.16, C8.14, + D2.14, D3.16, D4.16, D5.14, D6.14, D7.14, D8.14, + E1.14, E2.5, E3.16, E4.16, E5.14, E6.14, E7.14, E8.14, E9.14, + F1.14, F2.14, F3.14, F4.14, F5.5, F6.14, F7.14, F8.14, F9.14, + H1.14, H2.14, H3.5, H4.14, H5.5, H6.14, H7.14, H8.14, H9.14, + J1.14, J2.14, J3.5, J4.14, J5.14, J6.14, J7.14, J8.16, J9.5, + K2.5, K3.16, K4.14, K5.14, K6.14, K8.16, K9.5) + NET_C(GND, A1.7, + B1.7, B2.7, B3.7, B4.8, B5.7, B6.8, B7.8, B8.7, + C1.10, C2.7, C3.7, C4.8, C5.7, C6.7, C7.8, C8.7, + D2.7, D3.8, D4.8, D5.7, D6.7, D7.7, D8.7, + E1.7, E2.12, E3.8, E4.8, E5.7, E6.7, E7.7, E8.7, E9.7, + F1.7, F2.7, F3.7, F4.7, F5.10, F6.7, F7.7, F8.7, F9.7, + H1.7, H2.7, H3.10, H4.7, H5.10, H6.7, H7.7, H8.7, H9.7, + J1.7, J2.7, J3.10, J4.7, J5.7, J6.7, J7.7, J8.8, J9.10, + K2.10, K3.8, K4.7, K5.7, K6.7, K8.8, K9.10) NETLIST_END() diff --git a/src/mame/machine/nl_stuntcyc.cpp b/src/mame/machine/nl_stuntcyc.cpp index ea69d9181d4..d6997c2daee 100644 --- a/src/mame/machine/nl_stuntcyc.cpp +++ b/src/mame/machine/nl_stuntcyc.cpp @@ -17,6 +17,7 @@ NETLIST_START(stuntcyc) PARAM(NETLIST.USE_DEACTIVATE, 1) ANALOG_INPUT(V5, 5) + ALIAS(VCC, V5) TTL_INPUT(high, 1) TTL_INPUT(low, 0) diff --git a/src/mame/machine/nl_tp1983.cpp b/src/mame/machine/nl_tp1983.cpp index eb1945b38af..1d33caf4174 100644 --- a/src/mame/machine/nl_tp1983.cpp +++ b/src/mame/machine/nl_tp1983.cpp @@ -36,6 +36,7 @@ NETLIST_START(tp1983) PARAM(NETLIST.USE_DEACTIVATE, 1) ANALOG_INPUT(V5, 5) + ALIAS(VCC, V5) // no-ttl-dip devices need VCC! TTL_INPUT(high, 1) TTL_INPUT(low, 0) diff --git a/src/mame/machine/nl_tp1985.cpp b/src/mame/machine/nl_tp1985.cpp index 6f84538d26a..9d9d4a032de 100644 --- a/src/mame/machine/nl_tp1985.cpp +++ b/src/mame/machine/nl_tp1985.cpp @@ -43,6 +43,7 @@ NETLIST_START(tp1985) PARAM(NETLIST.USE_DEACTIVATE, 0) ANALOG_INPUT(V5, 5) + ALIAS(VCC, V5) // no-ttl-dip devices need VCC! TTL_INPUT(high, 1) TTL_INPUT(low, 0) -- cgit v1.2.3