Cocoa Port:

- The input handler now supports autohold.
- NDS inputs in the input handler now support turbo.
This commit is contained in:
rogerman 2014-01-31 01:30:52 +00:00
parent 71c196b920
commit 7fa5f7763e
17 changed files with 1108 additions and 401 deletions

View File

@ -868,6 +868,16 @@
AB7DDA6E173DC399004F3D07 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABB6AD5C173A3F2B00EC2E8D /* Carbon.framework */; };
AB7DDA6F173DC39E004F3D07 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABB6AD5C173A3F2B00EC2E8D /* Carbon.framework */; };
AB7DDA70173DC3A3004F3D07 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABB6AD5C173A3F2B00EC2E8D /* Carbon.framework */; };
AB851D2A189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB851D28189B2C9A007363CC /* Icon_AutoholdClear_420x420.png */; };
AB851D2B189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB851D29189B2C9A007363CC /* Icon_AutoholdSet_420x420.png */; };
AB851D2C189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB851D28189B2C9A007363CC /* Icon_AutoholdClear_420x420.png */; };
AB851D2D189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB851D29189B2C9A007363CC /* Icon_AutoholdSet_420x420.png */; };
AB851D2E189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB851D28189B2C9A007363CC /* Icon_AutoholdClear_420x420.png */; };
AB851D2F189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB851D29189B2C9A007363CC /* Icon_AutoholdSet_420x420.png */; };
AB851D30189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB851D28189B2C9A007363CC /* Icon_AutoholdClear_420x420.png */; };
AB851D31189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB851D29189B2C9A007363CC /* Icon_AutoholdSet_420x420.png */; };
AB851D32189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB851D28189B2C9A007363CC /* Icon_AutoholdClear_420x420.png */; };
AB851D33189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB851D29189B2C9A007363CC /* Icon_AutoholdSet_420x420.png */; };
AB8C6CBF186A950C00E3EC64 /* Image_PassME.png in Resources */ = {isa = PBXBuildFile; fileRef = AB8C6CBE186A950C00E3EC64 /* Image_PassME.png */; };
AB8C6CC0186A950C00E3EC64 /* Image_PassME.png in Resources */ = {isa = PBXBuildFile; fileRef = AB8C6CBE186A950C00E3EC64 /* Image_PassME.png */; };
AB8C6CC1186A950C00E3EC64 /* Image_PassME.png in Resources */ = {isa = PBXBuildFile; fileRef = AB8C6CBE186A950C00E3EC64 /* Image_PassME.png */; };
@ -1368,6 +1378,8 @@
AB80E050142BC4FA00A52038 /* cocoa_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_util.h; sourceTree = "<group>"; };
AB817A34143EE2DB00A7DFE9 /* videofilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = videofilter.h; sourceTree = "<group>"; };
AB817A35143EE2DB00A7DFE9 /* videofilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = videofilter.cpp; sourceTree = "<group>"; };
AB851D28189B2C9A007363CC /* Icon_AutoholdClear_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_AutoholdClear_420x420.png; path = images/Icon_AutoholdClear_420x420.png; sourceTree = "<group>"; };
AB851D29189B2C9A007363CC /* Icon_AutoholdSet_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_AutoholdSet_420x420.png; path = images/Icon_AutoholdSet_420x420.png; sourceTree = "<group>"; };
AB8C6CBE186A950C00E3EC64 /* Image_PassME.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Image_PassME.png; path = images/Image_PassME.png; sourceTree = "<group>"; };
AB8C6E56186CD07E00E3EC64 /* ForceFeedback.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ForceFeedback.framework; path = System/Library/Frameworks/ForceFeedback.framework; sourceTree = SDKROOT; };
AB8FFE491872032B00C10085 /* Image_PaddleController.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Image_PaddleController.png; path = images/Image_PaddleController.png; sourceTree = "<group>"; };
@ -2008,6 +2020,8 @@
AB0F298914BE71E0009ABC6F /* Icon_ArrowLeft_420x420.png */,
AB0F298A14BE71E0009ABC6F /* Icon_ArrowRight_420x420.png */,
AB0F298B14BE71E0009ABC6F /* Icon_ArrowUp_420x420.png */,
AB851D28189B2C9A007363CC /* Icon_AutoholdClear_420x420.png */,
AB851D29189B2C9A007363CC /* Icon_AutoholdSet_420x420.png */,
AB0F296C14BE705D009ABC6F /* Icon_CodeBreaker_128x128.png */,
ABB97874144E89CC00793FA3 /* Icon_CodeBreaker_32x32.png */,
ABB97875144E89CC00793FA3 /* Icon_DeSmuME_32x32.png */,
@ -2677,6 +2691,8 @@
ABBFDFAB1898EE3200A3FFA5 /* Icon_DisplayToggle_420x420.png in Resources */,
ABBFDFB61898EE4B00A3FFA5 /* Icon_FrameAdvance_420x420.png in Resources */,
ABBFDFB71898EE4B00A3FFA5 /* Icon_FrameJump_420x420.png in Resources */,
AB851D32189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */,
AB851D33189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -2770,6 +2786,8 @@
ABBFDFA81898EE3200A3FFA5 /* Icon_DisplayToggle_420x420.png in Resources */,
ABBFDFB01898EE4B00A3FFA5 /* Icon_FrameAdvance_420x420.png in Resources */,
ABBFDFB11898EE4B00A3FFA5 /* Icon_FrameJump_420x420.png in Resources */,
AB851D2C189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */,
AB851D2D189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -2863,6 +2881,8 @@
ABBFDFA71898EE3200A3FFA5 /* Icon_DisplayToggle_420x420.png in Resources */,
ABBFDFAE1898EE4B00A3FFA5 /* Icon_FrameAdvance_420x420.png in Resources */,
ABBFDFAF1898EE4B00A3FFA5 /* Icon_FrameJump_420x420.png in Resources */,
AB851D2A189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */,
AB851D2B189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -2956,6 +2976,8 @@
ABBFDFAA1898EE3200A3FFA5 /* Icon_DisplayToggle_420x420.png in Resources */,
ABBFDFB41898EE4B00A3FFA5 /* Icon_FrameAdvance_420x420.png in Resources */,
ABBFDFB51898EE4B00A3FFA5 /* Icon_FrameJump_420x420.png in Resources */,
AB851D30189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */,
AB851D31189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -3049,6 +3071,8 @@
ABBFDFA91898EE3200A3FFA5 /* Icon_DisplayToggle_420x420.png in Resources */,
ABBFDFB21898EE4B00A3FFA5 /* Icon_FrameAdvance_420x420.png in Resources */,
ABBFDFB31898EE4B00A3FFA5 /* Icon_FrameJump_420x420.png in Resources */,
AB851D2E189B2C9A007363CC /* Icon_AutoholdClear_420x420.png in Resources */,
AB851D2F189B2C9A007363CC /* Icon_AutoholdSet_420x420.png in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};

View File

@ -398,6 +398,10 @@
AB796D6A15CDCBA200C59155 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB350BA41478AC96007165AC /* IOKit.framework */; };
AB796D6B15CDCBA200C59155 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABC570D4134431DA00E7B0B1 /* OpenGL.framework */; };
AB796D6C15CDCBA200C59155 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AB0A0D1914AACA9600E83E91 /* libz.dylib */; };
AB7EC7FA189B2CBA009D198A /* Icon_AutoholdClear_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB7EC7F8189B2CBA009D198A /* Icon_AutoholdClear_420x420.png */; };
AB7EC7FB189B2CBA009D198A /* Icon_AutoholdClear_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB7EC7F8189B2CBA009D198A /* Icon_AutoholdClear_420x420.png */; };
AB7EC7FC189B2CBA009D198A /* Icon_AutoholdSet_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB7EC7F9189B2CBA009D198A /* Icon_AutoholdSet_420x420.png */; };
AB7EC7FD189B2CBA009D198A /* Icon_AutoholdSet_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB7EC7F9189B2CBA009D198A /* Icon_AutoholdSet_420x420.png */; };
AB80E04D142BC4A800A52038 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB80E04C142BC4A800A52038 /* cocoa_util.mm */; };
AB82445B1704AE9A00B8EE20 /* utilities.c in Sources */ = {isa = PBXBuildFile; fileRef = AB82445A1704AE9A00B8EE20 /* utilities.c */; };
AB82445C1704AE9A00B8EE20 /* utilities.c in Sources */ = {isa = PBXBuildFile; fileRef = AB82445A1704AE9A00B8EE20 /* utilities.c */; };
@ -878,6 +882,8 @@
AB796CA215CDCB6B00C59155 /* instruction_attributes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = instruction_attributes.h; path = ../instruction_attributes.h; sourceTree = "<group>"; };
AB796CA315CDCB6B00C59155 /* instructions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = instructions.h; path = ../instructions.h; sourceTree = "<group>"; };
AB796D7015CDCBA200C59155 /* DeSmuME (Debug).app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DeSmuME (Debug).app"; sourceTree = BUILT_PRODUCTS_DIR; };
AB7EC7F8189B2CBA009D198A /* Icon_AutoholdClear_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_AutoholdClear_420x420.png; path = ../../../../../../../Volumes/rogerman/desmume/trunk/desmume/src/cocoa/images/Icon_AutoholdClear_420x420.png; sourceTree = "<group>"; };
AB7EC7F9189B2CBA009D198A /* Icon_AutoholdSet_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_AutoholdSet_420x420.png; path = ../../../../../../../Volumes/rogerman/desmume/trunk/desmume/src/cocoa/images/Icon_AutoholdSet_420x420.png; sourceTree = "<group>"; };
AB80E04C142BC4A800A52038 /* cocoa_util.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_util.mm; sourceTree = "<group>"; };
AB80E050142BC4FA00A52038 /* cocoa_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_util.h; sourceTree = "<group>"; };
AB817A34143EE2DB00A7DFE9 /* videofilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = videofilter.h; sourceTree = "<group>"; };
@ -1545,6 +1551,8 @@
AB0F298914BE71E0009ABC6F /* Icon_ArrowLeft_420x420.png */,
AB0F298A14BE71E0009ABC6F /* Icon_ArrowRight_420x420.png */,
AB0F298B14BE71E0009ABC6F /* Icon_ArrowUp_420x420.png */,
AB7EC7F8189B2CBA009D198A /* Icon_AutoholdClear_420x420.png */,
AB7EC7F9189B2CBA009D198A /* Icon_AutoholdSet_420x420.png */,
AB0F296C14BE705D009ABC6F /* Icon_CodeBreaker_128x128.png */,
ABB97874144E89CC00793FA3 /* Icon_CodeBreaker_32x32.png */,
ABB97875144E89CC00793FA3 /* Icon_DeSmuME_32x32.png */,
@ -2064,6 +2072,7 @@
AB0F29A814BE7213009ABC6F /* Icon_DSButtonB_420x420.png in Resources */,
AB0F29A914BE7213009ABC6F /* Icon_DSButtonL_420x420.png in Resources */,
AB0F29AA14BE7213009ABC6F /* Icon_DSButtonR_420x420.png in Resources */,
AB7EC7FB189B2CBA009D198A /* Icon_AutoholdClear_420x420.png in Resources */,
AB9A1F921898F0E7000DF924 /* Icon_DisplayToggle_420x420.png in Resources */,
AB0F29AB14BE7213009ABC6F /* Icon_DSButtonSelect_420x420.png in Resources */,
AB0F29AC14BE7213009ABC6F /* Icon_DSButtonStart_420x420.png in Resources */,
@ -2080,6 +2089,7 @@
AB0F29B614BE7213009ABC6F /* Icon_ShowHUD_420x420.png in Resources */,
AB0F29B714BE7213009ABC6F /* Icon_Speaker_420x420.png in Resources */,
AB3ACC3E14C24D5400D7D192 /* AUTHORS in Resources */,
AB7EC7FD189B2CBA009D198A /* Icon_AutoholdSet_420x420.png in Resources */,
AB3ACC3F14C24D5400D7D192 /* ChangeLog in Resources */,
AB3ACC4014C24D5400D7D192 /* COPYING in Resources */,
AB3ACC4114C24D5400D7D192 /* README in Resources */,
@ -2157,6 +2167,7 @@
AB796CD815CDCBA200C59155 /* Icon_DSButtonB_420x420.png in Resources */,
AB796CD915CDCBA200C59155 /* Icon_DSButtonL_420x420.png in Resources */,
AB796CDA15CDCBA200C59155 /* Icon_DSButtonR_420x420.png in Resources */,
AB7EC7FA189B2CBA009D198A /* Icon_AutoholdClear_420x420.png in Resources */,
AB9A1F911898F0E7000DF924 /* Icon_DisplayToggle_420x420.png in Resources */,
AB796CDB15CDCBA200C59155 /* Icon_DSButtonSelect_420x420.png in Resources */,
AB796CDC15CDCBA200C59155 /* Icon_DSButtonStart_420x420.png in Resources */,
@ -2173,6 +2184,7 @@
AB796CE615CDCBA200C59155 /* Icon_ShowHUD_420x420.png in Resources */,
AB796CE715CDCBA200C59155 /* Icon_Speaker_420x420.png in Resources */,
AB796CE815CDCBA200C59155 /* AUTHORS in Resources */,
AB7EC7FC189B2CBA009D198A /* Icon_AutoholdSet_420x420.png in Resources */,
AB796CE915CDCBA200C59155 /* ChangeLog in Resources */,
AB796CEA15CDCBA200C59155 /* COPYING in Resources */,
AB796CEB15CDCBA200C59155 /* README in Resources */,

View File

@ -425,6 +425,10 @@
AB796D6A15CDCBA200C59155 /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB350BA41478AC96007165AC /* IOKit.framework */; };
AB796D6B15CDCBA200C59155 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABC570D4134431DA00E7B0B1 /* OpenGL.framework */; };
AB796D6C15CDCBA200C59155 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = AB0A0D1914AACA9600E83E91 /* libz.dylib */; };
AB7EC7F4189B2B92009D198A /* Icon_AutoholdClear_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB7EC7F2189B2B92009D198A /* Icon_AutoholdClear_420x420.png */; };
AB7EC7F5189B2B92009D198A /* Icon_AutoholdClear_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB7EC7F2189B2B92009D198A /* Icon_AutoholdClear_420x420.png */; };
AB7EC7F6189B2B92009D198A /* Icon_AutoholdSet_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB7EC7F3189B2B92009D198A /* Icon_AutoholdSet_420x420.png */; };
AB7EC7F7189B2B92009D198A /* Icon_AutoholdSet_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB7EC7F3189B2B92009D198A /* Icon_AutoholdSet_420x420.png */; };
AB80E04D142BC4A800A52038 /* cocoa_util.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB80E04C142BC4A800A52038 /* cocoa_util.mm */; };
AB82445B1704AE9A00B8EE20 /* utilities.c in Sources */ = {isa = PBXBuildFile; fileRef = AB82445A1704AE9A00B8EE20 /* utilities.c */; };
AB82445C1704AE9A00B8EE20 /* utilities.c in Sources */ = {isa = PBXBuildFile; fileRef = AB82445A1704AE9A00B8EE20 /* utilities.c */; };
@ -893,6 +897,8 @@
AB796CA215CDCB6B00C59155 /* instruction_attributes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = instruction_attributes.h; path = ../instruction_attributes.h; sourceTree = "<group>"; };
AB796CA315CDCB6B00C59155 /* instructions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = instructions.h; path = ../instructions.h; sourceTree = "<group>"; };
AB796D7015CDCBA200C59155 /* DeSmuME (Debug).app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DeSmuME (Debug).app"; sourceTree = BUILT_PRODUCTS_DIR; };
AB7EC7F2189B2B92009D198A /* Icon_AutoholdClear_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_AutoholdClear_420x420.png; path = images/Icon_AutoholdClear_420x420.png; sourceTree = "<group>"; };
AB7EC7F3189B2B92009D198A /* Icon_AutoholdSet_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_AutoholdSet_420x420.png; path = images/Icon_AutoholdSet_420x420.png; sourceTree = "<group>"; };
AB80E04C142BC4A800A52038 /* cocoa_util.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_util.mm; sourceTree = "<group>"; };
AB80E050142BC4FA00A52038 /* cocoa_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_util.h; sourceTree = "<group>"; };
AB817A34143EE2DB00A7DFE9 /* videofilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = videofilter.h; sourceTree = "<group>"; };
@ -1545,6 +1551,8 @@
AB0F298914BE71E0009ABC6F /* Icon_ArrowLeft_420x420.png */,
AB0F298A14BE71E0009ABC6F /* Icon_ArrowRight_420x420.png */,
AB0F298B14BE71E0009ABC6F /* Icon_ArrowUp_420x420.png */,
AB7EC7F2189B2B92009D198A /* Icon_AutoholdClear_420x420.png */,
AB7EC7F3189B2B92009D198A /* Icon_AutoholdSet_420x420.png */,
AB0F296C14BE705D009ABC6F /* Icon_CodeBreaker_128x128.png */,
ABB97874144E89CC00793FA3 /* Icon_CodeBreaker_32x32.png */,
ABB97875144E89CC00793FA3 /* Icon_DeSmuME_32x32.png */,
@ -2064,6 +2072,7 @@
AB0F298C14BE71E0009ABC6F /* Icon_ArrowDown_420x420.png in Resources */,
AB0F298D14BE71E0009ABC6F /* Icon_ArrowLeft_420x420.png in Resources */,
AB0F298E14BE71E0009ABC6F /* Icon_ArrowRight_420x420.png in Resources */,
AB7EC7F5189B2B92009D198A /* Icon_AutoholdClear_420x420.png in Resources */,
ABDDF7C61898F024007583C1 /* Icon_DisplayToggle_420x420.png in Resources */,
AB0F298F14BE71E0009ABC6F /* Icon_ArrowUp_420x420.png in Resources */,
AB0F29A614BE7213009ABC6F /* Icon_DoubleSpeed_420x420.png in Resources */,
@ -2080,6 +2089,7 @@
AB0F29AE14BE7213009ABC6F /* Icon_DSButtonY_420x420.png in Resources */,
AB0F29AF14BE7213009ABC6F /* Icon_Emulation_420x420.png in Resources */,
AB0F29B014BE7213009ABC6F /* Icon_Input_420x420.png in Resources */,
AB7EC7F7189B2B92009D198A /* Icon_AutoholdSet_420x420.png in Resources */,
AB0F29B114BE7213009ABC6F /* Icon_Microphone_420x420.png in Resources */,
AB0F29B214BE7213009ABC6F /* Icon_OpenROM_420x420.png in Resources */,
AB0F29B314BE7213009ABC6F /* Icon_Reset_420x420.png in Resources */,
@ -2157,6 +2167,7 @@
AB796CD215CDCBA200C59155 /* Icon_ArrowDown_420x420.png in Resources */,
AB796CD315CDCBA200C59155 /* Icon_ArrowLeft_420x420.png in Resources */,
AB796CD415CDCBA200C59155 /* Icon_ArrowRight_420x420.png in Resources */,
AB7EC7F4189B2B92009D198A /* Icon_AutoholdClear_420x420.png in Resources */,
ABDDF7C51898F024007583C1 /* Icon_DisplayToggle_420x420.png in Resources */,
AB796CD515CDCBA200C59155 /* Icon_ArrowUp_420x420.png in Resources */,
AB796CD615CDCBA200C59155 /* Icon_DoubleSpeed_420x420.png in Resources */,
@ -2173,6 +2184,7 @@
AB796CDE15CDCBA200C59155 /* Icon_DSButtonY_420x420.png in Resources */,
AB796CDF15CDCBA200C59155 /* Icon_Emulation_420x420.png in Resources */,
AB796CE015CDCBA200C59155 /* Icon_Input_420x420.png in Resources */,
AB7EC7F6189B2B92009D198A /* Icon_AutoholdSet_420x420.png in Resources */,
AB796CE115CDCBA200C59155 /* Icon_Microphone_420x420.png in Resources */,
AB796CE215CDCBA200C59155 /* Icon_OpenROM_420x420.png in Resources */,
AB796CE315CDCBA200C59155 /* Icon_Reset_420x420.png in Resources */,

View File

@ -38,6 +38,8 @@
<string>Piano: B</string>
<string>Piano: High C</string>
<string>Paddle</string>
<string>Autohold - Set</string>
<string>Autohold - Clear</string>
<string>Execute/Pause</string>
<string>Frame Advance</string>
<string>Frame Jump</string>
@ -77,6 +79,8 @@
<string>126</string>
<key>elementName</key>
<string>Up Arrow</string>
<key>intValue1</key>
<false/>
</dict>
</array>
<key>Down</key>
@ -92,6 +96,8 @@
<string>125</string>
<key>elementName</key>
<string>Down Arrow</string>
<key>intValue1</key>
<false/>
</dict>
</array>
<key>Left</key>
@ -107,6 +113,8 @@
<string>123</string>
<key>elementName</key>
<string>Left Arrow</string>
<key>intValue1</key>
<false/>
</dict>
</array>
<key>Right</key>
@ -122,6 +130,8 @@
<string>124</string>
<key>elementName</key>
<string>Right Arrow</string>
<key>intValue1</key>
<false/>
</dict>
</array>
<key>A</key>
@ -137,6 +147,8 @@
<string>7</string>
<key>elementName</key>
<string>X</string>
<key>intValue1</key>
<false/>
</dict>
</array>
<key>B</key>
@ -152,6 +164,8 @@
<string>6</string>
<key>elementName</key>
<string>Z</string>
<key>intValue1</key>
<false/>
</dict>
</array>
<key>X</key>
@ -167,6 +181,8 @@
<string>1</string>
<key>elementName</key>
<string>S</string>
<key>intValue1</key>
<false/>
</dict>
</array>
<key>Y</key>
@ -182,6 +198,8 @@
<string>0</string>
<key>elementName</key>
<string>A</string>
<key>intValue1</key>
<false/>
</dict>
</array>
<key>L</key>
@ -197,6 +215,8 @@
<string>12</string>
<key>elementName</key>
<string>Q</string>
<key>intValue1</key>
<false/>
</dict>
</array>
<key>R</key>
@ -212,6 +232,8 @@
<string>13</string>
<key>elementName</key>
<string>W</string>
<key>intValue1</key>
<false/>
</dict>
</array>
<key>Start</key>
@ -227,6 +249,8 @@
<string>36</string>
<key>elementName</key>
<string>Return</string>
<key>intValue1</key>
<false/>
</dict>
</array>
<key>Select</key>
@ -242,6 +266,8 @@
<string>48</string>
<key>elementName</key>
<string>Tab</string>
<key>intValue1</key>
<false/>
</dict>
</array>
<key>Touch</key>
@ -595,6 +621,10 @@
<integer>5</integer>
</dict>
</array>
<key>Autohold - Set</key>
<array/>
<key>Autohold - Clear</key>
<array/>
<key>HUD</key>
<array>
<dict>

View File

@ -100,6 +100,58 @@
<integer>1</integer>
<key>Input_ControllerMappings</key>
<dict>
<key>Up</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>126</string>
<key>elementName</key>
<string>Up Arrow</string>
</dict>
</array>
<key>Down</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>125</string>
<key>elementName</key>
<string>Down Arrow</string>
</dict>
</array>
<key>Left</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>123</string>
<key>elementName</key>
<string>Left Arrow</string>
</dict>
</array>
<key>Right</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>124</string>
<key>elementName</key>
<string>Right Arrow</string>
</dict>
</array>
<key>A</key>
<array>
<dict>
@ -126,61 +178,129 @@
<string>Z</string>
</dict>
</array>
<key>Copy Screen</key>
<array/>
<key>X</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>1</string>
<key>elementName</key>
<string>S</string>
</dict>
</array>
<key>Y</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>0</string>
<key>elementName</key>
<string>A</string>
</dict>
</array>
<key>L</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>12</string>
<key>elementName</key>
<string>Q</string>
</dict>
</array>
<key>R</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>13</string>
<key>elementName</key>
<string>W</string>
</dict>
</array>
<key>Start</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>36</string>
<key>elementName</key>
<string>Return</string>
</dict>
</array>
<key>Select</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>48</string>
<key>elementName</key>
<string>Tab</string>
</dict>
</array>
<key>Touch</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventMouse</string>
<key>deviceName</key>
<string>Mouse</string>
<key>elementCode</key>
<string>0</string>
<key>elementName</key>
<string>Primary Button</string>
<key>useInputForIntCoord</key>
<true/>
</dict>
</array>
<key>Microphone</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>50</string>
<key>elementName</key>
<string>` (Accent)</string>
<key>intValue1</key>
<integer>1</integer>
</dict>
</array>
<key>Lid</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>51</string>
<key>elementName</key>
<string>Delete (Backspace)</string>
</dict>
</array>
<key>Debug</key>
<array/>
<key>Down</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>125</string>
<key>elementName</key>
<string>Down Arrow</string>
</dict>
</array>
<key>Enable/Disable Auto Frame Skip</key>
<array/>
<key>Enable/Disable Cheats</key>
<array/>
<key>Enable/Disable GPU State</key>
<array/>
<key>Enable/Disable Speed Limiter</key>
<array/>
<key>Execute/Pause</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>117</string>
<key>elementName</key>
<string>Forward Delete</string>
</dict>
</array>
<key>Frame Advance</key>
<array/>
<key>Frame Jump</key>
<array/>
<key>Guitar Grip: Blue</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>16</string>
<key>elementName</key>
<string>Y</string>
</dict>
</array>
<key>Guitar Grip: Green</key>
<array>
<dict>
@ -220,7 +340,7 @@
<string>T</string>
</dict>
</array>
<key>HUD</key>
<key>Guitar Grip: Blue</key>
<array>
<dict>
<key>deviceCode</key>
@ -228,137 +348,9 @@
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>4</string>
<string>16</string>
<key>elementName</key>
<string>H</string>
</dict>
</array>
<key>L</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>12</string>
<key>elementName</key>
<string>Q</string>
</dict>
</array>
<key>Left</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>123</string>
<key>elementName</key>
<string>Left Arrow</string>
</dict>
</array>
<key>Lid</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>51</string>
<key>elementName</key>
<string>Delete (Backspace)</string>
</dict>
</array>
<key>Load State Slot</key>
<array/>
<key>Microphone</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>50</string>
<key>elementName</key>
<string>` (Accent)</string>
<key>intValue1</key>
<integer>1</integer>
</dict>
</array>
<key>Mute/Unmute</key>
<array/>
<key>Paddle</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>31</string>
<key>elementName</key>
<string>O</string>
<key>intValue1</key>
<integer>-5</integer>
<key>isInputAnalog</key>
<false/>
</dict>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>35</string>
<key>elementName</key>
<string>P</string>
<key>intValue1</key>
<integer>5</integer>
<key>isInputAnalog</key>
<false/>
</dict>
</array>
<key>Piano: A</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>43</string>
<key>elementName</key>
<string>, (Comma)</string>
</dict>
</array>
<key>Piano: A#</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>37</string>
<key>elementName</key>
<string>L</string>
</dict>
</array>
<key>Piano: B</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>47</string>
<key>elementName</key>
<string>. (Period)</string>
<string>Y</string>
</dict>
</array>
<key>Piano: C</key>
@ -478,6 +470,45 @@
<string>K</string>
</dict>
</array>
<key>Piano: A</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>43</string>
<key>elementName</key>
<string>, (Comma)</string>
</dict>
</array>
<key>Piano: A#</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>37</string>
<key>elementName</key>
<string>L</string>
</dict>
</array>
<key>Piano: B</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>47</string>
<key>elementName</key>
<string>. (Period)</string>
</dict>
</array>
<key>Piano: High C</key>
<array>
<dict>
@ -491,7 +522,7 @@
<string>/</string>
</dict>
</array>
<key>R</key>
<key>Paddle</key>
<array>
<dict>
<key>deviceCode</key>
@ -499,11 +530,63 @@
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>13</string>
<string>31</string>
<key>elementName</key>
<string>W</string>
<string>O</string>
<key>intValue1</key>
<integer>-5</integer>
<key>isInputAnalog</key>
<false/>
</dict>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>35</string>
<key>elementName</key>
<string>P</string>
<key>intValue1</key>
<integer>5</integer>
<key>isInputAnalog</key>
<false/>
</dict>
</array>
<key>Autohold - Set</key>
<array/>
<key>Autohold - Clear</key>
<array/>
<key>HUD</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>4</string>
<key>elementName</key>
<string>H</string>
</dict>
</array>
<key>Execute/Pause</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>117</string>
<key>elementName</key>
<string>Forward Delete</string>
</dict>
</array>
<key>Frame Advance</key>
<array/>
<key>Frame Jump</key>
<array/>
<key>Reset</key>
<array>
<dict>
@ -517,19 +600,14 @@
<string>Page Down</string>
</dict>
</array>
<key>Right</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>124</string>
<key>elementName</key>
<string>Right Arrow</string>
</dict>
</array>
<key>Mute/Unmute</key>
<array/>
<key>Load State Slot</key>
<array/>
<key>Save State Slot</key>
<array/>
<key>Copy Screen</key>
<array/>
<key>Rotate Display Left</key>
<array>
<dict>
@ -560,21 +638,8 @@
<integer>90</integer>
</dict>
</array>
<key>Save State Slot</key>
<key>Toggle All Displays</key>
<array/>
<key>Select</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>48</string>
<key>elementName</key>
<string>Tab</string>
</dict>
</array>
<key>Set Speed</key>
<array>
<dict>
@ -602,75 +667,14 @@
<integer>2</integer>
</dict>
</array>
<key>Start</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>36</string>
<key>elementName</key>
<string>Return</string>
</dict>
</array>
<key>Toggle All Displays</key>
<key>Enable/Disable Speed Limiter</key>
<array/>
<key>Enable/Disable Auto Frame Skip</key>
<array/>
<key>Enable/Disable Cheats</key>
<array/>
<key>Enable/Disable GPU State</key>
<array/>
<key>Touch</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventMouse</string>
<key>deviceName</key>
<string>Mouse</string>
<key>elementCode</key>
<string>0</string>
<key>elementName</key>
<string>Primary Button</string>
<key>useInputForIntCoord</key>
<true/>
</dict>
</array>
<key>Up</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>126</string>
<key>elementName</key>
<string>Up Arrow</string>
</dict>
</array>
<key>X</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>1</string>
<key>elementName</key>
<string>S</string>
</dict>
</array>
<key>Y</key>
<array>
<dict>
<key>deviceCode</key>
<string>NSEventKeyboard</string>
<key>deviceName</key>
<string>Keyboard</string>
<key>elementCode</key>
<string>0</string>
<key>elementName</key>
<string>A</string>
</dict>
</array>
</dict>
<key>Input_SavedDeviceProperties</key>
<dict/>

View File

@ -63,25 +63,39 @@ enum
DSControllerState_StatesCount
};
typedef struct
{
bool state;
bool turbo;
bool autohold;
uint16_t turboPattern;
} NDSInput;
@interface CocoaDSController : NSObject
{
BOOL autohold;
BOOL isAutoholdCleared;
NSInteger micMode;
NSPoint touchLocation;
bool controllerState[DSControllerState_StatesCount];
NDSInput ndsInput[DSControllerState_StatesCount];
AudioSampleBlockGenerator *selectedAudioFileGenerator;
NSInteger paddleAdjust;
OSSpinLock spinlockControllerState;
}
@property (assign) BOOL autohold;
@property (assign) NSInteger micMode;
@property (assign) AudioSampleBlockGenerator *selectedAudioFileGenerator;
@property (assign) NSInteger paddleAdjust;
- (void) setControllerState:(BOOL)theState controlID:(const NSUInteger)controlID;
- (void) setControllerState:(BOOL)theState controlID:(const NSUInteger)controlID turbo:(const BOOL)isTurboEnabled;
- (void) setTouchState:(BOOL)theState location:(const NSPoint)theLocation;
- (void) setMicrophoneState:(BOOL)theState inputMode:(const NSInteger)inputMode;
- (void) setSineWaveGeneratorFrequency:(const double)freq;
- (void) clearAutohold;
- (void) flush;
- (void) flushEmpty;

View File

@ -26,6 +26,7 @@
@implementation CocoaDSController
@dynamic autohold;
@synthesize micMode;
@synthesize selectedAudioFileGenerator;
@synthesize paddleAdjust;
@ -40,10 +41,16 @@
for (size_t i = 0; i < DSControllerState_StatesCount; i++)
{
controllerState[i] = false;
ndsInput[i].state = false;
ndsInput[i].turbo = false;
ndsInput[i].turboPattern = false;
ndsInput[i].autohold = false;
}
spinlockControllerState = OS_SPINLOCK_INIT;
autohold = NO;
isAutoholdCleared = YES;
micMode = MICMODE_NONE;
selectedAudioFileGenerator = NULL;
touchLocation = NSMakePoint(0.0f, 0.0f);
@ -57,7 +64,43 @@
[super dealloc];
}
- (void) setControllerState:(BOOL)theState controlID:(const NSUInteger)controlID
- (void) setAutohold:(BOOL)theState
{
OSSpinLockLock(&spinlockControllerState);
autohold = theState;
if (autohold && isAutoholdCleared)
{
memset(ndsInput, 0, sizeof(ndsInput));
isAutoholdCleared = NO;
}
if (!autohold)
{
for (size_t i = 0; i < DSControllerState_StatesCount; i++)
{
ndsInput[i].state = ndsInput[i].autohold;
}
}
OSSpinLockUnlock(&spinlockControllerState);
}
- (BOOL) autohold
{
OSSpinLockLock(&spinlockControllerState);
const BOOL theState = autohold;
OSSpinLockUnlock(&spinlockControllerState);
return theState;
}
- (void) setControllerState:(BOOL)theState controlID:(const NSUInteger)controlID
{
[self setControllerState:theState controlID:controlID turbo:NO];
}
- (void) setControllerState:(BOOL)theState controlID:(const NSUInteger)controlID turbo:(const BOOL)isTurboEnabled
{
if (controlID >= DSControllerState_StatesCount)
{
@ -65,14 +108,30 @@
}
OSSpinLockLock(&spinlockControllerState);
controllerState[controlID] = (theState) ? true : false;
if (autohold)
{
if (theState)
{
ndsInput[controlID].turbo = (isTurboEnabled) ? true : false;
ndsInput[controlID].turboPattern = (ndsInput[controlID].turbo) ? 0x5555 : 0;
ndsInput[controlID].autohold = true;
}
}
else
{
ndsInput[controlID].state = (theState || ndsInput[controlID].autohold);
ndsInput[controlID].turbo = (isTurboEnabled && ndsInput[controlID].state);
ndsInput[controlID].turboPattern = (ndsInput[controlID].turbo) ? 0x5555 : 0;
}
OSSpinLockUnlock(&spinlockControllerState);
}
- (void) setTouchState:(BOOL)theState location:(const NSPoint)theLocation
{
OSSpinLockLock(&spinlockControllerState);
controllerState[DSControllerState_Touch] = (theState) ? true : false;
ndsInput[DSControllerState_Touch].state = (theState) ? true : false;
touchLocation = theLocation;
OSSpinLockUnlock(&spinlockControllerState);
}
@ -80,7 +139,7 @@
- (void) setMicrophoneState:(BOOL)theState inputMode:(const NSInteger)inputMode
{
OSSpinLockLock(&spinlockControllerState);
controllerState[DSControllerState_Microphone] = (theState) ? true : false;
ndsInput[DSControllerState_Microphone].state = (theState) ? true : false;
micMode = inputMode;
OSSpinLockUnlock(&spinlockControllerState);
}
@ -90,6 +149,20 @@
sineWaveGenerator.setFrequency(freq);
}
- (void) clearAutohold
{
[self setAutohold:NO];
OSSpinLockLock(&spinlockControllerState);
if (!isAutoholdCleared)
{
memset(ndsInput, 0, sizeof(ndsInput));
isAutoholdCleared = YES;
}
OSSpinLockUnlock(&spinlockControllerState);
}
- (void) flush
{
OSSpinLockLock(&spinlockControllerState);
@ -98,9 +171,24 @@
const NSInteger theMicMode = micMode;
static bool flushedStates[DSControllerState_StatesCount] = {0};
for (size_t i = 0; i < DSControllerState_StatesCount; i++)
if (!autohold)
{
flushedStates[i] = controllerState[i];
for (size_t i = 0; i < DSControllerState_StatesCount; i++)
{
flushedStates[i] = (ndsInput[i].state || ndsInput[i].autohold);
if (ndsInput[i].turbo)
{
const bool turboState = ndsInput[i].turboPattern & 0x0001;
flushedStates[i] = (flushedStates[i] && turboState);
ndsInput[i].turboPattern >>= 1;
ndsInput[i].turboPattern |= (turboState) ? 0x8000 : 0x0000;
}
else
{
flushedStates[i] = ndsInput[i].state;
}
}
}
OSSpinLockUnlock(&spinlockControllerState);

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

File diff suppressed because it is too large Load Diff

View File

@ -184,6 +184,7 @@ class AudioSampleBlockGenerator;
- (IBAction) toggleAllDisplays:(id)sender;
// Tools Menu
- (IBAction) autoholdSet:(id)sender;
- (IBAction) toggleGPUState:(id)sender;
- (IBAction) changeCoreSpeed:(id)sender;
@ -208,6 +209,10 @@ class AudioSampleBlockGenerator;
- (IBAction) closeSheet:(id)sender;
- (void) cmdUpdateDSController:(NSValue *)cmdAttrValue;
- (void) cmdUpdateDSControllerWithTurbo:(NSValue *)cmdAttrValue;
- (void) cmdUpdateDSTouch:(NSValue *)cmdAttrValue;
- (void) cmdUpdateDSMicrophone:(NSValue *)cmdAttrValue;
- (void) cmdUpdateDSPaddle:(NSValue *)cmdAttrValue;
- (void) cmdLoadEmuSaveStateSlot:(NSValue *)cmdAttrValue;
- (void) cmdSaveEmuSaveStateSlot:(NSValue *)cmdAttrValue;

View File

@ -881,6 +881,16 @@
[inputManager dispatchCommandUsingIBAction:_cmd sender:sender];
}
- (IBAction) autoholdSet:(id)sender
{
[inputManager dispatchCommandUsingIBAction:_cmd sender:sender];
}
- (IBAction) autoholdClear:(id)sender
{
[inputManager dispatchCommandUsingIBAction:_cmd sender:sender];
}
- (IBAction) chooseSlot1R4Directory:(id)sender
{
NSOpenPanel *panel = [NSOpenPanel openPanel];
@ -993,66 +1003,117 @@
{
CommandAttributes cmdAttr;
[cmdAttrValue getValue:&cmdAttr];
const BOOL theState = (cmdAttr.input.state == INPUT_ATTRIBUTE_STATE_ON) ? YES : NO;
const NSUInteger controlID = cmdAttr.intValue[0];
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
[[cdsCore cdsController] setControllerState:theState controlID:controlID];
}
- (void) cmdUpdateDSControllerWithTurbo:(NSValue *)cmdAttrValue
{
CommandAttributes cmdAttr;
[cmdAttrValue getValue:&cmdAttr];
const BOOL theState = (cmdAttr.input.state == INPUT_ATTRIBUTE_STATE_ON) ? YES : NO;
const NSUInteger controlID = cmdAttr.intValue[0];
const BOOL isTurboEnabled = (BOOL)cmdAttr.intValue[1];
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
[[cdsCore cdsController] setControllerState:theState controlID:controlID turbo:isTurboEnabled];
}
- (void) cmdUpdateDSTouch:(NSValue *)cmdAttrValue
{
CommandAttributes cmdAttr;
[cmdAttrValue getValue:&cmdAttr];
const BOOL theState = (cmdAttr.input.state == INPUT_ATTRIBUTE_STATE_ON) ? YES : NO;
if (controlID == DSControllerState_Touch)
const NSPoint touchLoc = (cmdAttr.useInputForIntCoord) ? NSMakePoint(cmdAttr.input.intCoordX, cmdAttr.input.intCoordY) : NSMakePoint(cmdAttr.intValue[1], cmdAttr.intValue[2]);
if (touchLoc.x >= 0.0 && touchLoc.y >= 0.0)
{
const NSPoint touchLoc = (cmdAttr.useInputForIntCoord) ? NSMakePoint(cmdAttr.input.intCoordX, cmdAttr.input.intCoordY) : NSMakePoint(cmdAttr.intValue[1], cmdAttr.intValue[2]);
if (touchLoc.x >= 0.0 && touchLoc.y >= 0.0)
{
[[cdsCore cdsController] setTouchState:theState location:touchLoc];
}
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
[[cdsCore cdsController] setTouchState:theState location:touchLoc];
}
else if (controlID == DSControllerState_Microphone)
}
- (void) cmdUpdateDSMicrophone:(NSValue *)cmdAttrValue
{
CommandAttributes cmdAttr;
[cmdAttrValue getValue:&cmdAttr];
const BOOL theState = (cmdAttr.input.state == INPUT_ATTRIBUTE_STATE_ON) ? YES : NO;
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
const NSInteger micMode = cmdAttr.intValue[1];
[[cdsCore cdsController] setMicrophoneState:theState inputMode:micMode];
const float sineWaveFrequency = cmdAttr.floatValue[0];
[[cdsCore cdsController] setSineWaveGeneratorFrequency:sineWaveFrequency];
NSString *audioFilePath = cmdAttr.object[0];
[[cdsCore cdsController] setSelectedAudioFileGenerator:[inputManager audioFileGeneratorFromFilePath:audioFilePath]];
}
- (void) cmdUpdateDSPaddle:(NSValue *)cmdAttrValue
{
CommandAttributes cmdAttr;
[cmdAttrValue getValue:&cmdAttr];
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
if (cmdAttr.input.isAnalog)
{
const NSInteger micMode = cmdAttr.intValue[1];
[[cdsCore cdsController] setMicrophoneState:theState inputMode:micMode];
const NSInteger paddleSensitivity = cmdAttr.floatValue[0];
const float paddleScalar = cmdAttr.input.scalar;
float paddleAdjust = (paddleScalar * 2.0f) - 1.0f;
const float sineWaveFrequency = cmdAttr.floatValue[0];
[[cdsCore cdsController] setSineWaveGeneratorFrequency:sineWaveFrequency];
// Clamp the paddle value.
if (paddleAdjust < -1.0f)
{
paddleAdjust = -1.0f;
}
NSString *audioFilePath = cmdAttr.object[0];
[[cdsCore cdsController] setSelectedAudioFileGenerator:[inputManager audioFileGeneratorFromFilePath:audioFilePath]];
}
else if (controlID == DSControllerState_Paddle)
{
if (cmdAttr.input.isAnalog)
if (paddleAdjust > 1.0f)
{
const NSInteger paddleSensitivity = cmdAttr.floatValue[0];
const float paddleScalar = cmdAttr.input.scalar;
float paddleAdjust = (paddleScalar * 2.0f) - 1.0f;
// Clamp the paddle value.
if (paddleAdjust < -1.0f)
{
paddleAdjust = -1.0f;
}
if (paddleAdjust > 1.0f)
{
paddleAdjust = 1.0f;
}
// Normalize the input value for the paddle.
paddleAdjust *= (float)paddleSensitivity;
[[cdsCore cdsController] setPaddleAdjust:paddleAdjust];
}
else
{
const NSInteger paddleAdjust = (theState) ? cmdAttr.intValue[1] : 0;
[[cdsCore cdsController] setPaddleAdjust:paddleAdjust];
paddleAdjust = 1.0f;
}
// Normalize the input value for the paddle.
paddleAdjust *= (float)paddleSensitivity;
[[cdsCore cdsController] setPaddleAdjust:paddleAdjust];
}
else
{
[[cdsCore cdsController] setControllerState:theState controlID:controlID];
const BOOL theState = (cmdAttr.input.state == INPUT_ATTRIBUTE_STATE_ON) ? YES : NO;
const NSInteger paddleAdjust = (theState) ? cmdAttr.intValue[1] : 0;
[[cdsCore cdsController] setPaddleAdjust:paddleAdjust];
}
}
- (void) cmdAutoholdSet:(NSValue *)cmdAttrValue
{
CommandAttributes cmdAttr;
[cmdAttrValue getValue:&cmdAttr];
const BOOL theState = (cmdAttr.input.state == INPUT_ATTRIBUTE_STATE_ON) ? YES : NO;
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
[[cdsCore cdsController] setAutohold:theState];
}
- (void) cmdAutoholdClear:(NSValue *)cmdAttrValue
{
CommandAttributes cmdAttr;
[cmdAttrValue getValue:&cmdAttr];
if (cmdAttr.input.state == INPUT_ATTRIBUTE_STATE_OFF)
{
return;
}
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
[[cdsCore cdsController] clearAutohold];
}
- (void) cmdLoadEmuSaveStateSlot:(NSValue *)cmdAttrValue
{
CommandAttributes cmdAttr;

View File

@ -231,7 +231,7 @@ void HandleDeviceRemovalCallback(void *inContext, IOReturn inResult, void *inSen
CommandAttributes NewDefaultCommandAttributes(const char *commandTag);
CommandAttributes NewCommandAttributesForSelector(const char *commandTag, const SEL theSelector);
CommandAttributes NewCommandAttributesForDSControl(const char *commandTag, const NSUInteger controlID);
CommandAttributes NewCommandAttributesForDSControl(const char *commandTag, const NSUInteger controlID, const bool supportTurbo);
void UpdateCommandAttributesWithDeviceInfoDictionary(CommandAttributes *cmdAttr, NSDictionary *deviceInfo);
NSMutableDictionary* DeviceInfoDictionaryWithCommandAttributes(const CommandAttributes *cmdAttr,

View File

@ -1044,6 +1044,8 @@ static std::tr1::unordered_map<unsigned short, std::string> keyboardNameTable; /
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Piano_256x256" ofType:@"png"]] autorelease], @"Piano: B",
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Piano_256x256" ofType:@"png"]] autorelease], @"Piano: High C",
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_PaddleKnob_256x256" ofType:@"png"]] autorelease], @"Paddle",
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_AutoholdSet_420x420" ofType:@"png"]] autorelease], @"Autohold - Set",
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_AutoholdClear_420x420" ofType:@"png"]] autorelease], @"Autohold - Clear",
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_DisplayToggle_420x420" ofType:@"png"]] autorelease], @"Toggle All Displays",
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_RotateCCW_420x420" ofType:@"png"]] autorelease], @"Rotate Display Left",
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_RotateCW_420x420" ofType:@"png"]] autorelease], @"Rotate Display Right",
@ -1051,26 +1053,28 @@ static std::tr1::unordered_map<unsigned short, std::string> keyboardNameTable; /
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Execute_420x420" ofType:@"png"]] autorelease], @"Execute",
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Pause_420x420" ofType:@"png"]] autorelease], @"Pause",
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Execute_420x420" ofType:@"png"]] autorelease], @"Execute/Pause",
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_FrameAdvance_420x420" ofType:@"png"]] autorelease], @"Frame Advance",
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_FrameJump_420x420" ofType:@"png"]] autorelease], @"Frame Jump",
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Reset_420x420" ofType:@"png"]] autorelease], @"Reset",
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_DSButtonSelect_420x420" ofType:@"png"]] autorelease], @"Touch",
[[[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_VolumeMute_16x16" ofType:@"png"]] autorelease], @"Mute/Unmute",
nil];
// Initialize the selectors used for each command tag. (Do this in code rather than in an external file.)
commandSelector["Up"] = @selector(cmdUpdateDSController:);
commandSelector["Down"] = @selector(cmdUpdateDSController:);
commandSelector["Right"] = @selector(cmdUpdateDSController:);
commandSelector["Left"] = @selector(cmdUpdateDSController:);
commandSelector["A"] = @selector(cmdUpdateDSController:);
commandSelector["B"] = @selector(cmdUpdateDSController:);
commandSelector["X"] = @selector(cmdUpdateDSController:);
commandSelector["Y"] = @selector(cmdUpdateDSController:);
commandSelector["L"] = @selector(cmdUpdateDSController:);
commandSelector["R"] = @selector(cmdUpdateDSController:);
commandSelector["Start"] = @selector(cmdUpdateDSController:);
commandSelector["Select"] = @selector(cmdUpdateDSController:);
commandSelector["Touch"] = @selector(cmdUpdateDSController:);
commandSelector["Microphone"] = @selector(cmdUpdateDSController:);
commandSelector["Up"] = @selector(cmdUpdateDSControllerWithTurbo:);
commandSelector["Down"] = @selector(cmdUpdateDSControllerWithTurbo:);
commandSelector["Right"] = @selector(cmdUpdateDSControllerWithTurbo:);
commandSelector["Left"] = @selector(cmdUpdateDSControllerWithTurbo:);
commandSelector["A"] = @selector(cmdUpdateDSControllerWithTurbo:);
commandSelector["B"] = @selector(cmdUpdateDSControllerWithTurbo:);
commandSelector["X"] = @selector(cmdUpdateDSControllerWithTurbo:);
commandSelector["Y"] = @selector(cmdUpdateDSControllerWithTurbo:);
commandSelector["L"] = @selector(cmdUpdateDSControllerWithTurbo:);
commandSelector["R"] = @selector(cmdUpdateDSControllerWithTurbo:);
commandSelector["Start"] = @selector(cmdUpdateDSControllerWithTurbo:);
commandSelector["Select"] = @selector(cmdUpdateDSControllerWithTurbo:);
commandSelector["Touch"] = @selector(cmdUpdateDSTouch:);
commandSelector["Microphone"] = @selector(cmdUpdateDSMicrophone:);
commandSelector["Debug"] = @selector(cmdUpdateDSController:);
commandSelector["Lid"] = @selector(cmdUpdateDSController:);
@ -1091,8 +1095,10 @@ static std::tr1::unordered_map<unsigned short, std::string> keyboardNameTable; /
commandSelector["Piano: A#"] = @selector(cmdUpdateDSController:);
commandSelector["Piano: B"] = @selector(cmdUpdateDSController:);
commandSelector["Piano: High C"] = @selector(cmdUpdateDSController:);
commandSelector["Paddle"] = @selector(cmdUpdateDSController:);
commandSelector["Paddle"] = @selector(cmdUpdateDSPaddle:);
commandSelector["Autohold - Set"] = @selector(cmdAutoholdSet:);
commandSelector["Autohold - Clear"] = @selector(cmdAutoholdClear:);
commandSelector["Load State Slot"] = @selector(cmdLoadEmuSaveStateSlot:);
commandSelector["Save State Slot"] = @selector(cmdSaveEmuSaveStateSlot:);
commandSelector["Copy Screen"] = @selector(cmdCopyScreen:);
@ -1112,51 +1118,53 @@ static std::tr1::unordered_map<unsigned short, std::string> keyboardNameTable; /
commandSelector["Enable/Disable GPU State"] = @selector(cmdToggleGPUState:);
// Generate the default command attributes for each command tag. (Do this in code rather than in an external file.)
CommandAttributes cmdDSControlRight = NewCommandAttributesForDSControl("Right", DSControllerState_Right);
CommandAttributes cmdDSControlLeft = NewCommandAttributesForDSControl("Left", DSControllerState_Left);
CommandAttributes cmdDSControlDown = NewCommandAttributesForDSControl("Down", DSControllerState_Down);
CommandAttributes cmdDSControlUp = NewCommandAttributesForDSControl("Up", DSControllerState_Up);
CommandAttributes cmdDSControlSelect = NewCommandAttributesForDSControl("Select", DSControllerState_Select);
CommandAttributes cmdDSControlStart = NewCommandAttributesForDSControl("Start", DSControllerState_Start);
CommandAttributes cmdDSControlB = NewCommandAttributesForDSControl("B", DSControllerState_B);
CommandAttributes cmdDSControlA = NewCommandAttributesForDSControl("A", DSControllerState_A);
CommandAttributes cmdDSControlY = NewCommandAttributesForDSControl("Y", DSControllerState_Y);
CommandAttributes cmdDSControlX = NewCommandAttributesForDSControl("X", DSControllerState_X);
CommandAttributes cmdDSControlL = NewCommandAttributesForDSControl("L", DSControllerState_L);
CommandAttributes cmdDSControlR = NewCommandAttributesForDSControl("R", DSControllerState_R);
CommandAttributes cmdDSControlDebug = NewCommandAttributesForDSControl("Debug", DSControllerState_Debug);
CommandAttributes cmdDSControlLid = NewCommandAttributesForDSControl("Lid", DSControllerState_Lid);
CommandAttributes cmdDSControlRight = NewCommandAttributesForDSControl("Right", DSControllerState_Right, true);
CommandAttributes cmdDSControlLeft = NewCommandAttributesForDSControl("Left", DSControllerState_Left, true);
CommandAttributes cmdDSControlDown = NewCommandAttributesForDSControl("Down", DSControllerState_Down, true);
CommandAttributes cmdDSControlUp = NewCommandAttributesForDSControl("Up", DSControllerState_Up, true);
CommandAttributes cmdDSControlSelect = NewCommandAttributesForDSControl("Select", DSControllerState_Select, true);
CommandAttributes cmdDSControlStart = NewCommandAttributesForDSControl("Start", DSControllerState_Start, true);
CommandAttributes cmdDSControlB = NewCommandAttributesForDSControl("B", DSControllerState_B, true);
CommandAttributes cmdDSControlA = NewCommandAttributesForDSControl("A", DSControllerState_A, true);
CommandAttributes cmdDSControlY = NewCommandAttributesForDSControl("Y", DSControllerState_Y, true);
CommandAttributes cmdDSControlX = NewCommandAttributesForDSControl("X", DSControllerState_X, true);
CommandAttributes cmdDSControlL = NewCommandAttributesForDSControl("L", DSControllerState_L, true);
CommandAttributes cmdDSControlR = NewCommandAttributesForDSControl("R", DSControllerState_R, true);
CommandAttributes cmdDSControlDebug = NewCommandAttributesForDSControl("Debug", DSControllerState_Debug, false);
CommandAttributes cmdDSControlLid = NewCommandAttributesForDSControl("Lid", DSControllerState_Lid, false);
CommandAttributes cmdDSControlTouch = NewCommandAttributesForDSControl("Touch", DSControllerState_Touch);
CommandAttributes cmdDSControlTouch = NewCommandAttributesForDSControl("Touch", DSControllerState_Touch, false);
cmdDSControlTouch.useInputForIntCoord = true;
CommandAttributes cmdDSControlMic = NewCommandAttributesForDSControl("Microphone", DSControllerState_Microphone);
CommandAttributes cmdDSControlMic = NewCommandAttributesForDSControl("Microphone", DSControllerState_Microphone, false);
cmdDSControlMic.intValue[1] = MICMODE_INTERNAL_NOISE;
cmdDSControlMic.floatValue[0] = 250.0f;
CommandAttributes cmdGuitarGripGreen = NewCommandAttributesForDSControl("Guitar Grip: Green", DSControllerState_GuitarGrip_Green);
CommandAttributes cmdGuitarGripRed = NewCommandAttributesForDSControl("Guitar Grip: Red", DSControllerState_GuitarGrip_Red);
CommandAttributes cmdGuitarGripYellow = NewCommandAttributesForDSControl("Guitar Grip: Yellow", DSControllerState_GuitarGrip_Yellow);
CommandAttributes cmdGuitarGripBlue = NewCommandAttributesForDSControl("Guitar Grip: Blue", DSControllerState_GuitarGrip_Blue);
CommandAttributes cmdPianoC = NewCommandAttributesForDSControl("Piano: C", DSControllerState_Piano_C);
CommandAttributes cmdPianoCSharp = NewCommandAttributesForDSControl("Piano: C#", DSControllerState_Piano_CSharp);
CommandAttributes cmdPianoD = NewCommandAttributesForDSControl("Piano: D", DSControllerState_Piano_D);
CommandAttributes cmdPianoDSharp = NewCommandAttributesForDSControl("Piano: D#", DSControllerState_Piano_DSharp);
CommandAttributes cmdPianoE = NewCommandAttributesForDSControl("Piano: E", DSControllerState_Piano_E);
CommandAttributes cmdPianoF = NewCommandAttributesForDSControl("Piano: F", DSControllerState_Piano_F);
CommandAttributes cmdPianoFSharp = NewCommandAttributesForDSControl("Piano: F#", DSControllerState_Piano_FSharp);
CommandAttributes cmdPianoG = NewCommandAttributesForDSControl("Piano: G", DSControllerState_Piano_G);
CommandAttributes cmdPianoGSharp = NewCommandAttributesForDSControl("Piano: G#", DSControllerState_Piano_GSharp);
CommandAttributes cmdPianoA = NewCommandAttributesForDSControl("Piano: A", DSControllerState_Piano_A);
CommandAttributes cmdPianoASharp = NewCommandAttributesForDSControl("Piano: A#", DSControllerState_Piano_ASharp);
CommandAttributes cmdPianoB = NewCommandAttributesForDSControl("Piano: B", DSControllerState_Piano_B);
CommandAttributes cmdPianoHighC = NewCommandAttributesForDSControl("Piano: High C", DSControllerState_Piano_HighC);
CommandAttributes cmdGuitarGripGreen = NewCommandAttributesForDSControl("Guitar Grip: Green", DSControllerState_GuitarGrip_Green, false);
CommandAttributes cmdGuitarGripRed = NewCommandAttributesForDSControl("Guitar Grip: Red", DSControllerState_GuitarGrip_Red, false);
CommandAttributes cmdGuitarGripYellow = NewCommandAttributesForDSControl("Guitar Grip: Yellow", DSControllerState_GuitarGrip_Yellow, false);
CommandAttributes cmdGuitarGripBlue = NewCommandAttributesForDSControl("Guitar Grip: Blue", DSControllerState_GuitarGrip_Blue, false);
CommandAttributes cmdPianoC = NewCommandAttributesForDSControl("Piano: C", DSControllerState_Piano_C, false);
CommandAttributes cmdPianoCSharp = NewCommandAttributesForDSControl("Piano: C#", DSControllerState_Piano_CSharp, false);
CommandAttributes cmdPianoD = NewCommandAttributesForDSControl("Piano: D", DSControllerState_Piano_D, false);
CommandAttributes cmdPianoDSharp = NewCommandAttributesForDSControl("Piano: D#", DSControllerState_Piano_DSharp, false);
CommandAttributes cmdPianoE = NewCommandAttributesForDSControl("Piano: E", DSControllerState_Piano_E, false);
CommandAttributes cmdPianoF = NewCommandAttributesForDSControl("Piano: F", DSControllerState_Piano_F, false);
CommandAttributes cmdPianoFSharp = NewCommandAttributesForDSControl("Piano: F#", DSControllerState_Piano_FSharp, false);
CommandAttributes cmdPianoG = NewCommandAttributesForDSControl("Piano: G", DSControllerState_Piano_G, false);
CommandAttributes cmdPianoGSharp = NewCommandAttributesForDSControl("Piano: G#", DSControllerState_Piano_GSharp, false);
CommandAttributes cmdPianoA = NewCommandAttributesForDSControl("Piano: A", DSControllerState_Piano_A, false);
CommandAttributes cmdPianoASharp = NewCommandAttributesForDSControl("Piano: A#", DSControllerState_Piano_ASharp, false);
CommandAttributes cmdPianoB = NewCommandAttributesForDSControl("Piano: B", DSControllerState_Piano_B, false);
CommandAttributes cmdPianoHighC = NewCommandAttributesForDSControl("Piano: High C", DSControllerState_Piano_HighC, false);
CommandAttributes cmdPaddle = NewCommandAttributesForDSControl("Paddle", DSControllerState_Paddle);
CommandAttributes cmdPaddle = NewCommandAttributesForDSControl("Paddle", DSControllerState_Paddle, false);
cmdPaddle.allowAnalogInput = true;
cmdPaddle.intValue[1] = 0;
cmdPaddle.floatValue[0] = 10.0f;
CommandAttributes cmdAutoholdSet = NewCommandAttributesForSelector("Autohold - Set", commandSelector["Autohold - Set"]);
CommandAttributes cmdAutoholdClear = NewCommandAttributesForSelector("Autohold - Clear", commandSelector["Autohold - Clear"]);
CommandAttributes cmdLoadEmuSaveStateSlot = NewCommandAttributesForSelector("Load State Slot", commandSelector["Load State Slot"]);
CommandAttributes cmdSaveEmuSaveStateSlot = NewCommandAttributesForSelector("Save State Slot", commandSelector["Save State Slot"]);
CommandAttributes cmdCopyScreen = NewCommandAttributesForSelector("Copy Screen", commandSelector["Copy Screen"]);
@ -1223,6 +1231,8 @@ static std::tr1::unordered_map<unsigned short, std::string> keyboardNameTable; /
defaultCommandAttributes["Piano: High C"] = cmdPianoHighC;
defaultCommandAttributes["Paddle"] = cmdPaddle;
defaultCommandAttributes["Autohold - Set"] = cmdAutoholdSet;
defaultCommandAttributes["Autohold - Clear"] = cmdAutoholdClear;
defaultCommandAttributes["Load State Slot"] = cmdLoadEmuSaveStateSlot;
defaultCommandAttributes["Save State Slot"] = cmdSaveEmuSaveStateSlot;
defaultCommandAttributes["Copy Screen"] = cmdCopyScreen;
@ -1243,6 +1253,8 @@ static std::tr1::unordered_map<unsigned short, std::string> keyboardNameTable; /
defaultCommandAttributes["Enable/Disable GPU State"] = cmdToggleGPUState;
// Map all IBActions (the target object is an EmuControllerDelegate)
[self addMappingForIBAction:@selector(autoholdSet:) commandAttributes:&cmdAutoholdSet];
[self addMappingForIBAction:@selector(autoholdClear:) commandAttributes:&cmdAutoholdClear];
[self addMappingForIBAction:@selector(loadEmuSaveStateSlot:) commandAttributes:&cmdLoadEmuSaveStateSlot];
[self addMappingForIBAction:@selector(saveEmuSaveStateSlot:) commandAttributes:&cmdSaveEmuSaveStateSlot];
[self addMappingForIBAction:@selector(copy:) commandAttributes:&cmdCopyScreen];
@ -1316,7 +1328,8 @@ static std::tr1::unordered_map<unsigned short, std::string> keyboardNameTable; /
// Force DS control commands to use IDs from code instead of from the file.
// (In other words, we can't trust an external file with this information since
// IDs might desync if the DS Control ID enumeration changes.)
if (cmdAttr.selector == @selector(cmdUpdateDSController:))
if (cmdAttr.selector == @selector(cmdUpdateDSController:) ||
cmdAttr.selector == @selector(cmdUpdateDSControllerWithTurbo:))
{
cmdAttr.intValue[0] = defaultCommandAttributes[cmdTag].intValue[0];
}
@ -1623,7 +1636,23 @@ static std::tr1::unordered_map<unsigned short, std::string> keyboardNameTable; /
{
NSString *inputSummary = nil;
if (strncmp(commandTag, "Touch", INPUT_HANDLER_STRING_LENGTH) == 0)
if ((strncmp(commandTag, "Up", INPUT_HANDLER_STRING_LENGTH) == 0) ||
(strncmp(commandTag, "Down", INPUT_HANDLER_STRING_LENGTH) == 0) ||
(strncmp(commandTag, "Left", INPUT_HANDLER_STRING_LENGTH) == 0) ||
(strncmp(commandTag, "Right", INPUT_HANDLER_STRING_LENGTH) == 0) ||
(strncmp(commandTag, "A", INPUT_HANDLER_STRING_LENGTH) == 0) ||
(strncmp(commandTag, "B", INPUT_HANDLER_STRING_LENGTH) == 0) ||
(strncmp(commandTag, "X", INPUT_HANDLER_STRING_LENGTH) == 0) ||
(strncmp(commandTag, "Y", INPUT_HANDLER_STRING_LENGTH) == 0) ||
(strncmp(commandTag, "L", INPUT_HANDLER_STRING_LENGTH) == 0) ||
(strncmp(commandTag, "R", INPUT_HANDLER_STRING_LENGTH) == 0) ||
(strncmp(commandTag, "Start", INPUT_HANDLER_STRING_LENGTH) == 0) ||
(strncmp(commandTag, "Select", INPUT_HANDLER_STRING_LENGTH) == 0))
{
const BOOL isTurbo = [(NSNumber *)[deviceInfo valueForKey:@"intValue1"] boolValue];
inputSummary = [NSString stringWithFormat:@"Turbo: %@", (isTurbo) ? @"Yes" : @"No"];
}
else if (strncmp(commandTag, "Touch", INPUT_HANDLER_STRING_LENGTH) == 0)
{
const BOOL useInputForIntCoord = [(NSNumber *)[deviceInfo valueForKey:@"useInputForIntCoord"] boolValue];
if (useInputForIntCoord)
@ -1980,10 +2009,45 @@ CommandAttributes NewCommandAttributesForSelector(const char *commandTag, const
return cmdAttr;
}
CommandAttributes NewCommandAttributesForDSControl(const char *commandTag, const NSUInteger controlID)
CommandAttributes NewCommandAttributesForDSControl(const char *commandTag, const NSUInteger controlID, const bool supportTurbo)
{
CommandAttributes cmdAttr = NewCommandAttributesForSelector(commandTag, @selector(cmdUpdateDSController:));
switch (controlID)
{
case DSControllerState_Right:
case DSControllerState_Left:
case DSControllerState_Down:
case DSControllerState_Up:
case DSControllerState_Select:
case DSControllerState_Start:
case DSControllerState_B:
case DSControllerState_A:
case DSControllerState_Y:
case DSControllerState_X:
case DSControllerState_L:
case DSControllerState_R:
cmdAttr.selector = @selector(cmdUpdateDSControllerWithTurbo:);
break;
case DSControllerState_Touch:
cmdAttr.selector = @selector(cmdUpdateDSTouch:);
break;
case DSControllerState_Microphone:
cmdAttr.selector = @selector(cmdUpdateDSMicrophone:);
break;
case DSControllerState_Paddle:
cmdAttr.selector = @selector(cmdUpdateDSPaddle:);
break;
default:
break;
}
cmdAttr.intValue[0] = controlID;
cmdAttr.intValue[1] = NO;
return cmdAttr;
}

View File

@ -39,6 +39,7 @@
NSWindow *inputProfileSheet;
NSWindow *inputProfileRenameSheet;
NSWindow *inputSettingsNDSInput;
NSWindow *inputSettingsMicrophone;
NSWindow *inputSettingsTouch;
NSWindow *inputSettingsLoadStateSlot;
@ -70,6 +71,7 @@
@property (readonly) IBOutlet NSWindow *inputProfileSheet;
@property (readonly) IBOutlet NSWindow *inputProfileRenameSheet;
@property (readonly) IBOutlet NSWindow *inputSettingsNDSInput;
@property (readonly) IBOutlet NSWindow *inputSettingsMicrophone;
@property (readonly) IBOutlet NSWindow *inputSettingsTouch;
@property (readonly) IBOutlet NSWindow *inputSettingsLoadStateSlot;

View File

@ -36,6 +36,7 @@
@synthesize inputPrefOutlineView;
@synthesize inputSettingsController;
@synthesize inputProfileController;
@synthesize inputSettingsNDSInput;
@synthesize inputSettingsMicrophone;
@synthesize inputSettingsTouch;
@synthesize inputSettingsLoadStateSlot;
@ -168,6 +169,18 @@
- (void) initSettingsSheets
{
inputSettingsMappings = [[NSDictionary alloc] initWithObjectsAndKeys:
inputSettingsNDSInput, @"Up",
inputSettingsNDSInput, @"Down",
inputSettingsNDSInput, @"Right",
inputSettingsNDSInput, @"Left",
inputSettingsNDSInput, @"A",
inputSettingsNDSInput, @"B",
inputSettingsNDSInput, @"X",
inputSettingsNDSInput, @"Y",
inputSettingsNDSInput, @"L",
inputSettingsNDSInput, @"R",
inputSettingsNDSInput, @"Start",
inputSettingsNDSInput, @"Select",
inputSettingsMicrophone, @"Microphone",
inputSettingsTouch, @"Touch",
inputSettingsLoadStateSlot, @"Load State Slot",