Previous 15994 Revisions Next

r9102 Sunday 12th September, 2010 at 10:54:56 UTC by Angelo Salese
[PCE]: Fixed ADPCM half flag behaviour
[src/mess/machine]pce.c

src/mess/machine/pce.c
r9101r9102
101101   int      adpcm_clock_divider;
102102   UINT16  msm_start_addr;
103103   UINT16   msm_end_addr;
104   UINT16   msm_half_addr;
104105   UINT8   msm_nibble;
105106   UINT8   msm_idle;
106107   /* SCSI signals */
r9101r9102
456457{
457458   static UINT8 msm_data;
458459
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
459462   if ( pce_cd.msm_idle )
460463      return;
461464
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
464465   if ( ! pce_cd.adpcm_clock_count )
465466   {
466467      /* Supply new ADPCM data */
r9101r9102
473474      {
474475         pce_cd.msm_start_addr++;
475476
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)
477478            pce_cd.regs[0x03] = (pce_cd.regs[0x03] & ~0x0c) | (PCE_CD_SAMPLE_HALF_PLAY);
478479
479480         if(pce_cd.msm_start_addr == pce_cd.msm_end_addr)
480481            pce_cd.regs[0x03] = (pce_cd.regs[0x03] & ~0x0c) | (PCE_CD_SAMPLE_FULL_PLAY);
481482
482         if(pce_cd.msm_start_addr > pce_cd.msm_end_addr)
483         if(pce_cd.msm_start_addr >= pce_cd.msm_end_addr)
483484         {
484485            adpcm_stop();
485486            msm5205_reset_w(device, 1);
r9101r9102
12391240         pce_cd.adpcm_write_ptr = 0;
12401241         pce_cd.msm_start_addr = 0;
12411242         pce_cd.msm_end_addr = 0;
1243         pce_cd.msm_half_addr = 0;
12421244         pce_cd.msm_nibble = 0;
12431245         adpcm_stop();
12441246         msm5205_reset_w( space->machine->device( "msm5205"), 1 );
r9101r9102
12481250      {
12491251         pce_cd.msm_start_addr = (pce_cd.adpcm_read_ptr);
12501252         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;
12511254         pce_cd.msm_nibble = 0;
12521255         adpcm_play();
12531256         msm5205_reset_w( space->machine->device( "msm5205"), 0 );

Previous 15994 Revisions Next


© 1998-2018 The MESS Team