From 96921ccac9eeb27cf699c52e7e9eb64cfcfb71da Mon Sep 17 00:00:00 2001 From: Ryan Holtz Date: Mon, 17 Aug 2020 16:24:46 +0200 Subject: [PATCH] -netlist: Properly fixed 74165 implementation. Fixed MK28000 address latching. --- src/lib/netlist/devices/nld_74165.cpp | 9 ++------- src/lib/netlist/devices/nld_roms.cpp | 15 ++++++--------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/src/lib/netlist/devices/nld_74165.cpp b/src/lib/netlist/devices/nld_74165.cpp index 3db58672418..c38c82731c4 100644 --- a/src/lib/netlist/devices/nld_74165.cpp +++ b/src/lib/netlist/devices/nld_74165.cpp @@ -56,7 +56,6 @@ namespace netlist NETLIB_HANDLERI(inputs) { { - netlist_sig_t old_qh = m_QH.net().Q(); netlist_sig_t qh = 0; if (!m_SH_LDQ()) @@ -65,12 +64,7 @@ namespace netlist for (std::size_t i=0; i<8; i++) m_shifter |= (m_DATA[i]() << i); } - else if (!m_CLK() || m_CLKINH()) - { - // FIXME: qh is overwritten below? - qh = old_qh; - } - else if (!m_last_CLK) + else if (m_CLK() && !m_last_CLK && !m_CLKINH()) { unsigned high_bit = m_SER() ? 0x80 : 0; m_shifter = high_bit | (m_shifter >> 1); @@ -81,6 +75,7 @@ namespace netlist m_last_CLK = m_CLK(); m_QH.push(qh, NLTIME_FROM_NS(20)); // FIXME: Timing + m_QHQ.push(1 - qh, NLTIME_FROM_NS(20)); // FIXME: Timing } } diff --git a/src/lib/netlist/devices/nld_roms.cpp b/src/lib/netlist/devices/nld_roms.cpp index fb55010f95f..d39324e226f 100644 --- a/src/lib/netlist/devices/nld_roms.cpp +++ b/src/lib/netlist/devices/nld_roms.cpp @@ -31,7 +31,7 @@ namespace netlist , m_enable_hi(*this, "m_enable_hi", false) , m_latched_rom(*this, "m_latched_rom", 0) , m_A(*this, 1, "A{}", NETLIB_DELEGATE(addr)) - , m_ARQ(*this, "ARQ", NETLIB_DELEGATE(arq)) + , m_ARQ(*this, "ARQ", NETLIB_DELEGATE(addr)) , m_OE1(*this, "OE1", NETLIB_DELEGATE(oe1)) , m_OE2(*this, "OE2", NETLIB_DELEGATE(oe2)) , m_O(*this, 1, "O{}", 0) @@ -41,14 +41,6 @@ namespace netlist } private: - inline NETLIB_HANDLERI(arq) - { - if (m_ARQ() == 0) - { - m_latched_rom = m_ROM[m_A()]; - } - } - inline NETLIB_HANDLERI(oe1) { m_enable_lo = m_OE1(); @@ -73,6 +65,11 @@ namespace netlist inline NETLIB_HANDLERI(addr) { + if (!m_ARQ()) + { + uint16_t addr = m_A(); + m_latched_rom = m_ROM[addr]; + } uint8_t o = (m_enable_hi || m_enable_lo) ? m_latched_rom : 0; for (std::size_t i=0; i<4; i++) {