1 // license:BSD-3-Clause 2 // copyright-holders:Wilbert Pol 3 /***************************************************************************** 4 * 5 * includes/wswan.h 6 * 7 ****************************************************************************/ 8 9 #ifndef MAME_AUDIO_WSWAN_H 10 #define MAME_AUDIO_WSWAN_H 11 12 #pragma once 13 14 #include "dirom.h" 15 16 //************************************************************************** 17 // TYPE DEFINITIONS 18 //************************************************************************** 19 20 // ======================> wswan_sound_device 21 22 class wswan_sound_device : public device_t, 23 public device_sound_interface, 24 public device_rom_interface<14> 25 { 26 public: 27 wswan_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); 28 29 void port_w(offs_t offset, uint8_t data); 30 31 protected: 32 struct CHAN 33 { CHANCHAN34 CHAN() : 35 freq(0), 36 period(0), 37 pos(0), 38 vol_left(0), 39 vol_right(0), 40 on(0), 41 offset(0), 42 signal(0) { } 43 44 uint16_t freq; /* frequency */ 45 uint16_t period; /* period */ 46 uint32_t pos; /* position */ 47 uint8_t vol_left; /* volume left */ 48 uint8_t vol_right; /* volume right */ 49 uint8_t on; /* on/off */ 50 uint8_t offset; /* sample offset */ 51 uint8_t signal; /* signal */ 52 }; 53 54 // device-level overrides 55 virtual void device_start() override; 56 virtual void device_clock_changed() override; 57 virtual void device_reset() override; 58 59 virtual void rom_bank_updated() override; 60 61 // sound stream update overrides 62 virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override; 63 64 private: 65 void wswan_ch_set_freq( CHAN *ch, uint16_t freq ); 66 int fetch_sample(int channel, int offset); 67 68 sound_stream *m_channel; 69 CHAN m_audio1; /* Audio channel 1 */ 70 CHAN m_audio2; /* Audio channel 2 */ 71 CHAN m_audio3; /* Audio channel 3 */ 72 CHAN m_audio4; /* Audio channel 4 */ 73 int8_t m_sweep_step; /* Sweep step */ 74 uint32_t m_sweep_time; /* Sweep time */ 75 uint32_t m_sweep_count; /* Sweep counter */ 76 uint8_t m_noise_type; /* Noise generator type */ 77 uint8_t m_noise_reset; /* Noise reset */ 78 uint8_t m_noise_enable; /* Noise enable */ 79 uint8_t m_noise_output; /* Noise output */ 80 uint16_t m_sample_address; /* Sample address */ 81 uint8_t m_audio2_voice; /* Audio 2 voice */ 82 uint8_t m_audio3_sweep; /* Audio 3 sweep */ 83 uint8_t m_audio4_noise; /* Audio 4 noise */ 84 uint8_t m_mono; /* mono */ 85 uint8_t m_output_volume; /* output volume */ 86 uint8_t m_external_stereo; /* external stereo */ 87 uint8_t m_external_speaker; /* external speaker */ 88 uint16_t m_noise_shift; /* Noise counter shift register */ 89 uint8_t m_master_volume; /* Master volume */ 90 }; 91 92 DECLARE_DEVICE_TYPE(WSWAN_SND, wswan_sound_device) 93 94 #endif // MAME_AUDIO_WSWAN_H 95