1 // license:BSD-3-Clause 2 // copyright-holders:Nicola Salmoria 3 #ifndef MAME_MACHINE_NAMCOIO_H 4 #define MAME_MACHINE_NAMCOIO_H 5 6 7 /*************************************************************************** 8 TYPE DEFINITIONS 9 ***************************************************************************/ 10 11 class namcoio_device : public device_t 12 { 13 public: in_callback()14 template <unsigned N> auto in_callback() { return m_in_cb[N].bind(); } out_callback()15 template <unsigned N> auto out_callback() { return m_out_cb[N].bind(); } 16 17 uint8_t read(offs_t offset); 18 void write(offs_t offset, uint8_t data); 19 20 WRITE_LINE_MEMBER( set_reset_line ); 21 READ_LINE_MEMBER( read_reset_line ); 22 23 virtual void customio_run() = 0; 24 25 protected: 26 namcoio_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, int device_type); 27 28 // device-level overrides 29 virtual void device_start() override; 30 virtual void device_reset() override; 31 32 enum { 33 TYPE_NAMCO56XX, 34 TYPE_NAMCO58XX, 35 TYPE_NAMCO59XX 36 }; 37 38 // internal state 39 uint8_t m_ram[16]; 40 41 devcb_read8::array<4> m_in_cb; 42 devcb_write8::array<2> m_out_cb; 43 44 int m_reset; 45 int32_t m_lastcoins, m_lastbuttons; 46 int32_t m_credits; 47 int32_t m_coins[2]; 48 int32_t m_coins_per_cred[2]; 49 int32_t m_creds_per_coin[2]; 50 int32_t m_in_count; 51 52 void handle_coins( int swap ); 53 54 private: 55 //int m_device_type; 56 }; 57 58 class namco56xx_device : public namcoio_device 59 { 60 public: 61 namco56xx_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 62 63 virtual const tiny_rom_entry *device_rom_region() const override; 64 65 virtual void customio_run() override; 66 }; 67 68 class namco58xx_device : public namcoio_device 69 { 70 public: 71 namco58xx_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 72 73 virtual const tiny_rom_entry *device_rom_region() const override; 74 75 virtual void customio_run() override; 76 }; 77 78 class namco59xx_device : public namcoio_device 79 { 80 public: 81 namco59xx_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 82 83 virtual const tiny_rom_entry *device_rom_region() const override; 84 85 virtual void customio_run() override; 86 }; 87 88 DECLARE_DEVICE_TYPE(NAMCO_56XX, namco56xx_device) 89 DECLARE_DEVICE_TYPE(NAMCO_58XX, namco58xx_device) 90 DECLARE_DEVICE_TYPE(NAMCO_59XX, namco59xx_device) 91 92 #endif // MAME_MACHINE_NAMCOIO_H 93