// license:BSD-3-Clause // copyright-holders:Aaron Giles /************************************************************************* Cinemat/Leland driver *************************************************************************/ #ifndef MAME_AUDIO_LELAND_H #define MAME_AUDIO_LELAND_H #pragma once #include "cpu/i86/i186.h" #include "machine/gen_latch.h" #include "machine/pit8253.h" #include "sound/dac.h" #include "sound/ym2151.h" class leland_80186_sound_device : public device_t { public: leland_80186_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); template void set_master_cpu_tag(T &&tag) { m_master.set_tag(std::forward(tag)); } void peripheral_ctrl(offs_t offset, u16 data); void leland_80186_control_w(u8 data); void ataxx_80186_control_w(u8 data); u16 peripheral_r(offs_t offset, u16 mem_mask = ~0); void peripheral_w(offs_t offset, u16 data, u16 mem_mask = ~0); void command_lo_w(u8 data); void command_hi_w(u8 data); u8 response_r(); void dac_w(offs_t offset, u16 data, u16 mem_mask = ~0); void ataxx_dac_control(offs_t offset, u16 data, u16 mem_mask = ~0); DECLARE_WRITE_LINE_MEMBER(i80186_tmr0_w); DECLARE_WRITE_LINE_MEMBER(i80186_tmr1_w); DECLARE_WRITE_LINE_MEMBER(pit0_2_w); DECLARE_WRITE_LINE_MEMBER(pit1_0_w); DECLARE_WRITE_LINE_MEMBER(pit1_1_w); DECLARE_WRITE_LINE_MEMBER(pit1_2_w); protected: leland_80186_sound_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); // device-level overrides virtual void device_start() override; virtual void device_reset() override; virtual void device_add_mconfig(machine_config &config) override; int m_type; enum { TYPE_LELAND, TYPE_REDLINE, TYPE_ATAXX, TYPE_WSF }; required_device m_soundlatch; optional_device_array m_dac; optional_device m_dac9; optional_device_array m_dacvol; optional_device_array m_pit; optional_device m_audiocpu; optional_device m_ymsnd; void ataxx_80186_map_io(address_map &map); void leland_80186_map_io(address_map &map); void leland_80186_map_program(address_map &map); private: void delayed_response_r(void *ptr, int param); void set_clock_line(int which, int state) { m_clock_active = state ? (m_clock_active | (1< m_master; optional_region_ptr m_ext_base; }; class redline_80186_sound_device : public leland_80186_sound_device { public: redline_80186_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); void redline_dac_w(offs_t offset, u16 data); protected: virtual void device_add_mconfig(machine_config &config) override; private: void redline_80186_map_io(address_map &map); }; class ataxx_80186_sound_device : public leland_80186_sound_device { public: ataxx_80186_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: virtual void device_add_mconfig(machine_config &config) override; }; class wsf_80186_sound_device : public leland_80186_sound_device { public: wsf_80186_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: virtual void device_add_mconfig(machine_config &config) override; }; DECLARE_DEVICE_TYPE(LELAND_80186, leland_80186_sound_device) DECLARE_DEVICE_TYPE(REDLINE_80186, redline_80186_sound_device) DECLARE_DEVICE_TYPE(ATAXX_80186, ataxx_80186_sound_device) DECLARE_DEVICE_TYPE(WSF_80186, wsf_80186_sound_device) #endif // MAME_AUDIO_LELAND_H