mirror of https://github.com/PCSX2/pcsx2.git
Linux: Hack microVU into the Gui.
git-svn-id: http://pcsx2.googlecode.com/svn/trunk@1275 96395faa-99c1-11dd-bbfe-3dabce05a288
This commit is contained in:
parent
477f5fa674
commit
e8ae911664
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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")));
|
||||
|
|
|
@ -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 (_("<b>EmotionEngine (EE) Sync Hacks</b>"));
|
||||
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 (_("<b>VU Cycle Stealing (Speedup for 3d geometry)</b>"));
|
||||
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");
|
||||
|
|
|
@ -1394,7 +1394,7 @@ If you have problems, Disable all of these and try again.</property>
|
|||
<child>
|
||||
<widget class="GtkLabel" id="label105">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes"><b>EmotionEngine (EE) Sync Hacks</b></property>
|
||||
<property name="label" translatable="yes">EmotionEngine (EE) Sync Hacks</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
|
@ -1497,7 +1497,7 @@ If you have problems, Disable all of these and try again.</property>
|
|||
<child>
|
||||
<widget class="GtkLabel" id="label111">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes"><b>VU Cycle Stealing (Speedup for 3d geometry)</b></property>
|
||||
<property name="label" translatable="yes">VU Cycle Stealing (Speedup for 3d geometry)</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
|
@ -1540,6 +1540,7 @@ If you have problems, Disable all of these and try again.</property>
|
|||
<child>
|
||||
<widget class="GtkCheckButton" id="check_iop_cycle_rate">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Small speedup, and works well with most games.</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes">Enable IOP x2 Cycle Rate</property>
|
||||
<property name="use_underline">True</property>
|
||||
|
@ -1559,7 +1560,7 @@ If you have problems, Disable all of these and try again.</property>
|
|||
<child>
|
||||
<widget class="GtkLabel" id="label96">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Small speedup, and works well with most games,</property>
|
||||
<property name="label" translatable="yes">Small speedup, and works well with most games.</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
|
@ -1585,6 +1586,7 @@ If you have problems, Disable all of these and try again.</property>
|
|||
<child>
|
||||
<widget class="GtkCheckButton" id="check_wait_cycles_sync_hack">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Small speedup. Works well with most games, but it may cause certain games to crash, or freeze up during bootup or stage changes.</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes">WaitCycles Sync Hack</property>
|
||||
<property name="use_underline">True</property>
|
||||
|
@ -1630,6 +1632,7 @@ If you have problems, Disable all of these and try again.</property>
|
|||
<child>
|
||||
<widget class="GtkCheckButton" id="check_intc_sync_hack">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Huge speedup in many games, and a pretty high compatibility rate (some games still work better with EE sync hacks).</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes">INTC Sync Hack</property>
|
||||
<property name="use_underline">True</property>
|
||||
|
@ -1680,6 +1683,7 @@ If you have problems, Disable all of these and try again.</property>
|
|||
<child>
|
||||
<widget class="GtkCheckButton" id="check_idle_loop_fastforward">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Speedup for a few games, including FFX with no known side effects.</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes">Idle Loop Fast-Forward (experimental)</property>
|
||||
<property name="use_underline">True</property>
|
||||
|
@ -1699,7 +1703,7 @@ If you have problems, Disable all of these and try again.</property>
|
|||
<child>
|
||||
<widget class="GtkLabel" id="label110">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Speedup for a few games, including FFX with no known side effects. More later.</property>
|
||||
<property name="label" translatable="yes">Speedup for a few games, including FFX with no known side effects.</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
|
@ -1759,6 +1763,125 @@ If you have problems, Disable all of these and try again.</property>
|
|||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkFrame" id="frame41">
|
||||
<property name="visible">True</property>
|
||||
<property name="label_xalign">0</property>
|
||||
<property name="label_yalign">0.5</property>
|
||||
<property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkAlignment" id="alignment36">
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xscale">1</property>
|
||||
<property name="yscale">1</property>
|
||||
<property name="top_padding">0</property>
|
||||
<property name="bottom_padding">0</property>
|
||||
<property name="left_padding">12</property>
|
||||
<property name="right_padding">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox75">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkCheckButton" id="check_microvu_flag_hack_1">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Big Speedup and moderately compatible. May cause SPS and Infinite loop problems.</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes">Flag Hack 1 (microVU only)</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<property name="active">False</property>
|
||||
<property name="inconsistent">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkCheckButton" id="check_microvu_flag_hack_2">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Big Speedup and moderately compatible. SuperVU does something similar by default.</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes">Flag Hack 2 (microVU only)</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<property name="active">False</property>
|
||||
<property name="inconsistent">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkCheckButton" id="check_microvu_min_max_hack">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Small Speedup. May cause SPS, hanging, and missing geometry.</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes">Min / Max Hack (microVU only)</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<property name="active">False</property>
|
||||
<property name="inconsistent">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label113">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Vertex Unit (VU) Hacks</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="type">label_item</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
|
@ -6718,7 +6841,7 @@ Version x.x</property>
|
|||
<child>
|
||||
<widget class="GtkLabel" id="label32">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">VU Recompilers - All options are set by default</property>
|
||||
<property name="label" translatable="yes">VU Recompilers</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
|
@ -6745,6 +6868,105 @@ Version x.x</property>
|
|||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkFrame" id="frame40">
|
||||
<property name="border_width">5</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="label_xalign">0</property>
|
||||
<property name="label_yalign">0.5</property>
|
||||
<property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkAlignment" id="alignment35">
|
||||
<property name="border_width">5</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xscale">1</property>
|
||||
<property name="yscale">1</property>
|
||||
<property name="top_padding">0</property>
|
||||
<property name="bottom_padding">0</property>
|
||||
<property name="left_padding">0</property>
|
||||
<property name="right_padding">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox74">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkCheckButton" id="GtkCheckButton_microVU0rec">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes">microVU0 - Use microVU rec instead of VU0rec. ! Beta !</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<property name="active">False</property>
|
||||
<property name="inconsistent">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkCheckButton" id="GtkCheckButton_microVU1rec">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes">microVU1 - Use microVU rec instead of VU1rec. ! Beta !</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<property name="active">False</property>
|
||||
<property name="inconsistent">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label112">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">microVU Recompilers - ! Beta !</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">True</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
|
||||
<property name="width_chars">-1</property>
|
||||
<property name="single_line_mode">False</property>
|
||||
<property name="angle">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="type">label_item</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkCheckButton" id="GtkCheckButton_MTGS">
|
||||
<property name="visible">True</property>
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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();
|
||||
|
|
|
@ -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<PADKEYS; i++) {
|
||||
sprintf(szProf, "%d_%d", j, i);
|
||||
sprintf(szValue, "%d", conf.keys[j][i]);
|
||||
WritePrivateProfileString("Interface", szProf,szValue,szIniFile);
|
||||
}
|
||||
}
|
||||
for (j = 0; j < 2; j++)
|
||||
{
|
||||
for (i = 0; i < PADKEYS; i++)
|
||||
{
|
||||
sprintf(szProf, "%d_%d", j, i);
|
||||
sprintf(szValue, "%d", conf.keys[j][i]);
|
||||
WritePrivateProfileString("Interface", szProf, szValue, szIniFile);
|
||||
}
|
||||
}
|
||||
|
||||
sprintf(szValue,"%u",conf.log);
|
||||
WritePrivateProfileString("Interface", "Logging",szValue,szIniFile);
|
||||
sprintf(szValue, "%u", conf.log);
|
||||
WritePrivateProfileString("Interface", "Logging", szValue, szIniFile);
|
||||
}
|
||||
|
||||
void LoadConfig()
|
||||
{
|
||||
FILE *fp;
|
||||
char *szTemp;
|
||||
char szIniFile[256], szValue[256], szProf[256];
|
||||
int i, j;
|
||||
FILE *fp;
|
||||
char *szTemp;
|
||||
char szIniFile[256], szValue[256], szProf[256];
|
||||
int i, j;
|
||||
|
||||
memset(&conf, 0, sizeof(conf));
|
||||
memset(&conf, 0, sizeof(conf));
|
||||
#ifdef _WIN32
|
||||
conf.keys[0][0] = 'W'; // L2
|
||||
conf.keys[0][1] = 'O'; // R2
|
||||
conf.keys[0][2] = 'A'; // L1
|
||||
conf.keys[0][3] = ';'; // R1
|
||||
conf.keys[0][4] = 'I'; // TRIANGLE
|
||||
conf.keys[0][5] = 'L'; // CIRCLE
|
||||
conf.keys[0][6] = 'K'; // CROSS
|
||||
conf.keys[0][7] = 'J'; // SQUARE
|
||||
conf.keys[0][8] = 'V'; // SELECT
|
||||
conf.keys[0][11] = 'N'; // START
|
||||
conf.keys[0][12] = 'E'; // UP
|
||||
conf.keys[0][13] = 'F'; // RIGHT
|
||||
conf.keys[0][14] = 'D'; // DOWN
|
||||
conf.keys[0][15] = 'S'; // LEFT
|
||||
conf.keys[0][0] = 'W'; // L2
|
||||
conf.keys[0][1] = 'O'; // R2
|
||||
conf.keys[0][2] = 'A'; // L1
|
||||
conf.keys[0][3] = ';'; // R1
|
||||
conf.keys[0][4] = 'I'; // TRIANGLE
|
||||
conf.keys[0][5] = 'L'; // CIRCLE
|
||||
conf.keys[0][6] = 'K'; // CROSS
|
||||
conf.keys[0][7] = 'J'; // SQUARE
|
||||
conf.keys[0][8] = 'V'; // SELECT
|
||||
conf.keys[0][11] = 'N'; // START
|
||||
conf.keys[0][12] = 'E'; // UP
|
||||
conf.keys[0][13] = 'F'; // RIGHT
|
||||
conf.keys[0][14] = 'D'; // DOWN
|
||||
conf.keys[0][15] = 'S'; // LEFT
|
||||
#endif
|
||||
conf.log = 0;
|
||||
conf.log = 0;
|
||||
|
||||
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");
|
||||
fp=fopen("inis\\zeropad.ini","rt");//check if usbnull.ini really exists
|
||||
if (!fp) {
|
||||
CreateDirectory("inis",NULL);
|
||||
SaveConfig();//save and return
|
||||
return ;
|
||||
}
|
||||
fclose(fp);
|
||||
if (!szTemp) return ;
|
||||
strcpy(szTemp, "\\inis\\zeropad.ini");
|
||||
fp = fopen("inis\\zeropad.ini", "rt");//check if usbnull.ini really exists
|
||||
if (!fp)
|
||||
{
|
||||
CreateDirectory("inis", NULL);
|
||||
SaveConfig();//save and return
|
||||
return ;
|
||||
}
|
||||
fclose(fp);
|
||||
|
||||
for (j=0; j<2; j++) {
|
||||
for (i=0; i<PADKEYS; i++) {
|
||||
sprintf(szProf, "%d_%d", j, i);
|
||||
GetPrivateProfileString("Interface", szProf, NULL, szValue, 20, szIniFile);
|
||||
conf.keys[j][i] = strtoul(szValue, NULL, 10);
|
||||
}
|
||||
}
|
||||
for (j = 0; j < 2; j++)
|
||||
{
|
||||
for (i = 0; i < PADKEYS; i++)
|
||||
{
|
||||
sprintf(szProf, "%d_%d", j, i);
|
||||
GetPrivateProfileString("Interface", szProf, NULL, szValue, 20, szIniFile);
|
||||
conf.keys[j][i] = strtoul(szValue, NULL, 10);
|
||||
}
|
||||
}
|
||||
|
||||
GetPrivateProfileString("Interface", "Logging", NULL, szValue, 20, szIniFile);
|
||||
conf.log = strtoul(szValue, NULL, 10);
|
||||
GetPrivateProfileString("Interface", "Logging", NULL, szValue, 20, szIniFile);
|
||||
conf.log = strtoul(szValue, NULL, 10);
|
||||
}
|
||||
|
||||
void SysMessage(char *fmt, ...) {
|
||||
va_list list;
|
||||
char tmp[512];
|
||||
void SysMessage(char *fmt, ...)
|
||||
{
|
||||
va_list list;
|
||||
char tmp[512];
|
||||
|
||||
va_start(list,fmt);
|
||||
vsprintf(tmp,fmt,list);
|
||||
va_end(list);
|
||||
MessageBox(0, tmp, "PADwinKeyb Msg", 0);
|
||||
va_start(list, fmt);
|
||||
vsprintf(tmp, fmt, list);
|
||||
va_end(list);
|
||||
MessageBox(0, tmp, "PADwinKeyb Msg", 0);
|
||||
}
|
||||
|
||||
s32 _PADopen(void *pDsp)
|
||||
{
|
||||
memset(&event, 0, sizeof(event));
|
||||
LoadConfig();
|
||||
pthread_spin_init(&s_mutexStatus, PTHREAD_PROCESS_PRIVATE);
|
||||
s_keyPress[0] = s_keyPress[1] = 0;
|
||||
s_keyRelease[0] = s_keyRelease[1] = 0;
|
||||
|
||||
if( GShwnd != NULL && GSwndProc != NULL ) {
|
||||
// revert
|
||||
SetWindowLongPtr(GShwnd, GWLP_WNDPROC, (LPARAM)(WNDPROC)(GSwndProc));
|
||||
}
|
||||
memset(&event, 0, sizeof(event));
|
||||
LoadConfig();
|
||||
pthread_spin_init(&s_mutexStatus, PTHREAD_PROCESS_PRIVATE);
|
||||
s_keyPress[0] = s_keyPress[1] = 0;
|
||||
s_keyRelease[0] = s_keyRelease[1] = 0;
|
||||
|
||||
GShwnd = (HWND)*(long*)pDsp;
|
||||
GSwndProc = (WNDPROC)GetWindowLongPtr(GShwnd, GWLP_WNDPROC);
|
||||
GSwndProc = ((WNDPROC)SetWindowLongPtr(GShwnd, GWLP_WNDPROC, (LPARAM)(WNDPROC)(PADwndProc)));
|
||||
if (GShwnd != NULL && GSwndProc != NULL)
|
||||
{
|
||||
// revert
|
||||
SetWindowLongPtr(GShwnd, GWLP_WNDPROC, (LPARAM)(WNDPROC)(GSwndProc));
|
||||
}
|
||||
|
||||
return 0;
|
||||
GShwnd = (HWND) * (long*)pDsp;
|
||||
GSwndProc = (WNDPROC)GetWindowLongPtr(GShwnd, GWLP_WNDPROC);
|
||||
GSwndProc = ((WNDPROC)SetWindowLongPtr(GShwnd, GWLP_WNDPROC, (LPARAM)(WNDPROC)(PADwndProc)));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void _PADclose()
|
||||
{
|
||||
if( GShwnd != NULL && GSwndProc != NULL ) {
|
||||
SetWindowLongPtr(GShwnd, GWLP_WNDPROC, (LPARAM)(WNDPROC)(GSwndProc));
|
||||
GSwndProc = NULL;
|
||||
GShwnd = NULL;
|
||||
}
|
||||
pthread_spin_destroy(&s_mutexStatus);
|
||||
if (GShwnd != NULL && GSwndProc != NULL)
|
||||
{
|
||||
SetWindowLongPtr(GShwnd, GWLP_WNDPROC, (LPARAM)(WNDPROC)(GSwndProc));
|
||||
GSwndProc = NULL;
|
||||
GShwnd = NULL;
|
||||
}
|
||||
pthread_spin_destroy(&s_mutexStatus);
|
||||
}
|
||||
|
||||
void _PADupdate(int pad)
|
||||
{
|
||||
pthread_spin_lock(&s_mutexStatus);
|
||||
status[pad] |= s_keyRelease[pad];
|
||||
status[pad] &= ~s_keyPress[pad];
|
||||
s_keyRelease[pad] = 0;
|
||||
s_keyPress[pad] = 0;
|
||||
pthread_spin_unlock(&s_mutexStatus);
|
||||
pthread_spin_lock(&s_mutexStatus);
|
||||
status[pad] |= s_keyRelease[pad];
|
||||
status[pad] &= ~s_keyPress[pad];
|
||||
s_keyRelease[pad] = 0;
|
||||
s_keyPress[pad] = 0;
|
||||
pthread_spin_unlock(&s_mutexStatus);
|
||||
}
|
||||
|
||||
void CALLBACK PADupdate(int pad)
|
||||
|
@ -173,287 +181,315 @@ void CALLBACK PADupdate(int pad)
|
|||
|
||||
LRESULT WINAPI PADwndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
int i,pad,keyPress[2]={0},keyRelease[2]={0};
|
||||
static bool lbutton=false,rbutton=false;
|
||||
int i, pad, keyPress[2] = {0}, keyRelease[2] = {0};
|
||||
static bool lbutton = false, rbutton = false;
|
||||
|
||||
switch (msg) {
|
||||
case WM_KEYDOWN:
|
||||
if (lParam & 0x40000000)
|
||||
return TRUE;
|
||||
switch (msg)
|
||||
{
|
||||
case WM_KEYDOWN:
|
||||
if (lParam & 0x40000000)
|
||||
return TRUE;
|
||||
|
||||
for(pad = 0; pad < 2; ++pad ) {
|
||||
for (i=0; i<PADKEYS; i++) {
|
||||
if (wParam == conf.keys[pad][i]) {
|
||||
keyPress[pad] |=(1<<i);
|
||||
keyRelease[pad] &=~(1<<i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (pad = 0; pad < 2; ++pad)
|
||||
{
|
||||
for (i = 0; i < PADKEYS; i++)
|
||||
{
|
||||
if (wParam == conf.keys[pad][i])
|
||||
{
|
||||
keyPress[pad] |= (1 << i);
|
||||
keyRelease[pad] &= ~(1 << i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
event.evt = KEYPRESS;
|
||||
event.key = wParam;
|
||||
break;
|
||||
event.evt = KEYPRESS;
|
||||
event.key = wParam;
|
||||
break;
|
||||
|
||||
case WM_KEYUP:
|
||||
for(pad = 0; pad < 2; ++pad ) {
|
||||
for (i=0; i<PADKEYS; i++) {
|
||||
if (wParam == conf.keys[pad][i]) {
|
||||
keyPress[pad] &=~(1<<i);
|
||||
keyRelease[pad] |= (1<<i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
case WM_KEYUP:
|
||||
for (pad = 0; pad < 2; ++pad)
|
||||
{
|
||||
for (i = 0; i < PADKEYS; i++)
|
||||
{
|
||||
if (wParam == conf.keys[pad][i])
|
||||
{
|
||||
keyPress[pad] &= ~(1 << i);
|
||||
keyRelease[pad] |= (1 << i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
event.evt = KEYRELEASE;
|
||||
event.key = wParam;
|
||||
break;
|
||||
event.evt = KEYRELEASE;
|
||||
event.key = wParam;
|
||||
break;
|
||||
|
||||
case WM_LBUTTONDOWN:
|
||||
lbutton = true;
|
||||
break;
|
||||
case WM_LBUTTONDOWN:
|
||||
lbutton = true;
|
||||
break;
|
||||
|
||||
case WM_LBUTTONUP:
|
||||
g_lanalog[0].x = 0x80;
|
||||
g_lanalog[0].y = 0x80;
|
||||
g_lanalog[1].x = 0x80;
|
||||
g_lanalog[1].y = 0x80;
|
||||
lbutton = false;
|
||||
break;
|
||||
case WM_LBUTTONUP:
|
||||
g_lanalog[0].x = 0x80;
|
||||
g_lanalog[0].y = 0x80;
|
||||
g_lanalog[1].x = 0x80;
|
||||
g_lanalog[1].y = 0x80;
|
||||
lbutton = false;
|
||||
break;
|
||||
|
||||
case WM_RBUTTONDOWN:
|
||||
rbutton = true;
|
||||
break;
|
||||
case WM_RBUTTONDOWN:
|
||||
rbutton = true;
|
||||
break;
|
||||
|
||||
case WM_RBUTTONUP:
|
||||
g_ranalog[0].x = 0x80;
|
||||
g_ranalog[0].y = 0x80;
|
||||
g_ranalog[1].x = 0x80;
|
||||
g_ranalog[1].y = 0x80;
|
||||
rbutton = false;
|
||||
break;
|
||||
case WM_RBUTTONUP:
|
||||
g_ranalog[0].x = 0x80;
|
||||
g_ranalog[0].y = 0x80;
|
||||
g_ranalog[1].x = 0x80;
|
||||
g_ranalog[1].y = 0x80;
|
||||
rbutton = false;
|
||||
break;
|
||||
|
||||
case WM_MOUSEMOVE:
|
||||
if(lbutton)
|
||||
{
|
||||
g_lanalog[0].x = LOWORD(lParam) & 254;
|
||||
g_lanalog[0].y = HIWORD(lParam) & 254;
|
||||
g_lanalog[1].x = LOWORD(lParam) & 254;
|
||||
g_lanalog[1].y = HIWORD(lParam) & 254;
|
||||
}
|
||||
if(rbutton)
|
||||
{
|
||||
g_ranalog[0].x = LOWORD(lParam) & 254;
|
||||
g_ranalog[0].y = HIWORD(lParam) & 254;
|
||||
g_ranalog[1].x = LOWORD(lParam) & 254;
|
||||
g_ranalog[1].y = HIWORD(lParam) & 254;
|
||||
}
|
||||
break;
|
||||
case WM_MOUSEMOVE:
|
||||
if (lbutton)
|
||||
{
|
||||
g_lanalog[0].x = LOWORD(lParam) & 254;
|
||||
g_lanalog[0].y = HIWORD(lParam) & 254;
|
||||
g_lanalog[1].x = LOWORD(lParam) & 254;
|
||||
g_lanalog[1].y = HIWORD(lParam) & 254;
|
||||
}
|
||||
if (rbutton)
|
||||
{
|
||||
g_ranalog[0].x = LOWORD(lParam) & 254;
|
||||
g_ranalog[0].y = HIWORD(lParam) & 254;
|
||||
g_ranalog[1].x = LOWORD(lParam) & 254;
|
||||
g_ranalog[1].y = HIWORD(lParam) & 254;
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_DESTROY:
|
||||
case WM_QUIT:
|
||||
event.evt = KEYPRESS;
|
||||
event.key = VK_ESCAPE;
|
||||
return GSwndProc(hWnd, msg, wParam, lParam);
|
||||
case WM_DESTROY:
|
||||
case WM_QUIT:
|
||||
event.evt = KEYPRESS;
|
||||
event.key = VK_ESCAPE;
|
||||
return GSwndProc(hWnd, msg, wParam, lParam);
|
||||
|
||||
default:
|
||||
return GSwndProc(hWnd, msg, wParam, lParam);
|
||||
}
|
||||
default:
|
||||
return GSwndProc(hWnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
pthread_spin_lock(&s_mutexStatus);
|
||||
for(pad = 0; pad < 2; ++pad ) {
|
||||
s_keyPress[pad] |= keyPress[pad];
|
||||
s_keyPress[pad] &= ~keyRelease[pad];
|
||||
s_keyRelease[pad] |= keyRelease[pad];
|
||||
s_keyRelease[pad] &= ~keyPress[pad];
|
||||
}
|
||||
pthread_spin_unlock(&s_mutexStatus);
|
||||
pthread_spin_lock(&s_mutexStatus);
|
||||
for (pad = 0; pad < 2; ++pad)
|
||||
{
|
||||
s_keyPress[pad] |= keyPress[pad];
|
||||
s_keyPress[pad] &= ~keyRelease[pad];
|
||||
s_keyRelease[pad] |= keyRelease[pad];
|
||||
s_keyRelease[pad] &= ~keyPress[pad];
|
||||
}
|
||||
pthread_spin_unlock(&s_mutexStatus);
|
||||
|
||||
return TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
string GetKeyLabel(const int pad, const int index)
|
||||
{
|
||||
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]);
|
||||
}
|
||||
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<PADKEYS; i++) {
|
||||
hWC = GetDlgItem(hW, IDC_L2 + i*2);
|
||||
Button_SetText(hWC, GetKeyLabel(padn, i).c_str());
|
||||
}
|
||||
for (i = 0; i < PADKEYS; i++)
|
||||
{
|
||||
hWC = GetDlgItem(hW, IDC_L2 + i * 2);
|
||||
Button_SetText(hWC, GetKeyLabel(padn, i).c_str());
|
||||
}
|
||||
|
||||
hWC = GetDlgItem(hW, IDC_TABC);
|
||||
hWC = GetDlgItem(hW, IDC_TABC);
|
||||
|
||||
tcI.mask = TCIF_TEXT;
|
||||
tcI.pszText = "PAD 1";
|
||||
tcI.mask = TCIF_TEXT;
|
||||
tcI.pszText = "PAD 1";
|
||||
|
||||
TabCtrl_InsertItem(hWC, 0, &tcI);
|
||||
TabCtrl_InsertItem(hWC, 0, &tcI);
|
||||
|
||||
tcI.mask = TCIF_TEXT;
|
||||
tcI.pszText = "PAD 2";
|
||||
tcI.mask = TCIF_TEXT;
|
||||
tcI.pszText = "PAD 2";
|
||||
|
||||
TabCtrl_InsertItem(hWC, 1, &tcI);
|
||||
return TRUE;
|
||||
TabCtrl_InsertItem(hWC, 1, &tcI);
|
||||
return TRUE;
|
||||
|
||||
case WM_TIMER:
|
||||
if (disabled){
|
||||
key = 0;
|
||||
//pkeyboard = SDL_GetKeyState(&numkeys);
|
||||
for (int i = 0; i < numkeys; ++i) {
|
||||
if( pkeyboard[i] ) {
|
||||
key = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if( key == 0 ) {
|
||||
// check joystick
|
||||
}
|
||||
|
||||
if (key != 0){
|
||||
KillTimer(hW, 0x80);
|
||||
hWC = GetDlgItem(hW, disabled);
|
||||
conf.keys[padn][disabled-IDC_L2] = key;
|
||||
Button_SetText(hWC, GetKeyLabel(padn, disabled-IDC_L2).c_str());
|
||||
EnableWindow(hWC, TRUE);
|
||||
disabled=0;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
case WM_TIMER:
|
||||
if (disabled)
|
||||
{
|
||||
key = 0;
|
||||
//pkeyboard = SDL_GetKeyState(&numkeys);
|
||||
for (int i = 0; i < numkeys; ++i)
|
||||
{
|
||||
if (pkeyboard[i])
|
||||
{
|
||||
key = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
case WM_COMMAND:
|
||||
for(i = IDC_L2; i <= IDC_LEFT; i+=2)
|
||||
{
|
||||
if(LOWORD(wParam) == i)
|
||||
{
|
||||
if (disabled)//change selection
|
||||
EnableWindow(GetDlgItem(hW, disabled), TRUE);
|
||||
if (key == 0)
|
||||
{
|
||||
// check joystick
|
||||
}
|
||||
|
||||
EnableWindow(GetDlgItem(hW, disabled=wParam), FALSE);
|
||||
|
||||
SetTimer(hW, 0x80, 250, NULL);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
if (key != 0)
|
||||
{
|
||||
KillTimer(hW, 0x80);
|
||||
hWC = GetDlgItem(hW, disabled);
|
||||
conf.keys[padn][disabled-IDC_L2] = key;
|
||||
Button_SetText(hWC, GetKeyLabel(padn, disabled - IDC_L2).c_str());
|
||||
EnableWindow(hWC, TRUE);
|
||||
disabled = 0;
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
|
||||
switch(LOWORD(wParam)) {
|
||||
case IDCANCEL:
|
||||
KillTimer(hW, 0x80);
|
||||
EndDialog(hW, TRUE);
|
||||
return TRUE;
|
||||
case IDOK:
|
||||
KillTimer(hW, 0x80);
|
||||
if (IsDlgButtonChecked(hW, IDC_LOG))
|
||||
conf.log = 1;
|
||||
else conf.log = 0;
|
||||
SaveConfig();
|
||||
EndDialog(hW, FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
case WM_COMMAND:
|
||||
for (i = IDC_L2; i <= IDC_LEFT; i += 2)
|
||||
{
|
||||
if (LOWORD(wParam) == i)
|
||||
{
|
||||
if (disabled)//change selection
|
||||
EnableWindow(GetDlgItem(hW, disabled), TRUE);
|
||||
|
||||
case WM_NOTIFY:
|
||||
switch (wParam) {
|
||||
case IDC_TABC:
|
||||
hWC = GetDlgItem(hW, IDC_TABC);
|
||||
padn = TabCtrl_GetCurSel(hWC);
|
||||
|
||||
for (i=0; i<PADKEYS; i++) {
|
||||
hWC = GetDlgItem(hW, IDC_EL3 + i);
|
||||
Button_SetText(hWC, GetKeyLabel(padn, i).c_str());
|
||||
}
|
||||
EnableWindow(GetDlgItem(hW, disabled = wParam), FALSE);
|
||||
|
||||
SetTimer(hW, 0x80, 250, NULL);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case IDCANCEL:
|
||||
KillTimer(hW, 0x80);
|
||||
EndDialog(hW, TRUE);
|
||||
return TRUE;
|
||||
case IDOK:
|
||||
KillTimer(hW, 0x80);
|
||||
if (IsDlgButtonChecked(hW, IDC_LOG))
|
||||
conf.log = 1;
|
||||
else conf.log = 0;
|
||||
SaveConfig();
|
||||
EndDialog(hW, FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_NOTIFY:
|
||||
switch (wParam)
|
||||
{
|
||||
case IDC_TABC:
|
||||
hWC = GetDlgItem(hW, IDC_TABC);
|
||||
padn = TabCtrl_GetCurSel(hWC);
|
||||
|
||||
for (i = 0; i < PADKEYS; i++)
|
||||
{
|
||||
hWC = GetDlgItem(hW, IDC_EL3 + i);
|
||||
Button_SetText(hWC, GetKeyLabel(padn, i).c_str());
|
||||
}
|
||||
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL CALLBACK AboutDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {
|
||||
switch(uMsg) {
|
||||
case WM_INITDIALOG:
|
||||
return TRUE;
|
||||
BOOL CALLBACK AboutDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (uMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
return TRUE;
|
||||
|
||||
case WM_COMMAND:
|
||||
switch(LOWORD(wParam)) {
|
||||
case IDOK:
|
||||
EndDialog(hW, FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
case WM_COMMAND:
|
||||
switch (LOWORD(wParam))
|
||||
{
|
||||
case IDOK:
|
||||
EndDialog(hW, FALSE);
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void CALLBACK PADconfigure() {
|
||||
DialogBox(hInst,
|
||||
MAKEINTRESOURCE(IDD_DIALOG1),
|
||||
GetActiveWindow(),
|
||||
(DLGPROC)ConfigureDlgProc);
|
||||
void CALLBACK PADconfigure()
|
||||
{
|
||||
DialogBox(hInst,
|
||||
MAKEINTRESOURCE(IDD_DIALOG1),
|
||||
GetActiveWindow(),
|
||||
(DLGPROC)ConfigureDlgProc);
|
||||
}
|
||||
|
||||
void CALLBACK PADabout() {
|
||||
SysMessage("Author: zerofrog\nThanks to SSSPSXPad, TwinPAD, and PADwin plugins");
|
||||
void CALLBACK PADabout()
|
||||
{
|
||||
SysMessage("Author: zerofrog\nThanks to SSSPSXPad, TwinPAD, and PADwin plugins");
|
||||
}
|
||||
|
||||
s32 CALLBACK PADtest() {
|
||||
return 0;
|
||||
s32 CALLBACK PADtest()
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
BOOL APIENTRY DllMain(HANDLE hModule, // DLL INIT
|
||||
DWORD dwReason,
|
||||
LPVOID lpReserved) {
|
||||
hInst = (HINSTANCE)hModule;
|
||||
return TRUE; // very quick :)
|
||||
LPVOID lpReserved)
|
||||
{
|
||||
hInst = (HINSTANCE)hModule;
|
||||
return TRUE; // very quick :)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue