- // l is toggle turbo
- if (L_down)
- {
- if (last_L_down)
- {
- L_count++;
- if ((L_count & 31)== 31)
- {
- // 0 is none // 1 is Y & B turbo // 2 is X & A turbo
- if ((!TurboFireTop) && (!TurboFireBottom))
- {
- // was off
- TurboFireTop=1;
- TurboFireBottom=0;
- if (swapbuttons)
- {
- FCEUI_DispMessage("Turbo A and Y");
- }
- else
- {
- FCEUI_DispMessage("Turbo Y and B");
- }
- }
- else if (TurboFireTop)
- {
- TurboFireTop=0;
- TurboFireBottom=1;
- if (swapbuttons)
- {
- FCEUI_DispMessage("Turbo X and B");
- }
- else
- {
- FCEUI_DispMessage("Turbo A and X");
- }
- }
- else
- {
- TurboFireTop=0;
- TurboFireBottom=0;
- FCEUI_DispMessage("Turbo Off");
- }
-
- }
- }
- }
- else
- {
- L_count=0;
- }
-
- //unsigned long padTmp=0;
- // shift the bits in
- // up
- //padTmp=(pad & GP2X_UP) ; // 1 is 2^0,
- JS |= ((pad & GP2X_UP) << (4-0)); // 0x10 is 2^4
-
- //padTmp=(pad & GP2X_DOWN); // 0x10 is 2^4,
- JS |= ((pad & GP2X_DOWN) << (5-4)); // 0x20 is 2^5
-
- //padTmp=(pad & GP2X_LEFT); // 0x4 is 2^2,
- JS |= ((pad & GP2X_LEFT) << (6-2)); // 0x40 is 2^6
-
- //padTmp=(pad & GP2X_RIGHT); // 0x40 is 2^6,
- JS |= ((pad & GP2X_RIGHT) << (7-6)); // 0x80 is 2^7
+ for (i = 0; i < 32; i++)
+ {
+ if (keys & (1 << i))
+ {
+ uint32 acts, u = 32;
+ acts = Settings.KeyBinds[i];
+ if (!acts) continue;
+ if ((1 << i) & combo_keys)
+ {
+ // combo key detected, try to find if other is pressed
+ for (u = i+1; u < 32; u++)
+ {
+ if ((keys & (1 << u)) && (Settings.KeyBinds[u] & acts))
+ {
+ keys &= ~(1 << u);
+ break;
+ }
+ }
+ }
+ if (u != 32) acts &= combo_acts; // other combo key pressed
+ else acts &= ~combo_acts;
+ all_acts |= acts;
+ }
+ }