// license:BSD-3-Clause // copyright-holders:Zsolt Vasvari /************************************************************************* VIC Dual Game board *************************************************************************/ #include "cpu/mcs48/mcs48.h" #include "machine/timer.h" #include "sound/ay8910.h" #include "sound/discrete.h" #include "sound/samples.h" #include "screen.h" #include "audio/vicdual-97271p.h" #include "video/vicdual-97269pb.h" class vicdual_state : public driver_device { public: vicdual_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), m_maincpu(*this,"maincpu"), m_audiocpu(*this, "audiocpu"), m_psg(*this, "psg"), m_samples(*this, "samples"), m_discrete(*this, "discrete"), m_coinstate_timer(*this, "coinstate"), m_nsub_coinage_timer(*this, "nsub_coin"), m_screen(*this, "screen"), m_proms(*this, "proms"), m_videoram(*this, "videoram"), m_characterram(*this, "characterram"), m_in0(*this, "IN0"), m_in1(*this, "IN1"), m_in2(*this, "IN2"), m_coinage(*this, "COINAGE"), m_color_bw(*this, "COLOR_BW"), m_fake_lives(*this, "FAKE_LIVES.%u", 0) { } required_device m_maincpu; optional_device m_audiocpu; optional_device m_psg; optional_device m_samples; optional_device m_discrete; required_device m_coinstate_timer; optional_device m_nsub_coinage_timer; required_device m_screen; optional_memory_region m_proms; required_shared_ptr m_videoram; required_shared_ptr m_characterram; required_ioport m_in0; required_ioport m_in1; optional_ioport m_in2; optional_ioport m_coinage; optional_ioport m_color_bw; optional_ioport_array<2> m_fake_lives; uint8_t m_coin_status; uint8_t m_palette_bank; uint8_t m_samurai_protection_data; int m_port1State; int m_port2State; int m_psgData; int m_psgBus; emu_timer *m_frogs_croak_timer; void coin_in(); void assert_coin_status(); // common DECLARE_WRITE8_MEMBER(videoram_w); DECLARE_WRITE8_MEMBER(characterram_w); DECLARE_WRITE8_MEMBER(palette_bank_w); // game specific DECLARE_READ8_MEMBER(depthch_io_r); DECLARE_WRITE8_MEMBER(depthch_io_w); DECLARE_READ8_MEMBER(safari_io_r); DECLARE_WRITE8_MEMBER(safari_io_w); DECLARE_READ8_MEMBER(frogs_io_r); DECLARE_WRITE8_MEMBER(frogs_io_w); DECLARE_READ8_MEMBER(headon_io_r); DECLARE_READ8_MEMBER(sspaceat_io_r); DECLARE_WRITE8_MEMBER(headon_io_w); DECLARE_MACHINE_RESET(headon2); DECLARE_READ8_MEMBER(headon2_io_r); DECLARE_WRITE8_MEMBER(headon2_io_w); DECLARE_WRITE8_MEMBER(digger_io_w); DECLARE_WRITE8_MEMBER(invho2_io_w); DECLARE_WRITE8_MEMBER(invds_io_w); DECLARE_WRITE8_MEMBER(carhntds_io_w); DECLARE_WRITE8_MEMBER(sspacaho_io_w); DECLARE_WRITE8_MEMBER(headonn_io_w); DECLARE_WRITE8_MEMBER(tranqgun_io_w); DECLARE_WRITE8_MEMBER(spacetrk_io_w); DECLARE_WRITE8_MEMBER(carnival_io_w); DECLARE_WRITE8_MEMBER(brdrline_io_w); DECLARE_WRITE8_MEMBER(pulsar_io_w); DECLARE_WRITE8_MEMBER(heiankyo_io_w); DECLARE_WRITE8_MEMBER(alphaho_io_w); DECLARE_WRITE8_MEMBER(samurai_protection_w); DECLARE_WRITE8_MEMBER(samurai_io_w); DECLARE_READ8_MEMBER(invinco_io_r); DECLARE_WRITE8_MEMBER(invinco_io_w); /*----------- defined in audio/vicdual.c -----------*/ DECLARE_WRITE8_MEMBER( frogs_audio_w ); DECLARE_WRITE8_MEMBER( headon_audio_w ); DECLARE_WRITE8_MEMBER( invho2_audio_w ); DECLARE_WRITE8_MEMBER( brdrline_audio_w ); DECLARE_WRITE8_MEMBER( brdrline_audio_aux_w ); TIMER_CALLBACK_MEMBER( frogs_croak_callback ); /*----------- defined in audio/carnival.c -----------*/ DECLARE_WRITE8_MEMBER( carnival_audio_1_w ); DECLARE_WRITE8_MEMBER( carnival_audio_2_w ); DECLARE_READ_LINE_MEMBER( carnival_music_port_t1_r ); DECLARE_WRITE8_MEMBER( carnival_music_port_1_w ); DECLARE_WRITE8_MEMBER( carnival_music_port_2_w ); void carnival_psg_latch(address_space &space); /*----------- defined in audio/depthch.c -----------*/ DECLARE_WRITE8_MEMBER( depthch_audio_w ); /*----------- defined in audio/invinco.c -----------*/ DECLARE_WRITE8_MEMBER( invinco_audio_w ); /*----------- defined in audio/pulsar.c -----------*/ DECLARE_WRITE8_MEMBER( pulsar_audio_1_w ); DECLARE_WRITE8_MEMBER( pulsar_audio_2_w ); /*----------- defined in audio/tranqgun.c -----------*/ DECLARE_WRITE8_MEMBER( tranqgun_audio_w ); DECLARE_CUSTOM_INPUT_MEMBER(read_coin_status); DECLARE_CUSTOM_INPUT_MEMBER(get_64v); DECLARE_CUSTOM_INPUT_MEMBER(get_vblank_comp); DECLARE_CUSTOM_INPUT_MEMBER(get_composite_blank_comp); DECLARE_CUSTOM_INPUT_MEMBER(get_timer_value); DECLARE_CUSTOM_INPUT_MEMBER(fake_lives_r); DECLARE_CUSTOM_INPUT_MEMBER(samurai_protection_r); DECLARE_INPUT_CHANGED_MEMBER(coin_changed); TIMER_DEVICE_CALLBACK_MEMBER(clear_coin_status); DECLARE_MACHINE_START(samurai); DECLARE_MACHINE_START(frogs_audio); virtual void machine_start() override; uint32_t screen_update_bw(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); uint32_t screen_update_bw_or_color(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); uint32_t screen_update_color(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); int get_vcounter(); int is_cabinet_color(); virtual pen_t choose_pen(uint8_t x, uint8_t y, pen_t back_pen); void vicdual_root(machine_config &config); void vicdual_dualgame_root(machine_config &config); void heiankyo(machine_config &config); void headon(machine_config &config); void headon_audio(machine_config &config); void sspacaho(machine_config &config); void headonn(machine_config &config); void invho2(machine_config &config); void frogs(machine_config &config); void frogs_audio(machine_config &config); void headons(machine_config &config); void invinco(machine_config &config); void invinco_audio(machine_config &config); void invds(machine_config &config); void headon2(machine_config &config); void carnival(machine_config &config); void carnival_audio(machine_config &config); void pulsar(machine_config &config); void pulsar_audio(machine_config &config); void spacetrk(machine_config &config); void headon2bw(machine_config &config); void safari(machine_config &config); void brdrline(machine_config &config); void brdrline_audio(machine_config &config); void carnivalh(machine_config &config); void samurai(machine_config &config); void sspaceat(machine_config &config); void digger(machine_config &config); void depthch(machine_config &config); void depthch_audio(machine_config &config); void carhntds(machine_config &config); void alphaho(machine_config &config); void tranqgun(machine_config &config); void tranqgun_audio(machine_config &config); void alphaho_io_map(address_map &map); void brdrline_io_map(address_map &map); void carhntds_dualgame_map(address_map &map); void carhntds_io_map(address_map &map); void carnival_io_map(address_map &map); void depthch_io_map(address_map &map); void depthch_map(address_map &map); void digger_io_map(address_map &map); void frogs_io_map(address_map &map); void frogs_map(address_map &map); void headon2_io_map(address_map &map); void headon2_map(address_map &map); void headon_io_map(address_map &map); void headon_map(address_map &map); void headonn_io_map(address_map &map); void heiankyo_io_map(address_map &map); void invds_io_map(address_map &map); void invho2_io_map(address_map &map); void invinco_io_map(address_map &map); void invinco_map(address_map &map); void mboard_map(address_map &map); void pulsar_io_map(address_map &map); void safari_io_map(address_map &map); void safari_map(address_map &map); void samurai_io_map(address_map &map); void samurai_map(address_map &map); void spacetrk_io_map(address_map &map); void sspacaho_io_map(address_map &map); void sspaceat_io_map(address_map &map); void tranqgun_io_map(address_map &map); void vicdual_dualgame_map(address_map &map); }; class nsub_state : public vicdual_state { public: nsub_state(const machine_config &mconfig, device_type type, const char *tag) : vicdual_state(mconfig, type, tag), m_s97269pb(*this,"s97269pb"), m_s97271p(*this,"s97271p") { } required_device m_s97269pb; required_device m_s97271p; int m_nsub_coin_counter; int m_nsub_play_counter; DECLARE_READ8_MEMBER(nsub_io_r); DECLARE_WRITE8_MEMBER(nsub_io_w); DECLARE_INPUT_CHANGED_MEMBER(nsub_coin_in); TIMER_DEVICE_CALLBACK_MEMBER(nsub_coin_pulse); DECLARE_MACHINE_START(nsub); DECLARE_MACHINE_RESET(nsub); virtual pen_t choose_pen(uint8_t x, uint8_t y, pen_t back_pen) override; void nsub(machine_config &config); void nsub_io_map(address_map &map); void nsub_map(address_map &map); };