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





                                                                               
                          
                   
 


                                           
                                                                                        
                                                    
                                           
                                              
                                    
                                           

                                                    
                                                

                                                

                                                               

           
                                              
                                               
                                              
                                            


                                                   
                                                      

                                                  
                                                         
 


                                             
                                       
                                           
                                                          
                              
                                      





                                 







                                                          
 
                                          
                                          

                                                          
 
                                                     

                                                     
                                                       
                                                     
                                                             
                                                      















                                                          




                             







                                                        


                                              





                                      


                                                                                                                
                                                          
                                                                                                                                                    





                                                                  






                                                   







                                                        
  
// license:BSD-3-Clause
// copyright-holders:Roberto Ventura, Leandro Dardini, Yochizo, Nicola Salmoria
/******************************************************************************

    UPL "sprite framebuffer" hardware

******************************************************************************/

#include "sound/samples.h"
#include "screen.h"

class ninjakd2_state : public driver_device
{
public:
	ninjakd2_state(const machine_config &mconfig, device_type type, const char *tag)
		: driver_device(mconfig, type, tag),
		m_maincpu(*this,"maincpu"),
		m_soundcpu(*this, "soundcpu"),
		m_pcm(*this, "pcm"),
		m_pcm_region(*this, "pcm"),
		m_bg_videoram(*this, "bg_videoram"),
		m_fg_videoram(*this, "fg_videoram"),
		m_spriteram(*this, "spriteram"),
		m_gfxdecode(*this, "gfxdecode"),
		m_screen(*this, "screen"),
		m_palette(*this, "palette"),
		m_decrypted_opcodes(*this, "decrypted_opcodes")
	{ }

	required_device<cpu_device> m_maincpu;
	required_device<cpu_device> m_soundcpu;
	optional_device<samples_device> m_pcm;
	optional_memory_region m_pcm_region;
	optional_shared_ptr<uint8_t> m_bg_videoram;
	required_shared_ptr<uint8_t> m_fg_videoram;
	required_shared_ptr<uint8_t> m_spriteram;
	required_device<gfxdecode_device> m_gfxdecode;
	required_device<screen_device> m_screen;
	required_device<palette_device> m_palette;
	optional_shared_ptr<uint8_t> m_decrypted_opcodes;

	const int16_t* m_sampledata;
	uint8_t m_omegaf_io_protection[3];
	uint8_t m_omegaf_io_protection_input;
	int m_omegaf_io_protection_tic;
	int m_next_sprite_overdraw_enabled;
	bool (*m_stencil_compare_function) (uint16_t pal);
	int m_sprites_updated;
	bitmap_ind16 m_sprites_bitmap;
	int m_robokid_sprites;
	tilemap_t* m_fg_tilemap;
	tilemap_t* m_bg_tilemap;
	tilemap_t* m_bg0_tilemap;
	tilemap_t* m_bg1_tilemap;
	tilemap_t* m_bg2_tilemap;
	uint8_t m_vram_bank_mask;
	uint8_t m_robokid_bg0_bank;
	uint8_t m_robokid_bg1_bank;
	uint8_t m_robokid_bg2_bank;
	std::unique_ptr<uint8_t[]> m_robokid_bg0_videoram;
	std::unique_ptr<uint8_t[]> m_robokid_bg1_videoram;
	std::unique_ptr<uint8_t[]> m_robokid_bg2_videoram;
	uint8_t m_rom_bank_mask;

	void omegaf_io_protection_start();
	void omegaf_io_protection_reset();
	void robokid_motion_error_kludge(uint16_t offset);
	void video_init_common(uint32_t vram_alloc_size);

	DECLARE_WRITE8_MEMBER(ninjakd2_bankselect_w);
	DECLARE_WRITE8_MEMBER(ninjakd2_soundreset_w);
	DECLARE_WRITE8_MEMBER(ninjakd2_pcm_play_w);
	SAMPLES_START_CB_MEMBER(ninjakd2_init_samples);
	DECLARE_READ8_MEMBER(omegaf_io_protection_r);
	DECLARE_READ8_MEMBER(robokid_motion_error_verbose_r);
	DECLARE_WRITE8_MEMBER(omegaf_io_protection_w);
	DECLARE_WRITE8_MEMBER(ninjakd2_bgvideoram_w);
	DECLARE_WRITE8_MEMBER(ninjakd2_fgvideoram_w);
	DECLARE_WRITE8_MEMBER(robokid_bg0_bank_w);
	DECLARE_WRITE8_MEMBER(robokid_bg1_bank_w);
	DECLARE_WRITE8_MEMBER(robokid_bg2_bank_w);
	DECLARE_READ8_MEMBER(robokid_bg0_videoram_r);
	DECLARE_READ8_MEMBER(robokid_bg1_videoram_r);
	DECLARE_READ8_MEMBER(robokid_bg2_videoram_r);
	DECLARE_WRITE8_MEMBER(robokid_bg0_videoram_w);
	DECLARE_WRITE8_MEMBER(robokid_bg1_videoram_w);
	DECLARE_WRITE8_MEMBER(robokid_bg2_videoram_w);
	DECLARE_WRITE8_MEMBER(ninjakd2_bg_ctrl_w);
	DECLARE_WRITE8_MEMBER(robokid_bg0_ctrl_w);
	DECLARE_WRITE8_MEMBER(robokid_bg1_ctrl_w);
	DECLARE_WRITE8_MEMBER(robokid_bg2_ctrl_w);
	DECLARE_WRITE8_MEMBER(ninjakd2_sprite_overdraw_w);
	void init_mnight();
	void init_ninjakd2();
	void init_bootleg();
	void init_robokid();
	void init_robokidj();
	TILE_GET_INFO_MEMBER(get_fg_tile_info);
	TILE_GET_INFO_MEMBER(ninjakd2_get_bg_tile_info);
	TILE_GET_INFO_MEMBER(mnight_get_bg_tile_info);
	TILEMAP_MAPPER_MEMBER(robokid_bg_scan);
	TILEMAP_MAPPER_MEMBER(omegaf_bg_scan);
	TILE_GET_INFO_MEMBER(robokid_get_bg0_tile_info);
	TILE_GET_INFO_MEMBER(robokid_get_bg1_tile_info);
	TILE_GET_INFO_MEMBER(robokid_get_bg2_tile_info);
	virtual void machine_start() override;
	virtual void machine_reset() override;
	virtual void video_start() override;
	DECLARE_VIDEO_START(mnight);
	DECLARE_VIDEO_START(arkarea);
	DECLARE_VIDEO_START(robokid);
	DECLARE_MACHINE_START(omegaf);
	DECLARE_MACHINE_RESET(omegaf);
	DECLARE_VIDEO_START(omegaf);
	uint32_t screen_update_ninjakd2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
	uint32_t screen_update_robokid(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
	uint32_t screen_update_omegaf(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
	DECLARE_WRITE_LINE_MEMBER(screen_vblank_ninjakd2);
	void robokid_get_bg_tile_info( tile_data& tileinfo, tilemap_memory_index const tile_index, int const gfxnum, const uint8_t* const videoram);
	void bg_ctrl(int offset, int data, tilemap_t* tilemap);
	void draw_sprites( bitmap_ind16 &bitmap);
	void erase_sprites( bitmap_ind16 &bitmap);
	void update_sprites();
	void lineswap_gfx_roms(const char *region, const int bit);
	void gfx_unscramble();
	void omegaf(machine_config &config);
	void ninjakd2b(machine_config &config);
	void robokid(machine_config &config);
	void arkarea(machine_config &config);
	void mnight(machine_config &config);
	void ninjakd2(machine_config &config);
	void ninjakd2_core(machine_config &config);
	void decrypted_opcodes_map(address_map &map);
	void mnight_main_cpu(address_map &map);
	void ninjakd2_main_cpu(address_map &map);
	void ninjakd2_sound_cpu(address_map &map);
	void ninjakd2_sound_io(address_map &map);
	void ninjakid_nopcm_sound_cpu(address_map &map);
	void omegaf_main_cpu(address_map &map);
	void robokid_main_cpu(address_map &map);
};