StopCdda();
}
else if (((cdr.Mode & MODE_REPORT) || cdr.FastForward || cdr.FastBackward)) {
- CDR_readCDDA(cdr.SetSectorPlay[0], cdr.SetSectorPlay[1], cdr.SetSectorPlay[2], (u8 *)read_buf);
cdr.Result[0] = cdr.StatP;
cdr.Result[1] = cdr.subq.Track;
cdr.Result[2] = cdr.subq.Index;
StopCdda();
cdr.TrackChanged = TRUE;
}
+ else {
+ CDR_readCDDA(cdr.SetSectorPlay[0], cdr.SetSectorPlay[1], cdr.SetSectorPlay[2], (u8 *)read_buf);
+ }
if (!cdr.Irq && !cdr.Stat && (cdr.Mode & (MODE_AUTOPAUSE|MODE_REPORT)))
cdrPlayInterrupt_Autopause();
- if (!cdr.Play) return;
-
- if (CDR_readCDDA && !cdr.Muted && cdr.Mode & MODE_REPORT) {
+ if (CDR_readCDDA && !cdr.Muted && !Config.Cdda) {
cdrAttenuate(read_buf, CD_FRAMESIZE_RAW / 4, 1);
if (SPU_playCDDAchannel)
SPU_playCDDAchannel(read_buf, CD_FRAMESIZE_RAW);
int error = 0;
int delay;
unsigned int seekTime = 0;
+ u8 set_loc[3];
+ int i;
// Reschedule IRQ
if (cdr.Stat) {
break;
case CdlSetloc:
+ CDR_LOG("CDROM setloc command (%02X, %02X, %02X)\n", cdr.Param[0], cdr.Param[1], cdr.Param[2]);
+
+ // MM must be BCD, SS must be BCD and <0x60, FF must be BCD and <0x75
+ if (((cdr.Param[0] & 0x0F) > 0x09) || (cdr.Param[0] > 0x99) || ((cdr.Param[1] & 0x0F) > 0x09) || (cdr.Param[1] >= 0x60) || ((cdr.Param[2] & 0x0F) > 0x09) || (cdr.Param[2] >= 0x75))
+ {
+ CDR_LOG("Invalid/out of range seek to %02X:%02X:%02X\n", cdr.Param[0], cdr.Param[1], cdr.Param[2]);
+ error = ERROR_INVALIDARG;
+ goto set_error;
+ }
+ else
+ {
+ for (i = 0; i < 3; i++)
+ {
+ set_loc[i] = btoi(cdr.Param[i]);
+ }
+
+ i = msf2sec(cdr.SetSectorPlay);
+ i = abs(i - msf2sec(set_loc));
+ if (i > 16)
+ cdr.Seeked = SEEK_PENDING;
+
+ memcpy(cdr.SetSector, set_loc, 3);
+ cdr.SetSector[3] = 0;
+ cdr.SetlocPending = 1;
+ }
break;
do_CdlPlay:
ReadTrack(cdr.SetSectorPlay);
cdr.TrackChanged = FALSE;
+ StopReading();
if (!Config.Cdda)
CDR_play();
*
* We will need to get around this for Bedlam/Rise 2 later...
* */
- if (cdr.DriveState != DRIVESTATE_STANDBY)
+ if (cdr.DriveState == DRIVESTATE_STANDBY)
{
delay = 7000;
}
case CdlGetlocP:
SetResultSize(8);
memcpy(&cdr.Result, &cdr.subq, 8);
-
- if (!cdr.Play && !cdr.Reading)
- cdr.Result[1] = 0; // HACK?
break;
case CdlReadT: // SetSession?
}
void cdrWrite1(unsigned char rt) {
- u8 set_loc[3];
- int i;
-
CDR_LOG_IO("cdr w1: %02x\n", rt);
switch (cdr.Ctrl & 3) {
AddIrqQueue(cdr.Cmd, 0x800);
switch (cdr.Cmd) {
- case CdlSetloc:
- CDR_LOG("CDROM setloc command (%02X, %02X, %02X)\n", cdr.Param[0], cdr.Param[1], cdr.Param[2]);
-
- // MM must be BCD, SS must be BCD and <0x60, FF must be BCD and <0x75
- if (((cdr.Param[0] & 0x0F) > 0x09) || (cdr.Param[0] > 0x99) || ((cdr.Param[1] & 0x0F) > 0x09) || (cdr.Param[1] >= 0x60) || ((cdr.Param[2] & 0x0F) > 0x09) || (cdr.Param[2] >= 0x75))
- {
- CDR_LOG("Invalid/out of range seek to %02X:%02X:%02X\n", cdr.Param[0], cdr.Param[1], cdr.Param[2]);
- }
- else
- {
- for (i = 0; i < 3; i++)
- {
- set_loc[i] = btoi(cdr.Param[i]);
- }
-
- i = msf2sec(cdr.SetSectorPlay);
- i = abs(i - msf2sec(set_loc));
- if (i > 16)
- cdr.Seeked = SEEK_PENDING;
-
- memcpy(cdr.SetSector, set_loc, 3);
- cdr.SetSector[3] = 0;
- cdr.SetlocPending = 1;
- }
- break;
-
case CdlReadN:
case CdlReadS:
case CdlPause:
ptr = (u8 *)PSXM(madr);
- if (ptr == NULL) {
+ if (ptr == INVALID_PTR) {
CDR_LOG("psxDma3() Log: *** DMA 3 *** NULL Pointer!\n");
break;
}