1 // license:BSD-3-Clause 2 // copyright-holders:David Haywood,Bryan McPhail 3 #ifndef MAME_INCLUDES_TUMBLEB_H 4 #define MAME_INCLUDES_TUMBLEB_H 5 6 #pragma once 7 8 #include "machine/gen_latch.h" 9 #include "sound/okim6295.h" 10 #include "video/decospr.h" 11 #include "emupal.h" 12 #include "screen.h" 13 #include "tilemap.h" 14 15 class tumbleb_state : public driver_device 16 { 17 public: tumbleb_state(const machine_config & mconfig,device_type type,const char * tag)18 tumbleb_state(const machine_config &mconfig, device_type type, const char *tag) : 19 driver_device(mconfig, type, tag), 20 m_mainram(*this, "mainram"), 21 m_spriteram(*this, "spriteram"), 22 m_pf1_data(*this, "pf1_data"), 23 m_pf2_data(*this, "pf2_data"), 24 m_control(*this, "control"), 25 m_maincpu(*this, "maincpu"), 26 m_audiocpu(*this, "audiocpu"), 27 m_oki(*this, "oki"), 28 m_gfxdecode(*this, "gfxdecode"), 29 m_palette(*this, "palette"), 30 m_sprgen(*this, "spritegen"), 31 m_screen(*this, "screen"), 32 m_soundlatch(*this, "soundlatch") 33 { } 34 35 void tumblepb(machine_config &config); 36 void tumblepba(machine_config &config); 37 void bcstory(machine_config &config); 38 void pangpang(machine_config &config); 39 void semibase(machine_config &config); 40 void tumbleb2(machine_config &config); 41 void cookbib(machine_config &config); 42 void metlsavr(machine_config &config); 43 void fncywld(machine_config &config); 44 void magipur(machine_config &config); 45 void suprtrio(machine_config &config); 46 void htchctch(machine_config &config); 47 void htchctch_mcu(machine_config &config); 48 void sdfight(machine_config &config); 49 void chokchok(machine_config &config); 50 void cookbib_mcu(machine_config &config); 51 void jumpkids(machine_config &config); 52 53 void init_dquizgo(); 54 void init_jumpkids(); 55 void init_htchctch(); 56 void init_wlstar(); 57 void init_suprtrio(); 58 void init_tumblepb(); 59 void init_tumblepba(); 60 void init_bcstory(); 61 void init_wondl96(); 62 void init_tumbleb2(); 63 void init_chokchok(); 64 void init_fncywld(); 65 void init_magipur(); 66 void init_carket(); 67 68 protected: 69 /* memory pointers */ 70 optional_shared_ptr<uint16_t> m_mainram; 71 required_shared_ptr<uint16_t> m_spriteram; 72 required_shared_ptr<uint16_t> m_pf1_data; 73 required_shared_ptr<uint16_t> m_pf2_data; 74 optional_shared_ptr<uint16_t> m_control; 75 76 /* misc */ 77 int m_music_command; 78 int m_music_bank; 79 int m_music_is_playing; 80 81 /* video-related */ 82 tilemap_t *m_pf1_tilemap; 83 tilemap_t *m_pf1_alt_tilemap; 84 tilemap_t *m_pf2_tilemap; 85 tilemap_t *m_pf2_alt_tilemap; 86 uint16_t m_control_0[8]; 87 uint16_t m_tilebank; 88 89 /* devices */ 90 required_device<cpu_device> m_maincpu; 91 optional_device<cpu_device> m_audiocpu; 92 required_device<okim6295_device> m_oki; 93 required_device<gfxdecode_device> m_gfxdecode; 94 required_device<palette_device> m_palette; 95 optional_device<decospr_device> m_sprgen; 96 required_device<screen_device> m_screen; 97 optional_device<generic_latch_8_device> m_soundlatch; 98 99 uint8_t m_semicom_prot_offset; 100 uint16_t m_protbase; 101 void tumblepb_oki_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 102 uint16_t tumblepb_prot_r(); 103 uint16_t tumblepopb_controls_r(offs_t offset); 104 uint16_t semibase_unknown_r(); 105 void jumpkids_sound_w(uint16_t data); 106 void semicom_soundcmd_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 107 void oki_sound_bank_w(uint8_t data); 108 void jumpkids_oki_bank_w(uint8_t data); 109 void prot_p0_w(uint8_t data); 110 void prot_p1_w(uint8_t data); 111 void prot_p2_w(uint8_t data); 112 uint16_t bcstory_1a0_read(); 113 void bcstory_tilebank_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 114 void chokchok_tilebank_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 115 void wlstar_tilebank_w(uint16_t data); 116 void suprtrio_tilebank_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 117 void tumblepb_pf1_data_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 118 void tumblepb_pf2_data_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 119 void fncywld_pf1_data_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 120 void fncywld_pf2_data_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 121 void tumblepb_control_0_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 122 void pangpang_pf1_data_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 123 void pangpang_pf2_data_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 124 void tumbleb2_soundmcu_w(uint16_t data); 125 126 TILEMAP_MAPPER_MEMBER(tumblep_scan); 127 TILE_GET_INFO_MEMBER(get_bg1_tile_info); 128 TILE_GET_INFO_MEMBER(get_bg2_tile_info); 129 TILE_GET_INFO_MEMBER(get_fg_tile_info); 130 TILE_GET_INFO_MEMBER(get_fncywld_bg1_tile_info); 131 TILE_GET_INFO_MEMBER(get_fncywld_bg2_tile_info); 132 TILE_GET_INFO_MEMBER(get_fncywld_fg_tile_info); 133 TILE_GET_INFO_MEMBER(pangpang_get_bg1_tile_info); 134 TILE_GET_INFO_MEMBER(pangpang_get_bg2_tile_info); 135 TILE_GET_INFO_MEMBER(pangpang_get_fg_tile_info); 136 DECLARE_MACHINE_START(tumbleb); 137 DECLARE_MACHINE_RESET(tumbleb); 138 DECLARE_VIDEO_START(tumblepb); 139 DECLARE_VIDEO_START(fncywld); 140 DECLARE_MACHINE_RESET(htchctch); 141 DECLARE_VIDEO_START(suprtrio); 142 DECLARE_VIDEO_START(pangpang); 143 DECLARE_VIDEO_START(sdfight); 144 uint32_t screen_update_tumblepb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 145 uint32_t screen_update_jumpkids(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 146 uint32_t screen_update_fncywld(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 147 uint32_t screen_update_semicom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 148 uint32_t screen_update_suprtrio(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 149 uint32_t screen_update_pangpang(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 150 uint32_t screen_update_semicom_altoffsets(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 151 uint32_t screen_update_bcstory(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 152 uint32_t screen_update_semibase(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 153 uint32_t screen_update_sdfight(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 154 INTERRUPT_GEN_MEMBER(tumbleb2_interrupt); 155 void tumbleb_tilemap_redraw(); 156 inline void get_bg_tile_info( tile_data &tileinfo, int tile_index, int gfx_bank, uint16_t *gfx_base); 157 inline void get_fncywld_bg_tile_info( tile_data &tileinfo, int tile_index, int gfx_bank, uint16_t *gfx_base); 158 inline void pangpang_get_bg_tile_info( tile_data &tileinfo, int tile_index, int gfx_bank, uint16_t *gfx_base ); 159 inline void pangpang_get_bg2x_tile_info( tile_data &tileinfo, int tile_index, int gfx_bank, uint16_t *gfx_base ); 160 void tumbleb_draw_common(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int pf1x_offs, int pf1y_offs, int pf2x_offs, int pf2y_offs); 161 void tumbleb2_set_music_bank( int bank ); 162 void tumbleb2_play_sound( okim6295_device *oki, int data ); 163 void tumbleb2_playmusic(okim6295_device *oki); 164 void process_tumbleb2_music_command( okim6295_device *oki, int data ); 165 void tumblepb_gfx_rearrange(int rgn); 166 void suprtrio_decrypt_code(); 167 void suprtrio_decrypt_gfx(); 168 169 void unico_base_map(address_map &map); 170 void fncywld_main_map(address_map &map); 171 void magipur_main_map(address_map &map); 172 void htchctch_main_map(address_map &map); 173 void jumpkids_main_map(address_map &map); 174 void jumpkids_sound_map(address_map &map); 175 void pangpang_main_map(address_map &map); 176 void semicom_sound_map(address_map &map); 177 void suprtrio_main_map(address_map &map); 178 void suprtrio_sound_map(address_map &map); 179 void tumblepopb_main_map(address_map &map); 180 void tumblepopba_main_map(address_map &map); 181 }; 182 183 class tumbleb_pic_state : public tumbleb_state 184 { 185 public: tumbleb_pic_state(const machine_config & mconfig,device_type type,const char * tag)186 tumbleb_pic_state(const machine_config &mconfig, device_type type, const char *tag) : 187 tumbleb_state(mconfig, type, tag), 188 m_okibank(*this, "okibank") 189 { } 190 191 void funkyjetb(machine_config &config); 192 193 protected: 194 virtual void driver_start() override; 195 196 private: 197 void oki_bank_w(uint8_t data); 198 uint8_t pic_data_r(); 199 void pic_data_w(uint8_t data); 200 void pic_ctrl_w(uint8_t data); 201 202 void funkyjetb_map(address_map &map); 203 void funkyjetb_oki_map(address_map &map); 204 205 required_memory_bank m_okibank; 206 207 uint8_t m_pic_data; 208 }; 209 210 #endif // MAME_INCLUDES_TUMBLEB_H 211