mirror of https://github.com/PCSX2/pcsx2.git
Added 2 gamefixes to the Windows Side (untested since I don't have the games xD):
- DMA Execution hack - Fixes Fatal frame problems by ignoring dma transfers while another one is being executed. - VU XGkick hack - Fixes Erementar Gerad by delaying XGkick. Similar to what SO3 needs, except this game needs more delay. Emulating this correctly is impossible with the current DMAC system, and will most-likely never be fixed correctly. The best (and fastest) way to simulate proper behavior is with a gamefix. (Super VU was doing this by a CRC hack, but I changed it to use this gamefix instead along with microVU.) git-svn-id: http://pcsx2.googlecode.com/svn/trunk@1437 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
89dc306861
commit
6b2c26a617
|
@ -66,11 +66,12 @@ extern SessionOverrideFlags g_Session;
|
|||
#define CHECK_VU1REC (!g_Session.ForceDisableVU1rec && (Config.Options&PCSX2_VU1REC))
|
||||
|
||||
//------------ 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_FPUCOMPAREHACK (Config.GameFixes & 0x4) // Special Fix for Digimon Rumble Arena 2, fixes spinning/hanging on intro-menu.
|
||||
#define CHECK_VUCLIPFLAGHACK (Config.GameFixes & 0x2) // Special Fix for Persona games, maybe others. It's to do with the VU clip flag (again).
|
||||
#define CHECK_FPUMULHACK (Config.GameFixes & 0x8) // Special Fix for Tales of Destiny hangs.
|
||||
#define CHECK_DMAEXECHACK (Config.GameFixes & 0x10) // Special Fix for Fatal Frame; breaks Gust and Tri-Ace games.
|
||||
#define CHECK_VUADDSUBHACK (Config.GameFixes & 0x01) // Special Fix for Tri-ace games, they use an encryption algorithm that requires VU addi opcode to be bit-accurate.
|
||||
#define CHECK_FPUCOMPAREHACK (Config.GameFixes & 0x04) // Special Fix for Digimon Rumble Arena 2, fixes spinning/hanging on intro-menu.
|
||||
#define CHECK_VUCLIPFLAGHACK (Config.GameFixes & 0x02) // Special Fix for Persona games, maybe others. It's to do with the VU clip flag (again).
|
||||
#define CHECK_FPUMULHACK (Config.GameFixes & 0x08) // Special Fix for Tales of Destiny hangs.
|
||||
#define CHECK_DMAEXECHACK (Config.GameFixes & 0x10) // Special Fix for Fatal Frame; breaks Gust and Tri-Ace games.
|
||||
#define CHECK_XGKICKHACK (Config.GameFixes & 0x20) // Special Fix for Erementar Gerad, adds more delay to VU XGkick instructions. Corrects the color of some graphics.
|
||||
|
||||
//------------ Advanced Options!!! ---------------
|
||||
#define CHECK_VU_OVERFLOW (Config.vuOptions & 0x1)
|
||||
|
|
|
@ -521,22 +521,25 @@ BOOL APIENTRY GameFixes(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
{
|
||||
switch (message) {
|
||||
case WM_INITDIALOG:
|
||||
if(Config.GameFixes & 0x1) CheckDlgButton(hDlg, IDC_GAMEFIX2, TRUE);//Tri-Ace fix
|
||||
if(Config.GameFixes & 0x4) CheckDlgButton(hDlg, IDC_GAMEFIX3, TRUE);//Digimon FPU compare fix
|
||||
if(Config.GameFixes & 0x2) CheckDlgButton(hDlg, IDC_GAMEFIX4, TRUE);//Persona3/4 fix
|
||||
if(Config.GameFixes & 0x8) CheckDlgButton(hDlg, IDC_GAMEFIX5, TRUE);//Tales of Destiny fix
|
||||
//if(Config.GameFixes & 0x10) CheckDlgButton(hDlg, IDC_GAMEFIX?, TRUE);//Fatal Frame fix
|
||||
if (Config.GameFixes & 0x01) CheckDlgButton(hDlg, IDC_GAMEFIX2, TRUE); // Tri-Ace fix
|
||||
if (Config.GameFixes & 0x04) CheckDlgButton(hDlg, IDC_GAMEFIX3, TRUE); // Digimon FPU compare fix
|
||||
if (Config.GameFixes & 0x02) CheckDlgButton(hDlg, IDC_GAMEFIX4, TRUE); // Persona3/4 fix
|
||||
if (Config.GameFixes & 0x08) CheckDlgButton(hDlg, IDC_GAMEFIX5, TRUE); // Tales of Destiny fix
|
||||
if (Config.GameFixes & 0x10) CheckDlgButton(hDlg, IDC_GAMEFIX6, TRUE); // Fatal Frame fix
|
||||
if (Config.GameFixes & 0x20) CheckDlgButton(hDlg, IDC_GAMEFIX8, TRUE); // Erementar Gerad fix
|
||||
|
||||
return TRUE;
|
||||
|
||||
case WM_COMMAND:
|
||||
if (LOWORD(wParam) == IDOK)
|
||||
{
|
||||
uint newfixes = 0;
|
||||
newfixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX2) ? 0x1 : 0;
|
||||
newfixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX3) ? 0x4 : 0;
|
||||
newfixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX4) ? 0x2 : 0;
|
||||
newfixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX5) ? 0x8 : 0;
|
||||
//newfixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX?) ? 0x10 : 0;
|
||||
newfixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX2) ? 0x01 : 0;
|
||||
newfixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX3) ? 0x04 : 0;
|
||||
newfixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX4) ? 0x02 : 0;
|
||||
newfixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX5) ? 0x08 : 0;
|
||||
newfixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX6) ? 0x10 : 0;
|
||||
newfixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX8) ? 0x20 : 0;
|
||||
|
||||
EndDialog(hDlg, TRUE);
|
||||
|
||||
|
|
|
@ -74,23 +74,26 @@ LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
|
|||
// Dialog
|
||||
//
|
||||
|
||||
IDD_GAMEFIXES DIALOGEX 0, 0, 279, 123
|
||||
IDD_GAMEFIXES DIALOGEX 0, 0, 279, 154
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Game Special Fixes"
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "OK",IDOK,87,96,50,14
|
||||
PUSHBUTTON "Cancel",IDCANCEL,142,96,50,14
|
||||
DEFPUSHBUTTON "OK",IDOK,86,133,50,14
|
||||
PUSHBUTTON "Cancel",IDCANCEL,142,133,50,14
|
||||
CTEXT "Some games need special settings.\nConfigure them here.",IDC_STATIC,7,7,265,17
|
||||
GROUPBOX "PCSX2 Gamefixes",IDC_STATIC,7,22,265,94
|
||||
GROUPBOX "PCSX2 Gamefixes",IDC_STATIC,7,22,265,104
|
||||
CONTROL "FPU Compare Hack - Special fix for Digimon Rumble Arena 2.",IDC_GAMEFIX3,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,36,249,10
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,51,249,10
|
||||
CONTROL "VU Add Hack - Special fix for Tri-Ace games!",IDC_GAMEFIX2,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,65,252,10
|
||||
CONTROL "VU Clip Hack - Fixes missing ground geometry in Persona.",IDC_GAMEFIX4,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,79,238,10
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,80,252,10
|
||||
CONTROL "VU Clip Hack - Fixes missing ground geometry in Persona. (Super VU)",IDC_GAMEFIX4,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,94,238,10
|
||||
CONTROL "FPU Mul Hack - Special fix for Tales of Destiny.",IDC_GAMEFIX5,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,50,249,10
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,65,249,10
|
||||
CONTROL "DMA Execution Hack - Special fix for Fatal Frame.",IDC_GAMEFIX6,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,37,238,10
|
||||
CONTROL "VU XGkick Hack - Special fix for Erementar Gerad.",IDC_GAMEFIX8,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,108,238,10
|
||||
END
|
||||
|
||||
|
||||
|
@ -108,8 +111,7 @@ BEGIN
|
|||
RIGHTMARGIN, 272
|
||||
VERTGUIDE, 14
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 116
|
||||
HORZGUIDE, 103
|
||||
BOTTOMMARGIN, 147
|
||||
END
|
||||
END
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
|
|
@ -237,7 +237,9 @@
|
|||
#define IDC_EE_ROUNDMODE0 1305
|
||||
#define IDC_FCOR 1305
|
||||
#define IDC_GAMEFIX7 1305
|
||||
#define IDC_GAMEFIX6 1305
|
||||
#define IDC_EE_ROUNDMODE1 1306
|
||||
#define IDC_GAMEFIX8 1306
|
||||
#define IDC_EE_ROUNDMODE2 1307
|
||||
#define IDC_EE_ROUNDMODE3 1308
|
||||
#define IDC_EESYNC_DEFAULT 1308
|
||||
|
|
|
@ -275,8 +275,10 @@ typedef u32 (__fastcall *mVUCall)(void*, void*);
|
|||
#define CHECK_VU_MINMAXHACK (u32)Config.Hacks.vuMinMax // (Can cause SPS, Black Screens, etc...)
|
||||
|
||||
// Unknown Data
|
||||
#define mVU_XGKICK_CYCLES 1 // Its unknown at recompile time how long the xgkick transfer will take
|
||||
// so give it a value that makes games happy :) (SO3 is fine at 1 cycle delay)
|
||||
#define mVU_XGKICK_CYCLES ((CHECK_XGKICKHACK) ? 3 : 1)
|
||||
// Its unknown at recompile time how long the xgkick transfer will take
|
||||
// so give it a value that makes games happy :) (SO3 is fine at 1 cycle delay)
|
||||
|
||||
|
||||
// Cache Limit Check
|
||||
#define mVUcacheCheck(ptr, start, limit) { \
|
||||
|
|
|
@ -4417,12 +4417,7 @@ void recVUMI_XGKICK(VURegs *VU, int info)
|
|||
recVUMI_XGKICK_(VU);
|
||||
}
|
||||
else {
|
||||
// Erementar Gerad hack.
|
||||
// Corrects the color of some graphics on a game that has somewhat scrambled graphics either way, and only works with ZeroGS. Not even ZZOgl. :)
|
||||
if (g_VUGameFixes & VUFIX_XGKICKDELAY2)
|
||||
s_ScheduleXGKICK = min((u32)4, (s_pCurBlock->endpc - pc) / 8);
|
||||
else
|
||||
s_ScheduleXGKICK = 2;
|
||||
s_ScheduleXGKICK = (CHECK_XGKICKHACK) ? (min((u32)4, (s_pCurBlock->endpc-pc)/8)) : 2;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue