1 // license:BSD-3-Clause 2 // copyright-holders:David Shah, David Haywood 3 /*************************************************************************** 4 5 m6502_swap_op_d5_d6.h 6 7 6502 / N2A03 with instruction scrambling 8 9 ***************************************************************************/ 10 11 #ifndef MAME_M6502_SWAP_OP_D5_D6_H 12 #define MAME_M6502_SWAP_OP_D5_D6_H 13 14 #pragma once 15 16 #include "cpu/m6502/n2a03.h" 17 #include "cpu/m6502/n2a03d.h" 18 19 class m6502_swap_op_d5_d6 : public m6502_device { 20 public: 21 m6502_swap_op_d5_d6(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 22 23 protected: 24 class mi_decrypt : public mi_default { 25 public: 26 ~mi_decrypt()27 virtual ~mi_decrypt() {} 28 virtual uint8_t read_sync(uint16_t adr) override; 29 30 uint8_t descramble(uint8_t op); 31 }; 32 33 class disassembler : public m6502_disassembler { 34 public: 35 mi_decrypt *mintf; 36 37 disassembler(mi_decrypt *m); 38 virtual ~disassembler() = default; 39 virtual u32 interface_flags() const override; 40 virtual u8 decrypt8(u8 value, offs_t pc, bool opcode) const override; 41 }; 42 43 virtual void device_reset() override; 44 virtual void device_start() override; 45 virtual std::unique_ptr<util::disasm_interface> create_disassembler() override; 46 }; 47 48 class n2a03_core_swap_op_d5_d6 : public n2a03_core_device { 49 public: 50 n2a03_core_swap_op_d5_d6(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 51 52 protected: 53 class mi_decrypt : public mi_default { 54 public: 55 ~mi_decrypt()56 virtual ~mi_decrypt() {} 57 virtual uint8_t read_sync(uint16_t adr) override; 58 59 uint8_t descramble(uint8_t op); 60 }; 61 62 class disassembler : public n2a03_disassembler { 63 public: 64 mi_decrypt *mintf; 65 66 disassembler(mi_decrypt *m); 67 virtual ~disassembler() = default; 68 virtual u32 interface_flags() const override; 69 virtual u8 decrypt8(u8 value, offs_t pc, bool opcode) const override; 70 }; 71 72 virtual void device_reset() override; 73 virtual void device_start() override; 74 virtual std::unique_ptr<util::disasm_interface> create_disassembler() override; 75 }; 76 77 78 DECLARE_DEVICE_TYPE(M6502_SWAP_OP_D5_D6, m6502_swap_op_d5_d6) 79 DECLARE_DEVICE_TYPE(N2A03_CORE_SWAP_OP_D5_D6, n2a03_core_swap_op_d5_d6) 80 81 #endif // MAME_M6502_SWAP_OP_D5_D6_H 82