diff options
author | R. Belmont <rb6502@users.noreply.github.com> | 2019-06-25 15:18:51 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-06-25 15:18:51 -0400 |
commit | 58364fbadec862eb1f6bd5446c025b6c41d96952 (patch) | |
tree | 947ee0c3bad84562c3061baee275b62a7cc05050 | |
parent | 836b625cbc8d05cdeec5022a7469657692852f2e (diff) | |
parent | 13066fe5f8b6c6f0a6c959b8396f9d03b139a34b (diff) |
Merge pull request #5287 from shattered/_5ca0340d4b
t11: switch to MACRO-11 syntax, decode deferred addressing modes (nw)
-rw-r--r-- | src/devices/cpu/t11/t11dasm.cpp | 80 |
1 files changed, 47 insertions, 33 deletions
diff --git a/src/devices/cpu/t11/t11dasm.cpp b/src/devices/cpu/t11/t11dasm.cpp index 161a4d52011..583fc7b0255 100644 --- a/src/devices/cpu/t11/t11dasm.cpp +++ b/src/devices/cpu/t11/t11dasm.cpp @@ -41,10 +41,10 @@ template <int Width> std::string t11_disassembler::MakeEA (int lo, offs_t &pc, c return util::string_format ("(%s)", regs[reg]); break; case 2: - if (reg == 7) + if (reg == 7) // immediate { pm = r16p(pc, opcodes); - return util::string_format ("#$%0*X", Width, pm & ((Width == 2) ? 0xff : 0xffff)); + return util::string_format ("#%0*X", Width, pm & ((Width == 2) ? 0xff : 0xffff)); } else { @@ -52,10 +52,10 @@ template <int Width> std::string t11_disassembler::MakeEA (int lo, offs_t &pc, c } break; case 3: - if (reg == 7) + if (reg == 7) // absolute { pm = r16p(pc, opcodes); - return util::string_format ( "$%04X", pm &= 0xffff); + return util::string_format ("@#%04X", pm &= 0xffff); } else { @@ -70,17 +70,31 @@ template <int Width> std::string t11_disassembler::MakeEA (int lo, offs_t &pc, c break; case 6: pm = r16p(pc, opcodes); - return util::string_format ("%s$%X(%s)", - (pm&0x8000)?"-":"", - (pm&0x8000)?-(signed short)pm:pm, - regs[reg]); + if (reg == 7) // relative + { + return util::string_format ("%04X", (pm + pc) & 0xffff); + } + else + { + return util::string_format ("%s%X(%s)", + (pm&0x8000)?"-":"", + (pm&0x8000)?-(signed short)pm:pm, + regs[reg]); + } break; case 7: pm = r16p(pc, opcodes); - return util::string_format ("@%s$%X(%s)", - (pm&0x8000)?"-":"", - (pm&0x8000)?-(signed short)pm:pm, - regs[reg]); + if (reg == 7) // relative deferred + { + return util::string_format ("@%04X", (pm + pc) & 0xffff); + } + else + { + return util::string_format ("@%s%X(%s)", + (pm&0x8000)?"-":"", + (pm&0x8000)?-(signed short)pm:pm, + regs[reg]); + } break; } return ""; @@ -138,7 +152,7 @@ offs_t t11_disassembler::disassemble(std::ostream &stream, offs_t pc, const data case 0x02: util::stream_format(stream, "CEV"); break; case 0x04: util::stream_format(stream, "CEZ"); break; case 0x08: util::stream_format(stream, "CEN"); break; - default: util::stream_format(stream, "Ccc #$%X", lo & 15); break; + default: util::stream_format(stream, "Ccc #%X", lo & 15); break; } break; case 060: @@ -151,7 +165,7 @@ offs_t t11_disassembler::disassemble(std::ostream &stream, offs_t pc, const data case 0x02: util::stream_format(stream, "SEV"); break; case 0x04: util::stream_format(stream, "SEZ"); break; case 0x08: util::stream_format(stream, "SEN"); break; - default: util::stream_format(stream, "Scc #$%X", lo & 15); break; + default: util::stream_format(stream, "Scc #%X", lo & 15); break; } break; } @@ -162,31 +176,31 @@ offs_t t11_disassembler::disassemble(std::ostream &stream, offs_t pc, const data break; case 0x0100: case 0x0140: case 0x0180: case 0x01c0: offset = 2 * (int8_t)(op & 0xff); - util::stream_format(stream, "BR $%04X", pc + offset); + util::stream_format(stream, "BR %04X", pc + offset); break; case 0x0200: case 0x0240: case 0x0280: case 0x02c0: offset = 2 * (int8_t)(op & 0xff); - util::stream_format(stream, "BNE $%04X", pc + offset); + util::stream_format(stream, "BNE %04X", pc + offset); break; case 0x0300: case 0x0340: case 0x0380: case 0x03c0: offset = 2 * (int8_t)(op & 0xff); - util::stream_format(stream, "BEQ $%04X", pc + offset); + util::stream_format(stream, "BEQ %04X", pc + offset); break; case 0x0400: case 0x0440: case 0x0480: case 0x04c0: offset = 2 * (int8_t)(op & 0xff); - util::stream_format(stream, "BGE $%04X", pc + offset); + util::stream_format(stream, "BGE %04X", pc + offset); break; case 0x0500: case 0x0540: case 0x0580: case 0x05c0: offset = 2 * (int8_t)(op & 0xff); - util::stream_format(stream, "BLT $%04X", pc + offset); + util::stream_format(stream, "BLT %04X", pc + offset); break; case 0x0600: case 0x0640: case 0x0680: case 0x06c0: offset = 2 * (int8_t)(op & 0xff); - util::stream_format(stream, "BGT $%04X", pc + offset); + util::stream_format(stream, "BGT %04X", pc + offset); break; case 0x0700: case 0x0740: case 0x0780: case 0x07c0: offset = 2 * (int8_t)(op & 0xff); - util::stream_format(stream, "BLE $%04X", pc + offset); + util::stream_format(stream, "BLE %04X", pc + offset); break; case 0x0800: case 0x0840: case 0x0880: case 0x08c0: case 0x0900: case 0x0940: case 0x0980: case 0x09c0: @@ -246,7 +260,7 @@ offs_t t11_disassembler::disassemble(std::ostream &stream, offs_t pc, const data util::stream_format(stream, "ASL %s", ea1); break; /* case 0x0d00: - util::stream_format(stream, "MARK #$%X", lo); + util::stream_format(stream, "MARK #%X", lo); break;*/ case 0x0dc0: ea1 = MakeEA<4> (lo, pc, opcodes); @@ -338,46 +352,46 @@ offs_t t11_disassembler::disassemble(std::ostream &stream, offs_t pc, const data case 0x7e00: case 0x7e40: case 0x7e80: case 0x7ec0: case 0x7f00: case 0x7f40: case 0x7f80: case 0x7fc0: addr = (pc + 2 - 2 * lo) & 0xffff; - util::stream_format(stream, "SOB %s,$%X", regs[hi & 7], addr); + util::stream_format(stream, "SOB %s,%04X", regs[hi & 7], addr); break; case 0x8000: case 0x8040: case 0x8080: case 0x80c0: offset = 2 * (int8_t)(op & 0xff); - util::stream_format(stream, "BPL $%04X", pc + offset); + util::stream_format(stream, "BPL %04X", pc + offset); break; case 0x8100: case 0x8140: case 0x8180: case 0x81c0: offset = 2 * (int8_t)(op & 0xff); - util::stream_format(stream, "BMI $%04X", pc + offset); + util::stream_format(stream, "BMI %04X", pc + offset); break; case 0x8200: case 0x8240: case 0x8280: case 0x82c0: offset = 2 * (int8_t)(op & 0xff); - util::stream_format(stream, "BHI $%04X", pc + offset); + util::stream_format(stream, "BHI %04X", pc + offset); break; case 0x8300: case 0x8340: case 0x8380: case 0x83c0: offset = 2 * (int8_t)(op & 0xff); - util::stream_format(stream, "BLOS $%04X", pc + offset); + util::stream_format(stream, "BLOS %04X", pc + offset); break; case 0x8400: case 0x8440: case 0x8480: case 0x84c0: offset = 2 * (int8_t)(op & 0xff); - util::stream_format(stream, "BVC $%04X", pc + offset); + util::stream_format(stream, "BVC %04X", pc + offset); break; case 0x8500: case 0x8540: case 0x8580: case 0x85c0: offset = 2 * (int8_t)(op & 0xff); - util::stream_format(stream, "BVS $%04X", pc + offset); + util::stream_format(stream, "BVS %04X", pc + offset); break; case 0x8600: case 0x8640: case 0x8680: case 0x86c0: offset = 2 * (int8_t)(op & 0xff); - util::stream_format(stream, "BCC $%04X", pc + offset); + util::stream_format(stream, "BCC %04X", pc + offset); break; case 0x8700: case 0x8740: case 0x8780: case 0x87c0: offset = 2 * (int8_t)(op & 0xff); - util::stream_format(stream, "BCS $%04X", pc + offset); + util::stream_format(stream, "BCS %04X", pc + offset); break; case 0x8800: case 0x8840: case 0x8880: case 0x88c0: - util::stream_format(stream, "EMT #$%02X", op & 0xff); + util::stream_format(stream, "EMT %02X", op & 0xff); break; case 0x8900: case 0x8940: case 0x8980: case 0x89c0: - util::stream_format(stream, "TRAP #$%02X", op & 0xff); + util::stream_format(stream, "TRAP %02X", op & 0xff); break; case 0x8a00: |