diff options
Diffstat (limited to 'src/emu/bus/midi')
-rw-r--r-- | src/emu/bus/midi/midi.c | 40 | ||||
-rw-r--r-- | src/emu/bus/midi/midi.h | 62 | ||||
-rw-r--r-- | src/emu/bus/midi/midiinport.c | 32 | ||||
-rw-r--r-- | src/emu/bus/midi/midiinport.h | 34 | ||||
-rw-r--r-- | src/emu/bus/midi/midioutport.c | 27 | ||||
-rw-r--r-- | src/emu/bus/midi/midioutport.h | 34 |
6 files changed, 229 insertions, 0 deletions
diff --git a/src/emu/bus/midi/midi.c b/src/emu/bus/midi/midi.c new file mode 100644 index 00000000000..5021f82f440 --- /dev/null +++ b/src/emu/bus/midi/midi.c @@ -0,0 +1,40 @@ +#include "midi.h" + +const device_type MIDI_PORT = &device_creator<midi_port_device>; + +device_midi_port_interface::device_midi_port_interface(const machine_config &mconfig, device_t &device) + : device_slot_card_interface(mconfig, device) +{ +} + +device_midi_port_interface::~device_midi_port_interface() +{ +} + +midi_port_device::midi_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, MIDI_PORT, "Midi Port", tag, owner, clock, "midi_port", __FILE__), + device_slot_interface(mconfig, *this), + m_rxd_handler(*this), + m_dev(NULL) +{ +} + +midi_port_device::~midi_port_device() +{ +} + +void midi_port_device::device_config_complete() +{ + m_dev = dynamic_cast<device_midi_port_interface *>(get_card_device()); +} + +void midi_port_device::device_start() +{ + m_rxd_handler.resolve_safe(); +} + +WRITE_LINE_MEMBER( midi_port_device::write_txd ) +{ + if(m_dev) + m_dev->input_txd(state); +} diff --git a/src/emu/bus/midi/midi.h b/src/emu/bus/midi/midi.h new file mode 100644 index 00000000000..7b386ac9de4 --- /dev/null +++ b/src/emu/bus/midi/midi.h @@ -0,0 +1,62 @@ +#ifndef __BUS_MIDI_H__ +#define __BUS_MIDI_H__ + +#include "emu.h" + +#define MCFG_MIDI_PORT_ADD(_tag, _slot_intf, _def_slot) \ + MCFG_DEVICE_ADD(_tag, MIDI_PORT, 0) \ + MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) + +#define MCFG_MIDI_RX_HANDLER(_devcb) \ + devcb = &midi_port_device::set_rx_handler(*device, DEVCB2_##_devcb); + +class device_midi_port_interface; + +class midi_port_device : public device_t, + public device_slot_interface +{ + friend class device_midi_port_interface; + +public: + midi_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + virtual ~midi_port_device(); + + // static configuration helpers + template<class _Object> static devcb2_base &set_rx_handler(device_t &device, _Object object) { return downcast<midi_port_device &>(device).m_rxd_handler.set_callback(object); } + + DECLARE_WRITE_LINE_MEMBER( write_txd ); + + DECLARE_READ_LINE_MEMBER( rx_r ) { return m_rxd; } + +protected: + virtual void device_start(); + virtual void device_config_complete(); + + int m_rxd; + + devcb2_write_line m_rxd_handler; + +private: + device_midi_port_interface *m_dev; +}; + +class device_midi_port_interface : public device_slot_card_interface +{ + friend class midi_port_device; + +public: + device_midi_port_interface(const machine_config &mconfig, device_t &device); + virtual ~device_midi_port_interface(); + + virtual DECLARE_WRITE_LINE_MEMBER( input_txd ) {} + DECLARE_WRITE_LINE_MEMBER( output_rxd ) { m_port->m_rxd = state; m_port->m_rxd_handler(state); } + +protected: + midi_port_device *m_port; +}; + +extern const device_type MIDI_PORT; + +SLOT_INTERFACE_EXTERN( default_midi_devices ); + +#endif diff --git a/src/emu/bus/midi/midiinport.c b/src/emu/bus/midi/midiinport.c new file mode 100644 index 00000000000..906a183e7b4 --- /dev/null +++ b/src/emu/bus/midi/midiinport.c @@ -0,0 +1,32 @@ +/********************************************************************* + + midiinport.c + + MIDI In serial port - glues the image device to the pluggable serial port + +*********************************************************************/ + +#include "midiinport.h" + +const device_type MIDIIN_PORT = &device_creator<midiin_port_device>; + +midiin_port_device::midiin_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, MIDIIN_PORT, "MIDI In port", tag, owner, clock, "midiin_port", __FILE__), + device_midi_port_interface(mconfig, *this), + m_midiin(*this, "midiinimg") +{ +} + +static midiin_config midiin_port_image_config = +{ + DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, midiin_port_device, read) +}; + +static MACHINE_CONFIG_FRAGMENT(midiin_port_config) + MCFG_MIDIIN_ADD("midiinimg", midiin_port_image_config) +MACHINE_CONFIG_END + +machine_config_constructor midiin_port_device::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME(midiin_port_config); +} diff --git a/src/emu/bus/midi/midiinport.h b/src/emu/bus/midi/midiinport.h new file mode 100644 index 00000000000..fd2bce7f86b --- /dev/null +++ b/src/emu/bus/midi/midiinport.h @@ -0,0 +1,34 @@ +/********************************************************************* + + midiinport.h + + MIDI In port - glues the image device to the pluggable midi port + +*********************************************************************/ + +#ifndef _MIDIINPORT_H_ +#define _MIDIINPORT_H_ + +#include "midi.h" +#include "imagedev/midiin.h" + +class midiin_port_device : public device_t, + public device_midi_port_interface +{ +public: + midiin_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + DECLARE_WRITE_LINE_MEMBER( read ) { output_rxd(state); } + +protected: + virtual machine_config_constructor device_mconfig_additions() const; + virtual void device_start() { m_owner = dynamic_cast<midi_port_device *>(owner()); } + virtual void device_reset() { } + +private: + required_device<midiin_device> m_midiin; +}; + +extern const device_type MIDIIN_PORT; + +#endif diff --git a/src/emu/bus/midi/midioutport.c b/src/emu/bus/midi/midioutport.c new file mode 100644 index 00000000000..1d4f9e4b408 --- /dev/null +++ b/src/emu/bus/midi/midioutport.c @@ -0,0 +1,27 @@ +/********************************************************************* + + midioutport.c + + MIDI Out serial port - glues the image device to the pluggable serial port + +*********************************************************************/ + +#include "midioutport.h" + +const device_type MIDIOUT_PORT = &device_creator<midiout_port_device>; + +midiout_port_device::midiout_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) + : device_t(mconfig, MIDIOUT_PORT, "MIDI Out port", tag, owner, clock, "midiout_port", __FILE__), + device_midi_port_interface(mconfig, *this), + m_midiout(*this, "midioutimg") +{ +} + +static MACHINE_CONFIG_FRAGMENT(midiout_port_config) + MCFG_MIDIOUT_ADD("midioutimg") +MACHINE_CONFIG_END + +machine_config_constructor midiout_port_device::device_mconfig_additions() const +{ + return MACHINE_CONFIG_NAME(midiout_port_config); +} diff --git a/src/emu/bus/midi/midioutport.h b/src/emu/bus/midi/midioutport.h new file mode 100644 index 00000000000..573eea5cc0f --- /dev/null +++ b/src/emu/bus/midi/midioutport.h @@ -0,0 +1,34 @@ +/********************************************************************* + + midioutport.h + + MIDI Out port - glues the image device to the pluggable midi port + +*********************************************************************/ + +#ifndef _MIDIOUTPORT_H_ +#define _MIDIOUTPORT_H_ + +#include "midi.h" +#include "imagedev/midiout.h" + +class midiout_port_device : public device_t, + public device_midi_port_interface +{ +public: + midiout_port_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + virtual machine_config_constructor device_mconfig_additions() const; + DECLARE_WRITE_LINE_MEMBER( read ) { } + virtual void tx(UINT8 state) { m_midiout->tx(state); } + +protected: + virtual void device_start() { } + virtual void device_reset() { } + +private: + required_device<midiout_device> m_midiout; +}; + +extern const device_type MIDIOUT_PORT; + +#endif |