1 // license:BSD-3-Clause
2 // copyright-holders:Acho A. Tang, Nicola Salmoria
3
4 //****************************************************************************
5 // Functions to emulate the Alpha Denshi "59MC07" audio board
6 //****************************************************************************
7
8 #ifndef MAME_AUDIO_AD_SOUND_H
9 #define MAME_AUDIO_AD_SOUND_H
10
11 #pragma once
12
13 #include "cpu/i8085/i8085.h"
14 #include "machine/gen_latch.h"
15 #include "machine/i8155.h"
16 #include "sound/dac.h"
17 #include "sound/msm5232.h"
18 #include "sound/samples.h"
19
20
21 //**************************************************************************
22 // GLOBAL VARIABLES
23 //**************************************************************************
24
DECLARE_DEVICE_TYPE(AD_59MC07,ad_59mc07_device)25 DECLARE_DEVICE_TYPE(AD_59MC07, ad_59mc07_device)
26
27
28 //**************************************************************************
29 // TYPE DEFINITIONS
30 //**************************************************************************
31
32 // ======================> ad_59mc07_device
33
34 class ad_59mc07_device : public device_t
35 {
36 public:
37 // construction/destruction
38 ad_59mc07_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
39
40 void sound_command_w(uint8_t data) { m_soundlatch->write(data); }
41
42 protected:
43 // device level overrides
44 virtual void device_add_mconfig(machine_config &config) override;
45 virtual void device_start() override;
46 virtual void device_reset() override;
47
48 private:
49 required_device<i8085a_cpu_device> m_audiocpu;
50 required_device<i8155_device> m_audio8155;
51 required_device<samples_device> m_samples;
52 required_device<msm5232_device> m_msm;
53 required_device<dac_byte_interface> m_dac_1;
54 required_device<dac_byte_interface> m_dac_2;
55 required_device<generic_latch_8_device> m_soundlatch;
56 required_ioport m_frq_adjuster;
57
58 int m_sound_prom_address;
59 uint8_t m_dac_latch;
60 uint8_t m_8155_port_b;
61 uint8_t m_8155_port_a;
62 uint8_t m_8155_port_c;
63 uint8_t m_ay_port_a;
64 uint8_t m_ay_port_b;
65 uint8_t m_cymbal_ctrl;
66 float m_cymvol;
67 float m_hihatvol;
68 emu_timer *m_adjuster_timer;
69
70 void sound_map(address_map &map);
71 void sound_portmap(address_map &map);
72
73 void c0f8_w(offs_t offset, uint8_t data);
74 void cymbal_ctrl_w(uint8_t data);
75 void dac_latch_w(uint8_t data);
76 void i8155_porta_w(uint8_t data);
77 void i8155_portb_w(uint8_t data);
78 void i8155_portc_w(uint8_t data);
79 void ay8910_porta_w(uint8_t data);
80 void ay8910_portb_w(uint8_t data);
81 DECLARE_WRITE_LINE_MEMBER(i8155_timer_pulse);
82 TIMER_CALLBACK_MEMBER(frq_adjuster_callback);
83 void update_dac();
84 DECLARE_WRITE_LINE_MEMBER(msm5232_gate);
85 };
86
87
88 //****************************************************************************
89 // Functions to emulate the Alpha Denshi "60MC01" audio board
90 //****************************************************************************
91
92 //**************************************************************************
93 // GLOBAL VARIABLES
94 //**************************************************************************
95
DECLARE_DEVICE_TYPE(AD_60MC01,ad_60mc01_device)96 DECLARE_DEVICE_TYPE(AD_60MC01, ad_60mc01_device)
97
98
99 //**************************************************************************
100 // TYPE DEFINITIONS
101 //**************************************************************************
102
103 // ======================> ad_60mc01_device
104
105 class ad_60mc01_device : public device_t
106 {
107 public:
108 // construction/destruction
109 ad_60mc01_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
110
111 static constexpr feature_type imperfect_features() { return feature::SOUND; } // TODO: fix interrupts, missing music?
112
113 void sound_command_w(uint8_t data) { m_soundlatch->write(data); }
114
115 protected:
116 // device level overrides
117 virtual void device_add_mconfig(machine_config &config) override;
118 virtual void device_start() override;
119 virtual void device_reset() override;
120
121 private:
122 required_device<cpu_device> m_audiocpu;
123 required_device<generic_latch_8_device> m_soundlatch;
124
125 void sound_map(address_map &map);
126 void sound_portmap(address_map &map);
127
128 INTERRUPT_GEN_MEMBER(sound_irq) { m_audiocpu->set_input_line(0, HOLD_LINE); }
129 };
130
131 #endif // MAME_AUDIO_AD_SOUND_H
132