diff options
| author | 2009-06-19 14:27:50 +0000 | |
|---|---|---|
| committer | 2009-06-19 14:27:50 +0000 | |
| commit | 2fdf957bd55d87ae56123dd79dcc5e6d4634e988 (patch) | |
| tree | 042e22ab88776511bed83bce329a6e235e0da4de | |
| parent | 83c6ed38a42814e6dcee67237a5ec63867216f72 (diff) | |
mc68hc11: added BCC, BVC, BRN, BMI, BVS opcodes
| -rw-r--r-- | src/emu/cpu/mc68hc11/hc11ops.c | 48 | ||||
| -rw-r--r-- | src/emu/cpu/mc68hc11/hc11ops.h | 5 |
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) }, |
