mirror of
https://github.com/holub/mame
synced 2025-04-22 08:22:15 +03:00
bbc: Added Music 2000 and EMR BBC Midi Interface 1MHz bus devices.
This commit is contained in:
parent
9f4e2a58ac
commit
2eb95974d9
@ -349,8 +349,12 @@ if (BUSES["BBC_1MHZBUS"]~=null) then
|
||||
MAME_DIR .. "src/devices/bus/bbc/1mhzbus/1mhzbus.h",
|
||||
MAME_DIR .. "src/devices/bus/bbc/1mhzbus/beebsid.cpp",
|
||||
MAME_DIR .. "src/devices/bus/bbc/1mhzbus/beebsid.h",
|
||||
MAME_DIR .. "src/devices/bus/bbc/1mhzbus/emrmidi.cpp",
|
||||
MAME_DIR .. "src/devices/bus/bbc/1mhzbus/emrmidi.h",
|
||||
MAME_DIR .. "src/devices/bus/bbc/1mhzbus/ieee488.cpp",
|
||||
MAME_DIR .. "src/devices/bus/bbc/1mhzbus/ieee488.h",
|
||||
MAME_DIR .. "src/devices/bus/bbc/1mhzbus/m2000.cpp",
|
||||
MAME_DIR .. "src/devices/bus/bbc/1mhzbus/m2000.h",
|
||||
MAME_DIR .. "src/devices/bus/bbc/1mhzbus/opus3.cpp",
|
||||
MAME_DIR .. "src/devices/bus/bbc/1mhzbus/opus3.h",
|
||||
MAME_DIR .. "src/devices/bus/bbc/1mhzbus/cfa3000opt.cpp",
|
||||
|
@ -131,8 +131,9 @@ WRITE8_MEMBER(bbc_1mhzbus_slot_device::jim_w)
|
||||
|
||||
// slot devices
|
||||
//#include "teletext.h"
|
||||
#include "emrmidi.h"
|
||||
#include "ieee488.h"
|
||||
//#include "m2000.h"
|
||||
#include "m2000.h"
|
||||
//#include "m5000.h"
|
||||
//#include "scsi.h"
|
||||
//#include "multiform.h"
|
||||
@ -151,6 +152,7 @@ void bbc_1mhzbus_devices(device_slot_interface &device)
|
||||
//device.option_add("m500", BBC_M500); /* Acorn ANV02 Music 500 */
|
||||
//device.option_add("awdd", BBC_AWDD); /* Acorn Winchester 110/130 */
|
||||
device.option_add("b488", BBC_B488); /* Aries B488 */
|
||||
device.option_add("emrmidi", BBC_EMRMIDI); /* EMR Midi Interface */
|
||||
//device.option_add("procyon", BBC_PROCYON); /* CST Procyon IEEE Interface */
|
||||
//device.option_add("twdd", BBC_TWDD); /* Technomatic Winchester (Akhter Host Adaptor + ABD4070 */
|
||||
//device.option_add("multiform", BBC_MULTIFORM); /* Technomatic Multiform Z80 */
|
||||
@ -168,9 +170,10 @@ void bbcm_1mhzbus_devices(device_slot_interface &device)
|
||||
//device.option_add("m500", BBC_M500); /* Acorn ANV02 Music 500 */
|
||||
//device.option_add("awdd", BBC_AWDD); /* Acorn Winchester 110/130 */
|
||||
device.option_add("b488", BBC_B488); /* Aries B488 */
|
||||
device.option_add("emrmidi", BBC_EMRMIDI); /* EMR Midi Interface */
|
||||
//device.option_add("procyon", BBC_PROCYON); /* CST Procyon IEEE Interface */
|
||||
//device.option_add("twdd", BBC_TWDD); /* Technomatic Winchester (Akhter Host Adaptor + ABD4070 */
|
||||
//device.option_add("m2000", BBC_M2000); /* Hybrid Music 2000 Interface */
|
||||
device.option_add("m2000", BBC_M2000); /* Hybrid Music 2000 Interface */
|
||||
//device.option_add("m3000", BBC_M3000); /* Hybrid Music 3000 Expander */
|
||||
//device.option_add("m5000", BBC_M5000); /* Hybrid Music 5000 Synthesiser */
|
||||
//device.option_add("m87", BBC_M87); /* Peartree Music 87 Synthesiser */
|
||||
|
108
src/devices/bus/bbc/1mhzbus/emrmidi.cpp
Normal file
108
src/devices/bus/bbc/1mhzbus/emrmidi.cpp
Normal file
@ -0,0 +1,108 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/**********************************************************************
|
||||
|
||||
EMR BBC Midi Interface
|
||||
|
||||
http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/EMR_BBCMIDI.html
|
||||
|
||||
IUB-1 standard model.
|
||||
IUB-2 updated model to also sync with Korg rhythm units.
|
||||
IUB-2T, as IUB-2, with Sync to Tape for supplying click track
|
||||
to multitrackers.
|
||||
|
||||
The Clock Start/Stop port is not implemented. It requires the
|
||||
device to be also connected to the Userport, providing timing
|
||||
control on PB0, PB1.
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
||||
#include "emu.h"
|
||||
#include "emrmidi.h"
|
||||
#include "bus/midi/midi.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE(BBC_EMRMIDI, bbc_emrmidi_device, "bbc_emrmidi", "EMR BBC Midi Interface");
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_add_mconfig - add device configuration
|
||||
//-------------------------------------------------
|
||||
|
||||
void bbc_emrmidi_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
ACIA6850(config, m_acia, 0);
|
||||
m_acia->txd_handler().set("mdout1", FUNC(midi_port_device::write_txd));
|
||||
m_acia->txd_handler().append("mdout2", FUNC(midi_port_device::write_txd));
|
||||
m_acia->irq_handler().set(DEVICE_SELF_OWNER, FUNC(bbc_1mhzbus_slot_device::irq_w));
|
||||
|
||||
CLOCK(config, m_acia_clock, 2_MHz_XTAL / 4);
|
||||
m_acia_clock->signal_handler().set(FUNC(bbc_emrmidi_device::write_acia_clock));
|
||||
|
||||
midiout_slot(MIDI_PORT(config, "mdout1"));
|
||||
midiout_slot(MIDI_PORT(config, "mdout2"));
|
||||
|
||||
auto &mdin(MIDI_PORT(config, "mdin"));
|
||||
midiin_slot(mdin);
|
||||
mdin.rxd_handler().set(m_acia, FUNC(acia6850_device::write_rxd));
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// bbc_emrmidi_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
bbc_emrmidi_device::bbc_emrmidi_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_EMRMIDI, tag, owner, clock)
|
||||
, device_bbc_1mhzbus_interface(mconfig, *this)
|
||||
, m_acia(*this, "acia1")
|
||||
, m_acia_clock(*this, "acia_clock")
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void bbc_emrmidi_device::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// IMPLEMENTATION
|
||||
//**************************************************************************
|
||||
|
||||
READ8_MEMBER(bbc_emrmidi_device::fred_r)
|
||||
{
|
||||
uint8_t data = 0xff;
|
||||
|
||||
if (offset >= 0xf0 && offset < 0xf2)
|
||||
{
|
||||
data = m_acia->read(space, offset & 1);
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(bbc_emrmidi_device::fred_w)
|
||||
{
|
||||
if (offset >= 0xf0 && offset < 0xf2)
|
||||
{
|
||||
m_acia->write(space, offset & 1, data);
|
||||
}
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(bbc_emrmidi_device::write_acia_clock)
|
||||
{
|
||||
m_acia->write_txc(state);
|
||||
m_acia->write_rxc(state);
|
||||
}
|
54
src/devices/bus/bbc/1mhzbus/emrmidi.h
Normal file
54
src/devices/bus/bbc/1mhzbus/emrmidi.h
Normal file
@ -0,0 +1,54 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/**********************************************************************
|
||||
|
||||
EMR BBC Midi Interface
|
||||
|
||||
http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/EMR_BBCMIDI.html
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
||||
#ifndef MAME_BUS_BBC_1MHZBUS_EMRMIDI_H
|
||||
#define MAME_BUS_BBC_1MHZBUS_EMRMIDI_H
|
||||
|
||||
#include "1mhzbus.h"
|
||||
#include "machine/6850acia.h"
|
||||
#include "machine/clock.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
class bbc_emrmidi_device :
|
||||
public device_t,
|
||||
public device_bbc_1mhzbus_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bbc_emrmidi_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(fred_r) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(fred_w) override;
|
||||
|
||||
private:
|
||||
DECLARE_WRITE_LINE_MEMBER(write_acia_clock);
|
||||
|
||||
required_device<acia6850_device> m_acia;
|
||||
required_device<clock_device> m_acia_clock;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(BBC_EMRMIDI, bbc_emrmidi_device);
|
||||
|
||||
|
||||
#endif /* MAME_BUS_BBC_1MHZBUS_EMRMIDI_H */
|
166
src/devices/bus/bbc/1mhzbus/m2000.cpp
Normal file
166
src/devices/bus/bbc/1mhzbus/m2000.cpp
Normal file
@ -0,0 +1,166 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/**********************************************************************
|
||||
|
||||
Hybrid Music 2000 Interface
|
||||
|
||||
https://www.retro-kit.co.uk/page.cfm/content/Hybrid-Music-2000-Interface/
|
||||
http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Hybrid_M2000.html
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
||||
#include "emu.h"
|
||||
#include "m2000.h"
|
||||
#include "bus/midi/midi.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// DEVICE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
DEFINE_DEVICE_TYPE(BBC_M2000, bbc_m2000_device, "bbc_m2000", "Hybrid Music 2000 Interface");
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_add_mconfig - add device configuration
|
||||
//-------------------------------------------------
|
||||
|
||||
void bbc_m2000_device::device_add_mconfig(machine_config &config)
|
||||
{
|
||||
INPUT_MERGER_ANY_HIGH(config, m_irqs).output_handler().set(DEVICE_SELF_OWNER, FUNC(bbc_1mhzbus_slot_device::irq_w));
|
||||
|
||||
ACIA6850(config, m_acia1, 0);
|
||||
m_acia1->txd_handler().set("mdout1", FUNC(midi_port_device::write_txd));
|
||||
m_acia1->irq_handler().set(m_irqs, FUNC(input_merger_device::in_w<0>));
|
||||
|
||||
ACIA6850(config, m_acia2, 0);
|
||||
m_acia2->txd_handler().set("mdout2", FUNC(midi_port_device::write_txd));
|
||||
m_acia2->irq_handler().set(m_irqs, FUNC(input_merger_device::in_w<1>));
|
||||
|
||||
ACIA6850(config, m_acia3, 0);
|
||||
m_acia3->txd_handler().set("mdout3", FUNC(midi_port_device::write_txd));
|
||||
m_acia3->irq_handler().set(m_irqs, FUNC(input_merger_device::in_w<2>));
|
||||
|
||||
CLOCK(config, m_acia_clock, DERIVED_CLOCK(1, 2));
|
||||
m_acia_clock->signal_handler().set(FUNC(bbc_m2000_device::write_acia_clock));
|
||||
|
||||
midiout_slot(MIDI_PORT(config, "mdout1"));
|
||||
midiout_slot(MIDI_PORT(config, "mdout2"));
|
||||
midiout_slot(MIDI_PORT(config, "mdout3"));
|
||||
|
||||
auto &mdin(MIDI_PORT(config, "mdin"));
|
||||
midiin_slot(mdin);
|
||||
mdin.rxd_handler().set(m_acia3, FUNC(acia6850_device::write_rxd));
|
||||
|
||||
BBC_1MHZBUS_SLOT(config, m_1mhzbus, DERIVED_CLOCK(1, 1), bbc_1mhzbus_devices, nullptr);
|
||||
m_1mhzbus->irq_handler().set(m_irqs, FUNC(input_merger_device::in_w<3>));
|
||||
m_1mhzbus->nmi_handler().set(DEVICE_SELF_OWNER, FUNC(bbc_1mhzbus_slot_device::nmi_w));
|
||||
}
|
||||
|
||||
//**************************************************************************
|
||||
// LIVE DEVICE
|
||||
//**************************************************************************
|
||||
|
||||
//-------------------------------------------------
|
||||
// bbc_m2000_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
bbc_m2000_device::bbc_m2000_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock)
|
||||
: device_t(mconfig, BBC_M2000, tag, owner, clock)
|
||||
, device_bbc_1mhzbus_interface(mconfig, *this)
|
||||
, m_1mhzbus(*this, "1mhzbus")
|
||||
, m_acia1(*this, "acia1")
|
||||
, m_acia2(*this, "acia2")
|
||||
, m_acia3(*this, "acia3")
|
||||
, m_acia_clock(*this, "acia_clock")
|
||||
, m_irqs(*this, "irqs")
|
||||
{
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
// device_start - device-specific startup
|
||||
//-------------------------------------------------
|
||||
|
||||
void bbc_m2000_device::device_start()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// IMPLEMENTATION
|
||||
//**************************************************************************
|
||||
|
||||
READ8_MEMBER(bbc_m2000_device::fred_r)
|
||||
{
|
||||
uint8_t data = 0xff;
|
||||
|
||||
if (offset >= 0x08 && offset < 0x10)
|
||||
{
|
||||
switch (offset & 0x06)
|
||||
{
|
||||
case 0x00:
|
||||
data = m_acia1->read(space, offset & 1);
|
||||
break;
|
||||
case 0x02:
|
||||
data = m_acia2->read(space, offset & 1);
|
||||
break;
|
||||
case 0x04:
|
||||
data = m_acia3->read(space, offset & 1);
|
||||
break;
|
||||
case 0x06:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
data &= m_1mhzbus->fred_r(space, offset);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(bbc_m2000_device::fred_w)
|
||||
{
|
||||
if (offset >= 0x08 && offset < 0x10)
|
||||
{
|
||||
switch (offset & 0x06)
|
||||
{
|
||||
case 0x00:
|
||||
m_acia1->write(space, offset & 1, data);
|
||||
break;
|
||||
case 0x02:
|
||||
m_acia2->write(space, offset & 1, data);
|
||||
break;
|
||||
case 0x04:
|
||||
m_acia3->write(space, offset & 1, data);
|
||||
break;
|
||||
case 0x06:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
m_1mhzbus->fred_w(space, offset, data);
|
||||
}
|
||||
|
||||
READ8_MEMBER(bbc_m2000_device::jim_r)
|
||||
{
|
||||
uint8_t data = 0xff;
|
||||
|
||||
data &= m_1mhzbus->jim_r(space, offset);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE8_MEMBER(bbc_m2000_device::jim_w)
|
||||
{
|
||||
m_1mhzbus->jim_w(space, offset, data);
|
||||
}
|
||||
|
||||
WRITE_LINE_MEMBER(bbc_m2000_device::write_acia_clock)
|
||||
{
|
||||
m_acia1->write_txc(state);
|
||||
m_acia1->write_rxc(state);
|
||||
m_acia2->write_txc(state);
|
||||
m_acia2->write_rxc(state);
|
||||
m_acia3->write_txc(state);
|
||||
m_acia3->write_rxc(state);
|
||||
}
|
62
src/devices/bus/bbc/1mhzbus/m2000.h
Normal file
62
src/devices/bus/bbc/1mhzbus/m2000.h
Normal file
@ -0,0 +1,62 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:Nigel Barnes
|
||||
/**********************************************************************
|
||||
|
||||
Hybrid Music 2000 Interface
|
||||
|
||||
https://www.retro-kit.co.uk/page.cfm/content/Hybrid-Music-2000-Interface/
|
||||
http://chrisacorns.computinghistory.org.uk/8bit_Upgrades/Hybrid_M2000.html
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
|
||||
#ifndef MAME_BUS_BBC_1MHZBUS_M2000_H
|
||||
#define MAME_BUS_BBC_1MHZBUS_M2000_H
|
||||
|
||||
#include "1mhzbus.h"
|
||||
#include "machine/6850acia.h"
|
||||
#include "machine/clock.h"
|
||||
#include "machine/input_merger.h"
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
class bbc_m2000_device :
|
||||
public device_t,
|
||||
public device_bbc_1mhzbus_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
bbc_m2000_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
|
||||
// optional information overrides
|
||||
virtual void device_add_mconfig(machine_config &config) override;
|
||||
|
||||
virtual DECLARE_READ8_MEMBER(fred_r) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(fred_w) override;
|
||||
virtual DECLARE_READ8_MEMBER(jim_r) override;
|
||||
virtual DECLARE_WRITE8_MEMBER(jim_w) override;
|
||||
|
||||
private:
|
||||
DECLARE_WRITE_LINE_MEMBER(write_acia_clock);
|
||||
|
||||
required_device<bbc_1mhzbus_slot_device> m_1mhzbus;
|
||||
required_device<acia6850_device> m_acia1;
|
||||
required_device<acia6850_device> m_acia2;
|
||||
required_device<acia6850_device> m_acia3;
|
||||
required_device<clock_device> m_acia_clock;
|
||||
required_device<input_merger_device> m_irqs;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(BBC_M2000, bbc_m2000_device);
|
||||
|
||||
|
||||
#endif /* MAME_BUS_BBC_1MHZBUS_M2000_H */
|
Loading…
Reference in New Issue
Block a user