// license:BSD-3-Clause // copyright-holders:Darren Olafson, Quench /*************************************************************************** ToaPlan game hardware from 1988-1991 ------------------------------------ ****************************************************************************/ #ifndef MAME_INCLUDES_TOAPLAN1_H #define MAME_INCLUDES_TOAPLAN1_H #pragma once #include "cpu/m68000/m68000.h" #include "cpu/tms32010/tms32010.h" #include "sound/3812intf.h" #include "video/toaplan_scu.h" #include "emupal.h" #include "screen.h" #include "tilemap.h" class toaplan1_state : public driver_device { public: toaplan1_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_bgpaletteram(*this, "bgpalette"), m_fgpaletteram(*this, "fgpalette"), m_sharedram(*this, "sharedram"), m_dswb_io(*this, "DSWB"), m_tjump_io(*this, "TJUMP"), m_spriteram(*this, "spriteram"), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), m_ymsnd(*this, "ymsnd"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), m_palette(*this, "palette") { } void truxton(machine_config &config); void outzone(machine_config &config); void vimana(machine_config &config); void outzonecv(machine_config &config); void hellfire(machine_config &config); void zerowing(machine_config &config); protected: virtual void machine_start() override; virtual void machine_reset() override; virtual void video_start() override; required_shared_ptr m_bgpaletteram; required_shared_ptr m_fgpaletteram; optional_shared_ptr m_sharedram; optional_ioport m_dswb_io; optional_ioport m_tjump_io; int m_intenable; std::unique_ptr m_tilevram[4]; /* std::unique_ptr m_tilevram[3]; // || Drawn in this order std::unique_ptr m_tilevram[2]; // || std::unique_ptr m_tilevram[1]; // \||/ std::unique_ptr m_tilevram[0]; // \/ */ optional_shared_ptr m_spriteram; std::unique_ptr m_buffered_spriteram; std::unique_ptr m_spritesizeram; std::unique_ptr m_buffered_spritesizeram; s32 m_bcu_flipscreen; /* Tile controller flip flag */ s32 m_fcu_flipscreen; /* Sprite controller flip flag */ s32 m_pf_voffs; s32 m_spriteram_offs; s32 m_scrollx[4]; s32 m_scrolly[4]; #ifdef MAME_DEBUG int m_display_pf[4]; int m_displog; #endif s32 m_tiles_offsetx; s32 m_tiles_offsety; tilemap_t *m_tilemap[4]; void intenable_w(u8 data); u8 shared_r(offs_t offset); void shared_w(offs_t offset, u8 data); void reset_sound_w(u8 data); void coin_w(u8 data); u16 frame_done_r(); DECLARE_WRITE16_MEMBER(tile_offsets_w); void bcu_flipscreen_w(u8 data); void fcu_flipscreen_w(u8 data); u16 spriteram_offs_r(); void spriteram_offs_w(offs_t offset, u16 data, u16 mem_mask = ~0); void bgpalette_w(offs_t offset, u16 data, u16 mem_mask = ~0); void fgpalette_w(offs_t offset, u16 data, u16 mem_mask = ~0); u16 spriteram_r(); void spriteram_w(offs_t offset, u16 data, u16 mem_mask = ~0); u16 spritesizeram_r(); void spritesizeram_w(offs_t offset, u16 data, u16 mem_mask = ~0); void bcu_control_w(offs_t offset, u16 data); u16 tileram_offs_r(); void tileram_offs_w(offs_t offset, u16 data, u16 mem_mask = ~0); u16 tileram_r(offs_t offset); void tileram_w(offs_t offset, u16 data, u16 mem_mask = ~0); u16 scroll_regs_r(offs_t offset); void scroll_regs_w(offs_t offset, u16 data, u16 mem_mask = ~0); u8 vimana_dswb_invert_r(); u8 vimana_tjump_invert_r(); template TILE_GET_INFO_MEMBER(get_tile_info); DECLARE_MACHINE_RESET(zerowing); u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(screen_vblank); void interrupt(); void create_tilemaps(); void vram_alloc(); void spritevram_alloc(); void set_scrolls(); void register_common(); void log_vram(); void draw_sprites(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect ); void draw_sprite_custom(screen_device &screen, bitmap_rgb32 &dest_bmp, const rectangle &clip, gfx_element *gfx, u32 code, u32 color, int flipx, int flipy, int sx, int sy, int priority); void reset_sound(); DECLARE_WRITE_LINE_MEMBER(reset_callback); required_device m_maincpu; required_device m_audiocpu; required_device m_ymsnd; required_device m_gfxdecode; required_device m_screen; required_device m_palette; void hellfire_main_map(address_map &map); void hellfire_sound_io_map(address_map &map); void outzone_main_map(address_map &map); void outzone_sound_io_map(address_map &map); void outzonecv_main_map(address_map &map); void sound_map(address_map &map); void truxton_main_map(address_map &map); void truxton_sound_io_map(address_map &map); void vimana_hd647180_io_map(address_map &map); void vimana_hd647180_mem_map(address_map &map); void vimana_main_map(address_map &map); void zerowing_main_map(address_map &map); void zerowing_sound_io_map(address_map &map); }; class toaplan1_rallybik_state : public toaplan1_state { public: toaplan1_rallybik_state(const machine_config &mconfig, device_type type, const char *tag) : toaplan1_state(mconfig, type, tag), m_spritegen(*this, "scu") { } void rallybik(machine_config &config); protected: virtual void video_start() override; private: DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w); DECLARE_WRITE_LINE_MEMBER(coin_counter_2_w); DECLARE_WRITE_LINE_MEMBER(coin_lockout_1_w); DECLARE_WRITE_LINE_MEMBER(coin_lockout_2_w); u16 tileram_r(offs_t offset); u32 screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(screen_vblank); required_device m_spritegen; void rallybik_main_map(address_map &map); void rallybik_sound_io_map(address_map &map); }; class toaplan1_demonwld_state : public toaplan1_state { public: toaplan1_demonwld_state(const machine_config &mconfig, device_type type, const char *tag) : toaplan1_state(mconfig, type, tag), m_dsp(*this, "dsp") { } void demonwld(machine_config &config); protected: virtual void device_post_load() override; virtual void machine_start() override; virtual void machine_reset() override; private: /* Demon world */ int m_dsp_on; int m_dsp_bio; int m_dsp_execute; u32 m_dsp_addr_w; u32 m_main_ram_seg; void dsp_addrsel_w(u16 data); u16 dsp_r(); void dsp_w(u16 data); void dsp_bio_w(u16 data); DECLARE_READ_LINE_MEMBER(bio_r); void dsp_ctrl_w(u8 data); void dsp_int_w(int enable); required_device m_dsp; void dsp_io_map(address_map &map); void dsp_program_map(address_map &map); void main_map(address_map &map); void sound_io_map(address_map &map); }; class toaplan1_samesame_state : public toaplan1_state { public: toaplan1_samesame_state(const machine_config &mconfig, device_type type, const char *tag) : toaplan1_state(mconfig, type, tag) { } void samesame(machine_config &config); protected: virtual void machine_start() override; private: // Fire Shark sound u8 m_to_mcu; u8 m_cmdavailable; void mcu_w(u8 data); u8 soundlatch_r(); void sound_done_w(u8 data); u8 cmdavailable_r(); u8 port_6_word_r(); DECLARE_WRITE_LINE_MEMBER(screen_vblank); void hd647180_io_map(address_map &map); void main_map(address_map &map); }; #endif // MAME_INCLUDES_TOAPLAN1_H