mirror of
https://github.com/holub/mame
synced 2025-04-20 15:32:45 +03:00
rw5000: separate b6000 disasm from b5000, add a5000 disasm
This commit is contained in:
parent
eb7bfe8450
commit
d6ae8ec921
@ -16,6 +16,8 @@ TODO:
|
||||
#include "emu.h"
|
||||
#include "b6000.h"
|
||||
|
||||
#include "rw5000d.h"
|
||||
|
||||
|
||||
DEFINE_DEVICE_TYPE(B6000, b6000_cpu_device, "b6000", "Rockwell B6000")
|
||||
|
||||
@ -37,6 +39,13 @@ void b6000_cpu_device::program_512x8(address_map &map)
|
||||
}
|
||||
|
||||
|
||||
// disasm
|
||||
std::unique_ptr<util::disasm_interface> b6000_cpu_device::create_disassembler()
|
||||
{
|
||||
return std::make_unique<b6000_disassembler>();
|
||||
}
|
||||
|
||||
|
||||
// initialize
|
||||
void b6000_cpu_device::device_reset()
|
||||
{
|
||||
|
@ -49,6 +49,9 @@ public:
|
||||
protected:
|
||||
b6000_cpu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, int prgwidth, address_map_constructor program, int datawidth, address_map_constructor data);
|
||||
|
||||
// device_disasm_interface overrides
|
||||
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_reset() override;
|
||||
|
||||
|
@ -44,7 +44,7 @@ void b6100_cpu_device::data_48x4(address_map &map)
|
||||
// disasm
|
||||
std::unique_ptr<util::disasm_interface> b6100_cpu_device::create_disassembler()
|
||||
{
|
||||
return std::make_unique<b5500_disassembler>();
|
||||
return std::make_unique<b6100_disassembler>();
|
||||
}
|
||||
|
||||
|
||||
|
@ -138,7 +138,39 @@ offs_t rw5000_common_disassembler::common_disasm(const u8 *lut_opmap, std::ostre
|
||||
}
|
||||
|
||||
|
||||
// B5000/B6000 disasm (for A5xxx, the only difference is ATBZ = MTD)
|
||||
// A5000/A5900 disasm
|
||||
|
||||
const u8 a5000_disassembler::a5000_opmap[0x100] =
|
||||
{
|
||||
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
|
||||
em_NOP, em_TC, 0, em_TKB, em_TDIN, em_TDIN, em_TDIN, em_TDIN, em_TM, em_TM, em_TM, em_TM, 0, 0, 0, 0, // 0
|
||||
em_SM, em_SM, em_SM, em_SM, em_RSM, em_RSM, em_RSM, em_RSM, em_RET, em_RET, em_RET, em_RET, 0, 0, 0, 0, // 1
|
||||
em_LB7, em_LB7, em_LB7, em_LB7, em_LB10, em_LB10, em_LB10, em_LB10, em_LB9, em_LB9, em_LB9, em_LB9, em_LB8, em_LB8, em_LB8, em_LB8, // 2
|
||||
em_TL, em_TL, em_TL, em_TL, em_TL, em_TL, em_TL, em_TL, 0, em_RSC, 0, em_SC, em_LB0, em_LB0, em_LB0, em_LB0, // 3
|
||||
|
||||
em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, // 4
|
||||
em_LDA, em_LDA, em_LDA, em_LDA, em_EXCP, em_EXCP, em_EXCP, em_EXCP, em_EXC0, em_EXC0, em_EXC0, em_EXC0, em_EXCM, em_EXCM, em_EXCM, em_EXCM, // 5
|
||||
em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_READ, // 6
|
||||
em_ADD, em_ADD, em_ADD, em_ADD, em_KSEG, 0, em_MTD, em_ATB, em_COMP, em_COMP, em_COMP, em_COMP, em_TAM, em_TAM, em_TAM, em_TAM, // 7
|
||||
|
||||
em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, // 8
|
||||
em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, // 9
|
||||
em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, // A
|
||||
em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, // B
|
||||
|
||||
em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, // C
|
||||
em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, // D
|
||||
em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, // E
|
||||
em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, // F
|
||||
};
|
||||
|
||||
offs_t a5000_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms)
|
||||
{
|
||||
return common_disasm(a5000_opmap, stream, pc, opcodes, params);
|
||||
}
|
||||
|
||||
|
||||
// B5000 disasm (A5000 + TKBS added, MTD removed)
|
||||
|
||||
const u8 b5000_disassembler::b5000_opmap[0x100] =
|
||||
{
|
||||
@ -148,6 +180,38 @@ const u8 b5000_disassembler::b5000_opmap[0x100] =
|
||||
em_LB7, em_LB7, em_LB7, em_LB7, em_LB10, em_LB10, em_LB10, em_LB10, em_LB9, em_LB9, em_LB9, em_LB9, em_LB8, em_LB8, em_LB8, em_LB8, // 2
|
||||
em_TL, em_TL, em_TL, em_TL, em_TL, em_TL, em_TL, em_TL, 0, em_RSC, 0, em_SC, em_LB0, em_LB0, em_LB0, em_LB0, // 3
|
||||
|
||||
em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, // 4
|
||||
em_LDA, em_LDA, em_LDA, em_LDA, em_EXCP, em_EXCP, em_EXCP, em_EXCP, em_EXC0, em_EXC0, em_EXC0, em_EXC0, em_EXCM, em_EXCM, em_EXCM, em_EXCM, // 5
|
||||
em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_READ, // 6
|
||||
em_ADD, em_ADD, em_ADD, em_ADD, em_KSEG, 0, 0, em_ATB, em_COMP, em_COMP, em_COMP, em_COMP, em_TAM, em_TAM, em_TAM, em_TAM, // 7
|
||||
|
||||
em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, // 8
|
||||
em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, // 9
|
||||
em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, // A
|
||||
em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, em_TRA0, // B
|
||||
|
||||
em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, // C
|
||||
em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, // D
|
||||
em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, // E
|
||||
em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, // F
|
||||
};
|
||||
|
||||
offs_t b5000_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms)
|
||||
{
|
||||
return common_disasm(b5000_opmap, stream, pc, opcodes, params);
|
||||
}
|
||||
|
||||
|
||||
// B6000 disasm (B5000 + ATBZ added)
|
||||
|
||||
const u8 b6000_disassembler::b6000_opmap[0x100] =
|
||||
{
|
||||
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
|
||||
em_NOP, em_TC, em_TKB, em_TKBS, em_TDIN, em_TDIN, em_TDIN, em_TDIN, em_TM, em_TM, em_TM, em_TM, 0, 0, 0, 0, // 0
|
||||
em_SM, em_SM, em_SM, em_SM, em_RSM, em_RSM, em_RSM, em_RSM, em_RET, em_RET, em_RET, em_RET, 0, 0, 0, 0, // 1
|
||||
em_LB7, em_LB7, em_LB7, em_LB7, em_LB10, em_LB10, em_LB10, em_LB10, em_LB9, em_LB9, em_LB9, em_LB9, em_LB8, em_LB8, em_LB8, em_LB8, // 2
|
||||
em_TL, em_TL, em_TL, em_TL, em_TL, em_TL, em_TL, em_TL, 0, em_RSC, 0, em_SC, em_LB0, em_LB0, em_LB0, em_LB0, // 3
|
||||
|
||||
em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, em_LAX, // 4
|
||||
em_LDA, em_LDA, em_LDA, em_LDA, em_EXCP, em_EXCP, em_EXCP, em_EXCP, em_EXC0, em_EXC0, em_EXC0, em_EXC0, em_EXCM, em_EXCM, em_EXCM, em_EXCM, // 5
|
||||
em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_ADX, em_READ, // 6
|
||||
@ -164,15 +228,15 @@ const u8 b5000_disassembler::b5000_opmap[0x100] =
|
||||
em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, // F
|
||||
};
|
||||
|
||||
offs_t b5000_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms)
|
||||
offs_t b6000_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms)
|
||||
{
|
||||
return common_disasm(b5000_opmap, stream, pc, opcodes, params);
|
||||
return common_disasm(b6000_opmap, stream, pc, opcodes, params);
|
||||
}
|
||||
|
||||
|
||||
// B5500/B6100 disasm (for A5xxx, the only difference is ATBZ = MTD)
|
||||
// B6100 disasm
|
||||
|
||||
const u8 b5500_disassembler::b5500_opmap[0x100] =
|
||||
const u8 b6100_disassembler::b6100_opmap[0x100] =
|
||||
{
|
||||
/* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
|
||||
em_NOP, em_TC, em_TKB, em_TKBS, em_TDIN, em_TDIN, em_TDIN, em_TDIN, em_TM, em_TM, em_TM, em_TM, em_SC, em_RSC, 0, 0, // 0
|
||||
@ -196,7 +260,7 @@ const u8 b5500_disassembler::b5500_opmap[0x100] =
|
||||
em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, em_TRA1, // F
|
||||
};
|
||||
|
||||
offs_t b5500_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms)
|
||||
offs_t b6100_disassembler::disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms)
|
||||
{
|
||||
return common_disasm(b5500_opmap, stream, pc, opcodes, params);
|
||||
return common_disasm(b6100_opmap, stream, pc, opcodes, params);
|
||||
}
|
||||
|
@ -49,6 +49,18 @@ protected:
|
||||
offs_t common_disasm(const u8 *lut_opmap, std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms);
|
||||
};
|
||||
|
||||
class a5000_disassembler : public rw5000_common_disassembler
|
||||
{
|
||||
public:
|
||||
a5000_disassembler() = default;
|
||||
virtual ~a5000_disassembler() = default;
|
||||
|
||||
virtual offs_t disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms) override;
|
||||
|
||||
private:
|
||||
static const u8 a5000_opmap[0x100];
|
||||
};
|
||||
|
||||
class b5000_disassembler : public rw5000_common_disassembler
|
||||
{
|
||||
public:
|
||||
@ -59,20 +71,30 @@ public:
|
||||
|
||||
private:
|
||||
static const u8 b5000_opmap[0x100];
|
||||
|
||||
};
|
||||
|
||||
class b5500_disassembler : public rw5000_common_disassembler
|
||||
class b6000_disassembler : public rw5000_common_disassembler
|
||||
{
|
||||
public:
|
||||
b5500_disassembler() = default;
|
||||
virtual ~b5500_disassembler() = default;
|
||||
b6000_disassembler() = default;
|
||||
virtual ~b6000_disassembler() = default;
|
||||
|
||||
virtual offs_t disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms) override;
|
||||
|
||||
private:
|
||||
static const u8 b5500_opmap[0x100];
|
||||
static const u8 b6000_opmap[0x100];
|
||||
};
|
||||
|
||||
class b6100_disassembler : public rw5000_common_disassembler
|
||||
{
|
||||
public:
|
||||
b6100_disassembler() = default;
|
||||
virtual ~b6100_disassembler() = default;
|
||||
|
||||
virtual offs_t disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms) override;
|
||||
|
||||
private:
|
||||
static const u8 b6100_opmap[0x100];
|
||||
};
|
||||
|
||||
#endif // MAME_CPU_RW5000_RW5000D_H
|
||||
|
@ -376,6 +376,7 @@ static const dasm_table_entry dasm_table[] =
|
||||
{ "alpha_unix", le, 0, []() -> util::disasm_interface * { return new alpha_disassembler(alpha_disassembler::TYPE_UNIX); } },
|
||||
{ "alpha_vms", le, 0, []() -> util::disasm_interface * { return new alpha_disassembler(alpha_disassembler::TYPE_VMS); } },
|
||||
{ "alto2", be, -2, []() -> util::disasm_interface * { return new alto2_disassembler; } },
|
||||
{ "a5000", le, 0, []() -> util::disasm_interface * { return new a5000_disassembler; } },
|
||||
{ "am29000", be, 0, []() -> util::disasm_interface * { return new am29000_disassembler; } },
|
||||
{ "amis2000", le, 0, []() -> util::disasm_interface * { return new amis2000_disassembler; } },
|
||||
{ "apexc", be, 0, []() -> util::disasm_interface * { return new apexc_disassembler; } },
|
||||
@ -392,7 +393,8 @@ static const dasm_table_entry dasm_table[] =
|
||||
{ "axc51core", le, 0, []() -> util::disasm_interface * { return new axc51core_disassembler; } },
|
||||
{ "axc208", le, 0, []() -> util::disasm_interface * { return new ax208_disassembler; } },
|
||||
{ "b5000", le, 0, []() -> util::disasm_interface * { return new b5000_disassembler; } },
|
||||
{ "b5500", le, 0, []() -> util::disasm_interface * { return new b5500_disassembler; } },
|
||||
{ "b6000", le, 0, []() -> util::disasm_interface * { return new b6000_disassembler; } },
|
||||
{ "b6100", le, 0, []() -> util::disasm_interface * { return new b6100_disassembler; } },
|
||||
{ "capricorn", le, 0, []() -> util::disasm_interface * { return new capricorn_disassembler; } },
|
||||
{ "ccpu", le, 0, []() -> util::disasm_interface * { return new ccpu_disassembler; } },
|
||||
{ "cdp1801", le, 0, []() -> util::disasm_interface * { return new cosmac_disassembler(cosmac_disassembler::TYPE_1801); } },
|
||||
|
Loading…
Reference in New Issue
Block a user