summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/xavix2/xavix2.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/xavix2/xavix2.cpp')
-rw-r--r--src/devices/cpu/xavix2/xavix2.cpp21
1 files changed, 15 insertions, 6 deletions
diff --git a/src/devices/cpu/xavix2/xavix2.cpp b/src/devices/cpu/xavix2/xavix2.cpp
index 670195ac48e..3f238acaa1f 100644
--- a/src/devices/cpu/xavix2/xavix2.cpp
+++ b/src/devices/cpu/xavix2/xavix2.cpp
@@ -362,17 +362,17 @@ void xavix2_device::execute_run()
case 0xca: case 0xcb: m_hr[val6u(opcode)] = m_r[r1(opcode)]; break;
case 0xd0: if(m_f & F_V) npc = m_pc + val8s(opcode); break;
- case 0xd1: if((m_f & F_Z) || (m_f & F_C)) npc = m_pc + val8s(opcode); break;
+ case 0xd1: if(m_f & F_C) npc = m_pc + val8s(opcode); break;
case 0xd2: if(m_f & F_Z) npc = m_pc + val8s(opcode); break;
- case 0xd3: if(m_f & F_C) npc = m_pc + val8s(opcode); break;
+ case 0xd3: if((m_f & F_Z) || (m_f & F_C)) npc = m_pc + val8s(opcode); break;
case 0xd4: if(m_f & F_N) npc = m_pc + val8s(opcode); break;
case 0xd5: npc = m_pc + val8s(opcode); break;
case 0xd6: if(((m_f & F_N) && !(m_f & F_V)) || ((m_f & F_V) && !(m_f & F_N))) npc = m_pc + val8s(opcode); break;
case 0xd7: if((m_f & F_Z) || ((m_f & F_N) && !(m_f & F_V)) || ((m_f & F_V) && !(m_f & F_N))) npc = m_pc + val8s(opcode); break;
case 0xd8: if(!(m_f & F_V)) npc = m_pc + val8s(opcode); break;
- case 0xd9: if(!(m_f & F_Z) && !(m_f & F_C)) npc = m_pc + val8s(opcode); break;
+ case 0xd9: if(!(m_f & F_C)) npc = m_pc + val8s(opcode); break;
case 0xda: if(!(m_f & F_Z)) npc = m_pc + val8s(opcode); break;
- case 0xdb: if(!(m_f & F_C)) npc = m_pc + val8s(opcode); break;
+ case 0xdb: if(!(m_f & F_Z) && !(m_f & F_C)) npc = m_pc + val8s(opcode); break;
case 0xdc: if(!(m_f & F_N)) npc = m_pc + val8s(opcode); break;
case 0xdd: break;
case 0xde: if(((m_f & F_N) && (m_f & F_V)) || (!(m_f & F_V) && !(m_f & F_N))) npc = m_pc + val8s(opcode); break;
@@ -382,10 +382,19 @@ void xavix2_device::execute_run()
case 0xe1: m_f = m_if1; npc = m_ilr1; break;
// e2
case 0xe3: /* rti2 */ break;
- // e4-fb
+ // e4-ef
+
+ case 0xf0: m_f |= F_C; break;
+ case 0xf1: m_f &= ~F_C; break;
+ case 0xf2: m_f |= F_Z; break;
+ case 0xf3: m_f &= ~F_Z; break;
+ case 0xf4: m_f |= F_N; break;
+ case 0xf5: m_f &= ~F_N; break;
+ case 0xf6: m_f |= F_V; break;
+ case 0xf7: m_f &= ~F_V; break;
case 0xf8: m_f |= F_I; break;
case 0xf9: m_f &= ~F_I; m_ei_count = 2; break;
-
+ // fa-fb
case 0xfc: break;
// fd
case 0xfe: m_wait = true; npc = check_interrupt(npc-1); if(m_wait) m_icount = 0; break;