1 // license:BSD-3-Clause
2 // copyright-holders:Vas Crabb
3 #ifndef MAME_AUDIO_ZACCARIA_H
4 #define MAME_AUDIO_ZACCARIA_H
5 
6 #pragma once
7 
8 #include "machine/6821pia.h"
9 #include "machine/netlist.h"
10 #include "sound/ay8910.h"
11 #include "sound/tms5220.h"
12 
13 
14 //**************************************************************************
15 //  GLOBAL VARIABLES
16 //**************************************************************************
17 
DECLARE_DEVICE_TYPE(ZACCARIA_1B11107,zac1b11107_audio_device)18 DECLARE_DEVICE_TYPE(ZACCARIA_1B11107, zac1b11107_audio_device)
19 DECLARE_DEVICE_TYPE(ZACCARIA_1B11142, zac1b11142_audio_device)
20 
21 
22 //**************************************************************************
23 //  TYPE DEFINITIONS
24 //**************************************************************************
25 
26 class zac1b111xx_melody_base : public device_t, public device_mixer_interface
27 {
28 protected:
29 	zac1b111xx_melody_base(
30 			machine_config const &mconfig,
31 			device_type devtype,
32 			char const *tag,
33 			device_t *owner,
34 			u32 clock);
35 
36 	u8 melodypia_porta_r();
37 	void melodypia_porta_w(u8 data);
38 	void melodypia_portb_w(u8 data);
39 	u8 melodypsg1_portb_r();
40 
41 	virtual void device_add_mconfig(machine_config &config) override;
42 	virtual void device_start() override;
43 	virtual void device_reset() override;
44 
45 	required_device<cpu_device>     m_melodycpu;
46 	required_device<pia6821_device> m_melodypia;
47 	required_device<ay8910_device>  m_melodypsg1;
48 	required_device<ay8910_device>  m_melodypsg2;
49 
50 	u8  m_melody_command;
51 	void zac1b111xx_melody_base_map(address_map &map);
52 };
53 
54 
55 class zac1b11107_audio_device : public zac1b111xx_melody_base
56 {
57 public:
58 	zac1b11107_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0);
59 
60 	// host interface
61 	void sound_w(u8 data);
62 	DECLARE_WRITE_LINE_MEMBER(reset_w);
63 
64 	void zac1b11107_melody_map(address_map &map);
65 protected:
66 	// PSG output handlers
67 	void melodypsg1_porta_w(u8 data);
68 	void melodypsg2_porta_w(u8 data);
69 
70 	virtual void device_add_mconfig(machine_config &config) override;
71 };
72 
73 
74 class zac1b11142_audio_device : public zac1b111xx_melody_base
75 {
76 public:
acs_cb()77 	auto acs_cb() { return m_acs_cb.bind(); }
78 
79 	zac1b11142_audio_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 0);
80 
81 	// host interface
82 	void hs_w(u8 data);
83 	DECLARE_READ_LINE_MEMBER(acs_r);
84 	DECLARE_WRITE_LINE_MEMBER(ressound_w);
85 
86 	// master audio section handlers
87 	u8 host_command_r();
88 	void melody_command_w(u8 data);
89 	DECLARE_INPUT_CHANGED_MEMBER(p1_changed);
90 
91 	void zac1b11142_audio_map(address_map &map);
92 	void zac1b11142_melody_map(address_map &map);
93 protected:
94 	// melody section handlers
95 	void ay_4g_porta_w(u8 data);
96 	void ay_4h_porta_w(u8 data);
97 	void ay_4h_portb_w(u8 data);
98 
99 	// master audio section handlers
100 	void pia_1i_portb_w(u8 data);
101 
102 	// input ports don't push
103 	INTERRUPT_GEN_MEMBER(input_poll);
104 
105 	virtual void device_add_mconfig(machine_config &config) override;
106 	virtual ioport_constructor device_input_ports() const override;
107 	virtual void device_start() override;
108 	virtual void device_reset() override;
109 
110 	devcb_write_line                m_acs_cb;
111 
112 	required_device<cpu_device>     m_audiocpu;
113 	required_device<pia6821_device> m_pia_1i;
114 	required_device<tms5220_device> m_speech;
115 
116 	required_device_array<netlist_mame_logic_input_device, 5>   m_ioa;
117 	required_device<netlist_mame_logic_input_device>            m_level;
118 	required_device<netlist_mame_logic_input_device>            m_levelt;
119 	required_device<netlist_mame_logic_input_device>            m_sw1;
120 
121 	required_ioport                 m_inputs;
122 
123 	u8  m_host_command;
124 };
125 
126 #endif // MAME_AUDIO_ZACCARIA_H
127