1 // license:BSD-3-Clause 2 // copyright-holders:Olivier Galibert 3 /************************************************************************* 4 5 Xexex 6 7 *************************************************************************/ 8 #ifndef MAME_INCLUDES_XEXEX_H 9 #define MAME_INCLUDES_XEXEX_H 10 11 #pragma once 12 13 #include "video/k053250.h" 14 #include "sound/flt_vol.h" 15 #include "sound/k054539.h" 16 #include "machine/k053252.h" 17 #include "video/k054156_k054157_k056832.h" 18 #include "video/k053246_k053247_k055673.h" 19 #include "video/k054338.h" 20 #include "video/k053251.h" 21 #include "video/konami_helper.h" 22 #include "machine/k054321.h" 23 #include "machine/timer.h" 24 #include "emupal.h" 25 #include "screen.h" 26 27 class xexex_state : public driver_device 28 { 29 public: xexex_state(const machine_config & mconfig,device_type type,const char * tag)30 xexex_state(const machine_config &mconfig, device_type type, const char *tag) 31 : driver_device(mconfig, type, tag) 32 , m_workram(*this, "workram") 33 , m_spriteram(*this, "spriteram") 34 , m_z80bank(*this, "z80bank") 35 , m_maincpu(*this, "maincpu") 36 , m_audiocpu(*this, "audiocpu") 37 , m_k054539(*this, "k054539") 38 , m_filter_l(*this, "filter%u_l", 1) 39 , m_filter_r(*this, "filter%u_r", 1) 40 , m_k056832(*this, "k056832") 41 , m_k053246(*this, "k053246") 42 , m_k053250(*this, "k053250") 43 , m_k053251(*this, "k053251") 44 , m_k053252(*this, "k053252") 45 , m_k054338(*this, "k054338") 46 , m_palette(*this, "palette") 47 , m_screen(*this, "screen") 48 , m_k054321(*this, "k054321") 49 { 50 } 51 52 void xexex(machine_config &config); 53 54 void init_xexex(); 55 56 private: 57 /* memory pointers */ 58 required_shared_ptr<uint16_t> m_workram; 59 required_shared_ptr<uint16_t> m_spriteram; 60 61 /* memory regions */ 62 required_memory_bank m_z80bank; 63 64 /* video-related */ 65 int m_layer_colorbase[4]; 66 int m_sprite_colorbase; 67 int m_layerpri[4]; 68 int m_cur_alpha; 69 70 /* misc */ 71 uint16_t m_cur_control2; 72 int32_t m_strip_0x1a; 73 int m_suspension_active; 74 int m_resume_trigger; 75 emu_timer *m_dmadelay_timer; 76 int m_frame; 77 78 /* devices */ 79 required_device<cpu_device> m_maincpu; 80 required_device<cpu_device> m_audiocpu; 81 required_device<k054539_device> m_k054539; 82 required_device_array<filter_volume_device, 2> m_filter_l; 83 required_device_array<filter_volume_device, 2> m_filter_r; 84 required_device<k056832_device> m_k056832; 85 required_device<k053247_device> m_k053246; 86 required_device<k053250_device> m_k053250; 87 required_device<k053251_device> m_k053251; 88 required_device<k053252_device> m_k053252; 89 required_device<k054338_device> m_k054338; 90 required_device<palette_device> m_palette; 91 required_device<screen_device> m_screen; 92 required_device<k054321_device> m_k054321; 93 94 uint16_t spriteram_mirror_r(offs_t offset); 95 void spriteram_mirror_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 96 uint16_t xexex_waitskip_r(); 97 uint16_t control2_r(); 98 void control2_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); 99 void sound_irq_w(uint16_t data); 100 void sound_bankswitch_w(uint8_t data); 101 102 virtual void machine_start() override; 103 virtual void machine_reset() override; 104 virtual void video_start() override; 105 uint32_t screen_update_xexex(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); 106 TIMER_CALLBACK_MEMBER(dmaend_callback); 107 TIMER_DEVICE_CALLBACK_MEMBER(xexex_interrupt); 108 void xexex_postload(); 109 void xexex_objdma(int limiter); 110 void parse_control2(); 111 K056832_CB_MEMBER(tile_callback); 112 K053246_CB_MEMBER(sprite_callback); 113 K054539_CB_MEMBER(ym_set_mixing); 114 115 void main_map(address_map &map); 116 void sound_map(address_map &map); 117 }; 118 119 #endif // MAME_INCLUDES_XEXEX_H 120