src/mess/machine/pce.c
| r9101 | r9102 | |
| 101 | 101 | int adpcm_clock_divider; |
| 102 | 102 | UINT16 msm_start_addr; |
| 103 | 103 | UINT16 msm_end_addr; |
| 104 | UINT16 msm_half_addr; |
| 104 | 105 | UINT8 msm_nibble; |
| 105 | 106 | UINT8 msm_idle; |
| 106 | 107 | /* SCSI signals */ |
| r9101 | r9102 | |
| 456 | 457 | { |
| 457 | 458 | static UINT8 msm_data; |
| 458 | 459 | |
| 460 | popmessage("%08x %08x %08x %02x %02x",pce_cd.msm_start_addr,pce_cd.msm_end_addr,pce_cd.msm_half_addr,pce_cd.regs[0x0c],pce_cd.regs[0x0d]); |
| 461 | |
| 459 | 462 | if ( pce_cd.msm_idle ) |
| 460 | 463 | return; |
| 461 | 464 | |
| 462 | | //popmessage("%08x %08x %02x %02x",pce_cd.msm_start_addr,pce_cd.msm_end_addr,pce_cd.regs[0x0c],pce_cd.regs[0x0d]); |
| 463 | | |
| 464 | 465 | if ( ! pce_cd.adpcm_clock_count ) |
| 465 | 466 | { |
| 466 | 467 | /* Supply new ADPCM data */ |
| r9101 | r9102 | |
| 473 | 474 | { |
| 474 | 475 | pce_cd.msm_start_addr++; |
| 475 | 476 | |
| 476 | | if(pce_cd.msm_start_addr >= ((pce_cd.msm_end_addr-pce_cd.msm_start_addr) / 2)) |
| 477 | if(pce_cd.msm_start_addr >= pce_cd.msm_half_addr) |
| 477 | 478 | pce_cd.regs[0x03] = (pce_cd.regs[0x03] & ~0x0c) | (PCE_CD_SAMPLE_HALF_PLAY); |
| 478 | 479 | |
| 479 | 480 | if(pce_cd.msm_start_addr == pce_cd.msm_end_addr) |
| 480 | 481 | pce_cd.regs[0x03] = (pce_cd.regs[0x03] & ~0x0c) | (PCE_CD_SAMPLE_FULL_PLAY); |
| 481 | 482 | |
| 482 | | if(pce_cd.msm_start_addr > pce_cd.msm_end_addr) |
| 483 | if(pce_cd.msm_start_addr >= pce_cd.msm_end_addr) |
| 483 | 484 | { |
| 484 | 485 | adpcm_stop(); |
| 485 | 486 | msm5205_reset_w(device, 1); |
| r9101 | r9102 | |
| 1239 | 1240 | pce_cd.adpcm_write_ptr = 0; |
| 1240 | 1241 | pce_cd.msm_start_addr = 0; |
| 1241 | 1242 | pce_cd.msm_end_addr = 0; |
| 1243 | pce_cd.msm_half_addr = 0; |
| 1242 | 1244 | pce_cd.msm_nibble = 0; |
| 1243 | 1245 | adpcm_stop(); |
| 1244 | 1246 | msm5205_reset_w( space->machine->device( "msm5205"), 1 ); |
| r9101 | r9102 | |
| 1248 | 1250 | { |
| 1249 | 1251 | pce_cd.msm_start_addr = (pce_cd.adpcm_read_ptr); |
| 1250 | 1252 | pce_cd.msm_end_addr = (pce_cd.adpcm_read_ptr + pce_cd.adpcm_length) & 0xffff; |
| 1253 | pce_cd.msm_half_addr = (pce_cd.adpcm_read_ptr + (pce_cd.adpcm_length / 2)) & 0xffff; |
| 1251 | 1254 | pce_cd.msm_nibble = 0; |
| 1252 | 1255 | adpcm_play(); |
| 1253 | 1256 | msm5205_reset_w( space->machine->device( "msm5205"), 0 ); |