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
cdrom: more hacks for more timing issues
[pcsx_rearmed.git]
/
libpcsxcore
/
cdrom.c
diff --git
a/libpcsxcore/cdrom.c
b/libpcsxcore/cdrom.c
index
200dcf9
..
335c2dc
100644
(file)
--- a/
libpcsxcore/cdrom.c
+++ b/
libpcsxcore/cdrom.c
@@
-232,7
+232,7
@@
enum drive_state {
DRIVESTATE_SEEK,
};
DRIVESTATE_SEEK,
};
-static struct CdrStat stat;
+static struct CdrStat
cdr_
stat;
static unsigned int msf2sec(const u8 *msf) {
return ((msf[0] * 60 + msf[1]) * 75) + msf[2];
static unsigned int msf2sec(const u8 *msf) {
return ((msf[0] * 60 + msf[1]) * 75) + msf[2];
@@
-327,10
+327,10
@@
void cdrLidSeekInterrupt(void)
//StopReading();
SetPlaySeekRead(cdr.StatP, 0);
//StopReading();
SetPlaySeekRead(cdr.StatP, 0);
- if (CDR_getStatus(&stat) == -1)
+ if (CDR_getStatus(&
cdr_
stat) == -1)
return;
return;
- if (stat.Status & STATUS_SHELLOPEN)
+ if (
cdr_
stat.Status & STATUS_SHELLOPEN)
{
memset(cdr.Prev, 0xff, sizeof(cdr.Prev));
cdr.DriveState = DRIVESTATE_LID_OPEN;
{
memset(cdr.Prev, 0xff, sizeof(cdr.Prev));
cdr.DriveState = DRIVESTATE_LID_OPEN;
@@
-339,8
+339,8
@@
void cdrLidSeekInterrupt(void)
break;
case DRIVESTATE_LID_OPEN:
break;
case DRIVESTATE_LID_OPEN:
- if (CDR_getStatus(&stat) == -1)
- stat.Status &= ~STATUS_SHELLOPEN;
+ if (CDR_getStatus(&
cdr_
stat) == -1)
+
cdr_
stat.Status &= ~STATUS_SHELLOPEN;
// 02, 12, 10
if (!(cdr.StatP & STATUS_SHELLOPEN)) {
// 02, 12, 10
if (!(cdr.StatP & STATUS_SHELLOPEN)) {
@@
-367,7
+367,7
@@
void cdrLidSeekInterrupt(void)
else if (cdr.StatP & STATUS_ROTATING) {
cdr.StatP &= ~STATUS_ROTATING;
}
else if (cdr.StatP & STATUS_ROTATING) {
cdr.StatP &= ~STATUS_ROTATING;
}
- else if (!(stat.Status & STATUS_SHELLOPEN)) {
+ else if (!(
cdr_
stat.Status & STATUS_SHELLOPEN)) {
// closed now
CheckCdrom();
// closed now
CheckCdrom();
@@
-721,8
+721,8
@@
void cdrPlayReadInterrupt(void)
static void softReset(void)
{
static void softReset(void)
{
- CDR_getStatus(&stat);
- if (stat.Status & STATUS_SHELLOPEN) {
+ CDR_getStatus(&
cdr_
stat);
+ if (
cdr_
stat.Status & STATUS_SHELLOPEN) {
cdr.DriveState = DRIVESTATE_LID_OPEN;
cdr.StatP = STATUS_SHELLOPEN;
}
cdr.DriveState = DRIVESTATE_LID_OPEN;
cdr.StatP = STATUS_SHELLOPEN;
}
@@
-835,9
+835,11
@@
void cdrInterrupt(void) {
{
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]);
- cdr.RetryDetected = msfiEq(cdr.SetSector, set_loc)
- && !cdr.SetlocPending;
- //cdr.RetryDetected |= msfiEq(cdr.Param, cdr.Transfer);
+ if ((msfiEq(cdr.SetSector, set_loc)) //|| msfiEq(cdr.Param, cdr.Transfer))
+ && !cdr.SetlocPending)
+ cdr.RetryDetected++;
+ else
+ cdr.RetryDetected = 0;
memcpy(cdr.SetSector, set_loc, 3);
cdr.SetSector[3] = 0;
cdr.SetlocPending = 1;
memcpy(cdr.SetSector, set_loc, 3);
cdr.SetSector[3] = 0;
cdr.SetlocPending = 1;
@@
-991,6
+993,7
@@
void cdrInterrupt(void) {
Hokuto no Ken 2
InuYasha - Feudal Fairy Tale
Dance Dance Revolution Konamix
Hokuto no Ken 2
InuYasha - Feudal Fairy Tale
Dance Dance Revolution Konamix
+ Digimon Rumble Arena
...
*/
if (!(cdr.StatP & (STATUS_PLAY | STATUS_READ)))
...
*/
if (!(cdr.StatP & (STATUS_PLAY | STATUS_READ)))
@@
-999,7
+1002,9
@@
void cdrInterrupt(void) {
}
else
{
}
else
{
- second_resp_time = 2 * 1097107;
+ second_resp_time = 2100011;
+ // a hack to try to avoid weird cmd vs irq1 races causing games to retry
+ second_resp_time += (cdr.RetryDetected & 15) * 100001;
}
SetPlaySeekRead(cdr.StatP, 0);
DriveStateOld = cdr.DriveState;
}
SetPlaySeekRead(cdr.StatP, 0);
DriveStateOld = cdr.DriveState;
@@
-1188,11
+1193,11
@@
void cdrInterrupt(void) {
cdr.Result[3] = 0;
// 0x10 - audio | 0x40 - disk missing | 0x80 - unlicensed
cdr.Result[3] = 0;
// 0x10 - audio | 0x40 - disk missing | 0x80 - unlicensed
- if (CDR_getStatus(&
stat) == -1 || stat.Type == 0 ||
stat.Type == 0xff) {
+ if (CDR_getStatus(&
cdr_stat) == -1 || cdr_stat.Type == 0 || cdr_
stat.Type == 0xff) {
cdr.Result[1] = 0xc0;
}
else {
cdr.Result[1] = 0xc0;
}
else {
- if (stat.Type == 2)
+ if (
cdr_
stat.Type == 2)
cdr.Result[1] |= 0x10;
if (CdromId[0] == '\0')
cdr.Result[1] |= 0x80;
cdr.Result[1] |= 0x10;
if (CdromId[0] == '\0')
cdr.Result[1] |= 0x80;