unidasm: Add disassembler for Tensilica Xtensa architecture

This commit is contained in:
AJR 2023-11-22 08:56:17 -05:00
parent 7d4de65b7b
commit 428fbb7c55
4 changed files with 1207 additions and 0 deletions

View File

@ -3909,3 +3909,13 @@ if opt_tool(CPUS, "EVOLUTION") then
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/evolution/evod.cpp")
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/evolution/evod.h")
end
--------------------------------------------------
-- Tensilica Xtensa, disassembler only
--@src/devices/cpu/xtensa/xtensa.h,CPUS["XTENSA"] = true
--------------------------------------------------
if opt_tool(CPUS, "XTENSA") then
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/xtensa/xtensad.cpp")
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/xtensa/xtensad.h")
end

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,27 @@
// license:BSD-3-Clause
// copyright-holders:AJR
#ifndef MAME_CPU_XTENSA_XTENSAD_H
#define MAME_CPU_XTENSA_XTENSAD_H
#pragma once
class xtensa_disassembler : public util::disasm_interface
{
public:
// construction/destruction
xtensa_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:
// formatting helpers
static void format_imm(std::ostream &stream, u32 imm);
static std::string special_reg(u8 n, bool wsr);
};
#endif // MAME_CPU_XTENSA_XTENSAD_H

View File

@ -205,6 +205,7 @@ using util::BIT;
#include "cpu/vt61/vt61dasm.h"
#include "cpu/we32000/we32100d.h"
#include "cpu/xavix2/xavix2d.h"
#include "cpu/xtensa/xtensad.h"
#include "cpu/z180/z180dasm.h"
#include "cpu/z8/z8dasm.h"
#include "cpu/z80/z80dasm.h"
@ -714,6 +715,7 @@ static const dasm_table_entry dasm_table[] =
{ "xavix2000", le, 0, []() -> util::disasm_interface * { return new xavix2000_disassembler; } },
{ "xavix2", le, 0, []() -> util::disasm_interface * { return new xavix2_disassembler; } },
{ "xerox530", be, -1, []() -> util::disasm_interface * { return new xerox530_disassembler; } },
{ "xtensa", le, 0, []() -> util::disasm_interface * { return new xtensa_disassembler; } },
{ "z180", le, 0, []() -> util::disasm_interface * { return new z180_disassembler; } },
{ "z8", be, 0, []() -> util::disasm_interface * { return new z8_disassembler; } },
{ "z80", le, 0, []() -> util::disasm_interface * { return new z80_disassembler; } },