summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/bus/midi
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/bus/midi')
-rw-r--r--src/emu/bus/midi/midi.c40
-rw-r--r--src/emu/bus/midi/midi.h62
-rw-r--r--src/emu/bus/midi/midiinport.c32
-rw-r--r--src/emu/bus/midi/midiinport.h34
-rw-r--r--src/emu/bus/midi/midioutport.c27
-rw-r--r--src/emu/bus/midi/midioutport.h34
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