summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/includes/segaybd.h
blob: 6e08a4f6561f671b7a85af2e858fb2ac83aa0d8d (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11

                                



                                                                            
                                                                            



                               


                              
                           

                             
                           



                                        
                                                   


                                   
                                                                                       









                                                            





                                                 
                                   
                                        
         

         












                                                   
                                       


                                             
 
                                           





                                               
 


                                  
                                        







                                               
 
                        
                                                                                                       
 








                                             
 
                         
                                                          
 


                    
                            
          
 
                           


                                                                                                       



                           




                                                 
                                              
                                                  

                                                              
                                                             
 
                      

                                             
                        

                                     
 
                         
                                        
                                         
                                        

                                             
                                         
                                     
  

                                 
// license:BSD-3-Clause
// copyright-holders:Aaron Giles
/***************************************************************************

    Sega Y-Board hardware

***************************************************************************/
#ifndef MAME_INCLUDES_SEGAYBD_H
#define MAME_INCLUDES_SEGAYBD_H

#pragma once

#include "cpu/m68000/m68000.h"
#include "cpu/z80/z80.h"
#include "machine/mb3773.h"
#include "machine/segaic16.h"
#include "video/segaic16.h"
#include "video/sega16sp.h"


// ======================> segaybd_state

class segaybd_state : public sega_16bit_common_base
{
public:
	// construction/destruction
	segaybd_state(const machine_config &mconfig, device_type type, const char *tag)
		: sega_16bit_common_base(mconfig, type, tag)
		, m_maincpu(*this, "maincpu")
		, m_subx(*this, "subx")
		, m_suby(*this, "suby")
		, m_soundcpu(*this, "soundcpu")
		, m_linkcpu(*this, "linkcpu")
		, m_watchdog(*this, "watchdog")
		, m_bsprites(*this, "bsprites")
		, m_ysprites(*this, "ysprites")
		, m_segaic16vid(*this, "segaic16vid")
		, m_adc_ports(*this, "ADC.%u", 0)
		, m_pdrift_bank(0)
		, m_scanline_timer(nullptr)
		, m_irq2_scanline(0)
		, m_timer_irq_state(0)
		, m_vblank_irq_state(0)
		, m_misc_io_data(0)
		, m_tmp_bitmap(512, 512)
	{
	}

	void yboard_deluxe(machine_config &config);
	void yboard_link(machine_config &config);
	void yboard(machine_config &config);

	// game-specific driver init
	void init_generic();
	void init_pdrift();
	void init_r360();
	void init_gforce2();
	void init_rchase();
	void init_gloc();

private:
	// main CPU read/write handlers
	DECLARE_WRITE8_MEMBER(output1_w);
	DECLARE_WRITE8_MEMBER(misc_output_w);
	DECLARE_WRITE8_MEMBER(output2_w);

	// linked cabinet specific handlers
	DECLARE_WRITE_LINE_MEMBER(mb8421_intl);
	DECLARE_WRITE_LINE_MEMBER(mb8421_intr);
	DECLARE_READ16_MEMBER(link_r);
	DECLARE_READ16_MEMBER(link2_r);
	DECLARE_WRITE16_MEMBER(link2_w);
//  DECLARE_READ8_MEMBER(link_portc0_r);

	// input helpers
	ioport_value analog_mux();

	// game-specific output handlers
	void gforce2_output_cb1(uint16_t data);
	void gforce2_output_cb2(uint16_t data);
	void gloc_output_cb1(uint16_t data);
	void gloc_output_cb2(uint16_t data);
	void r360_output_cb2(uint16_t data);
	void pdrift_output_cb1(uint16_t data);
	void pdrift_output_cb2(uint16_t data);
	void rchase_output_cb2(uint16_t data);

	// video updates
	uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);

	void link_map(address_map &map);
	void link_portmap(address_map &map);
	void main_map(address_map &map);
	void main_map_link(address_map &map);
	void motor_map(address_map &map);
	void sound_map(address_map &map);
	void sound_portmap(address_map &map);
	void subx_map(address_map &map);
	void suby_map(address_map &map);

	// internal types
	typedef delegate<void (uint16_t)> output_delegate;

	// timer IDs
	enum
	{
		TID_IRQ2_GEN
	};

	// device overrides
	virtual void machine_reset() override;
	virtual void video_start() override;
	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;

	// internal helpers
	void update_irqs();

	// devices
	required_device<m68000_device> m_maincpu;
	required_device<m68000_device> m_subx;
	required_device<m68000_device> m_suby;
	required_device<z80_device> m_soundcpu;
	optional_device<z80_device> m_linkcpu;
	required_device<mb3773_device> m_watchdog;
	required_device<sega_sys16b_sprite_device> m_bsprites;
	required_device<sega_yboard_sprite_device> m_ysprites;
	required_device<segaic16_video_device> m_segaic16vid;

	// input ports
	optional_ioport_array<6> m_adc_ports;

	// configuration
	output_delegate m_output_cb1;
	output_delegate m_output_cb2;

	// internal state
	uint16_t          m_pdrift_bank;
	emu_timer *     m_scanline_timer;
	int             m_irq2_scanline;
	uint8_t           m_timer_irq_state;
	uint8_t           m_vblank_irq_state;
	uint8_t           m_misc_io_data;
	bitmap_ind16    m_tmp_bitmap;
};

#endif // MAME_INCLUDES_SEGAYBD_H