powerpc: 601 has POWER and PowerPC instructions, allow both in disassembly. [R. Belmont]

This commit is contained in:
arbee 2024-12-29 07:58:15 -05:00
parent cd0bc5ac39
commit fef1df775a
3 changed files with 14 additions and 4 deletions

View File

@ -751,6 +751,9 @@ class ppc601_device : public ppc_device
{
public:
ppc601_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;
};

View File

@ -30,8 +30,8 @@ public:
I_POWERPC = 1 << 1,
};
powerpc_disassembler(bool powerpc = true)
: m_implementation(powerpc ? I_POWERPC : I_POWER)
powerpc_disassembler(implementation impl = I_POWERPC)
: m_implementation(impl)
{
};
virtual ~powerpc_disassembler() = default;
@ -157,7 +157,7 @@ class power_disassembler : public powerpc_disassembler
{
public:
power_disassembler()
: powerpc_disassembler(false)
: powerpc_disassembler(implementation::I_POWER)
{
};
};

View File

@ -285,6 +285,13 @@ ppc601_device::ppc601_device(const machine_config &mconfig, const char *tag, dev
{
}
std::unique_ptr<util::disasm_interface> ppc601_device::create_disassembler()
{
// 601 has both POWER and PowerPC instructions
printf("601 create_disassembler\n");
return std::make_unique<powerpc_disassembler>((powerpc_disassembler::implementation)(powerpc_disassembler::I_POWER|powerpc_disassembler::I_POWERPC));
}
ppc604_device::ppc604_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
: ppc_device(mconfig, PPC604, tag, owner, clock, 32, 64, PPC_MODEL_604, PPCCAP_OEA | PPCCAP_VEA | PPCCAP_FPU | PPCCAP_MISALIGNED | PPCCAP_604_MMU, 4, address_map_constructor())
{
@ -1219,7 +1226,7 @@ void ppc_device::device_reset()
std::unique_ptr<util::disasm_interface> ppc_device::create_disassembler()
{
return std::make_unique<powerpc_disassembler>();
return std::make_unique<powerpc_disassembler>(powerpc_disassembler::I_POWERPC);
}