1 // license:BSD-3-Clause 2 // copyright-holders:Bryan McPhail 3 #ifndef MAME_INCLUDES_NEMESIS_H 4 #define MAME_INCLUDES_NEMESIS_H 5 6 #pragma once 7 8 #include "machine/timer.h" 9 #include "sound/flt_rc.h" 10 #include "sound/k007232.h" 11 #include "sound/k005289.h" 12 #include "sound/vlm5030.h" 13 14 #include "emupal.h" 15 #include "screen.h" 16 #include "tilemap.h" 17 18 19 class nemesis_state : public driver_device 20 { 21 public: nemesis_state(const machine_config & mconfig,device_type type,const char * tag)22 nemesis_state(const machine_config &mconfig, device_type type, const char *tag) : 23 driver_device(mconfig, type, tag), 24 m_charram(*this, "charram"), 25 m_xscroll1(*this, "xscroll1"), 26 m_xscroll2(*this, "xscroll2"), 27 m_yscroll2(*this, "yscroll2"), 28 m_yscroll1(*this, "yscroll1"), 29 m_videoram1(*this, "videoram1"), 30 m_videoram2(*this, "videoram2"), 31 m_colorram1(*this, "colorram1"), 32 m_colorram2(*this, "colorram2"), 33 m_spriteram(*this, "spriteram"), 34 m_paletteram(*this, "paletteram"), 35 m_gx400_shared_ram(*this, "gx400_shared"), 36 m_bubsys_shared_ram(*this, "bubsys_shared"), 37 m_bubsys_control_ram(*this, "bubsys_control"), 38 m_maincpu(*this, "maincpu"), 39 m_audiocpu(*this, "audiocpu"), 40 m_filter1(*this, "filter1"), 41 m_filter2(*this, "filter2"), 42 m_filter3(*this, "filter3"), 43 m_filter4(*this, "filter4"), 44 m_k007232(*this, "k007232"), 45 m_k005289(*this, "k005289"), 46 m_vlm(*this, "vlm"), 47 m_gfxdecode(*this, "gfxdecode"), 48 m_screen(*this, "screen"), 49 m_palette(*this, "palette") 50 { } 51 52 void nyanpani(machine_config &config); 53 void konamigt(machine_config &config); 54 void rf2_gx400(machine_config &config); 55 void gx400(machine_config &config); 56 void bubsys(machine_config &config); 57 void hcrash(machine_config &config); 58 void salamand(machine_config &config); 59 void citybomb(machine_config &config); 60 void nemesis(machine_config &config); 61 void blkpnthr(machine_config &config); 62 63 void bubsys_init(); 64 void bubsys_twinbeeb_init(); 65 66 private: 67 /* memory pointers */ 68 required_shared_ptr<uint16_t> m_charram; 69 required_shared_ptr<uint16_t> m_xscroll1; 70 required_shared_ptr<uint16_t> m_xscroll2; 71 required_shared_ptr<uint16_t> m_yscroll2; 72 required_shared_ptr<uint16_t> m_yscroll1; 73 required_shared_ptr<uint16_t> m_videoram1; 74 required_shared_ptr<uint16_t> m_videoram2; 75 required_shared_ptr<uint16_t> m_colorram1; 76 required_shared_ptr<uint16_t> m_colorram2; 77 required_shared_ptr<uint16_t> m_spriteram; 78 optional_shared_ptr<uint16_t> m_paletteram; 79 optional_shared_ptr<uint8_t> m_gx400_shared_ram; 80 optional_shared_ptr<uint16_t> m_bubsys_shared_ram; 81 optional_shared_ptr<uint16_t> m_bubsys_control_ram; 82 83 /* video-related */ 84 tilemap_t *m_background; 85 tilemap_t *m_foreground; 86 int m_spriteram_words; 87 int m_tilemap_flip; 88 int m_flipscreen; 89 uint8_t m_irq_port_last; 90 uint8_t m_blank_tile[8*8]; 91 uint8_t m_palette_lookup[32]; 92 93 /* misc */ 94 int m_irq_on; 95 int m_irq1_on; 96 int m_irq2_on; 97 int m_irq4_on; 98 uint8_t m_selected_ip; // needed for Hyper Crash 99 int m_gx400_irq1_cnt; 100 uint8_t m_frame_counter; 101 uint16_t m_scanline_counter; 102 103 /* devices */ 104 required_device<cpu_device> m_maincpu; 105 required_device<cpu_device> m_audiocpu; 106 optional_device<filter_rc_device> m_filter1; 107 optional_device<filter_rc_device> m_filter2; 108 optional_device<filter_rc_device> m_filter3; 109 optional_device<filter_rc_device> m_filter4; 110 optional_device<k007232_device> m_k007232; 111 optional_device<k005289_device> m_k005289; 112 optional_device<vlm5030_device> m_vlm; 113 required_device<gfxdecode_device> m_gfxdecode; 114 required_device<screen_device> m_screen; 115 required_device<palette_device> m_palette; 116 117 DECLARE_WRITE_LINE_MEMBER(irq_enable_w); 118 DECLARE_WRITE_LINE_MEMBER(irq1_enable_w); 119 DECLARE_WRITE_LINE_MEMBER(irq2_enable_w); 120 DECLARE_WRITE_LINE_MEMBER(irq4_enable_w); 121 DECLARE_WRITE_LINE_MEMBER(coin1_lockout_w); 122 DECLARE_WRITE_LINE_MEMBER(coin2_lockout_w); 123 DECLARE_WRITE_LINE_MEMBER(sound_irq_w); 124 DECLARE_WRITE_LINE_MEMBER(sound_nmi_w); 125 uint16_t gx400_sharedram_word_r(offs_t offset); 126 void gx400_sharedram_word_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 127 uint16_t konamigt_input_word_r(); 128 void selected_ip_w(uint8_t data); 129 uint8_t selected_ip_r(); 130 void bubsys_mcu_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 131 uint8_t wd_r(); 132 DECLARE_WRITE_LINE_MEMBER(gfx_flipx_w); 133 DECLARE_WRITE_LINE_MEMBER(gfx_flipy_w); 134 void salamand_control_port_word_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 135 void nemesis_palette_word_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 136 void nemesis_videoram1_word_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 137 void nemesis_videoram2_word_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 138 void nemesis_colorram1_word_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 139 void nemesis_colorram2_word_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 140 void nemesis_charram_word_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 141 void nemesis_filter_w(offs_t offset, uint8_t data); 142 void gx400_speech_w(offs_t offset, uint8_t data); 143 void salamand_speech_start_w(uint8_t data); 144 uint8_t nemesis_portA_r(); 145 void city_sound_bank_w(uint8_t data); 146 TILE_GET_INFO_MEMBER(get_bg_tile_info); 147 TILE_GET_INFO_MEMBER(get_fg_tile_info); 148 virtual void machine_start() override; 149 virtual void machine_reset() override; 150 virtual void video_start() override; 151 uint32_t screen_update_nemesis(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 152 DECLARE_WRITE_LINE_MEMBER(nemesis_vblank_irq); 153 DECLARE_WRITE_LINE_MEMBER(bubsys_vblank_irq); 154 155 DECLARE_WRITE_LINE_MEMBER(blkpnthr_vblank_irq); 156 TIMER_DEVICE_CALLBACK_MEMBER(bubsys_interrupt); 157 TIMER_DEVICE_CALLBACK_MEMBER(konamigt_interrupt); 158 TIMER_DEVICE_CALLBACK_MEMBER(hcrash_interrupt); 159 TIMER_DEVICE_CALLBACK_MEMBER(gx400_interrupt); 160 void create_palette_lookups(); 161 void nemesis_postload(); 162 void draw_sprites( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect ); 163 void volume_callback(uint8_t data); 164 void set_screen_raw_params(machine_config &config); 165 166 void blkpnthr_map(address_map &map); 167 void blkpnthr_sound_map(address_map &map); 168 void city_sound_map(address_map &map); 169 void citybomb_map(address_map &map); 170 void gx400_map(address_map &map); 171 void gx400_sound_map(address_map &map); 172 void gx400_vlm_map(address_map &map); 173 void hcrash_map(address_map &map); 174 void konamigt_map(address_map &map); 175 void nemesis_map(address_map &map); 176 void nyanpani_map(address_map &map); 177 void rf2_gx400_map(address_map &map); 178 void sal_sound_map(address_map &map); 179 void salamand_map(address_map &map); 180 void salamand_vlm_map(address_map &map); 181 void sound_map(address_map &map); 182 void bubsys_map(address_map &map); 183 }; 184 185 #endif // MAME_INCLUDES_NEMESIS_H 186