1 // license:BSD-3-Clause 2 // copyright-holders:Nigel Barnes 3 /********************************************************************* 4 5 Romantic Robot Multiface One/128/3 6 7 *********************************************************************/ 8 #ifndef MAME_BUS_SPECTRUM_MFACE_H 9 #define MAME_BUS_SPECTRUM_MFACE_H 10 11 #include "exp.h" 12 13 14 //************************************************************************** 15 // TYPE DEFINITIONS 16 //************************************************************************** 17 18 class spectrum_mface_base_device : 19 public device_t, 20 public device_spectrum_expansion_interface 21 22 { 23 public: 24 // construction/destruction 25 spectrum_mface_base_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 26 27 virtual DECLARE_INPUT_CHANGED_MEMBER(magic_button); 28 29 protected: 30 spectrum_mface_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); 31 32 // device-level overrides 33 virtual void device_start() override; 34 virtual void device_reset() override; 35 36 // optional information overrides 37 virtual void device_add_mconfig(machine_config &config) override; 38 virtual ioport_constructor device_input_ports() const override; 39 40 virtual void pre_opcode_fetch(offs_t offset) override; 41 virtual uint8_t mreq_r(offs_t offset) override; 42 virtual void mreq_w(offs_t offset, uint8_t data) override; 43 virtual DECLARE_READ_LINE_MEMBER(romcs) override; 44 45 // passthru post_opcode_fetch(offs_t offset)46 virtual void post_opcode_fetch(offs_t offset) override { m_exp->post_opcode_fetch(offset); }; pre_data_fetch(offs_t offset)47 virtual void pre_data_fetch(offs_t offset) override { m_exp->pre_data_fetch(offset); }; post_data_fetch(offs_t offset)48 virtual void post_data_fetch(offs_t offset) override { m_exp->post_data_fetch(offset); }; iorq_r(offs_t offset)49 virtual uint8_t iorq_r(offs_t offset) override { return m_exp->iorq_r(offset); } iorq_w(offs_t offset,uint8_t data)50 virtual void iorq_w(offs_t offset, uint8_t data) override { m_exp->iorq_w(offset, data); } 51 52 required_memory_region m_rom; 53 required_device<spectrum_expansion_slot_device> m_exp; 54 55 uint8_t m_ram[8 * 1024]; 56 int m_romcs; 57 }; 58 59 class spectrum_mface1_device : public spectrum_mface_base_device 60 { 61 public: 62 spectrum_mface1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 63 64 DECLARE_INPUT_CHANGED_MEMBER(magic_button) override; 65 66 protected: 67 // optional information overrides 68 virtual const tiny_rom_entry *device_rom_region() const override; 69 virtual ioport_constructor device_input_ports() const override; 70 71 virtual uint8_t iorq_r(offs_t offset) override; 72 virtual void iorq_w(offs_t offset, uint8_t data) override; 73 74 private: 75 required_ioport m_joy; 76 required_ioport m_hwconfig; 77 }; 78 79 class spectrum_mface128_device : public spectrum_mface_base_device 80 { 81 public: 82 spectrum_mface128_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 83 84 protected: 85 // optional information overrides 86 virtual const tiny_rom_entry *device_rom_region() const override; 87 88 virtual uint8_t iorq_r(offs_t offset) override; 89 }; 90 91 class spectrum_mface3_device : public spectrum_mface_base_device 92 { 93 public: 94 spectrum_mface3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 95 96 protected: 97 // optional information overrides 98 virtual const tiny_rom_entry *device_rom_region() const override; 99 100 virtual uint8_t iorq_r(offs_t offset) override; 101 }; 102 103 class spectrum_mprint_device : public spectrum_mface_base_device 104 { 105 public: 106 spectrum_mprint_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 107 108 protected: 109 // optional information overrides 110 virtual const tiny_rom_entry *device_rom_region() const override; 111 112 virtual uint8_t iorq_r(offs_t offset) override; 113 }; 114 115 116 // device type definition 117 DECLARE_DEVICE_TYPE(SPECTRUM_MFACE1, spectrum_mface1_device) 118 DECLARE_DEVICE_TYPE(SPECTRUM_MFACE128, spectrum_mface128_device) 119 DECLARE_DEVICE_TYPE(SPECTRUM_MFACE3, spectrum_mface3_device) 120 DECLARE_DEVICE_TYPE(SPECTRUM_MPRINT, spectrum_mprint_device) 121 122 123 124 #endif // MAME_BUS_SPECTRUM_MFACE_H 125