Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bus/spectrum: Added The Music Machine #12842

Merged
merged 1 commit into from
Oct 4, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions scripts/src/bus.lua
Original file line number Diff line number Diff line change
Expand Up @@ -4842,6 +4842,8 @@ if (BUSES["SPECTRUM"]~=null) then
MAME_DIR .. "src/devices/bus/spectrum/mikroplus.h",
MAME_DIR .. "src/devices/bus/spectrum/mpoker.cpp",
MAME_DIR .. "src/devices/bus/spectrum/mpoker.h",
MAME_DIR .. "src/devices/bus/spectrum/musicmachine.cpp",
MAME_DIR .. "src/devices/bus/spectrum/musicmachine.h",
MAME_DIR .. "src/devices/bus/spectrum/opus.cpp",
MAME_DIR .. "src/devices/bus/spectrum/opus.h",
MAME_DIR .. "src/devices/bus/spectrum/plus2test.cpp",
Expand Down
4 changes: 2 additions & 2 deletions src/devices/bus/cpc/musicmachine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// copyright-holders:Barry Rodewald
/*
* The Music Machine - MIDI and sampling expansion
* by Ram Electronics
* by Ram Electronics Ltd
*/

#include "emu.h"
Expand All @@ -16,7 +16,7 @@
// DEVICE DEFINITIONS
//**************************************************************************

DEFINE_DEVICE_TYPE(CPC_MUSICMACHINE, cpc_musicmachine_device, "cpcmusic", "The Music Machine")
DEFINE_DEVICE_TYPE(CPC_MUSICMACHINE, cpc_musicmachine_device, "cpcmusic", "The Music Machine (CPC)")


void cpc_musicmachine_device::device_add_mconfig(machine_config &config)
Expand Down
4 changes: 4 additions & 0 deletions src/devices/bus/spectrum/exp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,7 @@ void spectrum_expansion_slot_device::mreq_w(offs_t offset, uint8_t data)
#include "mgt.h"
#include "mikroplus.h"
#include "mpoker.h"
#include "musicmachine.h"
#include "opus.h"
#include "plus2test.h"
#include "protek.h"
Expand Down Expand Up @@ -215,6 +216,7 @@ void spectrum_expansion_devices(device_slot_interface &device)
device.option_add("mikroplus", SPECTRUM_MIKROPLUS);
device.option_add("mpoker", SPECTRUM_MPOKER);
device.option_add("mprint", SPECTRUM_MPRINT);
device.option_add("musicmachine", SPECTRUM_MUSICMACHINE);
device.option_add("opus", SPECTRUM_OPUS);
device.option_add("plusd", SPECTRUM_PLUSD);
device.option_add("proceed", SPECTRUM_PROCEED);
Expand Down Expand Up @@ -244,6 +246,7 @@ void spec128_expansion_devices(device_slot_interface &device)
device.option_add("mface128", SPECTRUM_MFACE128);
device.option_add("mikroplus", SPECTRUM_MIKROPLUS);
device.option_add("mprint", SPECTRUM_MPRINT);
device.option_add("musicmachine", SPECTRUM_MUSICMACHINE);
device.option_add("opus", SPECTRUM_OPUS);
device.option_add("plusd", SPECTRUM_PLUSD);
device.option_add("plus2test", SPECTRUM_PLUS2TEST);
Expand All @@ -259,5 +262,6 @@ void specpls3_expansion_devices(device_slot_interface &device)
{
device.option_add("kempjoy", SPECTRUM_KEMPJOY);
device.option_add("mface3", SPECTRUM_MFACE3);
device.option_add("musicmachine", SPECTRUM_MUSICMACHINE);
}

114 changes: 114 additions & 0 deletions src/devices/bus/spectrum/musicmachine.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
// license:BSD-3-Clause
// copyright-holders:Andrei I. Holub
/*
* The Music Machine - MIDI and sampling expansion
* by Ram Electronics Ltd
*/

#include "emu.h"
#include "musicmachine.h"

#include "bus/midi/midi.h"
#include "machine/clock.h"
#include "speaker.h"


//**************************************************************************
// DEVICE DEFINITIONS
//**************************************************************************

DEFINE_DEVICE_TYPE(SPECTRUM_MUSICMACHINE, spectrum_musicmachine_device, "spectrummusic", "The Music Machine (ZX)")


void spectrum_musicmachine_device::device_add_mconfig(machine_config &config)
{
ACIA6850(config, m_acia).txd_handler().set("mdout", FUNC(midi_port_device::write_txd));
m_acia->irq_handler().set(DEVICE_SELF_OWNER, FUNC(spectrum_expansion_slot_device::nmi_w));
MIDI_PORT(config, "mdin", midiin_slot, "midiin").rxd_handler().set(m_acia, FUNC(acia6850_device::write_rxd));
MIDI_PORT(config, "mdout", midiout_slot, "midiout");
clock_device &acia_clock(CLOCK(config, "acia_clock", 31250*16));
acia_clock.signal_handler().set(FUNC(spectrum_musicmachine_device::write_acia_clock));

SPEAKER(config, "speaker").front_center();
ZN429E(config, m_dac, 0).add_route(ALL_OUTPUTS, "speaker", 0.2);
}

//**************************************************************************
// LIVE DEVICE
//**************************************************************************

spectrum_musicmachine_device::spectrum_musicmachine_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
device_t(mconfig, SPECTRUM_MUSICMACHINE, tag, owner, clock)
, device_spectrum_expansion_interface(mconfig, *this)
, m_acia(*this,"acia")
, m_dac(*this,"dac")
{
}

//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------

void spectrum_musicmachine_device::device_start()
{
}

//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------

void spectrum_musicmachine_device::device_reset()
{
m_irq_select = false;
}

void spectrum_musicmachine_device::write_acia_clock(u8 data)
{
m_acia->write_txc(data);
m_acia->write_rxc(data);
}

u8 spectrum_musicmachine_device::iorq_r(offs_t offset)
{
u8 data = offset & 1 ? m_slot->fb_r() : 0xff;

switch (offset & 0xff)
{
case 0x7f:
if (offset == 0xfc7f)
data = m_acia->status_r();
else
data = m_acia->data_r();
break;
case 0xbf:
// TODO ADC_READ
break;
case 0xdf:
// TODO Strobe: ADC_START
break;
}

return data;
}

void spectrum_musicmachine_device::iorq_w(offs_t offset, u8 data)
{
switch (offset & 0xff)
{
case 0x5f:
m_irq_select = data & 1;
break;
case 0x7f:
if (offset == 0xfc7f)
m_acia->control_w(data);
else
m_acia->data_w(data);
break;
case 0x9f:
m_dac->write(data);
break;
case 0xdf:
// TODO Strobe: ADC_START
break;
}
}
49 changes: 49 additions & 0 deletions src/devices/bus/spectrum/musicmachine.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
// license:BSD-3-Clause
// copyright-holders:Barry Rodewald
/*
* The Music Machine - MIDI and sampling expansion
* by Ram Electronics
*
* Contains a 6850 AICA, Ferranti ZN429E8 DAC and ZN449 ADC
*/

#ifndef MAME_BUS_SPECTRUM_MUSICMACHINE_H
#define MAME_BUS_SPECTRUM_MUSICMACHINE_H

#pragma once

#include "exp.h"
#include "machine/6850acia.h"
#include "sound/dac.h"

class spectrum_musicmachine_device : public device_t
, public device_spectrum_expansion_interface
{
public:
// construction/destruction
spectrum_musicmachine_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock);

void write_acia_clock(u8 data);

protected:
// device-level overrides
virtual void device_start() override ATTR_COLD;
virtual void device_reset() override ATTR_COLD;

// optional information overrides
virtual void device_add_mconfig(machine_config &config) override ATTR_COLD;

virtual u8 iorq_r(offs_t offset) override;
virtual void iorq_w(offs_t offset, u8 data) override;

private:
required_device<acia6850_device> m_acia;
required_device<dac_byte_interface> m_dac;

bool m_irq_select;
};

// device type definition
DECLARE_DEVICE_TYPE(SPECTRUM_MUSICMACHINE, spectrum_musicmachine_device)

#endif // MAME_BUS_SPECTRUM_MUSICMACHINE_H
Loading