1 // license:GPL-2.0+ 2 // copyright-holders:David Graves, Jarek Burczynski 3 /************************************************************************* 4 5 Darius 6 7 *************************************************************************/ 8 #ifndef MAME_INCLUDES_DARIUS_H 9 #define MAME_INCLUDES_DARIUS_H 10 11 #pragma once 12 13 #include "sound/flt_vol.h" 14 #include "sound/msm5205.h" 15 #include "video/pc080sn.h" 16 #include "emupal.h" 17 #include "tilemap.h" 18 19 #define VOL_MAX (3 * 2 + 2) 20 #define PAN_MAX (2 + 2 + 1) /* FM 2port + PSG 2port + DA 1port */ 21 22 class darius_state : public driver_device 23 { 24 public: darius_state(const machine_config & mconfig,device_type type,const char * tag)25 darius_state(const machine_config &mconfig, device_type type, const char *tag) : 26 driver_device(mconfig, type, tag), 27 m_spriteram(*this, "spriteram"), 28 m_fg_ram(*this, "fg_ram"), 29 m_audiobank(*this, "audiobank"), 30 m_maincpu(*this, "maincpu"), 31 m_audiocpu(*this, "audiocpu"), 32 m_msm(*this, "msm"), 33 m_cpub(*this, "cpub"), 34 m_adpcm(*this, "adpcm"), 35 m_pc080sn(*this, "pc080sn"), 36 m_filter_l{{*this, "filter0.%ul", 0U}, 37 {*this, "filter1.%ul", 0U}}, 38 m_filter_r{{*this, "filter0.%ur", 0U}, 39 {*this, "filter1.%ur", 0U}}, 40 m_msm5205_l(*this, "msm5205.l"), 41 m_msm5205_r(*this, "msm5205.r"), 42 m_gfxdecode(*this, "gfxdecode"), 43 m_palette(*this, "palette") 44 { } 45 46 void darius(machine_config &config); 47 48 protected: 49 virtual void device_post_load() override; 50 virtual void machine_start() override; 51 virtual void machine_reset() override; 52 virtual void video_start() override; 53 54 private: 55 /* memory pointers */ 56 required_shared_ptr<u16> m_spriteram; 57 required_shared_ptr<u16> m_fg_ram; 58 required_memory_bank m_audiobank; 59 60 /* video-related */ 61 tilemap_t *m_fg_tilemap; 62 63 /* misc */ 64 u16 m_cpua_ctrl; 65 u16 m_coin_word; 66 u8 m_adpcm_command; 67 u8 m_nmi_enable; 68 u32 m_def_vol[0x10]; 69 u8 m_vol[VOL_MAX]; 70 u8 m_pan[PAN_MAX]; 71 72 /* devices */ 73 required_device<cpu_device> m_maincpu; 74 required_device<cpu_device> m_audiocpu; 75 required_device<msm5205_device> m_msm; 76 required_device<cpu_device> m_cpub; 77 required_device<cpu_device> m_adpcm; 78 required_device<pc080sn_device> m_pc080sn; 79 80 required_device_array<filter_volume_device, 4> m_filter_l[2]; 81 required_device_array<filter_volume_device, 4> m_filter_r[2]; 82 required_device<filter_volume_device> m_msm5205_l; 83 required_device<filter_volume_device> m_msm5205_r; 84 required_device<gfxdecode_device> m_gfxdecode; 85 required_device<palette_device> m_palette; 86 87 void cpua_ctrl_w(u16 data); 88 u16 coin_r(); 89 void coin_w(u16 data); 90 void sound_bankswitch_w(u8 data); 91 void adpcm_command_w(u8 data); 92 void fm0_pan_w(u8 data); 93 void fm1_pan_w(u8 data); 94 void psg0_pan_w(u8 data); 95 void psg1_pan_w(u8 data); 96 void da_pan_w(u8 data); 97 u8 adpcm_command_r(); 98 u8 readport2(); 99 u8 readport3(); 100 void adpcm_nmi_disable(u8 data); 101 void adpcm_nmi_enable(u8 data); 102 void fg_layer_w(offs_t offset, u16 data, u16 mem_mask = ~0); 103 void write_portA0(u8 data); 104 void write_portA1(u8 data); 105 void write_portB0(u8 data); 106 void write_portB1(u8 data); 107 void adpcm_data_w(u8 data); 108 TILE_GET_INFO_MEMBER(get_fg_tile_info); 109 u32 screen_update_left(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 110 u32 screen_update_middle(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 111 u32 screen_update_right(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 112 void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int x_offs, int y_offs); 113 u32 update_screen(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int xoffs); 114 void parse_control(); // assumes Z80 sandwiched between 68Ks 115 void update_fm0(); 116 void update_fm1(); 117 void update_psg0(int port); 118 void update_psg1(int port); 119 void update_da(); 120 DECLARE_WRITE_LINE_MEMBER(adpcm_int); 121 void darius_cpub_map(address_map &map); 122 void darius_map(address_map &map); 123 void darius_sound2_io_map(address_map &map); 124 void darius_sound2_map(address_map &map); 125 void darius_sound_map(address_map &map); 126 }; 127 128 #endif // MAME_INCLUDES_DARIUS_H 129