1 // license:BSD-3-Clause
2 // copyright-holders:Aaron Giles
3 /***************************************************************************
4 
5     cclimber.h
6 
7     Functions to emulate the cclimber audio boards
8 
9 ***************************************************************************/
10 #ifndef MAME_AUDIO_CCLIMBER_H
11 #define MAME_AUDIO_CCLIMBER_H
12 
13 #pragma once
14 
15 #include "sound/samples.h"
16 
DECLARE_DEVICE_TYPE(CCLIMBER_AUDIO,cclimber_audio_device)17 DECLARE_DEVICE_TYPE(CCLIMBER_AUDIO, cclimber_audio_device)
18 
19 // ======================> cclimber_audio_device
20 
21 class cclimber_audio_device : public device_t
22 {
23 public:
24 	// construction/destruction
25 	cclimber_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
26 
27 	void sample_trigger(int state);
28 	void sample_trigger_w(uint8_t data);
29 	void sample_rate_w(uint8_t data);
30 	void sample_volume_w(uint8_t data);
31 
32 protected:
33 	// device level overrides
34 	virtual void device_start() override;
35 	virtual void device_add_mconfig(machine_config &config) override;
36 
37 	void play_sample(int start, int freq, int volume);
38 
39 private:
40 	std::unique_ptr<int16_t[]> m_sample_buf;    // buffer to decode samples at run time
41 	uint8_t m_sample_num;
42 	uint32_t m_sample_freq;
43 	uint8_t m_sample_volume;
44 	required_device<samples_device> m_samples;
45 	required_region_ptr<uint8_t> m_samples_region;
46 
47 	void sample_select_w(uint8_t data);
48 
49 	SAMPLES_START_CB_MEMBER( sh_start );
50 };
51 
52 
53 #endif // MAME_AUDIO_CCLIMBER_H
54