summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/portmedia/pmmidi.c
diff options
context:
space:
mode:
author R. Belmont <rb6502@users.noreply.github.com>2013-01-29 04:41:52 +0000
committer R. Belmont <rb6502@users.noreply.github.com>2013-01-29 04:41:52 +0000
commitb91d5a2ac30040868bbd5de794df0d878e50b00f (patch)
tree3e5a07b9fb10f13af2c4765ec4873ded75881172 /src/osd/portmedia/pmmidi.c
parente070c61cf831126ed5d02c47f46bbe518dc526db (diff)
MIDI: handle MIDI Out with running status properly [R. Belmont]
Diffstat (limited to 'src/osd/portmedia/pmmidi.c')
-rw-r--r--src/osd/portmedia/pmmidi.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/osd/portmedia/pmmidi.c b/src/osd/portmedia/pmmidi.c
index fc40b9b8af7..7067cbe3aa3 100644
--- a/src/osd/portmedia/pmmidi.c
+++ b/src/osd/portmedia/pmmidi.c
@@ -20,6 +20,7 @@ struct osd_midi_device
#endif
UINT8 xmit_in[4]; // Pm_Messages mean we can at most have 3 residue bytes
int xmit_cnt;
+ UINT8 last_status;
};
void osd_list_midi_devices(void)
@@ -242,7 +243,20 @@ void osd_write_midi_channel(osd_midi_device *dev, UINT8 data)
#ifndef DISABLE_MIDI
int bytes_needed = 0;
- dev->xmit_in[dev->xmit_cnt++] = data;
+ if ((dev->xmit_cnt == 0) && (data & 0x80))
+ {
+ dev->last_status = data;
+ }
+
+ if ((dev->xmit_cnt == 0) && !(data & 0x80))
+ {
+ dev->xmit_in[dev->xmit_cnt++] = dev->last_status;
+ dev->xmit_in[dev->xmit_cnt++] = data;
+ }
+ else
+ {
+ dev->xmit_in[dev->xmit_cnt++] = data;
+ }
// are we there yet?
switch ((dev->xmit_in[0]>>4) & 0xf)