diff options
Diffstat (limited to 'src/devices/cpu/sm510/sm510d.h')
-rw-r--r-- | src/devices/cpu/sm510/sm510d.h | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/devices/cpu/sm510/sm510d.h b/src/devices/cpu/sm510/sm510d.h index a29a1f201a0..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 ¶ms, const u8 pclen); }; @@ -125,6 +131,8 @@ public: virtual offs_t disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms) override; + virtual u32 interface_flags() const override { return NONLINEAR_PC | PAGED; } + private: static const u8 sm530_mnemonic[0x100]; }; @@ -139,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]; |