1 // license:BSD-3-Clause
2 // copyright-holders:Aaron Giles
3 #ifndef MAME_AUDIO_SEGAG80V_H
4 #define MAME_AUDIO_SEGAG80V_H
5 
6 #pragma once
7 
8 #include "machine/netlist.h"
9 #include "netlist/nl_setup.h"
10 #include "sound/ay8910.h"
11 
12 
13 class segag80_audio_device_base : public device_t, public device_mixer_interface
14 {
15 	using netlist_ptr = void (*)(netlist::nlparse_t &);
16 
17 public:
18 	void write(offs_t addr, uint8_t data);
19 	void write_ay(offs_t addr, uint8_t data);
20 
21 protected:
22 	segag80_audio_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 lomask, u8 himask, bool haspsg, netlist_ptr netlist, double output_scale);
23 
24 	virtual void device_add_mconfig(machine_config &config) override;
25 	virtual void device_start() override;
26 
27 	optional_device_array<netlist_mame_logic_input_device, 8> m_lo_input;
28 	optional_device_array<netlist_mame_logic_input_device, 8> m_hi_input;
29 	optional_device<ay8912_device> m_psg;
30 
31 private:
32 	u8 const m_lo_mask;
33 	u8 const m_hi_mask;
34 	bool const m_has_psg;
35 	netlist_ptr const m_netlist;
36 	double const m_output_scale;
37 };
38 
39 
40 class elim_audio_device : public segag80_audio_device_base
41 {
42 public:
43 	elim_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
44 };
45 
46 
47 class zektor_audio_device : public segag80_audio_device_base
48 {
49 public:
50 	zektor_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
51 };
52 
53 
54 class spacfury_audio_device : public segag80_audio_device_base
55 {
56 public:
57 	spacfury_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
58 };
59 
60 
61 class astrob_audio_device : public segag80_audio_device_base
62 {
63 public:
64 	astrob_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
65 };
66 
67 
68 DECLARE_DEVICE_TYPE(ELIMINATOR_AUDIO, elim_audio_device)
69 DECLARE_DEVICE_TYPE(ZEKTOR_AUDIO, zektor_audio_device)
70 DECLARE_DEVICE_TYPE(SPACE_FURY_AUDIO, spacfury_audio_device)
71 DECLARE_DEVICE_TYPE(ASTRO_BLASTER_AUDIO, astrob_audio_device)
72 
73 #endif // MAME_AUDIO_SEGAG80V_H
74