i = stat.Status;
if (CDR_getStatus(&stat) != -1)
{
- if (stat.Type == 0xff)
- cdr.Stat = DiskError;
+ // BIOS hangs + BIOS error messages
+ //if (stat.Type == 0xff)
+ //cdr.Stat = DiskError;
// case now open
- else if (stat.Status & STATUS_SHELLOPEN)
+ if (stat.Status & STATUS_SHELLOPEN)
{
// Vib Ribbon: pre-CD swap
StopCdda();
Wild 9: skip PREGAP + starting accurate SubQ
- plays tracks without retry play
*/
+ /* unneeded with correct cdriso?
Set_Track();
+ */
Find_CurTrack();
ReadTrack( cdr.SetSectorPlay );
-
// GameShark CD Player: Calls 2x + Play 2x
if( cdr.FastBackward || cdr.FastForward ) {
if( cdr.FastForward ) cdr.FastForward--;
cdr.Result[0] = cdr.StatP;
cdr.Stat = Acknowledge;
- AddIrqQueue(CdlPause + 0x20, 0x800);
+ /*
+ Gundam Battle Assault 2: much slower (*)
+ - Fixes boot, gameplay
+
+ Hokuto no Ken 2: slower
+ - Fixes intro + subtitles
+
+ InuYasha - Feudal Fairy Tale: slower
+ - Fixes battles
+ */
+ AddIrqQueue(CdlPause + 0x20, cdReadTime * 3);
cdr.Ctrl |= 0x80;
break;
}
// redump.org - wipe time
- /*if( !cdr.Play && CheckSBI(cdr.Result+5) ) {
+ if( !cdr.Play && CheckSBI(cdr.Result+5) ) {
memset( cdr.Result+2, 0, 6 );
}
- */
cdr.Stat = Acknowledge;
break;
// - fixes cutscene speech
{
u8 *buf = CDR_getBuffer();
- memcpy(cdr.Transfer, buf, 8);
+ if (buf != NULL)
+ memcpy(cdr.Transfer, buf, 8);
}
SPU_playADPCMchannel(&cdr.Xa);
cdr.FirstSector = 0;
-
+#if 0
// Crash Team Racing: music, speech
+ // - done using cdda decoded buffer (spu irq)
+ // - don't do here
// signal ADPCM data ready
psxHu32ref(0x1070) |= SWAP32((u32)0x200);
+#endif
}
else cdr.FirstSector = -1;
}
/*
GameShark CD Player: save time for resume
- Twisted Metal - World Tour: don't save times for DATA reads
- - Only get 1 chance to do this right
- */
- if( cdr.Play && CDR_getStatus(&stat) != -1 ) {
- cdr.SetSectorPlay[0] = stat.Time[0];
- cdr.SetSectorPlay[1] = stat.Time[1];
- cdr.SetSectorPlay[2] = stat.Time[2];
- }
+ Twisted Metal - World Tour: don't mix Setloc / CdlPlay cursors
+ */
StopCdda();
StopReading();
cdr.Ctrl |= 0x80;
cdr.Stat = NoIntr;
- /*
- Gundam Battle Assault 2: much slower (*)
- - Fixes boot, gameplay
-
- Hokuto no Ken 2: slower
- - Fixes intro + subtitles
-
- InuYasha - Feudal Fairy Tale: slower
- - Fixes battles
- */
- AddIrqQueue(cdr.Cmd, cdReadTime * 3);
+ AddIrqQueue(cdr.Cmd, 0x800);
break;
case CdlReset:
return;
}
+ // XA streaming - incorrect timing because of this reschedule
+ // - Final Fantasy Tactics
+ // - various other games
+
if (cdr.Reading && !cdr.ResultReady) {
- CDREAD_INT((cdr.Mode & MODE_SPEED) ? (cdReadTime / 2) : cdReadTime);
+ int left = psxRegs.intCycle[PSXINT_CDREAD].sCycle + psxRegs.intCycle[PSXINT_CDREAD].cycle - psxRegs.cycle;
+ int time = (cdr.Mode & MODE_SPEED) ? (cdReadTime / 2) : cdReadTime;
+ if (left < time / 2) { // rearmed guesswork hack
+ //printf("-- resched %d -> %d\n", left, time / 2);
+ CDREAD_INT(time / 2);
+ }
}
return;