1 // license:BSD-3-Clause 2 // copyright-holders:Bryan McPhail, Aaron Giles, R. Belmont, Philip Bennett 3 /*************************************************************************** 4 5 Taito Ensoniq ES5505-based sound hardware 6 7 ****************************************************************************/ 8 #ifndef MAME_AUDIO_TAITO_EN_H 9 #define MAME_AUDIO_TAITO_EN_H 10 11 #pragma once 12 13 #include "cpu/es5510/es5510.h" 14 #include "cpu/m68000/m68000.h" 15 #include "sound/es5506.h" 16 #include "sound/esqpump.h" 17 #include "machine/mc68681.h" 18 #include "machine/mb87078.h" 19 #include "machine/mb8421.h" 20 21 class taito_en_device : public device_t, public device_mixer_interface 22 23 { 24 public: imperfect_features()25 static constexpr feature_type imperfect_features() { return feature::SOUND; } 26 27 taito_en_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 28 audiocpu()29 m68000_device &audiocpu() { return *m_audiocpu; } 30 set_bank(int bank,int entry)31 void set_bank(int bank, int entry) { m_cpubank[bank]->set_entry(entry); } 32 33 protected: 34 // device-level overrides 35 virtual void device_start() override; 36 virtual void device_reset() override; 37 virtual void device_add_mconfig(machine_config &config) override; 38 39 private: 40 void en_sound_map(address_map &map); 41 void en_otis_map(address_map &map); 42 void fc7_map(address_map &map); 43 44 // inherited devices/pointers 45 required_device<m68000_device> m_audiocpu; 46 required_device<es5505_device> m_ensoniq; 47 required_device<es5510_device> m_esp; 48 required_device<esq_5505_5510_pump_device> m_pump; 49 required_device<mc68681_device> m_duart68681; 50 required_device<mb87078_device> m_mb87078; 51 52 required_shared_ptr<uint16_t> m_osram; 53 required_shared_ptr<uint16_t> m_otisbank; 54 required_region_ptr<uint16_t> m_otisrom; 55 56 required_memory_region m_osrom; 57 required_memory_bank_array<3> m_cpubank; 58 59 uint32_t m_bankmask = 0; 60 uint32_t m_old_clock = ~0; 61 62 std::unique_ptr<offs_t[]> m_calculated_otisbank; 63 64 IRQ_CALLBACK_MEMBER(duart_iack); 65 void duart_output(uint8_t data); 66 67 void mb87078_gain_changed(offs_t offset, uint8_t data); 68 void es5505_clock_changed(u32 data); 69 70 void en_es5505_bank_w(offs_t offset, uint16_t data); 71 void en_volume_w(offs_t offset, uint8_t data); 72 }; 73 74 DECLARE_DEVICE_TYPE(TAITO_EN, taito_en_device) 75 76 #endif // MAME_AUDIO_TAITO_EN_H 77