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

                                  
                              
                                 
                          
                            
                           
                          
                           
                          
 
                                       
 
       

            

                                 

          
                                                                                    
                                                    


                                              
                                    
                                            
                                                 
                                    
                                                 
                                                        
                                                        
                                                


                                                  
                                            

                                                
                                               

                     
                                              
                                             
                                               
                                          
                                                       
                                                                
                                              
                                                              
                                                                   
                                                           
                                                      
                                                    
                                                             
 
                             

                                                
 



                                         

                              
                                                                                                                   

                           







                                      

                  


                              

                               

                                
                              

                         




                           
                         
                              


                               
 


                                 







                                                                  
                                               

                                             
                                                



                                                    





                                               
                                             




                                                   
                                                      
                                                      










                                                   
                                                    

                            









                                                         

                                              







                                      
                                             







                                                                                                                
                                                      
                                                  
                                                  
                                                     
                                                                                                
                                                     
 









                                              



                                               











                                                
                                            
          
                                                                                                       



                                    
  
// license:BSD-3-Clause
// copyright-holders:Bryan McPhail
#include "machine/gen_latch.h"
#include "machine/input_merger.h"
#include "sound/msm5205.h"
#include "video/bufsprite.h"
#include "video/decbac06.h"
#include "video/deckarn.h"
#include "video/decmxc06.h"
#include "video/decrmc3.h"

class dec8_state : public driver_device
{
public:
	enum
	{
		TIMER_DEC8_I8751,
		TIMER_DEC8_M6502
	};

	dec8_state(const machine_config &mconfig, device_type type, const char *tag)
		: driver_device(mconfig, type, tag),
		m_maincpu(*this, "maincpu"),
		m_subcpu(*this, "sub"),
		m_audiocpu(*this, "audiocpu"),
		m_mcu(*this, "mcu"),
		m_nmigate(*this, "nmigate"),
		m_spriteram(*this, "spriteram") ,
		m_msm(*this, "msm"),
		m_tilegen(*this, "tilegen%u", 1),
		m_spritegen_krn(*this, "spritegen_krn"),
		m_spritegen_mxc(*this, "spritegen_mxc"),
		m_gfxdecode(*this, "gfxdecode"),
		m_palette(*this, "palette"),
		m_soundlatch(*this, "soundlatch"),
		m_videoram(*this, "videoram"),
		m_bg_data(*this, "bg_data"),
		m_mainbank(*this, "mainbank"),
		m_soundbank(*this, "soundbank"),
		m_coin_port(*this, "I8751") { }

	/* devices */
	required_device<cpu_device> m_maincpu;
	optional_device<cpu_device> m_subcpu;
	required_device<cpu_device> m_audiocpu;
	optional_device<cpu_device> m_mcu;
	optional_device<input_merger_device> m_nmigate;
	required_device<buffered_spriteram8_device> m_spriteram;
	optional_device<msm5205_device> m_msm;
	optional_device_array<deco_bac06_device, 2> m_tilegen;
	optional_device<deco_karnovsprites_device> m_spritegen_krn;
	optional_device<deco_mxc06_device> m_spritegen_mxc;
	required_device<gfxdecode_device> m_gfxdecode;
	required_device<deco_rmc3_device> m_palette;
	required_device<generic_latch_8_device> m_soundlatch;

	/* memory pointers */
	required_shared_ptr<uint8_t> m_videoram;
	optional_shared_ptr<uint8_t> m_bg_data;

	/* memory regions */
	required_memory_bank m_mainbank;
	optional_memory_bank m_soundbank;

	uint8_t *  m_pf1_data;
	uint8_t *  m_row;
	std::unique_ptr<uint16_t[]>   m_buffered_spriteram16; // for the mxc06 sprite chip emulation (oscar, cobra)

	/* video-related */
	tilemap_t  *m_bg_tilemap;
	tilemap_t  *m_pf1_tilemap;
	tilemap_t  *m_fix_tilemap;
	//int      m_scroll1[4];
	int      m_scroll2[4];
	int      m_bg_control[0x20];
	int      m_pf1_control[0x20];
	int      m_game_uses_priority;

	/* misc */
	bool     m_secclr;
	bool     m_nmi_enable;
	uint8_t  m_i8751_p2;
	int      m_i8751_port0;
	int      m_i8751_port1;
	int      m_i8751_return;
	int      m_i8751_value;
	int      m_coinage_id;
	int      m_coin1;
	int      m_coin2;
	int      m_need1;
	int      m_need2;
	int      m_cred1;
	int      m_cred2;
	int      m_credits;
	int      m_latch;
	bool     m_coin_state;
	int      m_snd;
	int      m_msm5205next;
	int      m_toggle;

	emu_timer *m_i8751_timer;
	emu_timer *m_m6502_timer;

	DECLARE_WRITE8_MEMBER(dec8_mxc06_karn_buffer_spriteram_w);
	DECLARE_READ8_MEMBER(i8751_h_r);
	DECLARE_READ8_MEMBER(i8751_l_r);
	DECLARE_WRITE8_MEMBER(i8751_reset_w);
	DECLARE_READ8_MEMBER(gondo_player_1_r);
	DECLARE_READ8_MEMBER(gondo_player_2_r);
	DECLARE_WRITE8_MEMBER(dec8_i8751_w);
	DECLARE_WRITE8_MEMBER(lastmisn_i8751_w);
	DECLARE_WRITE8_MEMBER(csilver_i8751_w);
	DECLARE_WRITE8_MEMBER(dec8_bank_w);
	DECLARE_WRITE8_MEMBER(ghostb_bank_w);
	DECLARE_WRITE_LINE_MEMBER(ghostb_nmi_w);
	DECLARE_WRITE8_MEMBER(csilver_control_w);
	DECLARE_WRITE8_MEMBER(dec8_sound_w);
	DECLARE_WRITE8_MEMBER(csilver_adpcm_data_w);
	DECLARE_WRITE8_MEMBER(csilver_sound_bank_w);
	DECLARE_WRITE8_MEMBER(main_irq_on_w);
	DECLARE_WRITE8_MEMBER(main_irq_off_w);
	DECLARE_WRITE8_MEMBER(main_firq_off_w);
	DECLARE_WRITE8_MEMBER(sub_irq_on_w);
	DECLARE_WRITE8_MEMBER(sub_irq_off_w);
	DECLARE_WRITE8_MEMBER(sub_firq_off_w);
	DECLARE_WRITE8_MEMBER(flip_screen_w);
	DECLARE_READ8_MEMBER(i8751_port0_r);
	DECLARE_WRITE8_MEMBER(i8751_port0_w);
	DECLARE_READ8_MEMBER(i8751_port1_r);
	DECLARE_WRITE8_MEMBER(i8751_port1_w);
	DECLARE_WRITE8_MEMBER(gondo_mcu_to_main_w);
	DECLARE_WRITE8_MEMBER(shackled_mcu_to_main_w);
	DECLARE_WRITE8_MEMBER(srdarwin_mcu_to_main_w);
	DECLARE_WRITE8_MEMBER(dec8_bg_data_w);
	DECLARE_READ8_MEMBER(dec8_bg_data_r);
	DECLARE_WRITE8_MEMBER(dec8_videoram_w);
	DECLARE_WRITE8_MEMBER(srdarwin_videoram_w);
	DECLARE_WRITE8_MEMBER(dec8_scroll2_w);
	DECLARE_WRITE8_MEMBER(srdarwin_control_w);
	DECLARE_WRITE8_MEMBER(lastmisn_control_w);
	DECLARE_WRITE8_MEMBER(shackled_control_w);
	DECLARE_WRITE8_MEMBER(lastmisn_scrollx_w);
	DECLARE_WRITE8_MEMBER(lastmisn_scrolly_w);
	DECLARE_WRITE8_MEMBER(gondo_scroll_w);
	DECLARE_READ8_MEMBER(csilver_adpcm_reset_r);
	void init_dec8();
	void init_csilver();
	TILE_GET_INFO_MEMBER(get_cobracom_fix_tile_info);
	TILE_GET_INFO_MEMBER(get_ghostb_fix_tile_info);
	TILE_GET_INFO_MEMBER(get_oscar_fix_tile_info);
	TILEMAP_MAPPER_MEMBER(lastmisn_scan_rows);
	TILE_GET_INFO_MEMBER(get_lastmisn_tile_info);
	TILE_GET_INFO_MEMBER(get_lastmisn_fix_tile_info);
	TILE_GET_INFO_MEMBER(get_srdarwin_fix_tile_info);
	TILE_GET_INFO_MEMBER(get_srdarwin_tile_info);
	TILE_GET_INFO_MEMBER(get_gondo_fix_tile_info);
	TILE_GET_INFO_MEMBER(get_gondo_tile_info);
	virtual void machine_start() override;
	virtual void machine_reset() override;
	DECLARE_VIDEO_START(lastmisn);
	DECLARE_VIDEO_START(shackled);
	DECLARE_VIDEO_START(gondo);
	DECLARE_VIDEO_START(garyoret);
	DECLARE_VIDEO_START(ghostb);
	DECLARE_VIDEO_START(oscar);
	DECLARE_VIDEO_START(srdarwin);
	DECLARE_VIDEO_START(cobracom);
	void allocate_buffered_spriteram16();
	uint32_t screen_update_lastmisn(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
	uint32_t screen_update_shackled(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
	uint32_t screen_update_gondo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
	uint32_t screen_update_garyoret(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
	uint32_t screen_update_ghostb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
	uint32_t screen_update_oscar(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
	uint32_t screen_update_srdarwin(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
	uint32_t screen_update_cobracom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
	DECLARE_WRITE_LINE_MEMBER(screen_vblank_dec8);
	DECLARE_WRITE_LINE_MEMBER(oscar_coin_irq);
	DECLARE_WRITE8_MEMBER(oscar_coin_clear_w);
	DECLARE_WRITE_LINE_MEMBER(shackled_coin_irq);
	void srdarwin_draw_sprites(  bitmap_ind16 &bitmap, const rectangle &cliprect, int pri );
	DECLARE_WRITE_LINE_MEMBER(csilver_adpcm_int);

	void shackled(machine_config &config);
	void meikyuh(machine_config &config);
	void lastmisn(machine_config &config);
	void csilver(machine_config &config);
	void cobracom(machine_config &config);
	void garyoret(machine_config &config);
	void srdarwin(machine_config &config);
	void ghostb(machine_config &config);
	void oscar(machine_config &config);
	void gondo(machine_config &config);
	void cobra_map(address_map &map);
	void csilver_map(address_map &map);
	void csilver_s_map(address_map &map);
	void csilver_sub_map(address_map &map);
	void dec8_s_map(address_map &map);
	void garyoret_map(address_map &map);
	void gondo_map(address_map &map);
	void lastmisn_map(address_map &map);
	void lastmisn_sub_map(address_map &map);
	void meikyuh_map(address_map &map);
	void oscar_map(address_map &map);
	void oscar_s_map(address_map &map);
	void oscar_sub_map(address_map &map);
	void shackled_map(address_map &map);
	void shackled_sub_map(address_map &map);
	void srdarwin_map(address_map &map);
	void ym3526_s_map(address_map &map);
protected:
	virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;

private:
	/* ports */
	optional_ioport m_coin_port;
};