From 80f55bbd0d1ad3d3c298741beb85f85ccb70ea55 Mon Sep 17 00:00:00 2001 From: arbee Date: Tue, 28 Feb 2017 21:34:48 -0500 Subject: apple2: fixed IIe/IIc self-test regression, fixed IIe LC reset state. [R. Belmont] --- src/devices/bus/a2bus/ramcard16k.cpp | 6 ++++-- src/mame/drivers/apple2e.cpp | 11 ++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/devices/bus/a2bus/ramcard16k.cpp b/src/devices/bus/a2bus/ramcard16k.cpp index 3c03ecba37f..d12132cbef3 100644 --- a/src/devices/bus/a2bus/ramcard16k.cpp +++ b/src/devices/bus/a2bus/ramcard16k.cpp @@ -69,7 +69,6 @@ void a2bus_ramcard_device::do_io(int offset, bool write) { int old_inh_state = m_inh_state; - m_inh_state = INH_NONE; m_dxxx_bank = 0; switch (offset) @@ -88,10 +87,12 @@ void a2bus_ramcard_device::do_io(int offset, bool write) { m_writecnt++; } + m_inh_state &= ~INH_READ; break; case 0x2: case 0xa: case 0x6: case 0xe: m_writecnt = 0; + m_inh_state = INH_NONE; break; case 0x3: case 0xb: case 0x7: case 0xf: @@ -103,13 +104,14 @@ void a2bus_ramcard_device::do_io(int offset, bool write) { m_writecnt++; } - m_inh_state = INH_READ; + m_inh_state |= INH_READ; break; } if (m_writecnt >= 2) { m_inh_state |= INH_WRITE; + m_writecnt = 2; } if (!(offset & 8)) diff --git a/src/mame/drivers/apple2e.cpp b/src/mame/drivers/apple2e.cpp index 72bc26e1aeb..d66013ff744 100644 --- a/src/mame/drivers/apple2e.cpp +++ b/src/mame/drivers/apple2e.cpp @@ -757,7 +757,9 @@ void apple2e_state::machine_reset() m_lcram = false; m_lcram2 = true; m_lcwriteenable = true; - m_wrtcount = 0; + m_wrtcount = 2; + // set bank device to read ROM, write enabled + m_lcbank->set_bank(0); m_exp_bankhior = 0xf0; @@ -1013,12 +1015,12 @@ void apple2e_state::lc_update(int offset, bool write) m_lcram = false; m_lcram2 = false; - m_lcwriteenable = false; switch (offset) { case 0x0: case 0x8: case 0x4: case 0xc: m_wrtcount = 0; + m_lcwriteenable = false; m_lcram = true; break; @@ -1035,6 +1037,7 @@ void apple2e_state::lc_update(int offset, bool write) case 0x2: case 0xa: case 0x6: case 0xe: m_wrtcount = 0; + m_lcwriteenable = false; break; case 0x3: case 0xb: case 0x7: case 0xf: @@ -1053,6 +1056,7 @@ void apple2e_state::lc_update(int offset, bool write) if (m_wrtcount >= 2) { m_lcwriteenable = true; + m_wrtcount = 2; } if (!(offset & 8)) @@ -1080,9 +1084,10 @@ void apple2e_state::lc_update(int offset, bool write) } #if 0 - printf("LC: new state %c%c dxxx=%04x altzp=%d\n", + printf("LC: new state %c%c (%d) dxxx=%04x altzp=%d\n", m_lcram ? 'R' : 'x', m_lcwriteenable ? 'W' : 'x', + m_wrtcount, m_lcram2 ? 0x1000 : 0x0000, m_altzp); #endif -- cgit v1.2.3