1 // license:BSD-3-Clause 2 // copyright-holders:Luca Elia 3 /*************************************************************************** 4 5 -= Jaleco Mega System 1 =- 6 7 driver by Luca Elia (l.elia@tin.it) 8 9 ***************************************************************************/ 10 #ifndef MAME_INCLUDES_MEGASYS1_H 11 #define MAME_INCLUDES_MEGASYS1_H 12 13 #pragma once 14 15 #include "machine/gen_latch.h" 16 #include "machine/timer.h" 17 #include "sound/msm5205.h" 18 #include "sound/okim6295.h" 19 #include "video/ms1_tmap.h" 20 #include "emupal.h" 21 #include "screen.h" 22 23 24 class megasys1_state : public driver_device 25 { 26 public: megasys1_state(const machine_config & mconfig,device_type type,const char * tag)27 megasys1_state(const machine_config &mconfig, device_type type, const char *tag) : 28 driver_device(mconfig, type, tag), 29 m_objectram(*this, "objectram"), 30 m_tmap(*this, "scroll%u", 0), 31 m_ram(*this, "ram"), 32 m_maincpu(*this, "maincpu"), 33 m_audiocpu(*this, "audiocpu"), 34 m_oki(*this, "oki%u", 1U), 35 m_p47b_adpcm(*this, "msm%u", 1U), 36 m_gfxdecode(*this, "gfxdecode"), 37 m_palette(*this, "palette"), 38 m_screen(*this, "screen"), 39 m_soundlatch(*this, "soundlatch%u", 1U), 40 m_scantimer(*this, "scantimer"), 41 m_rom_maincpu(*this, "maincpu"), 42 m_okibank(*this, "okibank"), 43 m_io_system(*this, "SYSTEM"), 44 m_io_p1(*this, "P1"), 45 m_io_p2(*this, "P2"), 46 m_io_dsw(*this, "DSW"), 47 m_io_dsw1(*this, "DSW1"), 48 m_io_dsw2(*this, "DSW2") 49 { } 50 51 void system_A_soldam(machine_config &config); 52 void system_B_monkelf(machine_config &config); 53 void system_A_iganinju(machine_config &config); 54 void system_A_hachoo(machine_config &config); 55 void kickoffb(machine_config &config); 56 void p47b(machine_config &config); 57 void system_D(machine_config &config); 58 void system_C(machine_config &config); 59 void system_Bbl(machine_config &config); 60 void system_A(machine_config &config); 61 void system_A_jitsupro(machine_config &config); 62 void system_B(machine_config &config); 63 void system_B_hayaosi1(machine_config &config); 64 void system_Z(machine_config &config); 65 66 void init_64street(); 67 void init_chimerab(); 68 void init_peekaboo(); 69 void init_soldam(); 70 void init_astyanax(); 71 void init_stdragon(); 72 void init_hayaosi1(); 73 void init_soldamj(); 74 void init_phantasm(); 75 void init_jitsupro(); 76 void init_iganinju(); 77 void init_cybattlr(); 78 void init_rodlandj(); 79 void init_rittam(); 80 void init_rodlandjb(); 81 void init_avspirit(); 82 void init_monkelf(); 83 void init_edf(); 84 void init_edfp(); 85 void init_bigstrik(); 86 void init_rodland(); 87 void init_edfbl(); 88 void init_stdragona(); 89 void init_stdragonb(); 90 void init_systemz(); 91 92 private: 93 required_shared_ptr<u16> m_objectram; 94 optional_device_array<megasys1_tilemap_device, 3> m_tmap; 95 required_shared_ptr<u16> m_ram; 96 required_device<cpu_device> m_maincpu; 97 optional_device<cpu_device> m_audiocpu; 98 optional_device_array<okim6295_device, 2> m_oki; 99 optional_device_array<msm5205_device, 2> m_p47b_adpcm; 100 required_device<gfxdecode_device> m_gfxdecode; 101 required_device<palette_device> m_palette; 102 required_device<screen_device> m_screen; 103 optional_device_array<generic_latch_16_device, 2> m_soundlatch; 104 optional_device<timer_device> m_scantimer; 105 required_region_ptr<u16> m_rom_maincpu; 106 optional_memory_bank m_okibank; 107 required_ioport m_io_system; 108 required_ioport m_io_p1; 109 required_ioport m_io_p2; 110 optional_ioport m_io_dsw; 111 optional_ioport m_io_dsw1; 112 optional_ioport m_io_dsw2; 113 114 // configuration 115 u16 m_ip_select_values[7]; // System B and C 116 int m_hardware_type_z; // System Z 117 int m_layers_order[16]; 118 u8 m_ignore_oki_status; 119 120 // all 121 bitmap_ind16 m_sprite_buffer_bitmap; 122 u16 m_screen_flag; 123 std::unique_ptr<u16[]> m_buffer_objectram; 124 std::unique_ptr<u16[]> m_buffer2_objectram; 125 std::unique_ptr<u16[]> m_buffer_spriteram16; 126 std::unique_ptr<u16[]> m_buffer2_spriteram16; 127 128 // all but System Z 129 u16 m_active_layers; 130 u16 m_sprite_flag; 131 132 // System B and C 133 u16 m_ip_latched; 134 135 // System C 136 u16 m_sprite_bank; 137 138 // System A only 139 int m_mcu_hs; 140 u16 m_mcu_hs_ram[0x10]; 141 142 // peekaboo 143 u16 m_protection_val; 144 145 // soldam 146 u16 *m_spriteram; 147 148 DECLARE_WRITE_LINE_MEMBER(sound_irq); 149 u16 ip_select_r(); 150 void ip_select_w(u16 data); 151 u16 protection_peekaboo_r(); 152 void protection_peekaboo_w(offs_t offset, u16 data, u16 mem_mask = ~0); 153 u16 megasys1A_mcu_hs_r(offs_t offset, u16 mem_mask = ~0); 154 void megasys1A_mcu_hs_w(offs_t offset, u16 data, u16 mem_mask = ~0); 155 u16 iganinju_mcu_hs_r(offs_t offset, u16 mem_mask = ~0); 156 void iganinju_mcu_hs_w(offs_t offset, u16 data, u16 mem_mask = ~0); 157 u16 soldamj_spriteram16_r(offs_t offset); 158 void soldamj_spriteram16_w(offs_t offset, u16 data, u16 mem_mask = ~0); 159 u16 stdragon_mcu_hs_r(offs_t offset, u16 mem_mask = ~0); 160 void stdragon_mcu_hs_w(offs_t offset, u16 data, u16 mem_mask = ~0); 161 void active_layers_w(offs_t offset, u16 data, u16 mem_mask = ~0); 162 void sprite_bank_w(offs_t offset, u16 data, u16 mem_mask = ~0); 163 u16 sprite_flag_r(); 164 void sprite_flag_w(offs_t offset, u16 data, u16 mem_mask = ~0); 165 void screen_flag_w(offs_t offset, u16 data, u16 mem_mask = ~0); 166 void soundlatch_w(u16 data); 167 void soundlatch_z_w(u16 data); 168 void soundlatch_c_w(u16 data); 169 void monkelf_scroll0_w(offs_t offset, u16 data, u16 mem_mask = ~0); 170 void monkelf_scroll1_w(offs_t offset, u16 data, u16 mem_mask = ~0); 171 void megasys1_set_vreg_flag(int which, int data); 172 template<int Chip> u8 oki_status_r(); 173 void ram_w(offs_t offset, u16 data); 174 void p47b_adpcm_w(offs_t offset, u8 data); 175 176 DECLARE_MACHINE_RESET(megasys1); 177 DECLARE_VIDEO_START(megasys1); 178 DECLARE_VIDEO_START(megasys1_z); 179 void megasys1_palette(palette_device &palette); 180 DECLARE_MACHINE_RESET(megasys1_hachoo); 181 182 u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 183 DECLARE_WRITE_LINE_MEMBER(screen_vblank); 184 INTERRUPT_GEN_MEMBER(megasys1D_irq); 185 TIMER_DEVICE_CALLBACK_MEMBER(megasys1A_scanline); 186 TIMER_DEVICE_CALLBACK_MEMBER(megasys1A_iganinju_scanline); 187 TIMER_DEVICE_CALLBACK_MEMBER(megasys1B_scanline); 188 189 void priority_create(); 190 void mix_sprite_bitmap(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); 191 void partial_clear_sprite_bitmap(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, u8 param); 192 void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect); 193 inline void draw_16x16_priority_sprite(screen_device &screen, bitmap_ind16 &bitmap,const rectangle &cliprect, s32 code, s32 color, s32 sx, s32 sy, s32 flipx, s32 flipy, u8 mosaic, u8 mosaicsol, s32 priority); 194 void rodland_gfx_unmangle(const char *region); 195 void jitsupro_gfx_unmangle(const char *region); 196 void stdragona_gfx_unmangle(const char *region); 197 void kickoffb_sound_map(address_map &map); 198 void p47b_sound_map(address_map &map); 199 void p47b_extracpu_prg_map(address_map &map); 200 void p47b_extracpu_io_map(address_map &map); 201 void megasys1A_map(address_map &map); 202 void megasys1A_sound_map(address_map &map); 203 void megasys1A_jitsupro_sound_map(address_map &map); 204 void megasys1B_edfbl_map(address_map &map); 205 void megasys1B_map(address_map &map); 206 void megasys1B_monkelf_map(address_map &map); 207 void megasys1B_sound_map(address_map &map); 208 void megasys1C_map(address_map &map); 209 void megasys1D_map(address_map &map); 210 void megasys1D_oki_map(address_map &map); 211 void megasys1Z_map(address_map &map); 212 void z80_sound_io_map(address_map &map); 213 void z80_sound_map(address_map &map); 214 }; 215 216 #endif // MAME_INCLUDES_MEGASYS1_H 217