summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author couriersud <couriersud@gmx.org>2020-08-26 09:06:05 +0200
committer couriersud <couriersud@gmx.org>2020-08-26 22:12:57 +0200
commite00a6ccf414eaa8b02ae22fde42558667b820e7b (patch)
tree72a4a37dacbaa03febc382aa9fc9aa593c1b01e2
parent654be7c635752c92ed24e24a1acc1f877e613380 (diff)
netlist: Truth tables are now standalone objects.
* Added TRUTHTABLE_ENTRY to netlist language. * Please see nlm_ttl74xx for reference implementation.
-rw-r--r--src/lib/netlist/macro/nlm_cd4xxx_lib.cpp67
-rw-r--r--src/lib/netlist/macro/nlm_otheric_lib.cpp17
-rw-r--r--src/lib/netlist/macro/nlm_ttl74xx_lib.cpp700
-rw-r--r--src/lib/netlist/nl_errstr.h15
-rw-r--r--src/lib/netlist/nl_factory.cpp21
-rw-r--r--src/lib/netlist/nl_factory.h1
-rw-r--r--src/lib/netlist/nl_parser.cpp39
-rw-r--r--src/lib/netlist/nl_parser.h1
-rw-r--r--src/lib/netlist/nl_setup.cpp2
-rw-r--r--src/lib/netlist/nl_setup.h8
10 files changed, 470 insertions, 401 deletions
diff --git a/src/lib/netlist/macro/nlm_cd4xxx_lib.cpp b/src/lib/netlist/macro/nlm_cd4xxx_lib.cpp
index db46f187f55..fbeec12b261 100644
--- a/src/lib/netlist/macro/nlm_cd4xxx_lib.cpp
+++ b/src/lib/netlist/macro/nlm_cd4xxx_lib.cpp
@@ -570,39 +570,44 @@ static NETLIST_START(MM5837_DIP)
)
NETLIST_END()
+static TRUTHTABLE_START(CD4001_GATE, 2, 1, "")
+ TT_HEAD("A , B | Q ")
+ TT_LINE("0,0|1|110")
+ TT_LINE("X,1|0|120")
+ TT_LINE("1,X|0|120")
+ TT_FAMILY("CD4XXX")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(CD4011_GATE, 2, 1, "")
+ TT_HEAD("A,B|Q ")
+ TT_LINE("0,X|1|100")
+ TT_LINE("X,0|1|100")
+ TT_LINE("1,1|0|100")
+ TT_FAMILY("CD4XXX")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(CD4069_GATE, 1, 1, "")
+ TT_HEAD("A|Q ")
+ TT_LINE("0|1|55")
+ TT_LINE("1|0|55")
+ TT_FAMILY("CD4XXX")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(CD4070_GATE, 2, 1, "")
+ TT_HEAD("A,B|Q ")
+ TT_LINE("0,0|0|15")
+ TT_LINE("0,1|1|22")
+ TT_LINE("1,0|1|22")
+ TT_LINE("1,1|0|15")
+ TT_FAMILY("CD4XXX")
+TRUTHTABLE_END()
+
NETLIST_START(cd4xxx_lib)
- TRUTHTABLE_START(CD4001_GATE, 2, 1, "")
- TT_HEAD("A , B | Q ")
- TT_LINE("0,0|1|110")
- TT_LINE("X,1|0|120")
- TT_LINE("1,X|0|120")
- TT_FAMILY("CD4XXX")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(CD4011_GATE, 2, 1, "")
- TT_HEAD("A,B|Q ")
- TT_LINE("0,X|1|100")
- TT_LINE("X,0|1|100")
- TT_LINE("1,1|0|100")
- TT_FAMILY("CD4XXX")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(CD4069_GATE, 1, 1, "")
- TT_HEAD("A|Q ")
- TT_LINE("0|1|55")
- TT_LINE("1|0|55")
- TT_FAMILY("CD4XXX")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(CD4070_GATE, 2, 1, "")
- TT_HEAD("A,B|Q ")
- TT_LINE("0,0|0|15")
- TT_LINE("0,1|1|22")
- TT_LINE("1,0|1|22")
- TT_LINE("1,1|0|15")
- TT_FAMILY("CD4XXX")
- TRUTHTABLE_END()
+ TRUTHTABLE_ENTRY(CD4001_GATE)
+ TRUTHTABLE_ENTRY(CD4011_GATE)
+ TRUTHTABLE_ENTRY(CD4069_GATE)
+ TRUTHTABLE_ENTRY(CD4070_GATE)
LOCAL_LIB_ENTRY(CD4001_DIP)
LOCAL_LIB_ENTRY(CD4011_DIP)
diff --git a/src/lib/netlist/macro/nlm_otheric_lib.cpp b/src/lib/netlist/macro/nlm_otheric_lib.cpp
index 46f9de61608..ad8f42af11b 100644
--- a/src/lib/netlist/macro/nlm_otheric_lib.cpp
+++ b/src/lib/netlist/macro/nlm_otheric_lib.cpp
@@ -235,14 +235,17 @@ static NETLIST_START(MC1455P_DIP)
NETLIST_END()
+static TRUTHTABLE_START(MC14584B_GATE, 1, 1, "")
+ TT_HEAD(" A | Q ")
+ TT_LINE(" 0 | 1 |100")
+ TT_LINE(" 1 | 0 |100")
+ // 2.1V negative going and 2.7V positive going at 5V
+ TT_FAMILY("FAMILY(TYPE=CMOS IVL=0.42 IVH=0.54 OVL=0.05 OVH=0.05 ORL=10.0 ORH=10.0)")
+TRUTHTABLE_END()
+
NETLIST_START(otheric_lib)
- TRUTHTABLE_START(MC14584B_GATE, 1, 1, "")
- TT_HEAD(" A | Q ")
- TT_LINE(" 0 | 1 |100")
- TT_LINE(" 1 | 0 |100")
- // 2.1V negative going and 2.7V positive going at 5V
- TT_FAMILY("FAMILY(TYPE=CMOS IVL=0.42 IVH=0.54 OVL=0.05 OVH=0.05 ORL=10.0 ORH=10.0)")
- TRUTHTABLE_END()
+
+ TRUTHTABLE_ENTRY(MC14584B_GATE)
LOCAL_LIB_ENTRY(MC14584B_DIP)
LOCAL_LIB_ENTRY(NE566_DIP)
diff --git a/src/lib/netlist/macro/nlm_ttl74xx_lib.cpp b/src/lib/netlist/macro/nlm_ttl74xx_lib.cpp
index 54044f67056..c720cb8f3e2 100644
--- a/src/lib/netlist/macro/nlm_ttl74xx_lib.cpp
+++ b/src/lib/netlist/macro/nlm_ttl74xx_lib.cpp
@@ -3308,6 +3308,339 @@ static NETLIST_START(TTL_AM2847_DIP)
)
NETLIST_END()
+static 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")
+ TT_LINE("1,1|0|15")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static 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")
+ TT_LINE("1,X|0|15")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(TTL_7404_INVERT, 1, 1, "+A,@VCC,@GND")
+ TT_HEAD(" A | Q ")
+ TT_LINE(" 0 | 1 |22")
+ TT_LINE(" 1 | 0 |15")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(TTL_7406_GATE, 1, 1, "")
+ TT_HEAD("A|Y ")
+ TT_LINE("0|1|15")
+ TT_LINE("1|0|23")
+ /* Open Collector */
+ TT_FAMILY("74XXOC")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(TTL_7407_GATE, 1, 1, "")
+ TT_HEAD("A|Y ")
+ TT_LINE("0|0|15")
+ TT_LINE("1|1|23")
+ /* Open Collector */
+ TT_FAMILY("74XXOC")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(TTL_7408_GATE, 2, 1, "")
+ TT_HEAD("A,B|Q ")
+ TT_LINE("0,X|0|15")
+ TT_LINE("X,0|0|15")
+ TT_LINE("1,1|1|22")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static 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")
+ TT_LINE("1,1|1|22")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static 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")
+ TT_LINE("X,X,0|1|22")
+ TT_LINE("1,1,1|0|15")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(TTL_7410_GATE, 3, 1, "")
+ TT_HEAD("A,B,C|Q ")
+ TT_LINE("0,X,X|1|22")
+ TT_LINE("X,0,X|1|22")
+ TT_LINE("X,X,0|1|22")
+ TT_LINE("1,1,1|0|15")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static 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")
+ TT_LINE("X,X,0|0|15")
+ TT_LINE("1,1,1|1|22")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(TTL_7411_GATE, 3, 1, "")
+ TT_HEAD("A,B,C|Q ")
+ TT_LINE("0,X,X|0|15")
+ TT_LINE("X,0,X|0|15")
+ TT_LINE("X,X,0|0|15")
+ TT_LINE("1,1,1|1|22")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(TTL_7416_GATE, 1, 1, "")
+ TT_HEAD("A|Q")
+ TT_LINE("0|1|15")
+ TT_LINE("1|0|23")
+ /* Open Collector */
+ TT_FAMILY("74XXOC")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(TTL_7417_GATE, 1, 1, "")
+ TT_HEAD("A|Q")
+ TT_LINE("0|0|15")
+ TT_LINE("1|1|23")
+ /* Open Collector */
+ TT_FAMILY("74XXOC")
+TRUTHTABLE_END()
+
+static 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")
+ TT_LINE("X,X,0,X|1|22")
+ TT_LINE("X,X,X,0|1|22")
+ TT_LINE("1,1,1,1|0|15")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(TTL_7421_AND, 4, 1, "+A,+B,+C,+D,@VCC,@GND")
+ TT_HEAD("A,B,C,D|Q ")
+ TT_LINE("0,X,X,X|0|22")
+ TT_LINE("X,0,X,X|0|22")
+ TT_LINE("X,X,0,X|0|22")
+ TT_LINE("X,X,X,0|0|22")
+ TT_LINE("1,1,1,1|1|15")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static 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")
+ TT_LINE("X,X,1,X|0|15")
+ TT_LINE("X,X,X,1|0|15")
+ TT_LINE("0,0,0,0|1|22")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static 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")
+ TT_LINE("X,X,1|0|15")
+ TT_LINE("0,0,0|1|22")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static 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")
+ TT_LINE("X,X,0,X,X,X,X,X|1|22")
+ TT_LINE("X,X,X,0,X,X,X,X|1|22")
+ TT_LINE("X,X,X,X,0,X,X,X|1|22")
+ TT_LINE("X,X,X,X,X,0,X,X|1|22")
+ TT_LINE("X,X,X,X,X,X,0,X|1|22")
+ TT_LINE("X,X,X,X,X,X,X,0|1|22")
+ TT_LINE("1,1,1,1,1,1,1,1|0|15")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static 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")
+ TT_LINE("0,0|0|15")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+/* FIXME: Same as 7400, but drains higher output currents.
+ * Netlist currently does not model over currents (should it ever?)
+ */
+
+static TRUTHTABLE_START(TTL_7437_NAND, 2, 1, "+A,+B")
+ TT_HEAD("A,B|Q ")
+ TT_LINE("0,X|1|22")
+ TT_LINE("X,0|1|22")
+ TT_LINE("1,1|0|15")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(TTL_7438_NAND, 2, 1, "+A,+B")
+ TT_HEAD("A,B|Q ")
+ TT_LINE("0,X|1|22")
+ TT_LINE("X,0|1|22")
+ TT_LINE("1,1|0|15")
+ /* Open Collector */
+ TT_FAMILY("74XXOC")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(TTL_7442, 4, 10, "")
+ TT_HEAD("D,C,B,A|0,1,2,3,4,5,6,7,8,9")
+ TT_LINE("0,0,0,0|0,1,1,1,1,1,1,1,1,1|30,30,30,30,30,30,30,30,30,30")
+ TT_LINE("0,0,0,1|1,0,1,1,1,1,1,1,1,1|30,30,30,30,30,30,30,30,30,30")
+ TT_LINE("0,0,1,0|1,1,0,1,1,1,1,1,1,1|30,30,30,30,30,30,30,30,30,30")
+ TT_LINE("0,0,1,1|1,1,1,0,1,1,1,1,1,1|30,30,30,30,30,30,30,30,30,30")
+ TT_LINE("0,1,0,0|1,1,1,1,0,1,1,1,1,1|30,30,30,30,30,30,30,30,30,30")
+ TT_LINE("0,1,0,1|1,1,1,1,1,0,1,1,1,1|30,30,30,30,30,30,30,30,30,30")
+ TT_LINE("0,1,1,0|1,1,1,1,1,1,0,1,1,1|30,30,30,30,30,30,30,30,30,30")
+ TT_LINE("0,1,1,1|1,1,1,1,1,1,1,0,1,1|30,30,30,30,30,30,30,30,30,30")
+ TT_LINE("1,0,0,0|1,1,1,1,1,1,1,1,0,1|30,30,30,30,30,30,30,30,30,30")
+ TT_LINE("1,0,0,1|1,1,1,1,1,1,1,1,1,0|30,30,30,30,30,30,30,30,30,30")
+ TT_LINE("1,0,1,X|1,1,1,1,1,1,1,1,1,1|30,30,30,30,30,30,30,30,30,30")
+ TT_LINE("1,1,X,X|1,1,1,1,1,1,1,1,1,1|30,30,30,30,30,30,30,30,30,30")
+TRUTHTABLE_END()
+
+static 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")
+ TT_LINE("1,0|1|22")
+ TT_LINE("1,1|0|15")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+
+static TRUTHTABLE_START(TTL_74139_GATE, 3, 4, "")
+ TT_HEAD("E,A,B|0,1,2,3")
+ TT_LINE("1,X,X|1,1,1,1|14")
+ TT_LINE("0,0,0|0,1,1,1|14")
+ TT_LINE("0,0,1|1,0,1,1|14")
+ TT_LINE("0,1,0|1,1,0,1|14")
+ TT_LINE("0,1,1|1,1,1,0|14")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(TTL_74155A_GATE, 4, 4, "")
+ TT_HEAD("B,A,G,C|0,1,2,3")
+ TT_LINE("X,X,1,X|1,1,1,1|13,13,13,13")
+ TT_LINE("X,X,0,0|1,1,1,1|13,13,13,13")
+ TT_LINE("0,0,0,1|0,1,1,1|13,13,13,13")
+ TT_LINE("0,1,0,1|1,0,1,1|13,13,13,13")
+ TT_LINE("1,0,0,1|1,1,0,1|13,13,13,13")
+ TT_LINE("1,1,0,1|1,1,1,0|13,13,13,13")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(TTL_74155B_GATE, 4, 4, "")
+ TT_HEAD("B,A,G,C|0,1,2,3")
+ TT_LINE("X,X,1,X|1,1,1,1|13,13,13,13")
+ TT_LINE("X,X,0,1|1,1,1,1|13,13,13,13")
+ TT_LINE("0,0,0,0|0,1,1,1|13,13,13,13")
+ TT_LINE("0,1,0,0|1,0,1,1|13,13,13,13")
+ TT_LINE("1,0,0,0|1,1,0,1|13,13,13,13")
+ TT_LINE("1,1,0,0|1,1,1,0|13,13,13,13")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(TTL_74156A_GATE, 4, 4, "")
+ TT_HEAD("B,A,G,C|0,1,2,3")
+ TT_LINE("X,X,1,X|1,1,1,1|13,13,13,13")
+ TT_LINE("X,X,0,0|1,1,1,1|13,13,13,13")
+ TT_LINE("0,0,0,1|0,1,1,1|13,13,13,13")
+ TT_LINE("0,1,0,1|1,0,1,1|13,13,13,13")
+ TT_LINE("1,0,0,1|1,1,0,1|13,13,13,13")
+ TT_LINE("1,1,0,1|1,1,1,0|13,13,13,13")
+ /* Open Collector */
+ TT_FAMILY("74XXOC")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(TTL_74156B_GATE, 4, 4, "")
+ TT_HEAD("B,A,G,C|0,1,2,3")
+ TT_LINE("X,X,1,X|1,1,1,1|13,13,13,13")
+ TT_LINE("X,X,0,1|1,1,1,1|13,13,13,13")
+ TT_LINE("0,0,0,0|0,1,1,1|13,13,13,13")
+ TT_LINE("0,1,0,0|1,0,1,1|13,13,13,13")
+ TT_LINE("1,0,0,0|1,1,0,1|13,13,13,13")
+ TT_LINE("1,1,0,0|1,1,1,0|13,13,13,13")
+ /* Open Collector */
+ TT_FAMILY("74XXOC")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(TTL_74157_GATE, 4, 4, "")
+ TT_HEAD("E,S,I,J|O")
+ TT_LINE("1,X,X,X|0|14")
+ TT_LINE("0,1,X,0|0|14")
+ TT_LINE("0,1,X,1|1|14")
+ TT_LINE("0,0,0,X|0|14")
+ TT_LINE("0,0,1,X|1|14")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static 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")
+ TT_LINE("X,X,1,X,X|0|12")
+ TT_LINE("X,1,X,X,X|0|12")
+ TT_LINE("1,X,X,X,X|0|12")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+// FIXME: We need "private" devices
+static TRUTHTABLE_START(TTL_74279A, 3, 1, "")
+ TT_HEAD("S,R,_Q|Q")
+ TT_LINE("0,X,X|1|22")
+ TT_LINE("1,0,X|0|27")
+ TT_LINE("1,1,0|0|27")
+ TT_LINE("1,1,1|1|22")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(TTL_74279B, 4, 1, "")
+ TT_HEAD("S1,S2,R,_Q|Q")
+ TT_LINE("0,X,X,X|1|22")
+ TT_LINE("X,0,X,X|1|22")
+ TT_LINE("1,1,0,X|0|27")
+ TT_LINE("1,1,1,0|0|27")
+ TT_LINE("1,1,1,1|1|22")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
+
+static TRUTHTABLE_START(TTL_9312, 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")
+ TT_LINE(" 0, 0, 0, 0, 1, X, X, X, X, X, X, X| 1, 0|33,28")
+ TT_LINE(" 0, 0, 1, 0, X, 0, X, X, X, X, X, X| 0, 1|33,28")
+ TT_LINE(" 0, 0, 1, 0, X, 1, X, X, X, X, X, X| 1, 0|33,28")
+ TT_LINE(" 0, 1, 0, 0, X, X, 0, X, X, X, X, X| 0, 1|33,28")
+ TT_LINE(" 0, 1, 0, 0, X, X, 1, X, X, X, X, X| 1, 0|33,28")
+ TT_LINE(" 0, 1, 1, 0, X, X, X, 0, X, X, X, X| 0, 1|33,28")
+ TT_LINE(" 0, 1, 1, 0, X, X, X, 1, X, X, X, X| 1, 0|33,28")
+ TT_LINE(" 1, 0, 0, 0, X, X, X, X, 0, X, X, X| 0, 1|33,28")
+ TT_LINE(" 1, 0, 0, 0, X, X, X, X, 1, X, X, X| 1, 0|33,28")
+ TT_LINE(" 1, 0, 1, 0, X, X, X, X, X, 0, X, X| 0, 1|33,28")
+ TT_LINE(" 1, 0, 1, 0, X, X, X, X, X, 1, X, X| 1, 0|33,28")
+ TT_LINE(" 1, 1, 0, 0, X, X, X, X, X, X, 0, X| 0, 1|33,28")
+ TT_LINE(" 1, 1, 0, 0, X, X, X, X, X, X, 1, X| 1, 0|33,28")
+ TT_LINE(" 1, 1, 1, 0, X, X, X, X, X, X, X, 0| 0, 1|33,28")
+ TT_LINE(" 1, 1, 1, 0, X, X, X, X, X, X, X, 1| 1, 0|33,28")
+ TT_FAMILY("74XX")
+TRUTHTABLE_END()
NETLIST_START(ttl74xx_lib)
NET_MODEL("DM7414 SCHMITT_TRIGGER(VTP=1.7 VTM=0.9 VI=4.35 RI=6.15k VOH=3.5 ROH=120 VOL=0.1 ROL=37.5 TPLH=15 TPHL=15)")
@@ -3315,340 +3648,39 @@ NETLIST_START(ttl74xx_lib)
NET_MODEL("DM74LS14 SCHMITT_TRIGGER(VTP=1.6 VTM=0.8 VI=4.4 RI=19.3k VOH=3.45 ROH=130 VOL=0.1 ROL=31.2 TPLH=15 TPHL=15)")
//NET_MODEL("DM7414 FAMILY(IVL=0.16 IVH=0.4 OVL=0.1 OVH=0.05 ORL=10.0 ORH=1.0e8)")
-
- 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")
- TT_LINE("1,1|0|15")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- 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")
- TT_LINE("1,X|0|15")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(TTL_7404_INVERT, 1, 1, "+A,@VCC,@GND")
- TT_HEAD(" A | Q ")
- TT_LINE(" 0 | 1 |22")
- TT_LINE(" 1 | 0 |15")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(TTL_7406_GATE, 1, 1, "")
- TT_HEAD("A|Y ")
- TT_LINE("0|1|15")
- TT_LINE("1|0|23")
- /* Open Collector */
- TT_FAMILY("74XXOC")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(TTL_7407_GATE, 1, 1, "")
- TT_HEAD("A|Y ")
- TT_LINE("0|0|15")
- TT_LINE("1|1|23")
- /* Open Collector */
- TT_FAMILY("74XXOC")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(TTL_7408_GATE, 2, 1, "")
- TT_HEAD("A,B|Q ")
- TT_LINE("0,X|0|15")
- TT_LINE("X,0|0|15")
- TT_LINE("1,1|1|22")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- 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")
- TT_LINE("1,1|1|22")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- 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")
- TT_LINE("X,X,0|1|22")
- TT_LINE("1,1,1|0|15")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(TTL_7410_GATE, 3, 1, "")
- TT_HEAD("A,B,C|Q ")
- TT_LINE("0,X,X|1|22")
- TT_LINE("X,0,X|1|22")
- TT_LINE("X,X,0|1|22")
- TT_LINE("1,1,1|0|15")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- 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")
- TT_LINE("X,X,0|0|15")
- TT_LINE("1,1,1|1|22")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(TTL_7411_GATE, 3, 1, "")
- TT_HEAD("A,B,C|Q ")
- TT_LINE("0,X,X|0|15")
- TT_LINE("X,0,X|0|15")
- TT_LINE("X,X,0|0|15")
- TT_LINE("1,1,1|1|22")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(TTL_7416_GATE, 1, 1, "")
- TT_HEAD("A|Q")
- TT_LINE("0|1|15")
- TT_LINE("1|0|23")
- /* Open Collector */
- TT_FAMILY("74XXOC")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(TTL_7417_GATE, 1, 1, "")
- TT_HEAD("A|Q")
- TT_LINE("0|0|15")
- TT_LINE("1|1|23")
- /* Open Collector */
- TT_FAMILY("74XXOC")
- TRUTHTABLE_END()
-
- 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")
- TT_LINE("X,X,0,X|1|22")
- TT_LINE("X,X,X,0|1|22")
- TT_LINE("1,1,1,1|0|15")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(TTL_7421_AND, 4, 1, "+A,+B,+C,+D,@VCC,@GND")
- TT_HEAD("A,B,C,D|Q ")
- TT_LINE("0,X,X,X|0|22")
- TT_LINE("X,0,X,X|0|22")
- TT_LINE("X,X,0,X|0|22")
- TT_LINE("X,X,X,0|0|22")
- TT_LINE("1,1,1,1|1|15")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- 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")
- TT_LINE("X,X,1,X|0|15")
- TT_LINE("X,X,X,1|0|15")
- TT_LINE("0,0,0,0|1|22")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- 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")
- TT_LINE("X,X,1|0|15")
- TT_LINE("0,0,0|1|22")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- 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")
- TT_LINE("X,X,0,X,X,X,X,X|1|22")
- TT_LINE("X,X,X,0,X,X,X,X|1|22")
- TT_LINE("X,X,X,X,0,X,X,X|1|22")
- TT_LINE("X,X,X,X,X,0,X,X|1|22")
- TT_LINE("X,X,X,X,X,X,0,X|1|22")
- TT_LINE("X,X,X,X,X,X,X,0|1|22")
- TT_LINE("1,1,1,1,1,1,1,1|0|15")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- 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")
- TT_LINE("0,0|0|15")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- /* FIXME: Same as 7400, but drains higher output currents.
- * Netlist currently does not model over currents (should it ever?)
- */
-
- TRUTHTABLE_START(TTL_7437_NAND, 2, 1, "+A,+B")
- TT_HEAD("A,B|Q ")
- TT_LINE("0,X|1|22")
- TT_LINE("X,0|1|22")
- TT_LINE("1,1|0|15")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(TTL_7438_NAND, 2, 1, "+A,+B")
- TT_HEAD("A,B|Q ")
- TT_LINE("0,X|1|22")
- TT_LINE("X,0|1|22")
- TT_LINE("1,1|0|15")
- /* Open Collector */
- TT_FAMILY("74XXOC")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(TTL_7442, 4, 10, "")
- TT_HEAD("D,C,B,A|0,1,2,3,4,5,6,7,8,9")
- TT_LINE("0,0,0,0|0,1,1,1,1,1,1,1,1,1|30,30,30,30,30,30,30,30,30,30")
- TT_LINE("0,0,0,1|1,0,1,1,1,1,1,1,1,1|30,30,30,30,30,30,30,30,30,30")
- TT_LINE("0,0,1,0|1,1,0,1,1,1,1,1,1,1|30,30,30,30,30,30,30,30,30,30")
- TT_LINE("0,0,1,1|1,1,1,0,1,1,1,1,1,1|30,30,30,30,30,30,30,30,30,30")
- TT_LINE("0,1,0,0|1,1,1,1,0,1,1,1,1,1|30,30,30,30,30,30,30,30,30,30")
- TT_LINE("0,1,0,1|1,1,1,1,1,0,1,1,1,1|30,30,30,30,30,30,30,30,30,30")
- TT_LINE("0,1,1,0|1,1,1,1,1,1,0,1,1,1|30,30,30,30,30,30,30,30,30,30")
- TT_LINE("0,1,1,1|1,1,1,1,1,1,1,0,1,1|30,30,30,30,30,30,30,30,30,30")
- TT_LINE("1,0,0,0|1,1,1,1,1,1,1,1,0,1|30,30,30,30,30,30,30,30,30,30")
- TT_LINE("1,0,0,1|1,1,1,1,1,1,1,1,1,0|30,30,30,30,30,30,30,30,30,30")
- TT_LINE("1,0,1,X|1,1,1,1,1,1,1,1,1,1|30,30,30,30,30,30,30,30,30,30")
- TT_LINE("1,1,X,X|1,1,1,1,1,1,1,1,1,1|30,30,30,30,30,30,30,30,30,30")
- TRUTHTABLE_END()
-
- 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")
- TT_LINE("1,0|1|22")
- TT_LINE("1,1|0|15")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
-
- TRUTHTABLE_START(TTL_74139_GATE, 3, 4, "")
- TT_HEAD("E,A,B|0,1,2,3")
- TT_LINE("1,X,X|1,1,1,1|14")
- TT_LINE("0,0,0|0,1,1,1|14")
- TT_LINE("0,0,1|1,0,1,1|14")
- TT_LINE("0,1,0|1,1,0,1|14")
- TT_LINE("0,1,1|1,1,1,0|14")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(TTL_74155A_GATE, 4, 4, "")
- TT_HEAD("B,A,G,C|0,1,2,3")
- TT_LINE("X,X,1,X|1,1,1,1|13,13,13,13")
- TT_LINE("X,X,0,0|1,1,1,1|13,13,13,13")
- TT_LINE("0,0,0,1|0,1,1,1|13,13,13,13")
- TT_LINE("0,1,0,1|1,0,1,1|13,13,13,13")
- TT_LINE("1,0,0,1|1,1,0,1|13,13,13,13")
- TT_LINE("1,1,0,1|1,1,1,0|13,13,13,13")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(TTL_74155B_GATE, 4, 4, "")
- TT_HEAD("B,A,G,C|0,1,2,3")
- TT_LINE("X,X,1,X|1,1,1,1|13,13,13,13")
- TT_LINE("X,X,0,1|1,1,1,1|13,13,13,13")
- TT_LINE("0,0,0,0|0,1,1,1|13,13,13,13")
- TT_LINE("0,1,0,0|1,0,1,1|13,13,13,13")
- TT_LINE("1,0,0,0|1,1,0,1|13,13,13,13")
- TT_LINE("1,1,0,0|1,1,1,0|13,13,13,13")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(TTL_74156A_GATE, 4, 4, "")
- TT_HEAD("B,A,G,C|0,1,2,3")
- TT_LINE("X,X,1,X|1,1,1,1|13,13,13,13")
- TT_LINE("X,X,0,0|1,1,1,1|13,13,13,13")
- TT_LINE("0,0,0,1|0,1,1,1|13,13,13,13")
- TT_LINE("0,1,0,1|1,0,1,1|13,13,13,13")
- TT_LINE("1,0,0,1|1,1,0,1|13,13,13,13")
- TT_LINE("1,1,0,1|1,1,1,0|13,13,13,13")
- /* Open Collector */
- TT_FAMILY("74XXOC")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(TTL_74156B_GATE, 4, 4, "")
- TT_HEAD("B,A,G,C|0,1,2,3")
- TT_LINE("X,X,1,X|1,1,1,1|13,13,13,13")
- TT_LINE("X,X,0,1|1,1,1,1|13,13,13,13")
- TT_LINE("0,0,0,0|0,1,1,1|13,13,13,13")
- TT_LINE("0,1,0,0|1,0,1,1|13,13,13,13")
- TT_LINE("1,0,0,0|1,1,0,1|13,13,13,13")
- TT_LINE("1,1,0,0|1,1,1,0|13,13,13,13")
- /* Open Collector */
- TT_FAMILY("74XXOC")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(TTL_74157_GATE, 4, 4, "")
- TT_HEAD("E,S,I,J|O")
- TT_LINE("1,X,X,X|0|14")
- TT_LINE("0,1,X,0|0|14")
- TT_LINE("0,1,X,1|1|14")
- TT_LINE("0,0,0,X|0|14")
- TT_LINE("0,0,1,X|1|14")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- 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")
- TT_LINE("X,X,1,X,X|0|12")
- TT_LINE("X,1,X,X,X|0|12")
- TT_LINE("1,X,X,X,X|0|12")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- // FIXME: We need "private" devices
- TRUTHTABLE_START(TTL_74279A, 3, 1, "")
- TT_HEAD("S,R,_Q|Q")
- TT_LINE("0,X,X|1|22")
- TT_LINE("1,0,X|0|27")
- TT_LINE("1,1,0|0|27")
- TT_LINE("1,1,1|1|22")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(TTL_74279B, 4, 1, "")
- TT_HEAD("S1,S2,R,_Q|Q")
- TT_LINE("0,X,X,X|1|22")
- TT_LINE("X,0,X,X|1|22")
- TT_LINE("1,1,0,X|0|27")
- TT_LINE("1,1,1,0|0|27")
- TT_LINE("1,1,1,1|1|22")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
-
- TRUTHTABLE_START(TTL_9312, 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")
- TT_LINE(" 0, 0, 0, 0, 1, X, X, X, X, X, X, X| 1, 0|33,28")
- TT_LINE(" 0, 0, 1, 0, X, 0, X, X, X, X, X, X| 0, 1|33,28")
- TT_LINE(" 0, 0, 1, 0, X, 1, X, X, X, X, X, X| 1, 0|33,28")
- TT_LINE(" 0, 1, 0, 0, X, X, 0, X, X, X, X, X| 0, 1|33,28")
- TT_LINE(" 0, 1, 0, 0, X, X, 1, X, X, X, X, X| 1, 0|33,28")
- TT_LINE(" 0, 1, 1, 0, X, X, X, 0, X, X, X, X| 0, 1|33,28")
- TT_LINE(" 0, 1, 1, 0, X, X, X, 1, X, X, X, X| 1, 0|33,28")
- TT_LINE(" 1, 0, 0, 0, X, X, X, X, 0, X, X, X| 0, 1|33,28")
- TT_LINE(" 1, 0, 0, 0, X, X, X, X, 1, X, X, X| 1, 0|33,28")
- TT_LINE(" 1, 0, 1, 0, X, X, X, X, X, 0, X, X| 0, 1|33,28")
- TT_LINE(" 1, 0, 1, 0, X, X, X, X, X, 1, X, X| 1, 0|33,28")
- TT_LINE(" 1, 1, 0, 0, X, X, X, X, X, X, 0, X| 0, 1|33,28")
- TT_LINE(" 1, 1, 0, 0, X, X, X, X, X, X, 1, X| 1, 0|33,28")
- TT_LINE(" 1, 1, 1, 0, X, X, X, X, X, X, X, 0| 0, 1|33,28")
- TT_LINE(" 1, 1, 1, 0, X, X, X, X, X, X, X, 1| 1, 0|33,28")
- TT_FAMILY("74XX")
- TRUTHTABLE_END()
+ TRUTHTABLE_ENTRY(TTL_7400_NAND)
+ TRUTHTABLE_ENTRY(TTL_7402_NOR)
+ TRUTHTABLE_ENTRY(TTL_7404_INVERT)
+ TRUTHTABLE_ENTRY(TTL_7406_GATE)
+ TRUTHTABLE_ENTRY(TTL_7407_GATE)
+ TRUTHTABLE_ENTRY(TTL_7408_GATE)
+ TRUTHTABLE_ENTRY(TTL_7408_AND)
+ TRUTHTABLE_ENTRY(TTL_7410_NAND)
+ TRUTHTABLE_ENTRY(TTL_7410_GATE)
+ TRUTHTABLE_ENTRY(TTL_7411_AND)
+ TRUTHTABLE_ENTRY(TTL_7411_GATE)
+ TRUTHTABLE_ENTRY(TTL_7416_GATE)
+ TRUTHTABLE_ENTRY(TTL_7417_GATE)
+ TRUTHTABLE_ENTRY(TTL_7420_NAND)
+ TRUTHTABLE_ENTRY(TTL_7421_AND)
+ TRUTHTABLE_ENTRY(TTL_7425_NOR)
+ TRUTHTABLE_ENTRY(TTL_7427_NOR)
+ TRUTHTABLE_ENTRY(TTL_7430_NAND)
+ TRUTHTABLE_ENTRY(TTL_7432_OR)
+ TRUTHTABLE_ENTRY(TTL_7437_NAND)
+ TRUTHTABLE_ENTRY(TTL_7438_NAND)
+ TRUTHTABLE_ENTRY(TTL_7442)
+ TRUTHTABLE_ENTRY(TTL_7486_XOR)
+ TRUTHTABLE_ENTRY(TTL_74139_GATE)
+ TRUTHTABLE_ENTRY(TTL_74155A_GATE)
+ TRUTHTABLE_ENTRY(TTL_74155B_GATE)
+ TRUTHTABLE_ENTRY(TTL_74156A_GATE)
+ TRUTHTABLE_ENTRY(TTL_74156B_GATE)
+ TRUTHTABLE_ENTRY(TTL_74157_GATE)
+ TRUTHTABLE_ENTRY(TTL_74260_NOR)
+ TRUTHTABLE_ENTRY(TTL_74279A)
+ TRUTHTABLE_ENTRY(TTL_74279B)
+ TRUTHTABLE_ENTRY(TTL_9312)
LOCAL_LIB_ENTRY(TTL_7400_DIP)
LOCAL_LIB_ENTRY(TTL_7402_DIP)
diff --git a/src/lib/netlist/nl_errstr.h b/src/lib/netlist/nl_errstr.h
index 553387301d9..db15fccd6c8 100644
--- a/src/lib/netlist/nl_errstr.h
+++ b/src/lib/netlist/nl_errstr.h
@@ -25,7 +25,7 @@ namespace netlist
PERRMSGV(MF_REMOVE_TERMINAL_1_FROM_NET_2, 2, "Can not remove terminal {1} from net {2}.")
PERRMSGV(MF_UNKNOWN_PARAM_TYPE, 1, "Can not determine param_type for {1}")
//PERRMSGV(MF_ERROR_CONNECTING_1_TO_2, 2, "Error connecting {1} to {2}")
- PERRMSGV(ME_HND_VAL_NOT_SUPPORTED, 1, "HINT_NO_DEACTIVATE value not supported: <{1}>")
+ //PERRMSGV(ME_HND_VAL_NOT_SUPPORTED, 1, "HINT_NO_DEACTIVATE value not supported: <{1}>")
PERRMSGV(MW_ROM_NOT_FOUND, 1, "Rom {1} not found")
// nl_factory.cpp
@@ -40,17 +40,19 @@ namespace netlist
// nl_parser.cpp
+ PERRMSGV(MF_PARSER_UNEXPECTED_1, 1, "Unexpected {}")
PERRMSGV(MF_UNEXPECTED_NETLIST_END, 0, "Unexpected NETLIST_END")
PERRMSGV(MF_UNEXPECTED_END_OF_FILE, 0, "Unexpected end of file, missing NETLIST_END")
- PERRMSGV(MF_UNEXPECTED_NETLIST_START, 0, "Unexpected NETLIST_START")
+ //PERRMSGV(MF_UNEXPECTED_NETLIST_START, 0, "Unexpected NETLIST_START")
PERRMSGV(MF_UNEXPECTED_NETLIST_EXTERNAL, 0, "Unexpected NETLIST_EXTERNAL within a netlist")
PERRMSGV(MF_EXPECTED_NETLIST_START_1, 1, "Expected NETLIST_START but got {1}")
PERRMSGV(MF_EXPECTED_IDENTIFIER_GOT_1, 1, "Expected an identifier, but got {1}")
PERRMSGV(MF_EXPECTED_COMMA_OR_RP_1, 1, "Expected comma or right parenthesis but found <{1}>")
PERRMSGV(MF_DIPPINS_EQUAL_NUMBER_1, 1, "DIPPINS requires equal number of pins to DIPPINS, first pin is {}")
- PERRMSGV(MF_PARAM_NOT_FP_1, 1, "Parameter value <{1}> not floating point")
+ //PERRMSGV(MF_PARAM_NOT_FP_1, 1, "Parameter value <{1}> not floating point")
PERRMSGV(MF_TT_LINE_WITHOUT_HEAD, 0, "TT_LINE found without TT_HEAD")
PERRMSGV(MF_LOCAL_SOURCE_NOT_FOUND_1, 1, "Local source not found: <{1}>")
+ PERRMSGV(MF_TRUTHTABLE_NOT_FOUND_1, 1, "Truthtable not found: <{1}>")
// nl_setup.cpp
@@ -65,7 +67,7 @@ namespace netlist
PERRMSGV(MF_DIP_PINS_MUST_BE_AN_EQUAL_NUMBER_OF_PINS_1, 1,"You must pass an equal number of pins to DIPPINS {1}")
PERRMSGV(MF_PARAM_COUNT_MISMATCH_2, 2, "Parameter count mismatch for {1} - only found {2}")
PERRMSGV(MF_PARAM_COUNT_EXCEEDED_2, 2, "Parameter count exceed for {1} - found {2}")
- PERRMSGV(MF_UNKNOWN_OBJECT_TYPE_1, 1, "Unknown object type {1}")
+ //PERRMSGV(MF_UNKNOWN_OBJECT_TYPE_1, 1, "Unknown object type {1}")
PERRMSGV(MF_UNKNOWN_FAMILY_TYPE_1, 2, "Unknown family type {1} in model {2}")
PERRMSGV(MF_INVALID_NUMBER_CONVERSION_1_2, 2, "Invalid number conversion {1} : {2}")
PERRMSGV(MF_INVALID_ENUM_CONVERSION_1_2, 2, "Invalid element found {1} : {2}")
@@ -116,11 +118,12 @@ namespace netlist
"but has been forced to act as a logic output. Parameter "
" FORCE_TRISTATE_LOGIC for device {2} needs to be disabled!.")
- PERRMSGV(MI_REMOVE_DEVICE_1_CONNECTED_ONLY_TO_RAILS_2_3, 3, "Found device {1} connected only to railterminals {2}/{3}. Please consider commenting those out.")
+ PERRMSGV(MI_REMOVE_DEVICE_1_CONNECTED_ONLY_TO_RAILS_2_3, 3, "Found device {1} connected only to railterminals {2}/{3}."
+ " This may reflect the schematic - but as well be an error. Please review.")
PERRMSGV(MW_DATA_1_NOT_FOUND, 1, "unable to find data {1} in sources collection")
- PERRMSGV(ME_DEVICE_NOT_FOUND_FOR_HINT, 1, "Device not found for hint {1}")
+ //PERRMSGV(ME_DEVICE_NOT_FOUND_FOR_HINT, 1, "Device not found for hint {1}")
PERRMSGV(ME_UNKNOWN_PARAMETER, 1, "Unknown parameter {1}")
PERRMSGV(MF_ERRORS_FOUND, 1, "Counted {1} errors which need to be fixed")
diff --git a/src/lib/netlist/nl_factory.cpp b/src/lib/netlist/nl_factory.cpp
index 9026bbfb6b1..3bf1fced5c3 100644
--- a/src/lib/netlist/nl_factory.cpp
+++ b/src/lib/netlist/nl_factory.cpp
@@ -41,14 +41,23 @@ namespace factory {
{
}
- void list_t::add(host_arena::unique_ptr<element_t> &&factory)
+ bool exists(const pstring &name);
+
+ bool list_t::exists(const pstring &name) const noexcept
{
for (auto & e : *this)
- if (e->name() == factory->name())
- {
- m_log.fatal(MF_FACTORY_ALREADY_CONTAINS_1(factory->name()));
- throw nl_exception(MF_FACTORY_ALREADY_CONTAINS_1(factory->name()));
- }
+ if (e->name() == name)
+ return true;
+ return false;
+ }
+
+ void list_t::add(host_arena::unique_ptr<element_t> &&factory)
+ {
+ if (exists(factory->name()))
+ {
+ m_log.fatal(MF_FACTORY_ALREADY_CONTAINS_1(factory->name()));
+ throw nl_exception(MF_FACTORY_ALREADY_CONTAINS_1(factory->name()));
+ }
push_back(std::move(factory));
}
diff --git a/src/lib/netlist/nl_factory.h b/src/lib/netlist/nl_factory.h
index ad26a505453..02cce0db128 100644
--- a/src/lib/netlist/nl_factory.h
+++ b/src/lib/netlist/nl_factory.h
@@ -181,6 +181,7 @@ namespace factory {
return dynamic_cast<device_element_t<C> *>(f) != nullptr;
}
+ bool exists(const pstring &name) const noexcept;
private:
log_type &m_log;
};
diff --git a/src/lib/netlist/nl_parser.cpp b/src/lib/netlist/nl_parser.cpp
index 85f78cabdd1..8b05d50429f 100644
--- a/src/lib/netlist/nl_parser.cpp
+++ b/src/lib/netlist/nl_parser.cpp
@@ -51,6 +51,7 @@ parser_t::parser_t(nlparse_t &setup)
m_tok_EXTERNAL_SOURCE = m_tokenizer.register_token("EXTERNAL_SOURCE");
m_tok_TRUTHTABLE_START = m_tokenizer.register_token("TRUTHTABLE_START");
m_tok_TRUTHTABLE_END = m_tokenizer.register_token("TRUTHTABLE_END");
+ m_tok_TRUTHTABLE_ENTRY = m_tokenizer.register_token("TRUTHTABLE_ENTRY");
m_tok_TT_HEAD = m_tokenizer.register_token("TT_HEAD");
m_tok_TT_LINE = m_tokenizer.register_token("TT_LINE");
m_tok_TT_FAMILY = m_tokenizer.register_token("TT_FAMILY");
@@ -93,11 +94,11 @@ bool parser_t::parse(const token_store &tokstor, const pstring &nlname)
return false;
}
- if (token.is(m_tok_NETLIST_END))
+ if (token.is(m_tok_NETLIST_END) || token.is(m_tok_TRUTHTABLE_END))
{
require_token(m_tok_paren_left);
if (!in_nl)
- error (MF_UNEXPECTED_NETLIST_END());
+ error (MF_PARSER_UNEXPECTED_1(token.str()));
else
{
in_nl = false;
@@ -109,18 +110,23 @@ bool parser_t::parse(const token_store &tokstor, const pstring &nlname)
m_cur_local->push_back(token_t(m_tok_paren_right));
}
- else if (token.is(m_tok_NETLIST_START))
+ else if (token.is(m_tok_NETLIST_START) || token.is(m_tok_TRUTHTABLE_START))
{
if (in_nl)
- error (MF_UNEXPECTED_NETLIST_START());
+ error (MF_PARSER_UNEXPECTED_1(token.str()));
require_token(m_tok_paren_left);
token_t name = get_token();
- require_token(m_tok_paren_right);
- if (name.str() == nlname || nlname.empty())
+ if (token.is(m_tok_NETLIST_START) && (name.str() == nlname || nlname.empty()))
{
+ require_token(m_tok_paren_right);
parse_netlist(name.str());
return true;
}
+ if (token.is(m_tok_TRUTHTABLE_START) && name.str() == nlname)
+ {
+ net_truthtable_start(nlname);
+ return true;
+ }
// create a new cached local store
m_local.emplace(name.str(), token_store());
@@ -130,10 +136,10 @@ bool parser_t::parse(const token_store &tokstor, const pstring &nlname)
auto num = plib::pfmt("{1}")(sl.line());
m_cur_local->push_back(token_t(token_type::NUMBER, num));
m_cur_local->push_back(token_t(token_type::STRING, sl.file_name()));
- m_cur_local->push_back(token_t(m_tok_NETLIST_START));
+ m_cur_local->push_back(token);
m_cur_local->push_back(token_t(m_tok_paren_left));
m_cur_local->push_back(name);
- m_cur_local->push_back(token_t(m_tok_paren_right));
+ //m_cur_local->push_back(token_t(m_tok_paren_right));
in_nl = true;
}
else if (token.is(m_tok_NETLIST_EXTERNAL))
@@ -191,8 +197,8 @@ void parser_t::parse_netlist(const pstring &nlname)
net_local_source();
else if (token.is(m_tok_EXTERNAL_SOURCE))
net_external_source();
- else if (token.is(m_tok_TRUTHTABLE_START))
- net_truthtable_start(nlname);
+ //else if (token.is(m_tok_TRUTHTABLE_START))
+ // net_truthtable_start(nlname);
else if (token.is(m_tok_LOCAL_LIB_ENTRY))
{
require_token(m_tok_paren_left);
@@ -202,6 +208,14 @@ void parser_t::parse_netlist(const pstring &nlname)
m_setup.register_lib_entry(name, "", plib::source_location("parser: " + nlname, 1));
require_token(m_tok_paren_right);
}
+ else if (token.is(m_tok_TRUTHTABLE_ENTRY))
+ {
+ require_token(m_tok_paren_left);
+ pstring name(get_identifier());
+ register_local_as_source(name);
+ m_setup.include(name);
+ require_token(m_tok_paren_right);
+ }
else if (token.is(m_tok_NET_REGISTER_DEV))
{
net_register_dev();
@@ -220,10 +234,9 @@ void parser_t::parse_netlist(const pstring &nlname)
void parser_t::net_truthtable_start(const pstring &nlname)
{
- require_token(m_tok_paren_left);
- pstring name(get_identifier());
bool head_found(false);
+ // parse remaining parameters
require_token(m_tok_comma);
long ni = get_number_long();
require_token(m_tok_comma);
@@ -233,7 +246,7 @@ void parser_t::net_truthtable_start(const pstring &nlname)
require_token(m_tok_paren_right);
netlist::tt_desc desc;
- desc.name = name;
+ desc.name = nlname;
desc.ni = gsl::narrow<unsigned long>(ni);
desc.no = gsl::narrow<unsigned long>(no);
desc.family = "";
diff --git a/src/lib/netlist/nl_parser.h b/src/lib/netlist/nl_parser.h
index 5e00c7c8470..99a42daed23 100644
--- a/src/lib/netlist/nl_parser.h
+++ b/src/lib/netlist/nl_parser.h
@@ -77,6 +77,7 @@ namespace netlist
token_id_t m_tok_LOCAL_LIB_ENTRY;
token_id_t m_tok_TRUTHTABLE_START;
token_id_t m_tok_TRUTHTABLE_END;
+ token_id_t m_tok_TRUTHTABLE_ENTRY;
token_id_t m_tok_TT_HEAD;
token_id_t m_tok_TT_LINE;
token_id_t m_tok_TT_FAMILY;
diff --git a/src/lib/netlist/nl_setup.cpp b/src/lib/netlist/nl_setup.cpp
index e8d6b1cf249..39d9144cd6d 100644
--- a/src/lib/netlist/nl_setup.cpp
+++ b/src/lib/netlist/nl_setup.cpp
@@ -1628,7 +1628,6 @@ void setup_t::prepare_to_run()
// resolve inputs
resolve_inputs();
-#if 0
log().verbose("looking for two terms connected to rail nets ...");
for (auto & t : m_nlstate.get_device_list<analog::NETLIB_NAME(twoterm)>())
{
@@ -1644,7 +1643,6 @@ void setup_t::prepare_to_run()
#endif
}
}
-#endif
log().verbose("looking for unused hints ...");
for (auto &h : m_abstract.m_hints)
diff --git a/src/lib/netlist/nl_setup.h b/src/lib/netlist/nl_setup.h
index 745032ab054..39dfb2dd747 100644
--- a/src/lib/netlist/nl_setup.h
+++ b/src/lib/netlist/nl_setup.h
@@ -110,7 +110,7 @@ void NETLIST_NAME(name)(netlist::nlparse_t &setup) \
// -----------------------------------------------------------------------------
#define TRUTHTABLE_START(cname, in, out, pdef_params) \
- { \
+ NETLIST_START(cname) \
netlist::tt_desc desc; \
desc.name = #cname ; \
desc.ni = in; \
@@ -130,7 +130,11 @@ void NETLIST_NAME(name)(netlist::nlparse_t &setup) \
#define TRUTHTABLE_END() \
setup.truthtable_create(desc, def_params, std::move(sloc)); \
- }
+ NETLIST_END()
+
+#define TRUTHTABLE_ENTRY(name) \
+ LOCAL_SOURCE(name) \
+ INCLUDE(name)
namespace netlist
{