1 // license:BSD-3-Clause
2 // copyright-holders:Couriersud
3 #ifndef MAME_AUDIO_IREM_H
4 #define MAME_AUDIO_IREM_H
5 
6 #pragma once
7 
8 #include "sound/ay8910.h"
9 #include "sound/msm5205.h"
10 #include "machine/netlist.h"
11 #include "audio/nl_kidniki.h"
12 
13 class irem_audio_device : public device_t
14 {
15 public:
16 	void cmd_w(uint8_t data);
17 	uint8_t soundlatch_r();
18 	void ay8910_45M_portb_w(uint8_t data);
19 	void ay8910_45L_porta_w(uint8_t data);
20 
21 	void irem_sound_portmap(address_map &map);
22 	void m52_large_sound_map(address_map &map);
23 	void m52_small_sound_map(address_map &map);
24 	void m62_sound_map(address_map &map);
25 
26 	optional_device<netlist_mame_logic_input_device> m_audio_SINH;
27 
28 protected:
29 	irem_audio_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
30 
31 	// device-level overrides
32 	virtual void device_start() override;
33 	virtual void device_reset() override;
34 
35 	required_device<cpu_device> m_cpu;
36 	required_device<msm5205_device> m_adpcm1;
37 	optional_device<msm5205_device> m_adpcm2;
38 	required_device<ay8910_device> m_ay_45L;
39 	required_device<ay8910_device> m_ay_45M;
40 
41 	void m6803_port1_w(uint8_t data);
42 	void m6803_port2_w(uint8_t data);
43 	uint8_t m6803_port1_r();
44 	uint8_t m6803_port2_r();
45 	void sound_irq_ack_w(uint8_t data);
46 	void m52_adpcm_w(offs_t offset, uint8_t data);
47 	void m62_adpcm_w(offs_t offset, uint8_t data);
48 
49 private:
50 	// internal state
51 	uint8_t           m_port1;
52 	uint8_t           m_port2;
53 
54 	uint8_t           m_soundlatch;
55 
56 	optional_device<netlist_mame_logic_input_device> m_audio_BD;
57 	optional_device<netlist_mame_logic_input_device> m_audio_SD;
58 	optional_device<netlist_mame_logic_input_device> m_audio_OH;
59 	optional_device<netlist_mame_logic_input_device> m_audio_CH;
60 };
61 
62 class m62_audio_device : public irem_audio_device
63 {
64 public:
65 	m62_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
66 
67 protected:
68 	virtual void device_add_mconfig(machine_config &config) override;
69 };
70 
71 class m52_soundc_audio_device : public irem_audio_device
72 {
73 public:
74 	m52_soundc_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
75 
76 protected:
77 	virtual void device_add_mconfig(machine_config &config) override;
78 };
79 
80 class m52_large_audio_device : public irem_audio_device
81 {
82 public:
83 	m52_large_audio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
84 
85 protected:
86 	virtual void device_add_mconfig(machine_config &config) override;
87 };
88 
89 
90 DECLARE_DEVICE_TYPE(IREM_M62_AUDIO,        m62_audio_device)
91 DECLARE_DEVICE_TYPE(IREM_M52_SOUNDC_AUDIO, m52_soundc_audio_device)
92 DECLARE_DEVICE_TYPE(IREM_M52_LARGE_AUDIO,  m52_large_audio_device)
93 
94 #endif // MAME_AUDIO_IREM_H
95