diff options
Diffstat (limited to 'trunk/src/emu/cpu/v60/op6.c')
-rw-r--r-- | trunk/src/emu/cpu/v60/op6.c | 254 |
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); +} + |