summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/machine/taitoio.h
blob: 1d864c18b78054c5831e1ef952aca659aadbb853 (plain) (tree)
1
2
3
4
5
6
7
8
9
10

                                    







                                                                           



                              
 

                             
 




                                                                                                          





                                                               
 






                                           








                                                                         

                          












                                                          
                                        

       
                                                                                                          
 






                                                               
 

                                           
 

                                 

                                             
                                                                         
 

                         
                          
 

                                                          



                                
                                  
                                  
                                

  
                                                
 
                                        

       
                                                                                                          
 






                                                               
 





                                                                             
 

                                 

                                             
                                                                         
 

                         
                       
 

                                                          



                                
                                  
                                  
                                

  
                                                
 
                                        

       
                                                                                                          
 





                                                               
 





                                                                             
 

                                 

                                             
                                                                         

                
                         
                       
 

                                                          



                                
                                  
                                

  
                                                
 
                                
// 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<watchdog_timer_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<watchdog_timer_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<watchdog_timer_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<watchdog_timer_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