1 // license:BSD-3-Clause
2 // copyright-holders:Aaron Giles
3 #ifndef MAME_AUDIO_CINEMAT_H
4 #define MAME_AUDIO_CINEMAT_H
5 
6 #pragma once
7 
8 #include "machine/74259.h"
9 #include "machine/netlist.h"
10 #include "netlist/nl_setup.h"
11 
12 
13 class cinemat_audio_device_base : public device_t, public device_mixer_interface
14 {
15 public:
16 	cinemat_audio_device_base &configure_latch_inputs(ls259_device &latch, u8 mask = 0);
17 
18 protected:
19 	cinemat_audio_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 inputs_mask, void (*netlist)(netlist::nlparse_t &), double output_scale);
20 
21 	virtual void device_add_mconfig(machine_config &config) override;
22 	virtual void device_start() override;
23 
DECLARE_WRITE_LINE_MEMBER(sound_w)24 	template<int _Index> DECLARE_WRITE_LINE_MEMBER(sound_w) { input_set(_Index, state); }
25 	void input_set(int bit, int state);
26 
27 	optional_device_array<netlist_mame_logic_input_device, 8> m_out_input;
28 
29 private:
30 	u8 m_inputs = 0xff;
31 	u8 const m_inputs_mask;
32 	void (*const m_netlist)(netlist::nlparse_t &);
33 	double const m_output_scale;
34 };
35 
36 
37 class spacewar_audio_device : public cinemat_audio_device_base
38 {
39 public:
40 	spacewar_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
41 };
42 
43 
44 class barrier_audio_device : public cinemat_audio_device_base
45 {
46 public:
47 	barrier_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
48 };
49 
50 
51 class speedfrk_audio_device : public cinemat_audio_device_base
52 {
53 public:
54 	speedfrk_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
55 };
56 
57 
58 class starhawk_audio_device : public cinemat_audio_device_base
59 {
60 public:
61 	starhawk_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
62 };
63 
64 
65 class sundance_audio_device : public cinemat_audio_device_base
66 {
67 public:
68 	sundance_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
69 };
70 
71 
72 class tailg_audio_device : public cinemat_audio_device_base
73 {
74 public:
75 	tailg_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
76 };
77 
78 
79 class warrior_audio_device : public cinemat_audio_device_base
80 {
81 public:
82 	warrior_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
83 };
84 
85 
86 class armora_audio_device : public cinemat_audio_device_base
87 {
88 public:
89 	armora_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
90 };
91 
92 
93 class ripoff_audio_device : public cinemat_audio_device_base
94 {
95 public:
96 	ripoff_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
97 };
98 
99 
100 class starcas_audio_device : public cinemat_audio_device_base
101 {
102 public:
103 	starcas_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
104 };
105 
106 
107 class solarq_audio_device : public cinemat_audio_device_base
108 {
109 public:
110 	solarq_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
111 };
112 
113 
114 class boxingb_audio_device : public cinemat_audio_device_base
115 {
116 public:
117 	boxingb_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
118 };
119 
120 
121 class wotw_audio_device : public cinemat_audio_device_base
122 {
123 public:
124 	wotw_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
125 };
126 
127 
128 DECLARE_DEVICE_TYPE(SPACE_WARS_AUDIO, spacewar_audio_device)
129 DECLARE_DEVICE_TYPE(BARRIER_AUDIO, barrier_audio_device)
130 DECLARE_DEVICE_TYPE(STAR_HAWK_AUDIO, starhawk_audio_device)
131 DECLARE_DEVICE_TYPE(SUNDANCE_AUDIO, sundance_audio_device)
132 DECLARE_DEVICE_TYPE(SPEED_FREAK_AUDIO, speedfrk_audio_device)
133 DECLARE_DEVICE_TYPE(TAIL_GUNNER_AUDIO, tailg_audio_device)
134 DECLARE_DEVICE_TYPE(WARRIOR_AUDIO, warrior_audio_device)
135 DECLARE_DEVICE_TYPE(ARMOR_ATTACK_AUDIO, armora_audio_device)
136 DECLARE_DEVICE_TYPE(RIPOFF_AUDIO, ripoff_audio_device)
137 DECLARE_DEVICE_TYPE(SOLAR_QUEST_AUDIO, solarq_audio_device)
138 DECLARE_DEVICE_TYPE(BOXING_BUGS_AUDIO, boxingb_audio_device)
139 DECLARE_DEVICE_TYPE(STAR_CASTLE_AUDIO, starcas_audio_device)
140 DECLARE_DEVICE_TYPE(WAR_OF_THE_WORLDS_AUDIO, wotw_audio_device)
141 
142 #endif // MAME_AUDIO_CINEMAT_H
143