// license:BSD-3-Clause // copyright-holders:Bryan McPhail #include "machine/gen_latch.h" #include "machine/input_merger.h" #include "sound/msm5205.h" #include "video/bufsprite.h" #include "video/decbac06.h" #include "video/deckarn.h" #include "video/decmxc06.h" #include "video/decrmc3.h" class dec8_state : public driver_device { public: enum { TIMER_DEC8_I8751, TIMER_DEC8_M6502 }; dec8_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_subcpu(*this, "sub"), m_audiocpu(*this, "audiocpu"), m_mcu(*this, "mcu"), m_nmigate(*this, "nmigate"), m_spriteram(*this, "spriteram") , m_msm(*this, "msm"), m_tilegen(*this, "tilegen%u", 1), m_spritegen_krn(*this, "spritegen_krn"), m_spritegen_mxc(*this, "spritegen_mxc"), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), m_soundlatch(*this, "soundlatch"), m_videoram(*this, "videoram"), m_bg_data(*this, "bg_data"), m_mainbank(*this, "mainbank"), m_soundbank(*this, "soundbank"), m_coin_port(*this, "I8751") { } /* devices */ required_device m_maincpu; optional_device m_subcpu; required_device m_audiocpu; optional_device m_mcu; optional_device m_nmigate; required_device m_spriteram; optional_device m_msm; optional_device_array m_tilegen; optional_device m_spritegen_krn; optional_device m_spritegen_mxc; required_device m_gfxdecode; required_device m_palette; required_device m_soundlatch; /* memory pointers */ required_shared_ptr m_videoram; optional_shared_ptr m_bg_data; /* memory regions */ required_memory_bank m_mainbank; optional_memory_bank m_soundbank; uint8_t * m_pf1_data; uint8_t * m_row; std::unique_ptr m_buffered_spriteram16; // for the mxc06 sprite chip emulation (oscar, cobra) /* video-related */ tilemap_t *m_bg_tilemap; tilemap_t *m_pf1_tilemap; tilemap_t *m_fix_tilemap; //int m_scroll1[4]; int m_scroll2[4]; int m_bg_control[0x20]; int m_pf1_control[0x20]; int m_game_uses_priority; /* misc */ bool m_secclr; bool m_nmi_enable; uint8_t m_i8751_p2; int m_i8751_port0; int m_i8751_port1; int m_i8751_return; int m_i8751_value; int m_coinage_id; int m_coin1; int m_coin2; int m_need1; int m_need2; int m_cred1; int m_cred2; int m_credits; int m_latch; bool m_coin_state; int m_snd; int m_msm5205next; int m_toggle; emu_timer *m_i8751_timer; emu_timer *m_m6502_timer; DECLARE_WRITE8_MEMBER(dec8_mxc06_karn_buffer_spriteram_w); DECLARE_READ8_MEMBER(i8751_h_r); DECLARE_READ8_MEMBER(i8751_l_r); DECLARE_WRITE8_MEMBER(i8751_reset_w); DECLARE_READ8_MEMBER(gondo_player_1_r); DECLARE_READ8_MEMBER(gondo_player_2_r); DECLARE_WRITE8_MEMBER(dec8_i8751_w); DECLARE_WRITE8_MEMBER(lastmisn_i8751_w); DECLARE_WRITE8_MEMBER(csilver_i8751_w); DECLARE_WRITE8_MEMBER(dec8_bank_w); DECLARE_WRITE8_MEMBER(ghostb_bank_w); DECLARE_WRITE_LINE_MEMBER(ghostb_nmi_w); DECLARE_WRITE8_MEMBER(csilver_control_w); DECLARE_WRITE8_MEMBER(dec8_sound_w); DECLARE_WRITE8_MEMBER(csilver_adpcm_data_w); DECLARE_WRITE8_MEMBER(csilver_sound_bank_w); DECLARE_WRITE8_MEMBER(main_irq_on_w); DECLARE_WRITE8_MEMBER(main_irq_off_w); DECLARE_WRITE8_MEMBER(main_firq_off_w); DECLARE_WRITE8_MEMBER(sub_irq_on_w); DECLARE_WRITE8_MEMBER(sub_irq_off_w); DECLARE_WRITE8_MEMBER(sub_firq_off_w); DECLARE_WRITE8_MEMBER(flip_screen_w); DECLARE_READ8_MEMBER(i8751_port0_r); DECLARE_WRITE8_MEMBER(i8751_port0_w); DECLARE_READ8_MEMBER(i8751_port1_r); DECLARE_WRITE8_MEMBER(i8751_port1_w); DECLARE_WRITE8_MEMBER(gondo_mcu_to_main_w); DECLARE_WRITE8_MEMBER(shackled_mcu_to_main_w); DECLARE_WRITE8_MEMBER(srdarwin_mcu_to_main_w); DECLARE_WRITE8_MEMBER(dec8_bg_data_w); DECLARE_READ8_MEMBER(dec8_bg_data_r); DECLARE_WRITE8_MEMBER(dec8_videoram_w); DECLARE_WRITE8_MEMBER(srdarwin_videoram_w); DECLARE_WRITE8_MEMBER(dec8_scroll2_w); DECLARE_WRITE8_MEMBER(srdarwin_control_w); DECLARE_WRITE8_MEMBER(lastmisn_control_w); DECLARE_WRITE8_MEMBER(shackled_control_w); DECLARE_WRITE8_MEMBER(lastmisn_scrollx_w); DECLARE_WRITE8_MEMBER(lastmisn_scrolly_w); DECLARE_WRITE8_MEMBER(gondo_scroll_w); DECLARE_READ8_MEMBER(csilver_adpcm_reset_r); void init_dec8(); void init_csilver(); TILE_GET_INFO_MEMBER(get_cobracom_fix_tile_info); TILE_GET_INFO_MEMBER(get_ghostb_fix_tile_info); TILE_GET_INFO_MEMBER(get_oscar_fix_tile_info); TILEMAP_MAPPER_MEMBER(lastmisn_scan_rows); TILE_GET_INFO_MEMBER(get_lastmisn_tile_info); TILE_GET_INFO_MEMBER(get_lastmisn_fix_tile_info); TILE_GET_INFO_MEMBER(get_srdarwin_fix_tile_info); TILE_GET_INFO_MEMBER(get_srdarwin_tile_info); TILE_GET_INFO_MEMBER(get_gondo_fix_tile_info); TILE_GET_INFO_MEMBER(get_gondo_tile_info); virtual void machine_start() override; virtual void machine_reset() override; DECLARE_VIDEO_START(lastmisn); DECLARE_VIDEO_START(shackled); DECLARE_VIDEO_START(gondo); DECLARE_VIDEO_START(garyoret); DECLARE_VIDEO_START(ghostb); DECLARE_VIDEO_START(oscar); DECLARE_VIDEO_START(srdarwin); DECLARE_VIDEO_START(cobracom); void allocate_buffered_spriteram16(); uint32_t screen_update_lastmisn(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_shackled(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_gondo(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_garyoret(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_ghostb(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_oscar(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_srdarwin(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); uint32_t screen_update_cobracom(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_WRITE_LINE_MEMBER(screen_vblank_dec8); DECLARE_WRITE_LINE_MEMBER(oscar_coin_irq); DECLARE_WRITE8_MEMBER(oscar_coin_clear_w); DECLARE_WRITE_LINE_MEMBER(shackled_coin_irq); void srdarwin_draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect, int pri ); DECLARE_WRITE_LINE_MEMBER(csilver_adpcm_int); void shackled(machine_config &config); void meikyuh(machine_config &config); void lastmisn(machine_config &config); void csilver(machine_config &config); void cobracom(machine_config &config); void garyoret(machine_config &config); void srdarwin(machine_config &config); void ghostb(machine_config &config); void oscar(machine_config &config); void gondo(machine_config &config); void cobra_map(address_map &map); void csilver_map(address_map &map); void csilver_s_map(address_map &map); void csilver_sub_map(address_map &map); void dec8_s_map(address_map &map); void garyoret_map(address_map &map); void gondo_map(address_map &map); void lastmisn_map(address_map &map); void lastmisn_sub_map(address_map &map); void meikyuh_map(address_map &map); void oscar_map(address_map &map); void oscar_s_map(address_map &map); void oscar_sub_map(address_map &map); void shackled_map(address_map &map); void shackled_sub_map(address_map &map); void srdarwin_map(address_map &map); void ym3526_s_map(address_map &map); protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; private: /* ports */ optional_ioport m_coin_port; };