summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/includes/segaxbd.h
blob: cc324dc34b4a162084f964c50ede4022518eb7bb (plain) (tree)
1
2
3
4
5
6
7

                                



                                                                            
                                                                            








                                



                              
                           
                             
                         
                   


                                        

                                     


                                   
                                                                                                       
 
                                       

                                      
                                            
 
                                                     




                                                
 






                                                
 
                        
                                                                                                       
 
                          
                                             

                                    


                                   
 












                                                     
          



                             
                            
          
 

                                                                                                                         
                           
                                 
                                   
                                                                                                       


                                
                                                       
                                                   
 

                                               



                                      
                  
       
                                                 
          



                                                
                                                  
                                                                         
                                                             
                                                             
                                                             
                                                

                        
                                         
                                          
 
                         
                                         

                                             
                                 

                              

                                         

                               
                                                   



                                       



                                                                                          

                                                  
                                    

                                             
                                 
 
          

                                             
                                                         





                                                   
                                                                                                               

          
                                                                         
  





                                                  
                                                                                                              

          
                                                                         

  





                                                                                                                
                                                                         



                                


                                                           
                                                                                                                       

          
                                                                         

  


                                                    
                                                                                                                

          
                                                                         


  


                                                       
                                                                                                                   

          
                                                                         

  



                                                
                                                                                                            

          
                                                                         


  


                                                  
                                                                                                              

          
                                                                         
  

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

    Sega X-Board hardware

***************************************************************************/
#ifndef MAME_INCLUDES_SEGAXBD_H
#define MAME_INCLUDES_SEGAXBD_H

#pragma once

#include "machine/segaic16.h"
#include "video/segaic16.h"
#include "video/segaic16_road.h"
#include "video/sega16sp.h"

#include "cpu/m68000/m68000.h"
#include "cpu/mcs51/mcs51.h"
#include "cpu/z80/z80.h"
#include "machine/mb3773.h"
#include "machine/watchdog.h"
#include "video/resnet.h"
#include "screen.h"

// ======================> segaxbd_state


class segaxbd_state : public device_t
{
public:
	// construction/destruction
	segaxbd_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);

	// main CPU read/write handlers
	DECLARE_READ16_MEMBER(adc_r);
	DECLARE_WRITE16_MEMBER(adc_w);
	DECLARE_WRITE16_MEMBER(iocontrol_w);

	// game-specific main CPU read/write handlers
	DECLARE_WRITE16_MEMBER(loffire_sync0_w);
	DECLARE_READ16_MEMBER(rascot_excs_r);
	DECLARE_WRITE16_MEMBER(rascot_excs_w);
	DECLARE_READ16_MEMBER(smgp_excs_r);
	DECLARE_WRITE16_MEMBER(smgp_excs_w);

	// custom I/O
	DECLARE_READ8_MEMBER(aburner2_motor_r);
	DECLARE_WRITE8_MEMBER(aburner2_motor_w);
	DECLARE_READ8_MEMBER(smgp_motor_r);
	DECLARE_WRITE8_MEMBER(smgp_motor_w);
	DECLARE_READ8_MEMBER(lastsurv_port_r);
	DECLARE_WRITE8_MEMBER(lastsurv_muxer_w);

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

	// palette helpers
	DECLARE_WRITE16_MEMBER(paletteram_w);

	void install_aburner2(void);
	void install_loffire(void);
	void install_smgp(void);
	void install_gprider(void);

	void decrypted_opcodes_map(address_map &map);
	void main_map(address_map &map);
	void rascot_z80_map(address_map &map);
	void rascot_z80_portmap(address_map &map);
	void smgp_airdrive_map(address_map &map);
	void smgp_airdrive_portmap(address_map &map);
	void smgp_comm_map(address_map &map);
	void smgp_comm_portmap(address_map &map);
	void smgp_sound2_map(address_map &map);
	void smgp_sound2_portmap(address_map &map);
	void sound_map(address_map &map);
	void sound_portmap(address_map &map);
	void sub_map(address_map &map);
protected:
	// timer IDs
	enum
	{
		TID_SCANLINE,
		TID_IRQ2_GEN
	};

	segaxbd_state(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);

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

	// internal helpers
	void update_main_irqs();
	DECLARE_WRITE_LINE_MEMBER(m68k_reset_callback);
	void generic_iochip0_lamps_w(uint8_t data);

	// compare/timer chip callbacks
	DECLARE_WRITE_LINE_MEMBER(timer_irq_w);

	DECLARE_WRITE8_MEMBER(pc_0_w);
	DECLARE_WRITE8_MEMBER(pd_0_w);

	// devices
public:
	required_device<m68000_device> m_maincpu;
protected:
	required_device<m68000_device> m_subcpu;
	required_device<z80_device> m_soundcpu;
	optional_device<z80_device> m_soundcpu2;
	optional_device<i8751_device> m_mcu;
	required_device<mb3773_device> m_watchdog;
	required_device<sega_315_5250_compare_timer_device> m_cmptimer_1;
	required_device<sega_xboard_sprite_device> m_sprites;
	required_device<segaic16_video_device> m_segaic16vid;
	required_device<segaic16_road_device> m_segaic16road;
	required_shared_ptr<uint16_t> m_subram0;

	// configuration
	bool            m_adc_reverse[8];
	uint8_t           m_road_priority;

	// internal state
	emu_timer *     m_scanline_timer;
	uint8_t           m_timer_irq_state;
	uint8_t           m_vblank_irq_state;
	uint8_t           m_pc_0;

	// game-specific state
	uint16_t *        m_loffire_sync;
	uint8_t           m_lastsurv_mux;
public: // -- stupid system16.c
	// memory pointers
	required_shared_ptr<uint16_t> m_paletteram;
	bool            m_gprider_hack;

protected:
	void palette_init();
	uint32_t      m_palette_entries;          // number of palette entries
	uint8_t       m_palette_normal[32];       // RGB translations for normal pixels
	uint8_t       m_palette_shadow[32];       // RGB translations for shadowed pixels
	uint8_t       m_palette_hilight[32];      // RGB translations for hilighted pixels
	required_device<screen_device> m_screen;
	required_device<palette_device> m_palette;
	required_ioport m_io0_porta;
	optional_ioport_array<8> m_adc_ports;
	optional_ioport_array<4> m_mux_ports;
	output_finder<4> m_lamps;

protected:
	virtual void device_start() override;
	virtual void device_reset() override;
	void xboard_base_mconfig(machine_config &config);
};


class segaxbd_regular_state :  public segaxbd_state
{
public:
	segaxbd_regular_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);

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



class segaxbd_fd1094_state :  public segaxbd_state
{
public:
	segaxbd_fd1094_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);

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

class segaxbd_aburner2_state :  public segaxbd_state
{
public:
	segaxbd_aburner2_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);

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

class segaxbd_lastsurv_fd1094_state :  public segaxbd_state
{
public:
	segaxbd_lastsurv_fd1094_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);

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

class segaxbd_lastsurv_state :  public segaxbd_state
{
public:
	segaxbd_lastsurv_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);

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


class segaxbd_smgp_fd1094_state :  public segaxbd_state
{
public:
	segaxbd_smgp_fd1094_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);

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


class segaxbd_smgp_state :  public segaxbd_state
{
public:
	segaxbd_smgp_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);

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


class segaxbd_rascot_state :  public segaxbd_state
{
public:
	segaxbd_rascot_state(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);

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

#endif // MAME_INCLUDES_SEGAXBD_H