X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=libpcsxcore%2Fcdrom.c;h=87a7c198c0849ca9be28eee37d78bb63634f4f21;hp=aa1473fad5c26aba07961dbc0e84ea519a434881;hb=4955e9d068cd7cbb2bc8755d7bab09b78b92a981;hpb=25c32cec80d7093da4324cae4459b0f36d50fa8d diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c index aa1473fa..87a7c198 100644 --- a/libpcsxcore/cdrom.c +++ b/libpcsxcore/cdrom.c @@ -709,11 +709,12 @@ void cdrInterrupt() { 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--; @@ -1216,7 +1217,8 @@ void cdrInterrupt() { // - fixes cutscene speech { u8 *buf = CDR_getBuffer(); - memcpy(cdr.Transfer, buf, 8); + if (buf != NULL) + memcpy(cdr.Transfer, buf, 8); } @@ -1330,11 +1332,14 @@ void cdrReadInterrupt() { 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; } @@ -1897,9 +1902,13 @@ void cdrWrite3(unsigned char rt) { // - Final Fantasy Tactics // - various other games - if (cdr.Irq) // rearmed guesswork hack 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;