summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author couriersud <couriersud@arcor.de>2015-05-03 20:20:19 +0200
committer couriersud <couriersud@arcor.de>2015-05-03 20:20:19 +0200
commitb0979ceb10d1110538fd9151c137a18fccb93ac7 (patch)
tree257a5f0d34a03f9b739ab6fa016eefa89d135e37
parent16618b71c71183d5ac95e0cc333683324684736d (diff)
Minor speed improvements and some timing adjustments. (nw)
-rw-r--r--src/emu/netlist/devices/nld_74175.c21
-rw-r--r--src/emu/netlist/devices/nld_74175.h2
-rw-r--r--src/emu/netlist/devices/nld_74192.c20
-rw-r--r--src/emu/netlist/devices/nld_74192.h6
-rw-r--r--src/emu/netlist/devices/nld_82S16.c6
-rw-r--r--src/emu/netlist/devices/nld_9310.c69
-rw-r--r--src/emu/netlist/devices/nld_9310.h10
-rw-r--r--src/emu/netlist/devices/nld_9316.c30
-rw-r--r--src/emu/netlist/devices/nld_9316.h10
-rw-r--r--src/mame/drivers/nl_breakout.c13
10 files changed, 103 insertions, 84 deletions
diff --git a/src/emu/netlist/devices/nld_74175.c b/src/emu/netlist/devices/nld_74175.c
index 43b9c33089d..613f5c75682 100644
--- a/src/emu/netlist/devices/nld_74175.c
+++ b/src/emu/netlist/devices/nld_74175.c
@@ -29,7 +29,7 @@ NETLIB_RESET(74175_sub)
{
m_CLK.set_state(netlist_input_t::STATE_INP_LH);
m_clrq = 0;
- m_data = 0;
+ m_data = 0xFF;
}
NETLIB_UPDATE(74175_sub)
@@ -42,26 +42,31 @@ NETLIB_UPDATE(74175_sub)
OUTLOGIC(m_Q[i], d, delay[d]);
OUTLOGIC(m_QQ[i], d ^ 1, delay[d ^ 1]);
}
+ m_CLK.inactivate();
}
}
NETLIB_UPDATE(74175)
{
- if (!INPLOGIC(m_CLRQ))
+ UINT8 d = 0;
+ for (int i=0; i<4; i++)
+ {
+ d |= (INPLOGIC(m_D[i]) << i);
+ }
+ m_sub.m_clrq = INPLOGIC(m_CLRQ);
+ if (!m_sub.m_clrq)
{
for (int i=0; i<4; i++)
{
OUTLOGIC(m_sub.m_Q[i], 0, delay_clear[0]);
OUTLOGIC(m_sub.m_QQ[i], 1, delay_clear[1]);
}
- }
- m_sub.m_clrq = INPLOGIC(m_CLRQ);
- UINT8 d = 0;
- for (int i=0; i<4; i++)
+ m_sub.m_data = 0;
+ } else if (d != m_sub.m_data)
{
- d |= (INPLOGIC(m_D[i]) << i);
+ m_sub.m_data = d;
+ m_sub.m_CLK.activate_lh();
}
- m_sub.m_data = d;
}
NETLIB_START(74175)
diff --git a/src/emu/netlist/devices/nld_74175.h b/src/emu/netlist/devices/nld_74175.h
index 4656bff24ab..47b094f1ba2 100644
--- a/src/emu/netlist/devices/nld_74175.h
+++ b/src/emu/netlist/devices/nld_74175.h
@@ -51,7 +51,7 @@ NETLIB_SUBDEVICE(74175_sub,
netlist_ttl_output_t m_QQ[4];
netlist_state_t<netlist_sig_t> m_clrq;
- netlist_state_t<netlist_sig_t> m_data;
+ netlist_state_t<UINT8> m_data;
);
NETLIB_DEVICE(74175,
diff --git a/src/emu/netlist/devices/nld_74192.c b/src/emu/netlist/devices/nld_74192.c
index 0ca39513b0d..b2a7e4d80e7 100644
--- a/src/emu/netlist/devices/nld_74192.c
+++ b/src/emu/netlist/devices/nld_74192.c
@@ -9,10 +9,11 @@
NETLIB_START(74192)
{
- register_input("A", m_A);
- register_input("B", m_B);
- register_input("C", m_C);
- register_input("D", m_D);
+ register_sub(m_ABCD, "subABCD");
+ 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);
register_input("CLEAR", m_CLEAR);
register_input("LOADQ", m_LOADQ);
register_input("CU", m_CU);
@@ -57,8 +58,7 @@ NETLIB_UPDATE(74192)
}
else if (!INPLOGIC(m_LOADQ))
{
- m_cnt = (INPLOGIC(m_D) << 3) | (INPLOGIC(m_C) << 2)
- | (INPLOGIC(m_B) << 1) | (INPLOGIC(m_A) << 0);
+ m_cnt = m_ABCD.read_ABCD();
}
else
{
@@ -101,7 +101,7 @@ NETLIB_START(74192_dip)
{
NETLIB_NAME(74192)::start();
- register_subalias("1", m_B);
+ register_subalias("1", m_ABCD.m_B);
register_subalias("2", m_Q[1]);
register_subalias("3", m_Q[0]);
register_subalias("4", m_CD);
@@ -109,13 +109,13 @@ NETLIB_START(74192_dip)
register_subalias("6", m_Q[2]);
register_subalias("7", m_Q[3]);
- register_subalias("9", m_D);
- register_subalias("10", m_C);
+ register_subalias("9", m_ABCD.m_D);
+ register_subalias("10", m_ABCD.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_A);
+ register_subalias("15", m_ABCD.m_A);
}
diff --git a/src/emu/netlist/devices/nld_74192.h b/src/emu/netlist/devices/nld_74192.h
index bc4a11a5360..2b5ba415940 100644
--- a/src/emu/netlist/devices/nld_74192.h
+++ b/src/emu/netlist/devices/nld_74192.h
@@ -30,6 +30,7 @@
#define NLD_74192_H_
#include "../nl_base.h"
+#include "nld_9316.h"
#define TTL_74192(_name) \
NET_REGISTER_DEV(74192, _name)
@@ -40,10 +41,7 @@
NETLIB_DEVICE(74192,
ATTR_HOT void update_outputs();
- netlist_ttl_input_t m_A;
- netlist_ttl_input_t m_B;
- netlist_ttl_input_t m_C;
- netlist_ttl_input_t m_D;
+ NETLIB_NAME(9316_subABCD) m_ABCD;
netlist_ttl_input_t m_CLEAR;
netlist_ttl_input_t m_LOADQ;
netlist_ttl_input_t m_CU;
diff --git a/src/emu/netlist/devices/nld_82S16.c b/src/emu/netlist/devices/nld_82S16.c
index 3b2c0fb8e81..368a9060138 100644
--- a/src/emu/netlist/devices/nld_82S16.c
+++ b/src/emu/netlist/devices/nld_82S16.c
@@ -15,15 +15,15 @@ NETLIB_UPDATE(82S16)
{
// FIXME: Outputs are tristate. This needs to be properly implemented
OUTLOGIC(m_DOUTQ, 1, NLTIME_FROM_NS(20));
- for (int i=0; i<8; i++)
- m_A[i].inactivate();
+ //for (int i=0; i<8; i++)
+ //m_A[i].inactivate();
}
else
{
int adr = 0;
for (int i=0; i<8; i++)
{
- m_A[i].activate();
+ //m_A[i].activate();
adr |= (INPLOGIC(m_A[i]) << i);
}
diff --git a/src/emu/netlist/devices/nld_9310.c b/src/emu/netlist/devices/nld_9310.c
index f6d35ac92e6..9d31f2cf13c 100644
--- a/src/emu/netlist/devices/nld_9310.c
+++ b/src/emu/netlist/devices/nld_9310.c
@@ -50,15 +50,12 @@ NETLIB_START(9310_subABCD)
NETLIB_RESET(9310_subABCD)
{
+#if 0
m_A.inactivate();
m_B.inactivate();
m_C.inactivate();
m_D.inactivate();
-}
-
-ATTR_HOT inline UINT8 NETLIB_NAME(9310_subABCD::read_ABCD)()
-{
- return (INPLOGIC_PASSIVE(m_D) << 3) | (INPLOGIC_PASSIVE(m_C) << 2) | (INPLOGIC_PASSIVE(m_B) << 1) | (INPLOGIC_PASSIVE(m_A) << 0);
+#endif
}
NETLIB_UPDATE(9310_subABCD)
@@ -75,9 +72,9 @@ NETLIB_START(9310_sub)
register_output("QD", m_QD);
register_output("RC", m_RC);
- save(NLNAME(m_cnt.ref()));
- save(NLNAME(m_loadq.ref()));
- save(NLNAME(m_ent.ref()));
+ save(NLNAME(m_cnt));
+ save(NLNAME(m_loadq));
+ save(NLNAME(m_ent));
}
NETLIB_RESET(9310_sub)
@@ -90,28 +87,37 @@ NETLIB_RESET(9310_sub)
NETLIB_UPDATE(9310_sub)
{
- UINT8 cnt = m_cnt;
if (m_loadq)
{
- cnt++;
- if (cnt > MAXCNT)
- cnt = 0;
- update_outputs(cnt);
- OUTLOGIC(m_RC, m_ent & (cnt == MAXCNT), NLTIME_FROM_NS(20));
#if 0
- if (cnt == 0x0f)
- OUTLOGIC(m_RC, m_ent, NLTIME_FROM_NS(20));
- else if (cnt == 0)
- OUTLOGIC(m_RC, 0, NLTIME_FROM_NS(20));
+ m_cnt = (m_cnt < MAXCNT) ? m_cnt + 1 : 0;
+ update_outputs(m_cnt);
+ OUTLOGIC(m_RC, m_ent & (m_cnt == MAXCNT), NLTIME_FROM_NS(20));
+#else
+ switch (m_cnt.get())
+ {
+ case MAXCNT - 1:
+ m_cnt = MAXCNT;
+ OUTLOGIC(m_RC, m_ent, NLTIME_FROM_NS(20));
+ OUTLOGIC(m_QA, 1, NLTIME_FROM_NS(20));
+ break;
+ case MAXCNT:
+ OUTLOGIC(m_RC, 0, NLTIME_FROM_NS(20));
+ m_cnt = 0;
+ update_outputs_all(m_cnt, NLTIME_FROM_NS(20));
+ break;
+ default:
+ m_cnt++;
+ update_outputs(m_cnt);
+ }
#endif
}
else
{
- cnt = m_ABCD.get()->read_ABCD();
- update_outputs_all(cnt);
- OUTLOGIC(m_RC, m_ent & (cnt == MAXCNT), NLTIME_FROM_NS(20));
+ m_cnt = m_ABCD.get()->read_ABCD();
+ update_outputs_all(m_cnt, NLTIME_FROM_NS(22));
+ OUTLOGIC(m_RC, m_ent & (m_cnt == MAXCNT), NLTIME_FROM_NS(27));
}
- m_cnt = cnt;
}
NETLIB_UPDATE(9310)
@@ -123,26 +129,23 @@ NETLIB_UPDATE(9310)
if ((!sub.m_loadq || (sub.m_ent & INPLOGIC(m_ENP))) && clrq)
{
sub.m_CLK.activate_lh();
+ OUTLOGIC(sub.m_RC, sub.m_ent & (sub.m_cnt == MAXCNT), NLTIME_FROM_NS(27));
}
else
{
- UINT8 cnt = sub.m_cnt;
sub.m_CLK.inactivate();
- if (!clrq && (cnt>0))
+ if (!clrq && (sub.m_cnt>0))
{
- cnt = 0;
- sub.update_outputs(cnt);
- //OUTLOGIC(sub.m_RC, 0, NLTIME_FROM_NS(20));
- sub.m_cnt = cnt;
+ sub.update_outputs_all(0, NLTIME_FROM_NS(36));
+ sub.m_cnt = 0;
//return;
}
+ OUTLOGIC(sub.m_RC, sub.m_ent & (sub.m_cnt == MAXCNT), NLTIME_FROM_NS(27));
}
- OUTLOGIC(sub.m_RC, sub.m_ent & (sub.m_cnt == MAXCNT), NLTIME_FROM_NS(20));
}
-inline NETLIB_FUNC_VOID(9310_sub, update_outputs_all, (const UINT8 cnt))
+inline NETLIB_FUNC_VOID(9310_sub, update_outputs_all, (const UINT8 cnt, const netlist_time out_delay))
{
- const netlist_time out_delay = NLTIME_FROM_NS(20);
OUTLOGIC(m_QA, (cnt >> 0) & 1, out_delay);
OUTLOGIC(m_QB, (cnt >> 1) & 1, out_delay);
OUTLOGIC(m_QC, (cnt >> 2) & 1, out_delay);
@@ -151,8 +154,8 @@ inline NETLIB_FUNC_VOID(9310_sub, update_outputs_all, (const UINT8 cnt))
inline NETLIB_FUNC_VOID(9310_sub, update_outputs, (const UINT8 cnt))
{
- const netlist_time out_delay = NLTIME_FROM_NS(20);
-#if 1
+ static const netlist_time out_delay = NLTIME_FROM_NS(20);
+#if 0
// for (int i=0; i<4; i++)
// OUTLOGIC(m_Q[i], (cnt >> i) & 1, delay[i]);
OUTLOGIC(m_QA, (cnt >> 0) & 1, out_delay);
diff --git a/src/emu/netlist/devices/nld_9310.h b/src/emu/netlist/devices/nld_9310.h
index ce83b1e1a69..35d6f14a3c1 100644
--- a/src/emu/netlist/devices/nld_9310.h
+++ b/src/emu/netlist/devices/nld_9310.h
@@ -68,12 +68,16 @@ NETLIB_SUBDEVICE(9310_subABCD,
netlist_ttl_input_t m_C;
netlist_ttl_input_t m_D;
- ATTR_HOT inline UINT8 read_ABCD();
+ ATTR_HOT inline UINT8 read_ABCD() const
+ {
+ //return (INPLOGIC_PASSIVE(m_D) << 3) | (INPLOGIC_PASSIVE(m_C) << 2) | (INPLOGIC_PASSIVE(m_B) << 1) | (INPLOGIC_PASSIVE(m_A) << 0);
+ return (INPLOGIC(m_D) << 3) | (INPLOGIC(m_C) << 2) | (INPLOGIC(m_B) << 1) | (INPLOGIC(m_A) << 0);
+ }
);
NETLIB_SUBDEVICE(9310_sub,
- ATTR_HOT void update_outputs_all(const UINT8 cnt);
- ATTR_HOT void update_outputs(const UINT8 cnt);
+ ATTR_HOT inline void update_outputs_all(const UINT8 cnt, const netlist_time out_delay);
+ ATTR_HOT inline void update_outputs(const UINT8 cnt);
netlist_ttl_input_t m_CLK;
diff --git a/src/emu/netlist/devices/nld_9316.c b/src/emu/netlist/devices/nld_9316.c
index 62201d14ead..0583593ae7f 100644
--- a/src/emu/netlist/devices/nld_9316.c
+++ b/src/emu/netlist/devices/nld_9316.c
@@ -50,15 +50,12 @@ NETLIB_START(9316_subABCD)
NETLIB_RESET(9316_subABCD)
{
+#if 0
m_A.inactivate();
m_B.inactivate();
m_C.inactivate();
m_D.inactivate();
-}
-
-ATTR_HOT inline UINT8 NETLIB_NAME(9316_subABCD::read_ABCD)()
-{
- return (INPLOGIC_PASSIVE(m_D) << 3) | (INPLOGIC_PASSIVE(m_C) << 2) | (INPLOGIC_PASSIVE(m_B) << 1) | (INPLOGIC_PASSIVE(m_A) << 0);
+#endif
}
NETLIB_UPDATE(9316_subABCD)
@@ -99,15 +96,15 @@ NETLIB_UPDATE(9316_sub)
#else
switch (m_cnt.get())
{
- case 0x0e:
- m_cnt = 0x0f;
+ case MAXCNT - 1:
+ m_cnt = MAXCNT;
OUTLOGIC(m_RC, m_ent, NLTIME_FROM_NS(20));
OUTLOGIC(m_QA, 1, NLTIME_FROM_NS(20));
break;
- case 0x0f:
+ case MAXCNT:
OUTLOGIC(m_RC, 0, NLTIME_FROM_NS(20));
m_cnt = 0;
- update_outputs_all(m_cnt);
+ update_outputs_all(m_cnt, NLTIME_FROM_NS(20));
break;
default:
m_cnt++;
@@ -118,8 +115,8 @@ NETLIB_UPDATE(9316_sub)
else
{
m_cnt = m_ABCD.get()->read_ABCD();
- update_outputs_all(m_cnt);
- OUTLOGIC(m_RC, m_ent & (m_cnt == MAXCNT), NLTIME_FROM_NS(20));
+ update_outputs_all(m_cnt, NLTIME_FROM_NS(22));
+ OUTLOGIC(m_RC, m_ent & (m_cnt == MAXCNT), NLTIME_FROM_NS(27));
}
}
@@ -129,27 +126,26 @@ NETLIB_UPDATE(9316)
sub.m_ent = INPLOGIC(m_ENT);
const netlist_sig_t clrq = INPLOGIC(m_CLRQ);
- if ((!sub.m_loadq || (sub.m_ent & INPLOGIC(m_ENP))) && clrq)
+ if ((!sub.m_loadq | (sub.m_ent & INPLOGIC(m_ENP))) & clrq)
{
sub.m_CLK.activate_lh();
- OUTLOGIC(sub.m_RC, sub.m_ent & (sub.m_cnt == MAXCNT), NLTIME_FROM_NS(20));
+ OUTLOGIC(sub.m_RC, sub.m_ent & (sub.m_cnt == MAXCNT), NLTIME_FROM_NS(27));
}
else
{
sub.m_CLK.inactivate();
if (!clrq && (sub.m_cnt>0))
{
- sub.update_outputs(0);
+ sub.update_outputs_all(0, NLTIME_FROM_NS(36));
sub.m_cnt = 0;
//return;
}
- OUTLOGIC(sub.m_RC, sub.m_ent & (sub.m_cnt == MAXCNT), NLTIME_FROM_NS(20));
+ OUTLOGIC(sub.m_RC, sub.m_ent & (sub.m_cnt == MAXCNT), NLTIME_FROM_NS(27));
}
}
-inline NETLIB_FUNC_VOID(9316_sub, update_outputs_all, (const UINT8 cnt))
+inline NETLIB_FUNC_VOID(9316_sub, update_outputs_all, (const UINT8 cnt, const netlist_time out_delay))
{
- const netlist_time out_delay = NLTIME_FROM_NS(20);
OUTLOGIC(m_QA, (cnt >> 0) & 1, out_delay);
OUTLOGIC(m_QB, (cnt >> 1) & 1, out_delay);
OUTLOGIC(m_QC, (cnt >> 2) & 1, out_delay);
diff --git a/src/emu/netlist/devices/nld_9316.h b/src/emu/netlist/devices/nld_9316.h
index 99fac2c452d..316face36d9 100644
--- a/src/emu/netlist/devices/nld_9316.h
+++ b/src/emu/netlist/devices/nld_9316.h
@@ -72,12 +72,16 @@ NETLIB_SUBDEVICE(9316_subABCD,
netlist_ttl_input_t m_C;
netlist_ttl_input_t m_D;
- ATTR_HOT inline UINT8 read_ABCD();
+ ATTR_HOT inline UINT8 read_ABCD() const
+ {
+ //return (INPLOGIC_PASSIVE(m_D) << 3) | (INPLOGIC_PASSIVE(m_C) << 2) | (INPLOGIC_PASSIVE(m_B) << 1) | (INPLOGIC_PASSIVE(m_A) << 0);
+ return (INPLOGIC(m_D) << 3) | (INPLOGIC(m_C) << 2) | (INPLOGIC(m_B) << 1) | (INPLOGIC(m_A) << 0);
+ }
);
NETLIB_SUBDEVICE(9316_sub,
- ATTR_HOT void update_outputs_all(const UINT8 cnt);
- ATTR_HOT void update_outputs(const UINT8 cnt);
+ ATTR_HOT inline void update_outputs_all(const UINT8 cnt, const netlist_time out_delay);
+ ATTR_HOT inline void update_outputs(const UINT8 cnt);
netlist_ttl_input_t m_CLK;
diff --git a/src/mame/drivers/nl_breakout.c b/src/mame/drivers/nl_breakout.c
index 05d5511608c..a24c15b72ad 100644
--- a/src/mame/drivers/nl_breakout.c
+++ b/src/mame/drivers/nl_breakout.c
@@ -161,7 +161,9 @@ CIRCUIT_LAYOUT( breakout )
PARAM(Solver.ACCURACY, 1e-8) // less accuracy and diode will not work
#else
SOLVER(Solver, 48000)
- PARAM(Solver.ACCURACY, 1e-6) // less accuracy and diode will not work
+ PARAM(Solver.ACCURACY, 1e-6)
+ PARAM(Solver.GS_THRESHOLD, 2)
+ //PARAM(Solver.SOR_FACTOR, 1)
#endif
//CHIP("CLOCK", CLOCK_14_318_MHZ)
MAINCLOCK(Y1, 14318000.0)
@@ -386,7 +388,7 @@ CIRCUIT_LAYOUT( breakout )
#define PAD_EN_n "C2", 8
//#define P VCC
- #define P "V5", Q
+ #define P "ttlhigh", Q
#define COIN "L9", 6
#define COIN1_n "F8", 5
@@ -1631,14 +1633,21 @@ CIRCUIT_LAYOUT( breakout )
NET_C(CR6.A, R41.1, R42.1, R43.1, R51.1, R52.1)
#else
+ //RES_SWITCH(CR6, E2.11, R41.1, GND)
RES_SWITCH(CR6, E2.11, R41.1, GND)
PARAM(CR6.RON, 1e20)
PARAM(CR6.ROFF, 1)
NET_C(R41.1, R42.1, R43.1, R51.1, R52.1)
#endif
+#if 1
CONNECTION("R51", 2, PLAYFIELD)
CONNECTION("R43", 2, BSYNC)
CONNECTION("R52", 2, SCORE)
+#else
+ CONNECTION("R51", 2, "V5", Q)
+ CONNECTION("R43", 2, "V5", Q)
+ CONNECTION("R52", 2, "V5", Q)
+#endif
NET_C(R41.2, B9.3)
NET_C(R42.2, V5)