summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/m68000/m68kdasm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/m68000/m68kdasm.cpp')
-rw-r--r--src/devices/cpu/m68000/m68kdasm.cpp53
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},