1 // license:BSD-3-Clause 2 // copyright-holders:Bryan McPhail 3 /************************************************************************* 4 5 Caveman Ninja (and other DECO 16bit titles) 6 7 *************************************************************************/ 8 9 #include "cpu/h6280/h6280.h" 10 #include "sound/okim6295.h" 11 #include "video/deco16ic.h" 12 #include "video/bufsprite.h" 13 #include "video/decospr.h" 14 #include "machine/deco_irq.h" 15 #include "machine/deco146.h" 16 #include "machine/deco104.h" 17 #include "machine/gen_latch.h" 18 #include "emupal.h" 19 #include "screen.h" 20 21 class cninja_state : public driver_device 22 { 23 public: cninja_state(const machine_config & mconfig,device_type type,const char * tag)24 cninja_state(const machine_config &mconfig, device_type type, const char *tag) 25 : driver_device(mconfig, type, tag) 26 , m_maincpu(*this, "maincpu") 27 , m_audiocpu(*this, "audiocpu") 28 , m_ioprot(*this, "ioprot") 29 , m_deco_tilegen(*this, "tilegen%u", 1U) 30 , m_oki2(*this, "oki2") 31 , m_sprgen(*this, "spritegen%u", 1U) 32 , m_gfxdecode(*this, "gfxdecode") 33 , m_screen(*this, "screen") 34 , m_palette(*this, "palette") 35 , m_soundlatch(*this, "soundlatch") 36 , m_spriteram(*this, "spriteram%u", 1U) 37 , m_pf_rowscroll(*this, "pf%u_rowscroll", 1U) 38 , m_okibank(*this, "okibank") 39 { } 40 41 /* devices */ 42 required_device<cpu_device> m_maincpu; 43 required_device<cpu_device> m_audiocpu; 44 optional_device<deco_146_base_device> m_ioprot; 45 required_device_array<deco16ic_device, 2> m_deco_tilegen; 46 optional_device<okim6295_device> m_oki2; 47 optional_device_array<decospr_device, 2> m_sprgen; 48 required_device<gfxdecode_device> m_gfxdecode; 49 required_device<screen_device> m_screen; 50 required_device<palette_device> m_palette; 51 optional_device<generic_latch_8_device> m_soundlatch; 52 optional_device_array<buffered_spriteram16_device, 2> m_spriteram; 53 54 /* memory pointers */ 55 required_shared_ptr_array<uint16_t, 4> m_pf_rowscroll; 56 optional_memory_bank m_okibank; 57 58 uint16_t m_priority; 59 60 template<int Chip> void cninja_pf_control_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 61 void sound_bankswitch_w(uint8_t data); 62 void cninjabl2_oki_bank_w(uint8_t data); 63 void init_mutantf(); 64 void init_cninjabl2(); 65 DECLARE_MACHINE_START(robocop2); 66 DECLARE_MACHINE_RESET(robocop2); 67 DECLARE_VIDEO_START(cninja); 68 DECLARE_VIDEO_START(stoneage); 69 DECLARE_VIDEO_START(mutantf); 70 uint32_t screen_update_cninja(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 71 uint32_t screen_update_cninjabl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 72 uint32_t screen_update_cninjabl2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 73 uint32_t screen_update_edrandy(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 74 uint32_t screen_update_robocop2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 75 uint32_t screen_update_mutantf(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 76 void cninjabl_draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ); 77 78 DECO16IC_BANK_CB_MEMBER(cninja_bank_callback); 79 DECO16IC_BANK_CB_MEMBER(robocop2_bank_callback); 80 DECO16IC_BANK_CB_MEMBER(mutantf_1_bank_callback); 81 DECO16IC_BANK_CB_MEMBER(mutantf_2_bank_callback); 82 83 DECOSPR_PRIORITY_CB_MEMBER(pri_callback); 84 u16 robocop2_mix_callback(u16 p, u16 p2); 85 86 uint16_t edrandy_protection_region_6_146_r(offs_t offset); 87 void edrandy_protection_region_6_146_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 88 uint16_t edrandy_protection_region_8_146_r(offs_t offset); 89 void edrandy_protection_region_8_146_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 90 91 uint16_t mutantf_protection_region_0_146_r(offs_t offset); 92 void mutantf_protection_region_0_146_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 93 uint16_t cninja_protection_region_0_104_r(offs_t offset); 94 void cninja_protection_region_0_104_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 95 96 uint16_t cninjabl2_sprite_dma_r(); 97 void robocop2_priority_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 98 uint16_t mutantf_71_r(); 99 void cninjabl(machine_config &config); 100 void edrandy(machine_config &config); 101 void cninja(machine_config &config); 102 void robocop2(machine_config &config); 103 void stoneage(machine_config &config); 104 void cninjabl2(machine_config &config); 105 void mutantf(machine_config &config); 106 void cninja_map(address_map &map); 107 void cninjabl2_oki_map(address_map &map); 108 void cninjabl2_s_map(address_map &map); 109 void cninjabl_map(address_map &map); 110 void cninjabl_sound_map(address_map &map); 111 void edrandy_map(address_map &map); 112 void mutantf_map(address_map &map); 113 void robocop2_map(address_map &map); 114 void sound_map(address_map &map); 115 void sound_map_mutantf(address_map &map); 116 void stoneage_s_map(address_map &map); 117 }; 118