mirror of https://github.com/PCSX2/pcsx2.git
Fixed a small bug in FCOR under the VUrecs, also put a hack in there for ICO to cure the SPS, this can be selected in the gamefixes dialog.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@537 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
68aaf91b5d
commit
23336fe987
|
@ -90,6 +90,7 @@ extern SessionOverrideFlags g_Session;
|
||||||
//------------ SPECIAL GAME FIXES!!! ---------------
|
//------------ SPECIAL GAME FIXES!!! ---------------
|
||||||
#define CHECK_VUADDSUBHACK (Config.GameFixes & 0x1) // Special Fix for Tri-ace games, they use an encryption algorithm that requires VU addi opcode to be bit-accurate.
|
#define CHECK_VUADDSUBHACK (Config.GameFixes & 0x1) // Special Fix for Tri-ace games, they use an encryption algorithm that requires VU addi opcode to be bit-accurate.
|
||||||
#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_FCORHACK (Config.GameFixes & 0x8) // Special Fix for ICO, cures SPS due to some misscalculation of the clip flag.
|
||||||
//------------ Advanced Options!!! ---------------
|
//------------ Advanced Options!!! ---------------
|
||||||
#define CHECK_VU_OVERFLOW (Config.vuOptions & 0x1)
|
#define CHECK_VU_OVERFLOW (Config.vuOptions & 0x1)
|
||||||
#define CHECK_VU_EXTRA_OVERFLOW (Config.vuOptions & 0x2) // If enabled, Operands are clamped before being used in the VU recs
|
#define CHECK_VU_EXTRA_OVERFLOW (Config.vuOptions & 0x2) // If enabled, Operands are clamped before being used in the VU recs
|
||||||
|
|
|
@ -529,6 +529,7 @@ BOOL APIENTRY GameFixes(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
if(Config.GameFixes & 0x1) CheckDlgButton(hDlg, IDC_GAMEFIX1, TRUE);
|
if(Config.GameFixes & 0x1) CheckDlgButton(hDlg, IDC_GAMEFIX1, TRUE);
|
||||||
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_GAMEFIX7, TRUE);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
case WM_COMMAND:
|
case WM_COMMAND:
|
||||||
|
@ -538,6 +539,7 @@ BOOL APIENTRY GameFixes(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
newfixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX1) ? 0x1 : 0;
|
newfixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX1) ? 0x1 : 0;
|
||||||
newfixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX2) ? 0x2 : 0;
|
newfixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX2) ? 0x2 : 0;
|
||||||
newfixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX3) ? 0x4 : 0;
|
newfixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX3) ? 0x4 : 0;
|
||||||
|
newfixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX7) ? 0x8 : 0;
|
||||||
|
|
||||||
EndDialog(hDlg, TRUE);
|
EndDialog(hDlg, TRUE);
|
||||||
|
|
||||||
|
|
|
@ -74,19 +74,20 @@ LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
|
||||||
// Dialog
|
// Dialog
|
||||||
//
|
//
|
||||||
|
|
||||||
IDD_GAMEFIXES DIALOGEX 0, 0, 278, 119
|
IDD_GAMEFIXES DIALOGEX 0, 0, 278, 127
|
||||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||||
CAPTION "Game Special Fixes"
|
CAPTION "Game Special Fixes"
|
||||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||||
BEGIN
|
BEGIN
|
||||||
DEFPUSHBUTTON "OK",IDOK,85,85,50,14
|
DEFPUSHBUTTON "OK",IDOK,85,99,50,14
|
||||||
PUSHBUTTON "Cancel",IDCANCEL,139,85,50,14
|
PUSHBUTTON "Cancel",IDCANCEL,139,99,50,14
|
||||||
CTEXT "Some games need special settings.\nConfigure them here.",IDC_STATIC,7,7,264,17
|
CTEXT "Some games need special settings.\nConfigure them here.",IDC_STATIC,7,7,264,17
|
||||||
GROUPBOX "PCSX2 Gamefixes",IDC_STATIC,7,31,264,77
|
GROUPBOX "PCSX2 Gamefixes",IDC_STATIC,7,31,264,89
|
||||||
CONTROL "FPU Clamp Hack - Special fix for Tekken 5.",IDC_GAMEFIX3,
|
CONTROL "FPU Clamp Hack - Special fix for Tekken 5.",IDC_GAMEFIX3,
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,51,249,10
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,51,249,10
|
||||||
CONTROL "VU Add / Sub Hack - Special fix for Tri-Ace games!",IDC_GAMEFIX1,
|
CONTROL "VU Add / Sub Hack - Special fix for Tri-Ace games!",IDC_GAMEFIX2,
|
||||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,65,252,10
|
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,65,252,10
|
||||||
|
CONTROL "VU FCOR Hack - Fixes ICO SPS",IDC_GAMEFIX7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,79,252,10
|
||||||
END
|
END
|
||||||
|
|
||||||
|
|
||||||
|
@ -104,7 +105,7 @@ BEGIN
|
||||||
RIGHTMARGIN, 271
|
RIGHTMARGIN, 271
|
||||||
VERTGUIDE, 12
|
VERTGUIDE, 12
|
||||||
TOPMARGIN, 7
|
TOPMARGIN, 7
|
||||||
BOTTOMMARGIN, 112
|
BOTTOMMARGIN, 120
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
#endif // APSTUDIO_INVOKED
|
#endif // APSTUDIO_INVOKED
|
||||||
|
|
|
@ -574,6 +574,8 @@
|
||||||
#define IDC_GAMEFIX5 1304
|
#define IDC_GAMEFIX5 1304
|
||||||
#define IDC_GAMEFIX1 1304
|
#define IDC_GAMEFIX1 1304
|
||||||
#define IDC_EE_ROUNDMODE0 1305
|
#define IDC_EE_ROUNDMODE0 1305
|
||||||
|
#define IDC_FCOR 1305
|
||||||
|
#define IDC_GAMEFIX7 1305
|
||||||
#define IDC_EE_ROUNDMODE1 1306
|
#define IDC_EE_ROUNDMODE1 1306
|
||||||
#define IDC_EE_ROUNDMODE2 1307
|
#define IDC_EE_ROUNDMODE2 1307
|
||||||
#define IDC_EE_ROUNDMODE3 1308
|
#define IDC_EE_ROUNDMODE3 1308
|
||||||
|
@ -602,12 +604,12 @@
|
||||||
#define IDC_EE_CLAMPMODE1 1320
|
#define IDC_EE_CLAMPMODE1 1320
|
||||||
#define IDC_MCD_BROWSE1 1320
|
#define IDC_MCD_BROWSE1 1320
|
||||||
#define IDC_EE_CLAMPMODE2 1321
|
#define IDC_EE_CLAMPMODE2 1321
|
||||||
#define IDC_INTCSTATHACK 1326
|
|
||||||
#define IDC_MCD_BROWSE2 1321
|
#define IDC_MCD_BROWSE2 1321
|
||||||
#define IDC_MCD_FILE1 1322
|
#define IDC_MCD_FILE1 1322
|
||||||
#define IDC_MCD_FILE2 1323
|
#define IDC_MCD_FILE2 1323
|
||||||
#define IDC_MCD_LABEL1 1324
|
#define IDC_MCD_LABEL1 1324
|
||||||
#define IDC_MCD_LABEL2 1325
|
#define IDC_MCD_LABEL2 1325
|
||||||
|
#define IDC_INTCSTATHACK 1326
|
||||||
#define IDC_CPULOG 1500
|
#define IDC_CPULOG 1500
|
||||||
#define IDC_MEMLOG 1501
|
#define IDC_MEMLOG 1501
|
||||||
#define IDC_HWLOG 1502
|
#define IDC_HWLOG 1502
|
||||||
|
|
|
@ -1459,10 +1459,15 @@ void recVUMI_FCOR( VURegs *VU, int info )
|
||||||
MOV32MtoR( EAX, VU_VI_ADDR(REG_CLIP_FLAG, 1) );
|
MOV32MtoR( EAX, VU_VI_ADDR(REG_CLIP_FLAG, 1) );
|
||||||
XOR32RtoR( ftreg, ftreg );
|
XOR32RtoR( ftreg, ftreg );
|
||||||
OR32ItoR( EAX, VU->code );
|
OR32ItoR( EAX, VU->code );
|
||||||
|
NOT32R( EAX );
|
||||||
AND32ItoR( EAX, 0xffffff );
|
AND32ItoR( EAX, 0xffffff );
|
||||||
CMP32ItoR( EAX, 0xffffff );
|
CMP32ItoR( EAX, 0xffffff );
|
||||||
|
|
||||||
SETZ8R(ftreg);
|
if(CHECK_FCORHACK) //ICO Misscalculated CLIP flag (bits missing id guess)
|
||||||
|
SETNZ8R(ftreg);
|
||||||
|
else
|
||||||
|
SETZ8R(ftreg);
|
||||||
|
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue