mirror of
https://github.com/holub/mame
synced 2025-04-26 18:23:08 +03:00
mcs51: Disassembler update
- Restore some 8052 SFR and bit names that were inadvertently omitted for more advanced models - Add a few more T2-related names - Add i8xc51fx and i8xc51gb disassemblers with additional SFR and bit names - Remove i80c51 from unidasm (actual differences from i8051 are not significant) Change device names from "Intel I8xxx" to "Intel 8xxx" (nw) scm_500: Identify CPU type as 80C51GB (specific differences obviously not emulated) (nw) unidasm: Realphabetize mips1 (nw)
This commit is contained in:
parent
1fc13da750
commit
05993b1f31
@ -222,19 +222,20 @@ enum
|
||||
};
|
||||
|
||||
|
||||
DEFINE_DEVICE_TYPE(I8031, i8031_device, "i8031", "Intel I8031")
|
||||
DEFINE_DEVICE_TYPE(I8032, i8032_device, "i8032", "Intel I8032")
|
||||
DEFINE_DEVICE_TYPE(I8051, i8051_device, "i8051", "Intel I8051")
|
||||
DEFINE_DEVICE_TYPE(I8751, i8751_device, "i8751", "Intel I8751")
|
||||
DEFINE_DEVICE_TYPE(I8031, i8031_device, "i8031", "Intel 8031")
|
||||
DEFINE_DEVICE_TYPE(I8032, i8032_device, "i8032", "Intel 8032")
|
||||
DEFINE_DEVICE_TYPE(I8051, i8051_device, "i8051", "Intel 8051")
|
||||
DEFINE_DEVICE_TYPE(I8751, i8751_device, "i8751", "Intel 8751")
|
||||
DEFINE_DEVICE_TYPE(AM8753, am8753_device, "am8753", "AMD Am8753")
|
||||
DEFINE_DEVICE_TYPE(I8052, i8052_device, "i8052", "Intel I8052")
|
||||
DEFINE_DEVICE_TYPE(I8752, i8752_device, "i8752", "Intel I8752")
|
||||
DEFINE_DEVICE_TYPE(I80C31, i80c31_device, "i80c31", "Intel I80C31")
|
||||
DEFINE_DEVICE_TYPE(I80C51, i80c51_device, "i80c51", "Intel I80C51")
|
||||
DEFINE_DEVICE_TYPE(I87C51, i87c51_device, "i87c51", "Intel I87C51")
|
||||
DEFINE_DEVICE_TYPE(I80C32, i80c32_device, "i80c32", "Intel I80C32")
|
||||
DEFINE_DEVICE_TYPE(I80C52, i80c52_device, "i80c52", "Intel I80C52")
|
||||
DEFINE_DEVICE_TYPE(I87C52, i87c52_device, "i87c52", "Intel I87C52")
|
||||
DEFINE_DEVICE_TYPE(I8052, i8052_device, "i8052", "Intel 8052")
|
||||
DEFINE_DEVICE_TYPE(I8752, i8752_device, "i8752", "Intel 8752")
|
||||
DEFINE_DEVICE_TYPE(I80C31, i80c31_device, "i80c31", "Intel 80C31")
|
||||
DEFINE_DEVICE_TYPE(I80C51, i80c51_device, "i80c51", "Intel 80C51")
|
||||
DEFINE_DEVICE_TYPE(I87C51, i87c51_device, "i87c51", "Intel 87C51")
|
||||
DEFINE_DEVICE_TYPE(I80C32, i80c32_device, "i80c32", "Intel 80C32")
|
||||
DEFINE_DEVICE_TYPE(I80C52, i80c52_device, "i80c52", "Intel 80C52")
|
||||
DEFINE_DEVICE_TYPE(I87C52, i87c52_device, "i87c52", "Intel 87C52")
|
||||
DEFINE_DEVICE_TYPE(I80C51GB, i80c51gb_device, "i80c51gb", "Intel 80C51GB")
|
||||
DEFINE_DEVICE_TYPE(AT89C52, at89c52_device, "at89c52", "Atmel AT89C52")
|
||||
DEFINE_DEVICE_TYPE(AT89S52, at89s52_device, "at89s52", "Atmel AT89S52")
|
||||
DEFINE_DEVICE_TYPE(AT89C4051, at89c4051_device, "at89c4051", "Atmel AT89C4051")
|
||||
@ -371,6 +372,11 @@ i87c52_device::i87c52_device(const machine_config &mconfig, const char *tag, dev
|
||||
{
|
||||
}
|
||||
|
||||
i80c51gb_device::i80c51gb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: i80c52_device(mconfig, I80C51GB, tag, owner, clock, 0, 8)
|
||||
{
|
||||
}
|
||||
|
||||
at89c52_device::at89c52_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: i80c52_device(mconfig, AT89C52, tag, owner, clock, 13, 8)
|
||||
{
|
||||
@ -2521,6 +2527,11 @@ std::unique_ptr<util::disasm_interface> i80c52_device::create_disassembler()
|
||||
return std::make_unique<i80c52_disassembler>();
|
||||
}
|
||||
|
||||
std::unique_ptr<util::disasm_interface> i80c51gb_device::create_disassembler()
|
||||
{
|
||||
return std::make_unique<i8xc51gb_disassembler>();
|
||||
}
|
||||
|
||||
std::unique_ptr<util::disasm_interface> ds5002fp_device::create_disassembler()
|
||||
{
|
||||
return std::make_unique<ds5002fp_disassembler>();
|
||||
|
@ -339,6 +339,7 @@ DECLARE_DEVICE_TYPE(I87C51, i87c51_device)
|
||||
DECLARE_DEVICE_TYPE(I80C32, i80c32_device)
|
||||
DECLARE_DEVICE_TYPE(I80C52, i80c52_device)
|
||||
DECLARE_DEVICE_TYPE(I87C52, i87c52_device)
|
||||
DECLARE_DEVICE_TYPE(I80C51GB, i80c51gb_device)
|
||||
DECLARE_DEVICE_TYPE(AT89C52, at89c52_device)
|
||||
DECLARE_DEVICE_TYPE(AT89S52, at89s52_device)
|
||||
/* 4k internal perom and 128 internal ram and 2 analog comparators */
|
||||
@ -467,6 +468,16 @@ public:
|
||||
i87c52_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
};
|
||||
|
||||
class i80c51gb_device : public i80c52_device
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
i80c51gb_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
|
||||
};
|
||||
|
||||
class at89c52_device : public i80c52_device
|
||||
{
|
||||
public:
|
||||
|
@ -153,6 +153,9 @@ const mcs51_disassembler::mem_info mcs51_disassembler::i8052_names[] = {
|
||||
{ 0x1ad, "et2" },
|
||||
{ 0x1bd, "pt2" },
|
||||
|
||||
{ 0x190, "t2" },
|
||||
{ 0x191, "t2ex" },
|
||||
|
||||
{ 0x1c8, "cprl2" },
|
||||
{ 0x1c9, "ct2" },
|
||||
{ 0x1ca, "tr2" },
|
||||
@ -169,6 +172,120 @@ const mcs51_disassembler::mem_info mcs51_disassembler::i80c52_names[] = {
|
||||
{ 0xb7, "iph" },
|
||||
{ 0xa9, "saddr" },
|
||||
{ 0xb9, "saden" },
|
||||
{ 0xc9, "t2mod" },
|
||||
|
||||
{ -1 }
|
||||
};
|
||||
|
||||
const mcs51_disassembler::mem_info mcs51_disassembler::i8xc51fx_names[] = {
|
||||
{ 0xd8, "ccon" },
|
||||
{ 0xd9, "cmod" },
|
||||
{ 0xe9, "cl" },
|
||||
{ 0xf9, "ch" },
|
||||
{ 0xda, "ccapm0" },
|
||||
{ 0xdb, "ccapm1" },
|
||||
{ 0xdc, "ccapm2" },
|
||||
{ 0xdd, "ccapm3" },
|
||||
{ 0xde, "ccapm4" },
|
||||
{ 0xea, "ccap0l" },
|
||||
{ 0xfa, "ccap0h" },
|
||||
{ 0xeb, "ccap1l" },
|
||||
{ 0xfb, "ccap1h" },
|
||||
{ 0xec, "ccap2l" },
|
||||
{ 0xfc, "ccap2h" },
|
||||
{ 0xed, "ccap3l" },
|
||||
{ 0xfd, "ccap3h" },
|
||||
{ 0xee, "ccap4l" },
|
||||
{ 0xfe, "ccap4h" },
|
||||
|
||||
{ 0x192, "eci" },
|
||||
{ 0x193, "cex0" },
|
||||
{ 0x194, "cex1" },
|
||||
{ 0x195, "cex2" },
|
||||
{ 0x196, "cex3" },
|
||||
{ 0x197, "cex4" },
|
||||
|
||||
{ 0x1ae, "ec" },
|
||||
{ 0x1be, "ppc" },
|
||||
|
||||
{ 0x1d8, "ccf0" },
|
||||
{ 0x1d9, "ccf1" },
|
||||
{ 0x1da, "ccf2" },
|
||||
{ 0x1db, "ccf3" },
|
||||
{ 0x1dc, "ccf4" },
|
||||
{ 0x1de, "cr" },
|
||||
{ 0x1df, "cf" },
|
||||
};
|
||||
|
||||
const mcs51_disassembler::mem_info mcs51_disassembler::i8xc51gb_names[] = {
|
||||
{ 0x84, "ad0" },
|
||||
{ 0x94, "ad1" },
|
||||
{ 0xa4, "ad2" },
|
||||
{ 0xb4, "ad3" },
|
||||
{ 0xc4, "ad4" },
|
||||
{ 0xd4, "ad5" },
|
||||
{ 0xe4, "ad6" },
|
||||
{ 0xf4, "ad7" },
|
||||
{ 0x85, "acon" },
|
||||
{ 0xc7, "acmp" },
|
||||
|
||||
{ 0xe8, "c1con" },
|
||||
{ 0x9f, "c1mod" },
|
||||
{ 0xaf, "cl1" },
|
||||
{ 0xbf, "ch1" },
|
||||
{ 0x9a, "c1capm0"},
|
||||
{ 0x9b, "c1capm1"},
|
||||
{ 0x9c, "c1capm2"},
|
||||
{ 0x9d, "c1capm3"},
|
||||
{ 0x9e, "c1capm4"},
|
||||
{ 0xaa, "c1cap0l"},
|
||||
{ 0xba, "c1cap0h"},
|
||||
{ 0xab, "c1cap1l"},
|
||||
{ 0xbb, "c1cap1h"},
|
||||
{ 0xac, "c1cap2l"},
|
||||
{ 0xbc, "c1cap2h"},
|
||||
{ 0xad, "c1cap3l"},
|
||||
{ 0xbd, "c1cap3h"},
|
||||
{ 0xae, "c1cap4l"},
|
||||
{ 0xbe, "c1cap4h"},
|
||||
|
||||
{ 0xc6, "exicon" },
|
||||
{ 0xa7, "iea" },
|
||||
{ 0xb6, "ipa" },
|
||||
{ 0xb5, "ipah" },
|
||||
|
||||
{ 0xa5, "oscr" },
|
||||
{ 0xa6, "wdtrst" },
|
||||
|
||||
{ 0xc0, "p4" },
|
||||
{ 0xf8, "p5" },
|
||||
|
||||
{ 0xd7, "sepcon" },
|
||||
{ 0xe7, "sepdat" },
|
||||
{ 0xf7, "sepstat"},
|
||||
|
||||
{ 0x1c0, "sepclk" },
|
||||
{ 0x1c1, "sepdat" },
|
||||
{ 0x1c2, "eci1" },
|
||||
{ 0x1c3, "c1ex0" },
|
||||
{ 0x1c4, "c1ex1" },
|
||||
{ 0x1c5, "c1ex2" },
|
||||
{ 0x1c6, "c1ex3" },
|
||||
{ 0x1c7, "c1ex4" },
|
||||
|
||||
{ 0x1e8, "c1cf0" },
|
||||
{ 0x1e9, "c1cf1" },
|
||||
{ 0x1ea, "c1cf2" },
|
||||
{ 0x1eb, "c1cf3" },
|
||||
{ 0x1ec, "c1cf4" },
|
||||
{ 0x1ee, "cr1" },
|
||||
{ 0x1ef, "cf1" },
|
||||
|
||||
{ 0x1fa, "int2" },
|
||||
{ 0x1fb, "int3" },
|
||||
{ 0x1fc, "int4" },
|
||||
{ 0x1fd, "int5" },
|
||||
{ 0x1fe, "int6" },
|
||||
|
||||
{ -1 }
|
||||
};
|
||||
@ -272,10 +389,7 @@ std::string mcs51_disassembler::get_bit_address( uint8_t arg ) const
|
||||
if(arg < 0x80)
|
||||
{
|
||||
//Bit address 0-7F can be referred to as 20.0, 20.1, to 20.7 for address 0, and 2f.0,2f.1 to 2f.7 for address 7f
|
||||
if(arg < 0x7f)
|
||||
return util::string_format("$%02X.%d", (arg >> 3) | 0x20, arg & 0x07);
|
||||
else
|
||||
return util::string_format("$%02X", arg);
|
||||
return util::string_format("$%02X.%d", (arg >> 3) | 0x20, arg & 0x07);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1122,14 +1236,22 @@ i8052_disassembler::i8052_disassembler() : mcs51_disassembler(default_names, i80
|
||||
{
|
||||
}
|
||||
|
||||
i80c51_disassembler::i80c51_disassembler() : mcs51_disassembler(default_names, i80c52_names)
|
||||
i80c51_disassembler::i80c51_disassembler() : mcs51_disassembler(default_names)
|
||||
{
|
||||
}
|
||||
|
||||
i80c52_disassembler::i80c52_disassembler() : mcs51_disassembler(default_names, i80c52_names, i80c52_names)
|
||||
i80c52_disassembler::i80c52_disassembler() : mcs51_disassembler(default_names, i8052_names, i80c52_names)
|
||||
{
|
||||
}
|
||||
|
||||
ds5002fp_disassembler::ds5002fp_disassembler() : mcs51_disassembler(default_names, i80c52_names, ds5002fp_names, i8xc751_names)
|
||||
i8xc51fx_disassembler::i8xc51fx_disassembler() : mcs51_disassembler(default_names, i8052_names, i80c52_names, i8xc51fx_names)
|
||||
{
|
||||
}
|
||||
|
||||
i8xc51gb_disassembler::i8xc51gb_disassembler() : mcs51_disassembler(default_names, i8052_names, i80c52_names, i8xc51fx_names, i8xc51gb_names)
|
||||
{
|
||||
}
|
||||
|
||||
ds5002fp_disassembler::ds5002fp_disassembler() : mcs51_disassembler(default_names, i8052_names, i80c52_names, ds5002fp_names, i8xc751_names)
|
||||
{
|
||||
}
|
||||
|
@ -42,6 +42,8 @@ public:
|
||||
static const mem_info default_names[];
|
||||
static const mem_info i8052_names[];
|
||||
static const mem_info i80c52_names[];
|
||||
static const mem_info i8xc51fx_names[];
|
||||
static const mem_info i8xc51gb_names[];
|
||||
static const mem_info ds5002fp_names[];
|
||||
static const mem_info i8xc751_names[];
|
||||
|
||||
@ -101,6 +103,20 @@ public:
|
||||
virtual ~i80c52_disassembler() = default;
|
||||
};
|
||||
|
||||
class i8xc51fx_disassembler : public mcs51_disassembler
|
||||
{
|
||||
public:
|
||||
i8xc51fx_disassembler();
|
||||
virtual ~i8xc51fx_disassembler() = default;
|
||||
};
|
||||
|
||||
class i8xc51gb_disassembler : public mcs51_disassembler
|
||||
{
|
||||
public:
|
||||
i8xc51gb_disassembler();
|
||||
virtual ~i8xc51gb_disassembler() = default;
|
||||
};
|
||||
|
||||
class ds5002fp_disassembler : public mcs51_disassembler
|
||||
{
|
||||
public:
|
||||
|
@ -11,24 +11,34 @@ http://www.standardchange.com/frequently-asked-questions
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
#include "cpu/mcs51/mcs51.h"
|
||||
|
||||
class scm_500_state : public driver_device
|
||||
{
|
||||
public:
|
||||
scm_500_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||
: driver_device(mconfig, type, tag)
|
||||
// ,m_maincpu(*this, "maincpu")
|
||||
{ }
|
||||
, m_maincpu(*this, "maincpu")
|
||||
{
|
||||
}
|
||||
|
||||
void scm_500(machine_config &config);
|
||||
|
||||
private:
|
||||
void prog_map(address_map &map);
|
||||
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
// required_device<cpu_device> m_maincpu;
|
||||
|
||||
required_device<mcs51_cpu_device> m_maincpu;
|
||||
};
|
||||
|
||||
|
||||
void scm_500_state::prog_map(address_map &map)
|
||||
{
|
||||
map(0x0000, 0xffff).rom().region("maincpu", 0);
|
||||
}
|
||||
|
||||
static INPUT_PORTS_START( scm_500 )
|
||||
INPUT_PORTS_END
|
||||
|
||||
@ -42,7 +52,8 @@ void scm_500_state::machine_reset()
|
||||
|
||||
void scm_500_state::scm_500(machine_config &config)
|
||||
{
|
||||
// unknown CPU
|
||||
I80C51GB(config, m_maincpu, 12'000'000); // unknown clock
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &scm_500_state::prog_map);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -381,11 +381,12 @@ static const dasm_table_entry dasm_table[] =
|
||||
{ "i8052", le, 0, []() -> util::disasm_interface * { return new i8052_disassembler; } },
|
||||
{ "i8085", le, 0, []() -> util::disasm_interface * { return new i8085_disassembler; } },
|
||||
{ "i8089", le, 0, []() -> util::disasm_interface * { return new i8089_disassembler; } },
|
||||
{ "i80c51", le, 0, []() -> util::disasm_interface * { return new i80c51_disassembler; } },
|
||||
{ "i80c52", le, 0, []() -> util::disasm_interface * { return new i80c52_disassembler; } },
|
||||
{ "i860", le, 0, []() -> util::disasm_interface * { return new i860_disassembler; } },
|
||||
{ "i8x9x", le, 0, []() -> util::disasm_interface * { return new i8x9x_disassembler; } },
|
||||
{ "i8xc196", le, 0, []() -> util::disasm_interface * { return new i8xc196_disassembler; } },
|
||||
{ "i8xc51fx", le, 0, []() -> util::disasm_interface * { return new i8xc51fx_disassembler; } },
|
||||
{ "i8xc51gb", le, 0, []() -> util::disasm_interface * { return new i8xc51gb_disassembler; } },
|
||||
{ "i960", le, 0, []() -> util::disasm_interface * { return new i960_disassembler; } },
|
||||
{ "ie15", le, 0, []() -> util::disasm_interface * { return new ie15_disassembler; } },
|
||||
{ "jaguardsp", be, 0, []() -> util::disasm_interface * { return new jaguar_disassembler(jaguar_disassembler::variant::DSP); } },
|
||||
@ -424,6 +425,8 @@ static const dasm_table_entry dasm_table[] =
|
||||
{ "mb88", le, 0, []() -> util::disasm_interface * { return new mb88_disassembler; } },
|
||||
{ "mcs48", le, 0, []() -> util::disasm_interface * { return new mcs48_disassembler(false, false); } },
|
||||
{ "minx", le, 0, []() -> util::disasm_interface * { return new minx_disassembler; } },
|
||||
{ "mips1be", be, 0, []() -> util::disasm_interface * { return new mips1_disassembler; } },
|
||||
{ "mips1le", le, 0, []() -> util::disasm_interface * { return new mips1_disassembler; } },
|
||||
{ "mips3be", be, 0, []() -> util::disasm_interface * { return new mips3_disassembler; } },
|
||||
{ "mips3le", le, 0, []() -> util::disasm_interface * { return new mips3_disassembler; } },
|
||||
{ "mn10200", le, 0, []() -> util::disasm_interface * { return new mn10200_disassembler; } },
|
||||
@ -440,8 +443,6 @@ static const dasm_table_entry dasm_table[] =
|
||||
{ "powerpc", be, 0, []() -> util::disasm_interface * { return new powerpc_disassembler; } },
|
||||
{ "pps4", le, 0, []() -> util::disasm_interface * { return new pps4_disassembler; } },
|
||||
{ "psxcpu", le, 0, []() -> util::disasm_interface * { return new psxcpu_disassembler; } },
|
||||
{ "mips1be", be, 0, []() -> util::disasm_interface * { return new mips1_disassembler; } },
|
||||
{ "mips1le", le, 0, []() -> util::disasm_interface * { return new mips1_disassembler; } },
|
||||
{ "rii", le, -1, []() -> util::disasm_interface * { return new riscii_disassembler; } },
|
||||
{ "rsp", le, 0, []() -> util::disasm_interface * { return new rsp_disassembler; } },
|
||||
{ "s2650", le, 0, []() -> util::disasm_interface * { return new s2650_disassembler(&s2650_unidasm); } },
|
||||
|
Loading…
Reference in New Issue
Block a user