X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=drivers%2Fgp2x%2Finput.c;h=f554f3508f68b4d14bbc4ccd01f24ae91deb7537;hb=396c448eb538587248ddbf586a90371c71b48183;hp=7c33a96c1ba8cbf7f0d744a3424b9bf3cb97b5c5;hpb=6f6bc6fa47b2888c4420eeb323d96be0982150de;p=fceu.git diff --git a/drivers/gp2x/input.c b/drivers/gp2x/input.c index 7c33a96..f554f35 100644 --- a/drivers/gp2x/input.c +++ b/drivers/gp2x/input.c @@ -47,6 +47,13 @@ static void setsoundvol(int soundvolume) { int soundvolIndex; static char soundvolmeter[24]; + static int prev_snd_on = 0; + + if ((!!soundvolume) ^ prev_snd_on) + { + FCEUI_Sound(Settings.sound_rate); + prev_snd_on = !!soundvolume; + } // draw on screen :D gp2x_sound_volume(soundvolume, soundvolume); @@ -86,7 +93,7 @@ static void do_emu_acts(uint32 acts) FCEUD_Update(XBuf+8,NULL,0); while( !((keys = gp2x_joystick_read(1)) & (GP2X_X|GP2X_Y)) ) usleep(50*1024); if (keys & GP2X_X) do_it = 0; - FCEU_DispMessage(""); + FCEU_CancelDispMessage(); } if (do_it) FCEUI_LoadState(); } @@ -105,7 +112,7 @@ static void do_emu_acts(uint32 acts) FCEUD_Update(XBuf+8,NULL,0); while( !((keys = gp2x_joystick_read(1)) & (GP2X_X|GP2X_Y)) ) usleep(50*1024); if (keys & GP2X_X) do_it = 0; - FCEU_DispMessage(""); + FCEU_CancelDispMessage(); } } if (do_it) FCEUI_SaveState(); @@ -184,7 +191,7 @@ static void do_fake_mouse(unsigned long keys) } -void FCEUD_UpdateInput(void) +static void FCEUD_UpdateInput(void) { static int volpushed_frames = 0; static int turbo_rate_cnt_a[2] = {0,0}, turbo_rate_cnt_b[2] = {0,0}; @@ -192,7 +199,7 @@ void FCEUD_UpdateInput(void) uint32 all_acts[2] = {0,0}; int i; - if ((down(VOL_DOWN) && down(VOL_UP)) || (keys & (GP2X_L|GP2X_L|GP2X_START)) == (GP2X_L|GP2X_L|GP2X_START)) + if ((down(VOL_DOWN) && down(VOL_UP)) || (keys & (GP2X_L|GP2X_START)) == (GP2X_L|GP2X_START)) { Exit = 1; return; @@ -200,7 +207,7 @@ void FCEUD_UpdateInput(void) else if (down(VOL_UP)) { /* wait for at least 10 updates, because user may be just trying to enter menu */ - if (volpushed_frames++ > 10) { + if (volpushed_frames++ > 10 && (volpushed_frames&1)) { soundvol++; if (soundvol > 100) soundvol=100; //FCEUI_SetSoundVolume(soundvol); @@ -209,7 +216,7 @@ void FCEUD_UpdateInput(void) } else if (down(VOL_DOWN)) { - if (volpushed_frames++ > 10) { + if (volpushed_frames++ > 10 && (volpushed_frames&1)) { soundvol-=1; if (soundvol < 0) soundvol=0; //FCEUI_SetSoundVolume(soundvol); @@ -244,6 +251,7 @@ void FCEUD_UpdateInput(void) if ((keys & (1 << u)) && (Settings.KeyBinds[u] & acts)) { keys &= ~(1 << u); + acts &= Settings.KeyBinds[u]; break; } } @@ -343,37 +351,42 @@ static void InitOtherInput(void) static void PrepareOtherInput(void) { - uint32 act, key, seen_acts; + uint32 act; - combo_acts = combo_keys = prev_emu_acts = seen_acts = 0; + combo_acts = combo_keys = prev_emu_acts = 0; - // find combo_acts - for (act = 1; act; act <<= 1) + for (act = 0; act < 32; act++) { - for (key = 1; key < 32; key++) + int u, keyc = 0, keyc2 = 0; + if (act == 16 || act == 17) continue; // player2 flag + if (act > 17) { - if (Settings.KeyBinds[key] & act) - { - if (seen_acts & act) combo_acts |= act; - else seen_acts |= act; - } + for (u = 0; u < 32; u++) + if (Settings.KeyBinds[u] & (1 << act)) keyc++; } - } - - combo_acts &= ~0x00030000; // don't take player_id bits - - // find combo_keys - for (act = 1; act; act <<= 1) - { - for (key = 0; key < 32; key++) + else { - if (Settings.KeyBinds[key] & combo_acts) + for (u = 0; u < 32; u++) + if ((Settings.KeyBinds[u] & 0x30000) == 0 && // pl. 1 + (Settings.KeyBinds[u] & (1 << act))) keyc++; + for (u = 0; u < 32; u++) + if ((Settings.KeyBinds[u] & 0x30000) == 1 && // pl. 2 + (Settings.KeyBinds[u] & (1 << act))) keyc2++; + if (keyc2 > keyc) keyc = keyc2; + } + if (keyc > 1) + { + // loop again and mark those keys and actions as combo + for (u = 0; u < 32; u++) { - combo_keys |= 1 << key; + if (Settings.KeyBinds[u] & (1 << act)) { + combo_keys |= 1 << u; + combo_acts |= 1 << act; + } } } } - printf("generated combo_acts: %08x, combo_keys: %08x\n", combo_acts, combo_keys); + // printf("generated combo_acts: %08x, combo_keys: %08x\n", combo_acts, combo_keys); }