-netlist: Added 2716 16 Kbit (2 Kbit x 8) UV EPROM. [Ryan Holtz]

This commit is contained in:
therealmogminer@gmail.com 2016-12-13 23:19:54 +01:00
parent 32d0f10418
commit e3e38025c3
6 changed files with 143 additions and 1 deletions

View File

@ -91,6 +91,8 @@ project "netlist"
MAME_DIR .. "src/lib/netlist/solver/nld_ms_w.h",
MAME_DIR .. "src/lib/netlist/solver/nld_ms_direct_lu.h",
MAME_DIR .. "src/lib/netlist/solver/vector_base.h",
MAME_DIR .. "src/lib/netlist/devices/nld_2716.cpp",
MAME_DIR .. "src/lib/netlist/devices/nld_2716.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_4066.cpp",

View File

@ -66,6 +66,7 @@ NLOBJS := \
$(NLOBJ)/analog/nld_switches.o \
$(NLOBJ)/analog/nld_twoterm.o \
$(NLOBJ)/analog/nld_opamps.o \
$(NLOBJ)/devices/nld_2716.o \
$(NLOBJ)/devices/nld_4020.o \
$(NLOBJ)/devices/nld_4066.o \
$(NLOBJ)/devices/nld_7448.o \

View File

@ -105,7 +105,8 @@ static void initialize_factory(factory_list_t &factory)
ENTRY(switch1, SWITCH, "-")
ENTRY(switch2, SWITCH2, "-")
ENTRYX(nicRSFF, NETDEV_RSFF, "+S,R")
ENTRYX(nicDelay, NETDEV_DELAY, "-")
ENTRYX(nicDelay, NETDEV_DELAY, "-")
ENTRYX(2716, EPROM_2716, "-")
ENTRYX(7450, TTL_7450_ANDORINVERT, "+A,B,C,D")
ENTRYX(7448, TTL_7448, "+A,B,C,D,LTQ,BIQ,RBIQ")
ENTRYX(7473, TTL_7473, "+CLK1,J1,K1,CLRQ1,CLK2,J2,K2,CLRQ2")
@ -139,6 +140,7 @@ static void initialize_factory(factory_list_t &factory)
//ENTRY(4066, CD_4066, "+A,B")
ENTRYX(NE555, NE555, "-")
ENTRYX(r2r_dac, R2R_DAC, "+VIN,R,N")
ENTRYX(2716_dip, EPROM_2716_DIP, "-")
ENTRYX(4538_dip, CD4538_DIP, "-")
ENTRYX(7448_dip, TTL_7448_DIP, "-")
ENTRYX(7450_dip, TTL_7450_DIP, "-")

View File

@ -14,6 +14,7 @@
#include "nl_base.h"
#include "nld_system.h"
#include "nld_2716.h"
#include "nld_4020.h"
#include "nld_4066.h"
#include "nld_7448.h"

View File

@ -0,0 +1,98 @@
// license:BSD-3-Clause
// copyright-holders:Ryan Holtz
/*
* nld_2716.cpp
*
*/
#include "nld_2716.h"
namespace netlist
{
namespace devices
{
NETLIB_OBJECT(2716)
{
NETLIB_CONSTRUCTOR(2716)
, m_A(*this, {{ "A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10" }})
, m_GQ(*this, "GQ")
, m_EPQ(*this, "EPQ")
, m_Q(*this, {{ "Q0", "Q1", "Q2", "Q3", "Q4", "Q5", "Q6", "Q7" }})
, m_last_EPQ(*this, "m_last_EPQ", 1)
, m_ROM(*this, "m_ROM", nullptr)
{
}
NETLIB_UPDATEI();
protected:
object_array_t<logic_input_t, 11> m_A;
logic_input_t m_GQ;
logic_input_t m_EPQ;
object_array_t<logic_output_t, 8> m_Q;
state_var<unsigned> m_last_EPQ;
param_rom_t m_ROM; // 16 Kbits, used as 2 Kbit x 8
};
NETLIB_OBJECT_DERIVED(2716_dip, 2716)
{
NETLIB_CONSTRUCTOR_DERIVED(2716_dip, 2716)
{
register_subalias("8", m_A[0]);
register_subalias("7", m_A[1]);
register_subalias("6", m_A[2]);
register_subalias("5", m_A[3]);
register_subalias("4", m_A[4]);
register_subalias("3", m_A[5]);
register_subalias("2", m_A[6]);
register_subalias("1", m_A[7]);
register_subalias("23", m_A[8]);
register_subalias("22", m_A[9]);
register_subalias("19", m_A[10]);
register_subalias("20", m_GQ);
register_subalias("18", m_EPQ);
register_subalias("9", m_Q[0]);
register_subalias("10", m_Q[1]);
register_subalias("11", m_Q[2]);
register_subalias("13", m_Q[3]);
register_subalias("14", m_Q[4]);
register_subalias("15", m_Q[5]);
register_subalias("16", m_Q[6]);
register_subalias("17", m_Q[7]);
}
};
// FIXME: timing!
NETLIB_UPDATE(2716)
{
unsigned q = 0xff;
netlist_time delay = NLTIME_FROM_NS(450);
if (!m_GQ() && !m_EPQ())
{
unsigned a = 0;
for (std::size_t i=0; i<11; i++)
a |= (m_A[i]() << i);
q = m_ROM()[a];
if (m_last_EPQ)
delay = NLTIME_FROM_NS(120);
}
m_last_EPQ = m_EPQ();
// FIXME: Outputs are tristate. This needs to be properly implemented
for (std::size_t i=0; i<8; i++)
m_Q[i].push((q >> i) & 1, delay);
}
NETLIB_DEVICE_IMPL(2716)
NETLIB_DEVICE_IMPL(2716_dip)
} //namespace devices
} // namespace netlist

View File

@ -0,0 +1,38 @@
// license:BSD-3-Clause
// copyright-holders:Ryan Holtz
/*
* nld_82S126.h
*
* 2716: 16 Kbit (2Kb x 8) UV EPROM
*
* +----------------+
* A7 |1 ++ 24| VCC
* A6 |2 23| A8
* A5 |3 22| A9
* A4 |4 2716 21| VPP
* A3 |5 20| GQ
* A2 |6 19| A10
* A1 |7 18| EPQ
* A0 |8 17| Q7
* Q0 |9 16| Q6
* Q1 |10 15| Q5
* Q2 |11 14| Q4
* VSS |12 13| Q3
* +----------------+
*
*
* Naming conventions follow STMicro datasheet
*
*/
#ifndef NLD_2716_H_
#define NLD_2716_H_
#include "nl_setup.h"
#define TTL_2716(name) \
NET_REGISTER_DEV(TTL_2716, name)
#define TTL_2716_DIP(name) \
NET_REGISTER_DEV(TTL_2716_DIP, name)
#endif /* NLD_2716_H_ */