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:
cottonvibes 2009-06-26 04:27:18 +00:00
parent 89dc306861
commit 6b2c26a617
6 changed files with 40 additions and 35 deletions

View File

@ -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)

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -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) { \

View File

@ -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;
}
}