unidasm: Add disassembler for DEC VAX architecture

This commit is contained in:
AJR 2021-09-03 13:27:48 -04:00
parent 3845178bb4
commit fb6b0f0cc4
4 changed files with 1170 additions and 0 deletions

View File

@ -3251,6 +3251,16 @@ if opt_tool(CPUS, "DSP56000") then
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/dsp56000/dsp56000d.h")
end
--------------------------------------------------
-- DEC VAX, disassembler only
--@src/devices/cpu/vax/vax.h,CPUS["VAX"] = true
--------------------------------------------------
if opt_tool(CPUS, "VAX") then
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/vax/vaxdasm.cpp")
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/vax/vaxdasm.h")
end
--------------------------------------------------
-- DEC VT50/VT52
--@src/devices/cpu/vt50/vt50.h,CPUS["VT50"] = true

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,38 @@
// license:BSD-3-Clause
// copyright-holders:AJR
#ifndef MAME_CPU_VAX_VAXDASM_H
#define MAME_CPU_VAX_VAXDASM_H
#pragma once
class vax_disassembler : public util::disasm_interface
{
public:
enum class mode : u8;
struct opdef
{
std::string_view mnemonic;
mode operand[6];
u32 flags;
};
// construction/destruction
vax_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:
// internal helpers
void format_immediate(std::ostream &stream, u32 i) const;
void format_signed(std::ostream &stream, s32 value) const;
void format_relative(std::ostream &stream, u32 pc, s32 displ) const;
void format_register_mask(std::ostream &stream, u16 mask) const;
offs_t disassemble_inst(std::ostream &stream, const opdef &inst, offs_t &pc, offs_t ppc, const data_buffer &opcodes) const;
};
#endif // MAME_CPU_VAX_VAXDASM_H

View File

@ -185,6 +185,7 @@ using util::BIT;
#include "cpu/v60/v60d.h"
#include "cpu/v810/v810dasm.h"
#include "cpu/v850/v850dasm.h"
#include "cpu/vax/vaxdasm.h"
#include "cpu/vt50/vt50dasm.h"
#include "cpu/vt61/vt61dasm.h"
#include "cpu/we32000/we32100d.h"
@ -638,6 +639,7 @@ static const dasm_table_entry dasm_table[] =
{ "v850", le, 0, []() -> util::disasm_interface * { return new v850_disassembler; } },
{ "v850es", le, 0, []() -> util::disasm_interface * { return new v850es_disassembler; } },
{ "v850e2", le, 0, []() -> util::disasm_interface * { return new v850e2_disassembler; } },
{ "vax", le, 0, []() -> util::disasm_interface * { return new vax_disassembler; } },
{ "vt50", le, 0, []() -> util::disasm_interface * { return new vt50_disassembler; } },
{ "vt52", le, 0, []() -> util::disasm_interface * { return new vt52_disassembler; } },
{ "vt61", le, -1, []() -> util::disasm_interface * { return new vt61_disassembler; } },