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



                                          
 


                             



                                                                      

 
                                                  

       
                         

                             
                                           

                                                                                  
 



                                                      

                                        
                                   
 

                                                             
                        
                               
 


                                             


                                                                                            



                                                                                    




                                           

                            



                             
 
 


                                                               
                                                               
 

                                                                                                               
          
                                                                                                                            
 

                                                                   

                                                                         
                                             
 
                                        
 
                        

  



                                                                
                                                                                                                

          
                                          

  
 
                                                                  

       

                                                         
 



                                                      

                                        
                                   
 
                        


                               
 
                                             
 
                                 
 
                        





                                                               
                                                                                                            

          
                                                                         





                                                               
                                                                                                            

          
                                                                         
  

                                            
// license:BSD-3-Clause
// copyright-holders:Ernesto Corvi, Nicola Salmoria, David Haywood, Vas Crabb
#ifndef MAME_MACHINE_TAITO68705INTERFACE_H
#define MAME_MACHINE_TAITO68705INTERFACE_H

#pragma once

#include "cpu/m6805/m68705.h"


DECLARE_DEVICE_TYPE(TAITO68705_MCU,       taito68705_mcu_device)
DECLARE_DEVICE_TYPE(TAITO68705_MCU_TIGER, taito68705_mcu_tiger_device)
DECLARE_DEVICE_TYPE(ARKANOID_68705P3,     arkanoid_68705p3_device)
DECLARE_DEVICE_TYPE(ARKANOID_68705P5,     arkanoid_68705p5_device)


class taito68705_mcu_device_base : public device_t
{
public:
	// host interface
	u8 data_r();
	void data_w(u8 data);
	DECLARE_WRITE_LINE_MEMBER(reset_w);
	DECLARE_READ_LINE_MEMBER(host_semaphore_r) { return m_host_flag ? 1 : 0; }
	DECLARE_READ_LINE_MEMBER(mcu_semaphore_r) { return m_mcu_flag ? 1 : 0; }

protected:
	taito68705_mcu_device_base(
			machine_config const &mconfig,
			device_type type,
			char const *tag,
			device_t *owner,
			u32 clock);

	auto semaphore_cb() { return m_semaphore_cb.bind(); }

	// MCU callbacks
	void mcu_pa_w(u8 data);

	virtual void device_start() override;
	virtual void device_reset() override;

	bool host_flag() const { return m_host_flag; }
	bool mcu_flag() const { return m_mcu_flag; }
	u8 pa_value() const { return m_pa_output & (m_latch_driven ? m_host_latch : 0xff); }
	void latch_control(u8 data, u8 &value, unsigned host_bit, unsigned mcu_bit);

	required_device<m68705p_device> m_mcu;

private:
	devcb_write_line    m_semaphore_cb;

	bool    m_latch_driven;
	bool    m_reset_input;
	bool    m_host_flag;
	bool    m_mcu_flag;
	u8      m_host_latch;
	u8      m_mcu_latch;
	u8      m_pa_output;
};


class taito68705_mcu_device : public taito68705_mcu_device_base
{
public:
	auto aux_strobe_cb() { return m_aux_strobe_cb.bind(); }

	taito68705_mcu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);

protected:
	taito68705_mcu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);

	virtual u8 mcu_portc_r();
	void mcu_portb_w(offs_t offset, u8 data, u8 mem_mask = ~0);

	virtual void device_add_mconfig(machine_config &config) override;
	virtual void device_start() override;

	devcb_write8    m_aux_strobe_cb;

	u8  m_pb_output;
};


class taito68705_mcu_tiger_device : public taito68705_mcu_device
{
public:
	taito68705_mcu_tiger_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);

protected:
	virtual u8 mcu_portc_r() override;
};


class arkanoid_mcu_device_base : public taito68705_mcu_device_base
{
public:
	using taito68705_mcu_device_base::semaphore_cb;
	auto portb_r_cb() { return m_portb_r_cb.bind(); }

protected:
	arkanoid_mcu_device_base(
			machine_config const &mconfig,
			device_type type,
			char const *tag,
			device_t *owner,
			u32 clock);

	// MCU callbacks
	u8 mcu_pb_r();
	u8 mcu_pc_r();
	void mcu_pc_w(u8 data);

	virtual void device_start() override;

	devcb_read8 m_portb_r_cb;

	u8  m_pc_output;
};


class arkanoid_68705p3_device : public arkanoid_mcu_device_base
{
public:
	arkanoid_68705p3_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock);

protected:
	virtual void device_add_mconfig(machine_config &config) override;
};


class arkanoid_68705p5_device : public arkanoid_mcu_device_base
{
public:
	arkanoid_68705p5_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock);

protected:
	virtual void device_add_mconfig(machine_config &config) override;
};

#endif // MAME_MACHINE_TAITO68705INTERFACE_H