X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=libpcsxcore%2Fcdrom.c;h=3bf3e033b7fb15a8e45212aad0b13d4f7611b893;hp=878559859473ff083ff36f2e9ab975783f454d87;hb=0e2e3f498456d1175916ecd69d0a9e80e701e760;hpb=50b13be9826da8433b39bd7d02cce2422f91cf0c diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c index 87855985..3bf3e033 100644 --- a/libpcsxcore/cdrom.c +++ b/libpcsxcore/cdrom.c @@ -541,6 +541,9 @@ static void cdrPlayInterrupt_Autopause() struct SubQ *subq = (struct SubQ *)CDR_getBufferSub(); int track_changed = 0; if (subq != NULL ) { + // update subq + ReadTrack( cdr.SetSectorPlay ); + #ifdef CDR_LOG CDR_LOG( "CDDA SUB - %X:%X:%X\n", subq->AbsoluteAddress[0], subq->AbsoluteAddress[1], subq->AbsoluteAddress[2] ); @@ -553,7 +556,7 @@ static void cdrPlayInterrupt_Autopause() Tomb Raider 1 ($7) */ - if( cdr.CurTrack < btoi( subq->TrackNumber ) ) + if( cdr.CurTrack + 1 == btoi( subq->TrackNumber ) ) track_changed = 1; } else { Create_Fake_Subq(); @@ -958,6 +961,9 @@ void cdrInterrupt() { subq = (struct SubQ *)CDR_getBufferSub(); if (subq != NULL) { + // update subq + ReadTrack( cdr.SetSectorPlay ); + cdr.Result[0] = subq->TrackNumber; cdr.Result[1] = subq->IndexNumber; memcpy(cdr.Result + 2, subq->TrackRelativeAddress, 3); @@ -1264,6 +1270,9 @@ void cdrInterrupt() { Check_Shell( Irq ); + cdr.ParamP = 0; + cdr.ParamC = 0; + if (cdr.Stat != NoIntr && cdr.Reg2 != 0x18) { psxHu32ref(0x1070) |= SWAP32((u32)0x4); } @@ -1451,12 +1460,6 @@ void cdrWrite0(unsigned char rt) { CDR_LOG("cdrWrite0() Log: CD0 write: %x\n", rt); #endif cdr.Ctrl = (rt & 3) | (cdr.Ctrl & ~3); - - if (rt == 0) { - cdr.ParamP = 0; - cdr.ParamC = 0; - cdr.ResultReady = 0; - } } unsigned char cdrRead1(void) { @@ -1508,6 +1511,8 @@ void cdrWrite1(unsigned char rt) { if (cdr.Ctrl & 0x3) return; + cdr.ResultReady = 0; + switch (cdr.Cmd) { case CdlSync: cdr.Ctrl |= 0x80; @@ -1809,6 +1814,8 @@ void cdrWrite1(unsigned char rt) { break; default: + cdr.ParamP = 0; + cdr.ParamC = 0; #ifdef CDR_LOG CDR_LOG("cdrWrite1() Log: Unknown command: %x\n", cdr.Cmd); #endif