mirror of https://github.com/PCSX2/pcsx2.git
Jake found the real problem with Tales of the Abyss. The cdvd seek command should take considerably longer than a normal block read. Added a fixed value for now (might include sector differences later), that gets rid of the vmhack crashes in that game.
Slightly adjusted the new cycle counting to better match the ps2 speed (Still not done yet). git-svn-id: http://pcsx2-playground.googlecode.com/svn/trunk@448 a6443dda-0b58-4228-96e9-037be469359c
This commit is contained in:
parent
cb79658661
commit
7730d4a66d
11
pcsx2/CDVD.c
11
pcsx2/CDVD.c
|
@ -697,13 +697,6 @@ void cdvdReadTimeRcnt(int mode) // Mode 0 is DVD, Mode 1 is CD
|
||||||
else
|
else
|
||||||
cdvdReadTime = ( (mode ? PSX_CD_READSPEED : PSX_DVD_READSPEED) * cdvd.BlockSize ) / cdvd.Speed;
|
cdvdReadTime = ( (mode ? PSX_CD_READSPEED : PSX_DVD_READSPEED) * cdvd.BlockSize ) / cdvd.Speed;
|
||||||
|
|
||||||
if (CHECK_SLOWDVD) { //fixes Tales of the Abyss crashing
|
|
||||||
cdvdReadTime*=3; //Tota battles don't crash
|
|
||||||
if (cdvd.Sector > 2000000) { //Tota worldmap doesn't crash
|
|
||||||
//SysPrintf("Sector = %d \n", cdvd.Sector);
|
|
||||||
cdvdReadTime = 100000;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
//SysPrintf("cdvdReadTime = %d \n", cdvdReadTime);
|
//SysPrintf("cdvdReadTime = %d \n", cdvdReadTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -920,8 +913,8 @@ __forceinline void cdvdReadInterrupt() {
|
||||||
cdvd.RErr = CDVDreadTrack(cdvd.Sector, cdvd.ReadMode);
|
cdvd.RErr = CDVDreadTrack(cdvd.Sector, cdvd.ReadMode);
|
||||||
cdvd.Readed = 1;
|
cdvd.Readed = 1;
|
||||||
cdvd.Status = CDVD_STATUS_SEEK_COMPLETE;
|
cdvd.Status = CDVD_STATUS_SEEK_COMPLETE;
|
||||||
|
//SysPrintf("SEEK!\n");
|
||||||
CDVDREAD_INT(cdvdReadTime);
|
CDVDREAD_INT(cdvdReadTime*32);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -84,7 +84,6 @@ void CombinePaths( char* dest, const char* srcPath, const char* srcFile );
|
||||||
#define CHECK_FPU_EXTRA_FLAGS 0 // Always disabled now, doesn't seem to affect games positively. // (!(Config.Hacks & 0x200)) // Sets correct flags in the FPU recs
|
#define CHECK_FPU_EXTRA_FLAGS 0 // Always disabled now, doesn't seem to affect games positively. // (!(Config.Hacks & 0x200)) // Sets correct flags in the FPU recs
|
||||||
#define CHECK_ESCAPE_HACK (Config.Hacks & 0x400)
|
#define CHECK_ESCAPE_HACK (Config.Hacks & 0x400)
|
||||||
//------------ SPECIAL GAME FIXES!!! ---------------
|
//------------ SPECIAL GAME FIXES!!! ---------------
|
||||||
#define CHECK_SLOWDVD (Config.GameFixes & 0x1) // Slow DVD access times, for games that are strict about them (Tales of the Abyss)
|
|
||||||
#define CHECK_FPUCLAMPHACK (Config.GameFixes & 0x4) // Special Fix for Tekken 5, different clamping for FPU (sets NaN to zero; doesn't clamp infinities)
|
#define CHECK_FPUCLAMPHACK (Config.GameFixes & 0x4) // Special Fix for Tekken 5, different clamping for FPU (sets NaN to zero; doesn't clamp infinities)
|
||||||
#define CHECK_VUCLIPHACK (Config.GameFixes & 0x2) // Special Fix for GoW, updates the clipflag differently in recVUMI_CLIP() (note: turning this hack on, breaks Rockstar games)
|
#define CHECK_VUCLIPHACK (Config.GameFixes & 0x2) // Special Fix for GoW, updates the clipflag differently in recVUMI_CLIP() (note: turning this hack on, breaks Rockstar games)
|
||||||
#define CHECK_VUBRANCHHACK (Config.GameFixes & 0x8) // Special Fix for Magna Carta (note: Breaks Crash Bandicoot)
|
#define CHECK_VUBRANCHHACK (Config.GameFixes & 0x8) // Special Fix for Magna Carta (note: Breaks Crash Bandicoot)
|
||||||
|
|
|
@ -891,7 +891,6 @@ BOOL APIENTRY GameFixes(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
SetWindowText(hDlg, _("Game Specific Fixes"));
|
SetWindowText(hDlg, _("Game Specific Fixes"));
|
||||||
if(Config.GameFixes & 0x1) CheckDlgButton(hDlg, IDC_GAMEFIX1, TRUE); //slow dvd
|
|
||||||
if(Config.GameFixes & 0x2) CheckDlgButton(hDlg, IDC_GAMEFIX2, TRUE);
|
if(Config.GameFixes & 0x2) CheckDlgButton(hDlg, IDC_GAMEFIX2, TRUE);
|
||||||
if(Config.GameFixes & 0x4) CheckDlgButton(hDlg, IDC_GAMEFIX3, TRUE);
|
if(Config.GameFixes & 0x4) CheckDlgButton(hDlg, IDC_GAMEFIX3, TRUE);
|
||||||
if(Config.GameFixes & 0x8) CheckDlgButton(hDlg, IDC_GAMEFIX4, TRUE);
|
if(Config.GameFixes & 0x8) CheckDlgButton(hDlg, IDC_GAMEFIX4, TRUE);
|
||||||
|
@ -901,7 +900,6 @@ BOOL APIENTRY GameFixes(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
if (LOWORD(wParam) == IDOK)
|
if (LOWORD(wParam) == IDOK)
|
||||||
{
|
{
|
||||||
Config.GameFixes = 0;
|
Config.GameFixes = 0;
|
||||||
Config.GameFixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX1) ? 0x1 : 0; //slow dvd
|
|
||||||
Config.GameFixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX2) ? 0x2 : 0;
|
Config.GameFixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX2) ? 0x2 : 0;
|
||||||
Config.GameFixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX3) ? 0x4 : 0;
|
Config.GameFixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX3) ? 0x4 : 0;
|
||||||
Config.GameFixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX4) ? 0x8 : 0;
|
Config.GameFixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX4) ? 0x8 : 0;
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
// Generated from the TEXTINCLUDE 2 resource.
|
// Generated from the TEXTINCLUDE 2 resource.
|
||||||
//
|
//
|
||||||
#include "afxresmw.h"
|
#include "afxresmw.h"
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
#undef APSTUDIO_READONLY_SYMBOLS
|
#undef APSTUDIO_READONLY_SYMBOLS
|
||||||
|
|
||||||
|
@ -84,14 +83,12 @@ BEGIN
|
||||||
PUSHBUTTON "Cancel",IDCANCEL,157,154,50,14
|
PUSHBUTTON "Cancel",IDCANCEL,157,154,50,14
|
||||||
CTEXT "Some games need special settings.\nConfigure them here.",IDC_STATIC,7,7,297,17
|
CTEXT "Some games need special settings.\nConfigure them here.",IDC_STATIC,7,7,297,17
|
||||||
CONTROL "VU Clip Hack - Special fix for God of War; Breaks Rockstar games!",IDC_GAMEFIX2,
|
CONTROL "VU Clip Hack - Special fix for God of War; Breaks Rockstar games!",IDC_GAMEFIX2,
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,71,252,10
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,59,252,10
|
||||||
GROUPBOX "PCSX2 Gamefixes",IDC_STATIC,6,30,294,112
|
GROUPBOX "PCSX2 Gamefixes",IDC_STATIC,6,30,294,112
|
||||||
CONTROL "FPU Clamp Hack - Special fix for Tekken 5 and maybe other games.",IDC_GAMEFIX3,
|
CONTROL "FPU Clamp Hack - Special fix for Tekken 5 and maybe other games.",IDC_GAMEFIX3,
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,58,253,10
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,46,253,10
|
||||||
CONTROL "Slow DVD access (fixes Tales of the Abyss) (Not needed at this time)",IDC_GAMEFIX1,
|
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,44,252,10
|
|
||||||
CONTROL "VU Branch Hack - Special fix for Magna Carta; Breaks Crash Bandicoot!",IDC_GAMEFIX4,
|
CONTROL "VU Branch Hack - Special fix for Magna Carta; Breaks Crash Bandicoot!",IDC_GAMEFIX4,
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,84,252,10
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,72,252,10
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
@ -1706,7 +1703,6 @@ END
|
||||||
// Generated from the TEXTINCLUDE 3 resource.
|
// Generated from the TEXTINCLUDE 3 resource.
|
||||||
//
|
//
|
||||||
|
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////////////////
|
||||||
#endif // not APSTUDIO_INVOKED
|
#endif // not APSTUDIO_INVOKED
|
||||||
|
|
||||||
|
|
|
@ -612,7 +612,6 @@
|
||||||
#define IDC_ICON2 1300
|
#define IDC_ICON2 1300
|
||||||
#define IDC_CHECK1 1300
|
#define IDC_CHECK1 1300
|
||||||
#define IDC_EE_CHECK1 1300
|
#define IDC_EE_CHECK1 1300
|
||||||
#define IDC_GAMEFIX1 1300
|
|
||||||
#define IDC_DENORMALS 1301
|
#define IDC_DENORMALS 1301
|
||||||
#define IDC_EE_CHECK2 1301
|
#define IDC_EE_CHECK2 1301
|
||||||
#define IDC_GAMEFIX2 1301
|
#define IDC_GAMEFIX2 1301
|
||||||
|
|
|
@ -68,7 +68,7 @@ static const int InstCycles_Load = _ic_basemod + 7;
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
static const int InstCycles_Default = 8;
|
static const int InstCycles_Default = 9;
|
||||||
static const int _ic_basemod = 8 - InstCycles_Default; // don't change me unless you're changing the fixed point accuracy of cycle counting.
|
static const int _ic_basemod = 8 - InstCycles_Default; // don't change me unless you're changing the fixed point accuracy of cycle counting.
|
||||||
|
|
||||||
static const int InstCycles_Mult = _ic_basemod + 1*8;
|
static const int InstCycles_Mult = _ic_basemod + 1*8;
|
||||||
|
@ -77,10 +77,10 @@ static const int InstCycles_FPU_Sqrt = _ic_basemod + 3*8;
|
||||||
static const int InstCycles_MMI_Mult = _ic_basemod + 2*8;
|
static const int InstCycles_MMI_Mult = _ic_basemod + 2*8;
|
||||||
static const int InstCycles_MMI_Div = _ic_basemod + 22*8;
|
static const int InstCycles_MMI_Div = _ic_basemod + 22*8;
|
||||||
|
|
||||||
static const int InstCycles_Peephole_Store = _ic_basemod + 14;
|
static const int InstCycles_Peephole_Store = _ic_basemod + 10; //_ic_basemod + 12 for snes emu
|
||||||
static const int InstCycles_Peephole_Load = _ic_basemod + 2;
|
static const int InstCycles_Peephole_Load = _ic_basemod + 2; //_ic_basemod + 4 for snes emu
|
||||||
static const int InstCycles_Store = _ic_basemod + 14;
|
static const int InstCycles_Store = _ic_basemod + 10; //_ic_basemod + 12 for snes emu
|
||||||
static const int InstCycles_Load = _ic_basemod + 2;
|
static const int InstCycles_Load = _ic_basemod + 2; //_ic_basemod + 4 for snes emu
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue