diff --git a/pcsx2/Linux/AdvancedDlg.cpp b/pcsx2/Linux/AdvancedDlg.cpp index 72ed0b8470..abb8f16bb0 100644 --- a/pcsx2/Linux/AdvancedDlg.cpp +++ b/pcsx2/Linux/AdvancedDlg.cpp @@ -74,6 +74,9 @@ void setAdvancedOptions() case FLAG_EE_CLAMP_EXTRA_PRESERVE: set_checked(AdvDlg, "radio_EE_Clamp_Extra_Preserve", TRUE); break; + case FLAG_EE_CLAMP_FULL: + set_checked(AdvDlg, "radio_EE_Clamp_Full", TRUE); + break; } switch (Config.vuOptions) @@ -145,6 +148,7 @@ void on_Advanced_OK(GtkButton *button, gpointer user_data) Config.eeOptions |= is_checked(AdvDlg, "radio_EE_Clamp_None") ? FLAG_EE_CLAMP_NONE : 0; Config.eeOptions |= is_checked(AdvDlg, "radio_EE_Clamp_Normal") ? FLAG_EE_CLAMP_NORMAL : 0; Config.eeOptions |= is_checked(AdvDlg, "radio_EE_Clamp_Extra_Preserve") ? FLAG_EE_CLAMP_EXTRA_PRESERVE : 0; + Config.eeOptions |= is_checked(AdvDlg, "radio_EE_Clamp_Full") ? FLAG_EE_CLAMP_FULL : 0; Config.vuOptions |= is_checked(AdvDlg, "radio_VU_Clamp_None") ? FLAG_VU_CLAMP_NONE : 0; Config.vuOptions |= is_checked(AdvDlg, "radio_VU_Clamp_Normal") ? FLAG_VU_CLAMP_NORMAL : 0; diff --git a/pcsx2/Linux/HacksDlg.cpp b/pcsx2/Linux/HacksDlg.cpp index 56ce622fd5..7d77378199 100644 --- a/pcsx2/Linux/HacksDlg.cpp +++ b/pcsx2/Linux/HacksDlg.cpp @@ -25,6 +25,7 @@ GtkWidget *GameFixDlg, *SpeedHacksDlg; GameFixDlg = create_GameFixDlg(); set_checked(GameFixDlg, "check_VU_Add_Sub", (Config.GameFixes & FLAG_VU_ADD_SUB)); + set_checked(GameFixDlg, "check_VU_Clip", (Config.GameFixes & FLAG_VU_CLIP)); set_checked(GameFixDlg, "check_FPU_Clamp", (Config.GameFixes & FLAG_FPU_CLAMP)); gtk_widget_show_all(GameFixDlg); @@ -37,6 +38,7 @@ void on_Game_Fix_OK(GtkButton *button, gpointer user_data) Config.GameFixes = 0; Config.GameFixes |= is_checked(GameFixDlg, "check_VU_Add_Sub") ? FLAG_VU_ADD_SUB : 0; + Config.GameFixes |= is_checked(GameFixDlg, "check_VU_Clip") ? FLAG_VU_CLIP : 0; Config.GameFixes |= is_checked(GameFixDlg, "check_FPU_Clamp") ? FLAG_FPU_CLAMP : 0; SaveConfig(); diff --git a/pcsx2/Linux/Linux.h b/pcsx2/Linux/Linux.h index 7065d65a01..af627516d8 100644 --- a/pcsx2/Linux/Linux.h +++ b/pcsx2/Linux/Linux.h @@ -102,6 +102,7 @@ char iop_log_names[9][32] = }; #define FLAG_VU_ADD_SUB 0x1 +#define FLAG_VU_CLIP 0x2 #define FLAG_FPU_CLAMP 0x4 #define FLAG_VU_FCOR_HACK 0x8 #define FLAG_AVOID_DELAY_HANDLING 0x10 @@ -133,5 +134,6 @@ char iop_log_names[9][32] = #define FLAG_EE_CLAMP_NONE 0x0 #define FLAG_EE_CLAMP_NORMAL 0x1 #define FLAG_EE_CLAMP_EXTRA_PRESERVE 0x3 +#define FLAG_EE_CLAMP_FULL 0x7 #endif /* __LINUX_H__ */ diff --git a/pcsx2/Linux/interface.c b/pcsx2/Linux/interface.c index 419a84cad3..d544f51a1c 100644 --- a/pcsx2/Linux/interface.c +++ b/pcsx2/Linux/interface.c @@ -52,6 +52,8 @@ create_AdvDlg (void) GSList *radio_EE_Clamp_None_group = NULL; GtkWidget *radio_EE_Clamp_Normal; GtkWidget *radio_EE_Clamp_Extra_Preserve; + GtkWidget *radio_EE_Clamp_Full; + GSList *radio_EE_Clamp_Full_group = NULL; GtkWidget *label73; GtkWidget *hbox34; GtkWidget *check_EE_Flush_Zero; @@ -206,6 +208,13 @@ create_AdvDlg (void) gtk_radio_button_set_group (GTK_RADIO_BUTTON (radio_EE_Clamp_Extra_Preserve), radio_EE_Clamp_None_group); radio_EE_Clamp_None_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio_EE_Clamp_Extra_Preserve)); + radio_EE_Clamp_Full = gtk_radio_button_new_with_mnemonic (NULL, _("Full")); + gtk_widget_show (radio_EE_Clamp_Full); + gtk_box_pack_start (GTK_BOX (hbox37), radio_EE_Clamp_Full, TRUE, TRUE, 0); + gtk_radio_button_set_group (GTK_RADIO_BUTTON (radio_EE_Clamp_Full), radio_EE_Clamp_Full_group); + radio_EE_Clamp_Full_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (radio_EE_Clamp_Full)); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_EE_Clamp_Full), TRUE); + label73 = gtk_label_new (_("Clamp Mode")); gtk_widget_show (label73); gtk_frame_set_label_widget (GTK_FRAME (frame27), label73); @@ -478,6 +487,7 @@ create_AdvDlg (void) GLADE_HOOKUP_OBJECT (AdvDlg, radio_EE_Clamp_None, "radio_EE_Clamp_None"); GLADE_HOOKUP_OBJECT (AdvDlg, radio_EE_Clamp_Normal, "radio_EE_Clamp_Normal"); GLADE_HOOKUP_OBJECT (AdvDlg, radio_EE_Clamp_Extra_Preserve, "radio_EE_Clamp_Extra_Preserve"); + GLADE_HOOKUP_OBJECT (AdvDlg, radio_EE_Clamp_Full, "radio_EE_Clamp_Full"); GLADE_HOOKUP_OBJECT (AdvDlg, label73, "label73"); GLADE_HOOKUP_OBJECT (AdvDlg, hbox34, "hbox34"); GLADE_HOOKUP_OBJECT (AdvDlg, check_EE_Flush_Zero, "check_EE_Flush_Zero"); @@ -779,6 +789,7 @@ create_GameFixDlg (void) GtkWidget *vbox30; GtkWidget *check_FPU_Clamp; GtkWidget *check_VU_Add_Sub; + GtkWidget *check_VU_Clip; GtkWidget *label42; GtkWidget *dialog_action_area1; GtkWidget *cancelbutton1; @@ -813,6 +824,10 @@ create_GameFixDlg (void) gtk_widget_show (check_VU_Add_Sub); gtk_box_pack_start (GTK_BOX (vbox30), check_VU_Add_Sub, FALSE, FALSE, 0); + check_VU_Clip = gtk_check_button_new_with_mnemonic (_("VU Clip Hack - Special fix for God of War")); + gtk_widget_show (check_VU_Clip); + gtk_box_pack_start (GTK_BOX (vbox30), check_VU_Clip, FALSE, TRUE, 0); + label42 = gtk_label_new (_("Some games need special settings.\nConfigure them here.")); gtk_widget_show (label42); gtk_frame_set_label_widget (GTK_FRAME (GameSettings), label42); @@ -847,6 +862,7 @@ create_GameFixDlg (void) GLADE_HOOKUP_OBJECT (GameFixDlg, vbox30, "vbox30"); GLADE_HOOKUP_OBJECT (GameFixDlg, check_FPU_Clamp, "check_FPU_Clamp"); GLADE_HOOKUP_OBJECT (GameFixDlg, check_VU_Add_Sub, "check_VU_Add_Sub"); + GLADE_HOOKUP_OBJECT (GameFixDlg, check_VU_Clip, "check_VU_Clip"); GLADE_HOOKUP_OBJECT (GameFixDlg, label42, "label42"); GLADE_HOOKUP_OBJECT_NO_REF (GameFixDlg, dialog_action_area1, "dialog_action_area1"); GLADE_HOOKUP_OBJECT (GameFixDlg, cancelbutton1, "cancelbutton1"); diff --git a/pcsx2/Linux/pcsx2.glade b/pcsx2/Linux/pcsx2.glade index df2a962462..1f8b737d8d 100644 --- a/pcsx2/Linux/pcsx2.glade +++ b/pcsx2/Linux/pcsx2.glade @@ -175,6 +175,19 @@ 2 + + + True + True + Full + 0 + True + True + + + 3 + + @@ -1133,6 +1146,19 @@ Known to work well with a couple games, namely Shadow of the Colossus (but break 1 + + + True + True + VU Clip Hack - Special fix for God of War + 0 + True + + + False + 2 + + diff --git a/pcsx2/x86/Makefile.am b/pcsx2/x86/Makefile.am index b2142705c2..519e5a72d1 100644 --- a/pcsx2/x86/Makefile.am +++ b/pcsx2/x86/Makefile.am @@ -9,7 +9,7 @@ ix86-32/iR5900LoadStore.cpp ix86-32/iR5900MultDiv.cpp ix86-32/iCore-32.cpp ix86 ix86-32/iR5900Templates.cpp ix86-32/recVTLB.cpp libx86recomp_a_SOURCES = \ -BaseblockEx.cpp iCOP0.cpp iCOP2.cpp iCore.cpp iFPU.cpp iGS.cpp iHw.cpp iIPU.cpp iMMI.cpp iPsxHw.cpp iPsxMem.cpp \ +BaseblockEx.cpp iCOP0.cpp iCOP2.cpp iCore.cpp iFPU.cpp iFPUd.cpp iGS.cpp iHw.cpp iIPU.cpp iMMI.cpp iPsxHw.cpp iPsxMem.cpp \ iR3000A.cpp iR3000Atables.cpp iR5900CoissuedLoadStore.cpp iR5900Misc.cpp iVU0micro.cpp iVU1micro.cpp iVUmicro.cpp \ iVUmicroLower.cpp iVUmicroUpper.cpp iVUzerorec.cpp iVif.cpp ir5900tables.cpp fast_routines.S aR3000A.S aVUzerorec.S \ aVif.S $(archfiles)