summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/unsp/unsp_jumps.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/unsp/unsp_jumps.cpp')
-rw-r--r--src/devices/cpu/unsp/unsp_jumps.cpp24
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;