unidasm: Add disassemblers for ST9 and ST9+ architectures

This commit is contained in:
AJR 2023-06-18 16:48:00 -04:00
parent 2e8f61b754
commit e2edca4404
4 changed files with 1476 additions and 0 deletions

View File

@ -3833,3 +3833,13 @@ if opt_tool(CPUS, "INTERDATA16") then
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/interdata16/dasm16.cpp")
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/interdata16/dasm16.h")
end
--------------------------------------------------
-- SGS-Thomson ST9, disassembler only
--@src/devices/cpu/st9/st9.h,CPUS["ST9"] = true
--------------------------------------------------
if opt_tool(CPUS, "ST9") then
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/st9/st9dasm.cpp")
table.insert(disasm_files , MAME_DIR .. "src/devices/cpu/st9/st9dasm.h")
end

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,90 @@
// license:BSD-3-Clause
// copyright-holders:AJR
#ifndef MAME_CPU_ST9_ST9DASM_H
#define MAME_CPU_ST9_ST9DASM_H
#pragma once
class st9_disassembler : public util::disasm_interface
{
public:
// construction/destruction
st9_disassembler();
protected:
// util::disasm_interface 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;
// formatting helpers
void format_dir(std::ostream &stream, u8 r) const;
void format_dirw(std::ostream &stream, u8 rr) const;
void format_imm(std::ostream &stream, u8 n) const;
void format_immw(std::ostream &stream, u16 n) const;
void format_disp(std::ostream &stream, s8 n) const;
void format_dispw(std::ostream &stream, u16 nn) const;
void format_label(std::ostream &stream, u16 nn) const;
// disassembly helpers
offs_t dasm_unknown(std::ostream &stream, u8 opc) const;
offs_t dasm_06(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_0f(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_1f(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_26(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_2f(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_36(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
virtual offs_t dasm_3f(std::ostream &stream, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_60(std::ostream &stream, u8 byte1, u8 byte2) const;
offs_t dasm_6f(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_72(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
virtual offs_t dasm_73(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_74(std::ostream &stream, u8 byte1) const;
virtual offs_t dasm_75(std::ostream &stream, u8 byte1) const;
offs_t dasm_7e(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_7f(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_86(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_8f(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_96(std::ostream &stream, u8 byte1, u8 byte2) const;
offs_t dasm_a6(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_b4(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
virtual offs_t dasm_b6(std::ostream &stream, u8 opc, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_be(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_bf(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_c2(std::ostream &stream, u8 opc, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_c4(std::ostream &stream, u8 opc, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_c6(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_c7(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_cf(std::ostream &stream, u8 opc, u8 byte1) const;
virtual offs_t dasm_d4(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_d5(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_e2(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_e6(std::ostream &stream, u8 byte1, u8 byte2) const;
offs_t dasm_e7(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_ef(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_f2(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
offs_t dasm_f3(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const;
virtual offs_t dasm_f6(std::ostream &stream, u8 byte1) const;
};
class st9p_disassembler : public st9_disassembler
{
public:
// construction/destruction
using st9_disassembler::st9_disassembler;
protected:
// util::disasm_interface overrides
virtual u32 interface_flags() const override;
virtual u32 page_address_bits() const override;
// st9_disassembler overrides
virtual offs_t dasm_3f(std::ostream &stream, offs_t pc, const data_buffer &opcodes) const override;
virtual offs_t dasm_73(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const override;
virtual offs_t dasm_75(std::ostream &stream, u8 byte1) const override;
virtual offs_t dasm_b6(std::ostream &stream, u8 opc, u8 byte1, offs_t pc, const data_buffer &opcodes) const override;
virtual offs_t dasm_d4(std::ostream &stream, u8 byte1, offs_t pc, const data_buffer &opcodes) const override;
virtual offs_t dasm_f6(std::ostream &stream, u8 byte1) const override;
};
#endif // MAME_CPU_ST9_ST9DASM_H

View File

@ -164,6 +164,7 @@ using util::BIT;
#include "cpu/ssem/ssemdasm.h"
#include "cpu/ssp1601/ssp1601d.h"
#include "cpu/st62xx/st62xx_dasm.h"
#include "cpu/st9/st9dasm.h"
#include "cpu/superfx/sfx_dasm.h"
#include "cpu/t11/t11dasm.h"
#include "cpu/tlcs870/tlcs870d.h"
@ -605,6 +606,8 @@ static const dasm_table_entry dasm_table[] =
{ "ssem", le, 0, []() -> util::disasm_interface * { return new ssem_disassembler; } },
{ "ssp1601", be, -1, []() -> util::disasm_interface * { return new ssp1601_disassembler; } },
{ "st62xx", le, 0, []() -> util::disasm_interface * { return new st62xx_disassembler; } },
{ "st9", be, 0, []() -> util::disasm_interface * { return new st9_disassembler; } },
{ "st9p", be, 0, []() -> util::disasm_interface * { return new st9p_disassembler; } },
{ "superfx", le, 0, []() -> util::disasm_interface * { return new superfx_disassembler(&superfx_unidasm); } },
{ "t11", le, 0, []() -> util::disasm_interface * { return new t11_disassembler; } },
{ "tlcs870", le, 0, []() -> util::disasm_interface * { return new tlcs870_disassembler; } },