Decrypt KONAMI1 opcodes in the debugger [smf]

This commit is contained in:
smf- 2019-08-16 20:42:34 +01:00
parent 67a34e360f
commit 3d3f35ad64
2 changed files with 36 additions and 0 deletions

View File

@ -23,6 +23,30 @@ void konami1_device::device_start()
m6809_base_device::device_start();
}
u32 konami1_device::disassembler::interface_flags() const
{
return SPLIT_DECRYPTION;
}
u8 konami1_device::disassembler::decrypt8(u8 value, offs_t pc, bool opcode) const
{
if (!opcode || pc < m_boundary)
return value;
switch (pc & 0xa) {
default:
case 0x0: return value ^ 0x22;
case 0x2: return value ^ 0x82;
case 0x8: return value ^ 0x28;
case 0xa: return value ^ 0x88;
}
return value;
}
std::unique_ptr<util::disasm_interface> konami1_device::create_disassembler()
{
return std::make_unique<disassembler>(m_boundary);
}
void konami1_device::set_encryption_boundary(uint16_t adr)
{
m_boundary = adr;

View File

@ -7,6 +7,7 @@
#include "cpu/m6809/m6809.h"
#include "cpu/m6809/6x09dasm.h"
class konami1_device : public m6809_base_device {
public:
@ -23,9 +24,20 @@ protected:
virtual uint8_t read_opcode(uint16_t adr) override;
};
class disassembler : public m6809_disassembler {
public:
uint16_t m_boundary;
disassembler(uint16_t boundary) : m6809_disassembler(), m_boundary(boundary) {}
virtual ~disassembler() = default;
virtual u32 interface_flags() const override;
virtual u8 decrypt8(u8 value, offs_t pc, bool opcode) const override;
};
uint16_t m_boundary;
virtual void device_start() override;
virtual std::unique_ptr<util::disasm_interface> create_disassembler() override;
};
DECLARE_DEVICE_TYPE(KONAMI1, konami1_device)