diff options
Diffstat (limited to 'src/devices/cpu/m68000/m68kdasm.cpp')
-rw-r--r-- | src/devices/cpu/m68000/m68kdasm.cpp | 53 |
1 files changed, 33 insertions, 20 deletions
diff --git a/src/devices/cpu/m68000/m68kdasm.cpp b/src/devices/cpu/m68000/m68kdasm.cpp index d0cb3ac63d6..9370720f24c 100644 --- a/src/devices/cpu/m68000/m68kdasm.cpp +++ b/src/devices/cpu/m68000/m68kdasm.cpp @@ -637,12 +637,14 @@ std::string m68k_disassembler::d68000_asl_ea() std::string m68k_disassembler::d68000_bcc_8() { u32 temp_pc = m_cpu_pc; + m_flags = STEP_COND; return util::string_format("b%-2s $%x", m_cc[(m_cpu_ir>>8)&0xf], temp_pc + make_int_8(m_cpu_ir)); } std::string m68k_disassembler::d68000_bcc_16() { u32 temp_pc = m_cpu_pc; + m_flags = STEP_COND; return util::string_format("b%-2s $%x", m_cc[(m_cpu_ir>>8)&0xf], temp_pc + make_int_16(read_imm_16())); } @@ -652,6 +654,7 @@ std::string m68k_disassembler::d68020_bcc_32() auto limit = limit_cpu_types(M68020_PLUS); if(limit.first) return limit.second; + m_flags = STEP_COND; return util::string_format("b%-2s $%x; (2+)", m_cc[(m_cpu_ir>>8)&0xf], temp_pc + read_imm_32()); } @@ -715,30 +718,40 @@ std::string m68k_disassembler::d68020_bfclr() std::string m68k_disassembler::d68020_bfexts() { - auto limit = limit_cpu_types(M68020_PLUS); + auto const limit = limit_cpu_types(M68020_PLUS); if(limit.first) return limit.second; - u16 extension = read_imm_16(); + u16 const extension = read_imm_16(); - std::string offset = BIT(extension, 11) ? util::string_format("D%d", (extension>>6)&7) : util::string_format("%d", (extension>>6)&31); + std::string const offset = BIT(extension, 11) + ? util::string_format("D%d", (extension >> 6) & 7) + : util::string_format("%d", (extension >> 6) & 31); - std::string width = BIT(extension, 5) ? util::string_format("D%d", extension&7) : util::string_format("%d", m_5bit_data_table[extension&31]); - return util::string_format("bfexts D%d, %s {%s:%s}; (2+)", (extension>>12)&7, get_ea_mode_str_8(m_cpu_ir), offset, width); + std::string const width = BIT(extension, 5) + ? util::string_format("D%d", extension & 7) + : util::string_format("%d", m_5bit_data_table[extension & 31]); + + return util::string_format("bfexts %s {%s:%s}, D%d; (2+)", get_ea_mode_str_8(m_cpu_ir), offset, width, (extension >> 12) & 7); } std::string m68k_disassembler::d68020_bfextu() { - auto limit = limit_cpu_types(M68020_PLUS); + auto const limit = limit_cpu_types(M68020_PLUS); if(limit.first) return limit.second; - u16 extension = read_imm_16(); + u16 const extension = read_imm_16(); - std::string offset = BIT(extension, 11) ? util::string_format("D%d", (extension>>6)&7) : util::string_format("%d", (extension>>6)&31); + std::string const offset = BIT(extension, 11) + ? util::string_format("D%d", (extension >> 6) & 7) + : util::string_format("%d", (extension >> 6) & 31); - std::string width = BIT(extension, 5) ? util::string_format("D%d", extension&7) : util::string_format("%d", m_5bit_data_table[extension&31]); - return util::string_format("bfextu D%d, %s {%s:%s}; (2+)", (extension>>12)&7, get_ea_mode_str_8(m_cpu_ir), offset, width); + std::string const width = BIT(extension, 5) + ? util::string_format("D%d", extension & 7) + : util::string_format("%d", m_5bit_data_table[extension & 31]); + + return util::string_format("bfextu %s {%s:%s}, D%d; (2+)", get_ea_mode_str_8(m_cpu_ir), offset, width, (extension >> 12) & 7); } std::string m68k_disassembler::d68020_bfffo() @@ -933,7 +946,7 @@ std::string m68k_disassembler::d68020_cas2_32() std::string m68k_disassembler::d68000_chk_16() { - m_flags = STEP_OVER; + m_flags = STEP_OVER | STEP_COND; return util::string_format("chk.w %s, D%d", get_ea_mode_str_16(m_cpu_ir), (m_cpu_ir>>9)&7); } @@ -942,7 +955,7 @@ std::string m68k_disassembler::d68020_chk_32() auto limit = limit_cpu_types(M68020_PLUS); if(limit.first) return limit.second; - m_flags = STEP_OVER; + m_flags = STEP_OVER | STEP_COND; return util::string_format("chk.l %s, D%d; (2+)", get_ea_mode_str_32(m_cpu_ir), (m_cpu_ir>>9)&7); } @@ -1265,14 +1278,14 @@ std::string m68k_disassembler::d68040_cpush() std::string m68k_disassembler::d68000_dbra() { u32 temp_pc = m_cpu_pc; - m_flags = STEP_OVER; + m_flags = STEP_COND; return util::string_format("dbra D%d, $%x", m_cpu_ir & 7, temp_pc + make_int_16(read_imm_16())); } std::string m68k_disassembler::d68000_dbcc() { u32 temp_pc = m_cpu_pc; - m_flags = STEP_OVER; + m_flags = STEP_COND; return util::string_format("db%-2s D%d, $%x", m_cc[(m_cpu_ir>>8)&0xf], m_cpu_ir & 7, temp_pc + make_int_16(read_imm_16())); } @@ -1502,7 +1515,7 @@ std::string m68k_disassembler::d68040_fpu() switch ((w2>>10)&7) { case 3: // packed decimal w/fixed k-factor - return util::string_format("fmove%s FP%d, %s {#%d}", float_data_format[(w2>>10)&7], dst_reg, get_ea_mode_str_32(m_cpu_ir), sext_7bit_int(w2&0x7f)); + return util::string_format("fmove%s FP%d, %s {#%d}", float_data_format[(w2>>10)&7], dst_reg, get_ea_mode_str_32(m_cpu_ir), util::sext(w2&0x7f, 7)); case 7: // packed decimal w/dynamic k-factor (register) return util::string_format("fmove%s FP%d, %s {D%d}", float_data_format[(w2>>10)&7], dst_reg, get_ea_mode_str_32(m_cpu_ir), (w2>>4)&7); @@ -2749,7 +2762,7 @@ std::string m68k_disassembler::d68020_trapcc_0() auto limit = limit_cpu_types(M68020_PLUS); if(limit.first) return limit.second; - m_flags = STEP_OVER; + m_flags = STEP_OVER | STEP_COND; return util::string_format("trap%-2s; (2+)", m_cc[(m_cpu_ir>>8)&0xf]); } @@ -2758,7 +2771,7 @@ std::string m68k_disassembler::d68020_trapcc_16() auto limit = limit_cpu_types(M68020_PLUS); if(limit.first) return limit.second; - m_flags = STEP_OVER; + m_flags = STEP_OVER | STEP_COND; return util::string_format("trap%-2s %s; (2+)", m_cc[(m_cpu_ir>>8)&0xf], get_imm_str_u16()); } @@ -2767,13 +2780,13 @@ std::string m68k_disassembler::d68020_trapcc_32() auto limit = limit_cpu_types(M68020_PLUS); if(limit.first) return limit.second; - m_flags = STEP_OVER; + m_flags = STEP_OVER | STEP_COND; return util::string_format("trap%-2s %s; (2+)", m_cc[(m_cpu_ir>>8)&0xf], get_imm_str_u32()); } std::string m68k_disassembler::d68000_trapv() { - m_flags = STEP_OVER; + m_flags = STEP_OVER | STEP_COND; return util::string_format("trapv"); } @@ -3130,7 +3143,7 @@ std::string m68k_disassembler::d68040_fbcc_32() const m68k_disassembler::opcode_struct m68k_disassembler::m_opcode_info[] = { -/* opcode handler mask match ea mask */ +/* opcode handler mask match ea mask */ {&m68k_disassembler::d68000_1010 , 0xf000, 0xa000, 0x000}, {&m68k_disassembler::d68000_1111 , 0xf000, 0xf000, 0x000}, {&m68k_disassembler::d68000_abcd_rr , 0xf1f8, 0xc100, 0x000}, |