summaryrefslogtreecommitdiffstatshomepage
path: root/trunk/src/emu/cpu/v60/op6.c
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/src/emu/cpu/v60/op6.c')
-rw-r--r--trunk/src/emu/cpu/v60/op6.c254
1 files changed, 254 insertions, 0 deletions
diff --git a/trunk/src/emu/cpu/v60/op6.c b/trunk/src/emu/cpu/v60/op6.c
new file mode 100644
index 00000000000..0441c83bb87
--- /dev/null
+++ b/trunk/src/emu/cpu/v60/op6.c
@@ -0,0 +1,254 @@
+
+/*
+ FULLY TRUSTED
+*/
+
+static UINT32 opTB(v60_state *cpustate, int reg) /* TRUSTED */
+{
+ if (cpustate->reg[reg] == 0)
+ {
+ cpustate->PC += (INT16)OpRead16(cpustate, cpustate->PC + 2);
+ return 0;
+ }
+
+ return 4;
+}
+
+static UINT32 opDBGT(v60_state *cpustate, int reg) /* TRUSTED */
+{
+ cpustate->reg[reg]--;
+
+ NORMALIZEFLAGS(cpustate);
+ if ((cpustate->reg[reg] != 0) && !((cpustate->_S ^ cpustate->_OV) | cpustate->_Z))
+ {
+ cpustate->PC += (INT16)OpRead16(cpustate, cpustate->PC + 2);
+ return 0;
+ }
+
+ return 4;
+}
+
+static UINT32 opDBLE(v60_state *cpustate, int reg) /* TRUSTED */
+{
+ cpustate->reg[reg]--;
+
+ NORMALIZEFLAGS(cpustate);
+ if ((cpustate->reg[reg] != 0) && ((cpustate->_S ^ cpustate->_OV) | cpustate->_Z))
+ {
+ cpustate->PC += (INT16)OpRead16(cpustate, cpustate->PC + 2);
+ return 0;
+ }
+
+ return 4;
+}
+
+
+static UINT32 opDBGE(v60_state *cpustate, int reg) /* TRUSTED */
+{
+ cpustate->reg[reg]--;
+
+ NORMALIZEFLAGS(cpustate);
+ if ((cpustate->reg[reg] != 0) && !(cpustate->_S ^ cpustate->_OV))
+ {
+ cpustate->PC += (INT16)OpRead16(cpustate, cpustate->PC + 2);
+ return 0;
+ }
+
+ return 4;
+}
+
+static UINT32 opDBLT(v60_state *cpustate, int reg) /* TRUSTED */
+{
+ cpustate->reg[reg]--;
+
+ NORMALIZEFLAGS(cpustate);
+ if ((cpustate->reg[reg] != 0) && (cpustate->_S ^ cpustate->_OV))
+ {
+ cpustate->PC += (INT16)OpRead16(cpustate, cpustate->PC + 2);
+ return 0;
+ }
+
+ return 4;
+}
+
+static UINT32 opDBH(v60_state *cpustate, int reg) /* TRUSTED */
+{
+ cpustate->reg[reg]--;
+
+ if ((cpustate->reg[reg] != 0) && !(cpustate->_CY | cpustate->_Z))
+ {
+ cpustate->PC += (INT16)OpRead16(cpustate, cpustate->PC + 2);
+ return 0;
+ }
+
+ return 4;
+}
+
+static UINT32 opDBNH(v60_state *cpustate, int reg) /* TRUSTED */
+{
+ cpustate->reg[reg]--;
+
+ if ((cpustate->reg[reg] != 0) && (cpustate->_CY | cpustate->_Z))
+ {
+ cpustate->PC += (INT16)OpRead16(cpustate, cpustate->PC + 2);
+ return 0;
+ }
+
+ return 4;
+}
+
+
+static UINT32 opDBL(v60_state *cpustate, int reg) /* TRUSTED */
+{
+ cpustate->reg[reg]--;
+
+ if ((cpustate->reg[reg] != 0) && (cpustate->_CY))
+ {
+ cpustate->PC += (INT16)OpRead16(cpustate, cpustate->PC + 2);
+ return 0;
+ }
+
+ return 4;
+}
+
+static UINT32 opDBNL(v60_state *cpustate, int reg) /* TRUSTED */
+{
+ cpustate->reg[reg]--;
+
+ if ((cpustate->reg[reg] != 0) && !(cpustate->_CY))
+ {
+ cpustate->PC += (INT16)OpRead16(cpustate, cpustate->PC + 2);
+ return 0;
+ }
+
+ return 4;
+}
+
+static UINT32 opDBE(v60_state *cpustate, int reg) /* TRUSTED */
+{
+ cpustate->reg[reg]--;
+
+ if ((cpustate->reg[reg] != 0) && (cpustate->_Z))
+ {
+ cpustate->PC += (INT16)OpRead16(cpustate, cpustate->PC + 2);
+ return 0;
+ }
+
+ return 4;
+}
+
+static UINT32 opDBNE(v60_state *cpustate, int reg) /* TRUSTED */
+{
+ cpustate->reg[reg]--;
+
+ if ((cpustate->reg[reg] != 0) && !(cpustate->_Z))
+ {
+ cpustate->PC += (INT16)OpRead16(cpustate, cpustate->PC + 2);
+ return 0;
+ }
+
+ return 4;
+}
+
+static UINT32 opDBV(v60_state *cpustate, int reg) /* TRUSTED */
+{
+ cpustate->reg[reg]--;
+
+ if ((cpustate->reg[reg] != 0) && (cpustate->_OV))
+ {
+ cpustate->PC += (INT16)OpRead16(cpustate, cpustate->PC + 2);
+ return 0;
+ }
+
+ return 4;
+}
+
+static UINT32 opDBNV(v60_state *cpustate, int reg) /* TRUSTED */
+{
+ cpustate->reg[reg]--;
+
+ if ((cpustate->reg[reg] != 0) && !(cpustate->_OV))
+ {
+ cpustate->PC += (INT16)OpRead16(cpustate, cpustate->PC + 2);
+ return 0;
+ }
+
+ return 4;
+}
+
+static UINT32 opDBN(v60_state *cpustate, int reg) /* TRUSTED */
+{
+ cpustate->reg[reg]--;
+
+ if ((cpustate->reg[reg] != 0) && (cpustate->_S))
+ {
+ cpustate->PC += (INT16)OpRead16(cpustate, cpustate->PC + 2);
+ return 0;
+ }
+
+ return 4;
+}
+
+static UINT32 opDBP(v60_state *cpustate, int reg) /* TRUSTED */
+{
+ cpustate->reg[reg]--;
+
+ if ((cpustate->reg[reg] != 0) && !(cpustate->_S))
+ {
+ cpustate->PC += (INT16)OpRead16(cpustate, cpustate->PC + 2);
+ return 0;
+ }
+
+ return 4;
+}
+
+static UINT32 opDBR(v60_state *cpustate, int reg) /* TRUSTED */
+{
+ cpustate->reg[reg]--;
+
+ if (cpustate->reg[reg] != 0)
+ {
+ cpustate->PC += (INT16)OpRead16(cpustate, cpustate->PC + 2);
+ return 0;
+ }
+
+ return 4;
+}
+
+static UINT32 (*const OpC6Table[8])(v60_state *, int reg) = /* TRUSTED */
+{
+ opDBV,
+ opDBL,
+ opDBE,
+ opDBNH,
+ opDBN,
+ opDBR,
+ opDBLT,
+ opDBLE
+};
+
+static UINT32 (*const OpC7Table[8])(v60_state *, int reg) = /* TRUSTED */
+{
+ opDBNV,
+ opDBNL,
+ opDBNE,
+ opDBH,
+ opDBP,
+ opTB,
+ opDBGE,
+ opDBGT
+};
+
+
+static UINT32 opC6(v60_state *cpustate) /* TRUSTED */
+{
+ UINT8 appb = OpRead8(cpustate, cpustate->PC + 1);
+ return OpC6Table[appb >> 5](cpustate, appb & 0x1f);
+}
+
+static UINT32 opC7(v60_state *cpustate) /* TRUSTED */
+{
+ UINT8 appb = OpRead8(cpustate, cpustate->PC + 1);
+ return OpC7Table[appb >> 5](cpustate, appb & 0x1f);
+}
+