summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/cpu/sm510/sm510d.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/cpu/sm510/sm510d.h')
-rw-r--r--src/devices/cpu/sm510/sm510d.h16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/devices/cpu/sm510/sm510d.h b/src/devices/cpu/sm510/sm510d.h
index 660471ad640..258d8205617 100644
--- a/src/devices/cpu/sm510/sm510d.h
+++ b/src/devices/cpu/sm510/sm510d.h
@@ -14,15 +14,15 @@
class sm510_common_disassembler : public util::disasm_interface
{
public:
- sm510_common_disassembler() = default;
+ sm510_common_disassembler();
virtual ~sm510_common_disassembler() = default;
virtual u32 opcode_alignment() const override { return 1; }
virtual u32 interface_flags() const override { return NONLINEAR_PC | PAGED2LEVEL; }
virtual u32 page_address_bits() const override { return 6; }
virtual u32 page2_address_bits() const override { return 4; }
- virtual offs_t pc_linear_to_real(offs_t pc) const override;
- virtual offs_t pc_real_to_linear(offs_t pc) const override;
+ virtual offs_t pc_linear_to_real(offs_t pc) const override { return (pc & ~0x3f) | m_l2r6[pc & 0x3f]; }
+ virtual offs_t pc_real_to_linear(offs_t pc) const override { return (pc & ~0x3f) | m_r2l6[pc & 0x3f]; }
protected:
enum e_mnemonics
@@ -62,6 +62,12 @@ protected:
static const u8 s_bits[];
static const u32 s_flags[];
+ u8 m_l2r6[0x40];
+ u8 m_r2l6[0x40];
+ u8 m_l2r7[0x80];
+ u8 m_r2l7[0x80];
+
+ offs_t increment_pc(offs_t pc, u8 pclen);
offs_t common_disasm(const u8 *lut_mnemonic, const u8 *lut_extended, std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer &params, const u8 pclen);
};
@@ -141,8 +147,8 @@ public:
virtual u32 page_address_bits() const override { return 7; }
virtual u32 page2_address_bits() const override { return 2; }
- virtual offs_t pc_linear_to_real(offs_t pc) const override;
- virtual offs_t pc_real_to_linear(offs_t pc) const override;
+ virtual offs_t pc_linear_to_real(offs_t pc) const override { return (pc & ~0x7f) | m_l2r7[pc & 0x7f]; }
+ virtual offs_t pc_real_to_linear(offs_t pc) const override { return (pc & ~0x7f) | m_r2l7[pc & 0x7f]; }
private:
static const u8 sm590_mnemonic[0x100];