diff options
author | 2015-05-03 20:20:19 +0200 | |
---|---|---|
committer | 2015-05-03 20:20:19 +0200 | |
commit | b0979ceb10d1110538fd9151c137a18fccb93ac7 (patch) | |
tree | 257a5f0d34a03f9b739ab6fa016eefa89d135e37 /src/emu/netlist | |
parent | 16618b71c71183d5ac95e0cc333683324684736d (diff) |
Minor speed improvements and some timing adjustments. (nw)
Diffstat (limited to 'src/emu/netlist')
-rw-r--r-- | src/emu/netlist/devices/nld_74175.c | 21 | ||||
-rw-r--r-- | src/emu/netlist/devices/nld_74175.h | 2 | ||||
-rw-r--r-- | src/emu/netlist/devices/nld_74192.c | 20 | ||||
-rw-r--r-- | src/emu/netlist/devices/nld_74192.h | 6 | ||||
-rw-r--r-- | src/emu/netlist/devices/nld_82S16.c | 6 | ||||
-rw-r--r-- | src/emu/netlist/devices/nld_9310.c | 69 | ||||
-rw-r--r-- | src/emu/netlist/devices/nld_9310.h | 10 | ||||
-rw-r--r-- | src/emu/netlist/devices/nld_9316.c | 30 | ||||
-rw-r--r-- | src/emu/netlist/devices/nld_9316.h | 10 |
9 files changed, 92 insertions, 82 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; |