// license:BSD-3-Clause // copyright-holders:Nicola Salmoria /************************************************************************* taitoio.h Implementation of various Taito custom I/O ICs **************************************************************************/ #ifndef MAME_MACHINE_TAITOIO_H #define MAME_MACHINE_TAITOIO_H #pragma once #include "machine/watchdog.h" class tc0040ioc_device : public device_t { public: tc0040ioc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); auto read_0_callback() { return m_read_0_cb.bind(); } auto read_1_callback() { return m_read_1_cb.bind(); } auto read_2_callback() { return m_read_2_cb.bind(); } auto read_3_callback() { return m_read_3_cb.bind(); } auto write_4_callback() { return m_write_4_cb.bind(); } auto read_7_callback() { return m_read_7_cb.bind(); } u8 read(offs_t offset); void write(offs_t offset, u8 data); u8 watchdog_r(); u8 port_r(); void port_w(u8 data); u8 portreg_r(); void portreg_w(u8 data); protected: // device-level overrides virtual void device_start() override; virtual void device_reset() override; virtual void device_add_mconfig(machine_config &config) override; private: // internal state u8 m_regs[8]; u8 m_port; required_device m_watchdog; devcb_read8 m_read_0_cb; devcb_read8 m_read_1_cb; devcb_read8 m_read_2_cb; devcb_read8 m_read_3_cb; devcb_write8 m_write_4_cb; devcb_read8 m_read_7_cb; }; DECLARE_DEVICE_TYPE(TC0040IOC, tc0040ioc_device) class tc0220ioc_device : public device_t { public: tc0220ioc_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); auto read_0_callback() { return m_read_0_cb.bind(); } auto read_1_callback() { return m_read_1_cb.bind(); } auto read_2_callback() { return m_read_2_cb.bind(); } auto read_3_callback() { return m_read_3_cb.bind(); } auto write_3_callback() { return m_write_3_cb.bind(); } auto write_4_callback() { return m_write_4_cb.bind(); } auto read_7_callback() { return m_read_7_cb.bind(); } u8 read(offs_t offset); void write(offs_t offset, u8 data); protected: // device-level overrides virtual void device_start() override; virtual void device_reset() override; virtual void device_add_mconfig(machine_config &config) override; private: // internal state u8 m_regs[8]; required_device m_watchdog; devcb_read8 m_read_0_cb; devcb_read8 m_read_1_cb; devcb_read8 m_read_2_cb; devcb_read8 m_read_3_cb; devcb_write8 m_write_3_cb; devcb_write8 m_write_4_cb; devcb_read8 m_read_7_cb; }; DECLARE_DEVICE_TYPE(TC0220IOC, tc0220ioc_device) class tc0510nio_device : public device_t { public: tc0510nio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); auto read_0_callback() { return m_read_0_cb.bind(); } auto read_1_callback() { return m_read_1_cb.bind(); } auto read_2_callback() { return m_read_2_cb.bind(); } auto read_3_callback() { return m_read_3_cb.bind(); } auto write_3_callback() { return m_write_3_cb.bind(); } auto write_4_callback() { return m_write_4_cb.bind(); } auto read_7_callback() { return m_read_7_cb.bind(); } u8 read(offs_t offset); void write(offs_t offset, u8 data); u16 halfword_r(offs_t offset); void halfword_w(offs_t offset, u16 data, u16 mem_mask = ~0); u16 halfword_wordswap_r(offs_t offset); void halfword_wordswap_w(offs_t offset, u16 data, u16 mem_mask = ~0); protected: // device-level overrides virtual void device_start() override; virtual void device_reset() override; virtual void device_add_mconfig(machine_config &config) override; private: // internal state u8 m_regs[8]; required_device m_watchdog; devcb_read8 m_read_0_cb; devcb_read8 m_read_1_cb; devcb_read8 m_read_2_cb; devcb_read8 m_read_3_cb; devcb_write8 m_write_3_cb; devcb_write8 m_write_4_cb; devcb_read8 m_read_7_cb; }; DECLARE_DEVICE_TYPE(TC0510NIO, tc0510nio_device) class tc0640fio_device : public device_t { public: tc0640fio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); auto read_0_callback() { return m_read_0_cb.bind(); } auto read_1_callback() { return m_read_1_cb.bind(); } auto read_2_callback() { return m_read_2_cb.bind(); } auto read_3_callback() { return m_read_3_cb.bind(); } auto write_4_callback() { return m_write_4_cb.bind(); } auto read_7_callback() { return m_read_7_cb.bind(); } u8 read(offs_t offset); void write(offs_t offset, u8 data); u16 halfword_r(offs_t offset); void halfword_w(offs_t offset, u16 data, u16 mem_mask = ~0); u16 halfword_byteswap_r(offs_t offset); void halfword_byteswap_w(offs_t offset, u16 data, u16 mem_mask = ~0); protected: // device-level overrides virtual void device_start() override; virtual void device_reset() override; virtual void device_add_mconfig(machine_config &config) override; private: // internal state u8 m_regs[8]; required_device m_watchdog; devcb_read8 m_read_0_cb; devcb_read8 m_read_1_cb; devcb_read8 m_read_2_cb; devcb_read8 m_read_3_cb; devcb_write8 m_write_4_cb; devcb_read8 m_read_7_cb; }; DECLARE_DEVICE_TYPE(TC0640FIO, tc0640fio_device) #endif // MAME_MACHINE_TAITOIO_H