diff --git a/.gitattributes b/.gitattributes index bb84c8809d7..e645a5b5c45 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2137,6 +2137,8 @@ src/emu/netlist/devices/nld_7474.c svneol=native#text/plain src/emu/netlist/devices/nld_7474.h svneol=native#text/plain src/emu/netlist/devices/nld_7486.c svneol=native#text/plain src/emu/netlist/devices/nld_7486.h svneol=native#text/plain +src/emu/netlist/devices/nld_7493.c svneol=native#text/plain +src/emu/netlist/devices/nld_7493.h svneol=native#text/plain src/emu/netlist/devices/nld_NE555.c svneol=native#text/plain src/emu/netlist/devices/nld_NE555.h svneol=native#text/plain src/emu/netlist/devices/nld_log.c svneol=native#text/plain diff --git a/src/emu/netlist/devices/net_lib.c b/src/emu/netlist/devices/net_lib.c index e2af4ce8666..af1296b34b4 100644 --- a/src/emu/netlist/devices/net_lib.c +++ b/src/emu/netlist/devices/net_lib.c @@ -509,144 +509,6 @@ NETLIB_FUNC_VOID(nic7490, update_outputs, (void)) OUTLOGIC(m_Q[i], (m_cnt >> i) & 1, delay[i]); } #endif -#if !USE_OLD7493 -NETLIB_START(nic7493) -{ - register_sub(A, "A"); - register_sub(B, "B"); - register_sub(C, "C"); - register_sub(D, "D"); - - register_subalias("CLKA", A.m_I); - register_subalias("CLKB", B.m_I); - register_input("R1", m_R1); - register_input("R2", m_R2); - - register_subalias("QA", A.m_Q); - register_subalias("QB", B.m_Q); - register_subalias("QC", C.m_Q); - register_subalias("QD", D.m_Q); - - register_link_internal(C, C.m_I, B.m_Q, netlist_input_t::STATE_INP_HL); - register_link_internal(D, D.m_I, C.m_Q, netlist_input_t::STATE_INP_HL); -} - -NETLIB_START(nic7493ff) -{ - register_input("CLK", m_I, netlist_input_t::STATE_INP_HL); - register_output("Q", m_Q); -} - -NETLIB_UPDATE(nic7493ff) -{ - if (m_reset == 0) - OUTLOGIC(m_Q, !m_Q.net().new_Q(), NLTIME_FROM_NS(18)); -} - -NETLIB_UPDATE(nic7493) -{ - netlist_sig_t r = INPLOGIC(m_R1) & INPLOGIC(m_R2); - - if (r) - { - //printf("%s reset\n", name()); - A.m_reset = B.m_reset = C.m_reset = D.m_reset = 1; - A.m_I.inactivate(); - B.m_I.inactivate(); - OUTLOGIC(A.m_Q, 0, NLTIME_FROM_NS(40)); - OUTLOGIC(B.m_Q, 0, NLTIME_FROM_NS(40)); - OUTLOGIC(C.m_Q, 0, NLTIME_FROM_NS(40)); - OUTLOGIC(D.m_Q, 0, NLTIME_FROM_NS(40)); - } - else - { - A.m_reset = B.m_reset = C.m_reset = D.m_reset = 0; - A.m_I.activate_hl(); - B.m_I.activate_hl(); - //printf("%s enable\n", name()); - } -} -#else - -NETLIB_START(nic7493) -{ - m_cnt = 0; - - register_input("CLKA", m_CLK, netlist_input_t::STATE_INP_HL); - register_input("CLKB", m_CLKB, netlist_input_t::STATE_INP_HL); - register_input("R1", m_R1); - register_input("R2", m_R2); - - register_output("QA", m_QA); - register_output("QB", m_QB); - register_output("QC", m_QC); - register_output("QD", m_QD); -} - -NETLIB_UPDATE(nic7493) -{ - //UINT8 old_clk = m_lastclk; - //m_lastclk = INPLOGIC(m_clk); - - //printf("%s %d %d %d %d %d %d\n", name(), m_cnt, old_clk, m_QA.Q(), m_QB.Q(), m_QC.Q(), m_QD.Q()); - if (INPLOGIC(m_R1) & INPLOGIC(m_R2)) - { - if (m_cnt > 0) - { - m_cnt = 0; - OUTLOGIC(m_QA, 0, NLTIME_FROM_NS(40)); - OUTLOGIC(m_QB, 0, NLTIME_FROM_NS(40)); - OUTLOGIC(m_QC, 0, NLTIME_FROM_NS(40)); - OUTLOGIC(m_QD, 0, NLTIME_FROM_NS(40)); - } - m_CLK.inactivate(); - } - //else if (old_clk & !m_lastclk) - else { - m_CLK.activate_hl(); - if (INP_HL(m_CLK)) - { - m_cnt++; - m_cnt &= 0x0f; - update_outputs(); - } - } -} - -NETLIB_FUNC_VOID(nic7493, update_outputs, (void)) -{ - if (m_cnt & 1) - OUTLOGIC(m_QA, 1, NLTIME_FROM_NS(16)); - else - { - OUTLOGIC(m_QA, 0, NLTIME_FROM_NS(16)); - switch (m_cnt) - { - case 0x00: - OUTLOGIC(m_QD, 0, NLTIME_FROM_NS(70)); - OUTLOGIC(m_QC, 0, NLTIME_FROM_NS(48)); - OUTLOGIC(m_QB, 0, NLTIME_FROM_NS(34)); - break; - case 0x02: - case 0x06: - case 0x0A: - case 0x0E: - OUTLOGIC(m_QB, 1, NLTIME_FROM_NS(34)); - break; - case 0x04: - case 0x0C: - OUTLOGIC(m_QC, 1, NLTIME_FROM_NS(48)); - OUTLOGIC(m_QB, 0, NLTIME_FROM_NS(34)); - break; - case 0x08: - OUTLOGIC(m_QD, 1, NLTIME_FROM_NS(70)); - OUTLOGIC(m_QC, 0, NLTIME_FROM_NS(48)); - OUTLOGIC(m_QB, 0, NLTIME_FROM_NS(34)); - break; - } - } -} -#endif NETLIB_START(nic74107Asub) { diff --git a/src/emu/netlist/devices/net_lib.h b/src/emu/netlist/devices/net_lib.h index a9a9778cde7..f9f29332a3b 100644 --- a/src/emu/netlist/devices/net_lib.h +++ b/src/emu/netlist/devices/net_lib.h @@ -65,13 +65,13 @@ #include "nld_7430.h" #include "nld_7474.h" #include "nld_7486.h" +#include "nld_7493.h" #include "nld_NE555.h" #include "nld_log.h" // this is a bad hack -#define USE_OLD7493 (0) // ---------------------------------------------------------------------------------------- // Special chips @@ -140,13 +140,6 @@ NET_CONNECT(_name, R91, _R91) \ NET_CONNECT(_name, R92, _R92) -#define TTL_7493(_name, _CLKA, _CLKB, _R1, _R2) \ - NET_REGISTER_DEV(nic7493, _name) \ - NET_CONNECT(_name, CLKA, _CLKA) \ - NET_CONNECT(_name, CLKB, _CLKB) \ - NET_CONNECT(_name, R1, _R1) \ - NET_CONNECT(_name, R2, _R2) - #define TTL_74107A(_name, _CLK, _J, _K, _CLRQ) \ NET_REGISTER_DEV(nic74107A, _name) \ NET_CONNECT(_name, CLK, _CLK) \ @@ -315,41 +308,6 @@ public: }; -NETLIB_SUBDEVICE(nic7493ff, - netlist_ttl_input_t m_I; - netlist_ttl_output_t m_Q; - - UINT8 m_reset; -); - -#if !USE_OLD7493 -NETLIB_DEVICE(nic7493, - netlist_ttl_input_t m_R1; - netlist_ttl_input_t m_R2; - - NETLIB_NAME(nic7493ff) A; - NETLIB_NAME(nic7493ff) B; - NETLIB_NAME(nic7493ff) C; - NETLIB_NAME(nic7493ff) D; -); - -#else -NETLIB_DEVICE(nic7493, - netlist_ttl_input_t m_CLK; - netlist_ttl_input_t m_CLKB; /* dummy ! */ - netlist_ttl_input_t m_R1; - netlist_ttl_input_t m_R2; - - netlist_ttl_output_t m_QA; - netlist_ttl_output_t m_QB; - netlist_ttl_output_t m_QC; - netlist_ttl_output_t m_QD; - - UINT8 m_cnt; - ATTR_HOT void update_outputs(); -); -#endif - NETLIB_DEVICE(nic7490, ATTR_HOT void update_outputs(); diff --git a/src/emu/netlist/devices/nld_7493.c b/src/emu/netlist/devices/nld_7493.c new file mode 100644 index 00000000000..cdc5b0608df --- /dev/null +++ b/src/emu/netlist/devices/nld_7493.c @@ -0,0 +1,63 @@ +/* + * nld_7493.c + * + */ + +#include "nld_7493.h" + +NETLIB_START(nic7493) +{ + register_sub(A, "A"); + register_sub(B, "B"); + register_sub(C, "C"); + register_sub(D, "D"); + + register_subalias("CLKA", A.m_I); + register_subalias("CLKB", B.m_I); + register_input("R1", m_R1); + register_input("R2", m_R2); + + register_subalias("QA", A.m_Q); + register_subalias("QB", B.m_Q); + register_subalias("QC", C.m_Q); + register_subalias("QD", D.m_Q); + + register_link_internal(C, C.m_I, B.m_Q, netlist_input_t::STATE_INP_HL); + register_link_internal(D, D.m_I, C.m_Q, netlist_input_t::STATE_INP_HL); +} + +NETLIB_START(nic7493ff) +{ + register_input("CLK", m_I, netlist_input_t::STATE_INP_HL); + register_output("Q", m_Q); +} + +NETLIB_UPDATE(nic7493ff) +{ + if (m_reset == 0) + OUTLOGIC(m_Q, !m_Q.net().new_Q(), NLTIME_FROM_NS(18)); +} + +NETLIB_UPDATE(nic7493) +{ + netlist_sig_t r = INPLOGIC(m_R1) & INPLOGIC(m_R2); + + if (r) + { + //printf("%s reset\n", name()); + A.m_reset = B.m_reset = C.m_reset = D.m_reset = 1; + A.m_I.inactivate(); + B.m_I.inactivate(); + OUTLOGIC(A.m_Q, 0, NLTIME_FROM_NS(40)); + OUTLOGIC(B.m_Q, 0, NLTIME_FROM_NS(40)); + OUTLOGIC(C.m_Q, 0, NLTIME_FROM_NS(40)); + OUTLOGIC(D.m_Q, 0, NLTIME_FROM_NS(40)); + } + else + { + A.m_reset = B.m_reset = C.m_reset = D.m_reset = 0; + A.m_I.activate_hl(); + B.m_I.activate_hl(); + //printf("%s enable\n", name()); + } +} diff --git a/src/emu/netlist/devices/nld_7493.h b/src/emu/netlist/devices/nld_7493.h new file mode 100644 index 00000000000..1b500a0fb12 --- /dev/null +++ b/src/emu/netlist/devices/nld_7493.h @@ -0,0 +1,84 @@ +// license:GPL-2.0+ +// copyright-holders:Couriersud +/* + * nld_7493.h + * + * DM7493: Quad 2-Input NAND Gates + * + * +--------------+ + * B |1 ++ 14| A + * R01 |2 13| NC + * R02 |3 12| QA + * NC |4 7493 11| QD + * VCC |5 10| GND + * NC |6 9| QB + * NC |7 8| QC + * +--------------+ + * + * Counter Sequence + * + * +-------++----+----+----+----+ + * | COUNT || QD | QC | QB | QA | + * +=======++====+====+====+====+ + * | 0 || 0 | 0 | 0 | 0 | + * | 1 || 0 | 0 | 0 | 1 | + * | 2 || 0 | 0 | 1 | 0 | + * | 3 || 0 | 0 | 1 | 1 | + * | 4 || 0 | 1 | 0 | 0 | + * | 5 || 0 | 1 | 0 | 1 | + * | 6 || 0 | 1 | 1 | 0 | + * | 7 || 0 | 1 | 1 | 1 | + * | 8 || 1 | 0 | 0 | 0 | + * | 9 || 1 | 0 | 0 | 1 | + * | 10 || 1 | 0 | 1 | 0 | + * | 11 || 1 | 0 | 1 | 1 | + * | 12 || 1 | 1 | 0 | 0 | + * | 13 || 1 | 1 | 0 | 1 | + * | 14 || 1 | 1 | 1 | 0 | + * | 15 || 1 | 1 | 1 | 1 | + * +-------++----+----+----+----+ + * + * Reset Count Function table + * + * +-----+-----++----+----+----+----+ + * | R01 | R01 || QD | QC | QB | QA | + * +=====+=====++====+====+====+====+ + * | 1 | 1 || 0 | 0 | 0 | 0 | + * | 0 | X || COUNT | + * | X | 0 || COUNT | + * +-----+-----++----+----+----+----+ + * + * Naming conventions follow National Semiconductor datasheet + * + */ + +#ifndef NLD_7493_H_ +#define NLD_7493_H_ + +#include "../nl_base.h" + +#define TTL_7493(_name, _CLKA, _CLKB, _R1, _R2) \ + NET_REGISTER_DEV(nic7493, _name) \ + NET_CONNECT(_name, CLKA, _CLKA) \ + NET_CONNECT(_name, CLKB, _CLKB) \ + NET_CONNECT(_name, R1, _R1) \ + NET_CONNECT(_name, R2, _R2) + +NETLIB_SUBDEVICE(nic7493ff, + netlist_ttl_input_t m_I; + netlist_ttl_output_t m_Q; + + UINT8 m_reset; +); + +NETLIB_DEVICE(nic7493, + netlist_ttl_input_t m_R1; + netlist_ttl_input_t m_R2; + + NETLIB_NAME(nic7493ff) A; + NETLIB_NAME(nic7493ff) B; + NETLIB_NAME(nic7493ff) C; + NETLIB_NAME(nic7493ff) D; +); + +#endif /* NLD_7493_H_ */ diff --git a/src/emu/netlist/netlist.mak b/src/emu/netlist/netlist.mak index 0bcce3c2472..d65775ec503 100644 --- a/src/emu/netlist/netlist.mak +++ b/src/emu/netlist/netlist.mak @@ -28,6 +28,7 @@ NETLISTOBJS+= \ $(NETLISTOBJ)/devices/nld_7404.o \ $(NETLISTOBJ)/devices/nld_7474.o \ $(NETLISTOBJ)/devices/nld_7486.o \ + $(NETLISTOBJ)/devices/nld_7493.o \ $(NETLISTOBJ)/devices/nld_NE555.o \ $(NETLISTOBJ)/devices/nld_log.o \