1 // license:BSD-3-Clause 2 // copyright-holders:Bryan McPhail 3 #include "video/bufsprite.h" 4 #include "video/decospr.h" 5 #include "machine/deco146.h" 6 #include "machine/gen_latch.h" 7 #include "emupal.h" 8 #include "tilemap.h" 9 10 class lemmings_state : public driver_device 11 { 12 public: lemmings_state(const machine_config & mconfig,device_type type,const char * tag)13 lemmings_state(const machine_config &mconfig, device_type type, const char *tag) 14 : driver_device(mconfig, type, tag) 15 , m_bitmap0(2048, 256) 16 , m_maincpu(*this, "maincpu") 17 , m_audiocpu(*this, "audiocpu") 18 , m_deco146(*this, "ioprot") 19 , m_spriteram(*this, "spriteram%u", 1) 20 , m_sprgen(*this, "spritegen%u", 1) 21 , m_gfxdecode(*this, "gfxdecode") 22 , m_palette(*this, "palette") 23 , m_soundlatch(*this, "soundlatch") 24 , m_control_data(*this, "control_data") 25 , m_vram_data(*this, "vram_data") 26 , m_pixel_data(*this, "pixel_%u_data", 0) 27 , m_trackball_io(*this, "AN%u", 0) 28 { 29 } 30 31 void lemmings(machine_config &config); 32 33 private: 34 /* video-related */ 35 bitmap_ind16 m_bitmap0; 36 tilemap_t *m_vram_tilemap; 37 std::unique_ptr<uint16_t[]> m_sprite_triple_buffer[2]; 38 std::unique_ptr<uint8_t[]> m_vram_buffer; 39 40 /* devices */ 41 required_device<cpu_device> m_maincpu; 42 required_device<cpu_device> m_audiocpu; 43 required_device<deco146_device> m_deco146; 44 required_device_array<buffered_spriteram16_device, 2> m_spriteram; 45 required_device_array<decospr_device, 2> m_sprgen; 46 required_device<gfxdecode_device> m_gfxdecode; 47 required_device<palette_device> m_palette; 48 required_device<generic_latch_8_device> m_soundlatch; 49 50 /* memory pointers */ 51 required_shared_ptr<uint16_t> m_control_data; 52 required_shared_ptr<uint16_t> m_vram_data; 53 required_shared_ptr_array<uint16_t, 2> m_pixel_data; 54 55 required_ioport_array<4> m_trackball_io; 56 57 void lemmings_control_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 58 uint16_t lemmings_trackball_r(offs_t offset); 59 void lemmings_pixel_0_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 60 void lemmings_pixel_1_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 61 void lemmings_vram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 62 TILE_GET_INFO_MEMBER(get_tile_info); 63 virtual void machine_start() override; 64 virtual void video_start() override; 65 uint32_t screen_update_lemmings(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 66 DECLARE_WRITE_LINE_MEMBER(screen_vblank_lemmings); 67 void lemmings_copy_bitmap(bitmap_rgb32& bitmap, int* xscroll, int* yscroll, const rectangle& cliprect); 68 69 uint16_t lem_protection_region_0_146_r(offs_t offset); 70 void lem_protection_region_0_146_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 71 void lemmings_map(address_map &map); 72 void sound_map(address_map &map); 73 }; 74