1 // license:BSD-3-Clause 2 // copyright-holders:Aaron Giles 3 /************************************************************************* 4 5 Midway MCR system 6 7 **************************************************************************/ 8 #ifndef MAME_INCLUDES_MCR_H 9 #define MAME_INCLUDES_MCR_H 10 11 #pragma once 12 13 #include "cpu/z80/z80.h" 14 #include "machine/z80daisy.h" 15 #include "machine/timer.h" 16 #include "machine/z80ctc.h" 17 #include "machine/z80pio.h" 18 #include "machine/z80sio.h" 19 #include "machine/watchdog.h" 20 #include "audio/bally.h" 21 #include "audio/midway.h" 22 #include "audio/csd.h" 23 #include "sound/samples.h" 24 #include "emupal.h" 25 #include "tilemap.h" 26 27 /* constants */ 28 #define MAIN_OSC_MCR_I XTAL(19'968'000) 29 30 31 class mcr_state : public driver_device 32 { 33 public: mcr_state(const machine_config & mconfig,device_type type,const char * tag)34 mcr_state(const machine_config &mconfig, device_type type, const char *tag) : 35 driver_device(mconfig, type, tag), 36 m_maincpu(*this, "maincpu"), 37 m_spriteram(*this, "spriteram"), 38 m_videoram(*this, "videoram"), 39 m_paletteram(*this, "paletteram"), 40 m_ctc(*this, "ctc"), 41 m_ssio(*this, "ssio"), 42 m_cheap_squeak_deluxe(*this, "csd"), 43 m_sounds_good(*this, "sg"), 44 m_turbo_cheap_squeak(*this, "tcs"), 45 m_squawk_n_talk(*this, "snt"), 46 m_samples(*this, "samples"), 47 m_gfxdecode(*this, "gfxdecode"), 48 m_palette(*this, "palette") 49 { } 50 51 void mcr_control_port_w(uint8_t data); 52 void mcr_paletteram9_w(offs_t offset, uint8_t data); 53 void mcr_90009_videoram_w(offs_t offset, uint8_t data); 54 void mcr_90010_videoram_w(offs_t offset, uint8_t data); 55 uint8_t twotiger_videoram_r(offs_t offset); 56 void twotiger_videoram_w(offs_t offset, uint8_t data); 57 void mcr_91490_videoram_w(offs_t offset, uint8_t data); 58 uint8_t solarfox_ip0_r(); 59 uint8_t solarfox_ip1_r(); 60 uint8_t kick_ip1_r(); 61 void wacko_op4_w(uint8_t data); 62 uint8_t wacko_ip1_r(); 63 uint8_t wacko_ip2_r(); 64 uint8_t kroozr_ip1_r(); 65 void kroozr_op4_w(uint8_t data); 66 void journey_op4_w(uint8_t data); 67 void twotiger_op4_w(uint8_t data); 68 void dotron_op4_w(uint8_t data); 69 uint8_t demoderb_ip1_r(); 70 uint8_t demoderb_ip2_r(); 71 void demoderb_op4_w(uint8_t data); 72 73 void init_mcr_91490(); 74 void init_kroozr(); 75 void init_solarfox(); 76 void init_kick(); 77 void init_twotiger(); 78 void init_demoderb(); 79 void init_wacko(); 80 void init_mcr_90010(); 81 void init_dotrone(); 82 void init_journey(); 83 84 uint32_t screen_update_mcr(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 85 TIMER_DEVICE_CALLBACK_MEMBER(mcr_interrupt); 86 87 void mcr_91490_tcs(machine_config &config); 88 void mcr_91490_snt(machine_config &config); 89 void mcr_91490(machine_config &config); 90 void mcr_90009(machine_config &config); 91 void mcr_90010_tt(machine_config &config); 92 void mcr_91475(machine_config &config); 93 void mcr_90010(machine_config &config); 94 void cpu_90009_map(address_map &map); 95 void cpu_90009_portmap(address_map &map); 96 void cpu_90010_map(address_map &map); 97 void cpu_90010_portmap(address_map &map); 98 void cpu_91490_map(address_map &map); 99 void cpu_91490_portmap(address_map &map); 100 protected: 101 virtual void machine_start() override; 102 virtual void machine_reset() override; 103 virtual void video_start() override; 104 105 TILE_GET_INFO_MEMBER(mcr_90009_get_tile_info); 106 TILE_GET_INFO_MEMBER(mcr_90010_get_tile_info); 107 TILE_GET_INFO_MEMBER(mcr_91490_get_tile_info); 108 void mcr_set_color(int index, int data); 109 void journey_set_color(int index, int data); 110 void render_sprites_91399(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 111 void render_sprites_91464(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int primask, int sprmask, int colormask); 112 void mcr_init(int cpuboard, int vidboard, int ssioboard); 113 114 int8_t m_mcr12_sprite_xoffs_flip; 115 uint8_t m_input_mux; 116 uint8_t m_last_op4; 117 tilemap_t *m_bg_tilemap; 118 119 uint8_t m_mcr_cocktail_flip; 120 121 required_device<z80_device> m_maincpu; 122 optional_shared_ptr<uint8_t> m_spriteram; 123 optional_shared_ptr<uint8_t> m_videoram; 124 optional_shared_ptr<uint8_t> m_paletteram; 125 126 required_device<z80ctc_device> m_ctc; 127 optional_device<midway_ssio_device> m_ssio; 128 optional_device<midway_cheap_squeak_deluxe_device> m_cheap_squeak_deluxe; 129 optional_device<midway_sounds_good_device> m_sounds_good; 130 optional_device<midway_turbo_cheap_squeak_device> m_turbo_cheap_squeak; 131 optional_device<bally_squawk_n_talk_device> m_squawk_n_talk; 132 optional_device<samples_device> m_samples; 133 required_device<gfxdecode_device> m_gfxdecode; 134 required_device<palette_device> m_palette; 135 136 private: 137 uint32_t m_mcr_cpu_board; 138 uint32_t m_mcr_sprite_board; 139 140 int8_t m_mcr12_sprite_xoffs; 141 }; 142 143 class mcr_dpoker_state : public mcr_state 144 { 145 public: mcr_dpoker_state(const machine_config & mconfig,device_type type,const char * tag)146 mcr_dpoker_state(const machine_config &mconfig, device_type type, const char *tag) : 147 mcr_state(mconfig, type, tag), 148 m_coin_in_timer(*this, "coinin"), 149 m_hopper_timer(*this, "hopper"), 150 m_lamps(*this, "lamp%u", 0U) 151 { } 152 153 uint8_t ip0_r(); 154 void lamps1_w(uint8_t data); 155 void lamps2_w(uint8_t data); 156 void output_w(uint8_t data); 157 void meters_w(uint8_t data); 158 159 DECLARE_INPUT_CHANGED_MEMBER(coin_in_hit); 160 161 TIMER_DEVICE_CALLBACK_MEMBER(hopper_callback); 162 TIMER_DEVICE_CALLBACK_MEMBER(coin_in_callback); 163 164 void init_dpoker(); 165 166 void mcr_90009_dp(machine_config &config); 167 168 protected: machine_start()169 virtual void machine_start() override { mcr_state::machine_start(); m_lamps.resolve(); } 170 171 private: 172 uint8_t m_coin_status; 173 uint8_t m_output; 174 175 required_device<timer_device> m_coin_in_timer; 176 required_device<timer_device> m_hopper_timer; 177 output_finder<14> m_lamps; 178 }; 179 180 class mcr_nflfoot_state : public mcr_state 181 { 182 public: mcr_nflfoot_state(const machine_config & mconfig,device_type type,const char * tag)183 mcr_nflfoot_state(const machine_config &mconfig, device_type type, const char *tag) : 184 mcr_state(mconfig, type, tag), 185 m_ipu(*this, "ipu"), 186 m_ipu_sio(*this, "ipu_sio"), 187 m_ipu_ctc(*this, "ipu_ctc"), 188 m_ipu_pio0(*this, "ipu_pio0"), 189 m_ipu_pio1(*this, "ipu_pio1") 190 { } 191 192 DECLARE_WRITE_LINE_MEMBER(sio_txda_w); 193 DECLARE_WRITE_LINE_MEMBER(sio_txdb_w); 194 void ipu_laserdisk_w(offs_t offset, uint8_t data); 195 uint8_t ipu_watchdog_r(); 196 void ipu_watchdog_w(uint8_t data); 197 uint8_t ip2_r(); 198 void op4_w(uint8_t data); 199 200 TIMER_CALLBACK_MEMBER(ipu_watchdog_reset); 201 TIMER_DEVICE_CALLBACK_MEMBER(ipu_interrupt); 202 203 void init_nflfoot(); 204 205 void mcr_91490_ipu(machine_config &config); 206 void ipu_91695_map(address_map &map); 207 void ipu_91695_portmap(address_map &map); 208 protected: 209 virtual void machine_start() override; 210 211 private: 212 int m_ipu_sio_txda; 213 int m_ipu_sio_txdb; 214 emu_timer *m_ipu_watchdog_timer; 215 216 required_device<z80_device> m_ipu; 217 required_device<z80sio_device> m_ipu_sio; 218 required_device<z80ctc_device> m_ipu_ctc; 219 required_device<z80pio_device> m_ipu_pio0; 220 required_device<z80pio_device> m_ipu_pio1; 221 }; 222 223 /*----------- defined in machine/mcr.cpp -----------*/ 224 225 extern const z80_daisy_config mcr_daisy_chain[]; 226 extern const z80_daisy_config mcr_ipu_daisy_chain[]; 227 228 extern const gfx_layout mcr_bg_layout; 229 extern const gfx_layout mcr_sprite_layout; 230 231 #endif // MAME_INCLUDES_MCR_H 232