X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=libpcsxcore%2Fcdrom.c;h=c667ac48a9637abbe2500231964ab7c71cf234e4;hp=4ca27e227e7cb2e6d2ab23b6b0fd12187011a2bb;hb=696c9530369f5f5b75a15f0b180d6bf8d855afa3;hpb=7f457614c936a6f37d12c1885bd504a7a7823690 diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c index 4ca27e22..c667ac48 100644 --- a/libpcsxcore/cdrom.c +++ b/libpcsxcore/cdrom.c @@ -269,11 +269,12 @@ static void Check_Shell( int Irq ) 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(); @@ -708,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--; @@ -860,7 +862,17 @@ void cdrInterrupt() { 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; @@ -977,10 +989,9 @@ void cdrInterrupt() { } // 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; @@ -1206,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); } @@ -1320,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; } @@ -1601,31 +1616,15 @@ void cdrWrite1(unsigned char rt) { /* 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: @@ -1899,6 +1898,11 @@ void cdrWrite3(unsigned char rt) { return; } + // XA streaming - incorrect timing because of this reschedule + // - 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); }