1 // license:BSD-3-Clause 2 // copyright-holders:Phil Stroffolino 3 /************************************************************************* 4 5 Atari Fire Truck + Super Bug + Monte Carlo driver 6 7 *************************************************************************/ 8 #ifndef MAME_INCLUDES_FIRETRK_H 9 #define MAME_INCLUDES_FIRETRK_H 10 11 #pragma once 12 13 #include "machine/timer.h" 14 #include "machine/watchdog.h" 15 #include "sound/discrete.h" 16 #include "emupal.h" 17 #include "screen.h" 18 #include "tilemap.h" 19 20 #define FIRETRUCK_MOTOR_DATA NODE_01 21 #define FIRETRUCK_HORN_EN NODE_02 22 #define FIRETRUCK_SIREN_DATA NODE_03 23 #define FIRETRUCK_CRASH_DATA NODE_04 24 #define FIRETRUCK_SKID_EN NODE_05 25 #define FIRETRUCK_BELL_EN NODE_06 26 #define FIRETRUCK_ATTRACT_EN NODE_07 27 #define FIRETRUCK_XTNDPLY_EN NODE_08 28 29 #define SUPERBUG_SPEED_DATA FIRETRUCK_MOTOR_DATA 30 #define SUPERBUG_CRASH_DATA FIRETRUCK_CRASH_DATA 31 #define SUPERBUG_SKID_EN FIRETRUCK_SKID_EN 32 #define SUPERBUG_ASR_EN FIRETRUCK_XTNDPLY_EN 33 #define SUPERBUG_ATTRACT_EN FIRETRUCK_ATTRACT_EN 34 35 #define MONTECAR_MOTOR_DATA FIRETRUCK_MOTOR_DATA 36 #define MONTECAR_CRASH_DATA FIRETRUCK_CRASH_DATA 37 #define MONTECAR_DRONE_MOTOR_DATA FIRETRUCK_SIREN_DATA 38 #define MONTECAR_SKID_EN FIRETRUCK_SKID_EN 39 #define MONTECAR_DRONE_LOUD_DATA FIRETRUCK_BELL_EN 40 #define MONTECAR_BEEPER_EN FIRETRUCK_XTNDPLY_EN 41 #define MONTECAR_ATTRACT_INV FIRETRUCK_ATTRACT_EN 42 43 44 class firetrk_state : public driver_device 45 { 46 public: firetrk_state(const machine_config & mconfig,device_type type,const char * tag)47 firetrk_state(const machine_config &mconfig, device_type type, const char *tag) 48 : driver_device(mconfig, type, tag) 49 , m_maincpu(*this, "maincpu") 50 , m_watchdog(*this, "watchdog") 51 , m_discrete(*this, "discrete") 52 , m_alpha_num_ram(*this, "alpha_num_ram") 53 , m_playfield_ram(*this, "playfield_ram") 54 , m_scroll_y(*this, "scroll_y") 55 , m_scroll_x(*this, "scroll_x") 56 , m_car_rot(*this, "car_rot") 57 , m_blink(*this, "blink") 58 , m_drone_x(*this, "drone_x") 59 , m_drone_y(*this, "drone_y") 60 , m_drone_rot(*this, "drone_rot") 61 , m_gfxdecode(*this, "gfxdecode") 62 , m_screen(*this, "screen") 63 , m_palette(*this, "palette") 64 , m_bit_0(*this, "BIT_0") 65 , m_bit_6(*this, "BIT_6") 66 , m_bit_7(*this, "BIT_7") 67 , m_dips(*this, {"DIP_0", "DIP_1"}) 68 , m_steer(*this, "STEER_%u", 1U) 69 , m_leds(*this, "led%u", 0U) 70 { } 71 72 void firetrk(machine_config &config); 73 void montecar(machine_config &config); 74 void superbug(machine_config &config); 75 76 template <int P> DECLARE_READ_LINE_MEMBER(steer_dir_r); 77 template <int P> DECLARE_READ_LINE_MEMBER(steer_flag_r); 78 template <int P> DECLARE_READ_LINE_MEMBER(skid_r); 79 template <int P> DECLARE_READ_LINE_MEMBER(crash_r); 80 template <int P> DECLARE_READ_LINE_MEMBER(gear_r); 81 DECLARE_INPUT_CHANGED_MEMBER(service_mode_switch_changed); 82 DECLARE_INPUT_CHANGED_MEMBER(firetrk_horn_changed); 83 DECLARE_INPUT_CHANGED_MEMBER(gear_changed); 84 85 private: 86 void firetrk_output_w(uint8_t data); 87 void superbug_output_w(offs_t offset, uint8_t data); 88 void montecar_output_1_w(uint8_t data); 89 void montecar_output_2_w(uint8_t data); 90 uint8_t firetrk_dip_r(offs_t offset); 91 uint8_t montecar_dip_r(offs_t offset); 92 uint8_t firetrk_input_r(offs_t offset); 93 uint8_t montecar_input_r(offs_t offset); 94 void blink_on_w(uint8_t data); 95 void montecar_car_reset_w(uint8_t data); 96 void montecar_drone_reset_w(uint8_t data); 97 void steer_reset_w(uint8_t data); 98 void crash_reset_w(uint8_t data); 99 TILE_GET_INFO_MEMBER(firetrk_get_tile_info1); 100 TILE_GET_INFO_MEMBER(superbug_get_tile_info1); 101 TILE_GET_INFO_MEMBER(montecar_get_tile_info1); 102 TILE_GET_INFO_MEMBER(firetrk_get_tile_info2); 103 TILE_GET_INFO_MEMBER(superbug_get_tile_info2); 104 TILE_GET_INFO_MEMBER(montecar_get_tile_info2); 105 void firetrk_palette(palette_device &palette); 106 DECLARE_VIDEO_START(superbug); 107 DECLARE_VIDEO_START(montecar); 108 void montecar_palette(palette_device &palette); 109 uint32_t screen_update_firetrk(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 110 uint32_t screen_update_superbug(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 111 uint32_t screen_update_montecar(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 112 TIMER_DEVICE_CALLBACK_MEMBER(firetrk_scanline); 113 void firetrk_skid_reset_w(uint8_t data); 114 void montecar_skid_reset_w(uint8_t data); 115 void firetrk_crash_snd_w(uint8_t data); 116 void firetrk_skid_snd_w(uint8_t data); 117 void firetrk_motor_snd_w(uint8_t data); 118 void superbug_motor_snd_w(uint8_t data); 119 void firetrk_xtndply_w(uint8_t data); 120 void prom_to_palette(int number, uint8_t val); 121 void firetrk_draw_car(bitmap_ind16 &bitmap, const rectangle &cliprect, int which, int flash); 122 void superbug_draw_car(bitmap_ind16 &bitmap, const rectangle &cliprect, int flash); 123 void montecar_draw_car(bitmap_ind16 &bitmap, const rectangle &cliprect, int which, int is_collision_detection); 124 void check_collision(int which); 125 void set_service_mode(int enable); 126 void draw_text(bitmap_ind16 &bitmap, const rectangle &cliprect, uint8_t *alpha_ram, int x, int count, int height); 127 void firetrk_map(address_map &map); 128 void montecar_map(address_map &map); 129 void superbug_map(address_map &map); 130 machine_start()131 virtual void machine_start() override { m_leds.resolve(); } 132 virtual void machine_reset() override; 133 virtual void video_start() override; 134 135 required_device<cpu_device> m_maincpu; 136 required_device<watchdog_timer_device> m_watchdog; 137 required_device<discrete_device> m_discrete; 138 required_shared_ptr<uint8_t> m_alpha_num_ram; 139 required_shared_ptr<uint8_t> m_playfield_ram; 140 required_shared_ptr<uint8_t> m_scroll_y; 141 required_shared_ptr<uint8_t> m_scroll_x; 142 required_shared_ptr<uint8_t> m_car_rot; 143 optional_shared_ptr<uint8_t> m_blink; 144 optional_shared_ptr<uint8_t> m_drone_x; 145 optional_shared_ptr<uint8_t> m_drone_y; 146 optional_shared_ptr<uint8_t> m_drone_rot; 147 required_device<gfxdecode_device> m_gfxdecode; 148 required_device<screen_device> m_screen; 149 required_device<palette_device> m_palette; 150 151 optional_ioport m_bit_0; 152 optional_ioport m_bit_6; 153 optional_ioport m_bit_7; 154 required_ioport_array<2> m_dips; 155 optional_ioport_array<2> m_steer; 156 output_finder<4> m_leds; 157 158 uint8_t m_in_service_mode; 159 uint32_t m_dial[2]; 160 uint8_t m_steer_dir[2]; 161 uint8_t m_steer_flag[2]; 162 uint8_t m_gear; 163 164 uint8_t m_flash; 165 uint8_t m_crash[2]; 166 uint8_t m_skid[2]; 167 bitmap_ind16 m_helper1; 168 bitmap_ind16 m_helper2; 169 uint32_t m_color1_mask; 170 uint32_t m_color2_mask; 171 tilemap_t *m_tilemap1; 172 tilemap_t *m_tilemap2; 173 }; 174 175 176 /*----------- defined in audio/firetrk.c -----------*/ 177 178 DISCRETE_SOUND_EXTERN( firetrk_discrete ); 179 DISCRETE_SOUND_EXTERN( superbug_discrete ); 180 DISCRETE_SOUND_EXTERN( montecar_discrete ); 181 182 #endif // MAME_INCLUDES_FIRETRK_H 183