1 // license:BSD-3-Clause 2 // copyright-holders:Nicola Salmoria, Tormod Tjaberg, Mirko Buffoni,Lee Taylor, Valerio Verrando, Zsolt Vasvari 3 // thanks-to:Michael Strutts, Marco Cassili 4 /*************************************************************************** 5 6 8080-based black and white hardware 7 8 ****************************************************************************/ 9 #ifndef MAME_INCLUDES_8080BW_H 10 #define MAME_INCLUDES_8080BW_H 11 12 #pragma once 13 14 #include "audio/8080bw.h" 15 #include "includes/mw8080bw.h" 16 17 #include "machine/eepromser.h" 18 #include "machine/timer.h" 19 #include "sound/samples.h" 20 #include "sound/sn76477.h" 21 #include "sound/spkrdev.h" 22 23 #include "emupal.h" 24 #include "screen.h" 25 26 27 /* for games in 8080bw.c */ 28 #define CABINET_PORT_TAG "CAB" 29 30 31 class _8080bw_state : public mw8080bw_state 32 { 33 public: _8080bw_state(const machine_config & mconfig,device_type type,const char * tag)34 _8080bw_state(const machine_config &mconfig, device_type type, const char *tag) 35 : mw8080bw_state(mconfig, type, tag) 36 , m_audiocpu(*this, "audiocpu") 37 , m_schaser_effect_555_timer(*this, "schaser_sh_555") 38 , m_claybust_gun_on(*this, "claybust_gun") 39 , m_sn(*this, "snsnd") 40 , m_samples(*this, "samples") 41 , m_speaker(*this, "speaker") 42 , m_eeprom(*this, "eeprom") 43 , m_palette(*this, "palette") 44 , m_colorram(*this, "colorram") 45 , m_gunx(*this, "GUNX") 46 , m_guny(*this, "GUNY") 47 , m_timer_state(1) 48 { } 49 50 void indianbtbr(machine_config &config); 51 void claybust(machine_config &config); 52 void shuttlei(machine_config &config); 53 void spcewarla(machine_config &config); 54 void escmars(machine_config &config); 55 void lrescue(machine_config &config); 56 void invmulti(machine_config &config); 57 void yosakdon(machine_config &config); 58 void polaris(machine_config &config); 59 void attackfc(machine_config &config); 60 void astropal(machine_config &config); 61 void rollingc(machine_config &config); 62 void vortex(machine_config &config); 63 void invrvnge(machine_config &config); 64 void sflush(machine_config &config); 65 void invadpt2(machine_config &config); 66 void lupin3a(machine_config &config); 67 void indianbt(machine_config &config); 68 void starw1(machine_config &config); 69 void cosmo(machine_config &config); 70 void spcewars(machine_config &config); 71 void cosmicmo(machine_config &config); 72 void darthvdr(machine_config &config); 73 void ballbomb(machine_config &config); 74 void spacecom(machine_config &config); 75 void crashrd(machine_config &config); 76 void schasercv(machine_config &config); 77 void lupin3(machine_config &config); 78 void spacerng(machine_config &config); 79 void steelwkr(machine_config &config); 80 void schaser(machine_config &config); 81 82 void init_invmulti(); 83 void init_spacecom(); 84 void init_vortex(); 85 void init_attackfc(); 86 void init_invrvnge(); 87 88 DECLARE_READ_LINE_MEMBER(sflush_80_r); 89 uint8_t sflush_in0_r(); 90 DECLARE_INPUT_CHANGED_MEMBER(claybust_gun_trigger); 91 DECLARE_READ_LINE_MEMBER(claybust_gun_on_r); 92 93 protected: 94 void clear_extra_columns( bitmap_rgb32 &bitmap, int color ); 95 inline void set_8_pixels( bitmap_rgb32 &bitmap, uint8_t y, uint8_t x, uint8_t data, int fore_color, int back_color ); 96 97 /* devices/memory pointers */ 98 optional_device<cpu_device> m_audiocpu; 99 optional_device<timer_device> m_schaser_effect_555_timer; 100 optional_device<timer_device> m_claybust_gun_on; 101 optional_device<sn76477_device> m_sn; 102 optional_device<samples_device> m_samples; 103 optional_device<speaker_sound_device> m_speaker; 104 optional_device<eeprom_serial_93cxx_device> m_eeprom; 105 optional_device<palette_device> m_palette; 106 optional_shared_ptr<uint8_t> m_colorram; 107 108 private: 109 /* misc game specific */ 110 optional_ioport m_gunx; 111 optional_ioport m_guny; 112 113 uint8_t m_color_map; 114 uint8_t m_screen_red; 115 uint8_t m_fleet_step; 116 117 std::unique_ptr<uint8_t[]> m_scattered_colorram; 118 std::unique_ptr<uint8_t[]> m_scattered_colorram2; 119 120 /* sound-related */ 121 uint8_t m_port_1_last_extra; 122 uint8_t m_port_2_last_extra; 123 uint8_t m_port_3_last_extra; 124 125 attotime m_schaser_effect_555_time_remain; 126 int32_t m_schaser_effect_555_time_remain_savable; 127 int m_schaser_effect_555_is_low; 128 int m_schaser_explosion; 129 int m_schaser_last_effect; 130 uint8_t m_polaris_cloud_speed; 131 uint8_t m_polaris_cloud_pos; 132 uint8_t m_schaser_background_disable; 133 uint8_t m_schaser_background_select; 134 uint16_t m_claybust_gun_pos; 135 u8 m_sound_data; 136 bool m_timer_state; 137 138 TIMER_DEVICE_CALLBACK_MEMBER(nmi_timer); 139 uint8_t indianbt_r(); 140 uint8_t polaris_port00_r(); 141 void steelwkr_sh_port_3_w(uint8_t data); 142 void invadpt2_sh_port_1_w(uint8_t data); 143 void invadpt2_sh_port_2_w(uint8_t data); 144 void spacerng_sh_port_2_w(uint8_t data); 145 void spcewars_sh_port_w(uint8_t data); 146 void lrescue_sh_port_1_w(uint8_t data); 147 void lrescue_sh_port_2_w(uint8_t data); 148 void cosmo_sh_port_2_w(uint8_t data); 149 uint8_t darthvdr_01_r(); 150 void darthvdr_00_w(uint8_t data); 151 void darthvdr_08_w(uint8_t data); 152 IRQ_CALLBACK_MEMBER(darthvdr_interrupt_vector); 153 void ballbomb_01_w(uint8_t data); 154 void ballbomb_sh_port_1_w(uint8_t data); 155 void ballbomb_sh_port_2_w(uint8_t data); 156 void indianbt_sh_port_1_w(uint8_t data); 157 void indianbt_sh_port_2_w(uint8_t data); 158 void indianbtbr_sh_port_1_w(uint8_t data); 159 void indianbtbr_sh_port_2_w(uint8_t data); 160 uint8_t indianbtbr_01_r(); 161 void schaser_sh_port_1_w(uint8_t data); 162 void schaser_sh_port_2_w(uint8_t data); 163 void rollingc_sh_port_w(uint8_t data); 164 uint8_t invrvnge_02_r(); 165 void invrvnge_port03_w(uint8_t data); 166 void invrvnge_port05_w(uint8_t data); 167 void lupin3_00_w(uint8_t data); 168 void lupin3_sh_port_1_w(uint8_t data); 169 void lupin3_sh_port_2_w(uint8_t data); 170 uint8_t schasercv_02_r(); 171 void schasercv_sh_port_1_w(uint8_t data); 172 void schasercv_sh_port_2_w(uint8_t data); 173 void crashrd_port03_w(uint8_t data); 174 void crashrd_port05_w(uint8_t data); 175 void yosakdon_sh_port_1_w(uint8_t data); 176 void yosakdon_sh_port_2_w(uint8_t data); 177 uint8_t shuttlei_ff_r(); 178 void shuttlei_ff_w(uint8_t data); 179 void shuttlei_sh_port_1_w(uint8_t data); 180 void shuttlei_sh_port_2_w(uint8_t data); 181 uint8_t claybust_gun_lo_r(); 182 uint8_t claybust_gun_hi_r(); 183 uint8_t invmulti_eeprom_r(); 184 void invmulti_eeprom_w(uint8_t data); 185 void invmulti_bank_w(uint8_t data); 186 187 uint8_t rollingc_scattered_colorram_r(offs_t offset); 188 void rollingc_scattered_colorram_w(offs_t offset, uint8_t data); 189 uint8_t rollingc_scattered_colorram2_r(offs_t offset); 190 void rollingc_scattered_colorram2_w(offs_t offset, uint8_t data); 191 uint8_t schaser_scattered_colorram_r(offs_t offset); 192 void schaser_scattered_colorram_w(offs_t offset, uint8_t data); 193 194 DECLARE_MACHINE_START(extra_8080bw); 195 DECLARE_MACHINE_START(rollingc); 196 DECLARE_MACHINE_START(sflush); 197 DECLARE_MACHINE_START(schaser); 198 DECLARE_MACHINE_START(schasercv); 199 DECLARE_MACHINE_RESET(schaser); 200 DECLARE_MACHINE_START(polaris); 201 DECLARE_MACHINE_START(darthvdr); 202 DECLARE_MACHINE_RESET(darthvdr); 203 DECLARE_MACHINE_START(extra_8080bw_sh); 204 DECLARE_MACHINE_START(extra_8080bw_vh); 205 DECLARE_MACHINE_START(schaser_sh); 206 DECLARE_MACHINE_RESET(schaser_sh); 207 DECLARE_MACHINE_START(claybust); 208 209 void rollingc_palette(palette_device &palette) const; 210 void sflush_palette(palette_device &palette) const; 211 212 uint32_t screen_update_invadpt2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 213 uint32_t screen_update_cosmo(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 214 uint32_t screen_update_rollingc(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 215 uint32_t screen_update_schaser(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 216 uint32_t screen_update_schasercv(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 217 uint32_t screen_update_sflush(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 218 uint32_t screen_update_indianbt(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 219 uint32_t screen_update_lupin3(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 220 uint32_t screen_update_polaris(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 221 uint32_t screen_update_ballbomb(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 222 uint32_t screen_update_shuttlei(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 223 uint32_t screen_update_spacecom(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 224 225 DECLARE_WRITE_LINE_MEMBER(polaris_60hz_w); 226 TIMER_DEVICE_CALLBACK_MEMBER(claybust_gun_callback); 227 TIMER_DEVICE_CALLBACK_MEMBER(schaser_effect_555_cb); 228 void indianbt_sh_port_3_w(uint8_t data); 229 void polaris_sh_port_1_w(uint8_t data); 230 void polaris_sh_port_2_w(uint8_t data); 231 void polaris_sh_port_3_w(uint8_t data); 232 233 void schaser_reinit_555_time_remain(); 234 inline void set_pixel( bitmap_rgb32 &bitmap, uint8_t y, uint8_t x, int color ); 235 236 void invaders_samples_audio(machine_config &config); 237 238 void astropal_io_map(address_map &map); 239 void attackfc_io_map(address_map &map); 240 void ballbomb_io_map(address_map &map); 241 void claybust_io_map(address_map &map); 242 void cosmicmo_io_map(address_map &map); 243 void cosmo_io_map(address_map &map); 244 void cosmo_map(address_map &map); 245 void crashrd_io_map(address_map &map); 246 void darthvdr_io_map(address_map &map); 247 void darthvdr_map(address_map &map); 248 void escmars_map(address_map &map); 249 void indianbt_io_map(address_map &map); 250 void indianbtbr_io_map(address_map &map); 251 void invadpt2_io_map(address_map &map); 252 void invmulti_map(address_map &map); 253 void invrvnge_io_map(address_map &map); 254 void invrvnge_sound_map(address_map &map); 255 void lrescue_io_map(address_map &map); 256 void lupin3_io_map(address_map &map); 257 void polaris_io_map(address_map &map); 258 void rollingc_io_map(address_map &map); 259 void rollingc_map(address_map &map); 260 void schaser_io_map(address_map &map); 261 void schaser_map(address_map &map); 262 void schasercv_io_map(address_map &map); 263 void sflush_map(address_map &map); 264 void shuttlei_io_map(address_map &map); 265 void shuttlei_map(address_map &map); 266 void spacecom_io_map(address_map &map); 267 void spacecom_map(address_map &map); 268 void spacerng_io_map(address_map &map); 269 void spcewarla_io_map(address_map &map); 270 void spcewars_io_map(address_map &map); 271 void starw1_io_map(address_map &map); 272 void steelwkr_io_map(address_map &map); 273 void vortex_io_map(address_map &map); 274 void yosakdon_io_map(address_map &map); 275 void yosakdon_map(address_map &map); 276 }; 277 278 279 /*----------- defined in audio/8080bw.cpp -----------*/ 280 extern const char *const lrescue_sample_names[]; 281 extern const char *const lupin3_sample_names[]; 282 283 DISCRETE_SOUND_EXTERN( ballbomb_discrete ); 284 DISCRETE_SOUND_EXTERN( indianbt_discrete ); 285 DISCRETE_SOUND_EXTERN( polaris_discrete ); 286 DISCRETE_SOUND_EXTERN( schaser_discrete ); 287 288 /*******************************************************/ 289 /* */ 290 /* Cane (Model Racing) */ 291 /* */ 292 /*******************************************************/ 293 class cane_state : public _8080bw_state 294 { 295 public: cane_state(machine_config const & mconfig,device_type type,char const * tag)296 cane_state(machine_config const &mconfig, device_type type, char const *tag) : 297 _8080bw_state(mconfig, type, tag) 298 { 299 } 300 301 void cane(machine_config &config); 302 void cane_audio(machine_config &config); 303 304 protected: 305 void cane_unknown_port0_w(u8 data); 306 307 private: 308 void cane_io_map(address_map &map); 309 void cane_map(address_map &map); 310 }; 311 312 DISCRETE_SOUND_EXTERN( cane_discrete ); 313 314 /*******************************************************/ 315 /* */ 316 /* Model Racing "Orbite" */ 317 /* */ 318 /*******************************************************/ 319 class orbite_state : public _8080bw_state 320 { 321 public: orbite_state(machine_config const & mconfig,device_type type,char const * tag)322 orbite_state(machine_config const &mconfig, device_type type, char const *tag) : 323 _8080bw_state(mconfig, type, tag), 324 m_main_ram(*this, "main_ram") 325 { 326 } 327 328 void orbite(machine_config &config); 329 330 protected: 331 required_shared_ptr<uint8_t> m_main_ram; 332 std::unique_ptr<uint8_t[]> m_scattered_colorram; 333 334 virtual void machine_start() override; 335 336 u8 orbite_scattered_colorram_r(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED u8 mem_mask = 0xff); 337 void orbite_scattered_colorram_w(ATTR_UNUSED address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED u8 data, ATTR_UNUSED u8 mem_mask = 0xff); 338 339 private: 340 void orbite_io_map(address_map &map); 341 void orbite_map(address_map &map); 342 343 u32 screen_update_orbite(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 344 }; 345 346 #endif // MAME_INCLUDES_8080BW_H 347