1 // license:BSD-3-Clause 2 // copyright-holders:Bryan McPhail 3 /******************************************************************************* 4 5 Seibu Raiden hardware 6 7 *******************************************************************************/ 8 #ifndef MAME_INCLUDES_RAIDEN_H 9 #define MAME_INCLUDES_RAIDEN_H 10 11 #pragma once 12 13 #include "audio/seibu.h" 14 #include "video/bufsprite.h" 15 #include "emupal.h" 16 #include "tilemap.h" 17 18 class raiden_state : public driver_device, public seibu_sound_common 19 { 20 public: raiden_state(const machine_config & mconfig,device_type type,const char * tag)21 raiden_state(const machine_config &mconfig, device_type type, const char *tag) : 22 driver_device(mconfig, type, tag), 23 m_maincpu(*this, "maincpu"), 24 m_seibu_sound(*this, "seibu_sound"), 25 m_subcpu(*this, "sub"), 26 m_gfxdecode(*this, "gfxdecode"), 27 m_palette(*this, "palette"), 28 m_spriteram(*this, "spriteram"), 29 m_shared_ram(*this, "shared_ram"), 30 m_videoram(*this, "videoram"), 31 m_scroll_ram(*this, "scroll_ram"), 32 m_back_data(*this, "back_data"), 33 m_fore_data(*this, "fore_data") 34 { } 35 36 void raidene(machine_config &config); 37 void raiden(machine_config &config); 38 void raidenkb(machine_config &config); 39 void raidenu(machine_config &config); 40 41 void init_raiden(); 42 43 protected: 44 required_device<cpu_device> m_maincpu; 45 required_device<seibu_sound_device> m_seibu_sound; 46 47 uint8_t m_bg_layer_enabled; 48 uint8_t m_fg_layer_enabled; 49 uint8_t m_tx_layer_enabled; 50 uint8_t m_sp_layer_enabled; 51 uint8_t m_flipscreen; 52 53 virtual void video_start() override; 54 55 uint32_t screen_update_common(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, uint16_t *scrollregs); 56 57 void raiden_text_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 58 59 void common_video_start(); 60 61 required_device<cpu_device> m_subcpu; 62 required_device<gfxdecode_device> m_gfxdecode; 63 required_device<palette_device> m_palette; 64 required_device<buffered_spriteram16_device> m_spriteram; 65 66 required_shared_ptr<uint16_t> m_shared_ram; 67 required_shared_ptr<uint16_t> m_videoram; 68 optional_shared_ptr<uint16_t> m_scroll_ram; 69 required_shared_ptr<uint16_t> m_back_data; 70 required_shared_ptr<uint16_t> m_fore_data; 71 72 tilemap_t *m_bg_layer; 73 tilemap_t *m_fg_layer; 74 tilemap_t *m_tx_layer; 75 76 void raiden_background_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 77 void raiden_foreground_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 78 void raiden_control_w(uint8_t data); 79 80 TILE_GET_INFO_MEMBER(get_back_tile_info); 81 TILE_GET_INFO_MEMBER(get_fore_tile_info); 82 TILE_GET_INFO_MEMBER(get_text_tile_info); 83 84 uint32_t screen_update_raiden(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 85 86 DECLARE_WRITE_LINE_MEMBER(vblank_irq); 87 88 void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int pri_mask); 89 void common_decrypt(); 90 91 void main_map(address_map &map); 92 void sub_map(address_map &map); 93 void raiden_sound_map(address_map &map); 94 void raiden_sound_decrypted_opcodes_map(address_map &map); 95 void raidenu_main_map(address_map &map); 96 void raidenu_sub_map(address_map &map); 97 void sei80bu_encrypted_full_map(address_map &map); 98 }; 99 100 101 class raidenb_state : public raiden_state 102 { 103 public: 104 using raiden_state::raiden_state; 105 106 void raidenb(machine_config &config); 107 108 protected: 109 virtual void video_start() override; 110 111 private: 112 uint16_t m_raidenb_scroll_ram[6]; 113 114 uint32_t screen_update_raidenb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 115 116 void raidenb_control_w(uint8_t data); 117 void raidenb_layer_enable_w(uint16_t data); 118 void raidenb_layer_scroll_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 119 120 void raidenb_main_map(address_map &map); 121 }; 122 123 #endif // MAME_INCLUDES_RAIDEN_H 124