1 // license:BSD-3-Clause
2 // copyright-holders:Nicola Salmoria
3 /***************************************************************************
4 
5     M72 audio interface
6 
7 ****************************************************************************/
8 #ifndef MAME_AUDIO_M72_H
9 #define MAME_AUDIO_M72_H
10 
11 #pragma once
12 
13 #include "dirom.h"
14 #include "sound/dac.h"
15 
16 class m72_audio_device : public device_t, public device_rom_interface<32> // unknown address bits
17 {
18 public:
19 	m72_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
~m72_audio_device()20 	~m72_audio_device() {}
21 
set_dac_tag(T && tag)22 	template <typename T> void set_dac_tag(T &&tag) { m_dac.set_tag(std::forward<T>(tag)); }
23 	u8 sample_r();
24 	void sample_w(u8 data);
25 
26 	/* the port goes to different address bits depending on the game */
27 	void set_sample_start(int start);
28 	void vigilant_sample_addr_w(offs_t offset, u8 data);
29 	void shisen_sample_addr_w(offs_t offset, u8 data);
30 	void rtype2_sample_addr_w(offs_t offset, u8 data);
31 	void poundfor_sample_addr_w(offs_t offset, u8 data);
32 
33 protected:
34 	// device-level overrides
35 	virtual void device_start() override;
36 
37 	// device_rom_interface overrides
38 	virtual void rom_bank_updated() override;
39 
40 private:
41 	// internal state
42 	uint32_t m_sample_addr;
43 	optional_device<dac_byte_interface> m_dac;
44 };
45 
46 DECLARE_DEVICE_TYPE(IREM_M72_AUDIO, m72_audio_device)
47 
48 #endif // MAME_AUDIO_M72_H
49