diff --git a/desmume/src/frontend/cocoa/ClientExecutionControl.h b/desmume/src/frontend/cocoa/ClientExecutionControl.h
index 973468be7..e21d4767a 100644
--- a/desmume/src/frontend/cocoa/ClientExecutionControl.h
+++ b/desmume/src/frontend/cocoa/ClientExecutionControl.h
@@ -39,7 +39,7 @@
#define FRAME_SKIP_BIAS 0.1 // May be any real number. This value acts as a vector addition to the frame skip.
#define MAX_FRAME_SKIP (DS_FRAMES_PER_SECOND / 2.98)
-#define INPUT_STATES_CLEAR_VALUE 0xFFFFFFFF00FF03FFUL
+#define INPUT_STATES_CLEAR_VALUE 0xFFFFFFFF00FF03FFULL
enum ExecutionBehavior
{
diff --git a/desmume/src/frontend/cocoa/DefaultKeyMappings.plist b/desmume/src/frontend/cocoa/DefaultKeyMappings.plist
index 57d1be6e2..becb36f2e 100644
--- a/desmume/src/frontend/cocoa/DefaultKeyMappings.plist
+++ b/desmume/src/frontend/cocoa/DefaultKeyMappings.plist
@@ -81,6 +81,10 @@
Up Arrow
intValue1
+ intValue2
+ 858993459
+ intValue3
+ 4
Down
@@ -98,6 +102,10 @@
Down Arrow
intValue1
+ intValue2
+ 858993459
+ intValue3
+ 4
Left
@@ -115,6 +123,10 @@
Left Arrow
intValue1
+ intValue2
+ 858993459
+ intValue3
+ 4
Right
@@ -132,6 +144,10 @@
Right Arrow
intValue1
+ intValue2
+ 858993459
+ intValue3
+ 4
A
@@ -149,6 +165,10 @@
X
intValue1
+ intValue2
+ 858993459
+ intValue3
+ 4
B
@@ -166,6 +186,10 @@
Z
intValue1
+ intValue2
+ 858993459
+ intValue3
+ 4
X
@@ -183,6 +207,10 @@
S
intValue1
+ intValue2
+ 858993459
+ intValue3
+ 4
Y
@@ -200,6 +228,10 @@
A
intValue1
+ intValue2
+ 858993459
+ intValue3
+ 4
L
@@ -217,6 +249,10 @@
Q
intValue1
+ intValue2
+ 858993459
+ intValue3
+ 4
R
@@ -234,6 +270,10 @@
W
intValue1
+ intValue2
+ 858993459
+ intValue3
+ 4
Start
@@ -251,6 +291,10 @@
Return
intValue1
+ intValue2
+ 858993459
+ intValue3
+ 4
Select
@@ -268,6 +312,10 @@
Tab
intValue1
+ intValue2
+ 858993459
+ intValue3
+ 4
Touch
diff --git a/desmume/src/frontend/cocoa/cocoa_input.h b/desmume/src/frontend/cocoa/cocoa_input.h
index c81ae538d..83aba274e 100644
--- a/desmume/src/frontend/cocoa/cocoa_input.h
+++ b/desmume/src/frontend/cocoa/cocoa_input.h
@@ -35,6 +35,7 @@ typedef struct
bool autohold;
uint32_t turboPattern;
uint8_t turboPatternStep;
+ uint8_t turboPatternLength;
} ClientInput;
@protocol CocoaDSControllerDelegate
@@ -107,7 +108,7 @@ typedef struct
@property (retain) NSString *hardwareMicSampleRateString;
- (void) setControllerState:(BOOL)theState controlID:(const NSUInteger)controlID;
-- (void) setControllerState:(BOOL)theState controlID:(const NSUInteger)controlID turbo:(const BOOL)isTurboEnabled turboPattern:(uint32_t)turboPattern;
+- (void) setControllerState:(BOOL)theState controlID:(const NSUInteger)controlID turbo:(const BOOL)isTurboEnabled turboPattern:(uint32_t)turboPattern turboPatternLength:(uint32_t)turboPatternLength;
- (void) setTouchState:(BOOL)theState location:(const NSPoint)theLocation;
- (void) setSineWaveGeneratorFrequency:(const double)freq;
- (void) clearAutohold;
diff --git a/desmume/src/frontend/cocoa/cocoa_input.mm b/desmume/src/frontend/cocoa/cocoa_input.mm
index a30208840..4d969e16e 100644
--- a/desmume/src/frontend/cocoa/cocoa_input.mm
+++ b/desmume/src/frontend/cocoa/cocoa_input.mm
@@ -72,6 +72,7 @@ SineWaveGenerator sineWaveGenerator(250.0, MIC_SAMPLE_RATE);
clientInput[i].turbo = false;
clientInput[i].turboPattern = 0;
clientInput[i].turboPatternStep = 0;
+ clientInput[i].turboPatternLength = 0;
clientInput[i].autohold = false;
}
@@ -242,10 +243,10 @@ SineWaveGenerator sineWaveGenerator(250.0, MIC_SAMPLE_RATE);
- (void) setControllerState:(BOOL)theState controlID:(const NSUInteger)controlID
{
- [self setControllerState:theState controlID:controlID turbo:NO turboPattern:0];
+ [self setControllerState:theState controlID:controlID turbo:NO turboPattern:0 turboPatternLength:0];
}
-- (void) setControllerState:(BOOL)theState controlID:(const NSUInteger)controlID turbo:(const BOOL)isTurboEnabled turboPattern:(uint32_t)turboPattern
+- (void) setControllerState:(BOOL)theState controlID:(const NSUInteger)controlID turbo:(const BOOL)isTurboEnabled turboPattern:(uint32_t)turboPattern turboPatternLength:(uint32_t)turboPatternLength
{
if (controlID >= NDSInputID_InputCount)
{
@@ -259,25 +260,27 @@ SineWaveGenerator sineWaveGenerator(250.0, MIC_SAMPLE_RATE);
if (theState)
{
clientInput[controlID].turbo = (isTurboEnabled) ? true : false;
- clientInput[controlID].turboPattern = (clientInput[controlID].turbo) ? turboPattern : 0;
clientInput[controlID].autohold = true;
-
- if (!clientInput[controlID].turbo)
- {
- clientInput[controlID].turboPatternStep = 0;
- }
}
}
else
{
clientInput[controlID].isPressed = (theState || clientInput[controlID].autohold);
clientInput[controlID].turbo = (isTurboEnabled && clientInput[controlID].isPressed);
- clientInput[controlID].turboPattern = (clientInput[controlID].turbo) ? turboPattern : 0;
-
- if (!clientInput[controlID].turbo)
- {
- clientInput[controlID].turboPatternStep = 0;
- }
+ }
+
+ clientInput[controlID].turboPattern = (clientInput[controlID].turbo) ? turboPattern : 0;
+
+ if (turboPatternLength > 32)
+ {
+ turboPatternLength = 32;
+ }
+
+ clientInput[controlID].turboPatternLength = (clientInput[controlID].turbo) ? turboPatternLength : 0;
+
+ if (!clientInput[controlID].turbo)
+ {
+ clientInput[controlID].turboPatternStep = 0;
}
OSSpinLockUnlock(&spinlockControllerState);
@@ -326,11 +329,11 @@ SineWaveGenerator sineWaveGenerator(250.0, MIC_SAMPLE_RATE);
if (clientInput[i].turbo)
{
- const bool turboState = (clientInput[i].turboPattern >> clientInput[i].turboPatternStep) & 0x00000001;
- flushedStates[i] = (flushedStates[i] && turboState);
+ const bool pressedState = (clientInput[i].turboPattern >> clientInput[i].turboPatternStep) & 0x00000001;
+ flushedStates[i] = (flushedStates[i] && pressedState);
clientInput[i].turboPatternStep++;
- if (clientInput[i].turboPatternStep >= 32)
+ if (clientInput[i].turboPatternStep >= clientInput[i].turboPatternLength)
{
clientInput[i].turboPatternStep = 0;
}
diff --git a/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.strings b/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.strings
index 623bf007a..86f951df0 100644
Binary files a/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.strings and b/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.strings differ
diff --git a/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.xib b/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.xib
index 58a1fdd6b..d3d105ad1 100644
--- a/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.xib
+++ b/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.xib
@@ -12,6 +12,7 @@