diff options
Diffstat (limited to 'src/devices/cpu/mcs96/mcs96.cpp')
-rw-r--r-- | src/devices/cpu/mcs96/mcs96.cpp | 272 |
1 files changed, 1 insertions, 271 deletions
diff --git a/src/devices/cpu/mcs96/mcs96.cpp b/src/devices/cpu/mcs96/mcs96.cpp index 92a8ed23a37..fa7e75498b3 100644 --- a/src/devices/cpu/mcs96/mcs96.cpp +++ b/src/devices/cpu/mcs96/mcs96.cpp @@ -23,7 +23,7 @@ mcs96_device::mcs96_device(const machine_config &mconfig, device_type type, cons void mcs96_device::device_start() { program = &space(AS_PROGRAM); - direct = &program->direct(); + direct = program->direct<0>(); m_icountptr = &icount; state_add(STATE_GENPC, "GENPC", PC).noshow(); @@ -156,276 +156,6 @@ void mcs96_device::state_string_export(const device_state_entry &entry, std::str } } -std::string mcs96_device::regname(uint8_t reg) -{ - char res[32]; - switch(reg) { - case 0x18: - strcpy(res, "sp"); - break; - - case 0x19: - strcpy(res, "sph"); - break; - - default: - sprintf(res, "%02x", reg); - break; - } - return res; -} - -offs_t mcs96_device::disasm_generic(std::ostream &stream, offs_t pc, const uint8_t *oprom, const uint8_t *opram, uint32_t options, const disasm_entry *entries) -{ - bool prefix_fe = false; - int off = 0; - if(oprom[0] == 0xfe && entries[oprom[1]].opcode_fe) { - prefix_fe = true; - pc++; - off++; - oprom++; - } - const disasm_entry &e = entries[oprom[0]]; - uint32_t flags = e.flags | DASMFLAG_SUPPORTED; - util::stream_format(stream, "%s", prefix_fe ? e.opcode_fe : e.opcode); - - switch(e.mode) { - case DASM_none: - flags |= 1; - break; - - case DASM_nop_2: - util::stream_format(stream, " %02x", oprom[1]); - flags |= 2; - break; - - case DASM_rel8: { - int delta = oprom[1]; - if(delta & 0x80) - delta -= 0x100; - util::stream_format(stream, " %04x", (pc+2+delta) & 0xffff); - flags |= 2; - break; - } - - case DASM_rel11: { - int delta = ((oprom[0] << 8) | oprom[1]) & 0x7ff; - if(delta & 0x400) - delta -= 0x800; - util::stream_format(stream, " %04x", (pc+2+delta) & 0xffff); - flags |= 2; - break; - } - - case DASM_rel16: { - int delta = oprom[1] | (oprom[2] << 8); - util::stream_format(stream, " %04x", (pc+3+delta) & 0xffff); - flags |= 3; - break; - } - - case DASM_rrel8: { - int delta = oprom[2]; - if(delta & 0x80) - delta -= 0x100; - util::stream_format(stream, " %s, %04x", regname(oprom[1]), (pc+3+delta) & 0xffff); - flags |= 3; - break; - } - - case DASM_brrel8: { - int delta = oprom[2]; - if(delta & 0x80) - delta -= 0x100; - util::stream_format(stream, " %d, %s, %04x", oprom[0] & 7, regname(oprom[1]), (pc+3+delta) & 0xffff); - flags |= 3; - break; - } - - case DASM_direct_1: - util::stream_format(stream, " %s", regname(oprom[1])); - flags |= 2; - break; - - case DASM_direct_2: - util::stream_format(stream, " %s, %s", regname(oprom[2]), regname(oprom[1])); - flags |= 3; - break; - - case DASM_direct_3: - util::stream_format(stream, " %s, %s, %s", regname(oprom[3]), regname(oprom[2]), regname(oprom[1])); - flags |= 4; - break; - - case DASM_immed_1b: - util::stream_format(stream, " #%02x", oprom[1]); - flags |= 2; - break; - - case DASM_immed_2b: - util::stream_format(stream, " %s, #%02x", regname(oprom[2]), oprom[1]); - flags |= 3; - break; - - case DASM_immed_or_reg_2b: - if(oprom[1] >= 0x10) - util::stream_format(stream, " %s, %s", regname(oprom[2]), regname(oprom[1])); - else - util::stream_format(stream, " %s, #%02x", regname(oprom[2]), oprom[1]); - flags |= 3; - break; - - case DASM_immed_3b: - util::stream_format(stream, " %s, %s, #%02x", regname(oprom[3]), regname(oprom[2]), oprom[1]); - flags |= 4; - break; - - case DASM_immed_1w: - util::stream_format(stream, " #%02x%02x", oprom[2], oprom[1]); - flags |= 3; - break; - - case DASM_immed_2w: - util::stream_format(stream, " %s, #%02x%02x", regname(oprom[3]), oprom[2], oprom[1]); - flags |= 4; - break; - - case DASM_immed_3w: - util::stream_format(stream, " %s, %s, #%02x%02x", regname(oprom[4]), regname(oprom[3]), oprom[2], oprom[1]); - flags |= 5; - break; - - case DASM_indirect_1n: - util::stream_format(stream, " [%s]", regname(oprom[1])); - flags |= 2; - break; - - case DASM_indirect_1: - if(oprom[1] & 0x01) { - util::stream_format(stream, " [%s]+", regname(oprom[1]-1)); - flags |= 2; - } else { - util::stream_format(stream, " [%s]", regname(oprom[1])); - flags |= 2; - } - break; - - case DASM_indirect_2: - if(oprom[1] & 0x01) { - util::stream_format(stream, " %s, [%s]+", regname(oprom[2]), regname(oprom[1]-1)); - flags |= 3; - } else { - util::stream_format(stream, " %s, [%s]", regname(oprom[2]), regname(oprom[1])); - flags |= 3; - } - break; - - case DASM_indirect_3: - if(oprom[1] & 0x01) { - util::stream_format(stream, " %s, %s, [%s]+", regname(oprom[3]), regname(oprom[2]), regname(oprom[1]-1)); - flags |= 4; - } else { - util::stream_format(stream, " %s, %s, [%s]", regname(oprom[3]), regname(oprom[2]), regname(oprom[1])); - flags |= 4; - } - break; - - case DASM_indexed_1: - if(oprom[1] & 0x01) { - if(oprom[1] == 0x01) - util::stream_format(stream, " %02x%02x", oprom[3], oprom[2]); - else - util::stream_format(stream, " %02x%02x[%s]", oprom[3], oprom[2], regname(oprom[1]-1)); - flags |= 4; - } else { - int delta = oprom[2]; - if(delta & 0x80) - delta -= 0x100; - if(oprom[1] == 0x00) { - if(delta < 0) - util::stream_format(stream, " %04x", delta & 0xffff); - else - util::stream_format(stream, " %02x", delta); - } else { - if(delta < 0) - util::stream_format(stream, " -%02x[%s]", -delta, regname(oprom[1])); - else - util::stream_format(stream, " %02x[%s]", delta, regname(oprom[1])); - } - flags |= 3; - } - break; - - case DASM_indexed_2: - if(oprom[1] & 0x01) { - if(oprom[1] == 0x01) - util::stream_format(stream, " %s, %02x%02x", regname(oprom[4]), oprom[3], oprom[2]); - else - util::stream_format(stream, " %s, %02x%02x[%s]", regname(oprom[4]), oprom[3], oprom[2], regname(oprom[1]-1)); - flags |= 5; - } else { - int delta = oprom[2]; - if(delta & 0x80) - delta -= 0x100; - if(oprom[1] == 0x00) { - if(delta < 0) - util::stream_format(stream, " %s, %04x", regname(oprom[3]), delta & 0xffff); - else - util::stream_format(stream, " %s, %02x", regname(oprom[3]), delta); - } else { - if(delta < 0) - util::stream_format(stream, " %s, -%02x[%s]", regname(oprom[3]), -delta, regname(oprom[1])); - else - util::stream_format(stream, " %s, %02x[%s]", regname(oprom[3]), delta, regname(oprom[1])); - } - flags |= 4; - } - break; - - case DASM_indexed_3: - if(oprom[1] & 0x01) { - if(oprom[1] == 0x01) - util::stream_format(stream, " %s, %s, %02x%02x", regname(oprom[5]), regname(oprom[4]), oprom[3], oprom[2]); - else - util::stream_format(stream, " %s, %s, %02x%02x[%s]", regname(oprom[5]), regname(oprom[4]), oprom[3], oprom[2], regname(oprom[1]-1)); - flags |= 6; - } else { - int delta = oprom[2]; - if(delta & 0x80) - delta -= 0x100; - if(oprom[1] == 0x00) { - if(delta < 0) - util::stream_format(stream, " %s, %s, %04x", regname(oprom[4]), regname(oprom[3]), delta & 0xffff); - else - util::stream_format(stream, " %s, %s, %02x", regname(oprom[4]), regname(oprom[3]), delta); - } else { - if(delta < 0) - util::stream_format(stream, " %s, %s, -%02x[%s]", regname(oprom[4]), regname(oprom[3]), -delta, regname(oprom[1])); - else - util::stream_format(stream, " %s, %s, %02x[%s]", regname(oprom[4]), regname(oprom[3]), delta, regname(oprom[1])); - } - flags |= 5; - } - break; - - default: - fprintf(stderr, "Unhandled dasm mode %d\n", e.mode); - abort(); - }; - - return flags+off; -} - -uint32_t mcs96_device::disasm_min_opcode_bytes() const -{ - return 1; -} - -uint32_t mcs96_device::disasm_max_opcode_bytes() const -{ - return 7; -} - void mcs96_device::io_w8(uint8_t adr, uint8_t data) { switch(adr) { |