From: notaz <notasas@gmail.com>
Date: Wed, 7 Dec 2011 23:26:37 +0000 (+0200)
Subject: cdrom: don't emulate seek when set to same loc
X-Git-Tag: r12~29
X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=914722b27cdd4e4373418461151e223557e70559;p=pcsx_rearmed.git

cdrom: don't emulate seek when set to same loc

fixes C-12 (needs at least 5 sectors), let's see what this breaks..
---

diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c
index 839e89e9..a150db69 100644
--- a/libpcsxcore/cdrom.c
+++ b/libpcsxcore/cdrom.c
@@ -1225,6 +1225,7 @@ void cdrInterrupt() {
 			/*
 			Duke Nukem: Land of the Babes - seek then delay read for one frame
 			- fixes cutscenes
+			C-12 - Final Resistance - doesn't like seek
 			*/
 
 			if (!cdr.Seeked) {
@@ -1473,6 +1474,7 @@ unsigned char cdrRead1(void) {
 }
 
 void cdrWrite1(unsigned char rt) {
+	char set_loc[3];
 	int i;
 
 #ifdef CDR_LOG
@@ -1521,9 +1523,12 @@ void cdrWrite1(unsigned char rt) {
 
     	case CdlSetloc:
 		StopReading();
-		cdr.Seeked = FALSE;
 		for (i = 0; i < 3; i++)
-			cdr.SetSector[i] = btoi(cdr.Param[i]);
+			set_loc[i] = btoi(cdr.Param[i]);
+		i = abs(msf2sec(cdr.SetSector) - msf2sec(set_loc));
+		if (i > 16)
+			cdr.Seeked = FALSE;
+		memcpy(cdr.SetSector, set_loc, 3);
         	cdr.SetSector[3] = 0;
 
 		/*