From 91c2cf74d945e6408218edde9d98fbe4ab17526b Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Mon, 24 Feb 2020 22:27:45 +0100 Subject: [PATCH] Possibly controversial i2cmem change, please lemme know if something breaks (nw) --- src/devices/machine/i2cmem.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/devices/machine/i2cmem.cpp b/src/devices/machine/i2cmem.cpp index f7ab143d5b9..c32bd578ff3 100644 --- a/src/devices/machine/i2cmem.cpp +++ b/src/devices/machine/i2cmem.cpp @@ -344,7 +344,13 @@ WRITE_LINE_MEMBER( i2cmem_device::write_scl ) switch( m_state ) { case STATE_DEVSEL: - m_devsel = m_shift; + if( m_shift & 1 ) + { + verboselog( this, 1, "switching to read\n"); + m_devsel &= 0x0e; + m_devsel |= (m_shift & 0xf1); + } + else m_devsel = m_shift; if( !select_device() ) { @@ -507,6 +513,13 @@ int i2cmem_device::select_device() int device = ( m_slave_address & 0xf0 ) | ( m_e2 << 3 ) | ( m_e1 << 2 ) | ( m_e0 << 1 ); int mask = DEVSEL_ADDRESS & ~( address_mask() >> 7 ); + if( m_devsel == 0 ) + { + verboselog( this, 2, "acknowledging global call\n"); + m_sdar = 0; + return 1; + } + if( ( m_devsel & mask ) == ( device & mask ) ) { return 1;