1 // license:BSD-3-Clause
2 // copyright-holders:Chris Hardy
3 #ifndef MAME_AUDIO_TRACKFLD_H
4 #define MAME_AUDIO_TRACKFLD_H
5 
6 #pragma once
7 
8 #include "sound/vlm5030.h"
9 #include "cpu/m6800/m6800.h"
10 
11 class trackfld_audio_device : public device_t
12 {
13 public:
14 	template <typename T, typename U>
trackfld_audio_device(const machine_config & mconfig,const char * tag,device_t * owner,uint32_t clock,T && cpu_tag,U && vlm_tag)15 	trackfld_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, T &&cpu_tag, U &&vlm_tag)
16 		: trackfld_audio_device(mconfig, tag, owner, clock)
17 	{
18 		m_audiocpu.set_tag(std::forward<T>(cpu_tag));
19 		m_vlm.set_tag(std::forward<U>(vlm_tag));
20 	}
21 
22 	trackfld_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
23 
24 	DECLARE_WRITE_LINE_MEMBER(sh_irqtrigger_w);
25 	uint8_t trackfld_sh_timer_r();
26 	uint8_t trackfld_speech_r();
27 	void trackfld_sound_w(offs_t offset, uint8_t data);
28 	uint8_t hyperspt_sh_timer_r();
29 	void hyperspt_sound_w(offs_t offset, uint8_t data);
30 
31 protected:
32 	// device-level overrides
33 	virtual void device_start() override;
34 	virtual void device_reset() override;
35 
36 private:
37 	optional_device<cpu_device> m_audiocpu;
38 	optional_device<vlm5030_device> m_vlm;
39 
40 	// internal state
41 	int      m_last_addr;
42 	int      m_last_irq;
43 };
44 
45 DECLARE_DEVICE_TYPE(TRACKFLD_AUDIO, trackfld_audio_device)
46 
47 #endif // MAME_AUDIO_TRACKFLD_H
48