Previous 15994 Revisions Next

r9092 Saturday 11th September, 2010 at 11:30:05 UTC by Angelo Salese
[PCE]: Added bare minimum ADPCM playback support
[src/mess/drivers]pce.c
[src/mess/machine]pce.c

src/mess/machine/pce.c
r9091r9092
9090   int      adpcm_write_ptr;
9191   UINT8   adpcm_write_buf;
9292   int      adpcm_length;
93   UINT16  msm_start_addr;
94   UINT16   msm_end_addr;
95   UINT8   msm_nibble;
9396   int      adpcm_clock_count;
9497   int      adpcm_clock_divider;
9598   /* SCSI signals */
r9091r9092
422425 */
423426static void pce_cd_msm5205_int(running_device *device)
424427{
425   pce_cd.adpcm_clock_count = ( pce_cd.adpcm_clock_count + 1 ) % pce_cd.adpcm_clock_divider;
428   static UINT8 msm_data;
429
426430   if ( ! pce_cd.adpcm_clock_count )
427431   {
428432      /* Supply new ADPCM data */
433      msm_data = (pce_cd.msm_nibble) ? (pce_cd.adpcm_ram[pce_cd.msm_start_addr] & 0x0f) : ((pce_cd.adpcm_ram[pce_cd.msm_start_addr] & 0xf0) >> 4);
434
435      pce_cd.msm_nibble ^= 1;
436
437      if(pce_cd.msm_nibble == 0)
438      {
439         pce_cd.msm_start_addr++;
440         if(pce_cd.msm_start_addr > pce_cd.msm_end_addr)
441            msm5205_reset_w(device, 1);
442      }
429443   }
430444   else
431445   {
432446      /* Make sure the sample does not change */
447      msm5205_data_w(device, msm_data);
433448   }
449
450   pce_cd.adpcm_clock_count = ( pce_cd.adpcm_clock_count + 1 ) % pce_cd.adpcm_clock_divider;
434451}
435452
436453#define   SCSI_STATUS_OK         0x00
r9091r9092
11701187      break;
11711188   case 0x0D:   /* ADPCM address control */
11721189      //printf("%02x\n",data);
1173      if ( ( pce_cd.regs[0x0D] & 0x80 ) && ! ( data & 0x80 ) )
1190      if ( ( pce_cd.regs[0x0D] & 0x80 ) && ! ( data & 0x80 ) ) // ADPCM reset
11741191      {
11751192         /* Reset ADPCM hardware */
11761193         pce_cd.adpcm_read_ptr = 0;
11771194         pce_cd.adpcm_write_ptr = 0;
1195         msm5205_reset_w( space->machine->device( "msm5205"), 1 );
1196      }
1197
1198      if ( data & 0x40 ) // ADPCM play
1199      {
1200         pce_cd.msm_start_addr = (pce_cd.adpcm_read_ptr);
1201         pce_cd.msm_end_addr = (pce_cd.adpcm_read_ptr + pce_cd.adpcm_length) & 0xffff;
1202         pce_cd.msm_nibble = 0;
11781203         msm5205_reset_w( space->machine->device( "msm5205"), 0 );
1204
1205         //popmessage("%08x %08x",pce_cd.adpcm_read_ptr,pce_cd.adpcm_length);
11791206      }
1180      if ( data & 0x10 )
1207
1208      if ( data & 0x10 ) //ADPCM set length
11811209      {
11821210         pce_cd.adpcm_length = ( pce_cd.regs[0x09] << 8 ) | pce_cd.regs[0x08];
11831211      }
1184      if ( data & 0x08 )
1212      if ( data & 0x08 ) //ADPCM set read address
11851213      {
11861214         pce_cd.adpcm_read_ptr = ( pce_cd.regs[0x09] << 8 ) | pce_cd.regs[0x08];
11871215         pce_cd.adpcm_read_buf = 2;
11881216      }
1189      if ( ( data & 0x02 ) == 0x02 )
1217      if ( ( data & 0x02 ) == 0x02 ) //ADPCM set write address
11901218      {
11911219         pce_cd.adpcm_write_ptr = ( pce_cd.regs[0x09] << 8 ) | pce_cd.regs[0x08];
11921220         pce_cd.adpcm_write_buf = data & 1;
src/mess/drivers/pce.c
r9091r9092
4949***********************************************************************
5050- Benkei Gaiden: hangs after a few Sunsoft logo spins.
5151- Busou Keiji Cyber Cross: hangs on attract mode
52- Cadash: After choosing character and name, the game starts and the display 'jiggles' like tracking if off a VCR
5253- Fighting Run: has color and sprite issues during gameplay;
5354- Hisou Kihei - Xserd: black screen;
5455**********************************************************************/
r9091r9092
303304
304305   MDRV_SOUND_ADD( "msm5205", MSM5205, PCE_CD_CLOCK / 6 )
305306   MDRV_SOUND_CONFIG( pce_cd_msm5205_interface )
306   MDRV_SOUND_ROUTE( ALL_OUTPUTS, "lspeaker", 0.00 )
307   MDRV_SOUND_ROUTE( ALL_OUTPUTS, "rspeaker", 0.00 )
307   MDRV_SOUND_ROUTE( ALL_OUTPUTS, "lspeaker", 0.50 )
308   MDRV_SOUND_ROUTE( ALL_OUTPUTS, "rspeaker", 0.50 )
308309
309310   MDRV_SOUND_ADD( "cdda", CDDA, 0 )
310311   MDRV_SOUND_ROUTE( 0, "lspeaker", 1.00 )

Previous 15994 Revisions Next


© 1998-2018 The MESS Team