diff options
Diffstat (limited to 'src/lib/netlist/devices/nld_82S16.cpp')
-rw-r--r-- | src/lib/netlist/devices/nld_82S16.cpp | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/src/lib/netlist/devices/nld_82S16.cpp b/src/lib/netlist/devices/nld_82S16.cpp deleted file mode 100644 index cce10063061..00000000000 --- a/src/lib/netlist/devices/nld_82S16.cpp +++ /dev/null @@ -1,143 +0,0 @@ -// license:GPL-2.0+ -// copyright-holders:Couriersud -/* - * nld_82S16.c - * - */ - -#include "nld_82S16.h" -#include "netlist/nl_base.h" -#include "nlid_system.h" - -namespace netlist -{ - namespace devices - { - NETLIB_OBJECT(82S16) - { - NETLIB_CONSTRUCTOR(82S16) - , m_A(*this, {{"A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7" }}, NETLIB_DELEGATE(82S16, addr)) - , m_CE1Q(*this, "CE1Q", NETLIB_DELEGATE(82S16, enq)) - , m_CE2Q(*this, "CE2Q", NETLIB_DELEGATE(82S16, enq)) - , m_CE3Q(*this, "CE3Q", NETLIB_DELEGATE(82S16, enq)) - , m_WEQ(*this, "WEQ") - , m_DIN(*this, "DIN") - , m_DOUTQ(*this, "DOUTQ") - , m_ram(*this, "m_ram", 0) - , m_addr(*this, "m_addr", 0) - , m_enq(*this, "m_enq", 0) - , m_power_pins(*this) - { - } - - NETLIB_RESETI(); - NETLIB_UPDATEI(); - NETLIB_HANDLERI(addr) - { - uint8_t adr = 0; - for (std::size_t i=0; i<8; i++) - { - //m_A[i].activate(); - adr |= (m_A[i]() << i); - } - m_addr = adr; - NETLIB_NAME(82S16)::update(); - } - NETLIB_HANDLERI(enq) - { - const auto last = m_enq; - m_enq = m_CE1Q() || m_CE2Q() || m_CE3Q(); - if (!last && m_enq) - { - // FIXME: Outputs are tristate. This needs to be properly implemented - m_DOUTQ.push(1, NLTIME_FROM_NS(20)); - for (std::size_t i=0; i<8; i++) - m_A[i].inactivate(); - m_WEQ.inactivate(); - m_DIN.inactivate(); - } - else if (last && !m_enq) - { - for (std::size_t i=0; i<8; i++) - m_A[i].activate(); - m_WEQ.activate(); - m_DIN.activate(); - NETLIB_NAME(82S16)::update(); - } - } - - - protected: - object_array_t<logic_input_t, 8> m_A; - logic_input_t m_CE1Q; - logic_input_t m_CE2Q; - logic_input_t m_CE3Q; - logic_input_t m_WEQ; - logic_input_t m_DIN; - logic_output_t m_DOUTQ; - - state_array<uint64_t, 4> m_ram; // 256 bits - state_var_u8 m_addr; // 256 bits - state_var_sig m_enq; - nld_power_pins m_power_pins; - }; - - NETLIB_OBJECT_DERIVED(82S16_dip, 82S16) - { - NETLIB_CONSTRUCTOR_DERIVED(82S16_dip, 82S16) - { - register_subalias("2", m_A[0]); - register_subalias("1", m_A[1]); - register_subalias("15", m_A[2]); - register_subalias("14", m_A[3]); - register_subalias("7", m_A[4]); - register_subalias("9", m_A[5]); - register_subalias("10", m_A[6]); - register_subalias("11", m_A[7]); - - register_subalias("3", m_CE1Q); - register_subalias("4", m_CE2Q); - register_subalias("5", m_CE3Q); - - register_subalias("12", m_WEQ); - register_subalias("13", m_DIN); - - register_subalias("6", m_DOUTQ); - - register_subalias("8", "GND"); - register_subalias("16", "VCC"); - } - }; - - // FIXME: timing! - // FIXME: optimize device (separate address decoder!) - NETLIB_UPDATE(82S16) - { - if (!m_enq) - { - const auto adr(m_addr); - if (!m_WEQ()) - { - m_ram[adr >> 6] = (m_ram[adr >> 6] - & ~(static_cast<uint64_t>(1) << (adr & 0x3f))) - | (static_cast<uint64_t>(m_DIN()) << (adr & 0x3f)); - } - m_DOUTQ.push(((m_ram[adr >> 6] >> (adr & 0x3f)) & 1) ^ 1, NLTIME_FROM_NS(20)); - } - } - - NETLIB_RESET(82S16) - { - for (std::size_t i=0; i<4; i++) - { - m_ram[i] = 0; - } - m_addr = 0; - m_enq = 0; - } - - NETLIB_DEVICE_IMPL(82S16, "TTL_82S16", "") - NETLIB_DEVICE_IMPL(82S16_dip, "TTL_82S16_DIP", "") - - } //namespace devices -} // namespace netlist |