1 // license:BSD-3-Clause
2 // copyright-holders:David Haywood,AJR
3 
4 #ifndef MAME_AUDIO_EFO_ZSU_H
5 #define MAME_AUDIO_EFO_ZSU_H
6 
7 #pragma once
8 
9 #include "cpu/z80/z80.h"
10 #include "machine/z80daisy.h"
11 #include "machine/z80ctc.h"
12 #include "machine/gen_latch.h"
13 #include "machine/40105.h"
14 #include "sound/ay8910.h"
15 #include "sound/msm5205.h"
16 #include "machine/cedar_magnet_board.h"
17 
DECLARE_DEVICE_TYPE(EFO_ZSU,efo_zsu_device)18 DECLARE_DEVICE_TYPE(EFO_ZSU,            efo_zsu_device)
19 DECLARE_DEVICE_TYPE(EFO_ZSU1,           efo_zsu1_device)
20 DECLARE_DEVICE_TYPE(CEDAR_MAGNET_SOUND, cedar_magnet_sound_device)
21 
22 
23 class efo_zsu_device : public device_t
24 {
25 public:
26 	// construction/destruction
27 	efo_zsu_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
28 
29 	required_device<z80ctc_device> m_ctc0;
30 	required_device<z80ctc_device> m_ctc1;
31 	required_device<generic_latch_8_device> m_soundlatch;
32 	required_device<cmos_40105_device> m_fifo;
33 	required_device<msm5205_device> m_adpcm;
34 
35 	void sound_command_w(u8 data);
36 	void adpcm_fifo_w(u8 data);
37 
38 	void zsu_io(address_map &map);
39 	void zsu_map(address_map &map);
40 protected:
41 	efo_zsu_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
42 
43 	virtual void device_add_mconfig(machine_config &config) override;
44 	virtual void device_start() override;
45 
46 private:
47 	void ay1_porta_w(u8 data);
48 
49 	DECLARE_WRITE_LINE_MEMBER(ctc1_z0_w);
50 	DECLARE_WRITE_LINE_MEMBER(ctc1_z1_w);
51 	DECLARE_WRITE_LINE_MEMBER(ctc1_z2_w);
52 	DECLARE_WRITE_LINE_MEMBER(ctc0_z0_w);
53 	DECLARE_WRITE_LINE_MEMBER(ctc0_z1_w);
54 	DECLARE_WRITE_LINE_MEMBER(ctc0_z2_w);
55 	DECLARE_WRITE_LINE_MEMBER(fifo_dor_w);
56 };
57 
58 
59 class efo_zsu1_device : public efo_zsu_device
60 {
61 public:
62 	// construction/destruction
63 	efo_zsu1_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
64 
65 protected:
66 	virtual void device_start() override;
67 };
68 
69 
70 class cedar_magnet_sound_device : public efo_zsu_device, public cedar_magnet_board_interface
71 {
72 public:
73 	// construction/destruction
74 	cedar_magnet_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
75 
76 	TIMER_CALLBACK_MEMBER(reset_assert_callback) override;
77 
78 	void cedar_magnet_sound_map(address_map &map);
79 protected:
80 	virtual void device_add_mconfig(machine_config &config) override;
81 	virtual void device_start() override;
82 
83 private:
84 	void ay0_porta_w(u8 data);
85 };
86 
87 #endif // MAME_AUDIO_EFO_ZSU_H
88