1 // license:BSD-3-Clause 2 // copyright-holders:Bryan McPhail, David Haywood 3 4 /************************************************************************* 5 6 Double Dragon 3 & The Combatribes 7 8 *************************************************************************/ 9 #ifndef MAME_INCLUDES_DDRAGON3_H 10 #define MAME_INCLUDES_DDRAGON3_H 11 12 #pragma once 13 14 #include "machine/gen_latch.h" 15 #include "machine/timer.h" 16 #include "sound/okim6295.h" 17 #include "video/bufsprite.h" 18 #include "emupal.h" 19 #include "screen.h" 20 #include "tilemap.h" 21 22 23 class ddragon3_state : public driver_device 24 { 25 public: ddragon3_state(const machine_config & mconfig,device_type type,const char * tag)26 ddragon3_state(const machine_config &mconfig, device_type type, const char *tag) : 27 driver_device(mconfig, type, tag), 28 m_maincpu(*this, "maincpu"), 29 m_audiocpu(*this, "audiocpu"), 30 m_gfxdecode(*this, "gfxdecode"), 31 m_palette(*this, "palette"), 32 m_soundlatch(*this, "soundlatch"), 33 m_bg_videoram(*this, "bg_videoram"), 34 m_fg_videoram(*this, "fg_videoram"), 35 m_spriteram(*this, "spriteram"), 36 m_oki(*this, "oki"), 37 m_screen(*this, "screen") 38 { 39 vblank_level = 6; 40 raster_level = 5; 41 } 42 43 void ctribe(machine_config &config); 44 void ddragon3b(machine_config &config); 45 void ddragon3(machine_config &config); 46 47 TIMER_DEVICE_CALLBACK_MEMBER(ddragon3_scanline); 48 49 protected: 50 required_device<cpu_device> m_maincpu; 51 required_device<cpu_device> m_audiocpu; 52 required_device<gfxdecode_device> m_gfxdecode; 53 required_device<palette_device> m_palette; 54 required_device<generic_latch_8_device> m_soundlatch; 55 56 /* misc */ 57 uint8_t m_pri; 58 int vblank_level; 59 int raster_level; 60 61 /* video-related */ 62 tilemap_t *m_fg_tilemap; 63 tilemap_t *m_bg_tilemap; 64 uint16_t m_vreg; 65 uint16_t m_bg_scrollx; 66 uint16_t m_bg_scrolly; 67 uint16_t m_fg_scrollx; 68 uint16_t m_fg_scrolly; 69 uint16_t m_bg_tilebase; 70 71 uint16_t m_bg0_dx; 72 uint16_t m_bg1_dx[2]; 73 uint16_t m_sprite_xoff; 74 75 /* memory pointers */ 76 required_shared_ptr<uint16_t> m_bg_videoram; 77 required_shared_ptr<uint16_t> m_fg_videoram; 78 // required_shared_ptr<uint16_t> m_spriteram; 79 required_device<buffered_spriteram16_device> m_spriteram; 80 81 /* devices */ 82 required_device<okim6295_device> m_oki; 83 required_device<screen_device> m_screen; 84 85 void ddragon3_scroll_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 86 uint16_t ddragon3_scroll_r(offs_t offset); 87 void ddragon3_bg_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 88 void ddragon3_fg_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 89 90 void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); 91 92 void sound_map(address_map &map); 93 94 virtual void video_start() override; 95 96 private: 97 void ddragon3_vreg_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 98 void irq6_ack_w(uint16_t data); 99 void irq5_ack_w(uint16_t data); 100 void oki_bankswitch_w(uint8_t data); 101 TILE_GET_INFO_MEMBER(get_bg_tile_info); 102 TILE_GET_INFO_MEMBER(get_fg_tile_info); 103 virtual void machine_start() override; 104 virtual void machine_reset() override; 105 uint32_t screen_update_ddragon3(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 106 uint32_t screen_update_ctribe(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 107 108 void ctribe_map(address_map &map); 109 void ctribe_sound_map(address_map &map); 110 void dd3b_map(address_map &map); 111 void ddragon3_map(address_map &map); 112 }; 113 114 115 class wwfwfest_state : public ddragon3_state 116 { 117 public: wwfwfest_state(const machine_config & mconfig,device_type type,const char * tag)118 wwfwfest_state(const machine_config &mconfig, device_type type, const char *tag) : 119 ddragon3_state(mconfig, type, tag), 120 m_fg0_videoram(*this, "fg0_videoram"), 121 m_paletteram(*this, "palette"), 122 m_dsw(*this, "DSW%u", 1U) 123 { 124 vblank_level = 3; 125 raster_level = 2; 126 } 127 128 void wwfwfest(machine_config &config); 129 void wwfwfstb(machine_config &config); 130 131 template <int N> DECLARE_CUSTOM_INPUT_MEMBER(dsw_3f_r); 132 template <int N> DECLARE_CUSTOM_INPUT_MEMBER(dsw_c0_r); 133 134 private: 135 /* wwfwfest has an extra layer */ 136 required_shared_ptr<uint16_t> m_fg0_videoram; 137 required_shared_ptr<uint16_t> m_paletteram; 138 required_ioport_array<2> m_dsw; 139 tilemap_t *m_fg0_tilemap; 140 void wwfwfest_fg0_videoram_w(offs_t offset, uint16_t data); 141 142 //required_device<buffered_spriteram16_device> m_spriteram; 143 void wwfwfest_priority_w(uint8_t data); 144 void wwfwfest_irq_ack_w(offs_t offset, uint16_t data); 145 void wwfwfest_flipscreen_w(uint16_t data); 146 uint16_t wwfwfest_paletteram_r(offs_t offset); 147 void wwfwfest_paletteram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 148 void wwfwfest_soundwrite(uint16_t data); 149 150 TILE_GET_INFO_MEMBER(get_fg0_tile_info); 151 152 virtual void video_start() override; 153 DECLARE_VIDEO_START(wwfwfstb); 154 uint32_t screen_update_wwfwfest(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 155 156 void main_map(address_map &map); 157 }; 158 159 #endif // MAME_INCLUDES_DDRAGON3_H 160