mirror of
https://github.com/holub/mame
synced 2025-07-05 01:48:29 +03:00
Netlist: Documented 7493
This commit is contained in:
parent
a322434708
commit
6ca0144ef7
2
.gitattributes
vendored
2
.gitattributes
vendored
@ -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
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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();
|
||||
|
||||
|
63
src/emu/netlist/devices/nld_7493.c
Normal file
63
src/emu/netlist/devices/nld_7493.c
Normal file
@ -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());
|
||||
}
|
||||
}
|
84
src/emu/netlist/devices/nld_7493.h
Normal file
84
src/emu/netlist/devices/nld_7493.h
Normal file
@ -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_ */
|
@ -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 \
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user