diff options
author | 2013-01-15 14:45:36 +0000 | |
---|---|---|
committer | 2013-01-15 14:45:36 +0000 | |
commit | 9c0f4e6683fca1c971d2cc047ffec09d8ac46bcd (patch) | |
tree | 93c4d1afaccf63176bfd08b303d062389ca7289c /src | |
parent | 4efc1f7b053ca2503da6ba3b27f91ee0d68d6c3e (diff) |
MIDI: Fixed several bugs and bumped the input buffer sizes [R. Belmont]
Diffstat (limited to 'src')
-rw-r--r-- | src/emu/imagedev/midiin.c | 10 | ||||
-rw-r--r-- | src/emu/imagedev/midiin.h | 2 | ||||
-rw-r--r-- | src/emu/imagedev/midiout.c | 11 | ||||
-rw-r--r-- | src/mess/machine/midiinport.c | 4 | ||||
-rw-r--r-- | src/mess/machine/midioutport.c | 4 | ||||
-rw-r--r-- | src/osd/portmedia/pmmidi.c | 10 |
6 files changed, 27 insertions, 14 deletions
diff --git a/src/emu/imagedev/midiin.c b/src/emu/imagedev/midiin.c index 8e335b48da3..6ad6126e42e 100644 --- a/src/emu/imagedev/midiin.c +++ b/src/emu/imagedev/midiin.c @@ -34,6 +34,7 @@ void midiin_device::device_start() { m_input_func.resolve(m_input_callback, *this); m_timer = timer_alloc(0); + m_midi = NULL; } void midiin_device::device_reset() @@ -71,10 +72,10 @@ void midiin_device::device_config_complete(void) void midiin_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { - UINT8 buf[256]; + UINT8 buf[8192*4]; int bytesRead; - if (osd_poll_midi_channel(m_midi)) + while (osd_poll_midi_channel(m_midi)) { bytesRead = osd_read_midi_channel(m_midi, buf); @@ -112,7 +113,10 @@ bool midiin_device::call_load(void) void midiin_device::call_unload(void) { - osd_close_midi_channel(m_midi); + if (m_midi) + { + osd_close_midi_channel(m_midi); + } } void midiin_device::tra_complete() diff --git a/src/emu/imagedev/midiin.h b/src/emu/imagedev/midiin.h index 7ee7c6082fa..88af86b1757 100644 --- a/src/emu/imagedev/midiin.h +++ b/src/emu/imagedev/midiin.h @@ -68,7 +68,7 @@ protected: void input_callback(UINT8 state); private: - static const int XMIT_RING_SIZE = 64; + static const int XMIT_RING_SIZE = (8192*4*4); void xmit_char(UINT8 data); diff --git a/src/emu/imagedev/midiout.c b/src/emu/imagedev/midiout.c index cfc23058a93..3155a9b7057 100644 --- a/src/emu/imagedev/midiout.c +++ b/src/emu/imagedev/midiout.c @@ -32,6 +32,7 @@ midiout_device::midiout_device(const machine_config &mconfig, const char *tag, d void midiout_device::device_start() { + m_midi = NULL; } void midiout_device::device_reset() @@ -73,7 +74,10 @@ bool midiout_device::call_load(void) void midiout_device::call_unload(void) { - osd_close_midi_channel(m_midi); + if (m_midi) + { + osd_close_midi_channel(m_midi); + } } void midiout_device::rcv_complete() // Rx completed receiving byte @@ -81,7 +85,10 @@ void midiout_device::rcv_complete() // Rx completed receiving byte receive_register_extract(); UINT8 data = get_received_char(); - osd_write_midi_channel(m_midi, data); + if (m_midi) + { + osd_write_midi_channel(m_midi, data); + } } void midiout_device::input_callback(UINT8 state) diff --git a/src/mess/machine/midiinport.c b/src/mess/machine/midiinport.c index 5a90999c02f..e73924717af 100644 --- a/src/mess/machine/midiinport.c +++ b/src/mess/machine/midiinport.c @@ -13,7 +13,7 @@ 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), device_serial_port_interface(mconfig, *this), - m_midiin(*this, "midiin") + m_midiin(*this, "midiinimg") { } @@ -23,7 +23,7 @@ static midiin_config midiin_port_image_config = }; static MACHINE_CONFIG_FRAGMENT(midiin_port_config) - MCFG_MIDIIN_ADD("midiin", midiin_port_image_config) + MCFG_MIDIIN_ADD("midiinimg", midiin_port_image_config) MACHINE_CONFIG_END machine_config_constructor midiin_port_device::device_mconfig_additions() const diff --git a/src/mess/machine/midioutport.c b/src/mess/machine/midioutport.c index 68e997bb44e..6f23738d0bf 100644 --- a/src/mess/machine/midioutport.c +++ b/src/mess/machine/midioutport.c @@ -13,12 +13,12 @@ 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), device_serial_port_interface(mconfig, *this), - m_midiout(*this, "midiout") + m_midiout(*this, "midioutimg") { } static MACHINE_CONFIG_FRAGMENT(midiout_port_config) - MCFG_MIDIOUT_ADD("midiout") + MCFG_MIDIOUT_ADD("midioutimg") MACHINE_CONFIG_END machine_config_constructor midiout_port_device::device_mconfig_additions() const diff --git a/src/osd/portmedia/pmmidi.c b/src/osd/portmedia/pmmidi.c index 390b113c99b..fc40b9b8af7 100644 --- a/src/osd/portmedia/pmmidi.c +++ b/src/osd/portmedia/pmmidi.c @@ -10,11 +10,13 @@ #include "portmidi/portmidi.h" #include "osdcore.h" +static const int RX_EVENT_BUF_SIZE = 512; + struct osd_midi_device { #ifndef DISABLE_MIDI PortMidiStream *pmStream; - PmEvent rx_evBuf[20]; // up to 20 events + PmEvent rx_evBuf[RX_EVENT_BUF_SIZE]; #endif UINT8 xmit_in[4]; // Pm_Messages mean we can at most have 3 residue bytes int xmit_cnt; @@ -85,7 +87,7 @@ osd_midi_device *osd_open_midi_input(const char *devname) if (found_dev >= 0) { - if (Pm_OpenInput(&stm, found_dev, NULL, 20, NULL, NULL) == pmNoError) + if (Pm_OpenInput(&stm, found_dev, NULL, RX_EVENT_BUF_SIZE, NULL, NULL) == pmNoError) { ret = (osd_midi_device *)osd_malloc(sizeof(osd_midi_device)); memset(ret, 0, sizeof(osd_midi_device)); @@ -132,7 +134,7 @@ osd_midi_device *osd_open_midi_output(const char *devname) if (found_dev >= 0) { - if (Pm_OpenOutput(&stm, found_dev, NULL, 20, NULL, NULL, 0) == pmNoError) + if (Pm_OpenOutput(&stm, found_dev, NULL, 100, NULL, NULL, 0) == pmNoError) { ret = (osd_midi_device *)osd_malloc(sizeof(osd_midi_device)); memset(ret, 0, sizeof(osd_midi_device)); @@ -175,7 +177,7 @@ bool osd_poll_midi_channel(osd_midi_device *dev) int osd_read_midi_channel(osd_midi_device *dev, UINT8 *pOut) { #ifndef DISABLE_MIDI - int msgsRead = Pm_Read(dev->pmStream, dev->rx_evBuf, 20); + int msgsRead = Pm_Read(dev->pmStream, dev->rx_evBuf, RX_EVENT_BUF_SIZE); int bytesOut = 0; if (msgsRead <= 0) |