1 // license:BSD-3-Clause 2 // copyright-holders:R. Belmont 3 /************************************************************************* 4 5 Run and Gun / Slam Dunk 6 7 *************************************************************************/ 8 #ifndef MAME_INCLUDES_RUNGUN_H 9 #define MAME_INCLUDES_RUNGUN_H 10 11 #pragma once 12 13 #include "sound/k054539.h" 14 #include "machine/k053252.h" 15 #include "video/k053246_k053247_k055673.h" 16 #include "video/k053936.h" 17 #include "machine/k054321.h" 18 #include "video/konami_helper.h" 19 #include "emupal.h" 20 #include "screen.h" 21 #include "tilemap.h" 22 23 class rungun_state : public driver_device 24 { 25 public: rungun_state(const machine_config & mconfig,device_type type,const char * tag)26 rungun_state(const machine_config &mconfig, device_type type, const char *tag) : 27 driver_device(mconfig, type, tag), 28 m_maincpu(*this, "maincpu"), 29 m_soundcpu(*this, "soundcpu"), 30 m_k054539_1(*this, "k054539_1"), 31 m_k054539_2(*this, "k054539_2"), 32 m_k053936(*this, "k053936"), 33 m_k055673(*this, "k055673"), 34 m_k053252(*this, "k053252"), 35 m_gfxdecode(*this, "gfxdecode"), 36 m_palette(*this, "palette"), 37 m_palette2(*this, "palette2"), 38 m_screen(*this, "screen"), 39 m_k054321(*this, "k054321"), 40 m_sysreg(*this, "sysreg") 41 { } 42 43 void rng(machine_config &config); 44 void rng_dual(machine_config &config); 45 46 protected: 47 virtual void machine_start() override; 48 virtual void machine_reset() override; 49 virtual void video_start() override; 50 51 private: 52 /* devices */ 53 required_device<cpu_device> m_maincpu; 54 required_device<cpu_device> m_soundcpu; 55 required_device<k054539_device> m_k054539_1; 56 required_device<k054539_device> m_k054539_2; 57 required_device<k053936_device> m_k053936; 58 required_device<k055673_device> m_k055673; 59 required_device<k053252_device> m_k053252; 60 required_device<gfxdecode_device> m_gfxdecode; 61 required_device<palette_device> m_palette; 62 optional_device<palette_device> m_palette2; 63 required_device<screen_device> m_screen; 64 required_device<k054321_device> m_k054321; 65 66 /* memory pointers */ 67 required_shared_ptr<uint16_t> m_sysreg; 68 69 /* video-related */ 70 tilemap_t *m_ttl_tilemap[2]; 71 tilemap_t *m_936_tilemap[2]; 72 std::unique_ptr<uint16_t[]> m_psac2_vram; 73 std::unique_ptr<uint16_t[]> m_ttl_vram; 74 std::unique_ptr<uint16_t[]> m_pal_ram; 75 uint8_t m_current_display_bank; 76 int m_ttl_gfx_index; 77 int m_sprite_colorbase; 78 79 uint8_t *m_roz_rom; 80 uint8_t m_roz_rombase; 81 82 /* sound */ 83 uint8_t m_sound_ctrl; 84 uint8_t m_sound_status; 85 uint8_t m_sound_nmi_clk; 86 87 bool m_video_priority_mode; 88 std::unique_ptr<uint16_t[]> m_banked_ram; 89 bool m_single_screen_mode; 90 uint8_t m_video_mux_bank; 91 92 uint16_t sysregs_r(offs_t offset, uint16_t mem_mask = ~0); 93 void sysregs_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 94 void sound_irq_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 95 void sound_status_w(uint8_t data); 96 void sound_ctrl_w(uint8_t data); 97 uint16_t ttl_ram_r(offs_t offset); 98 void ttl_ram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 99 uint16_t psac2_videoram_r(offs_t offset); 100 void psac2_videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 101 uint8_t k53936_rom_r(offs_t offset); 102 TILE_GET_INFO_MEMBER(ttl_get_tile_info); 103 TILE_GET_INFO_MEMBER(get_rng_936_tile_info); 104 DECLARE_WRITE_LINE_MEMBER(k054539_nmi_gen); 105 uint16_t palette_read(offs_t offset); 106 void palette_write(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 107 108 109 K055673_CB_MEMBER(sprite_callback); 110 111 uint32_t screen_update_rng(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 112 113 uint32_t screen_update_rng_dual_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 114 uint32_t screen_update_rng_dual_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 115 bitmap_ind16 m_rng_dual_demultiplex_left_temp; 116 bitmap_ind16 m_rng_dual_demultiplex_right_temp; 117 void sprite_dma_trigger(void); 118 119 INTERRUPT_GEN_MEMBER(rng_interrupt); 120 121 void rungun_map(address_map &map); 122 void rungun_sound_map(address_map &map); 123 }; 124 125 #endif // MAME_INCLUDES_RUNGUN_H 126