mirror of
https://github.com/holub/mame
synced 2025-10-04 08:28:39 +03:00
Added CD4020 device.
This commit is contained in:
parent
11a4fd5a2d
commit
8680c7905d
3
.gitattributes
vendored
3
.gitattributes
vendored
@ -2937,6 +2937,8 @@ src/emu/netlist/analog/nld_twoterm.c svneol=native#text/plain
|
||||
src/emu/netlist/analog/nld_twoterm.h svneol=native#text/plain
|
||||
src/emu/netlist/devices/net_lib.c svneol=native#text/plain
|
||||
src/emu/netlist/devices/net_lib.h svneol=native#text/plain
|
||||
src/emu/netlist/devices/nld_4020.c svneol=native#text/plain
|
||||
src/emu/netlist/devices/nld_4020.h svneol=native#text/plain
|
||||
src/emu/netlist/devices/nld_4066.c svneol=native#text/plain
|
||||
src/emu/netlist/devices/nld_4066.h svneol=native#text/plain
|
||||
src/emu/netlist/devices/nld_7400.c svneol=native#text/plain
|
||||
@ -2987,6 +2989,7 @@ src/emu/netlist/devices/nld_74ls629.c svneol=native#text/plain
|
||||
src/emu/netlist/devices/nld_74ls629.h svneol=native#text/plain
|
||||
src/emu/netlist/devices/nld_9316.c svneol=native#text/plain
|
||||
src/emu/netlist/devices/nld_9316.h svneol=native#text/plain
|
||||
src/emu/netlist/devices/nld_cmos.h svneol=native#text/plain
|
||||
src/emu/netlist/devices/nld_legacy.c svneol=native#text/plain
|
||||
src/emu/netlist/devices/nld_legacy.h svneol=native#text/plain
|
||||
src/emu/netlist/devices/nld_log.c svneol=native#text/plain
|
||||
|
@ -101,6 +101,8 @@ void netlist_factory_t::initialize()
|
||||
ENTRY(gnd, GND, "-")
|
||||
ENTRY(switch2, SWITCH2, "-")
|
||||
ENTRY(nicRSFF, NETDEV_RSFF, "+S,R")
|
||||
ENTRY(4020, CD_4020, "+IP,RESET,VDD,VSS")
|
||||
//ENTRY(4066, CD_4066, "+A,B")
|
||||
ENTRY(7400, TTL_7400_NAND, "+A,B")
|
||||
ENTRY(7402, TTL_7402_NOR, "+A,B")
|
||||
ENTRY(7404, TTL_7404_INVERT, "+A")
|
||||
@ -127,6 +129,7 @@ void netlist_factory_t::initialize()
|
||||
ENTRY(SN74LS629, SN74LS629, "CAP")
|
||||
ENTRY(9316, TTL_9316, "+CLK,ENP,ENT,CLRQ,LOADQ,A,B,C,D")
|
||||
ENTRY(NE555, NE555, "-")
|
||||
ENTRY(4020_dip, CD_4020_DIP, "-")
|
||||
ENTRY(4066_dip, CD_4066_DIP, "-")
|
||||
ENTRY(7400_dip, TTL_7400_DIP, "-")
|
||||
ENTRY(7402_dip, TTL_7402_DIP, "-")
|
||||
|
@ -54,6 +54,7 @@
|
||||
#include "nld_signal.h"
|
||||
#include "nld_system.h"
|
||||
|
||||
#include "nld_4020.h"
|
||||
#include "nld_4066.h"
|
||||
#include "nld_7400.h"
|
||||
#include "nld_7402.h"
|
||||
|
137
src/emu/netlist/devices/nld_4020.c
Normal file
137
src/emu/netlist/devices/nld_4020.c
Normal file
@ -0,0 +1,137 @@
|
||||
/*
|
||||
* nld_4020.c
|
||||
*
|
||||
*/
|
||||
|
||||
#include "nld_4020.h"
|
||||
|
||||
NETLIB_START(4020)
|
||||
{
|
||||
register_sub(sub, "sub");
|
||||
|
||||
register_input("RESET", m_RESET);
|
||||
register_subalias("IP", sub.m_IP);
|
||||
register_subalias("Q1", sub.m_Q[0]);
|
||||
register_subalias("Q4", sub.m_Q[3]);
|
||||
register_subalias("Q5", sub.m_Q[4]);
|
||||
register_subalias("Q6", sub.m_Q[5]);
|
||||
register_subalias("Q7", sub.m_Q[6]);
|
||||
register_subalias("Q8", sub.m_Q[7]);
|
||||
register_subalias("Q9", sub.m_Q[8]);
|
||||
register_subalias("Q10", sub.m_Q[9]);
|
||||
register_subalias("Q11", sub.m_Q[10]);
|
||||
register_subalias("Q12", sub.m_Q[11]);
|
||||
register_subalias("Q13", sub.m_Q[12]);
|
||||
register_subalias("Q14", sub.m_Q[13]);
|
||||
register_subalias("VDD", m_supply.m_vdd);
|
||||
register_subalias("VSS", m_supply.m_vss);
|
||||
}
|
||||
|
||||
NETLIB_RESET(4020)
|
||||
{
|
||||
sub.do_reset();
|
||||
}
|
||||
|
||||
|
||||
NETLIB_START(4020_sub)
|
||||
{
|
||||
register_input("IP", m_IP);
|
||||
|
||||
register_output("Q1", m_Q[0]);
|
||||
register_output("Q4", m_Q[3]);
|
||||
register_output("Q5", m_Q[4]);
|
||||
register_output("Q6", m_Q[5]);
|
||||
register_output("Q7", m_Q[6]);
|
||||
register_output("Q8", m_Q[8]);
|
||||
register_output("Q9", m_Q[8]);
|
||||
register_output("Q10", m_Q[9]);
|
||||
register_output("Q11", m_Q[10]);
|
||||
register_output("Q12", m_Q[11]);
|
||||
register_output("Q13", m_Q[12]);
|
||||
register_output("Q14", m_Q[13]);
|
||||
|
||||
save(NAME(m_cnt));
|
||||
}
|
||||
|
||||
NETLIB_RESET(4020_sub)
|
||||
{
|
||||
m_IP.set_state(netlist_input_t::STATE_INP_HL);
|
||||
m_cnt = 0;
|
||||
}
|
||||
|
||||
NETLIB_UPDATE(4020_sub)
|
||||
{
|
||||
UINT8 cnt = m_cnt;
|
||||
cnt = ( cnt + 1) & 0x3fff;
|
||||
update_outputs(cnt);
|
||||
m_cnt = cnt;
|
||||
}
|
||||
|
||||
NETLIB_UPDATE(4020)
|
||||
{
|
||||
|
||||
if (INPLOGIC(m_RESET))
|
||||
{
|
||||
sub.m_cnt = 0;
|
||||
static const netlist_time reset_time = netlist_time::from_nsec(140);
|
||||
OUTLOGIC(sub.m_Q[0], 0, reset_time);
|
||||
for (int i=3; i<14; i++)
|
||||
OUTLOGIC(sub.m_Q[i], 0, reset_time);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
inline NETLIB_FUNC_VOID(4020_sub, update_outputs, (const UINT16 cnt))
|
||||
{
|
||||
const netlist_time out_delayQ1 = netlist_time::from_nsec(180);
|
||||
const netlist_time out_delayQn = netlist_time::from_nsec(100);
|
||||
|
||||
OUTLOGIC(m_Q[0], 0, out_delayQ1);
|
||||
for (int i=3; i<14; i++)
|
||||
OUTLOGIC(m_Q[i], (cnt >> i) & 1, out_delayQn);
|
||||
}
|
||||
|
||||
NETLIB_START(4020_dip)
|
||||
{
|
||||
NETLIB_NAME(4020)::start();
|
||||
|
||||
/* +--------------+
|
||||
* Q12 |1 ++ 16| VDD
|
||||
* Q13 |2 15| Q11
|
||||
* Q14 |3 14| Q10
|
||||
* Q6 |4 4020 13| Q8
|
||||
* Q5 |5 12| Q9
|
||||
* Q7 |6 11| RESET
|
||||
* Q4 |7 10| IP (Input pulses)
|
||||
* VSS |8 9| Q1
|
||||
* +--------------+
|
||||
*/
|
||||
|
||||
register_subalias("1", sub.m_Q[11]);
|
||||
register_subalias("2", sub.m_Q[12]);
|
||||
register_subalias("3", sub.m_Q[13]);
|
||||
register_subalias("4", sub.m_Q[5]);
|
||||
register_subalias("5", sub.m_Q[4]);
|
||||
register_subalias("6", sub.m_Q[6]);
|
||||
register_subalias("7", sub.m_Q[3]);
|
||||
register_subalias("8", m_supply.m_vss);
|
||||
|
||||
register_subalias("9", sub.m_Q[1]);
|
||||
register_subalias("10", sub.m_IP);
|
||||
register_subalias("11", m_RESET);
|
||||
register_subalias("12", sub.m_Q[8]);
|
||||
register_subalias("13", sub.m_Q[7]);
|
||||
register_subalias("14", sub.m_Q[9]);
|
||||
register_subalias("15", sub.m_Q[10]);
|
||||
register_subalias("16", m_supply.m_vdd);
|
||||
}
|
||||
|
||||
NETLIB_UPDATE(4020_dip)
|
||||
{
|
||||
NETLIB_NAME(4020)::update();
|
||||
}
|
||||
|
||||
NETLIB_RESET(4020_dip)
|
||||
{
|
||||
NETLIB_NAME(4020)::reset();
|
||||
}
|
62
src/emu/netlist/devices/nld_4020.h
Normal file
62
src/emu/netlist/devices/nld_4020.h
Normal file
@ -0,0 +1,62 @@
|
||||
// license:GPL-2.0+
|
||||
// copyright-holders:Couriersud
|
||||
/*
|
||||
* nld_4020.h
|
||||
*
|
||||
* CD4020: CMOS Ripple-Carry Binary Counters/Dividers
|
||||
*
|
||||
* +--------------+
|
||||
* Q12 |1 ++ 16| VDD
|
||||
* Q13 |2 15| Q11
|
||||
* Q14 |3 14| Q10
|
||||
* Q6 |4 4020 13| Q8
|
||||
* Q5 |5 12| Q9
|
||||
* Q7 |6 11| RESET
|
||||
* Q4 |7 10| IP (Input pulses)
|
||||
* VSS |8 9| Q1
|
||||
* +--------------+
|
||||
*
|
||||
*
|
||||
* Naming conventions follow Texas Instruments datasheet
|
||||
*
|
||||
* FIXME: Timing depends on VDD-VSS
|
||||
* This needs a cmos d-a/a-d proxy implementation.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef NLD_4020_H_
|
||||
#define NLD_4020_H_
|
||||
|
||||
#include "../nl_base.h"
|
||||
#include "nld_cmos.h"
|
||||
|
||||
#define CD_4020(_name, _IP, _RESET, _VDD, _VSS) \
|
||||
NET_REGISTER_DEV(4020, _name) \
|
||||
NET_CONNECT(_name, IP, _IP) \
|
||||
NET_CONNECT(_name, RESET, _RESET) \
|
||||
NET_CONNECT(_name, VDD, _VDD) \
|
||||
NET_CONNECT(_name, VSS, _VSS)
|
||||
|
||||
#define CD_4020_DIP(_name) \
|
||||
NET_REGISTER_DEV(4020_dip, _name)
|
||||
|
||||
NETLIB_SUBDEVICE(4020_sub,
|
||||
ATTR_HOT void update_outputs(const UINT16 cnt);
|
||||
|
||||
netlist_ttl_input_t m_IP;
|
||||
|
||||
netlist_state_t<UINT16> m_cnt;
|
||||
|
||||
netlist_ttl_output_t m_Q[14];
|
||||
);
|
||||
|
||||
NETLIB_DEVICE(4020,
|
||||
NETLIB_NAME(4020_sub) sub;
|
||||
NETLIB_NAME(vdd_vss) m_supply;
|
||||
netlist_ttl_input_t m_RESET;
|
||||
);
|
||||
|
||||
NETLIB_DEVICE_DERIVED(4020_dip, 4020,
|
||||
);
|
||||
|
||||
#endif /* NLD_4020_H_ */
|
@ -5,17 +5,6 @@
|
||||
|
||||
#include "nld_4066.h"
|
||||
|
||||
NETLIB_START(vdd_vss)
|
||||
{
|
||||
}
|
||||
|
||||
NETLIB_RESET(vdd_vss)
|
||||
{
|
||||
}
|
||||
|
||||
NETLIB_UPDATE(vdd_vss)
|
||||
{
|
||||
}
|
||||
|
||||
NETLIB_START(4066)
|
||||
{
|
||||
|
@ -25,20 +25,11 @@
|
||||
#define NLD_4066_H_
|
||||
|
||||
#include "../nl_base.h"
|
||||
#include "../analog/nld_twoterm.h"
|
||||
#include "nld_cmos.h"
|
||||
|
||||
#define CD_4066_DIP(_name) \
|
||||
NET_REGISTER_DEV(4066_dip, _name)
|
||||
|
||||
NETLIB_SUBDEVICE(vdd_vss,
|
||||
netlist_analog_input_t m_vdd;
|
||||
netlist_analog_input_t m_vss;
|
||||
|
||||
public:
|
||||
ATTR_HOT inline double vdd() { return INPANALOG(m_vdd); }
|
||||
ATTR_HOT inline double vss() { return INPANALOG(m_vss); }
|
||||
);
|
||||
|
||||
NETLIB_SUBDEVICE(4066,
|
||||
public:
|
||||
|
||||
|
32
src/emu/netlist/devices/nld_cmos.h
Normal file
32
src/emu/netlist/devices/nld_cmos.h
Normal file
@ -0,0 +1,32 @@
|
||||
/*
|
||||
* nld_cmos.h
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef NLD_CMOS_H_
|
||||
#define NLD_CMOS_H_
|
||||
|
||||
#include "../nl_base.h"
|
||||
#include "../analog/nld_twoterm.h"
|
||||
|
||||
class nld_vdd_vss : public netlist_device_t
|
||||
{
|
||||
public:
|
||||
nld_vdd_vss ()
|
||||
: netlist_device_t()
|
||||
{ }
|
||||
|
||||
netlist_analog_input_t m_vdd;
|
||||
netlist_analog_input_t m_vss;
|
||||
|
||||
protected:
|
||||
ATTR_HOT void update() {};
|
||||
ATTR_HOT void start() {};
|
||||
ATTR_HOT void reset() {};
|
||||
|
||||
public:
|
||||
ATTR_HOT inline double vdd() { return INPANALOG(m_vdd); }
|
||||
ATTR_HOT inline double vss() { return INPANALOG(m_vss); }
|
||||
};
|
||||
|
||||
#endif /* NLD_CMOS_H_ */
|
@ -33,6 +33,7 @@ NETLISTOBJS+= \
|
||||
$(NETLISTOBJ)/analog/nld_solver.o \
|
||||
$(NETLISTOBJ)/analog/nld_switches.o \
|
||||
$(NETLISTOBJ)/analog/nld_twoterm.o \
|
||||
$(NETLISTOBJ)/devices/nld_4020.o \
|
||||
$(NETLISTOBJ)/devices/nld_4066.o \
|
||||
$(NETLISTOBJ)/devices/nld_7400.o \
|
||||
$(NETLISTOBJ)/devices/nld_7402.o \
|
||||
|
Loading…
Reference in New Issue
Block a user