trunk/src/osd/portmedia/pmmidi.c
| r24861 | r24862 | |
| 291 | 291 | PmEvent ev; |
| 292 | 292 | ev.timestamp = 0; // use the current time |
| 293 | 293 | |
| 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 | |
| 294 | 302 | // handle sysex |
| 295 | 303 | if (dev->last_status == MIDI_SYSEX) |
| 296 | 304 | { |
| r24861 | r24862 | |
| 299 | 307 | // if we get a status that isn't sysex, assume it's system common |
| 300 | 308 | if ((data & 0x80) && (data != MIDI_EOX)) |
| 301 | 309 | { |
| 302 | | // printf("common during sysex!\n"); |
| 310 | // printf("common during sysex!\n"); |
| 303 | 311 | ev.message = Pm_Message(data, 0, 0); |
| 304 | 312 | Pm_Write(dev->pmStream, &ev, 1); |
| 305 | 313 | return; |
| r24861 | r24862 | |
| 315 | 323 | dev->xmit_in[0] = dev->xmit_in[1] = dev->xmit_in[2] = dev->xmit_in[3] = 0; |
| 316 | 324 | dev->xmit_cnt = 0; |
| 317 | 325 | |
| 318 | | // printf("SysEx packet: %08x\n", ev.message); |
| 326 | // printf("SysEx packet: %08x\n", ev.message); |
| 319 | 327 | |
| 320 | 328 | // if this is EOX, kill the running status |
| 321 | 329 | if (data == MIDI_EOX) |
| r24861 | r24862 | |
| 327 | 335 | return; |
| 328 | 336 | } |
| 329 | 337 | |
| 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)) |
| 332 | 340 | { |
| 333 | 341 | dev->last_status = data; |
| 334 | 342 | } |
| r24861 | r24862 | |
| 337 | 345 | { |
| 338 | 346 | dev->xmit_in[dev->xmit_cnt++] = dev->last_status; |
| 339 | 347 | 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); |
| 340 | 349 | } |
| 341 | 350 | else |
| 342 | 351 | { |
| 343 | 352 | dev->xmit_in[dev->xmit_cnt++] = data; |
| 353 | // printf("\tNRS: [%d] = %02x\n", dev->xmit_cnt-1, data); |
| 344 | 354 | } |
| 345 | 355 | |
| 346 | 356 | if ((dev->xmit_cnt == 1) && (dev->xmit_in[0] == MIDI_SYSEX)) |
| 347 | 357 | { |
| 348 | | // printf("Start SysEx!\n"); |
| 358 | // printf("Start SysEx!\n"); |
| 349 | 359 | dev->last_status = MIDI_SYSEX; |
| 350 | 360 | return; |
| 351 | 361 | } |
| 352 | 362 | |
| 353 | 363 | // are we there yet? |
| 364 | // printf("status check: %02x\n", dev->xmit_in[0]); |
| 354 | 365 | switch ((dev->xmit_in[0]>>4) & 0xf) |
| 355 | 366 | { |
| 356 | 367 | case 0xc: // 2-byte messages |
trunk/src/mess/machine/mpu401.c
| r24861 | r24862 | |
| 182 | 182 | case 6: |
| 183 | 183 | case 7: |
| 184 | 184 | 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()); |
| 186 | 186 | break; |
| 187 | 187 | |
| 188 | 188 | default: |
| r24861 | r24862 | |
| 201 | 201 | case 6: |
| 202 | 202 | case 7: |
| 203 | 203 | 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()); |
| 205 | 205 | break; |
| 206 | 206 | |
| 207 | 207 | default: |