unidasm: Add disassembler for Mitsubishi/Renesas M16C architecture

This commit is contained in:
AJR 2023-08-01 20:44:17 -04:00
parent 5ab956906b
commit e1bf43e670
4 changed files with 1257 additions and 1 deletions

View File

@ -1556,11 +1556,20 @@ if opt_tool(CPUS, "MELPS4") then
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/melps4/melps4d.h")
end
--------------------------------------------------
-- Mitsubishi M16C, disassembler only
--------------------------------------------------
if opt_tool(CPUS, "M16C") then
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/m16c/m16cdasm.cpp")
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/m16c/m16cdasm.h")
end
--------------------------------------------------
-- Mitsubishi M32C, disassembler only
--------------------------------------------------
if opt_tool(CPUS, "M23C") then
if opt_tool(CPUS, "M32C") then
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/m32c/m32cdasm.cpp")
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/m32c/m32cdasm.h")
end

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,52 @@
// license:BSD-3-Clause
// copyright-holders:AJR
#ifndef MAME_CPU_M16C_M16CDASM_H
#define MAME_CPU_M16C_M16CDASM_H
#pragma once
class m16c_disassembler : public util::disasm_interface
{
public:
// construction/destruction
m16c_disassembler();
protected:
// disassembler overrides
virtual u32 opcode_alignment() const override;
virtual offs_t disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer &params) override;
private:
// static tables
static const char *const s_regs[2][6];
static const char *const s_cregs[8];
static const char *const s_byte_ops[8];
static const char *const s_bit_ops[14];
static const char *const s_cnds[16];
static const char *const s_imm76_ops[2][9];
static const char *const s_nibmov_ops[4];
static const char *const s_decimal_ops[2][4];
// formatting helpers
void format_imm8(std::ostream &stream, u8 imm) const;
void format_imm16(std::ostream &stream, u16 imm) const;
void format_label(std::ostream &stream, u32 label) const;
void format_imm_signed(std::ostream &stream, s16 imm) const;
void format_relative(std::ostream &stream, const char *reg, s32 disp) const;
// internal helpers
void dasm_ea(std::ostream &stream, offs_t &pc, const data_buffer &opcodes, u8 mode, bool size) const;
void dasm_general(std::ostream &stream, offs_t &pc, const data_buffer &opcodes, bool size) const;
void dasm_quick(std::ostream &stream, offs_t &pc, const data_buffer &opcodes, bool size) const;
void dasm_shift(std::ostream &stream, offs_t &pc, const data_buffer &opcodes, bool size) const;
void dasm_74(std::ostream &stream, offs_t &pc, const data_buffer &opcodes, bool size) const;
void dasm_76(std::ostream &stream, offs_t &pc, const data_buffer &opcodes, bool size) const;
void dasm_7a(std::ostream &stream, offs_t &pc, const data_buffer &opcodes, bool size) const;
void dasm_7c(std::ostream &stream, offs_t &pc, const data_buffer &opcodes) const;
void dasm_7d(std::ostream &stream, offs_t &pc, offs_t &flags, const data_buffer &opcodes) const;
void dasm_7e(std::ostream &stream, offs_t &pc, const data_buffer &opcodes) const;
void dasm_eb(std::ostream &stream, offs_t &pc, offs_t &flags, const data_buffer &opcodes) const;
};
#endif // MAME_CPU_M16C_M16CDASM_H

View File

@ -84,6 +84,7 @@ using util::BIT;
#include "cpu/lc8670/lc8670dsm.h"
#include "cpu/lh5801/5801dasm.h"
#include "cpu/lr35902/lr35902d.h"
#include "cpu/m16c/m16cdasm.h"
#include "cpu/m32c/m32cdasm.h"
#include "cpu/m37710/m7700ds.h"
#include "cpu/m6502/m4510d.h"
@ -498,6 +499,7 @@ static const dasm_table_entry dasm_table[] =
{ "lh5801", le, 0, []() -> util::disasm_interface * { return new lh5801_disassembler; } },
{ "lr35902", le, 0, []() -> util::disasm_interface * { return new lr35902_disassembler; } },
{ "m146805", be, 0, []() -> util::disasm_interface * { return new m146805_disassembler; } },
{ "m16c", le, 0, []() -> util::disasm_interface * { return new m16c_disassembler; } },
{ "m32c", le, 0, []() -> util::disasm_interface * { return new m32c_disassembler; } },
{ "m37710", le, 0, []() -> util::disasm_interface * { return new m7700_disassembler(&m7700_unidasm); } },
{ "m4510", le, 0, []() -> util::disasm_interface * { return new m4510_disassembler; } },