mirror of
https://github.com/holub/mame
synced 2025-04-20 23:42:22 +03:00
unidasm: Add disassembler for M32C architecture
This commit is contained in:
parent
cc954c2ade
commit
04b59f8323
@ -1464,6 +1464,15 @@ if (CPUS["MELPS4"]~=null or _OPTIONS["with-tools"]) then
|
||||
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/melps4/melps4d.h")
|
||||
end
|
||||
|
||||
--------------------------------------------------
|
||||
-- Mitsubishi M32C, disassembler only
|
||||
--------------------------------------------------
|
||||
|
||||
if (_OPTIONS["with-tools"]) 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
|
||||
|
||||
--------------------------------------------------
|
||||
-- Mitsubishi M37702 and M37710 (based on 65C816)
|
||||
--@src/devices/cpu/m37710/m37710.h,CPUS["M37710"] = true
|
||||
|
1235
src/devices/cpu/m32c/m32cdasm.cpp
Normal file
1235
src/devices/cpu/m32c/m32cdasm.cpp
Normal file
File diff suppressed because it is too large
Load Diff
57
src/devices/cpu/m32c/m32cdasm.h
Normal file
57
src/devices/cpu/m32c/m32cdasm.h
Normal file
@ -0,0 +1,57 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:AJR
|
||||
|
||||
#ifndef MAME_CPU_M32C_M32CDASM_H
|
||||
#define MAME_CPU_M32C_M32CDASM_H
|
||||
|
||||
#pragma once
|
||||
|
||||
class m32c_disassembler : public util::disasm_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
m32c_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 ¶ms) override;
|
||||
|
||||
private:
|
||||
// static tables
|
||||
static const char *const s_aregs[4];
|
||||
static const char *const s_sregs_16bit[8];
|
||||
static const char *const s_sregs_24bit[8];
|
||||
static const char *const s_sregs_dma[8];
|
||||
static const char *const s_cnds[16];
|
||||
static const char *const s_dadd_ops[6];
|
||||
static const char *const s_bit_ops[8];
|
||||
static const char *const s_long_ops[4];
|
||||
static const char *const s_long_shift_ops[5];
|
||||
static const char *const s_imm1111_ops[8];
|
||||
static const char *const s_str_ops[4];
|
||||
static const char *const s_sstr_ops[4];
|
||||
static const char *const s_btst_ops[8];
|
||||
static const u8 s_short_code[4];
|
||||
|
||||
// formatting helpers
|
||||
void format_imm8(std::ostream &stream, u8 imm) const;
|
||||
void format_imm16(std::ostream &stream, u16 imm) const;
|
||||
void format_imm24(std::ostream &stream, u32 imm) const;
|
||||
void format_imm32(std::ostream &stream, u32 imm) const;
|
||||
void format_label(std::ostream &stream, u32 label) const;
|
||||
void format_imm_signed(std::ostream &stream, s32 imm) const;
|
||||
void format_relative(std::ostream &stream, const char *reg, s32 disp) const;
|
||||
|
||||
// internal helpers
|
||||
void dasm_abs16(std::ostream &stream, offs_t &pc, const data_buffer &opcodes) const;
|
||||
void dasm_abs24(std::ostream &stream, offs_t &pc, const data_buffer &opcodes) const;
|
||||
void dasm_operand(std::ostream &stream, offs_t &pc, const data_buffer &opcodes, u8 code, u8 size, bool indirect) const;
|
||||
void dasm_immediate_mode(std::ostream &stream, offs_t &pc, const data_buffer &opcodes, u8 code, u8 size, bool indirect, int count, bool signd) const;
|
||||
void dasm_00000001(std::ostream &stream, offs_t &pc, const data_buffer &opcodes, bool indirect_src, bool indirect_dest) const;
|
||||
void dasm_general(std::ostream &stream, offs_t &pc, offs_t &flags, const data_buffer &opcodes, u8 op1, bool indirect_src, bool indirect_dest) const;
|
||||
void dasm_1101(std::ostream &stream, offs_t &pc, const data_buffer &opcodes, u8 op1, bool indirect_src, bool indirect_dest) const;
|
||||
void dasm_111x(std::ostream &stream, offs_t &pc, const data_buffer &opcodes, u8 op1, bool indirect_dest) const;
|
||||
};
|
||||
|
||||
#endif // MAME_CPU_M32C_M32CDASM_H
|
@ -78,6 +78,7 @@ using util::BIT;
|
||||
#include "cpu/lc8670/lc8670dsm.h"
|
||||
#include "cpu/lh5801/5801dasm.h"
|
||||
#include "cpu/lr35902/lr35902d.h"
|
||||
#include "cpu/m32c/m32cdasm.h"
|
||||
#include "cpu/m37710/m7700ds.h"
|
||||
#include "cpu/m6502/m4510d.h"
|
||||
#include "cpu/m6502/m6502d.h"
|
||||
@ -451,6 +452,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; } },
|
||||
{ "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; } },
|
||||
{ "m58846", le, -1, []() -> util::disasm_interface * { return new melps4_disassembler; } },
|
||||
|
Loading…
Reference in New Issue
Block a user