notaz.gp2x.de
/
pcsx_rearmed.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
(iOS) Work around clang crash when compiling libpcsxcor/new_dynarec/pcsxmem.c.
[pcsx_rearmed.git]
/
libpcsxcore
/
cdrom.c
diff --git
a/libpcsxcore/cdrom.c
b/libpcsxcore/cdrom.c
index
966bb70
..
38fecf7
100644
(file)
--- a/
libpcsxcore/cdrom.c
+++ b/
libpcsxcore/cdrom.c
@@
-205,7
+205,7
@@
static void sec2msf(unsigned int s, u8 *msf) {
cdr.Reading = 0; \
psxRegs.interrupt &= ~(1 << PSXINT_CDREAD); \
} \
cdr.Reading = 0; \
psxRegs.interrupt &= ~(1 << PSXINT_CDREAD); \
} \
- cdr.StatP &= ~
STATUS_READ
;\
+ cdr.StatP &= ~
(STATUS_READ|STATUS_SEEK)
;\
}
#define StopCdda() { \
}
#define StopCdda() { \
@@
-492,7
+492,10
@@
void cdrPlayInterrupt()
setIrq();
}
setIrq();
}
- memcpy(cdr.SetSectorPlay, cdr.SetSector, 4);
+ if (cdr.SetlocPending) {
+ memcpy(cdr.SetSectorPlay, cdr.SetSector, 4);
+ cdr.SetlocPending = 0;
+ }
Find_CurTrack(cdr.SetSectorPlay);
ReadTrack(cdr.SetSectorPlay);
cdr.TrackChanged = FALSE;
Find_CurTrack(cdr.SetSectorPlay);
ReadTrack(cdr.SetSectorPlay);
cdr.TrackChanged = FALSE;
@@
-574,13
+577,17
@@
void cdrInterrupt() {
case CdlSetloc:
break;
case CdlSetloc:
break;
+ do_CdlPlay:
case CdlPlay:
StopCdda();
if (cdr.Seeked == SEEK_PENDING) {
// XXX: wrong, should seek instead..
case CdlPlay:
StopCdda();
if (cdr.Seeked == SEEK_PENDING) {
// XXX: wrong, should seek instead..
- memcpy( cdr.SetSectorPlay, cdr.SetSector, 4 );
cdr.Seeked = SEEK_DONE;
}
cdr.Seeked = SEEK_DONE;
}
+ if (cdr.SetlocPending) {
+ memcpy(cdr.SetSectorPlay, cdr.SetSector, 4);
+ cdr.SetlocPending = 0;
+ }
// BIOS CD Player
// - Pause player, hit Track 01/02/../xx (Setloc issued!!)
// BIOS CD Player
// - Pause player, hit Track 01/02/../xx (Setloc issued!!)
@@
-900,13
+907,22
@@
void cdrInterrupt() {
case CdlReadN:
case CdlReadS:
case CdlReadN:
case CdlReadS:
+ if (cdr.SetlocPending) {
+ memcpy(cdr.SetSectorPlay, cdr.SetSector, 4);
+ cdr.SetlocPending = 0;
+ }
+ Find_CurTrack(cdr.SetSectorPlay);
+
+ if ((cdr.Mode & MODE_CDDA) && cdr.CurTrack > 1)
+ // Read* acts as play for cdda tracks in cdda mode
+ goto do_CdlPlay;
+
cdr.Reading = 1;
cdr.FirstSector = 1;
// Fighting Force 2 - update subq time immediately
// - fixes new game
cdr.Reading = 1;
cdr.FirstSector = 1;
// Fighting Force 2 - update subq time immediately
// - fixes new game
- Find_CurTrack(cdr.SetSector);
- ReadTrack(cdr.SetSector);
+ ReadTrack(cdr.SetSectorPlay);
// Crusaders of Might and Magic - update getlocl now
// Crusaders of Might and Magic - update getlocl now
@@
-1057,7
+1073,7
@@
void cdrReadInterrupt() {
cdr.Result[0] = cdr.StatP;
cdr.Seeked = SEEK_DONE;
cdr.Result[0] = cdr.StatP;
cdr.Seeked = SEEK_DONE;
- ReadTrack(cdr.SetSector);
+ ReadTrack(cdr.SetSector
Play
);
buf = CDR_getBuffer();
if (buf == NULL)
buf = CDR_getBuffer();
if (buf == NULL)
@@
-1098,13
+1114,13
@@
void cdrReadInterrupt() {
}
}
}
}
- cdr.SetSector[2]++;
- if (cdr.SetSector[2] == 75) {
- cdr.SetSector[2] = 0;
- cdr.SetSector[1]++;
- if (cdr.SetSector[1] == 60) {
- cdr.SetSector[1] = 0;
- cdr.SetSector[0]++;
+ cdr.SetSector
Play
[2]++;
+ if (cdr.SetSector
Play
[2] == 75) {
+ cdr.SetSector
Play
[2] = 0;
+ cdr.SetSector
Play
[1]++;
+ if (cdr.SetSector
Play
[1] == 60) {
+ cdr.SetSector
Play
[1] = 0;
+ cdr.SetSector
Play
[0]++;
}
}
}
}
@@
-1124,7
+1140,7
@@
void cdrReadInterrupt() {
}
// update for CdlGetlocP
}
// update for CdlGetlocP
- ReadTrack(cdr.SetSector);
+ ReadTrack(cdr.SetSector
Play
);
}
/*
}
/*
@@
-1218,18
+1234,14
@@
void cdrWrite1(unsigned char rt) {
for (i = 0; i < 3; i++)
set_loc[i] = btoi(cdr.Param[i]);
for (i = 0; i < 3; i++)
set_loc[i] = btoi(cdr.Param[i]);
- // FIXME: clean up this SetSector/SetSectorPlay mess,
- // there should be single var tracking current sector pos
- if (cdr.Play)
- i = msf2sec(cdr.SetSectorPlay);
- else
- i = msf2sec(cdr.SetSector);
+ i = msf2sec(cdr.SetSectorPlay);
i = abs(i - msf2sec(set_loc));
if (i > 16)
cdr.Seeked = SEEK_PENDING;
memcpy(cdr.SetSector, set_loc, 3);
cdr.SetSector[3] = 0;
i = abs(i - msf2sec(set_loc));
if (i > 16)
cdr.Seeked = SEEK_PENDING;
memcpy(cdr.SetSector, set_loc, 3);
cdr.SetSector[3] = 0;
+ cdr.SetlocPending = 1;
break;
case CdlReadN:
break;
case CdlReadN:
@@
-1467,7
+1479,7
@@
int cdrFreeze(void *f, int Mode) {
if (Mode == 0 && !Config.Cdda)
CDR_stop();
if (Mode == 0 && !Config.Cdda)
CDR_stop();
- cdr.freeze_ver = 0x6364720
1
;
+ cdr.freeze_ver = 0x6364720
2
;
gzfreeze(&cdr, sizeof(cdr));
if (Mode == 1) {
gzfreeze(&cdr, sizeof(cdr));
if (Mode == 1) {
@@
-1488,6
+1500,9
@@
int cdrFreeze(void *f, int Mode) {
ReadTrack(tmpp);
if (cdr.Play) {
ReadTrack(tmpp);
if (cdr.Play) {
+ if (cdr.freeze_ver < 0x63647202)
+ memcpy(cdr.SetSectorPlay, cdr.SetSector, 3);
+
Find_CurTrack(cdr.SetSectorPlay);
if (!Config.Cdda)
CDR_play(cdr.SetSectorPlay);
Find_CurTrack(cdr.SetSectorPlay);
if (!Config.Cdda)
CDR_play(cdr.SetSectorPlay);