1 // license:BSD-3-Clause 2 // copyright-holders:Aaron Giles 3 /************************************************************************* 4 5 Atari Cyberball hardware 6 7 *************************************************************************/ 8 #ifndef MAME_INCLUDES_CYBERBAL_H 9 #define MAME_INCLUDES_CYBERBAL_H 10 11 #pragma once 12 13 #include "machine/slapstic.h" 14 #include "audio/atarijsa.h" 15 #include "audio/atarisac.h" 16 #include "video/atarimo.h" 17 #include "cpu/m68000/m68000.h" 18 #include "machine/timer.h" 19 #include "emupal.h" 20 #include "screen.h" 21 #include "tilemap.h" 22 23 class cyberbal_base_state : public driver_device 24 { 25 protected: cyberbal_base_state(const machine_config & mconfig,device_type type,const char * tag)26 cyberbal_base_state(const machine_config &mconfig, device_type type, const char *tag) : 27 driver_device(mconfig, type, tag), 28 m_maincpu(*this, "maincpu"), 29 m_gfxdecode(*this, "gfxdecode"), 30 m_playfield(*this, "playfield"), 31 m_alpha(*this, "alpha"), 32 m_mob(*this, "mob") 33 { } 34 35 TILE_GET_INFO_MEMBER(get_alpha_tile_info); 36 TILE_GET_INFO_MEMBER(get_playfield_tile_info); 37 38 virtual void video_start() override; 39 40 void scanline_update_one(screen_device &screen, int scanline, int i, tilemap_t &curplayfield, tilemap_device &curalpha); 41 uint32_t update_one_screen(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, atari_motion_objects_device &curmob, tilemap_t &curplayfield, tilemap_t &curalpha); 42 43 static const atari_motion_objects_config s_mob_config; 44 45 required_device<cpu_device> m_maincpu; 46 required_device<gfxdecode_device> m_gfxdecode; 47 required_device<tilemap_device> m_playfield; 48 required_device<tilemap_device> m_alpha; 49 required_device<atari_motion_objects_device> m_mob; 50 51 uint16_t m_current_slip[2]; 52 53 private: 54 uint8_t m_playfield_palette_bank[2]; 55 uint16_t m_playfield_xscroll[2]; 56 uint16_t m_playfield_yscroll[2]; 57 }; 58 59 60 class cyberbal2p_state : public cyberbal_base_state 61 { 62 public: cyberbal2p_state(const machine_config & mconfig,device_type type,const char * tag)63 cyberbal2p_state(const machine_config &mconfig, device_type type, const char *tag) : 64 cyberbal_base_state(mconfig, type, tag), 65 m_screen(*this, "screen"), 66 m_jsa(*this, "jsa") 67 { } 68 69 void cyberbal2p(machine_config &config); 70 71 protected: 72 uint16_t sound_state_r(); 73 74 virtual void machine_reset() override; 75 virtual void video_start() override; 76 uint32_t screen_update_cyberbal2p(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 77 78 // memory maps 79 void cyberbal2p_map(address_map &map); 80 81 private: 82 DECLARE_WRITE_LINE_MEMBER(video_int_write_line); 83 void video_int_ack_w(uint16_t data = 0); 84 85 TIMER_DEVICE_CALLBACK_MEMBER(scanline_update); 86 87 required_device<screen_device> m_screen; 88 required_device<atari_jsa_ii_device> m_jsa; 89 }; 90 91 92 class cyberbal_state : public cyberbal_base_state 93 { 94 public: cyberbal_state(const machine_config & mconfig,device_type type,const char * tag)95 cyberbal_state(const machine_config &mconfig, device_type type, const char *tag) : 96 cyberbal_base_state(mconfig, type, tag), 97 m_slapstic(*this, "slapstic"), 98 m_extracpu(*this, "extra"), 99 m_sac(*this, "sac"), 100 m_playfield2(*this, "playfield2"), 101 m_alpha2(*this, "alpha2"), 102 m_mob2(*this, "mob2"), 103 m_rpalette(*this, "rpalette"), 104 m_lscreen(*this, "lscreen"), 105 m_rscreen(*this, "rscreen") 106 { } 107 108 void init_cyberbalt(); 109 void cyberbal(machine_config &config); 110 void cyberbal_base(machine_config &config); 111 void cyberbalt(machine_config &config); 112 113 protected: 114 void p2_reset_w(uint16_t data); 115 TILE_GET_INFO_MEMBER(get_alpha2_tile_info); 116 TILE_GET_INFO_MEMBER(get_playfield2_tile_info); 117 118 virtual void machine_start() override; 119 virtual void machine_reset() override; 120 virtual void video_start() override; 121 uint32_t screen_update_cyberbal_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 122 uint32_t screen_update_cyberbal_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 123 124 // memory maps 125 void main_map(address_map &map); 126 void extra_map(address_map &map); 127 128 private: 129 DECLARE_WRITE_LINE_MEMBER(video_int_write_line); 130 void video_int_ack_w(uint16_t data = 0); 131 132 TIMER_DEVICE_CALLBACK_MEMBER(scanline_update); 133 134 optional_device<atari_slapstic_device> m_slapstic; 135 required_device<cpu_device> m_extracpu; 136 required_device<atari_sac_device> m_sac; 137 required_device<tilemap_device> m_playfield2; 138 required_device<tilemap_device> m_alpha2; 139 required_device<atari_motion_objects_device> m_mob2; 140 required_device<palette_device> m_rpalette; 141 required_device<screen_device> m_lscreen; 142 required_device<screen_device> m_rscreen; 143 144 }; 145 146 #endif // MAME_INCLUDES_CYBERBAL_H 147