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