summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/s2650/2650dasm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/s2650/2650dasm.cpp')
-rw-r--r--src/devices/cpu/s2650/2650dasm.cpp37
1 files changed, 22 insertions, 15 deletions
diff --git a/src/devices/cpu/s2650/2650dasm.cpp b/src/devices/cpu/s2650/2650dasm.cpp
index 871ea354594..6b6fdf85095 100644
--- a/src/devices/cpu/s2650/2650dasm.cpp
+++ b/src/devices/cpu/s2650/2650dasm.cpp
@@ -235,7 +235,7 @@ offs_t s2650_disassembler::disassemble(std::ostream &stream, offs_t pc, const da
util::stream_format(stream, "ret %c", cc[rv]);
} else
util::stream_format(stream, "retc %c", cc[rv]);
- flags = STEP_OUT;
+ flags = STEP_OUT | (rv != 3 ? STEP_COND : 0);
break;
case 0x18: case 0x19: case 0x1a: case 0x1b:
if (z80) {
@@ -246,6 +246,8 @@ offs_t s2650_disassembler::disassemble(std::ostream &stream, offs_t pc, const da
} else
util::stream_format(stream, "bctr,%c %s", cc[rv], REL(pc, params));
pc+=1;
+ if (rv != 3)
+ flags = STEP_COND;
break;
case 0x1c: case 0x1d: case 0x1e: case 0x1f:
if (z80) {
@@ -256,6 +258,8 @@ offs_t s2650_disassembler::disassemble(std::ostream &stream, offs_t pc, const da
} else
util::stream_format(stream, "bcta,%c %s", cc[rv], ADR(pc, params));
pc+=2;
+ if (rv != 3)
+ flags = STEP_COND;
break;
case 0x20: case 0x21: case 0x22: case 0x23:
util::stream_format(stream, z80 ? "xor r0,r%d" : "eorz,%d", rv);
@@ -283,7 +287,7 @@ offs_t s2650_disassembler::disassemble(std::ostream &stream, offs_t pc, const da
util::stream_format(stream, "iret %c", cc[rv]);
} else
util::stream_format(stream, "rete %c", cc[rv]);
- flags = STEP_OUT;
+ flags = STEP_OUT | (rv != 3 ? STEP_COND : 0);
break;
case 0x38: case 0x39: case 0x3a: case 0x3b:
if (z80) {
@@ -294,7 +298,7 @@ offs_t s2650_disassembler::disassemble(std::ostream &stream, offs_t pc, const da
} else
util::stream_format(stream, "bstr,%c %s", cc[rv], REL(pc, params));
pc+=1;
- flags = STEP_OVER;
+ flags = STEP_OVER | (rv != 3 ? STEP_COND : 0);
break;
case 0x3c: case 0x3d: case 0x3e: case 0x3f:
if (z80) {
@@ -305,7 +309,7 @@ offs_t s2650_disassembler::disassemble(std::ostream &stream, offs_t pc, const da
} else
util::stream_format(stream, "bsta,%c %s", cc[rv], ADR(pc, params));
pc+=2;
- flags = STEP_OVER;
+ flags = STEP_OVER | (rv != 3 ? STEP_COND : 0);
break;
case 0x40:
util::stream_format(stream, "halt");
@@ -335,10 +339,12 @@ offs_t s2650_disassembler::disassemble(std::ostream &stream, offs_t pc, const da
case 0x58: case 0x59: case 0x5a: case 0x5b:
util::stream_format(stream, z80 ? "jrnz r%d,%s" : "brnr,%d %s", rv, REL(pc, params));
pc+=1;
+ flags = STEP_COND;
break;
case 0x5c: case 0x5d: case 0x5e: case 0x5f:
util::stream_format(stream, z80 ? "jpnz r%d,%s" : "brna,%d %s", rv, ADR(pc, params));
pc+=2;
+ flags = STEP_COND;
break;
case 0x60: case 0x61: case 0x62: case 0x63:
util::stream_format(stream, z80 ? "or r0,r%d" : "iorz,%d", rv);
@@ -377,12 +383,12 @@ offs_t s2650_disassembler::disassemble(std::ostream &stream, offs_t pc, const da
case 0x78: case 0x79: case 0x7a: case 0x7b:
util::stream_format(stream, z80 ? "call r%d-nz,%s" : "bsnr,%d %s", rv, REL(pc, params));
pc+=1;
- flags = STEP_OVER;
+ flags = STEP_OVER | STEP_COND;
break;
case 0x7c: case 0x7d: case 0x7e: case 0x7f:
util::stream_format(stream, z80 ? "call r%d-nz,%s" : "bsna,%d %s", rv, ADR(pc, params));
pc+=2;
- flags = STEP_OVER;
+ flags = STEP_OVER | STEP_COND;
break;
case 0x80: case 0x81: case 0x82: case 0x83:
util::stream_format(stream, z80 ? "add r0,r%d" : "addz,%d", rv);
@@ -414,6 +420,7 @@ offs_t s2650_disassembler::disassemble(std::ostream &stream, offs_t pc, const da
case 0x98: case 0x99: case 0x9a:
util::stream_format(stream, z80 ? "jr n%c,%s" : "bcfr,%c %s", cc[rv], REL(pc, params));
pc+=1;
+ flags = STEP_COND;
break;
case 0x9b:
util::stream_format(stream, z80 ? "jr0 %s" : "zbrr %s", REL0(pc, params));
@@ -459,7 +466,7 @@ offs_t s2650_disassembler::disassemble(std::ostream &stream, offs_t pc, const da
case 0xb8: case 0xb9: case 0xba:
util::stream_format(stream, z80 ? "calr n%c,%s" : "bsfr,%c %s", cc[rv], REL(pc, params));
pc+=1;
- flags = STEP_OVER;
+ flags = STEP_OVER | STEP_COND;
break;
case 0xbb:
util::stream_format(stream, z80 ? "cal0 %s" : "zbsr %s", REL0(pc, params));
@@ -469,7 +476,7 @@ offs_t s2650_disassembler::disassemble(std::ostream &stream, offs_t pc, const da
case 0xbc: case 0xbd: case 0xbe:
util::stream_format(stream, z80 ? "call n%c,%s" : "bsfa,%c %s", cc[rv], ADR(pc, params));
pc+=2;
- flags = STEP_OVER;
+ flags = STEP_OVER | STEP_COND;
break;
case 0xbf:
util::stream_format(stream, z80 ? "call %s+r3" : "bsxa %s", ADR(pc, params));
@@ -486,15 +493,15 @@ offs_t s2650_disassembler::disassemble(std::ostream &stream, offs_t pc, const da
util::stream_format(stream, z80 ? "**** $%02X" : "**** $%02X",op);
break;
case 0xc8: case 0xc9: case 0xca: case 0xcb:
- util::stream_format(stream, z80 ? "ld (%s),r%d" : "strr,%d %s", rv, REL(pc, params));
+ util::stream_format(stream, z80 ? "ld (%2$s),r%1$d" : "strr,%d %s", rv, REL(pc, params));
pc+=1;
break;
case 0xcc: case 0xcd: case 0xce: case 0xcf:
- util::stream_format(stream, z80 ? "ld %s" : "stra,%s", ABS(1,rv,pc, params));
+ util::stream_format(stream, z80 ? "ld %s" : "stra,%s", ABS(0,rv,pc, params));
pc+=2;
break;
case 0xd0: case 0xd1: case 0xd2: case 0xd3:
- util::stream_format(stream, z80 ? "rol r%d" : "rrl,%d", rv);
+ util::stream_format(stream, z80 ? "rlca r%d" : "rrl,%d", rv);
break;
case 0xd4: case 0xd5: case 0xd6: case 0xd7:
util::stream_format(stream, z80 ? "out (%s),r%d" : "wrte,%d %s", rv, IMM(pc, params));
@@ -503,12 +510,12 @@ offs_t s2650_disassembler::disassemble(std::ostream &stream, offs_t pc, const da
case 0xd8: case 0xd9: case 0xda: case 0xdb:
util::stream_format(stream, z80 ? "ijnz r%d,%s" : "birr,%d %s", rv, REL(pc, params));
pc+=1;
- flags = STEP_OVER;
+ flags = STEP_COND;
break;
case 0xdc: case 0xdd: case 0xde: case 0xdf:
util::stream_format(stream, z80 ? "ijnz r%d,%s" : "bira,%d %s", rv, ADR(pc, params));
pc+=2;
- flags = STEP_OVER;
+ flags = STEP_COND;
break;
case 0xe0: case 0xe1: case 0xe2: case 0xe3:
util::stream_format(stream, z80 ? "cp r0,%d" : "comz,%d", rv);
@@ -535,12 +542,12 @@ offs_t s2650_disassembler::disassemble(std::ostream &stream, offs_t pc, const da
case 0xf8: case 0xf9: case 0xfa: case 0xfb:
util::stream_format(stream, z80 ? "djnz r%d,%s" : "bdrr,%d %s", rv, REL(pc, params));
pc+=1;
- flags = STEP_OVER;
+ flags = STEP_COND;
break;
case 0xfc: case 0xfd: case 0xfe: case 0xff:
util::stream_format(stream, z80 ? "djnz r%d,%s" : "bdra,%d %s", rv, ADR(pc, params));
pc+=2;
- flags = STEP_OVER;
+ flags = STEP_COND;
break;
}
return (pc - PC) | flags | SUPPORTED;