mirror of
https://github.com/holub/mame
synced 2025-05-17 19:24:59 +03:00
new netlist device: 74164 - 8bit parallel output serial shift register
This commit is contained in:
parent
eed65a01ac
commit
f9f149a579
@ -78,6 +78,7 @@ namespace netlist
|
||||
ENTRYX(74123, TTL_74123, "")
|
||||
ENTRYX(74153, TTL_74153, "+C0,+C1,+C2,+C3,+A,+B,+G")
|
||||
ENTRYX(74161, TTL_74161, "+A,+B,+C,+D,+CLRQ,+LOADQ,+CLK,+ENABLEP,+ENABLET")
|
||||
ENTRYX(74164, TTL_74164, "+A,+B,+CLRQ,+CLK")
|
||||
ENTRYX(74165, TTL_74165, "+CLK,+CLKINH,+SH_LDQ,+SER,+A,+B,+C,+D,+E,+F,+G,+H")
|
||||
ENTRYX(74166, TTL_74166, "+CLK,+CLKINH,+SH_LDQ,+SER,+A,+B,+C,+D,+E,+F,+G,+H,+CLRQ")
|
||||
ENTRYX(74174, TTL_74174, "+CLK,+D1,+D2,+D3,+D4,+D5,+D6,+CLRQ")
|
||||
@ -126,6 +127,7 @@ namespace netlist
|
||||
ENTRYX(74123_dip, TTL_74123_DIP, "")
|
||||
ENTRYX(74153_dip, TTL_74153_DIP, "")
|
||||
ENTRYX(74161_dip, TTL_74161_DIP, "")
|
||||
ENTRYX(74164_dip, TTL_74164_DIP, "")
|
||||
ENTRYX(74165_dip, TTL_74165_DIP, "")
|
||||
ENTRYX(74166_dip, TTL_74166_DIP, "")
|
||||
ENTRYX(74174_dip, TTL_74174_DIP, "")
|
||||
|
@ -52,6 +52,7 @@
|
||||
#include "nld_74123.h"
|
||||
#include "nld_74153.h"
|
||||
#include "nld_74161.h"
|
||||
#include "nld_74164.h"
|
||||
#include "nld_74165.h"
|
||||
#include "nld_74166.h"
|
||||
#include "nld_74174.h"
|
||||
|
104
src/lib/netlist/devices/nld_74164.cpp
Normal file
104
src/lib/netlist/devices/nld_74164.cpp
Normal file
@ -0,0 +1,104 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Joakim Larsson Edstrom
|
||||
/*
|
||||
* nld_74164.cpp
|
||||
*
|
||||
* Thanks to the 74161 work of Ryan and the huge Netlist effort by Couriersud
|
||||
* implementing this was simple.
|
||||
*
|
||||
*/
|
||||
|
||||
#include "nld_74164.h"
|
||||
#include "../nl_base.h"
|
||||
|
||||
namespace netlist
|
||||
{
|
||||
namespace devices
|
||||
{
|
||||
NETLIB_OBJECT(74164)
|
||||
{
|
||||
NETLIB_CONSTRUCTOR(74164)
|
||||
, m_A(*this, "A")
|
||||
, m_B(*this, "B")
|
||||
, m_CLRQ(*this, "CLRQ")
|
||||
, m_CLK(*this, "CLK")
|
||||
, m_cnt(*this, "m_cnt", 0)
|
||||
, m_last_CLK(*this, "m_last_CLK", 0)
|
||||
, m_Q(*this, {{"QA", "QB", "QC", "QD", "QE", "QF", "QG", "QH"}})
|
||||
{
|
||||
}
|
||||
|
||||
NETLIB_RESETI();
|
||||
NETLIB_UPDATEI();
|
||||
|
||||
protected:
|
||||
logic_input_t m_A;
|
||||
logic_input_t m_B;
|
||||
logic_input_t m_CLRQ;
|
||||
logic_input_t m_CLK;
|
||||
|
||||
state_var<unsigned> m_cnt;
|
||||
state_var<unsigned> m_last_CLK;
|
||||
|
||||
object_array_t<logic_output_t, 8> m_Q;
|
||||
};
|
||||
|
||||
NETLIB_OBJECT_DERIVED(74164_dip, 74164)
|
||||
{
|
||||
NETLIB_CONSTRUCTOR_DERIVED(74164_dip, 74164)
|
||||
{
|
||||
register_subalias("1", m_A);
|
||||
register_subalias("2", m_B);
|
||||
register_subalias("3", m_Q[0]);
|
||||
register_subalias("4", m_Q[1]);
|
||||
register_subalias("5", m_Q[2]);
|
||||
register_subalias("6", m_Q[3]);
|
||||
|
||||
register_subalias("8", m_CLK);
|
||||
register_subalias("9", m_CLRQ);
|
||||
register_subalias("10", m_Q[4]);
|
||||
register_subalias("11", m_Q[5]);
|
||||
register_subalias("12", m_Q[6]);
|
||||
register_subalias("13", m_Q[7]);
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
NETLIB_RESET(74164)
|
||||
{
|
||||
m_cnt = 0;
|
||||
m_last_CLK = 0;
|
||||
}
|
||||
|
||||
NETLIB_UPDATE(74164)
|
||||
{
|
||||
if (!m_CLRQ())
|
||||
{
|
||||
m_cnt = 0;
|
||||
}
|
||||
else if (m_CLK() && !m_last_CLK)
|
||||
{
|
||||
m_cnt = (m_cnt << 1) & 0xfe;
|
||||
if (m_A() && m_B())
|
||||
{
|
||||
m_cnt |= 0x01;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_cnt &= 0xfe;
|
||||
}
|
||||
}
|
||||
|
||||
m_last_CLK = m_CLK();
|
||||
|
||||
for (std::size_t i=0; i<8; i++)
|
||||
{
|
||||
m_Q[i].push((m_cnt >> i) & 1, NLTIME_FROM_NS(30));
|
||||
}
|
||||
}
|
||||
|
||||
NETLIB_DEVICE_IMPL(74164)
|
||||
NETLIB_DEVICE_IMPL(74164_dip)
|
||||
|
||||
} //namespace devices
|
||||
} // namespace netlist
|
57
src/lib/netlist/devices/nld_74164.h
Normal file
57
src/lib/netlist/devices/nld_74164.h
Normal file
@ -0,0 +1,57 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Joakim Larsson Edstrom
|
||||
/*****************************************************************************
|
||||
|
||||
5/74164 8-bit parallel-out serial shift registers
|
||||
|
||||
***********************************************************************
|
||||
|
||||
Connection Diagram:
|
||||
___ ___
|
||||
A 1 |* u | 14 Vcc
|
||||
B 2 | | 13 QH
|
||||
QA 3 | | 12 QG
|
||||
QB 4 | | 11 QF
|
||||
QC 5 | | 10 QE
|
||||
QD 6 | | 9 *Clear
|
||||
GND 7 |_______| 8 Clock
|
||||
|
||||
***********************************************************************
|
||||
Function Table:
|
||||
+-------------------------+----------------+
|
||||
| Inputs | Qutputs* |
|
||||
+-------+-------+---------+----------------+
|
||||
| Clear | Clock | A B | QA QB ... QH |
|
||||
+-------+-------+---------+----------------+
|
||||
| L | X | X X | L L L |
|
||||
| H | L | X X | QA0 QB0 QH0 |
|
||||
| H | ^ | H H | H QAn QGn |
|
||||
| H | ^ | L X | L QAn QGn |
|
||||
| H | ^ | X L | L QAn QGn |
|
||||
+-------+-------+---------+----------------+
|
||||
|
||||
H = High Level (steady state)
|
||||
L = Low Level (steady state)
|
||||
X = Don't Care
|
||||
^ = Transition from low to high level
|
||||
QA0, QB0 ... QH0 = The level of QA, QB ... QH before the indicated steady-state input conditions were established.
|
||||
QAn, QGn = The level of QA or QG before the most recent ^ transition of the clock; indicates a 1 bit shift.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef NLD_74164_H_
|
||||
#define NLD_74164_H_
|
||||
|
||||
#include "../nl_setup.h"
|
||||
|
||||
#define TTL_74164(name, cA, cB, cCLRQ, cCLK) \
|
||||
NET_REGISTER_DEV(TTL_74164, name) \
|
||||
NET_CONNECT(name, A, cA) \
|
||||
NET_CONNECT(name, B, cB) \
|
||||
NET_CONNECT(name, CLRQ, cCLRQ) \
|
||||
NET_CONNECT(name, CLK, cCLK)
|
||||
|
||||
#define TTL_74164_DIP(name) \
|
||||
NET_REGISTER_DEV(TTL_74164_DIP, name)
|
||||
|
||||
#endif /* NLD_74164_H_ */
|
Loading…
Reference in New Issue
Block a user