1 // license:BSD-3-Clause 2 // copyright-holders:Luca Elia, Nicola Salmoria 3 /*************************************************************************** 4 5 Dynax hardware 6 7 ***************************************************************************/ 8 #ifndef MAME_INCLUDES_DYNAX_H 9 #define MAME_INCLUDES_DYNAX_H 10 11 #pragma once 12 13 #include "machine/bankdev.h" 14 #include "machine/gen_latch.h" 15 #include "machine/rstbuf.h" 16 #include "sound/msm5205.h" 17 #include "sound/okim6295.h" 18 #include "machine/74259.h" 19 #include "video/dynax_blitter_rev2.h" 20 #include "emupal.h" 21 #include "screen.h" 22 23 class dynax_state : public driver_device 24 { 25 public: dynax_state(const machine_config & mconfig,device_type type,const char * tag)26 dynax_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_oki(*this, "oki") 31 , m_screen(*this, "screen") 32 , m_palette(*this, "palette") 33 , m_mainlatch(*this, "mainlatch") 34 , m_bankdev(*this, "bankdev") 35 , m_blitter(*this, "blitter") 36 , m_msm(*this, "msm") 37 , m_mainirq(*this, "mainirq") 38 , m_soundirq(*this, "soundirq") 39 , m_soundlatch(*this, "soundlatch") 40 , m_blitter2(*this, "blitter2") 41 , m_blitter_gfx(*this, "blitter") 42 , m_led(*this, "led0") 43 { 44 } 45 46 void mjfriday(machine_config &config); 47 void yarunara(machine_config &config); 48 void janyuki(machine_config &config); 49 void hnoridur(machine_config &config); 50 void gekisha(machine_config &config); 51 void majrjhdx(machine_config &config); 52 void mcnpshnt(machine_config &config); 53 void nanajign(machine_config &config); 54 void cdracula(machine_config &config); 55 void tenkai(machine_config &config); 56 void hjingi(machine_config &config); 57 void mjreach(machine_config &config); 58 void neruton(machine_config &config); 59 void mjdialq2(machine_config &config); 60 void jantouki(machine_config &config); 61 void quiztvqq(machine_config &config); 62 void mjelctrn(machine_config &config); 63 void mjembase(machine_config &config); 64 void mjangels(machine_config &config); 65 void hanamai(machine_config &config); 66 void sprtmtch(machine_config &config); 67 68 void init_mjelct3(); 69 void init_blktouch(); 70 void init_mjelct3a(); 71 void init_maya_common(); 72 void init_mayac(); 73 void init_maya(); 74 75 DECLARE_WRITE_LINE_MEMBER(blitter_ack_w); 76 DECLARE_WRITE_LINE_MEMBER(sprtmtch_blitter_irq_w); 77 DECLARE_WRITE_LINE_MEMBER(sprtmtch_vblank_w); 78 DECLARE_WRITE_LINE_MEMBER(layer_half_w); 79 DECLARE_WRITE_LINE_MEMBER(layer_half2_w); 80 DECLARE_WRITE_LINE_MEMBER(flipscreen_w); 81 82 void hnoridur_blit_pixel_w(offs_t offset, uint8_t data); 83 void dynax_blit_scrollx_w(uint8_t data); 84 void dynax_blit_scrolly_w(uint8_t data); 85 86 protected: 87 required_device<cpu_device> m_maincpu; 88 optional_device<cpu_device> m_soundcpu; 89 optional_device<okim6295_device> m_oki; 90 optional_device<screen_device> m_screen; 91 required_device<palette_device> m_palette; 92 optional_device<ls259_device> m_mainlatch; 93 optional_device<address_map_bank_device> m_bankdev; 94 optional_device<dynax_blitter_rev2_device> m_blitter; 95 96 /* input / output */ 97 uint8_t m_input_sel; 98 uint8_t m_dsw_sel; 99 uint8_t m_keyb; 100 uint8_t m_coins; 101 uint8_t m_hopper; 102 103 DECLARE_VIDEO_START(hnoridur); 104 105 void dynax_vblank_ack_w(uint8_t data); 106 void dynax_blit_dest_w(uint8_t data); 107 void dynax_blit_romregion_w(uint8_t data); 108 void dynax_extra_scrollx_w(uint8_t data); 109 void dynax_extra_scrolly_w(uint8_t data); 110 111 void hanamai_copylayer(bitmap_ind16 &bitmap, const rectangle &cliprect, int i ); 112 113 DECLARE_MACHINE_START(dynax); 114 DECLARE_MACHINE_RESET(dynax); 115 116 void htengoku_banked_map(address_map &map); 117 118 private: 119 void jantouki_vblank_ack_w(uint8_t data); 120 DECLARE_WRITE_LINE_MEMBER(jantouki_blitter_ack_w); 121 DECLARE_WRITE_LINE_MEMBER(jantouki_blitter_irq_w); 122 DECLARE_WRITE_LINE_MEMBER(jantouki_blitter2_ack_w); 123 DECLARE_WRITE_LINE_MEMBER(jantouki_blitter2_irq_w); 124 void jantouki_sound_vblank_ack_w(uint8_t data); 125 DECLARE_WRITE_LINE_MEMBER(coincounter_0_w); 126 DECLARE_WRITE_LINE_MEMBER(coincounter_1_w); 127 uint8_t ret_ff(); 128 uint8_t hanamai_keyboard_0_r(); 129 uint8_t hanamai_keyboard_1_r(); 130 void hanamai_keyboard_w(uint8_t data); 131 void dynax_rombank_w(uint8_t data); 132 void jantouki_sound_rombank_w(uint8_t data); 133 void cdracula_sound_rombank_w(uint8_t data); 134 void hnoridur_rombank_w(uint8_t data); 135 void hnoridur_palbank_w(uint8_t data); 136 void hnoridur_palette_lo_w(offs_t offset, uint8_t data); 137 void hnoridur_palette_hi_w(offs_t offset, uint8_t data); 138 void hnoridur_palette_update(offs_t offset); 139 void nanajign_palette_lo_w(offs_t offset, uint8_t data); 140 void nanajign_palette_hi_w(offs_t offset, uint8_t data); 141 void nanajign_palette_update(offs_t offset); 142 void adpcm_data_w(uint8_t data); 143 DECLARE_WRITE_LINE_MEMBER(hjingi_lockout_w); 144 DECLARE_WRITE_LINE_MEMBER(hjingi_hopper_w); 145 uint8_t hjingi_hopper_bit(); 146 uint8_t hjingi_keyboard_0_r(); 147 uint8_t hjingi_keyboard_1_r(); 148 void yarunara_input_w(offs_t offset, uint8_t data); 149 uint8_t yarunara_input_r(offs_t offset); 150 void yarunara_rombank_w(uint8_t data); 151 void yarunara_blit_romregion_w(uint8_t data); 152 uint8_t jantouki_soundlatch_ack_r(); 153 void jantouki_soundlatch_w(uint8_t data); 154 uint8_t jantouki_blitter_busy_r(); 155 void jantouki_rombank_w(uint8_t data); 156 uint8_t jantouki_soundlatch_status_r(); 157 uint8_t mjelctrn_keyboard_1_r(); 158 uint8_t mjelctrn_dsw_r(); 159 void tenkai_ipsel_w(offs_t offset, uint8_t data); 160 void tenkai_ip_w(uint8_t data); 161 uint8_t tenkai_ip_r(offs_t offset); 162 uint8_t tenkai_palette_r(offs_t offset); 163 void tenkai_palette_w(offs_t offset, uint8_t data); 164 uint8_t tenkai_p3_r(); 165 void tenkai_p3_w(uint8_t data); 166 void tenkai_p4_w(uint8_t data); 167 uint8_t tenkai_p5_r(); 168 void tenkai_p6_w(uint8_t data); 169 void tenkai_p7_w(uint8_t data); 170 void tenkai_p8_w(uint8_t data); 171 uint8_t tenkai_p8_r(); 172 DECLARE_WRITE_LINE_MEMBER(tenkai_6c_w); 173 DECLARE_WRITE_LINE_MEMBER(tenkai_70_w); 174 void tenkai_blit_romregion_w(uint8_t data); 175 uint8_t gekisha_keyboard_0_r(); 176 uint8_t gekisha_keyboard_1_r(); 177 void gekisha_hopper_w(offs_t offset, uint8_t data); 178 void gekisha_p4_w(uint8_t data); 179 //void dynax_blit_pen_w(uint8_t data); 180 void dynax_blit2_dest_w(uint8_t data); 181 void tenkai_blit_dest_w(uint8_t data); 182 void mjembase_blit_dest_w(uint8_t data); 183 void dynax_blit_backpen_w(uint8_t data); 184 void dynax_blit_palette01_w(uint8_t data); 185 void tenkai_blit_palette01_w(uint8_t data); 186 void dynax_blit_palette45_w(uint8_t data); 187 void dynax_blit_palette23_w(uint8_t data); 188 void tenkai_blit_palette23_w(uint8_t data); 189 void mjembase_blit_palette23_w(uint8_t data); 190 void dynax_blit_palette67_w(uint8_t data); 191 DECLARE_WRITE_LINE_MEMBER(blit_palbank_w); 192 DECLARE_WRITE_LINE_MEMBER(blit2_palbank_w); 193 DECLARE_WRITE_LINE_MEMBER(mjdialq2_blit_dest0_w); 194 DECLARE_WRITE_LINE_MEMBER(mjdialq2_blit_dest1_w); 195 void dynax_layer_enable_w(uint8_t data); 196 void jantouki_layer_enable_w(offs_t offset, uint8_t data); 197 DECLARE_WRITE_LINE_MEMBER(mjdialq2_layer0_enable_w); 198 DECLARE_WRITE_LINE_MEMBER(mjdialq2_layer1_enable_w); 199 void dynax_blit2_romregion_w(uint8_t data); 200 void hanamai_blit_pixel_w(offs_t offset, uint8_t data); 201 void cdracula_blit_pixel_w(offs_t offset, uint8_t data); 202 void drgpunch_blit_pixel_w(offs_t offset, uint8_t data); 203 void jantouki_blit_pixel_w(offs_t offset, uint8_t data); 204 void jantouki_blit2_pixel_w(offs_t offset, uint8_t data); 205 void mjdialq2_blit_pixel_w(offs_t offset, uint8_t data); 206 void dynax_blit2_scrollx_w(uint8_t data); 207 void dynax_blit2_scrolly_w(uint8_t data); 208 void tenkai_blit_scrollx_w(uint8_t data); 209 void tenkai_blit_scrolly_w(uint8_t data); 210 void hanamai_priority_w(uint8_t data); 211 void tenkai_priority_w(uint8_t data); 212 void mjembase_priority_w(uint8_t data); 213 214 uint32_t screen_update_hanamai(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 215 uint32_t screen_update_hnoridur(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 216 uint32_t screen_update_sprtmtch(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 217 uint32_t screen_update_mjdialq2(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 218 uint32_t screen_update_jantouki_top(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 219 uint32_t screen_update_jantouki_bottom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 220 uint32_t screen_update_cdracula(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 221 222 DECLARE_WRITE_LINE_MEMBER(jantouki_vblank_w); 223 DECLARE_WRITE_LINE_MEMBER(mjfriday_vblank_w); 224 225 void tenkai_update_rombank(); 226 227 DECLARE_WRITE_LINE_MEMBER(adpcm_int); 228 DECLARE_WRITE_LINE_MEMBER(adpcm_int_cpu1); 229 230 DECLARE_MACHINE_RESET(adpcm); 231 void adpcm_reset_w(uint8_t data); 232 DECLARE_WRITE_LINE_MEMBER(adpcm_reset_kludge_w); 233 void tenkai_dswsel_w(uint8_t data); 234 uint8_t tenkai_dsw_r(); 235 DECLARE_WRITE_LINE_MEMBER(tenkai_blitter_irq_w); 236 DECLARE_WRITE_LINE_MEMBER(tenkai_blitter_ack_w); 237 DECLARE_MACHINE_START(hanamai); 238 DECLARE_MACHINE_START(hjingi); 239 DECLARE_VIDEO_START(hanamai); 240 void sprtmtch_palette(palette_device &palette) const; 241 DECLARE_VIDEO_START(sprtmtch); 242 DECLARE_MACHINE_START(jantouki); 243 DECLARE_VIDEO_START(jantouki); 244 DECLARE_VIDEO_START(mjelctrn); 245 DECLARE_VIDEO_START(mjembase); 246 DECLARE_VIDEO_START(mjdialq2); 247 DECLARE_VIDEO_START(mcnpshnt); 248 void janyuki_palette(palette_device &palette) const; 249 DECLARE_VIDEO_START(neruton); 250 251 //int blitter_drawgfx( int layer, int mask, memory_region *gfx, int src, int pen, int x, int y, int wrap, int flags ); 252 void jantouki_copylayer( bitmap_ind16 &bitmap, const rectangle &cliprect, int i, int y ); 253 void mjdialq2_copylayer( bitmap_ind16 &bitmap, const rectangle &cliprect, int i ); 254 int debug_mask(); 255 int debug_viewer( bitmap_ind16 &bitmap, const rectangle &cliprect ); 256 void dynax_common_reset(); 257 void tenkai_show_6c(); 258 void cdracula_io_map(address_map &map); 259 void cdracula_mem_map(address_map &map); 260 void gekisha_banked_map(address_map &map); 261 void gekisha_map(address_map &map); 262 void hanamai_io_map(address_map &map); 263 void hjingi_banked_map(address_map &map); 264 void hjingi_io_map(address_map &map); 265 void hjingi_mem_map(address_map &map); 266 void hnoridur_banked_map(address_map &map); 267 void hnoridur_io_map(address_map &map); 268 void hnoridur_mem_map(address_map &map); 269 void jantouki_io_map(address_map &map); 270 void jantouki_mem_map(address_map &map); 271 void jantouki_sound_io_map(address_map &map); 272 void jantouki_sound_mem_map(address_map &map); 273 void mcnpshnt_io_map(address_map &map); 274 void mcnpshnt_mem_map(address_map &map); 275 void mjangels_banked_map(address_map &map); 276 void mjdialq2_mem_map(address_map &map); 277 void mjelctrn_banked_map(address_map &map); 278 void mjelctrn_io_map(address_map &map); 279 void mjembase_io_map(address_map &map); 280 void mjfriday_io_map(address_map &map); 281 void nanajign_banked_map(address_map &map); 282 void nanajign_io_map(address_map &map); 283 void nanajign_mem_map(address_map &map); 284 void quiztvqq_mem_map(address_map &map); 285 void sprtmtch_io_map(address_map &map); 286 void sprtmtch_mem_map(address_map &map); 287 void tenkai_banked_map(address_map &map); 288 void tenkai_map(address_map &map); 289 void yarunara_banked_map(address_map &map); 290 void yarunara_io_map(address_map &map); 291 void yarunara_mem_map(address_map &map); 292 293 /* devices */ 294 optional_device<msm5205_device> m_msm; 295 optional_device<rst_pos_buffer_device> m_mainirq; 296 optional_device<rst_pos_buffer_device> m_soundirq; 297 optional_device<generic_latch_8_device> m_soundlatch; 298 optional_device<dynax_blitter_rev2_device> m_blitter2; 299 optional_region_ptr<uint8_t> m_blitter_gfx; 300 output_finder<> m_led; 301 302 // up to 8 layers, 2 images per layer (interleaved on screen) 303 std::unique_ptr<uint8_t[]> m_pixmap[8][2]; 304 305 /* irq */ 306 bool m_blitter_irq_mask; 307 bool m_blitter2_irq_mask; 308 309 /* blitters */ 310 int m_blit_scroll_x; 311 int m_blit2_scroll_x; 312 int m_blit_scroll_y; 313 int m_blit2_scroll_y; 314 int m_blit_dest; 315 int m_blit2_dest; 316 int m_blit_palbank; 317 int m_blit2_palbank; 318 int m_blit_palettes; 319 int m_blit2_palettes; 320 int m_layer_enable; 321 int m_blit_backpen; 322 323 int m_hanamai_layer_half; 324 int m_hnoridur_layer_half2; 325 326 int m_extra_scroll_x; 327 int m_extra_scroll_y; 328 int m_flipscreen; 329 330 int m_layer_layout; 331 332 const int *m_priority_table; 333 int m_hanamai_priority; 334 335 /* misc */ 336 uint8_t m_palette_ram[16*256*2]; 337 int m_palbank; 338 int m_msm5205next; 339 int m_resetkludge; 340 int m_toggle; 341 int m_toggle_cpu1; 342 int m_rombank; 343 uint8_t m_tenkai_p5_val; 344 int m_tenkai_6c; 345 int m_tenkai_70; 346 uint8_t m_gekisha_val[2]; 347 348 }; 349 350 #endif // MAME_INCLUDES_DYNAX_H 351