Previous 199869 Revisions Next

r24862 Tuesday 13th August, 2013 at 04:24:21 UTC by R. Belmont
MIDI: System Common messages should not override running status, fixes Sierra games crashing with the MT-32. [R. Belmont]
[src/mess/machine]mpu401.c
[src/osd/portmedia]pmmidi.c

trunk/src/osd/portmedia/pmmidi.c
r24861r24862
291291   PmEvent ev;
292292   ev.timestamp = 0;   // use the current time
293293
294//   printf("write: %02x (%d)\n", data, dev->xmit_cnt);
295
296   if (dev->xmit_cnt >= 4)
297   {
298      printf("MIDI out: packet assembly overflow, contact MAMEdev!\n");
299      return;
300   }
301
294302   // handle sysex
295303   if (dev->last_status == MIDI_SYSEX)
296304   {
r24861r24862
299307      // if we get a status that isn't sysex, assume it's system common
300308      if ((data & 0x80) && (data != MIDI_EOX))
301309      {
302//          printf("common during sysex!\n");
310//         printf("common during sysex!\n");
303311         ev.message = Pm_Message(data, 0, 0);
304312         Pm_Write(dev->pmStream, &ev, 1);
305313         return;
r24861r24862
315323         dev->xmit_in[0] = dev->xmit_in[1] = dev->xmit_in[2] = dev->xmit_in[3] = 0;
316324         dev->xmit_cnt = 0;
317325
318//          printf("SysEx packet: %08x\n", ev.message);
326//         printf("SysEx packet: %08x\n", ev.message);
319327
320328         // if this is EOX, kill the running status
321329         if (data == MIDI_EOX)
r24861r24862
327335      return;
328336   }
329337
330   // handle running status
331   if ((dev->xmit_cnt == 0) && (data & 0x80))
338   // handle running status.  don't allow system real-time messages to be considered as running status.
339   if ((dev->xmit_cnt == 0) && (data & 0x80) && (data < 0xf8))
332340   {
333341      dev->last_status = data;
334342   }
r24861r24862
337345   {
338346      dev->xmit_in[dev->xmit_cnt++] = dev->last_status;
339347      dev->xmit_in[dev->xmit_cnt++] = data;
348//      printf("\trunning status: [%d] = %02x, [%d] = %02x, last_status = %02x\n", dev->xmit_cnt-2, dev->last_status, dev->xmit_cnt-1, data, dev->last_status);
340349   }
341350   else
342351   {
343352      dev->xmit_in[dev->xmit_cnt++] = data;
353//      printf("\tNRS: [%d] = %02x\n", dev->xmit_cnt-1, data);
344354   }
345355
346356   if ((dev->xmit_cnt == 1) && (dev->xmit_in[0] == MIDI_SYSEX))
347357   {
348//      printf("Start SysEx!\n");
358//      printf("Start SysEx!\n");
349359      dev->last_status = MIDI_SYSEX;
350360      return;
351361   }
352362
353363   // are we there yet?
364//   printf("status check: %02x\n", dev->xmit_in[0]);
354365   switch ((dev->xmit_in[0]>>4) & 0xf)
355366   {
356367      case 0xc:   // 2-byte messages
trunk/src/mess/machine/mpu401.c
r24861r24862
182182      case 6:
183183      case 7:
184184      case 0xf:
185         printf("MPU401: read @ unk %x (PC=%x)\n", offset, space.device().safe_pc());
185//         printf("MPU401: read @ unk %x (PC=%x)\n", offset, space.device().safe_pc());
186186         break;
187187
188188      default:
r24861r24862
201201      case 6:
202202      case 7:
203203      case 0xf:
204         printf("MPU401: %02x @ unk %x (PC=%x)\n", data, offset, space.device().safe_pc());
204//         printf("MPU401: %02x @ unk %x (PC=%x)\n", data, offset, space.device().safe_pc());
205205         break;
206206
207207      default:

Previous 199869 Revisions Next


© 1997-2024 The MAME Team