diff options
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 |
commit | b91d5a2ac30040868bbd5de794df0d878e50b00f (patch) | |
tree | 3e5a07b9fb10f13af2c4765ec4873ded75881172 /src/osd/portmedia/pmmidi.c | |
parent | e070c61cf831126ed5d02c47f46bbe518dc526db (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.c | 16 |
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) |