summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Angelo Salese <angelosa@users.noreply.github.com>2009-06-19 14:27:50 +0000
committer Angelo Salese <angelosa@users.noreply.github.com>2009-06-19 14:27:50 +0000
commit2fdf957bd55d87ae56123dd79dcc5e6d4634e988 (patch)
tree042e22ab88776511bed83bce329a6e235e0da4de /src
parent83c6ed38a42814e6dcee67237a5ec63867216f72 (diff)
mc68hc11: added BCC, BVC, BRN, BMI, BVS opcodes
Diffstat (limited to 'src')
-rw-r--r--src/emu/cpu/mc68hc11/hc11ops.c48
-rw-r--r--src/emu/cpu/mc68hc11/hc11ops.h5
2 files changed, 53 insertions, 0 deletions
diff --git a/src/emu/cpu/mc68hc11/hc11ops.c b/src/emu/cpu/mc68hc11/hc11ops.c
index 7393369a365..320231a52c2 100644
--- a/src/emu/cpu/mc68hc11/hc11ops.c
+++ b/src/emu/cpu/mc68hc11/hc11ops.c
@@ -735,6 +735,16 @@ static void HC11OP(bitb_indy)(hc11_state *cpustate)
CYCLES(cpustate, 5);
}
+/* BCC 0x24 */
+static void HC11OP(bcc)(hc11_state *cpustate)
+{
+ INT8 rel = FETCH(cpustate);
+ if ((cpustate->ccr & CC_C) == 0) /* Branch if C flag clear */
+ {
+ SET_PC(cpustate, cpustate->ppc + rel + 2);
+ }
+ CYCLES(cpustate, 3);
+}
/* BCS 0x25 */
static void HC11OP(bcs)(hc11_state *cpustate)
@@ -785,6 +795,16 @@ static void HC11OP(ble)(hc11_state *cpustate)
CYCLES(cpustate, 3);
}
+/* BMI 0x2B */
+static void HC11OP(bmi)(hc11_state *cpustate)
+{
+ INT8 rel = FETCH(cpustate);
+ if (cpustate->ccr & CC_N) /* Branch if N flag set */
+ {
+ SET_PC(cpustate, cpustate->ppc + rel + 2);
+ }
+ CYCLES(cpustate, 3);
+}
/* BPL 0x2A */
static void HC11OP(bpl)(hc11_state *cpustate)
@@ -806,6 +826,13 @@ static void HC11OP(bra)(hc11_state *cpustate)
CYCLES(cpustate, 3);
}
+/* BRN 0x21 */
+static void HC11OP(brn)(hc11_state *cpustate)
+{
+ /* with this opcode, the branch condition is always false. */
+ SET_PC(cpustate, cpustate->ppc + 2);
+ CYCLES(cpustate, 3);
+}
/* BSR 0x8D */
static void HC11OP(bsr)(hc11_state *cpustate)
@@ -817,6 +844,27 @@ static void HC11OP(bsr)(hc11_state *cpustate)
CYCLES(cpustate, 6);
}
+/* BVC 0x28 */
+static void HC11OP(bvc)(hc11_state *cpustate)
+{
+ INT8 rel = FETCH(cpustate);
+ if ((cpustate->ccr & CC_V) == 0) /* Branch if V flag clear */
+ {
+ SET_PC(cpustate, cpustate->ppc + rel + 2);
+ }
+ CYCLES(cpustate, 3);
+}
+
+/* BVS 0x29 */
+static void HC11OP(bvs)(hc11_state *cpustate)
+{
+ INT8 rel = FETCH(cpustate);
+ if (cpustate->ccr & CC_V) /* Branch if V flag set */
+ {
+ SET_PC(cpustate, cpustate->ppc + rel + 2);
+ }
+ CYCLES(cpustate, 3);
+}
/* CLI 0x0E */
static void HC11OP(cli)(hc11_state *cpustate)
diff --git a/src/emu/cpu/mc68hc11/hc11ops.h b/src/emu/cpu/mc68hc11/hc11ops.h
index 716e24d85cd..ef871578e06 100644
--- a/src/emu/cpu/mc68hc11/hc11ops.h
+++ b/src/emu/cpu/mc68hc11/hc11ops.h
@@ -57,13 +57,18 @@ static const hc11_opcode_list_struct hc11_opcode_list[] =
{ 0, 0xf5, HC11OP(bitb_ext) },
{ 0, 0xe5, HC11OP(bitb_indx) },
{ 0x18, 0xe5, HC11OP(bitb_indy) },
+ { 0, 0x24, HC11OP(bcc) },
{ 0, 0x25, HC11OP(bcs) },
{ 0, 0x27, HC11OP(beq) },
{ 0, 0x26, HC11OP(bne) },
{ 0, 0x2f, HC11OP(ble) },
+ { 0, 0x2b, HC11OP(bmi) },
{ 0, 0x2a, HC11OP(bpl) },
{ 0, 0x20, HC11OP(bra) },
+ { 0, 0x21, HC11OP(brn) },
{ 0, 0x8d, HC11OP(bsr) },
+ { 0, 0x28, HC11OP(bvc) },
+ { 0, 0x29, HC11OP(bvs) },
{ 0, 0x0e, HC11OP(cli) },
{ 0, 0x4f, HC11OP(clra) },
{ 0, 0x5f, HC11OP(clrb) },