1 // license:BSD-3-Clause 2 // copyright-holders:Zsolt Vasvari 3 /************************************************************************* 4 5 Mermaid 6 7 *************************************************************************/ 8 #ifndef MAME_INCLUDES_MERMAID_H 9 #define MAME_INCLUDES_MERMAID_H 10 11 #pragma once 12 13 #include "machine/74259.h" 14 #include "machine/ripple_counter.h" 15 #include "sound/msm5205.h" 16 #include "sound/ay8910.h" 17 #include "emupal.h" 18 #include "screen.h" 19 #include "tilemap.h" 20 21 class mermaid_state : public driver_device 22 { 23 public: mermaid_state(const machine_config & mconfig,device_type type,const char * tag)24 mermaid_state(const machine_config &mconfig, device_type type, const char *tag) : 25 driver_device(mconfig, type, tag), 26 m_videoram2(*this, "videoram2"), 27 m_videoram(*this, "videoram"), 28 m_bg_scrollram(*this, "bg_scrollram"), 29 m_fg_scrollram(*this, "fg_scrollram"), 30 m_spriteram(*this, "spriteram"), 31 m_colorram(*this, "colorram"), 32 m_maincpu(*this, "maincpu"), 33 m_adpcm(*this, "adpcm"), 34 m_adpcm_counter(*this, "adpcm_counter"), 35 m_ay8910(*this, "ay%u", 1), 36 m_gfxdecode(*this, "gfxdecode"), 37 m_screen(*this, "screen"), 38 m_palette(*this, "palette"), 39 m_latch(*this, "latch%u", 1U) 40 { 41 } 42 43 void rougien(machine_config &config); 44 void mermaid(machine_config &config); 45 46 private: 47 /* memory pointers */ 48 required_shared_ptr<uint8_t> m_videoram2; 49 required_shared_ptr<uint8_t> m_videoram; 50 required_shared_ptr<uint8_t> m_bg_scrollram; 51 required_shared_ptr<uint8_t> m_fg_scrollram; 52 required_shared_ptr<uint8_t> m_spriteram; 53 required_shared_ptr<uint8_t> m_colorram; 54 55 /* video-related */ 56 tilemap_t *m_bg_tilemap; 57 tilemap_t *m_fg_tilemap; 58 bitmap_ind16 m_helper; 59 bitmap_ind16 m_helper2; 60 int m_coll_bit0; 61 int m_coll_bit1; 62 int m_coll_bit2; 63 int m_coll_bit3; 64 int m_coll_bit6; 65 int m_rougien_gfxbank1; 66 int m_rougien_gfxbank2; 67 68 /* sound-related */ 69 uint8_t m_adpcm_idle; 70 int m_adpcm_data; 71 uint8_t m_adpcm_trigger; 72 uint8_t m_adpcm_rom_sel; 73 bool m_ay8910_enable[2]; 74 75 /* devices */ 76 required_device<cpu_device> m_maincpu; 77 optional_device<msm5205_device> m_adpcm; 78 optional_device<ripple_counter_device> m_adpcm_counter; 79 required_device_array<ay8910_device, 2> m_ay8910; 80 required_device<gfxdecode_device> m_gfxdecode; 81 required_device<screen_device> m_screen; 82 required_device<palette_device> m_palette; 83 required_device_array<ls259_device, 2> m_latch; 84 85 uint8_t m_nmi_mask; 86 void mermaid_ay8910_write_port_w(uint8_t data); 87 void mermaid_ay8910_control_port_w(uint8_t data); 88 DECLARE_WRITE_LINE_MEMBER(ay1_enable_w); 89 DECLARE_WRITE_LINE_MEMBER(ay2_enable_w); 90 DECLARE_WRITE_LINE_MEMBER(nmi_mask_w); 91 DECLARE_WRITE_LINE_MEMBER(rougien_sample_rom_lo_w); 92 DECLARE_WRITE_LINE_MEMBER(rougien_sample_rom_hi_w); 93 DECLARE_WRITE_LINE_MEMBER(rougien_sample_playback_w); 94 void adpcm_data_w(uint8_t data); 95 void mermaid_videoram2_w(offs_t offset, uint8_t data); 96 void mermaid_videoram_w(offs_t offset, uint8_t data); 97 void mermaid_colorram_w(offs_t offset, uint8_t data); 98 DECLARE_WRITE_LINE_MEMBER(flip_screen_x_w); 99 DECLARE_WRITE_LINE_MEMBER(flip_screen_y_w); 100 void mermaid_bg_scroll_w(offs_t offset, uint8_t data); 101 void mermaid_fg_scroll_w(offs_t offset, uint8_t data); 102 DECLARE_WRITE_LINE_MEMBER(rougien_gfxbankswitch1_w); 103 DECLARE_WRITE_LINE_MEMBER(rougien_gfxbankswitch2_w); 104 uint8_t mermaid_collision_r(); 105 TILE_GET_INFO_MEMBER(get_bg_tile_info); 106 TILE_GET_INFO_MEMBER(get_fg_tile_info); 107 virtual void machine_start() override; 108 virtual void machine_reset() override; 109 virtual void video_start() override; 110 void common_palette(palette_device &palette) const; 111 void mermaid_palette(palette_device &palette) const; 112 void rougien_palette(palette_device &palette) const; 113 uint32_t screen_update_mermaid(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 114 DECLARE_WRITE_LINE_MEMBER(screen_vblank_mermaid); 115 void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); 116 uint8_t collision_check( rectangle& rect ); 117 void collision_update(); 118 DECLARE_WRITE_LINE_MEMBER(rougien_adpcm_int); 119 void mermaid_map(address_map &map); 120 }; 121 122 #endif // MAME_INCLUDES_MERMAID_H 123