Netlist: Documented 7493

This commit is contained in:
Couriersud 2013-12-03 20:01:10 +00:00
parent a322434708
commit 6ca0144ef7
6 changed files with 151 additions and 181 deletions

2
.gitattributes vendored
View File

@ -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

View File

@ -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)
{

View File

@ -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();

View 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());
}
}

View 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_ */

View File

@ -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 \