From ef6a99bd1d62e39cdc5e4349b35bc2d492a3a881 Mon Sep 17 00:00:00 2001 From: hap Date: Sun, 10 Jan 2021 19:51:39 +0100 Subject: mcs48: fix possible problem with A11 and RET during interrupt --- src/devices/cpu/mcs48/mcs48.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/devices/cpu/mcs48/mcs48.cpp b/src/devices/cpu/mcs48/mcs48.cpp index b0f7e4f9fb5..34d89693bf2 100644 --- a/src/devices/cpu/mcs48/mcs48.cpp +++ b/src/devices/cpu/mcs48/mcs48.cpp @@ -434,7 +434,7 @@ void mcs48_cpu_device::pull_pc_psw() m_pc = ram_r(8 + 2*sp); m_pc |= ram_r(9 + 2*sp) << 8; m_psw = ((m_pc >> 8) & 0xf0) | sp; - m_pc &= 0xfff; + m_pc &= (m_irq_in_progress) ? 0x7ff : 0xfff; update_regptr(); } @@ -449,7 +449,7 @@ void mcs48_cpu_device::pull_pc() uint8_t sp = (m_psw - 1) & 0x07; m_pc = ram_r(8 + 2*sp); m_pc |= ram_r(9 + 2*sp) << 8; - m_pc &= 0xfff; + m_pc &= (m_irq_in_progress) ? 0x7ff : 0xfff; m_psw = (m_psw & 0xf0) | sp; } @@ -868,10 +868,10 @@ OPHANDLER( ret ) { burn_cycles(2); pull_pc(); } OPHANDLER( retr ) { burn_cycles(2); - pull_pc_psw(); // implicitly clear the IRQ in progress flip flop m_irq_in_progress = false; + pull_pc_psw(); } OPHANDLER( rl_a ) { burn_cycles(1); m_a = (m_a << 1) | (m_a >> 7); } -- cgit v1.2.3