diff --git a/common/include/Pcsx2Defs.h b/common/include/Pcsx2Defs.h
index 9060c0423c..60e7306de8 100644
--- a/common/include/Pcsx2Defs.h
+++ b/common/include/Pcsx2Defs.h
@@ -55,7 +55,7 @@
# else
# define jBREAKPOINT() ((void) *(volatile char *) 0)
# endif
-# define jASSUME(exp) do { if(exp) ; else jBREAKPOINT() } while(0);
+# define jASSUME(exp) do { if(exp) ; else jBREAKPOINT(); } while(0);
# endif
#endif
@@ -94,6 +94,13 @@ default: \
#define __naked __declspec(naked)
#define __unused /*unused*/
#define __noinline __declspec(noinline)
+
+// Don't know if there are Visual C++ equivalents of these.
+#define __hot
+#define __cold
+#define likely(x) x
+#define unlikely(x) x
+
#define CALLBACK __stdcall
#else
@@ -106,7 +113,7 @@ default: \
/* Test for GCC > 4.4.0; Should be adjusted when new versions come out */
#if GCC_VERSION >= 40400
#define THE_UNBEARABLE_LIGHTNESS_OF_BEING_GCC_4_4_0
-#define __nooptimization __attribute__((optimize("O0"))
+#define __nooptimization __attribute__((optimize("O0")))
#endif
/*
@@ -137,6 +144,10 @@ This theoretically unoptimizes. Not having much luck so far.
#define _inline __inline__ __attribute__((unused))
#define __forceinline __attribute__((always_inline,unused))
#define __noinline __attribute__((noinline))
+#define __hot __attribute__((hot))
+#define __cold __attribute__((cold))
+#define likely(x) __builtin_expect(!!(x), 1)
+#define unlikely(x) __builtin_expect(!!(x), 0)
#endif
#ifndef THE_UNBEARABLE_LIGHTNESS_OF_BEING_GCC_4_4_0
diff --git a/pcsx2/Linux/CpuDlg.cpp b/pcsx2/Linux/CpuDlg.cpp
index 4baca1577e..8982c63fc1 100644
--- a/pcsx2/Linux/CpuDlg.cpp
+++ b/pcsx2/Linux/CpuDlg.cpp
@@ -31,6 +31,10 @@ void OnCpu_Ok(GtkButton *button, gpointer user_data)
newopts |= PCSX2_VU0REC;
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lookup_widget(CpuDlg, "GtkCheckButton_VU1rec"))))
newopts |= PCSX2_VU1REC;
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lookup_widget(CpuDlg, "GtkCheckButton_microVU0rec"))))
+ newopts |= PCSX2_MICROVU0;
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lookup_widget(CpuDlg, "GtkCheckButton_microVU1rec"))))
+ newopts |= PCSX2_MICROVU1;
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lookup_widget(CpuDlg, "GtkCheckButton_MTGS"))))
newopts |= PCSX2_GSMULTITHREAD;
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lookup_widget(CpuDlg, "GtkRadioButton_LimitNormal"))))
@@ -39,7 +43,7 @@ void OnCpu_Ok(GtkButton *button, gpointer user_data)
newopts |= PCSX2_FRAMELIMIT_LIMIT;
else if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lookup_widget(CpuDlg, "GtkRadioButton_LimitFS"))))
newopts |= PCSX2_FRAMELIMIT_SKIP;
-
+
Config.CustomFps = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(lookup_widget(CpuDlg, "CustomFPSLimit")));
Config.CustomFrameSkip = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(lookup_widget(CpuDlg, "FrameThreshold")));
Config.CustomConsecutiveFrames = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(lookup_widget(CpuDlg, "FramesBeforeSkipping")));
@@ -82,6 +86,8 @@ void OnConf_Cpu(GtkMenuItem *menuitem, gpointer user_data)
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(lookup_widget(CpuDlg, "GtkCheckButton_EERec")), !!CHECK_EEREC);
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(lookup_widget(CpuDlg, "GtkCheckButton_VU0rec")), !!CHECK_VU0REC);
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(lookup_widget(CpuDlg, "GtkCheckButton_VU1rec")), !!CHECK_VU1REC);
+ gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(lookup_widget(CpuDlg, "GtkCheckButton_microVU0rec")), !!CHECK_MICROVU0);
+ gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(lookup_widget(CpuDlg, "GtkCheckButton_microVU1rec")), !!CHECK_MICROVU1);
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(lookup_widget(CpuDlg, "GtkCheckButton_MTGS")), !!CHECK_MULTIGS);
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(lookup_widget(CpuDlg, "GtkRadioButton_LimitNormal")), CHECK_FRAMELIMIT == PCSX2_FRAMELIMIT_NORMAL);
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(lookup_widget(CpuDlg, "GtkRadioButton_LimitLimit")), CHECK_FRAMELIMIT == PCSX2_FRAMELIMIT_LIMIT);
diff --git a/pcsx2/Linux/HacksDlg.cpp b/pcsx2/Linux/HacksDlg.cpp
index 0177d60930..470425cbcf 100644
--- a/pcsx2/Linux/HacksDlg.cpp
+++ b/pcsx2/Linux/HacksDlg.cpp
@@ -79,6 +79,9 @@ void on_Speed_Hacks(GtkMenuItem *menuitem, gpointer user_data)
set_checked(SpeedHacksDlg, "check_wait_cycles_sync_hack", Config.Hacks.WaitCycleExt);
set_checked(SpeedHacksDlg, "check_intc_sync_hack", Config.Hacks.INTCSTATSlow);
set_checked(SpeedHacksDlg, "check_idle_loop_fastforward", Config.Hacks.IdleLoopFF);
+ set_checked(SpeedHacksDlg, "check_microvu_flag_hack_1", Config.Hacks.vuFlagHack1);
+ set_checked(SpeedHacksDlg, "check_microvu_flag_hack_2", Config.Hacks.vuFlagHack2);
+ set_checked(SpeedHacksDlg, "check_microvu_min_max_hack", Config.Hacks.vuMinMax);
gtk_range_set_value(vuScale, Config.Hacks.VUCycleSteal);
on_vu_slider_changed(vuScale, NULL);
@@ -101,6 +104,9 @@ void on_Speed_Hack_OK(GtkButton *button, gpointer user_data)
newhacks.WaitCycleExt = is_checked(SpeedHacksDlg, "check_wait_cycles_sync_hack");
newhacks.INTCSTATSlow = is_checked(SpeedHacksDlg, "check_intc_sync_hack");
newhacks.IdleLoopFF = is_checked(SpeedHacksDlg, "check_idle_loop_fastforward");
+ newhacks.vuFlagHack1 = is_checked(SpeedHacksDlg, "check_microvu_flag_hack_1");
+ newhacks.vuFlagHack2 = is_checked(SpeedHacksDlg, "check_microvu_flag_hack_2");
+ newhacks.vuMinMax = is_checked(SpeedHacksDlg, "check_microvu_min_max_hack");
newhacks.VUCycleSteal = gtk_range_get_value(GTK_RANGE(lookup_widget(SpeedHacksDlg, "VUCycleHackScale")));
newhacks.EECycleRate = gtk_range_get_value(GTK_RANGE(lookup_widget(SpeedHacksDlg, "EECycleHackScale")));
diff --git a/pcsx2/Linux/interface.c b/pcsx2/Linux/interface.c
index 5c1fcf9ed7..0ed474d4b2 100644
--- a/pcsx2/Linux/interface.c
+++ b/pcsx2/Linux/interface.c
@@ -644,9 +644,19 @@ create_SpeedHacksDlg (void)
GtkWidget *check_idle_loop_fastforward;
GtkWidget *label110;
GtkWidget *hseparator1;
+ GtkWidget *frame41;
+ GtkWidget *alignment36;
+ GtkWidget *vbox75;
+ GtkWidget *check_microvu_flag_hack_1;
+ GtkWidget *check_microvu_flag_hack_2;
+ GtkWidget *check_microvu_min_max_hack;
+ GtkWidget *label113;
GtkWidget *dialog_action_area3;
GtkWidget *button99;
GtkWidget *button98;
+ GtkTooltips *tooltips;
+
+ tooltips = gtk_tooltips_new ();
SpeedHacksDlg = gtk_dialog_new ();
gtk_widget_set_name (SpeedHacksDlg, "SpeedHacksDlg");
@@ -717,7 +727,7 @@ create_SpeedHacksDlg (void)
gtk_box_pack_start (GTK_BOX (vbox61), label91, FALSE, FALSE, 0);
gtk_label_set_line_wrap (GTK_LABEL (label91), TRUE);
- label105 = gtk_label_new (_("EmotionEngine (EE) Sync Hacks"));
+ label105 = gtk_label_new (_("EmotionEngine (EE) Sync Hacks"));
gtk_widget_set_name (label105, "label105");
gtk_widget_show (label105);
gtk_frame_set_label_widget (GTK_FRAME (frame37), label105);
@@ -752,7 +762,7 @@ create_SpeedHacksDlg (void)
gtk_box_pack_start (GTK_BOX (vbox73), vu_cycle_stealing_label, FALSE, FALSE, 0);
gtk_label_set_line_wrap (GTK_LABEL (vu_cycle_stealing_label), TRUE);
- label111 = gtk_label_new (_("VU Cycle Stealing (Speedup for 3d geometry)"));
+ label111 = gtk_label_new (_("VU Cycle Stealing (Speedup for 3d geometry)"));
gtk_widget_set_name (label111, "label111");
gtk_widget_show (label111);
gtk_frame_set_label_widget (GTK_FRAME (frame39), label111);
@@ -767,8 +777,9 @@ create_SpeedHacksDlg (void)
gtk_widget_set_name (check_iop_cycle_rate, "check_iop_cycle_rate");
gtk_widget_show (check_iop_cycle_rate);
gtk_box_pack_start (GTK_BOX (vbox60), check_iop_cycle_rate, FALSE, FALSE, 0);
+ gtk_tooltips_set_tip (tooltips, check_iop_cycle_rate, _("Small speedup, and works well with most games."), NULL);
- label96 = gtk_label_new (_("Small speedup, and works well with most games,"));
+ label96 = gtk_label_new (_("Small speedup, and works well with most games."));
gtk_widget_set_name (label96, "label96");
gtk_widget_show (label96);
gtk_box_pack_start (GTK_BOX (vbox60), label96, FALSE, FALSE, 0);
@@ -778,6 +789,7 @@ create_SpeedHacksDlg (void)
gtk_widget_set_name (check_wait_cycles_sync_hack, "check_wait_cycles_sync_hack");
gtk_widget_show (check_wait_cycles_sync_hack);
gtk_box_pack_start (GTK_BOX (vbox60), check_wait_cycles_sync_hack, FALSE, FALSE, 0);
+ gtk_tooltips_set_tip (tooltips, check_wait_cycles_sync_hack, _("Small speedup. Works well with most games, but it may cause certain games to crash, or freeze up during bootup or stage changes."), NULL);
label97 = gtk_label_new (_("Small speedup. Works well with most games, but it may cause certain games to crash, or freeze up during bootup or stage changes."));
gtk_widget_set_name (label97, "label97");
@@ -789,6 +801,7 @@ create_SpeedHacksDlg (void)
gtk_widget_set_name (check_intc_sync_hack, "check_intc_sync_hack");
gtk_widget_show (check_intc_sync_hack);
gtk_box_pack_start (GTK_BOX (vbox60), check_intc_sync_hack, FALSE, FALSE, 0);
+ gtk_tooltips_set_tip (tooltips, check_intc_sync_hack, _("Huge speedup in many games, and a pretty high compatibility rate (some games still work better with EE sync hacks)."), NULL);
label101 = gtk_label_new (_("Huge speedup in many games, and a pretty high compatibility rate (some games still work better with EE sync hacks)."));
gtk_widget_set_name (label101, "label101");
@@ -805,8 +818,9 @@ create_SpeedHacksDlg (void)
gtk_widget_set_name (check_idle_loop_fastforward, "check_idle_loop_fastforward");
gtk_widget_show (check_idle_loop_fastforward);
gtk_box_pack_start (GTK_BOX (vbox71), check_idle_loop_fastforward, FALSE, FALSE, 0);
+ gtk_tooltips_set_tip (tooltips, check_idle_loop_fastforward, _("Speedup for a few games, including FFX with no known side effects."), NULL);
- label110 = gtk_label_new (_("Speedup for a few games, including FFX with no known side effects. More later."));
+ label110 = gtk_label_new (_("Speedup for a few games, including FFX with no known side effects."));
gtk_widget_set_name (label110, "label110");
gtk_widget_show (label110);
gtk_box_pack_start (GTK_BOX (vbox71), label110, FALSE, FALSE, 0);
@@ -817,6 +831,46 @@ create_SpeedHacksDlg (void)
gtk_widget_show (hseparator1);
gtk_box_pack_start (GTK_BOX (vbox60), hseparator1, FALSE, FALSE, 0);
+ frame41 = gtk_frame_new (NULL);
+ gtk_widget_set_name (frame41, "frame41");
+ gtk_widget_show (frame41);
+ gtk_box_pack_start (GTK_BOX (dialog_vbox3), frame41, TRUE, TRUE, 0);
+
+ alignment36 = gtk_alignment_new (0.5, 0.5, 1, 1);
+ gtk_widget_set_name (alignment36, "alignment36");
+ gtk_widget_show (alignment36);
+ gtk_container_add (GTK_CONTAINER (frame41), alignment36);
+ gtk_alignment_set_padding (GTK_ALIGNMENT (alignment36), 0, 0, 12, 0);
+
+ vbox75 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_set_name (vbox75, "vbox75");
+ gtk_widget_show (vbox75);
+ gtk_container_add (GTK_CONTAINER (alignment36), vbox75);
+
+ check_microvu_flag_hack_1 = gtk_check_button_new_with_mnemonic (_("Flag Hack 1 (microVU only)"));
+ gtk_widget_set_name (check_microvu_flag_hack_1, "check_microvu_flag_hack_1");
+ gtk_widget_show (check_microvu_flag_hack_1);
+ gtk_box_pack_start (GTK_BOX (vbox75), check_microvu_flag_hack_1, FALSE, FALSE, 0);
+ gtk_tooltips_set_tip (tooltips, check_microvu_flag_hack_1, _("Big Speedup and moderately compatible. May cause SPS and Infinite loop problems."), NULL);
+
+ check_microvu_flag_hack_2 = gtk_check_button_new_with_mnemonic (_("Flag Hack 2 (microVU only)"));
+ gtk_widget_set_name (check_microvu_flag_hack_2, "check_microvu_flag_hack_2");
+ gtk_widget_show (check_microvu_flag_hack_2);
+ gtk_box_pack_start (GTK_BOX (vbox75), check_microvu_flag_hack_2, FALSE, FALSE, 0);
+ gtk_tooltips_set_tip (tooltips, check_microvu_flag_hack_2, _("Big Speedup and moderately compatible. SuperVU does something similar by default."), NULL);
+
+ check_microvu_min_max_hack = gtk_check_button_new_with_mnemonic (_("Min / Max Hack (microVU only)"));
+ gtk_widget_set_name (check_microvu_min_max_hack, "check_microvu_min_max_hack");
+ gtk_widget_show (check_microvu_min_max_hack);
+ gtk_box_pack_start (GTK_BOX (vbox75), check_microvu_min_max_hack, FALSE, FALSE, 0);
+ gtk_tooltips_set_tip (tooltips, check_microvu_min_max_hack, _("Small Speedup. May cause SPS, hanging, and missing geometry."), NULL);
+
+ label113 = gtk_label_new (_("Vertex Unit (VU) Hacks"));
+ gtk_widget_set_name (label113, "label113");
+ gtk_widget_show (label113);
+ gtk_frame_set_label_widget (GTK_FRAME (frame41), label113);
+ gtk_label_set_use_markup (GTK_LABEL (label113), TRUE);
+
dialog_action_area3 = GTK_DIALOG (SpeedHacksDlg)->action_area;
gtk_widget_set_name (dialog_action_area3, "dialog_action_area3");
gtk_widget_show (dialog_action_area3);
@@ -882,9 +936,17 @@ create_SpeedHacksDlg (void)
GLADE_HOOKUP_OBJECT (SpeedHacksDlg, check_idle_loop_fastforward, "check_idle_loop_fastforward");
GLADE_HOOKUP_OBJECT (SpeedHacksDlg, label110, "label110");
GLADE_HOOKUP_OBJECT (SpeedHacksDlg, hseparator1, "hseparator1");
+ GLADE_HOOKUP_OBJECT (SpeedHacksDlg, frame41, "frame41");
+ GLADE_HOOKUP_OBJECT (SpeedHacksDlg, alignment36, "alignment36");
+ GLADE_HOOKUP_OBJECT (SpeedHacksDlg, vbox75, "vbox75");
+ GLADE_HOOKUP_OBJECT (SpeedHacksDlg, check_microvu_flag_hack_1, "check_microvu_flag_hack_1");
+ GLADE_HOOKUP_OBJECT (SpeedHacksDlg, check_microvu_flag_hack_2, "check_microvu_flag_hack_2");
+ GLADE_HOOKUP_OBJECT (SpeedHacksDlg, check_microvu_min_max_hack, "check_microvu_min_max_hack");
+ GLADE_HOOKUP_OBJECT (SpeedHacksDlg, label113, "label113");
GLADE_HOOKUP_OBJECT_NO_REF (SpeedHacksDlg, dialog_action_area3, "dialog_action_area3");
GLADE_HOOKUP_OBJECT (SpeedHacksDlg, button99, "button99");
GLADE_HOOKUP_OBJECT (SpeedHacksDlg, button98, "button98");
+ GLADE_HOOKUP_OBJECT_NO_REF (SpeedHacksDlg, tooltips, "tooltips");
return SpeedHacksDlg;
}
@@ -3859,6 +3921,12 @@ create_CpuDlg (void)
GtkWidget *GtkCheckButton_VU0rec;
GtkWidget *GtkCheckButton_VU1rec;
GtkWidget *label32;
+ GtkWidget *frame40;
+ GtkWidget *alignment35;
+ GtkWidget *vbox74;
+ GtkWidget *GtkCheckButton_microVU0rec;
+ GtkWidget *GtkCheckButton_microVU1rec;
+ GtkWidget *label112;
GtkWidget *GtkCheckButton_MTGS;
GtkWidget *vbox48;
GtkWidget *frame9;
@@ -3984,11 +4052,44 @@ create_CpuDlg (void)
gtk_widget_show (GtkCheckButton_VU1rec);
gtk_box_pack_start (GTK_BOX (vbox26), GtkCheckButton_VU1rec, FALSE, FALSE, 0);
- label32 = gtk_label_new (_("VU Recompilers - All options are set by default"));
+ label32 = gtk_label_new (_("VU Recompilers"));
gtk_widget_set_name (label32, "label32");
gtk_widget_show (label32);
gtk_frame_set_label_widget (GTK_FRAME (frame6), label32);
+ frame40 = gtk_frame_new (NULL);
+ gtk_widget_set_name (frame40, "frame40");
+ gtk_widget_show (frame40);
+ gtk_box_pack_start (GTK_BOX (vbox47), frame40, FALSE, FALSE, 0);
+ gtk_container_set_border_width (GTK_CONTAINER (frame40), 5);
+
+ alignment35 = gtk_alignment_new (0.5, 0.5, 1, 1);
+ gtk_widget_set_name (alignment35, "alignment35");
+ gtk_widget_show (alignment35);
+ gtk_container_add (GTK_CONTAINER (frame40), alignment35);
+ gtk_container_set_border_width (GTK_CONTAINER (alignment35), 5);
+
+ vbox74 = gtk_vbox_new (FALSE, 0);
+ gtk_widget_set_name (vbox74, "vbox74");
+ gtk_widget_show (vbox74);
+ gtk_container_add (GTK_CONTAINER (alignment35), vbox74);
+
+ GtkCheckButton_microVU0rec = gtk_check_button_new_with_mnemonic (_("microVU0 - Use microVU rec instead of VU0rec. ! Beta !"));
+ gtk_widget_set_name (GtkCheckButton_microVU0rec, "GtkCheckButton_microVU0rec");
+ gtk_widget_show (GtkCheckButton_microVU0rec);
+ gtk_box_pack_start (GTK_BOX (vbox74), GtkCheckButton_microVU0rec, FALSE, FALSE, 0);
+
+ GtkCheckButton_microVU1rec = gtk_check_button_new_with_mnemonic (_("microVU1 - Use microVU rec instead of VU1rec. ! Beta !"));
+ gtk_widget_set_name (GtkCheckButton_microVU1rec, "GtkCheckButton_microVU1rec");
+ gtk_widget_show (GtkCheckButton_microVU1rec);
+ gtk_box_pack_start (GTK_BOX (vbox74), GtkCheckButton_microVU1rec, FALSE, FALSE, 0);
+
+ label112 = gtk_label_new (_("microVU Recompilers - ! Beta !"));
+ gtk_widget_set_name (label112, "label112");
+ gtk_widget_show (label112);
+ gtk_frame_set_label_widget (GTK_FRAME (frame40), label112);
+ gtk_label_set_use_markup (GTK_LABEL (label112), TRUE);
+
GtkCheckButton_MTGS = gtk_check_button_new_with_mnemonic (_("Multi threaded GS mode (MTGS)\n (faster on dual core/HT CPUs, requires pcsx2 restart)"));
gtk_widget_set_name (GtkCheckButton_MTGS, "GtkCheckButton_MTGS");
gtk_widget_show (GtkCheckButton_MTGS);
@@ -4194,6 +4295,12 @@ create_CpuDlg (void)
GLADE_HOOKUP_OBJECT (CpuDlg, GtkCheckButton_VU0rec, "GtkCheckButton_VU0rec");
GLADE_HOOKUP_OBJECT (CpuDlg, GtkCheckButton_VU1rec, "GtkCheckButton_VU1rec");
GLADE_HOOKUP_OBJECT (CpuDlg, label32, "label32");
+ GLADE_HOOKUP_OBJECT (CpuDlg, frame40, "frame40");
+ GLADE_HOOKUP_OBJECT (CpuDlg, alignment35, "alignment35");
+ GLADE_HOOKUP_OBJECT (CpuDlg, vbox74, "vbox74");
+ GLADE_HOOKUP_OBJECT (CpuDlg, GtkCheckButton_microVU0rec, "GtkCheckButton_microVU0rec");
+ GLADE_HOOKUP_OBJECT (CpuDlg, GtkCheckButton_microVU1rec, "GtkCheckButton_microVU1rec");
+ GLADE_HOOKUP_OBJECT (CpuDlg, label112, "label112");
GLADE_HOOKUP_OBJECT (CpuDlg, GtkCheckButton_MTGS, "GtkCheckButton_MTGS");
GLADE_HOOKUP_OBJECT (CpuDlg, vbox48, "vbox48");
GLADE_HOOKUP_OBJECT (CpuDlg, frame9, "frame9");
diff --git a/pcsx2/Linux/pcsx2.glade b/pcsx2/Linux/pcsx2.glade
index 397d21bb1b..59dad5cd05 100644
--- a/pcsx2/Linux/pcsx2.glade
+++ b/pcsx2/Linux/pcsx2.glade
@@ -1394,7 +1394,7 @@ If you have problems, Disable all of these and try again.
True
- <b>EmotionEngine (EE) Sync Hacks</b>
+ EmotionEngine (EE) Sync Hacks
False
True
GTK_JUSTIFY_LEFT
@@ -1497,7 +1497,7 @@ If you have problems, Disable all of these and try again.
True
- <b>VU Cycle Stealing (Speedup for 3d geometry)</b>
+ VU Cycle Stealing (Speedup for 3d geometry)
False
True
GTK_JUSTIFY_LEFT
@@ -1540,6 +1540,7 @@ If you have problems, Disable all of these and try again.
True
+ Small speedup, and works well with most games.
True
Enable IOP x2 Cycle Rate
True
@@ -1559,7 +1560,7 @@ If you have problems, Disable all of these and try again.
True
- Small speedup, and works well with most games,
+ Small speedup, and works well with most games.
False
False
GTK_JUSTIFY_LEFT
@@ -1585,6 +1586,7 @@ If you have problems, Disable all of these and try again.
True
+ Small speedup. Works well with most games, but it may cause certain games to crash, or freeze up during bootup or stage changes.
True
WaitCycles Sync Hack
True
@@ -1630,6 +1632,7 @@ If you have problems, Disable all of these and try again.
True
+ Huge speedup in many games, and a pretty high compatibility rate (some games still work better with EE sync hacks).
True
INTC Sync Hack
True
@@ -1680,6 +1683,7 @@ If you have problems, Disable all of these and try again.
True
+ Speedup for a few games, including FFX with no known side effects.
True
Idle Loop Fast-Forward (experimental)
True
@@ -1699,7 +1703,7 @@ If you have problems, Disable all of these and try again.
True
- Speedup for a few games, including FFX with no known side effects. More later.
+ Speedup for a few games, including FFX with no known side effects.
False
False
GTK_JUSTIFY_LEFT
@@ -1759,6 +1763,125 @@ If you have problems, Disable all of these and try again.
False
+
+
+
+ True
+ 0
+ 0.5
+ GTK_SHADOW_ETCHED_IN
+
+
+
+ True
+ 0.5
+ 0.5
+ 1
+ 1
+ 0
+ 0
+ 12
+ 0
+
+
+
+ True
+ False
+ 0
+
+
+
+ True
+ Big Speedup and moderately compatible. May cause SPS and Infinite loop problems.
+ True
+ Flag Hack 1 (microVU only)
+ True
+ GTK_RELIEF_NORMAL
+ True
+ False
+ False
+ True
+
+
+ 0
+ False
+ False
+
+
+
+
+
+ True
+ Big Speedup and moderately compatible. SuperVU does something similar by default.
+ True
+ Flag Hack 2 (microVU only)
+ True
+ GTK_RELIEF_NORMAL
+ True
+ False
+ False
+ True
+
+
+ 0
+ False
+ False
+
+
+
+
+
+ True
+ Small Speedup. May cause SPS, hanging, and missing geometry.
+ True
+ Min / Max Hack (microVU only)
+ True
+ GTK_RELIEF_NORMAL
+ True
+ False
+ False
+ True
+
+
+ 0
+ False
+ False
+
+
+
+
+
+
+
+
+
+ True
+ Vertex Unit (VU) Hacks
+ False
+ True
+ GTK_JUSTIFY_LEFT
+ False
+ False
+ 0.5
+ 0.5
+ 0
+ 0
+ PANGO_ELLIPSIZE_NONE
+ -1
+ False
+ 0
+
+
+ label_item
+
+
+
+
+ 0
+ True
+ True
+
+
@@ -6718,7 +6841,7 @@ Version x.x
True
- VU Recompilers - All options are set by default
+ VU Recompilers
False
False
GTK_JUSTIFY_LEFT
@@ -6745,6 +6868,105 @@ Version x.x
+
+
+ 5
+ True
+ 0
+ 0.5
+ GTK_SHADOW_ETCHED_IN
+
+
+
+ 5
+ True
+ 0.5
+ 0.5
+ 1
+ 1
+ 0
+ 0
+ 0
+ 0
+
+
+
+ True
+ False
+ 0
+
+
+
+ True
+ True
+ microVU0 - Use microVU rec instead of VU0rec. ! Beta !
+ True
+ GTK_RELIEF_NORMAL
+ True
+ False
+ False
+ True
+
+
+ 0
+ False
+ False
+
+
+
+
+
+ True
+ True
+ microVU1 - Use microVU rec instead of VU1rec. ! Beta !
+ True
+ GTK_RELIEF_NORMAL
+ True
+ False
+ False
+ True
+
+
+ 0
+ False
+ False
+
+
+
+
+
+
+
+
+
+ True
+ microVU Recompilers - ! Beta !
+ False
+ True
+ GTK_JUSTIFY_LEFT
+ False
+ False
+ 0.5
+ 0.5
+ 0
+ 0
+ PANGO_ELLIPSIZE_NONE
+ -1
+ False
+ 0
+
+
+ label_item
+
+
+
+
+ 0
+ False
+ False
+
+
+
True
diff --git a/pcsx2/x86/iVUzerorec.cpp b/pcsx2/x86/iVUzerorec.cpp
index 4dbb9c6e3e..105f6a61e5 100644
--- a/pcsx2/x86/iVUzerorec.cpp
+++ b/pcsx2/x86/iVUzerorec.cpp
@@ -343,7 +343,12 @@ void SuperVUAlloc(int vuindex)
{
// upper 4 bits must be zero!
// Changed "first try base" to 0xb800000, since 0x0c000000 liked to fail a lot. (air)
+ // With microVU as optional now, Linux fails with 0x0e000000, and prefers 0x0c000000. --arcum42
+#ifdef __LINUX__
+ s_recVUMem = SysMmapEx(0x0c000000, VU_EXESIZE, 0x10000000, "SuperVUAlloc");
+#else
s_recVUMem = SysMmapEx(0x0e000000, VU_EXESIZE, 0x10000000, "SuperVUAlloc");
+#endif
if (s_recVUMem == NULL)
{
diff --git a/plugins/GSnull/GifTransfer.cpp b/plugins/GSnull/GifTransfer.cpp
index 34e69fa3bb..1d81988b07 100644
--- a/plugins/GSnull/GifTransfer.cpp
+++ b/plugins/GSnull/GifTransfer.cpp
@@ -37,8 +37,6 @@ PCSX2_ALIGNED16( u8 g_RealGSMem[0x2000] );
static void RegHandlerSIGNAL(const u32* data)
{
- //MTGS_LOG("MTGS SIGNAL data %x_%x CSRw %x\n",data[0], data[1], CSRw);
-
GSSIGLBLID->SIGID = (GSSIGLBLID->SIGID&~data[1])|(data[0]&data[1]);
if ((CSRw & 0x1)) GSCSRr |= 1; // signal
@@ -48,8 +46,6 @@ static void RegHandlerSIGNAL(const u32* data)
static void RegHandlerFINISH(const u32* data)
{
- //MTGS_LOG("MTGS FINISH data %x_%x CSRw %x\n",data[0], data[1], CSRw);
-
if ((CSRw & 0x2)) GSCSRr |= 2; // finish
if (!(GSIMR & 0x200) ) GSirq();
diff --git a/plugins/zeropad/Windows/win.cpp b/plugins/zeropad/Windows/win.cpp
index 40e058721a..959f65fedc 100644
--- a/plugins/zeropad/Windows/win.cpp
+++ b/plugins/zeropad/Windows/win.cpp
@@ -29,142 +29,150 @@
using namespace std;
-HINSTANCE hInst=NULL;
+HINSTANCE hInst = NULL;
static pthread_spinlock_t s_mutexStatus;
static u32 s_keyPress[2], s_keyRelease[2];
extern u16 status[2];
extern string s_strIniPath;
LRESULT WINAPI PADwndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
-WNDPROC GSwndProc=NULL;
-HWND GShwnd=NULL;
+WNDPROC GSwndProc = NULL;
+HWND GShwnd = NULL;
extern keyEvent event;
void SaveConfig()
{
- char *szTemp;
- char szIniFile[256], szValue[256], szProf[256];
- int i, j;
+ char *szTemp;
+ char szIniFile[256], szValue[256], szProf[256];
+ int i, j;
- GetModuleFileName(GetModuleHandle((LPCSTR)hInst), szIniFile, 256);
- szTemp = strrchr(szIniFile, '\\');
+ GetModuleFileName(GetModuleHandle((LPCSTR)hInst), szIniFile, 256);
+ szTemp = strrchr(szIniFile, '\\');
- if(!szTemp) return;
- strcpy(szTemp, "\\inis\\zeropad.ini");
+ if (!szTemp) return;
+ strcpy(szTemp, "\\inis\\zeropad.ini");
- for (j=0; j<2; j++) {
- for (i=0; i=0x60 && key<=0x69) {
- sprintf(buff, "NumPad %c", '0' + key - 0x60);
- }
- else sprintf(buff, "%c", key);
- }
- }
- else if (key >= 0x1000 && key < 0x2000)
- {
- sprintf (buff, "J%d_%d", (key & 0xfff) / 0x100, (key & 0xff) + 1);
- }
- else if (key >= 0x2000 && key < 0x3000)
- {
- static const char name[][4] = { "MIN", "MAX" };
- const int axis = (key & 0xff);
- sprintf (buff, "J%d_AXIS%d_%s", (key & 0xfff) / 0x100, axis / 2, name[axis % 2]);
- if (index >= 17 && index <= 20)
- buff[strlen (buff) -4] = '\0';
- }
- else if (key >= 0x3000 && key < 0x4000)
- {
- static const char name[][7] = { "FOWARD", "RIGHT", "BACK", "LEFT" };
- const int pov = (key & 0xff);
- sprintf (buff, "J%d_POV%d_%s", (key & 0xfff) / 0x100, pov /4, name[pov % 4]);
- }
+ const int key = conf.keys[pad][index];
+ char buff[16] = "NONE)";
+ if (key < 0x100)
+ {
+ if (key == 0)
+ strcpy(buff, "NONE");
+ else
+ {
+ if (key >= 0x60 && key <= 0x69)
+ {
+ sprintf(buff, "NumPad %c", '0' + key - 0x60);
+ }
+ else sprintf(buff, "%c", key);
+ }
+ }
+ else if (key >= 0x1000 && key < 0x2000)
+ {
+ sprintf(buff, "J%d_%d", (key & 0xfff) / 0x100, (key & 0xff) + 1);
+ }
+ else if (key >= 0x2000 && key < 0x3000)
+ {
+ static const char name[][4] = { "MIN", "MAX" };
+ const int axis = (key & 0xff);
+ sprintf(buff, "J%d_AXIS%d_%s", (key & 0xfff) / 0x100, axis / 2, name[axis % 2]);
+ if (index >= 17 && index <= 20)
+ buff[strlen(buff) -4] = '\0';
+ }
+ else if (key >= 0x3000 && key < 0x4000)
+ {
+ static const char name[][7] = { "FOWARD", "RIGHT", "BACK", "LEFT" };
+ const int pov = (key & 0xff);
+ sprintf(buff, "J%d_POV%d_%s", (key & 0xfff) / 0x100, pov / 4, name[pov % 4]);
+ }
- return buff;
+ return buff;
}
-BOOL CALLBACK ConfigureDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {
- HWND hWC;
- TCITEM tcI;
- int i,key, numkeys;
- u8* pkeyboard;
- static int disabled=0;
- static int padn=0;
+BOOL CALLBACK ConfigureDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam)
+{
+ HWND hWC;
+ TCITEM tcI;
+ int i, key, numkeys;
+ u8* pkeyboard;
+ static int disabled = 0;
+ static int padn = 0;
- switch(uMsg) {
- case WM_INITDIALOG:
- LoadConfig();
- padn = 0;
- if (conf.log) CheckDlgButton(hW, IDC_LOG, TRUE);
+ switch (uMsg)
+ {
+ case WM_INITDIALOG:
+ LoadConfig();
+ padn = 0;
+ if (conf.log) CheckDlgButton(hW, IDC_LOG, TRUE);
- for (i=0; i