mirror of
https://github.com/holub/mame
synced 2025-04-19 15:11:37 +03:00
netlist: Added CD4017/4022 devices.
* Also contains squashed clang signedness fixes
This commit is contained in:
parent
2719654114
commit
9414a219a9
@ -138,6 +138,8 @@ project "netlist"
|
||||
MAME_DIR .. "src/lib/netlist/devices/nld_4006.h",
|
||||
MAME_DIR .. "src/lib/netlist/devices/nld_4013.cpp",
|
||||
MAME_DIR .. "src/lib/netlist/devices/nld_4013.h",
|
||||
MAME_DIR .. "src/lib/netlist/devices/nld_4017.cpp",
|
||||
MAME_DIR .. "src/lib/netlist/devices/nld_4017.h",
|
||||
MAME_DIR .. "src/lib/netlist/devices/nld_4020.cpp",
|
||||
MAME_DIR .. "src/lib/netlist/devices/nld_4020.h",
|
||||
MAME_DIR .. "src/lib/netlist/devices/nld_4053.cpp",
|
||||
|
@ -154,6 +154,7 @@ NLOBJS := \
|
||||
$(NLOBJ)/devices/nld_tms4800.o \
|
||||
$(NLOBJ)/devices/nld_4006.o \
|
||||
$(NLOBJ)/devices/nld_4013.o \
|
||||
$(NLOBJ)/devices/nld_4017.o \
|
||||
$(NLOBJ)/devices/nld_4020.o \
|
||||
$(NLOBJ)/devices/nld_4053.o \
|
||||
$(NLOBJ)/devices/nld_4066.o \
|
||||
|
@ -142,6 +142,8 @@ namespace devices
|
||||
// FIXME: duplicate?
|
||||
LIB_ENTRY(CD4006)
|
||||
LIB_ENTRY(CD4006_dip)
|
||||
LIB_ENTRY(CD4017)
|
||||
LIB_ENTRY(CD4022)
|
||||
LIB_ENTRY(CD4020_WI)
|
||||
LIB_ENTRY(CD4020)
|
||||
LIB_ENTRY(CD4024)
|
||||
|
@ -48,6 +48,7 @@ NETLIST_EXTERNAL(ROMS_lib)
|
||||
#include "nld_2102A.h"
|
||||
#include "nld_4006.h"
|
||||
#include "nld_4013.h"
|
||||
#include "nld_4017.h"
|
||||
#include "nld_4020.h"
|
||||
#include "nld_4053.h"
|
||||
#include "nld_4066.h"
|
||||
|
86
src/lib/netlist/devices/nld_4017.cpp
Normal file
86
src/lib/netlist/devices/nld_4017.cpp
Normal file
@ -0,0 +1,86 @@
|
||||
// license:GPL-2.0+
|
||||
// copyright-holders:Couriersud
|
||||
/*
|
||||
* nld_4017.c
|
||||
*
|
||||
*/
|
||||
|
||||
#include "nld_4017.h"
|
||||
#include "nl_base.h"
|
||||
#include "nl_factory.h"
|
||||
|
||||
namespace netlist
|
||||
{
|
||||
namespace devices
|
||||
{
|
||||
|
||||
template <std::size_t _MaxCount>
|
||||
NETLIB_OBJECT(CD4017_base)
|
||||
{
|
||||
NETLIB_CONSTRUCTOR_MODEL(CD4017_base, "CD4XXX")
|
||||
, m_CLK(*this, "CLK", NETLIB_DELEGATE(clk))
|
||||
, m_CLKEN(*this, "CLKEN", NETLIB_DELEGATE(inputs))
|
||||
, m_RESET(*this, "RESET", NETLIB_DELEGATE(inputs))
|
||||
, m_CO(*this, "CO")
|
||||
, m_Q(*this, 0, "Q{}")
|
||||
, m_cnt(*this, "m_cnt", 0)
|
||||
, m_supply(*this)
|
||||
{
|
||||
}
|
||||
|
||||
NETLIB_RESETI()
|
||||
{
|
||||
m_CLK.set_state(logic_t::STATE_INP_LH);
|
||||
m_cnt = 0;
|
||||
}
|
||||
|
||||
NETLIB_HANDLERI(clk)
|
||||
{
|
||||
++m_cnt;
|
||||
update_outputs(m_cnt);
|
||||
}
|
||||
|
||||
NETLIB_HANDLERI(inputs)
|
||||
{
|
||||
if (m_RESET())
|
||||
{
|
||||
m_CLK.inactivate();
|
||||
m_cnt = 0;
|
||||
update_outputs(m_cnt);
|
||||
}
|
||||
else if (m_CLKEN())
|
||||
{
|
||||
m_CLK.inactivate();
|
||||
}
|
||||
else
|
||||
{
|
||||
m_CLK.activate_lh();
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
void update_outputs(const unsigned cnt) noexcept
|
||||
{
|
||||
for (std::size_t i = 0; i < _MaxCount; i++)
|
||||
m_Q[i].push(i == cnt, NLTIME_FROM_NS(200));
|
||||
m_CO.push(cnt < _MaxCount / 2, NLTIME_FROM_NS(160));
|
||||
}
|
||||
logic_input_t m_CLK;
|
||||
logic_input_t m_CLKEN;
|
||||
logic_input_t m_RESET;
|
||||
logic_output_t m_CO;
|
||||
object_array_t<logic_output_t, _MaxCount> m_Q;
|
||||
|
||||
state_var<unsigned> m_cnt;
|
||||
nld_power_pins m_supply;
|
||||
};
|
||||
|
||||
using NETLIB_NAME(CD4017) = NETLIB_NAME(CD4017_base)<10>;
|
||||
using NETLIB_NAME(CD4022) = NETLIB_NAME(CD4017_base)<8>;
|
||||
|
||||
|
||||
NETLIB_DEVICE_IMPL(CD4017, "CD4017", "")
|
||||
NETLIB_DEVICE_IMPL(CD4022, "CD4022", "")
|
||||
|
||||
} //namespace devices
|
||||
} // namespace netlist
|
51
src/lib/netlist/devices/nld_4017.h
Normal file
51
src/lib/netlist/devices/nld_4017.h
Normal file
@ -0,0 +1,51 @@
|
||||
// license:GPL-2.0+
|
||||
// copyright-holders:Couriersud
|
||||
/*
|
||||
* nld_4017.h
|
||||
*
|
||||
* CD4017: Decade Counter/Divider with 10 Decoded Outputs
|
||||
*
|
||||
* +--------------+
|
||||
* Q5 |1 ++ 16| VDD
|
||||
* Q1 |2 15| RESET
|
||||
* Q0 |3 14| CLOCK
|
||||
* Q2 |4 4017 13| CLOCK ENABLE
|
||||
* Q6 |5 12| CARRY OUT
|
||||
* Q7 |6 11| Q9
|
||||
* Q3 |7 10| Q4
|
||||
* VSS |8 9| Q8
|
||||
* +--------------+
|
||||
*
|
||||
*
|
||||
* CD4022: Divide-by-8 Counter/Divider with 8 Decoded Outputs
|
||||
*
|
||||
* +--------------+
|
||||
* Q1 |1 ++ 16| VDD
|
||||
* Q0 |2 15| RESET
|
||||
* Q2 |3 14| CLOCK
|
||||
* Q5 |4 4022 13| CLOCK ENABLE
|
||||
* Q6 |5 12| CARRY OUT
|
||||
* NC |6 11| Q4
|
||||
* Q3 |7 10| Q7
|
||||
* VSS |8 9| NC
|
||||
* +--------------+
|
||||
*
|
||||
* Naming conventions follow Fairchild datasheet
|
||||
*
|
||||
* FIXME: Timing depends on VDD-VSS
|
||||
* This needs a cmos d-a/a-d proxy implementation.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef NLD_4017_H_
|
||||
#define NLD_4017_H_
|
||||
|
||||
#include "netlist/nl_setup.h"
|
||||
|
||||
#define CD4017(name) \
|
||||
NET_REGISTER_DEV(CD4017, name)
|
||||
|
||||
#define CD4022(name) \
|
||||
NET_REGISTER_DEV(CD4022, name)
|
||||
|
||||
#endif /* NLD_4017_H_ */
|
@ -684,6 +684,17 @@
|
||||
#define CD4006_DIP(...) \
|
||||
NET_REGISTER_DEVEXT(CD4006_DIP, __VA_ARGS__)
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Source: src/lib/netlist/devices/nld_4017.cpp
|
||||
// ---------------------------------------------------------------------
|
||||
// usage : CD4017(name)
|
||||
#define CD4017(...) \
|
||||
NET_REGISTER_DEVEXT(CD4017, __VA_ARGS__)
|
||||
|
||||
// usage : CD4022(name)
|
||||
#define CD4022(...) \
|
||||
NET_REGISTER_DEVEXT(CD4022, __VA_ARGS__)
|
||||
|
||||
// ---------------------------------------------------------------------
|
||||
// Source: src/lib/netlist/devices/nld_4020.cpp
|
||||
// ---------------------------------------------------------------------
|
||||
@ -1264,6 +1275,14 @@
|
||||
#define CD4013_DIP(...) \
|
||||
NET_REGISTER_DEVEXT(CD4013_DIP, __VA_ARGS__)
|
||||
|
||||
// usage : CD4017_DIP(name)
|
||||
#define CD4017_DIP(...) \
|
||||
NET_REGISTER_DEVEXT(CD4017_DIP, __VA_ARGS__)
|
||||
|
||||
// usage : CD4022_DIP(name)
|
||||
#define CD4022_DIP(...) \
|
||||
NET_REGISTER_DEVEXT(CD4022_DIP, __VA_ARGS__)
|
||||
|
||||
// usage : CD4020_DIP(name)
|
||||
#define CD4020_DIP(...) \
|
||||
NET_REGISTER_DEVEXT(CD4020_DIP, __VA_ARGS__)
|
||||
|
@ -113,6 +113,68 @@ static NETLIST_START(CD4013_DIP)
|
||||
)
|
||||
NETLIST_END()
|
||||
|
||||
/*
|
||||
* CD4017: Decade Counter/Divider with 10 Decoded Outputs
|
||||
*
|
||||
* +--------------+
|
||||
* Q5 |1 ++ 16| VDD
|
||||
* Q1 |2 15| RESET
|
||||
* Q0 |3 14| CLOCK
|
||||
* Q2 |4 4017 13| CLOCK ENABLE
|
||||
* Q6 |5 12| CARRY OUT
|
||||
* Q7 |6 11| Q9
|
||||
* Q3 |7 10| Q4
|
||||
* VSS |8 9| Q8
|
||||
* +--------------+
|
||||
*
|
||||
*
|
||||
* CD4022: Divide-by-8 Counter/Divider with 8 Decoded Outputs
|
||||
*
|
||||
* +--------------+
|
||||
* Q1 |1 ++ 16| VDD
|
||||
* Q0 |2 15| RESET
|
||||
* Q2 |3 14| CLOCK
|
||||
* Q5 |4 4022 13| CLOCK ENABLE
|
||||
* Q6 |5 12| CARRY OUT
|
||||
* NC |6 11| Q4
|
||||
* Q3 |7 10| Q7
|
||||
* VSS |8 9| NC
|
||||
* +--------------+
|
||||
*/
|
||||
|
||||
static NETLIST_START(CD4017_DIP)
|
||||
CD4017(A)
|
||||
|
||||
DIPPINS( /* +--------------+ */
|
||||
A.Q5, /* Q5 |1 ++ 16| VDD */ A.VDD,
|
||||
A.Q1, /* Q1 |2 15| RESET */ A.RESET,
|
||||
A.Q0, /* Q0 |3 14| CLOCK */ A.CLK,
|
||||
A.Q2, /* Q2 |4 4017 13| CLOCK ENABLE */ A.CLKEN,
|
||||
A.Q6, /* Q6 |5 12| CARRY OUT */ A.CO,
|
||||
A.Q7, /* Q7 |6 11| Q9 */ A.Q9,
|
||||
A.Q3, /* Q3 |7 10| Q4 */ A.Q4,
|
||||
A.VSS, /* VSS |8 9| Q8 */ A.Q8
|
||||
/* +--------------+ */
|
||||
)
|
||||
NETLIST_END()
|
||||
|
||||
static NETLIST_START(CD4022_DIP)
|
||||
CD4022(A)
|
||||
NC_PIN(NC)
|
||||
|
||||
DIPPINS( /* +--------------+ */
|
||||
A.Q1, /* Q1 |1 ++ 16| VDD */ A.VDD,
|
||||
A.Q0, /* Q0 |2 15| RESET */ A.RESET,
|
||||
A.Q2, /* Q2 |3 14| CLOCK */ A.CLK,
|
||||
A.Q5, /* Q5 |4 4022 13| CLOCK ENABLE */ A.CLKEN,
|
||||
A.Q6, /* Q6 |5 12| CARRY OUT */ A.CO,
|
||||
NC.I, /* NC |6 11| Q4 */ A.Q4,
|
||||
A.Q3, /* Q3 |7 10| Q7 */ A.Q7,
|
||||
A.VSS, /* VSS |8 9| NC */ NC.I
|
||||
/* +--------------+ */
|
||||
)
|
||||
NETLIST_END()
|
||||
|
||||
/* CD4020: 14-Stage Ripple Carry Binary Counters
|
||||
*
|
||||
* +--------------+
|
||||
@ -508,6 +570,8 @@ NETLIST_START(CD4XXX_lib)
|
||||
|
||||
/* DIP ONLY */
|
||||
LOCAL_LIB_ENTRY(CD4013_DIP)
|
||||
LOCAL_LIB_ENTRY(CD4017_DIP)
|
||||
LOCAL_LIB_ENTRY(CD4022_DIP)
|
||||
LOCAL_LIB_ENTRY(CD4020_DIP)
|
||||
LOCAL_LIB_ENTRY(CD4024_DIP)
|
||||
LOCAL_LIB_ENTRY(CD4053_DIP)
|
||||
|
@ -61,6 +61,12 @@
|
||||
#define CD4013_DIP(name) \
|
||||
NET_REGISTER_DEV(CD4013_DIP, name)
|
||||
|
||||
#define CD4017_DIP(name) \
|
||||
NET_REGISTER_DEV(CD4017_DIP, name)
|
||||
|
||||
#define CD4022_DIP(name) \
|
||||
NET_REGISTER_DEV(CD4022_DIP, name)
|
||||
|
||||
#define CD4020_DIP(name) \
|
||||
NET_REGISTER_DEV(CD4020_DIP, name)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user