- // cdr.Stat = NoIntr;
- AddIrqQueue(cdr.Cmd, 0x800);
-
- switch (cdr.Cmd) {
- case CdlSync:
- case CdlNop:
- case CdlForward:
- case CdlBackward:
- case CdlReadT:
- case CdlTest:
- case CdlID:
- case CdlReadToc:
- case CdlGetmode:
- case CdlGetlocL:
- case CdlGetlocP:
- case CdlGetTD:
- break;
-
- case CdlSetloc:
- StopReading();
- for (i = 0; i < 3; i++)
- set_loc[i] = btoi(cdr.Param[i]);
-
- // FIXME: clean up this SetSector/SetSectorPlay mess,
- // there should be single var tracking current sector pos
- if (cdr.Play)
- i = msf2sec(cdr.SetSectorPlay);
- else
- i = msf2sec(cdr.SetSector);
- i = abs(i - msf2sec(set_loc));
- if (i > 16)
- cdr.Seeked = SEEK_PENDING;
-
- memcpy(cdr.SetSector, set_loc, 3);
- cdr.SetSector[3] = 0;
- break;
-
- case CdlPlay:
- // Vib Ribbon: try same track again
- StopCdda();
-
-#if 0
- if (!cdr.SetSector[0] & !cdr.SetSector[1] & !cdr.SetSector[2]) {
- if (CDR_getTN(cdr.ResultTN) != -1) {
- if (cdr.CurTrack > cdr.ResultTN[1])
- cdr.CurTrack = cdr.ResultTN[1];
- if (CDR_getTD((unsigned char)(cdr.CurTrack), cdr.ResultTD) != -1) {
- int tmp = cdr.ResultTD[2];
- cdr.ResultTD[2] = cdr.ResultTD[0];
- cdr.ResultTD[0] = tmp;
- if (!Config.Cdda) CDR_play(cdr.ResultTD);
- }
- }
- }
-#endif
- // Vib Ribbon - decoded buffer IRQ for CDDA reading
- // - fixes ribbon timing + music CD mode
- //TODO?
- //CDRDBUF_INT( PSXCLK / 44100 * 0x100 );
-
- cdr.Play = TRUE;
-
- cdr.StatP |= STATUS_SEEK;
- cdr.StatP &= ~STATUS_ROTATING;
- break;
-
- case CdlReadN:
- StopReading();
- cdr.Reading = 1;
- cdr.FirstSector = 1;
- cdr.Readed = 0xff;
- break;
-
- case CdlStandby:
- StopCdda();
- StopReading();
- break;
-
- case CdlStop:
- // GameShark CD Player: Reset CDDA to track start
- if (cdr.Play) {
- // grab time for current track
- CDR_getTD((u8)(cdr.CurTrack), cdr.ResultTD);
-
- cdr.SetSectorPlay[0] = cdr.ResultTD[2];
- cdr.SetSectorPlay[1] = cdr.ResultTD[1];
- cdr.SetSectorPlay[2] = cdr.ResultTD[0];
- }
-
- StopCdda();
- StopReading();
- break;
-
- case CdlPause:
- /*
- GameShark CD Player: save time for resume
-
- Twisted Metal - World Tour: don't mix Setloc / CdlPlay cursors
- */
-
- StopCdda();
- StopReading();
- break;
-
- case CdlReset:
- case CdlInit:
- cdr.Seeked = SEEK_DONE;
- StopCdda();
- StopReading();
- break;
-
- case CdlMute:
- cdr.Muted = TRUE;
- // Duke Nukem - Time to Kill
- // - do not directly set cd-xa volume
- //SPU_writeRegister( H_CDLeft, 0x0000 );
- //SPU_writeRegister( H_CDRight, 0x0000 );
- break;
-
- case CdlDemute:
- cdr.Muted = FALSE;
-
- // Duke Nukem - Time to Kill
- // - do not directly set cd-xa volume
- //SPU_writeRegister( H_CDLeft, 0x7f00 );
- //SPU_writeRegister( H_CDRight, 0x7f00 );
- break;
-
- case CdlSetfilter:
- cdr.File = cdr.Param[0];
- cdr.Channel = cdr.Param[1];
- break;
-
- case CdlSetmode:
- CDR_LOG("cdrWrite1() Log: Setmode %x\n", cdr.Param[0]);
-
- cdr.Mode = cdr.Param[0];
-
- // Squaresoft on PlayStation 1998 Collector's CD Vol. 1
- // - fixes choppy movie sound
- if( cdr.Play && (cdr.Mode & MODE_CDDA) == 0 )
- StopCdda();
- break;
-
- case CdlGetTN:
- //AddIrqQueue(cdr.Cmd, 0x800);
-
- // GameShark CDX CD Player: very long time
- AddIrqQueue(cdr.Cmd, 0x100000);
- break;