1 // license:BSD-3-Clause 2 // copyright-holders:Luca Elia, David Haywood 3 /*************************************************************************** 4 5 -= Kaneko 16 Bit Games =- 6 7 ***************************************************************************/ 8 #ifndef MAME_INCLUDES_KANEKO16_H 9 #define MAME_INCLUDES_KANEKO16_H 10 11 #pragma once 12 13 #include "cpu/m68000/m68000.h" 14 #include "cpu/z80/z80.h" 15 #include "machine/eepromser.h" 16 #include "machine/gen_latch.h" 17 #include "machine/kaneko_calc3.h" 18 #include "machine/kaneko_hit.h" 19 #include "machine/kaneko_toybox.h" 20 #include "machine/nvram.h" 21 #include "machine/timer.h" 22 #include "machine/watchdog.h" 23 #include "sound/ay8910.h" 24 #include "sound/okim6295.h" 25 #include "sound/ym2151.h" 26 #include "video/bufsprite.h" 27 #include "video/kaneko_spr.h" 28 #include "video/kaneko_tmap.h" 29 #include "emupal.h" 30 #include "screen.h" 31 32 class kaneko16_state : public driver_device 33 { 34 public: kaneko16_state(const machine_config & mconfig,device_type type,const char * tag)35 kaneko16_state(const machine_config &mconfig, device_type type, const char *tag) : 36 driver_device(mconfig, type, tag), 37 m_maincpu(*this, "maincpu"), 38 m_ym2149(*this, "ym2149_%u", 1), 39 m_oki(*this, "oki%u", 1), 40 m_view2(*this, "view2_%u", 0), 41 m_kaneko_hit(*this, "kan_hit"), 42 m_kaneko_spr(*this, "kan_spr"), 43 m_kaneko_calc3(*this, "calc3_prot"), 44 m_toybox(*this, "toybox"), 45 m_screen(*this, "screen"), 46 m_palette(*this, "palette"), 47 m_bgpalette(*this, "bgpalette"), 48 m_eeprom(*this, "eeprom"), 49 m_soundlatch(*this, "soundlatch"), 50 m_watchdog(*this, "watchdog"), 51 m_spriteram(*this, "spriteram"), 52 m_mainregion(*this, "maincpu"), 53 m_mainram(*this, "mainram"), 54 m_mcuram(*this, "mcuram"), 55 m_okiregion(*this, "oki%u", 1), 56 m_okibank(*this, "okibank%u", 1), 57 m_p2_port(*this, "P2"), 58 m_fake_port(*this, "FAKE"), 59 m_dsw_port(*this, "DSW1"), 60 m_eepromout_port(*this, "EEPROMOUT"), 61 m_wheel_port(*this, "WHEEL%u", 0U), 62 m_audiocpu(*this, "audiocpu"), 63 m_ymsnd(*this, "ymsnd") 64 { 65 } 66 67 void init_bakubrkr(); 68 69 void bakubrkr(machine_config &config); 70 void wingforc(machine_config &config); 71 void blazeon(machine_config &config); 72 void mgcrystl(machine_config &config); 73 74 protected: 75 required_device<m68000_device> m_maincpu; 76 optional_device_array<ym2149_device, 2> m_ym2149; 77 optional_device_array<okim6295_device, 2> m_oki; 78 optional_device_array<kaneko_view2_tilemap_device, 2> m_view2; 79 optional_device<kaneko_hit_device> m_kaneko_hit; 80 required_device<kaneko16_sprite_device> m_kaneko_spr; 81 optional_device<kaneko_calc3_device> m_kaneko_calc3; 82 optional_device<kaneko_toybox_device> m_toybox; 83 required_device<screen_device> m_screen; 84 required_device<palette_device> m_palette; 85 optional_device<palette_device> m_bgpalette; 86 optional_device<eeprom_serial_93cxx_device> m_eeprom; 87 optional_device<generic_latch_8_device> m_soundlatch; 88 optional_device<watchdog_timer_device> m_watchdog; 89 optional_device<buffered_spriteram16_device> m_spriteram; 90 91 required_region_ptr<u16> m_mainregion; 92 optional_shared_ptr<u16> m_mainram; 93 optional_shared_ptr<u16> m_mcuram; 94 95 optional_memory_region_array<2> m_okiregion; 96 optional_memory_bank_array<2> m_okibank; 97 98 optional_ioport m_p2_port; 99 optional_ioport m_fake_port; 100 optional_ioport m_dsw_port; 101 optional_ioport m_eepromout_port; 102 optional_ioport_array<3> m_wheel_port; 103 104 u16 m_disp_enable; 105 106 int m_VIEW2_2_pri; 107 108 virtual void common_oki_bank_install(int bankno, size_t fixedsize, size_t bankedsize); 109 void coin_lockout_w(u8 data); 110 void bloodwar_coin_lockout_w(u8 data); 111 112 void display_enable_w(offs_t offset, u16 data, u16 mem_mask = ~0); // (u16 data, u16 mem_mask = ~0); 113 114 template<unsigned Chip> u16 ym2149_r(offs_t offset); 115 template<unsigned Chip> void ym2149_w(offs_t offset, u16 data, u16 mem_mask = ~0); 116 template<unsigned Mask> void oki_bank0_w(u8 data); 117 template<unsigned Mask> void oki_bank1_w(u8 data); 118 119 DECLARE_MACHINE_RESET(gtmr); 120 DECLARE_MACHINE_RESET(mgcrystl); 121 virtual void video_start() override; 122 u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 123 124 template<class BitmapClass> 125 u32 screen_update_common(screen_device &screen, BitmapClass &bitmap, const rectangle &cliprect); 126 127 TIMER_DEVICE_CALLBACK_MEMBER(interrupt); 128 129 template<class BitmapClass> 130 void fill_bitmap(BitmapClass &bitmap, const rectangle &cliprect); 131 132 void gtmr_oki1_map(address_map &map); 133 void gtmr_oki2_map(address_map &map); 134 135 private: 136 optional_device<z80_device> m_audiocpu; 137 optional_device<ym2151_device> m_ymsnd; 138 139 u8 eeprom_r(); 140 void eeprom_w(u8 data); 141 void eeprom_cs_w(u8 data); 142 143 void bakubrkr_map(address_map &map); 144 void bakubrkr_oki1_map(address_map &map); 145 void blazeon_map(address_map &map); 146 void blazeon_soundmem(address_map &map); 147 void blazeon_soundport(address_map &map); 148 void mgcrystl_map(address_map &map); 149 void wingforc_soundport(address_map &map); 150 }; 151 152 class kaneko16_gtmr_state : public kaneko16_state 153 { 154 public: kaneko16_gtmr_state(const machine_config & mconfig,device_type type,const char * tag)155 kaneko16_gtmr_state(const machine_config &mconfig, device_type type, const char *tag) : 156 kaneko16_state(mconfig, type, tag) 157 { 158 } 159 160 void init_gtmr(); 161 void bonkadv(machine_config &config); 162 void gtmr(machine_config &config); 163 void gtmr2(machine_config &config); 164 void gtmre(machine_config &config); 165 void bloodwar(machine_config &config); 166 167 protected: 168 virtual void common_oki_bank_install(int bankno, size_t fixedsize, size_t bankedsize) override; 169 170 private: 171 u16 gtmr_wheel_r(); 172 u16 gtmr2_wheel_r(); 173 u16 gtmr2_IN1_r(); 174 175 void bloodwar_map(address_map &map); 176 void bonkadv_map(address_map &map); 177 void gtmr2_map(address_map &map); 178 void gtmr_map(address_map &map); 179 }; 180 181 class kaneko16_berlwall_state : public kaneko16_state 182 { 183 public: kaneko16_berlwall_state(const machine_config & mconfig,device_type type,const char * tag)184 kaneko16_berlwall_state(const machine_config &mconfig, device_type type, const char *tag) : 185 kaneko16_state(mconfig, type, tag), 186 m_bg15_scroll(*this, "bg15_scroll"), 187 m_bgpalette(*this, "bgpalette") 188 { 189 } 190 191 void init_berlwall(); 192 void init_berlwallk(); 193 void init_berlwallt(); 194 void init_berlwall_common(); 195 void berlwall(machine_config &config); 196 197 protected: 198 virtual void video_start() override; 199 200 private: 201 optional_shared_ptr<u16> m_bg15_scroll; 202 required_device<palette_device> m_bgpalette; 203 204 bitmap_ind16 m_bg15_bitmap[32]; 205 206 u8 bg15_select_r(); 207 void bg15_select_w(u8 data); 208 u8 bg15_bright_r(); 209 void bg15_bright_w(u8 data); 210 211 void berlwall_oki_w(offs_t offset, u16 data, u16 mem_mask = ~0); 212 213 u16 berlwall_spriteram_r(offs_t offset); 214 void berlwall_spriteram_w(offs_t offset, u16 data, u16 mem_mask = ~0); 215 u16 berlwall_spriteregs_r(offs_t offset); 216 void berlwall_spriteregs_w(offs_t offset, u16 data, u16 mem_mask = ~0); 217 218 u8 m_bg15_select; 219 u8 m_bg15_bright; 220 221 u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 222 void render_15bpp_bitmap(bitmap_rgb32 &bitmap, const rectangle &cliprect); 223 224 void patch_protection(u32 bra_offset,u16 bra_value,u16 checksum); 225 void berlwall_map(address_map &map); 226 }; 227 228 class kaneko16_shogwarr_state : public kaneko16_state 229 { 230 public: kaneko16_shogwarr_state(const machine_config & mconfig,device_type type,const char * tag)231 kaneko16_shogwarr_state(const machine_config &mconfig, device_type type, const char *tag) : 232 kaneko16_state(mconfig, type, tag), 233 m_calc3_prot(*this, "calc3_prot") 234 { 235 } 236 void init_shogwarr(); 237 void init_brapboys(); 238 239 void shogwarr(machine_config &config); 240 void brapboys(machine_config &config); 241 242 private: 243 optional_device<kaneko_calc3_device> m_calc3_prot; 244 245 TIMER_DEVICE_CALLBACK_MEMBER(shogwarr_interrupt); 246 247 void shogwarr_oki_bank_w(u8 data); 248 249 void brapboys_oki2_map(address_map &map); 250 void shogwarr_map(address_map &map); 251 }; 252 253 #endif 254