// license:BSD-3-Clause // copyright-holders:Nicola Salmoria, Tormod Tjaberg, Mirko Buffoni,Lee Taylor, Valerio Verrando, Zsolt Vasvari,Derrick Renaud // thanks-to:Michael Strutts, Marco Cassili /*************************************************************************** Midway 8080-based black and white hardware ****************************************************************************/ #ifndef MAME_AUDIO_MW8080BW_H #define MAME_AUDIO_MW8080BW_H #pragma once #include "sound/discrete.h" #include "sound/samples.h" #include "sound/sn76477.h" #include "machine/netlist.h" class midway_tone_generator_device_base : public device_t { public: void tone_generator_lo_w(u8 data); void tone_generator_hi_w(u8 data); protected: midway_tone_generator_device_base(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, u32 clock); required_device m_discrete; }; class seawolf_audio_device : public device_t { public: seawolf_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0); void write(u8 data); protected: virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; private: required_device m_samples; u8 m_prev; }; class gunfight_audio_device : public device_t { public: gunfight_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0); void write(u8 data); protected: virtual void device_add_mconfig(machine_config &config) override; virtual ioport_constructor device_input_ports() const override; virtual void device_start() override; private: required_device m_left_shot; required_device m_right_shot; required_device m_left_hit; required_device m_right_hit; }; class boothill_audio_device : public midway_tone_generator_device_base { public: boothill_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0); void write(u8 data); protected: virtual void device_add_mconfig(machine_config &config) override; virtual ioport_constructor device_input_ports() const override; virtual void device_start() override; }; class desertgu_audio_device : public midway_tone_generator_device_base { public: auto ctrl_sel_out() { return m_ctrl_sel_out.bind(); } desertgu_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0); void p1_w(u8 data); void p2_w(u8 data); protected: virtual void device_add_mconfig(machine_config &config) override; virtual ioport_constructor device_input_ports() const override; virtual void device_start() override; private: devcb_write_line m_ctrl_sel_out; output_finder<> m_recoil; u8 m_p2; }; class dplay_audio_device : public midway_tone_generator_device_base { public: dplay_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0); void write(u8 data); protected: virtual void device_add_mconfig(machine_config &config) override; virtual ioport_constructor device_input_ports() const override; virtual void device_start() override; }; class gmissile_audio_device : public device_t { public: gmissile_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0); void p1_w(u8 data); void p2_w(u8 data); void p3_w(u8 data); protected: virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; private: required_device_array m_samples; output_finder<> m_l_exp; output_finder<> m_r_exp; u8 m_p1; }; class m4_audio_device : public device_t { public: m4_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0); void p1_w(u8 data); void p2_w(u8 data); protected: virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; private: required_device_array m_samples; u8 m_p1; u8 m_p2; }; class clowns_audio_device : public midway_tone_generator_device_base { public: auto ctrl_sel_out() { return m_ctrl_sel_out.bind(); } clowns_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0); void p1_w(u8 data); void p2_w(u8 data); protected: virtual void device_add_mconfig(machine_config &config) override; virtual ioport_constructor device_input_ports() const override; virtual void device_start() override; private: required_device m_samples; devcb_write_line m_ctrl_sel_out; u8 m_p1; u8 m_p2; }; class spacwalk_audio_device : public midway_tone_generator_device_base { public: auto ctrl_sel_out() { return m_ctrl_sel_out.bind(); } spacwalk_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0); void p1_w(u8 data); void p2_w(u8 data); protected: virtual void device_add_mconfig(machine_config &config) override; virtual ioport_constructor device_input_ports() const override; virtual void device_start() override; private: devcb_write_line m_ctrl_sel_out; u8 m_p1; }; class dogpatch_audio_device : public midway_tone_generator_device_base { public: dogpatch_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0); void write(u8 data); protected: virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; }; class spcenctr_audio_device : public device_t { public: spcenctr_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0); void p1_w(u8 data); void p2_w(u8 data); void p3_w(u8 data); protected: virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; private: TIMER_CALLBACK_MEMBER(strobe_callback); required_device m_sn; required_device m_discrete; output_finder<> m_lamp; output_finder<> m_strobe; emu_timer *m_strobe_timer; u8 m_strobe_enable; }; class phantom2_audio_device : public device_t { public: phantom2_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0); void p1_w(u8 data); void p2_w(u8 data); protected: virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; private: required_device m_samples; output_finder<> m_exp; u8 m_p1; u8 m_p2; }; class invaders_audio_device : public device_t { public: auto flip_screen_out() { return m_flip_screen_out.bind(); } invaders_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0); void p1_w(u8 data); void p2_w(u8 data); protected: virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; private: required_device m_sn; required_device m_discrete; devcb_write_line m_flip_screen_out; u8 m_p2; }; class invad2ct_audio_device : public device_t { public: invad2ct_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0); void p1_w(u8 data); void p2_w(u8 data); void p3_w(u8 data); void p4_w(u8 data); protected: virtual void device_add_mconfig(machine_config &config) override; virtual void device_start() override; private: required_device m_discrete; required_device_array m_sn; }; class zzzap_common_audio_device : public device_t { public: void p1_w(u8 data); void p2_w(u8 data); protected: zzzap_common_audio_device(machine_config const &mconfig, device_type type, char const *tag, device_t *owner, u32 clock, void (*netlist)(netlist::nlparse_t &)); virtual void device_add_mconfig(machine_config &config) override; virtual ioport_constructor device_input_ports() const override; virtual void device_start() override; private: void (*m_netlist)(netlist::nlparse_t &) = nullptr; required_device m_pedal_bit0; required_device m_pedal_bit1; required_device m_pedal_bit2; required_device m_pedal_bit3; required_device m_hi_shift; required_device m_lo_shift; required_device m_boom; required_device m_engine_sound_off; required_device m_noise_cr_1; required_device m_noise_cr_2; }; class zzzap_audio_device : public zzzap_common_audio_device { public: zzzap_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0); }; class lagunar_audio_device : public zzzap_common_audio_device { public: lagunar_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0); }; DECLARE_DEVICE_TYPE(SEAWOLF_AUDIO, seawolf_audio_device) DECLARE_DEVICE_TYPE(GUNFIGHT_AUDIO, gunfight_audio_device) DECLARE_DEVICE_TYPE(BOOTHILL_AUDIO, boothill_audio_device) DECLARE_DEVICE_TYPE(DESERTGU_AUDIO, desertgu_audio_device) DECLARE_DEVICE_TYPE(DPLAY_AUDIO, dplay_audio_device) DECLARE_DEVICE_TYPE(GMISSILE_AUDIO, gmissile_audio_device) DECLARE_DEVICE_TYPE(M4_AUDIO, m4_audio_device) DECLARE_DEVICE_TYPE(CLOWNS_AUDIO, clowns_audio_device) DECLARE_DEVICE_TYPE(SPACWALK_AUDIO, spacwalk_audio_device) DECLARE_DEVICE_TYPE(DOGPATCH_AUDIO, dogpatch_audio_device) DECLARE_DEVICE_TYPE(SPCENCTR_AUDIO, spcenctr_audio_device) DECLARE_DEVICE_TYPE(PHANTOM2_AUDIO, phantom2_audio_device) DECLARE_DEVICE_TYPE(INVADERS_AUDIO, invaders_audio_device) DECLARE_DEVICE_TYPE(INVAD2CT_AUDIO, invad2ct_audio_device) DECLARE_DEVICE_TYPE(ZZZAP_AUDIO, zzzap_audio_device) DECLARE_DEVICE_TYPE(LAGUNAR_AUDIO, lagunar_audio_device) #endif // MAME_AUDIO_MW8080BW_H