summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/emu/netlist/analog/nld_fourterm.c1
-rw-r--r--src/emu/netlist/analog/nld_opamps.h2
-rw-r--r--src/emu/netlist/analog/nld_solver.c9
-rw-r--r--src/emu/netlist/devices/nld_7400.c16
-rw-r--r--src/emu/netlist/devices/nld_7402.c16
-rw-r--r--src/emu/netlist/devices/nld_7404.c43
-rw-r--r--src/emu/netlist/devices/nld_7404.h9
-rw-r--r--src/emu/netlist/devices/nld_7408.c16
-rw-r--r--src/emu/netlist/devices/nld_7410.c18
-rw-r--r--src/emu/netlist/devices/nld_7411.c18
-rw-r--r--src/emu/netlist/devices/nld_7420.c16
-rw-r--r--src/emu/netlist/devices/nld_7425.c16
-rw-r--r--src/emu/netlist/devices/nld_7427.c18
-rw-r--r--src/emu/netlist/devices/nld_74279.c20
-rw-r--r--src/emu/netlist/devices/nld_7430.c16
-rw-r--r--src/emu/netlist/devices/nld_7432.c16
-rw-r--r--src/emu/netlist/devices/nld_7437.c16
-rw-r--r--src/emu/netlist/devices/nld_7486.c105
-rw-r--r--src/emu/netlist/devices/nld_7486.h10
-rw-r--r--src/emu/netlist/devices/nld_9312.c26
-rw-r--r--src/emu/netlist/devices/nld_signal.h18
-rw-r--r--src/emu/netlist/devices/nld_truthtable.h43
-rw-r--r--src/emu/netlist/nl_parser.c8
-rw-r--r--src/emu/netlist/nl_setup.h2
-rw-r--r--src/emu/netlist/plib/pparser.c10
-rw-r--r--src/emu/netlist/plib/pparser.h1
-rw-r--r--src/emu/netlist/tools/nl_convert.c54
27 files changed, 317 insertions, 226 deletions
diff --git a/src/emu/netlist/analog/nld_fourterm.c b/src/emu/netlist/analog/nld_fourterm.c
index e2457d8ee11..ad67ccbba4b 100644
--- a/src/emu/netlist/analog/nld_fourterm.c
+++ b/src/emu/netlist/analog/nld_fourterm.c
@@ -50,6 +50,7 @@ NETLIB_RESET(VCCS)
const nl_double m_mult = m_G.Value() * m_gfac; // 1.0 ==> 1V ==> 1A
const nl_double GI = NL_FCONST(1.0) / m_RI.Value();
+ //printf("VCCS %s RI %f\n", name().cstr(), m_RI.Value());
m_IP.set(GI);
m_IN.set(GI);
diff --git a/src/emu/netlist/analog/nld_opamps.h b/src/emu/netlist/analog/nld_opamps.h
index 4433114a18c..722212b1763 100644
--- a/src/emu/netlist/analog/nld_opamps.h
+++ b/src/emu/netlist/analog/nld_opamps.h
@@ -19,7 +19,7 @@
// ----------------------------------------------------------------------------------------
#define LM3900(_name) \
- SUBMODEL(_name, opamp_lm3900)
+ SUBMODEL(opamp_lm3900, name)
// ----------------------------------------------------------------------------------------
// Devices ...
diff --git a/src/emu/netlist/analog/nld_solver.c b/src/emu/netlist/analog/nld_solver.c
index 947cda58cbb..c7d4ac1cddc 100644
--- a/src/emu/netlist/analog/nld_solver.c
+++ b/src/emu/netlist/analog/nld_solver.c
@@ -508,6 +508,9 @@ ATTR_COLD void NETLIB_NAME(solver)::post_start()
case 12:
ms = create_solver<12,12>(12, gs_threshold, use_specific);
break;
+ case 87:
+ ms = create_solver<87,87>(87, gs_threshold, use_specific);
+ break;
default:
if (net_count <= 16)
{
@@ -521,9 +524,13 @@ ATTR_COLD void NETLIB_NAME(solver)::post_start()
{
ms = create_solver<0,64>(net_count, gs_threshold, use_specific);
}
+ else if (net_count <= 128)
+ {
+ ms = create_solver<0,128>(net_count, gs_threshold, use_specific);
+ }
else
{
- netlist().error("Encountered netgroup with > 64 nets");
+ netlist().error("Encountered netgroup with > 128 nets");
ms = NULL; /* tease compilers */
}
diff --git a/src/emu/netlist/devices/nld_7400.c b/src/emu/netlist/devices/nld_7400.c
index 758d5d1b667..91a1bfbf472 100644
--- a/src/emu/netlist/devices/nld_7400.c
+++ b/src/emu/netlist/devices/nld_7400.c
@@ -26,20 +26,20 @@ NETLIB_START(7400_dip)
register_sub("3", m_3);
register_sub("4", m_4);
- register_subalias("1", m_1.m_i[0]);
- register_subalias("2", m_1.m_i[1]);
+ register_subalias("1", m_1.m_I[0]);
+ register_subalias("2", m_1.m_I[1]);
register_subalias("3", m_1.m_Q[0]);
- register_subalias("4", m_2.m_i[0]);
- register_subalias("5", m_2.m_i[1]);
+ register_subalias("4", m_2.m_I[0]);
+ register_subalias("5", m_2.m_I[1]);
register_subalias("6", m_2.m_Q[0]);
- register_subalias("9", m_3.m_i[0]);
- register_subalias("10", m_3.m_i[1]);
+ register_subalias("9", m_3.m_I[0]);
+ register_subalias("10", m_3.m_I[1]);
register_subalias("8", m_3.m_Q[0]);
- register_subalias("12", m_4.m_i[0]);
- register_subalias("13", m_4.m_i[1]);
+ register_subalias("12", m_4.m_I[0]);
+ register_subalias("13", m_4.m_I[1]);
register_subalias("11", m_4.m_Q[0]);
}
diff --git a/src/emu/netlist/devices/nld_7402.c b/src/emu/netlist/devices/nld_7402.c
index 708dab04fcf..f64f5e4ba96 100644
--- a/src/emu/netlist/devices/nld_7402.c
+++ b/src/emu/netlist/devices/nld_7402.c
@@ -27,19 +27,19 @@ NETLIB_START(7402_dip)
register_sub("4", m_4);
register_subalias("1", m_1.m_Q[0]);
- register_subalias("2", m_1.m_i[0]);
- register_subalias("3", m_1.m_i[1]);
+ register_subalias("2", m_1.m_I[0]);
+ register_subalias("3", m_1.m_I[1]);
register_subalias("4", m_2.m_Q[0]);
- register_subalias("5", m_2.m_i[0]);
- register_subalias("6", m_2.m_i[1]);
+ register_subalias("5", m_2.m_I[0]);
+ register_subalias("6", m_2.m_I[1]);
- register_subalias("8", m_3.m_i[0]);
- register_subalias("9", m_3.m_i[1]);
+ register_subalias("8", m_3.m_I[0]);
+ register_subalias("9", m_3.m_I[1]);
register_subalias("10", m_3.m_Q[0]);
- register_subalias("11", m_4.m_i[0]);
- register_subalias("12", m_4.m_i[1]);
+ register_subalias("11", m_4.m_I[0]);
+ register_subalias("12", m_4.m_I[1]);
register_subalias("13", m_4.m_Q[0]);
}
diff --git a/src/emu/netlist/devices/nld_7404.c b/src/emu/netlist/devices/nld_7404.c
index 2c812744db0..8637da2fec6 100644
--- a/src/emu/netlist/devices/nld_7404.c
+++ b/src/emu/netlist/devices/nld_7404.c
@@ -7,10 +7,20 @@
#include "nld_7404.h"
+#if 1 && (USE_TRUTHTABLE)
+nld_7404::truthtable_t nld_7404::m_ttbl;
+const char *nld_7404::m_desc[] = {
+ "A | Q ",
+ "0 | 1|22",
+ "1 | 0|15",
+ ""
+};
+#else
+
NETLIB_START(7404)
{
- register_input("A", m_I);
- register_output("Q", m_Q);
+ register_input("A", m_I[0]);
+ register_output("Q", m_Q[0]);
}
NETLIB_RESET(7404)
@@ -20,9 +30,10 @@ NETLIB_RESET(7404)
NETLIB_UPDATE(7404)
{
/* static */ const netlist_time delay[2] = { NLTIME_FROM_NS(15), NLTIME_FROM_NS(22) };
- UINT8 t = (INPLOGIC(m_I)) ^ 1;
- OUTLOGIC(m_Q, t, delay[t]);
+ UINT8 t = (INPLOGIC(m_I[0])) ^ 1;
+ OUTLOGIC(m_Q[0], t, delay[t]);
}
+#endif
NETLIB_START(7404_dip)
{
@@ -33,23 +44,23 @@ NETLIB_START(7404_dip)
register_sub("5", m_5);
register_sub("6", m_6);
- register_subalias("1", m_1.m_I);
- register_subalias("2", m_1.m_Q);
+ register_subalias("1", m_1.m_I[0]);
+ register_subalias("2", m_1.m_Q[0]);
- register_subalias("3", m_2.m_I);
- register_subalias("4", m_2.m_Q);
+ register_subalias("3", m_2.m_I[0]);
+ register_subalias("4", m_2.m_Q[0]);
- register_subalias("5", m_3.m_I);
- register_subalias("6", m_3.m_Q);
+ register_subalias("5", m_3.m_I[0]);
+ register_subalias("6", m_3.m_Q[0]);
- register_subalias("8", m_4.m_Q);
- register_subalias("9", m_4.m_I);
+ register_subalias("8", m_4.m_Q[0]);
+ register_subalias("9", m_4.m_I[0]);
- register_subalias("10", m_5.m_Q);
- register_subalias("11", m_5.m_I);
+ register_subalias("10", m_5.m_Q[0]);
+ register_subalias("11", m_5.m_I[0]);
- register_subalias("12", m_6.m_Q);
- register_subalias("13", m_6.m_I);
+ register_subalias("12", m_6.m_Q[0]);
+ register_subalias("13", m_6.m_I[0]);
}
NETLIB_UPDATE(7404_dip)
diff --git a/src/emu/netlist/devices/nld_7404.h b/src/emu/netlist/devices/nld_7404.h
index f74210bc958..0988d1d1e7c 100644
--- a/src/emu/netlist/devices/nld_7404.h
+++ b/src/emu/netlist/devices/nld_7404.h
@@ -32,11 +32,16 @@
#include "nld_signal.h"
+#if 1 && (USE_TRUTHTABLE)
+#include "nld_truthtable.h"
+NETLIB_TRUTHTABLE(7404, 1, 1, 0);
+#else
NETLIB_DEVICE(7404,
public:
- netlist_logic_input_t m_I;
- netlist_logic_output_t m_Q;
+ netlist_logic_input_t m_I[1];
+ netlist_logic_output_t m_Q[1];
);
+#endif
#define TTL_7404_INVERT(_name, _A) \
NET_REGISTER_DEV(7404, _name) \
diff --git a/src/emu/netlist/devices/nld_7408.c b/src/emu/netlist/devices/nld_7408.c
index 4ecdc78469b..70cc8006f67 100644
--- a/src/emu/netlist/devices/nld_7408.c
+++ b/src/emu/netlist/devices/nld_7408.c
@@ -26,20 +26,20 @@ NETLIB_START(7408_dip)
register_sub("3", m_3);
register_sub("4", m_4);
- register_subalias("1", m_1.m_i[0]);
- register_subalias("2", m_1.m_i[1]);
+ register_subalias("1", m_1.m_I[0]);
+ register_subalias("2", m_1.m_I[1]);
register_subalias("3", m_1.m_Q[0]);
- register_subalias("4", m_2.m_i[0]);
- register_subalias("5", m_2.m_i[1]);
+ register_subalias("4", m_2.m_I[0]);
+ register_subalias("5", m_2.m_I[1]);
register_subalias("6", m_2.m_Q[0]);
- register_subalias("9", m_3.m_i[0]);
- register_subalias("10", m_3.m_i[1]);
+ register_subalias("9", m_3.m_I[0]);
+ register_subalias("10", m_3.m_I[1]);
register_subalias("8", m_3.m_Q[0]);
- register_subalias("12", m_4.m_i[0]);
- register_subalias("13", m_4.m_i[1]);
+ register_subalias("12", m_4.m_I[0]);
+ register_subalias("13", m_4.m_I[1]);
register_subalias("11", m_4.m_Q[0]);
}
diff --git a/src/emu/netlist/devices/nld_7410.c b/src/emu/netlist/devices/nld_7410.c
index d920398c68b..05ad04f2b1c 100644
--- a/src/emu/netlist/devices/nld_7410.c
+++ b/src/emu/netlist/devices/nld_7410.c
@@ -27,20 +27,20 @@ NETLIB_START(7410_dip)
register_sub("2", m_2);
register_sub("3", m_3);
- register_subalias("1", m_1.m_i[0]);
- register_subalias("2", m_1.m_i[1]);
- register_subalias("3", m_2.m_i[0]);
- register_subalias("4", m_2.m_i[1]);
- register_subalias("5", m_2.m_i[2]);
+ register_subalias("1", m_1.m_I[0]);
+ register_subalias("2", m_1.m_I[1]);
+ register_subalias("3", m_2.m_I[0]);
+ register_subalias("4", m_2.m_I[1]);
+ register_subalias("5", m_2.m_I[2]);
register_subalias("6", m_2.m_Q[0]);
register_subalias("8", m_3.m_Q[0]);
- register_subalias("9", m_3.m_i[0]);
- register_subalias("10", m_3.m_i[1]);
- register_subalias("11", m_3.m_i[2]);
+ register_subalias("9", m_3.m_I[0]);
+ register_subalias("10", m_3.m_I[1]);
+ register_subalias("11", m_3.m_I[2]);
register_subalias("12", m_1.m_Q[0]);
- register_subalias("13", m_1.m_i[2]);
+ register_subalias("13", m_1.m_I[2]);
}
NETLIB_UPDATE(7410_dip)
diff --git a/src/emu/netlist/devices/nld_7411.c b/src/emu/netlist/devices/nld_7411.c
index 0664bd10c5c..3ac56fc11ef 100644
--- a/src/emu/netlist/devices/nld_7411.c
+++ b/src/emu/netlist/devices/nld_7411.c
@@ -25,20 +25,20 @@ NETLIB_START(7411_dip)
register_sub("2", m_2);
register_sub("3", m_3);
- register_subalias("1", m_1.m_i[0]);
- register_subalias("2", m_1.m_i[1]);
- register_subalias("3", m_2.m_i[0]);
- register_subalias("4", m_2.m_i[1]);
- register_subalias("5", m_2.m_i[2]);
+ register_subalias("1", m_1.m_I[0]);
+ register_subalias("2", m_1.m_I[1]);
+ register_subalias("3", m_2.m_I[0]);
+ register_subalias("4", m_2.m_I[1]);
+ register_subalias("5", m_2.m_I[2]);
register_subalias("6", m_2.m_Q[0]);
register_subalias("8", m_3.m_Q[0]);
- register_subalias("9", m_3.m_i[0]);
- register_subalias("10", m_3.m_i[1]);
- register_subalias("11", m_3.m_i[2]);
+ register_subalias("9", m_3.m_I[0]);
+ register_subalias("10", m_3.m_I[1]);
+ register_subalias("11", m_3.m_I[2]);
register_subalias("12", m_1.m_Q[0]);
- register_subalias("13", m_1.m_i[2]);
+ register_subalias("13", m_1.m_I[2]);
}
NETLIB_UPDATE(7411_dip)
diff --git a/src/emu/netlist/devices/nld_7420.c b/src/emu/netlist/devices/nld_7420.c
index 59e649fc6f6..e45b91397bc 100644
--- a/src/emu/netlist/devices/nld_7420.c
+++ b/src/emu/netlist/devices/nld_7420.c
@@ -25,19 +25,19 @@ NETLIB_START(7420_dip)
register_sub("1", m_1);
register_sub("2", m_2);
- register_subalias("1", m_1.m_i[0]);
- register_subalias("2", m_1.m_i[1]);
+ register_subalias("1", m_1.m_I[0]);
+ register_subalias("2", m_1.m_I[1]);
- register_subalias("4", m_1.m_i[2]);
- register_subalias("5", m_1.m_i[3]);
+ register_subalias("4", m_1.m_I[2]);
+ register_subalias("5", m_1.m_I[3]);
register_subalias("6", m_1.m_Q[0]);
register_subalias("8", m_2.m_Q[0]);
- register_subalias("9", m_2.m_i[0]);
- register_subalias("10", m_2.m_i[1]);
+ register_subalias("9", m_2.m_I[0]);
+ register_subalias("10", m_2.m_I[1]);
- register_subalias("12", m_2.m_i[2]);
- register_subalias("13", m_2.m_i[3]);
+ register_subalias("12", m_2.m_I[2]);
+ register_subalias("13", m_2.m_I[3]);
}
diff --git a/src/emu/netlist/devices/nld_7425.c b/src/emu/netlist/devices/nld_7425.c
index 59bb899c56b..a46f544297e 100644
--- a/src/emu/netlist/devices/nld_7425.c
+++ b/src/emu/netlist/devices/nld_7425.c
@@ -12,23 +12,23 @@ NETLIB_START(7425_dip)
register_sub("1", m_1);
register_sub("2", m_2);
- register_subalias("1", m_1.m_i[0]);
- register_subalias("2", m_1.m_i[1]);
+ register_subalias("1", m_1.m_I[0]);
+ register_subalias("2", m_1.m_I[1]);
//register_subalias("3", ); X1 ==> NC
- register_subalias("4", m_1.m_i[2]);
- register_subalias("5", m_1.m_i[3]);
+ register_subalias("4", m_1.m_I[2]);
+ register_subalias("5", m_1.m_I[3]);
register_subalias("6", m_1.m_Q[0]);
register_subalias("8", m_2.m_Q[0]);
- register_subalias("9", m_2.m_i[0]);
- register_subalias("10", m_2.m_i[1]);
+ register_subalias("9", m_2.m_I[0]);
+ register_subalias("10", m_2.m_I[1]);
//register_subalias("11", ); X2 ==> NC
- register_subalias("12", m_2.m_i[2]);
- register_subalias("13", m_2.m_i[3]);
+ register_subalias("12", m_2.m_I[2]);
+ register_subalias("13", m_2.m_I[3]);
}
diff --git a/src/emu/netlist/devices/nld_7427.c b/src/emu/netlist/devices/nld_7427.c
index a363ddd5f3c..6551ee1840b 100644
--- a/src/emu/netlist/devices/nld_7427.c
+++ b/src/emu/netlist/devices/nld_7427.c
@@ -27,20 +27,20 @@ NETLIB_START(7427_dip)
register_sub("2", m_2);
register_sub("3", m_3);
- register_subalias("1", m_1.m_i[0]);
- register_subalias("2", m_1.m_i[1]);
- register_subalias("3", m_2.m_i[0]);
- register_subalias("4", m_2.m_i[1]);
- register_subalias("5", m_2.m_i[2]);
+ register_subalias("1", m_1.m_I[0]);
+ register_subalias("2", m_1.m_I[1]);
+ register_subalias("3", m_2.m_I[0]);
+ register_subalias("4", m_2.m_I[1]);
+ register_subalias("5", m_2.m_I[2]);
register_subalias("6", m_2.m_Q[0]);
register_subalias("8", m_3.m_Q[0]);
- register_subalias("9", m_3.m_i[0]);
- register_subalias("10", m_3.m_i[1]);
- register_subalias("11", m_3.m_i[2]);
+ register_subalias("9", m_3.m_I[0]);
+ register_subalias("10", m_3.m_I[1]);
+ register_subalias("11", m_3.m_I[2]);
register_subalias("12", m_1.m_Q[0]);
- register_subalias("13", m_1.m_i[2]);
+ register_subalias("13", m_1.m_I[2]);
}
NETLIB_UPDATE(7427_dip)
diff --git a/src/emu/netlist/devices/nld_74279.c b/src/emu/netlist/devices/nld_74279.c
index 17fbc2e8b22..5740b59c6ed 100644
--- a/src/emu/netlist/devices/nld_74279.c
+++ b/src/emu/netlist/devices/nld_74279.c
@@ -125,23 +125,23 @@ NETLIB_START(74279_dip)
register_sub("3", m_3);
register_sub("4", m_4);
- register_subalias("1", m_1.m_i[2]); //R
- register_subalias("2", m_1.m_i[0]);
- register_subalias("3", m_1.m_i[1]);
+ register_subalias("1", m_1.m_I[2]); //R
+ register_subalias("2", m_1.m_I[0]);
+ register_subalias("3", m_1.m_I[1]);
register_subalias("4", m_1.m_Q[0]);
- register_subalias("5", m_2.m_i[1]); //R
- register_subalias("6", m_2.m_i[0]);
+ register_subalias("5", m_2.m_I[1]); //R
+ register_subalias("6", m_2.m_I[0]);
register_subalias("7", m_2.m_Q[0]);
register_subalias("9", m_3.m_Q[0]);
- register_subalias("10", m_3.m_i[2]); //R
- register_subalias("11", m_3.m_i[0]);
- register_subalias("12", m_3.m_i[1]);
+ register_subalias("10", m_3.m_I[2]); //R
+ register_subalias("11", m_3.m_I[0]);
+ register_subalias("12", m_3.m_I[1]);
register_subalias("13", m_4.m_Q[0]);
- register_subalias("14", m_4.m_i[1]); //R
- register_subalias("15", m_4.m_i[0]);
+ register_subalias("14", m_4.m_I[1]); //R
+ register_subalias("15", m_4.m_I[0]);
}
NETLIB_UPDATE(74279_dip)
diff --git a/src/emu/netlist/devices/nld_7430.c b/src/emu/netlist/devices/nld_7430.c
index 06d73997ad5..24d61d7b8ac 100644
--- a/src/emu/netlist/devices/nld_7430.c
+++ b/src/emu/netlist/devices/nld_7430.c
@@ -30,17 +30,17 @@ NETLIB_START(7430_dip)
{
register_sub("1", m_1);
- register_subalias("1", m_1.m_i[0]);
- register_subalias("2", m_1.m_i[1]);
- register_subalias("3", m_1.m_i[2]);
- register_subalias("4", m_1.m_i[3]);
- register_subalias("5", m_1.m_i[4]);
- register_subalias("6", m_1.m_i[5]);
+ register_subalias("1", m_1.m_I[0]);
+ register_subalias("2", m_1.m_I[1]);
+ register_subalias("3", m_1.m_I[2]);
+ register_subalias("4", m_1.m_I[3]);
+ register_subalias("5", m_1.m_I[4]);
+ register_subalias("6", m_1.m_I[5]);
register_subalias("8", m_1.m_Q[0]);
- register_subalias("11", m_1.m_i[6]);
- register_subalias("12", m_1.m_i[7]);
+ register_subalias("11", m_1.m_I[6]);
+ register_subalias("12", m_1.m_I[7]);
}
NETLIB_UPDATE(7430_dip)
diff --git a/src/emu/netlist/devices/nld_7432.c b/src/emu/netlist/devices/nld_7432.c
index e3dda241be7..0e176a323fc 100644
--- a/src/emu/netlist/devices/nld_7432.c
+++ b/src/emu/netlist/devices/nld_7432.c
@@ -27,19 +27,19 @@ NETLIB_START(7432_dip)
register_sub("4", m_4);
register_subalias("3", m_1.m_Q[0]);
- register_subalias("1", m_1.m_i[0]);
- register_subalias("2", m_1.m_i[1]);
+ register_subalias("1", m_1.m_I[0]);
+ register_subalias("2", m_1.m_I[1]);
register_subalias("6", m_2.m_Q[0]);
- register_subalias("4", m_2.m_i[0]);
- register_subalias("5", m_2.m_i[1]);
+ register_subalias("4", m_2.m_I[0]);
+ register_subalias("5", m_2.m_I[1]);
- register_subalias("9", m_3.m_i[0]);
- register_subalias("10", m_3.m_i[1]);
+ register_subalias("9", m_3.m_I[0]);
+ register_subalias("10", m_3.m_I[1]);
register_subalias("8", m_3.m_Q[0]);
- register_subalias("12", m_4.m_i[0]);
- register_subalias("13", m_4.m_i[1]);
+ register_subalias("12", m_4.m_I[0]);
+ register_subalias("13", m_4.m_I[1]);
register_subalias("11", m_4.m_Q[0]);
}
diff --git a/src/emu/netlist/devices/nld_7437.c b/src/emu/netlist/devices/nld_7437.c
index ba078f81d11..f65c9fd016b 100644
--- a/src/emu/netlist/devices/nld_7437.c
+++ b/src/emu/netlist/devices/nld_7437.c
@@ -26,20 +26,20 @@ NETLIB_START(7437_dip)
register_sub("3", m_3);
register_sub("4", m_4);
- register_subalias("1", m_1.m_i[0]);
- register_subalias("2", m_1.m_i[1]);
+ register_subalias("1", m_1.m_I[0]);
+ register_subalias("2", m_1.m_I[1]);
register_subalias("3", m_1.m_Q[0]);
- register_subalias("4", m_2.m_i[0]);
- register_subalias("5", m_2.m_i[1]);
+ register_subalias("4", m_2.m_I[0]);
+ register_subalias("5", m_2.m_I[1]);
register_subalias("6", m_2.m_Q[0]);
- register_subalias("9", m_3.m_i[0]);
- register_subalias("10", m_3.m_i[1]);
+ register_subalias("9", m_3.m_I[0]);
+ register_subalias("10", m_3.m_I[1]);
register_subalias("8", m_3.m_Q[0]);
- register_subalias("12", m_4.m_i[0]);
- register_subalias("13", m_4.m_i[1]);
+ register_subalias("12", m_4.m_I[0]);
+ register_subalias("13", m_4.m_I[1]);
register_subalias("11", m_4.m_Q[0]);
}
diff --git a/src/emu/netlist/devices/nld_7486.c b/src/emu/netlist/devices/nld_7486.c
index e4009b22180..1e8de4bf744 100644
--- a/src/emu/netlist/devices/nld_7486.c
+++ b/src/emu/netlist/devices/nld_7486.c
@@ -7,11 +7,22 @@
#include "nld_7486.h"
+#if (USE_TRUTHTABLE)
+nld_7486::truthtable_t nld_7486::m_ttbl;
+const char *nld_7486::m_desc[] = {
+ "A , B | Q ",
+ "0,0|0|15",
+ "0,1|1|22",
+ "1,0|1|22",
+ "1,1|0|15",
+ ""
+};
+#else
NETLIB_START(7486)
{
- register_input("A", m_A);
- register_input("B", m_B);
- register_output("Q", m_Q);
+ register_input("A", m_I[0]);
+ register_input("B", m_I[1]);
+ register_output("Q", m_Q[0]);
save(NLNAME(m_active));
}
@@ -25,10 +36,41 @@ NETLIB_UPDATE(7486)
{
const netlist_time delay[2] = { NLTIME_FROM_NS(15), NLTIME_FROM_NS(22) };
- UINT8 t = INPLOGIC(m_A) ^ INPLOGIC(m_B);
- OUTLOGIC(m_Q, t, delay[t]);
+ UINT8 t = INPLOGIC(m_I[0]) ^ INPLOGIC(m_I[1]);
+ OUTLOGIC(m_Q[0], t, delay[t]);
}
+ATTR_HOT void NETLIB_NAME(7486)::inc_active()
+{
+ const netlist_time delay[2] = { NLTIME_FROM_NS(15), NLTIME_FROM_NS(22) };
+ nl_assert(netlist().use_deactivate());
+ if (++m_active == 1)
+ {
+ m_I[0].activate();
+ m_I[1].activate();
+
+ netlist_time mt = this->m_I[0].net().time();
+ if (this->m_I[1].net().time() > mt)
+ mt = this->m_I[1].net().time();
+
+ UINT8 t = INPLOGIC(m_I[0]) ^ INPLOGIC(m_I[1]);
+ m_Q[0].net().set_Q_time(t, mt + delay[t]);
+ }
+}
+
+ATTR_HOT void NETLIB_NAME(7486)::dec_active()
+{
+#if 1
+ nl_assert(netlist().use_deactivate());
+ if (--m_active == 0)
+ {
+ m_I[0].inactivate();
+ m_I[1].inactivate();
+ }
+#endif
+}
+#endif
+
NETLIB_START(7486_dip)
{
register_sub("1", m_1);
@@ -36,21 +78,21 @@ NETLIB_START(7486_dip)
register_sub("3", m_3);
register_sub("4", m_4);
- register_subalias("1", m_1.m_A);
- register_subalias("2", m_1.m_B);
- register_subalias("3", m_1.m_Q);
+ register_subalias("1", m_1.m_I[0]);
+ register_subalias("2", m_1.m_I[1]);
+ register_subalias("3", m_1.m_Q[0]);
- register_subalias("4", m_2.m_A);
- register_subalias("5", m_2.m_B);
- register_subalias("6", m_2.m_Q);
+ register_subalias("4", m_2.m_I[0]);
+ register_subalias("5", m_2.m_I[1]);
+ register_subalias("6", m_2.m_Q[0]);
- register_subalias("9", m_3.m_A);
- register_subalias("10", m_3.m_B);
- register_subalias("8", m_3.m_Q);
+ register_subalias("9", m_3.m_I[0]);
+ register_subalias("10", m_3.m_I[1]);
+ register_subalias("8", m_3.m_Q[0]);
- register_subalias("12", m_4.m_A);
- register_subalias("13", m_4.m_B);
- register_subalias("11", m_4.m_Q);
+ register_subalias("12", m_4.m_I[0]);
+ register_subalias("13", m_4.m_I[1]);
+ register_subalias("11", m_4.m_Q[0]);
}
NETLIB_UPDATE(7486_dip)
@@ -70,32 +112,3 @@ NETLIB_RESET(7486_dip)
m_4.do_reset();
}
-ATTR_HOT void NETLIB_NAME(7486)::inc_active()
-{
- const netlist_time delay[2] = { NLTIME_FROM_NS(15), NLTIME_FROM_NS(22) };
- nl_assert(netlist().use_deactivate());
- if (++m_active == 1)
- {
- m_A.activate();
- m_B.activate();
-
- netlist_time mt = this->m_A.net().time();
- if (this->m_B.net().time() > mt)
- mt = this->m_B.net().time();
-
- UINT8 t = INPLOGIC(m_A) ^ INPLOGIC(m_B);
- m_Q.net().set_Q_time(t, mt + delay[t]);
- }
-}
-
-ATTR_HOT void NETLIB_NAME(7486)::dec_active()
-{
-#if 1
- nl_assert(netlist().use_deactivate());
- if (--m_active == 0)
- {
- m_A.inactivate();
- m_B.inactivate();
- }
-#endif
-}
diff --git a/src/emu/netlist/devices/nld_7486.h b/src/emu/netlist/devices/nld_7486.h
index 5febda494f9..e5ad2cb3be7 100644
--- a/src/emu/netlist/devices/nld_7486.h
+++ b/src/emu/netlist/devices/nld_7486.h
@@ -39,16 +39,20 @@
NET_CONNECT(_name, A, _A) \
NET_CONNECT(_name, B, _B)
+#if (USE_TRUTHTABLE)
+#include "nld_truthtable.h"
+NETLIB_TRUTHTABLE(7486, 2, 1, 0);
+#else
NETLIB_DEVICE(7486,
public:
- netlist_logic_input_t m_A;
- netlist_logic_input_t m_B;
- netlist_logic_output_t m_Q;
+ netlist_logic_input_t m_I[2];
+ netlist_logic_output_t m_Q[1];
ATTR_HOT void inc_active();
ATTR_HOT void dec_active();
int m_active;
);
+#endif
#define TTL_7486_DIP(_name) \
NET_REGISTER_DEV(7486_dip, _name)
diff --git a/src/emu/netlist/devices/nld_9312.c b/src/emu/netlist/devices/nld_9312.c
index 7ed2c678f38..06b6c3c5f62 100644
--- a/src/emu/netlist/devices/nld_9312.c
+++ b/src/emu/netlist/devices/nld_9312.c
@@ -128,19 +128,19 @@ NETLIB_START(9312_dip)
#if (1 && USE_TRUTHTABLE)
- register_subalias("13", m_sub.m_i[0]);
- register_subalias("12", m_sub.m_i[1]);
- register_subalias("11", m_sub.m_i[2]);
- register_subalias("10", m_sub.m_i[3]);
-
- register_subalias("1", m_sub.m_i[4]);
- register_subalias("2", m_sub.m_i[5]);
- register_subalias("3", m_sub.m_i[6]);
- register_subalias("4", m_sub.m_i[7]);
- register_subalias("5", m_sub.m_i[8]);
- register_subalias("6", m_sub.m_i[9]);
- register_subalias("7", m_sub.m_i[10]);
- register_subalias("9", m_sub.m_i[11]);
+ register_subalias("13", m_sub.m_I[0]);
+ register_subalias("12", m_sub.m_I[1]);
+ register_subalias("11", m_sub.m_I[2]);
+ register_subalias("10", m_sub.m_I[3]);
+
+ register_subalias("1", m_sub.m_I[4]);
+ register_subalias("2", m_sub.m_I[5]);
+ register_subalias("3", m_sub.m_I[6]);
+ register_subalias("4", m_sub.m_I[7]);
+ register_subalias("5", m_sub.m_I[8]);
+ register_subalias("6", m_sub.m_I[9]);
+ register_subalias("7", m_sub.m_I[10]);
+ register_subalias("9", m_sub.m_I[11]);
register_subalias("15", m_sub.m_Q[0]); // Y
register_subalias("14", m_sub.m_Q[1]); // YQ
diff --git a/src/emu/netlist/devices/nld_signal.h b/src/emu/netlist/devices/nld_signal.h
index f6ac5fd0924..0dc84e7e549 100644
--- a/src/emu/netlist/devices/nld_signal.h
+++ b/src/emu/netlist/devices/nld_signal.h
@@ -42,7 +42,7 @@ public:
register_output("Q", m_Q[0]);
for (int i=0; i < _numdev; i++)
{
- register_input(sIN[i], m_i[i]);
+ register_input(sIN[i], m_I[i]);
}
save(NLNAME(m_active));
}
@@ -57,13 +57,13 @@ public:
{
for (int i = 0; i< _numdev; i++)
{
- this->m_i[i].activate();
- if (INPLOGIC(this->m_i[i]) == _check)
+ this->m_I[i].activate();
+ if (INPLOGIC(this->m_I[i]) == _check)
{
for (int j = 0; j < i; j++)
- this->m_i[j].inactivate();
+ this->m_I[j].inactivate();
for (int j = i + 1; j < _numdev; j++)
- this->m_i[j].inactivate();
+ this->m_I[j].inactivate();
return _check ^ (1 ^ _invert);
}
}
@@ -80,8 +80,8 @@ public:
netlist_time mt = netlist_time::zero;
for (int i = 0; i< _numdev; i++)
{
- if (this->m_i[i].net().time() > mt)
- mt = this->m_i[i].net().time();
+ if (this->m_I[i].net().time() > mt)
+ mt = this->m_I[i].net().time();
}
netlist_sig_t r = process();
m_Q[0].net().set_Q_time(r, mt + times[r]);
@@ -94,7 +94,7 @@ public:
if (--m_active == 0)
{
for (int i = 0; i< _numdev; i++)
- m_i[i].inactivate();
+ m_I[i].inactivate();
}
}
@@ -107,7 +107,7 @@ public:
}
public:
- netlist_logic_input_t m_i[_numdev];
+ netlist_logic_input_t m_I[_numdev];
netlist_logic_output_t m_Q[1];
INT32 m_active;
};
diff --git a/src/emu/netlist/devices/nld_truthtable.h b/src/emu/netlist/devices/nld_truthtable.h
index 3036178bcfb..615f8d6b9b6 100644
--- a/src/emu/netlist/devices/nld_truthtable.h
+++ b/src/emu/netlist/devices/nld_truthtable.h
@@ -121,7 +121,7 @@ public:
for (unsigned i=0; i < m_NI; i++)
{
inout[i] = inout[i].trim();
- register_input(inout[i], m_i[i]);
+ register_input(inout[i], m_I[i]);
}
for (unsigned i=0; i < m_NO; i++)
{
@@ -138,7 +138,7 @@ public:
if (idx>=0)
{
//printf("connecting %s %d\n", out[i].cstr(), idx);
- connect(m_Q[i], m_i[idx]);
+ connect(m_Q[i], m_I[idx]);
// disable ignore for this inputs altogether.
// FIXME: This shouldn't be necessary
disabled_ignore |= (1<<idx);
@@ -167,7 +167,7 @@ public:
m_active = 0;
m_ign = 0;
for (unsigned i = 0; i < m_NI; i++)
- m_i[i].activate();
+ m_I[i].activate();
for (unsigned i=0; i<m_NO;i++)
if (this->m_Q[i].net().num_cons()>0)
m_active++;
@@ -183,26 +183,27 @@ public:
for (unsigned i = 0; i < m_NI; i++)
{
if (!doOUT || (m_ign & (1<<i)))
- m_i[i].activate();
+ m_I[i].activate();
}
for (unsigned i = 0; i < m_NI; i++)
{
- state |= (INPLOGIC(m_i[i]) << i);
+ state |= (INPLOGIC(m_I[i]) << i);
if (!doOUT)
- if (this->m_i[i].net().time() > mt)
- mt = this->m_i[i].net().time();
+ if (this->m_I[i].net().time() > mt)
+ mt = this->m_I[i].net().time();
}
const UINT32 nstate = state | (has_state ? (m_last_state << m_NI) : 0);
- const UINT32 out = m_ttp->m_outs[nstate] & ((1 << m_NO) - 1);
- m_ign = m_ttp->m_outs[nstate] >> m_NO;
+ const UINT32 outstate = m_ttp->m_outs[nstate];
+ const UINT32 out = outstate & ((1 << m_NO) - 1);
+ m_ign = outstate >> m_NO;
if (has_state)
m_last_state = (state << m_NO) | out;
#if 0
for (int i = 0; i < m_NI; i++)
if (m_ign & (1 << i))
- m_i[i].inactivate();
+ m_I[i].inactivate();
#endif
const UINT32 timebase = nstate * m_NO;
if (doOUT)
@@ -214,10 +215,12 @@ public:
for (unsigned i = 0; i < m_NO; i++)
m_Q[i].net().set_Q_time((out >> i) & 1, mt + m_ttp->m_timing_nt[m_ttp->m_timing[timebase + i]]);
- for (unsigned i = 0; i < m_NI; i++)
- if (m_ign & (1 << i))
- m_i[i].inactivate();
-
+ if (m_NI > 1 || has_state)
+ {
+ for (unsigned i = 0; i < m_NI; i++)
+ if (m_ign & (1 << i))
+ m_I[i].inactivate();
+ }
}
ATTR_HOT void update()
@@ -238,16 +241,24 @@ public:
ATTR_HOT void dec_active()
{
nl_assert(netlist().use_deactivate());
+ /* FIXME:
+ * Based on current measurements there is no point to disable
+ * 1 input devices. This should actually be a parameter so that we
+ * can decide for each individual gate whether it is benefitial to
+ * ignore deactivation.
+ */
+ if (m_NI < 2)
+ return;
if (has_state == 0)
if (--m_active == 0)
{
for (unsigned i = 0; i< m_NI; i++)
- m_i[i].inactivate();
+ m_I[i].inactivate();
m_ign = (1<<m_NI)-1;
}
}
- netlist_logic_input_t m_i[m_NI];
+ netlist_logic_input_t m_I[m_NI];
netlist_logic_output_t m_Q[m_NO];
private:
diff --git a/src/emu/netlist/nl_parser.c b/src/emu/netlist/nl_parser.c
index d82333cbc4c..2810a9be861 100644
--- a/src/emu/netlist/nl_parser.c
+++ b/src/emu/netlist/nl_parser.c
@@ -207,13 +207,13 @@ void netlist_parser::net_model()
void netlist_parser::net_submodel()
{
// don't do much
- pstring name = get_identifier();
- require_token(m_tok_comma);
pstring model = get_identifier();
+ require_token(m_tok_comma);
+ pstring name = get_identifier();
require_token(m_tok_param_right);
m_setup.namespace_push(name);
- m_setup.include(name);
+ m_setup.include(model);
m_setup.namespace_pop();
}
@@ -236,7 +236,7 @@ void netlist_parser::net_local_source()
void netlist_parser::net_alias()
{
- pstring alias = get_identifier();
+ pstring alias = get_identifier_or_number();
require_token(m_tok_comma);
diff --git a/src/emu/netlist/nl_setup.h b/src/emu/netlist/nl_setup.h
index a97b1bad727..c7b2f08b64e 100644
--- a/src/emu/netlist/nl_setup.h
+++ b/src/emu/netlist/nl_setup.h
@@ -63,7 +63,7 @@ ATTR_COLD void NETLIST_NAME(_name)(netlist_setup_t &setup)
#define INCLUDE(_name) \
setup.include(# _name);
-#define SUBMODEL(_name, _model) \
+#define SUBMODEL(_model, _name) \
setup.namespace_push(# _name); \
NETLIST_NAME(_model)(setup); \
setup.namespace_pop();
diff --git a/src/emu/netlist/plib/pparser.c b/src/emu/netlist/plib/pparser.c
index 6022eef1426..98b26a1b85f 100644
--- a/src/emu/netlist/plib/pparser.c
+++ b/src/emu/netlist/plib/pparser.c
@@ -97,6 +97,16 @@ pstring ptokenizer::get_identifier()
return tok.str();
}
+pstring ptokenizer::get_identifier_or_number()
+{
+ token_t tok = get_token();
+ if (!(tok.is_type(IDENTIFIER) || tok.is_type(NUMBER)))
+ {
+ error("Error: expected an identifier, got <%s>\n", tok.str().cstr());
+ }
+ return tok.str();
+}
+
double ptokenizer::get_number_double()
{
token_t tok = get_token();
diff --git a/src/emu/netlist/plib/pparser.h b/src/emu/netlist/plib/pparser.h
index 4dbaac67324..f4f8cff2171 100644
--- a/src/emu/netlist/plib/pparser.h
+++ b/src/emu/netlist/plib/pparser.h
@@ -86,6 +86,7 @@ public:
token_t get_token();
pstring get_string();
pstring get_identifier();
+ pstring get_identifier_or_number();
double get_number_double();
long get_number_long();
diff --git a/src/emu/netlist/tools/nl_convert.c b/src/emu/netlist/tools/nl_convert.c
index 8347e263b20..5453129dac1 100644
--- a/src/emu/netlist/tools/nl_convert.c
+++ b/src/emu/netlist/tools/nl_convert.c
@@ -230,22 +230,43 @@ void nl_convert_spice_t::process_line(const pstring &line)
/* check for fourth terminal ... should be numeric net
* including "0" or start with "N" (ltspice)
*/
- // FIXME: we need a is_long method ..
ATTR_UNUSED int nval =tt[4].as_long(&cerr);
+ pstring model;
+ pstring pins ="CBE";
+
if ((!cerr || tt[4].startsWith("N")) && tt.size() > 5)
- add_device("QBJT", tt[0], tt[5]);
+ model = tt[5];
else
- add_device("QBJT", tt[0], tt[4]);
- add_term(tt[1], tt[0] + ".C");
- add_term(tt[2], tt[0] + ".B");
- add_term(tt[3], tt[0] + ".E");
+ model = tt[4];
+ pstring_list_t m(model,"{");
+ if (m.size() == 2)
+ {
+ if (m[1].len() != 4)
+ fprintf(stderr, "error with model desc %s\n", model.cstr());
+ pins = m[1].left(3);
+ }
+ add_device("QBJT_EB", tt[0], m[0]);
+ add_term(tt[1], tt[0] + "." + pins[0]);
+ add_term(tt[2], tt[0] + "." + pins[1]);
+ add_term(tt[3], tt[0] + "." + pins[2]);
}
break;
case 'R':
- val = get_sp_val(tt[3]);
- add_device("RES", tt[0], val);
- add_term(tt[1], tt[0] + ".1");
- add_term(tt[2], tt[0] + ".2");
+ if (tt[0].startsWith("RV"))
+ {
+ val = get_sp_val(tt[4]);
+ add_device("POT", tt[0], val);
+ add_term(tt[1], tt[0] + ".1");
+ add_term(tt[2], tt[0] + ".2");
+ add_term(tt[3], tt[0] + ".3");
+ }
+ else
+ {
+ val = get_sp_val(tt[3]);
+ add_device("RES", tt[0], val);
+ add_term(tt[1], tt[0] + ".1");
+ add_term(tt[2], tt[0] + ".2");
+ }
break;
case 'C':
val = get_sp_val(tt[3]);
@@ -265,11 +286,18 @@ void nl_convert_spice_t::process_line(const pstring &line)
else
fprintf(stderr, "Voltage Source %s not connected to GND\n", tt[0].cstr());
break;
+ case 'I': // Input pin special notation
+ {
+ val = get_sp_val(tt[2]);
+ add_device("ANALOG_INPUT", tt[0], val);
+ add_term(tt[1], tt[0] + ".Q");
+ }
+ break;
case 'D':
- // FIXME: Rewrite resistor value
add_device("DIODE", tt[0], tt[3]);
- add_term(tt[1], tt[0] + ".A");
- add_term(tt[2], tt[0] + ".K");
+ /* FIXME ==> does Kicad use different notation from LTSPICE */
+ add_term(tt[1], tt[0] + ".K");
+ add_term(tt[2], tt[0] + ".A");
break;
case 'U':
case 'X':