1 // license:BSD-3-Clause 2 // copyright-holders:Luca Elia 3 4 /************************************************************************* 5 6 Yun Sung 16 Bit Games 7 8 *************************************************************************/ 9 #ifndef MAME_INCLUDES_YUNSUN16_H 10 #define MAME_INCLUDES_YUNSUN16_H 11 12 #pragma once 13 14 #include "machine/gen_latch.h" 15 #include "screen.h" 16 #include "emupal.h" 17 #include "tilemap.h" 18 19 class yunsun16_state : public driver_device 20 { 21 protected: yunsun16_state(const machine_config & mconfig,device_type type,const char * tag)22 yunsun16_state(const machine_config &mconfig, device_type type, const char *tag) : 23 driver_device(mconfig, type, tag), 24 m_maincpu(*this, "maincpu"), 25 m_gfxdecode(*this, "gfxdecode"), 26 m_screen(*this, "screen"), 27 m_palette(*this, "palette"), 28 m_vram(*this, "vram_%u", 0U), 29 m_scrollram(*this, "scrollram_%u", 0U), 30 m_priorityram(*this, "priorityram"), 31 m_spriteram(*this, "spriteram") 32 { } 33 34 virtual void machine_start() override; 35 virtual void machine_reset() override; 36 virtual void video_start() override; 37 38 uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 39 40 void main_map(address_map &map); 41 42 /* devices */ 43 required_device<cpu_device> m_maincpu; 44 required_device<gfxdecode_device> m_gfxdecode; 45 required_device<screen_device> m_screen; 46 required_device<palette_device> m_palette; 47 48 private: 49 void int_ack_w(uint8_t data); 50 51 /* memory pointers */ 52 required_shared_ptr_array<uint16_t, 2> m_vram; 53 required_shared_ptr_array<uint16_t, 2> m_scrollram; 54 required_shared_ptr<uint16_t> m_priorityram; 55 required_shared_ptr<uint16_t> m_spriteram; 56 57 /* other video-related elements */ 58 tilemap_t *m_tilemap[2]; 59 int m_sprites_scrolldx; 60 int m_sprites_scrolldy; 61 62 template<int Layer> void vram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 63 64 TILEMAP_MAPPER_MEMBER(tilemap_scan_pages); 65 template<int Layer> TILE_GET_INFO_MEMBER(get_tile_info); 66 void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 67 }; 68 69 70 class magicbub_state : public yunsun16_state 71 { 72 public: magicbub_state(const machine_config & mconfig,device_type type,const char * tag)73 magicbub_state(const machine_config &mconfig, device_type type, const char *tag) : 74 yunsun16_state(mconfig, type, tag), 75 m_audiocpu(*this, "audiocpu"), 76 m_soundlatch(*this, "soundlatch") 77 { } 78 79 void magicbub(machine_config &config); 80 81 protected: 82 void main_map(address_map &map); 83 84 private: 85 void magicbub_sound_command_w(uint8_t data); 86 87 void sound_map(address_map &map); 88 void sound_port_map(address_map &map); 89 90 required_device<cpu_device> m_audiocpu; 91 required_device<generic_latch_8_device> m_soundlatch; 92 }; 93 94 95 class shocking_state : public yunsun16_state 96 { 97 public: shocking_state(const machine_config & mconfig,device_type type,const char * tag)98 shocking_state(const machine_config &mconfig, device_type type, const char *tag) : 99 yunsun16_state(mconfig, type, tag), 100 m_okibank(*this, "okibank") 101 { } 102 103 void shocking(machine_config &config); 104 105 protected: 106 virtual void machine_start() override; 107 virtual void machine_reset() override; 108 109 void main_map(address_map &map); 110 111 private: 112 void sound_bank_w(uint8_t data); 113 114 void oki_map(address_map &map); 115 116 required_memory_bank m_okibank; 117 }; 118 119 #endif // MAME_INCLUDES_YUNSUN16_H 120