1 // license:BSD-3-Clause 2 // copyright-holders:Paul Leaman 3 4 #include "video/bufsprite.h" 5 #include "machine/gen_latch.h" 6 #include "sound/msm5205.h" 7 #include "emupal.h" 8 #include "tilemap.h" 9 10 class lwings_state : public driver_device 11 { 12 public: lwings_state(const machine_config & mconfig,device_type type,const char * tag)13 lwings_state(const machine_config &mconfig, device_type type, const char *tag) 14 : driver_device(mconfig, type, tag), 15 m_spriteram(*this, "spriteram"), 16 m_fgvideoram(*this, "fgvideoram"), 17 m_bg1videoram(*this, "bg1videoram"), 18 m_soundlatch2(*this, "soundlatch_2"), 19 m_nmi_mask(0), 20 m_maincpu(*this, "maincpu"), 21 m_soundcpu(*this, "soundcpu"), 22 m_msm(*this, "5205"), 23 m_gfxdecode(*this, "gfxdecode"), 24 m_palette(*this, "palette"), 25 m_soundlatch(*this, "soundlatch") { } 26 27 void lwings(machine_config &config); 28 void sectionz(machine_config &config); 29 void trojan(machine_config &config); 30 void fball(machine_config &config); 31 void avengers(machine_config &config); 32 void avengersb(machine_config &config); 33 34 void init_avengersb(); 35 36 protected: 37 virtual void machine_start() override; 38 virtual void machine_reset() override; 39 virtual void video_start() override; 40 41 private: 42 /* memory pointers */ 43 required_device<buffered_spriteram8_device> m_spriteram; 44 required_shared_ptr<uint8_t> m_fgvideoram; 45 required_shared_ptr<uint8_t> m_bg1videoram; 46 optional_shared_ptr<uint8_t> m_soundlatch2; 47 48 /* video-related */ 49 tilemap_t *m_fg_tilemap; 50 tilemap_t *m_bg1_tilemap; 51 tilemap_t *m_bg2_tilemap; 52 uint8_t m_bg2_image; 53 int m_bg2_avenger_hw; 54 int m_spr_avenger_hw; 55 uint8_t m_scroll_x[2]; 56 uint8_t m_scroll_y[2]; 57 58 /* misc */ 59 uint8_t m_param[4]; 60 int m_palette_pen; 61 uint8_t m_soundstate; 62 uint8_t m_adpcm; 63 uint8_t m_nmi_mask; 64 int m_sprbank; 65 66 void avengers_adpcm_w(uint8_t data); 67 uint8_t avengers_adpcm_r(); 68 void lwings_bankswitch_w(uint8_t data); 69 void avengers_protection_w(uint8_t data); 70 void avengers_prot_bank_w(uint8_t data); 71 uint8_t avengers_protection_r(); 72 uint8_t avengers_soundlatch2_r(); 73 void lwings_fgvideoram_w(offs_t offset, uint8_t data); 74 void lwings_bg1videoram_w(offs_t offset, uint8_t data); 75 void lwings_bg1_scrollx_w(offs_t offset, uint8_t data); 76 void lwings_bg1_scrolly_w(offs_t offset, uint8_t data); 77 void trojan_bg2_scrollx_w(uint8_t data); 78 void trojan_bg2_image_w(uint8_t data); 79 void msm5205_w(uint8_t data); 80 void fball_oki_bank_w(uint8_t data); 81 82 TILEMAP_MAPPER_MEMBER(get_bg2_memory_offset); 83 TILE_GET_INFO_MEMBER(get_fg_tile_info); 84 TILE_GET_INFO_MEMBER(lwings_get_bg1_tile_info); 85 TILE_GET_INFO_MEMBER(trojan_get_bg1_tile_info); 86 TILE_GET_INFO_MEMBER(get_bg2_tile_info); 87 DECLARE_VIDEO_START(trojan); 88 DECLARE_VIDEO_START(avengers); 89 DECLARE_VIDEO_START(avengersb); 90 uint32_t screen_update_lwings(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 91 uint32_t screen_update_trojan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 92 DECLARE_WRITE_LINE_MEMBER(lwings_interrupt); 93 DECLARE_WRITE_LINE_MEMBER(avengers_interrupt); 94 inline int is_sprite_on( uint8_t *buffered_spriteram, int offs ); 95 void lwings_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); 96 void trojan_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); 97 int avengers_fetch_paldata( ); 98 required_device<cpu_device> m_maincpu; 99 required_device<cpu_device> m_soundcpu; 100 optional_device<msm5205_device> m_msm; 101 required_device<gfxdecode_device> m_gfxdecode; 102 required_device<palette_device> m_palette; 103 required_device<generic_latch_8_device> m_soundlatch; 104 void avengers_adpcm_io_map(address_map &map); 105 void avengers_map(address_map &map); 106 void fball_map(address_map &map); 107 void fball_oki_map(address_map &map); 108 void fball_sound_map(address_map &map); 109 void lwings_map(address_map &map); 110 void lwings_sound_map(address_map &map); 111 void trojan_adpcm_io_map(address_map &map); 112 void trojan_adpcm_map(address_map &map); 113 void trojan_map(address_map &map); 114 }; 115