Skip to content

Commit d9d4f2f

Browse files
committed
bus/spectrum: Added The Music Machine
1 parent 8381197 commit d9d4f2f

File tree

5 files changed

+171
-2
lines changed

5 files changed

+171
-2
lines changed

scripts/src/bus.lua

+2
Original file line numberDiff line numberDiff line change
@@ -4842,6 +4842,8 @@ if (BUSES["SPECTRUM"]~=null) then
48424842
MAME_DIR .. "src/devices/bus/spectrum/mikroplus.h",
48434843
MAME_DIR .. "src/devices/bus/spectrum/mpoker.cpp",
48444844
MAME_DIR .. "src/devices/bus/spectrum/mpoker.h",
4845+
MAME_DIR .. "src/devices/bus/spectrum/musicmachine.cpp",
4846+
MAME_DIR .. "src/devices/bus/spectrum/musicmachine.h",
48454847
MAME_DIR .. "src/devices/bus/spectrum/opus.cpp",
48464848
MAME_DIR .. "src/devices/bus/spectrum/opus.h",
48474849
MAME_DIR .. "src/devices/bus/spectrum/plus2test.cpp",

src/devices/bus/cpc/musicmachine.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// copyright-holders:Barry Rodewald
33
/*
44
* The Music Machine - MIDI and sampling expansion
5-
* by Ram Electronics
5+
* by Ram Electronics Ltd
66
*/
77

88
#include "emu.h"
@@ -16,7 +16,7 @@
1616
// DEVICE DEFINITIONS
1717
//**************************************************************************
1818

19-
DEFINE_DEVICE_TYPE(CPC_MUSICMACHINE, cpc_musicmachine_device, "cpcmusic", "The Music Machine")
19+
DEFINE_DEVICE_TYPE(CPC_MUSICMACHINE, cpc_musicmachine_device, "cpcmusic", "The Music Machine (CPC)")
2020

2121

2222
void cpc_musicmachine_device::device_add_mconfig(machine_config &config)

src/devices/bus/spectrum/exp.cpp

+4
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@ void spectrum_expansion_slot_device::mreq_w(offs_t offset, uint8_t data)
167167
#include "mgt.h"
168168
#include "mikroplus.h"
169169
#include "mpoker.h"
170+
#include "musicmachine.h"
170171
#include "opus.h"
171172
#include "plus2test.h"
172173
#include "protek.h"
@@ -215,6 +216,7 @@ void spectrum_expansion_devices(device_slot_interface &device)
215216
device.option_add("mikroplus", SPECTRUM_MIKROPLUS);
216217
device.option_add("mpoker", SPECTRUM_MPOKER);
217218
device.option_add("mprint", SPECTRUM_MPRINT);
219+
device.option_add("musicmachine", SPECTRUM_MUSICMACHINE);
218220
device.option_add("opus", SPECTRUM_OPUS);
219221
device.option_add("plusd", SPECTRUM_PLUSD);
220222
device.option_add("proceed", SPECTRUM_PROCEED);
@@ -244,6 +246,7 @@ void spec128_expansion_devices(device_slot_interface &device)
244246
device.option_add("mface128", SPECTRUM_MFACE128);
245247
device.option_add("mikroplus", SPECTRUM_MIKROPLUS);
246248
device.option_add("mprint", SPECTRUM_MPRINT);
249+
device.option_add("musicmachine", SPECTRUM_MUSICMACHINE);
247250
device.option_add("opus", SPECTRUM_OPUS);
248251
device.option_add("plusd", SPECTRUM_PLUSD);
249252
device.option_add("plus2test", SPECTRUM_PLUS2TEST);
@@ -259,5 +262,6 @@ void specpls3_expansion_devices(device_slot_interface &device)
259262
{
260263
device.option_add("kempjoy", SPECTRUM_KEMPJOY);
261264
device.option_add("mface3", SPECTRUM_MFACE3);
265+
device.option_add("musicmachine", SPECTRUM_MUSICMACHINE);
262266
}
263267

+114
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
// license:BSD-3-Clause
2+
// copyright-holders:Andrei I. Holub
3+
/*
4+
* The Music Machine - MIDI and sampling expansion
5+
* by Ram Electronics Ltd
6+
*/
7+
8+
#include "emu.h"
9+
#include "musicmachine.h"
10+
11+
#include "bus/midi/midi.h"
12+
#include "machine/clock.h"
13+
#include "speaker.h"
14+
15+
16+
//**************************************************************************
17+
// DEVICE DEFINITIONS
18+
//**************************************************************************
19+
20+
DEFINE_DEVICE_TYPE(SPECTRUM_MUSICMACHINE, spectrum_musicmachine_device, "spectrummusic", "The Music Machine (ZX)")
21+
22+
23+
void spectrum_musicmachine_device::device_add_mconfig(machine_config &config)
24+
{
25+
ACIA6850(config, m_acia).txd_handler().set("mdout", FUNC(midi_port_device::write_txd));
26+
m_acia->irq_handler().set(DEVICE_SELF_OWNER, FUNC(spectrum_expansion_slot_device::nmi_w));
27+
MIDI_PORT(config, "mdin", midiin_slot, "midiin").rxd_handler().set(m_acia, FUNC(acia6850_device::write_rxd));
28+
MIDI_PORT(config, "mdout", midiout_slot, "midiout");
29+
clock_device &acia_clock(CLOCK(config, "acia_clock", 31250*16));
30+
acia_clock.signal_handler().set(FUNC(spectrum_musicmachine_device::write_acia_clock));
31+
32+
SPEAKER(config, "speaker").front_center();
33+
ZN429E(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.2);
34+
}
35+
36+
//**************************************************************************
37+
// LIVE DEVICE
38+
//**************************************************************************
39+
40+
spectrum_musicmachine_device::spectrum_musicmachine_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
41+
device_t(mconfig, SPECTRUM_MUSICMACHINE, tag, owner, clock)
42+
, device_spectrum_expansion_interface(mconfig, *this)
43+
, m_acia(*this,"acia")
44+
, m_dac(*this,"dac")
45+
{
46+
}
47+
48+
//-------------------------------------------------
49+
// device_start - device-specific startup
50+
//-------------------------------------------------
51+
52+
void spectrum_musicmachine_device::device_start()
53+
{
54+
}
55+
56+
//-------------------------------------------------
57+
// device_reset - device-specific reset
58+
//-------------------------------------------------
59+
60+
void spectrum_musicmachine_device::device_reset()
61+
{
62+
m_irq_select = false;
63+
}
64+
65+
void spectrum_musicmachine_device::write_acia_clock(u8 data)
66+
{
67+
m_acia->write_txc(data);
68+
m_acia->write_rxc(data);
69+
}
70+
71+
u8 spectrum_musicmachine_device::iorq_r(offs_t offset)
72+
{
73+
u8 data = offset & 1 ? m_slot->fb_r() : 0xff;
74+
75+
switch (offset & 0xff)
76+
{
77+
case 0x7f:
78+
if (offset == 0xfc7f)
79+
data = m_acia->status_r();
80+
else
81+
data = m_acia->data_r();
82+
break;
83+
case 0xbf:
84+
// TODO ADC_READ
85+
break;
86+
case 0xdf:
87+
// TODO Strobe: ADC_START
88+
break;
89+
}
90+
91+
return data;
92+
}
93+
94+
void spectrum_musicmachine_device::iorq_w(offs_t offset, u8 data)
95+
{
96+
switch (offset & 0xff)
97+
{
98+
case 0x5f:
99+
m_irq_select = data & 1;
100+
break;
101+
case 0x7f:
102+
if (offset == 0xfc7f)
103+
m_acia->control_w(data);
104+
else
105+
m_acia->data_w(data);
106+
break;
107+
case 0x9f:
108+
m_dac->write(data);
109+
break;
110+
case 0xdf:
111+
// TODO Strobe: ADC_START
112+
break;
113+
}
114+
}
+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
// license:BSD-3-Clause
2+
// copyright-holders:Barry Rodewald
3+
/*
4+
* The Music Machine - MIDI and sampling expansion
5+
* by Ram Electronics
6+
*
7+
* Contains a 6850 AICA, Ferranti ZN429E8 DAC and ZN449 ADC
8+
*/
9+
10+
#ifndef MAME_BUS_SPECTRUM_MUSICMACHINE_H
11+
#define MAME_BUS_SPECTRUM_MUSICMACHINE_H
12+
13+
#pragma once
14+
15+
#include "exp.h"
16+
#include "machine/6850acia.h"
17+
#include "sound/dac.h"
18+
19+
class spectrum_musicmachine_device : public device_t
20+
, public device_spectrum_expansion_interface
21+
{
22+
public:
23+
// construction/destruction
24+
spectrum_musicmachine_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);
25+
26+
void write_acia_clock(u8 data);
27+
28+
protected:
29+
// device-level overrides
30+
virtual void device_start() override ATTR_COLD;
31+
virtual void device_reset() override ATTR_COLD;
32+
33+
// optional information overrides
34+
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;
35+
36+
virtual u8 iorq_r(offs_t offset) override;
37+
virtual void iorq_w(offs_t offset, u8 data) override;
38+
39+
private:
40+
required_device<acia6850_device> m_acia;
41+
required_device<dac_byte_interface> m_dac;
42+
43+
bool m_irq_select;
44+
};
45+
46+
// device type definition
47+
DECLARE_DEVICE_TYPE(SPECTRUM_MUSICMACHINE, spectrum_musicmachine_device)
48+
49+
#endif // MAME_BUS_SPECTRUM_MUSICMACHINE_H

0 commit comments

Comments
 (0)