diff options
Diffstat (limited to 'src/devices/cpu/unsp/unsp_jumps.cpp')
-rw-r--r-- | src/devices/cpu/unsp/unsp_jumps.cpp | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/devices/cpu/unsp/unsp_jumps.cpp b/src/devices/cpu/unsp/unsp_jumps.cpp index aa32f934ca5..6bb53b44cff 100644 --- a/src/devices/cpu/unsp/unsp_jumps.cpp +++ b/src/devices/cpu/unsp/unsp_jumps.cpp @@ -5,8 +5,6 @@ #include "unsp.h" #include "unspfe.h" -#include "debugger.h" - #include "unspdasm.h" void unsp_device::execute_jumps(const uint16_t op) @@ -149,6 +147,28 @@ void unsp_device::execute_jumps(const uint16_t op) m_core->m_icount -= 2; } return; + case 12: // JVC (overflow clear, N == S) + if (((m_core->m_r[REG_SR] & UNSP_N) >> UNSP_N_SHIFT) == ((m_core->m_r[REG_SR] & UNSP_S) >> UNSP_S_SHIFT)) + { + m_core->m_icount -= 4; + add_lpc((op1 == 0) ? opimm : (0 - opimm)); + } + else + { + m_core->m_icount -= 2; + } + return; + case 13: // JVS (overflow set, N != S) (Wrlshunt uses this) + if (((m_core->m_r[REG_SR] & UNSP_N) >> UNSP_N_SHIFT) != ((m_core->m_r[REG_SR] & UNSP_S) >> UNSP_S_SHIFT)) + { + m_core->m_icount -= 4; + add_lpc((op1 == 0) ? opimm : (0 - opimm)); + } + else + { + m_core->m_icount -= 2; + } + return; case 14: // JMP add_lpc((op1 == 0) ? opimm : (0 - opimm)); m_core->m_icount -= 4; |