1 // license:BSD-3-Clause 2 // copyright-holders:Mike Balfour 3 /************************************************************************* 4 5 Atari Sprint hardware 6 7 *************************************************************************/ 8 #ifndef MAME_INCLUDES_SPRINT2_H 9 #define MAME_INCLUDES_SPRINT2_H 10 11 #pragma once 12 13 #include "machine/74259.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 /* Discrete Sound Input Nodes */ 21 #define SPRINT2_SKIDSND1_EN NODE_01 22 #define SPRINT2_SKIDSND2_EN NODE_02 23 #define SPRINT2_MOTORSND1_DATA NODE_03 24 #define SPRINT2_MOTORSND2_DATA NODE_04 25 #define SPRINT2_CRASHSND_DATA NODE_05 26 #define SPRINT2_ATTRACT_EN NODE_06 27 #define SPRINT2_NOISE_RESET NODE_07 28 29 #define DOMINOS_FREQ_DATA SPRINT2_MOTORSND1_DATA 30 #define DOMINOS_AMP_DATA SPRINT2_CRASHSND_DATA 31 #define DOMINOS_TUMBLE_EN SPRINT2_SKIDSND1_EN 32 #define DOMINOS_ATTRACT_EN SPRINT2_ATTRACT_EN 33 34 35 class sprint2_state : public driver_device 36 { 37 public: sprint2_state(const machine_config & mconfig,device_type type,const char * tag)38 sprint2_state(const machine_config &mconfig, device_type type, const char *tag) : 39 driver_device(mconfig, type, tag), 40 m_video_ram(*this, "video_ram"), 41 m_maincpu(*this, "maincpu"), 42 m_watchdog(*this, "watchdog"), 43 m_outlatch(*this, "outlatch"), 44 m_discrete(*this, "discrete"), 45 m_gfxdecode(*this, "gfxdecode"), 46 m_screen(*this, "screen"), 47 m_palette(*this, "palette") 48 { } 49 50 void sprint1(machine_config &config); 51 void sprint2(machine_config &config); 52 void dominos4(machine_config &config); 53 void dominos(machine_config &config); 54 55 void init_sprint1(); 56 void init_sprint2(); 57 void init_dominos(); 58 void init_dominos4(); 59 60 private: 61 int m_steering[2]; 62 int m_gear[2]; 63 int m_game; 64 uint8_t m_dial[2]; 65 required_shared_ptr<uint8_t> m_video_ram; 66 tilemap_t* m_bg_tilemap; 67 bitmap_ind16 m_helper; 68 int m_collision[2]; 69 uint8_t sprint2_wram_r(offs_t offset); 70 uint8_t sprint2_dip_r(offs_t offset); 71 uint8_t sprint2_input_A_r(offs_t offset); 72 uint8_t sprint2_input_B_r(offs_t offset); 73 uint8_t sprint2_sync_r(); 74 uint8_t sprint2_steering1_r(); 75 uint8_t sprint2_steering2_r(); 76 void sprint2_steering_reset1_w(uint8_t data); 77 void sprint2_steering_reset2_w(uint8_t data); 78 void sprint2_wram_w(offs_t offset, uint8_t data); 79 void output_latch_w(offs_t offset, uint8_t data); 80 uint8_t sprint2_collision1_r(); 81 uint8_t sprint2_collision2_r(); 82 void sprint2_collision_reset1_w(uint8_t data); 83 void sprint2_collision_reset2_w(uint8_t data); 84 void sprint2_video_ram_w(offs_t offset, uint8_t data); 85 void sprint2_noise_reset_w(uint8_t data); 86 TILE_GET_INFO_MEMBER(get_tile_info); 87 virtual void video_start() override; 88 void sprint2_palette(palette_device &palette) const; 89 uint32_t screen_update_sprint2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 90 DECLARE_WRITE_LINE_MEMBER(screen_vblank_sprint2); 91 INTERRUPT_GEN_MEMBER(sprint2_irq); 92 uint8_t collision_check(rectangle& rect); 93 inline int get_sprite_code(uint8_t *video_ram, int n); 94 inline int get_sprite_x(uint8_t *video_ram, int n); 95 inline int get_sprite_y(uint8_t *video_ram, int n); 96 int service_mode(); 97 required_device<cpu_device> m_maincpu; 98 required_device<watchdog_timer_device> m_watchdog; 99 required_device<f9334_device> m_outlatch; 100 required_device<discrete_sound_device> m_discrete; 101 required_device<gfxdecode_device> m_gfxdecode; 102 required_device<screen_device> m_screen; 103 required_device<palette_device> m_palette; 104 105 void sprint2_map(address_map &map); 106 }; 107 108 /*----------- defined in audio/sprint2.c -----------*/ 109 DISCRETE_SOUND_EXTERN( sprint2_discrete ); 110 DISCRETE_SOUND_EXTERN( sprint1_discrete ); 111 DISCRETE_SOUND_EXTERN( dominos_discrete ); 112 113 #endif // MAME_INCLUDES_SPRINT2_H 114