-netlist: Properly fixed 74165 implementation. Fixed MK28000 address latching.

This commit is contained in:
Ryan Holtz 2020-08-17 16:24:46 +02:00
parent dd47a15e3a
commit 96921ccac9
2 changed files with 8 additions and 16 deletions

View File

@ -56,7 +56,6 @@ namespace netlist
NETLIB_HANDLERI(inputs) NETLIB_HANDLERI(inputs)
{ {
{ {
netlist_sig_t old_qh = m_QH.net().Q();
netlist_sig_t qh = 0; netlist_sig_t qh = 0;
if (!m_SH_LDQ()) if (!m_SH_LDQ())
@ -65,12 +64,7 @@ namespace netlist
for (std::size_t i=0; i<8; i++) for (std::size_t i=0; i<8; i++)
m_shifter |= (m_DATA[i]() << i); m_shifter |= (m_DATA[i]() << i);
} }
else if (!m_CLK() || m_CLKINH()) else if (m_CLK() && !m_last_CLK && !m_CLKINH())
{
// FIXME: qh is overwritten below?
qh = old_qh;
}
else if (!m_last_CLK)
{ {
unsigned high_bit = m_SER() ? 0x80 : 0; unsigned high_bit = m_SER() ? 0x80 : 0;
m_shifter = high_bit | (m_shifter >> 1); m_shifter = high_bit | (m_shifter >> 1);
@ -81,6 +75,7 @@ namespace netlist
m_last_CLK = m_CLK(); m_last_CLK = m_CLK();
m_QH.push(qh, NLTIME_FROM_NS(20)); // FIXME: Timing m_QH.push(qh, NLTIME_FROM_NS(20)); // FIXME: Timing
m_QHQ.push(1 - qh, NLTIME_FROM_NS(20)); // FIXME: Timing
} }
} }

View File

@ -31,7 +31,7 @@ namespace netlist
, m_enable_hi(*this, "m_enable_hi", false) , m_enable_hi(*this, "m_enable_hi", false)
, m_latched_rom(*this, "m_latched_rom", 0) , m_latched_rom(*this, "m_latched_rom", 0)
, m_A(*this, 1, "A{}", NETLIB_DELEGATE(addr)) , 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_OE1(*this, "OE1", NETLIB_DELEGATE(oe1))
, m_OE2(*this, "OE2", NETLIB_DELEGATE(oe2)) , m_OE2(*this, "OE2", NETLIB_DELEGATE(oe2))
, m_O(*this, 1, "O{}", 0) , m_O(*this, 1, "O{}", 0)
@ -41,14 +41,6 @@ namespace netlist
} }
private: private:
inline NETLIB_HANDLERI(arq)
{
if (m_ARQ() == 0)
{
m_latched_rom = m_ROM[m_A()];
}
}
inline NETLIB_HANDLERI(oe1) inline NETLIB_HANDLERI(oe1)
{ {
m_enable_lo = m_OE1(); m_enable_lo = m_OE1();
@ -73,6 +65,11 @@ namespace netlist
inline NETLIB_HANDLERI(addr) 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; uint8_t o = (m_enable_hi || m_enable_lo) ? m_latched_rom : 0;
for (std::size_t i=0; i<4; i++) for (std::size_t i=0; i<4; i++)
{ {