diff --git a/ios/Assets/Default-568h@2x.png b/apple/Assets/Default-568h@2x.png similarity index 100% rename from ios/Assets/Default-568h@2x.png rename to apple/Assets/Default-568h@2x.png diff --git a/ios/Assets/Default.png b/apple/Assets/Default.png similarity index 100% rename from ios/Assets/Default.png rename to apple/Assets/Default.png diff --git a/ios/Assets/Default@2x.png b/apple/Assets/Default@2x.png similarity index 100% rename from ios/Assets/Default@2x.png rename to apple/Assets/Default@2x.png diff --git a/ios/Assets/Icon-72.png b/apple/Assets/Icon-72.png similarity index 100% rename from ios/Assets/Icon-72.png rename to apple/Assets/Icon-72.png diff --git a/ios/Assets/Icon.png b/apple/Assets/Icon.png similarity index 100% rename from ios/Assets/Icon.png rename to apple/Assets/Icon.png diff --git a/ios/Assets/PauseIndicatorView.xib b/apple/Assets/PauseIndicatorView.xib similarity index 100% rename from ios/Assets/PauseIndicatorView.xib rename to apple/Assets/PauseIndicatorView.xib diff --git a/ios/Assets/PauseView.xib b/apple/Assets/PauseView.xib similarity index 100% rename from ios/Assets/PauseView.xib rename to apple/Assets/PauseView.xib diff --git a/ios/Assets/ic_pause.png b/apple/Assets/ic_pause.png similarity index 100% rename from ios/Assets/ic_pause.png rename to apple/Assets/ic_pause.png diff --git a/ios/BUILDING b/apple/BUILDING similarity index 100% rename from ios/BUILDING rename to apple/BUILDING diff --git a/ios/README.md b/apple/README.md similarity index 100% rename from ios/README.md rename to apple/README.md diff --git a/ios/RetroArch.xcodeproj/project.pbxproj b/apple/RetroArch.xcodeproj/project.pbxproj similarity index 93% rename from ios/RetroArch.xcodeproj/project.pbxproj rename to apple/RetroArch.xcodeproj/project.pbxproj index df87a566df..f278d9f4c6 100644 --- a/ios/RetroArch.xcodeproj/project.pbxproj +++ b/apple/RetroArch.xcodeproj/project.pbxproj @@ -13,8 +13,9 @@ 96297A0F16C5AEA100E6DCE0 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 96297A0E16C5AEA100E6DCE0 /* main.m */; }; 96297A2716C82FF100E6DCE0 /* overlays in Resources */ = {isa = PBXBuildFile; fileRef = 96297A2616C82FF100E6DCE0 /* overlays */; }; 96337E82176AC6E5004685F3 /* utility.m in Sources */ = {isa = PBXBuildFile; fileRef = 96337E81176AC6E5004685F3 /* utility.m */; }; - 96337E84176AD5D9004685F3 /* browser.m in Sources */ = {isa = PBXBuildFile; fileRef = 96337E83176AD5D9004685F3 /* browser.m */; }; - 96337E86176AD6B6004685F3 /* settings.m in Sources */ = {isa = PBXBuildFile; fileRef = 96337E85176AD6B6004685F3 /* settings.m */; }; + 96355CCE1788C90B0010DBFA /* browser.m in Sources */ = {isa = PBXBuildFile; fileRef = 96355CCA1788C90B0010DBFA /* browser.m */; }; + 96355CCF1788C90B0010DBFA /* RALogView.m in Sources */ = {isa = PBXBuildFile; fileRef = 96355CCB1788C90B0010DBFA /* RALogView.m */; }; + 96355CD01788C90B0010DBFA /* settings.m in Sources */ = {isa = PBXBuildFile; fileRef = 96355CCC1788C90B0010DBFA /* settings.m */; }; 96366C5516C9AC3300D64A22 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96366C5416C9AC3300D64A22 /* CoreAudio.framework */; }; 96366C5916C9ACF500D64A22 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96366C5816C9ACF500D64A22 /* AudioToolbox.framework */; }; 963F5AC816CC523B009BBD19 /* RAGameView.m in Sources */ = {isa = PBXBuildFile; fileRef = 963F5AC516CC523B009BBD19 /* RAGameView.m */; }; @@ -33,7 +34,6 @@ 96AFAE3016C1D4EA009DE44C /* GLKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96AFAE2F16C1D4EA009DE44C /* GLKit.framework */; }; 96AFAE3216C1D4EA009DE44C /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96AFAE3116C1D4EA009DE44C /* OpenGLES.framework */; }; 96AFAE3816C1D4EA009DE44C /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 96AFAE3616C1D4EA009DE44C /* InfoPlist.strings */; }; - 96F9C28316FFA55F002455B3 /* RALogView.m in Sources */ = {isa = PBXBuildFile; fileRef = 96F9C28216FFA55F002455B3 /* RALogView.m */; }; D48581DE16F823F9004BEB17 /* griffin.c in Sources */ = {isa = PBXBuildFile; fileRef = D48581DD16F823F9004BEB17 /* griffin.c */; }; /* End PBXBuildFile section */ @@ -43,13 +43,15 @@ 9614C71F16DDC018000B36EF /* RetroArch copy-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = "RetroArch copy-Info.plist"; path = "/Users/jason/Documents/Projects/ios/RetroArch/ios/RetroArch copy-Info.plist"; sourceTree = ""; }; 962979F416C43B9500E6DCE0 /* ic_dir.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ic_dir.png; path = "../../android/phoenix/res/drawable-xhdpi/ic_dir.png"; sourceTree = ""; }; 962979F516C43B9500E6DCE0 /* ic_file.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = ic_file.png; path = "../../android/phoenix/res/drawable-xhdpi/ic_file.png"; sourceTree = ""; }; - 96297A0A16C5AD8D00E6DCE0 /* RetroArch_iOS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RetroArch_iOS.h; sourceTree = ""; }; - 96297A0D16C5ADDA00E6DCE0 /* views.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = views.h; sourceTree = ""; }; 96297A0E16C5AEA100E6DCE0 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 96297A2616C82FF100E6DCE0 /* overlays */ = {isa = PBXFileReference; lastKnownFileType = folder; name = overlays; path = ../../media/overlays; sourceTree = ""; }; 96337E81176AC6E5004685F3 /* utility.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = utility.m; sourceTree = ""; }; - 96337E83176AD5D9004685F3 /* browser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = browser.m; sourceTree = ""; }; - 96337E85176AD6B6004685F3 /* settings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = settings.m; sourceTree = ""; }; + 96355CC81788C8FC0010DBFA /* RAGameView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RAGameView.h; sourceTree = ""; }; + 96355CCA1788C90B0010DBFA /* browser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = browser.m; sourceTree = ""; }; + 96355CCB1788C90B0010DBFA /* RALogView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RALogView.m; sourceTree = ""; }; + 96355CCC1788C90B0010DBFA /* settings.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = settings.m; sourceTree = ""; }; + 96355CCD1788C90B0010DBFA /* views.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = views.h; sourceTree = ""; }; + 96355CD11788CF190010DBFA /* RetroArch_Apple.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RetroArch_Apple.h; sourceTree = ""; }; 96366C5416C9AC3300D64A22 /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; 96366C5816C9ACF500D64A22 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; 963F5AC516CC523B009BBD19 /* RAGameView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RAGameView.m; sourceTree = ""; }; @@ -76,7 +78,6 @@ 96AFAF4516C1E00A009DE44C /* bitmap.bin */ = {isa = PBXFileReference; lastKnownFileType = archive.macbinary; path = bitmap.bin; sourceTree = ""; }; 96AFAF4616C1E00A009DE44C /* bitmap.bmp */ = {isa = PBXFileReference; lastKnownFileType = image.bmp; path = bitmap.bmp; sourceTree = ""; }; 96C19C2616D455BE00FE8D5A /* rarch_wrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rarch_wrapper.h; sourceTree = ""; }; - 96F9C28216FFA55F002455B3 /* RALogView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RALogView.m; sourceTree = ""; }; D48581DD16F823F9004BEB17 /* griffin.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = griffin.c; path = ../griffin/griffin.c; sourceTree = ""; }; /* End PBXFileReference section */ @@ -98,6 +99,17 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 96355CC91788C90B0010DBFA /* iOS */ = { + isa = PBXGroup; + children = ( + 96355CCA1788C90B0010DBFA /* browser.m */, + 96355CCB1788C90B0010DBFA /* RALogView.m */, + 96355CCC1788C90B0010DBFA /* settings.m */, + 96355CCD1788C90B0010DBFA /* views.h */, + ); + path = iOS; + sourceTree = ""; + }; 966B9CB716E41E7A005B61E1 /* Assets */ = { isa = PBXGroup; children = ( @@ -154,17 +166,15 @@ 96AFAE3316C1D4EA009DE44C /* RetroArch */ = { isa = PBXGroup; children = ( - 96337E83176AD5D9004685F3 /* browser.m */, + 96355CC91788C90B0010DBFA /* iOS */, 96297A0E16C5AEA100E6DCE0 /* main.m */, 963F5AC516CC523B009BBD19 /* RAGameView.m */, - 96F9C28216FFA55F002455B3 /* RALogView.m */, + 96355CC81788C8FC0010DBFA /* RAGameView.h */, 9605EA9A170288EA001D47B0 /* RAModuleInfo.m */, 9605EA99170288EA001D47B0 /* RAModuleInfo.h */, 96C19C2616D455BE00FE8D5A /* rarch_wrapper.h */, - 96297A0A16C5AD8D00E6DCE0 /* RetroArch_iOS.h */, - 96337E85176AD6B6004685F3 /* settings.m */, + 96355CD11788CF190010DBFA /* RetroArch_Apple.h */, 96337E81176AC6E5004685F3 /* utility.m */, - 96297A0D16C5ADDA00E6DCE0 /* views.h */, ); path = RetroArch; sourceTree = ""; @@ -304,11 +314,11 @@ 96297A0F16C5AEA100E6DCE0 /* main.m in Sources */, 963F5AC816CC523B009BBD19 /* RAGameView.m in Sources */, D48581DE16F823F9004BEB17 /* griffin.c in Sources */, - 96F9C28316FFA55F002455B3 /* RALogView.m in Sources */, 9605EA9B170288EA001D47B0 /* RAModuleInfo.m in Sources */, 96337E82176AC6E5004685F3 /* utility.m in Sources */, - 96337E84176AD5D9004685F3 /* browser.m in Sources */, - 96337E86176AD6B6004685F3 /* settings.m in Sources */, + 96355CCE1788C90B0010DBFA /* browser.m in Sources */, + 96355CCF1788C90B0010DBFA /* RALogView.m in Sources */, + 96355CD01788C90B0010DBFA /* settings.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/ios/RetroArch.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/apple/RetroArch.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 100% rename from ios/RetroArch.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to apple/RetroArch.xcodeproj/project.xcworkspace/contents.xcworkspacedata diff --git a/ios/RetroArch/RAGameView.m b/apple/RetroArch/RAGameView.m similarity index 99% rename from ios/RetroArch/RAGameView.m rename to apple/RetroArch/RAGameView.m index 71dd844af9..9b3d6eb468 100644 --- a/ios/RetroArch/RAGameView.m +++ b/apple/RetroArch/RAGameView.m @@ -13,7 +13,7 @@ * If not, see . */ -#import "RetroArch_iOS.h" +#import "RetroArch_Apple.h" #import "views.h" #include "rarch_wrapper.h" #include "input/ios_input.h" diff --git a/ios/RetroArch/RAModuleInfo.h b/apple/RetroArch/RAModuleInfo.h similarity index 100% rename from ios/RetroArch/RAModuleInfo.h rename to apple/RetroArch/RAModuleInfo.h diff --git a/ios/RetroArch/RAModuleInfo.m b/apple/RetroArch/RAModuleInfo.m similarity index 98% rename from ios/RetroArch/RAModuleInfo.m rename to apple/RetroArch/RAModuleInfo.m index 8f19d4ea17..2a956548c9 100644 --- a/ios/RetroArch/RAModuleInfo.m +++ b/apple/RetroArch/RAModuleInfo.m @@ -13,7 +13,7 @@ * If not, see . */ -#import "RetroArch_iOS.h" +#import "RetroArch_Apple.h" #import "RAModuleInfo.h" #import "views.h" @@ -156,7 +156,7 @@ static NSString* build_string_pair(NSString* stringA, NSString* stringB) if (indexPath.section == _firmwareSectionIndex) { NSString* item = (NSString*)[self itemForIndexPath:indexPath]; - ios_display_alert(objc_getAssociatedObject(item, "OTHER"), item); + apple_display_alert(objc_getAssociatedObject(item, "OTHER"), item); } } diff --git a/ios/RetroArch/RetroArch-Info.plist b/apple/RetroArch/RetroArch-Info.plist similarity index 100% rename from ios/RetroArch/RetroArch-Info.plist rename to apple/RetroArch/RetroArch-Info.plist diff --git a/ios/RetroArch/RetroArch_iOS.h b/apple/RetroArch/RetroArch_Apple.h similarity index 76% rename from ios/RetroArch/RetroArch_iOS.h rename to apple/RetroArch/RetroArch_Apple.h index c8c2f2396b..699db481a4 100644 --- a/ios/RetroArch/RetroArch_iOS.h +++ b/apple/RetroArch/RetroArch_Apple.h @@ -19,11 +19,22 @@ #import "RAModuleInfo.h" -@interface RetroArch_iOS : UINavigationController +void apple_run_core(RAModuleInfo* core, const char* file); + +@protocol RetroArch_Platform +- (void)loadingCore:(RAModuleInfo*)core withFile:(const char*)file; +- (void)unloadingCore:(RAModuleInfo*)core; +@end + +#ifdef IOS + +@interface RetroArch_iOS : UINavigationController + (RetroArch_iOS*)get; -- (void)runGame:(NSString*)path withModule:(RAModuleInfo*)module; +- (void)loadingCore:(RAModuleInfo*)core withFile:(const char*)file; +- (void)unloadingCore:(RAModuleInfo*)core; + - (void)refreshConfig; - (void)refreshSystemConfig; @@ -33,8 +44,10 @@ @end +#endif + // utility.m -extern void ios_display_alert(NSString* message, NSString* title); +extern void apple_display_alert(NSString* message, NSString* title); extern void objc_clear_config_hack(); extern bool path_make_and_check_directory(const char* path, mode_t mode, int amode); extern NSString* objc_get_value_from_config(config_file_t* config, NSString* name, NSString* defaultValue); diff --git a/ios/RetroArch/en.lproj/InfoPlist.strings b/apple/RetroArch/en.lproj/InfoPlist.strings similarity index 100% rename from ios/RetroArch/en.lproj/InfoPlist.strings rename to apple/RetroArch/en.lproj/InfoPlist.strings diff --git a/ios/RetroArch/RALogView.m b/apple/RetroArch/iOS/RALogView.m similarity index 100% rename from ios/RetroArch/RALogView.m rename to apple/RetroArch/iOS/RALogView.m diff --git a/ios/RetroArch/browser.m b/apple/RetroArch/iOS/browser.m similarity index 93% rename from ios/RetroArch/browser.m rename to apple/RetroArch/iOS/browser.m index eaa772d2b4..a5ed28f792 100644 --- a/ios/RetroArch/browser.m +++ b/apple/RetroArch/iOS/browser.m @@ -16,7 +16,7 @@ #include #include -#import "RetroArch_iOS.h" +#import "../RetroArch_Apple.h" #import "views.h" #include "conf/config_file.h" @@ -115,7 +115,7 @@ } } else - ios_display_alert([NSString stringWithFormat:@"Browsed path is not a directory: %@", _path], 0); + apple_display_alert([NSString stringWithFormat:@"Browsed path is not a directory: %@", _path], 0); [self.tableView reloadData]; } @@ -129,8 +129,8 @@ else { if (access(_path.UTF8String, R_OK | W_OK | X_OK)) - ios_display_alert(@"The directory containing the selected file has limited permissions. This may " - "prevent zipped games from loading, and will cause some cores to not function.", 0); + apple_display_alert(@"The directory containing the selected file has limited permissions. This may " + "prevent zipped games from loading, and will cause some cores to not function.", 0); [[RetroArch_iOS get] pushViewController:[[RAModuleList alloc] initWithGame:path.path] animated:YES]; } @@ -190,7 +190,7 @@ - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { - [RetroArch_iOS.get runGame:_game withModule:(RAModuleInfo*)[self itemForIndexPath:indexPath]]; + apple_run_core((RAModuleInfo*)[self itemForIndexPath:indexPath], _game.UTF8String); } - (void)infoButtonTapped:(id)sender @@ -199,7 +199,7 @@ if (info && info.data) [RetroArch_iOS.get pushViewController:[[RAModuleInfoList alloc] initWithModuleInfo:info] animated:YES]; else - ios_display_alert(@"No information available.", 0); + apple_display_alert(@"No information available.", 0); } - (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath diff --git a/ios/RetroArch/settings.m b/apple/RetroArch/iOS/settings.m similarity index 99% rename from ios/RetroArch/settings.m rename to apple/RetroArch/iOS/settings.m index 5d7544b81d..ffbe50861d 100644 --- a/ios/RetroArch/settings.m +++ b/apple/RetroArch/iOS/settings.m @@ -13,13 +13,13 @@ * If not, see . */ -#import "RetroArch_iOS.h" +#import "../RetroArch_Apple.h" #import "views.h" -#include "input/ios_input.h" -#include "input/keycode.h" -#include "input/BTStack/btdynamic.h" -#include "input/BTStack/btpad.h" +#include "../input/ios_input.h" +#include "../input/keycode.h" +#include "../input/BTStack/btdynamic.h" +#include "../input/BTStack/btpad.h" enum SettingTypes { diff --git a/ios/RetroArch/views.h b/apple/RetroArch/iOS/views.h similarity index 100% rename from ios/RetroArch/views.h rename to apple/RetroArch/iOS/views.h diff --git a/ios/RetroArch/input/BTStack/btdynamic.c b/apple/RetroArch/input/BTStack/btdynamic.c similarity index 100% rename from ios/RetroArch/input/BTStack/btdynamic.c rename to apple/RetroArch/input/BTStack/btdynamic.c diff --git a/ios/RetroArch/input/BTStack/btdynamic.h b/apple/RetroArch/input/BTStack/btdynamic.h similarity index 100% rename from ios/RetroArch/input/BTStack/btdynamic.h rename to apple/RetroArch/input/BTStack/btdynamic.h diff --git a/ios/RetroArch/input/BTStack/btpad.c b/apple/RetroArch/input/BTStack/btpad.c similarity index 100% rename from ios/RetroArch/input/BTStack/btpad.c rename to apple/RetroArch/input/BTStack/btpad.c diff --git a/ios/RetroArch/input/BTStack/btpad.h b/apple/RetroArch/input/BTStack/btpad.h similarity index 100% rename from ios/RetroArch/input/BTStack/btpad.h rename to apple/RetroArch/input/BTStack/btpad.h diff --git a/ios/RetroArch/input/BTStack/btpad_ps3.c b/apple/RetroArch/input/BTStack/btpad_ps3.c similarity index 100% rename from ios/RetroArch/input/BTStack/btpad_ps3.c rename to apple/RetroArch/input/BTStack/btpad_ps3.c diff --git a/ios/RetroArch/input/BTStack/btpad_queue.c b/apple/RetroArch/input/BTStack/btpad_queue.c similarity index 100% rename from ios/RetroArch/input/BTStack/btpad_queue.c rename to apple/RetroArch/input/BTStack/btpad_queue.c diff --git a/ios/RetroArch/input/BTStack/btpad_queue.h b/apple/RetroArch/input/BTStack/btpad_queue.h similarity index 100% rename from ios/RetroArch/input/BTStack/btpad_queue.h rename to apple/RetroArch/input/BTStack/btpad_queue.h diff --git a/ios/RetroArch/input/BTStack/btpad_wii.c b/apple/RetroArch/input/BTStack/btpad_wii.c similarity index 100% rename from ios/RetroArch/input/BTStack/btpad_wii.c rename to apple/RetroArch/input/BTStack/btpad_wii.c diff --git a/ios/RetroArch/input/BTStack/btstack/btstack.h b/apple/RetroArch/input/BTStack/btstack/btstack.h similarity index 100% rename from ios/RetroArch/input/BTStack/btstack/btstack.h rename to apple/RetroArch/input/BTStack/btstack/btstack.h diff --git a/ios/RetroArch/input/BTStack/btstack/hci_cmds.h b/apple/RetroArch/input/BTStack/btstack/hci_cmds.h similarity index 100% rename from ios/RetroArch/input/BTStack/btstack/hci_cmds.h rename to apple/RetroArch/input/BTStack/btstack/hci_cmds.h diff --git a/ios/RetroArch/input/BTStack/btstack/linked_list.h b/apple/RetroArch/input/BTStack/btstack/linked_list.h similarity index 100% rename from ios/RetroArch/input/BTStack/btstack/linked_list.h rename to apple/RetroArch/input/BTStack/btstack/linked_list.h diff --git a/ios/RetroArch/input/BTStack/btstack/run_loop.h b/apple/RetroArch/input/BTStack/btstack/run_loop.h similarity index 100% rename from ios/RetroArch/input/BTStack/btstack/run_loop.h rename to apple/RetroArch/input/BTStack/btstack/run_loop.h diff --git a/ios/RetroArch/input/BTStack/btstack/sdp_util.h b/apple/RetroArch/input/BTStack/btstack/sdp_util.h similarity index 100% rename from ios/RetroArch/input/BTStack/btstack/sdp_util.h rename to apple/RetroArch/input/BTStack/btstack/sdp_util.h diff --git a/ios/RetroArch/input/BTStack/btstack/utils.h b/apple/RetroArch/input/BTStack/btstack/utils.h similarity index 100% rename from ios/RetroArch/input/BTStack/btstack/utils.h rename to apple/RetroArch/input/BTStack/btstack/utils.h diff --git a/ios/RetroArch/input/BTStack/wiimote.c b/apple/RetroArch/input/BTStack/wiimote.c similarity index 100% rename from ios/RetroArch/input/BTStack/wiimote.c rename to apple/RetroArch/input/BTStack/wiimote.c diff --git a/ios/RetroArch/input/BTStack/wiimote.h b/apple/RetroArch/input/BTStack/wiimote.h similarity index 100% rename from ios/RetroArch/input/BTStack/wiimote.h rename to apple/RetroArch/input/BTStack/wiimote.h diff --git a/ios/RetroArch/input/ios_input.c b/apple/RetroArch/input/ios_input.c similarity index 100% rename from ios/RetroArch/input/ios_input.c rename to apple/RetroArch/input/ios_input.c diff --git a/ios/RetroArch/input/ios_input.h b/apple/RetroArch/input/ios_input.h similarity index 100% rename from ios/RetroArch/input/ios_input.h rename to apple/RetroArch/input/ios_input.h diff --git a/ios/RetroArch/input/ios_joypad.c b/apple/RetroArch/input/ios_joypad.c similarity index 100% rename from ios/RetroArch/input/ios_joypad.c rename to apple/RetroArch/input/ios_joypad.c diff --git a/ios/RetroArch/input/keycode.h b/apple/RetroArch/input/keycode.h similarity index 100% rename from ios/RetroArch/input/keycode.h rename to apple/RetroArch/input/keycode.h diff --git a/ios/RetroArch/main.m b/apple/RetroArch/main.m similarity index 80% rename from ios/RetroArch/main.m rename to apple/RetroArch/main.m index 4c1d197e7f..4bddb2e18a 100644 --- a/ios/RetroArch/main.m +++ b/apple/RetroArch/main.m @@ -16,7 +16,7 @@ #include #include -#import "RetroArch_iOS.h" +#import "RetroArch_Apple.h" #import "views.h" #include "rarch_wrapper.h" @@ -30,7 +30,124 @@ //#define HAVE_DEBUG_FILELOG static bool use_tv_mode; +static RetroArch_iOS* apple_platform; + +// From frontend/frontend_ios.c +extern void* rarch_main_apple(void* args); +extern void apple_frontend_post_event(void (*fn)(void*), void* userdata); + + +// These are based on the tag property of the button used to trigger the event +enum basic_event_t { RESET = 1, LOAD_STATE = 2, SAVE_STATE = 3, QUIT = 4 }; +static void event_basic_command(void* userdata) +{ + switch ((enum basic_event_t)userdata) + { + case RESET: rarch_game_reset(); return; + case LOAD_STATE: rarch_load_state(); return; + case SAVE_STATE: rarch_save_state(); return; + case QUIT: g_extern.system.shutdown = true; return; + } +} + +static void event_set_state_slot(void* userdata) +{ + g_extern.state_slot = (uint32_t)userdata; +} + +static void event_show_rgui(void* userdata) +{ + const bool in_menu = g_extern.lifecycle_mode_state & (1 << MODE_MENU); + g_extern.lifecycle_mode_state &= ~(1ULL << (in_menu ? MODE_MENU : MODE_GAME)); + g_extern.lifecycle_mode_state |= (1ULL << (in_menu ? MODE_GAME : MODE_MENU)); +} + +static void event_reload_config(void* userdata) +{ + objc_clear_config_hack(); + + uninit_drivers(); + config_load(); + init_drivers(); +} + +#pragma mark EMULATION +static pthread_t apple_retro_thread; +static bool apple_is_paused; +static bool apple_is_running; +static RAModuleInfo* apple_core; + +void apple_run_core(RAModuleInfo* core, const char* file) +{ + if (!apple_is_running) + { + [apple_platform loadingCore:core withFile:file]; + + apple_core = core; + apple_is_running = true; + + struct rarch_main_wrap* load_data = malloc(sizeof(struct rarch_main_wrap)); + memset(load_data, 0, sizeof(struct rarch_main_wrap)); + +#ifdef IOS +// load_data->sram_path = strdup(self.systemDirectory.UTF8String); +// load_data->state_path = strdup(self.systemDirectory.UTF8String); +#endif + + if (file && core) + { + load_data->libretro_path = strdup(apple_core.path.UTF8String); + load_data->rom_path = strdup(file); +#ifdef IOS + load_data->config_path = strdup(apple_core.configPath.UTF8String); +#endif + } +#ifdef IOS + else + load_data->config_path = strdup(RAModuleInfo.globalConfigPath.UTF8String); +#endif + + if (pthread_create(&apple_retro_thread, 0, rarch_main_apple, load_data)) + { + apple_rarch_exited((void*)1); + return; + } + + pthread_detach(apple_retro_thread); +// [self refreshSystemConfig]; + } +} + +void apple_rarch_exited(void* result) +{ + if (result) + apple_display_alert(@"Failed to load game.", 0); + + if (apple_is_running) + { + [apple_platform unloadingCore:apple_core]; + + apple_is_running = false; + +// +// [self popToViewController:[RAGameView get] animated:NO]; +// [self popViewControllerAnimated:NO]; + +// btpad_set_inquiry_state(true); + } + + apple_core = nil; + + if (use_tv_mode) + apple_run_core(nil, 0); +} + +// +// IOS +// +#pragma mark IOS +#ifdef IOS // Input helpers: This is kept here because it needs objective-c static void handle_touch_event(NSArray* touches) { @@ -79,8 +196,6 @@ static void handle_touch_event(NSArray* touches) } } -@end - int main(int argc, char *argv[]) { @autoreleasepool { @@ -95,54 +210,13 @@ int main(int argc, char *argv[]) } } -// From frontend/frontend_ios.c -extern void* rarch_main_apple(void* args); -extern void apple_frontend_post_event(void (*fn)(void*), void* userdata); - - -// These are based on the tag property of the button used to trigger the event -enum basic_event_t { RESET = 1, LOAD_STATE = 2, SAVE_STATE = 3, QUIT = 4 }; -static void event_basic_command(void* userdata) -{ - switch ((enum basic_event_t)userdata) - { - case RESET: rarch_game_reset(); return; - case LOAD_STATE: rarch_load_state(); return; - case SAVE_STATE: rarch_save_state(); return; - case QUIT: g_extern.system.shutdown = true; return; - } -} - -static void event_set_state_slot(void* userdata) -{ - g_extern.state_slot = (uint32_t)userdata; -} - -static void event_show_rgui(void* userdata) -{ - const bool in_menu = g_extern.lifecycle_mode_state & (1 << MODE_MENU); - g_extern.lifecycle_mode_state &= ~(1ULL << (in_menu ? MODE_MENU : MODE_GAME)); - g_extern.lifecycle_mode_state |= (1ULL << (in_menu ? MODE_GAME : MODE_MENU)); -} - -static void event_reload_config(void* userdata) -{ - objc_clear_config_hack(); - - uninit_drivers(); - config_load(); - init_drivers(); -} +@end @implementation RetroArch_iOS { UIWindow* _window; - pthread_t _retroThread; - bool _isGameTop; - bool _isPaused; - bool _isRunning; uint32_t _settingMenusInBackStack; uint32_t _enabledOrientations; @@ -157,6 +231,7 @@ static void event_reload_config(void* userdata) // UIApplicationDelegate - (void)applicationDidFinishLaunching:(UIApplication *)application { + apple_platform = self; self.delegate = self; // Setup window @@ -170,21 +245,21 @@ static void event_reload_config(void* userdata) self.systemConfigPath = [self.systemDirectory stringByAppendingPathComponent:@"frontend.cfg"]; if (!path_make_and_check_directory(self.documentsDirectory.UTF8String, 0755, R_OK | W_OK | X_OK)) - ios_display_alert([NSString stringWithFormat:@"Failed to create or access base directory: %@", self.documentsDirectory], 0); + apple_display_alert([NSString stringWithFormat:@"Failed to create or access base directory: %@", self.documentsDirectory], 0); else if (!path_make_and_check_directory(self.systemDirectory.UTF8String, 0755, R_OK | W_OK | X_OK)) - ios_display_alert([NSString stringWithFormat:@"Failed to create or access system directory: %@", self.systemDirectory], 0); + apple_display_alert([NSString stringWithFormat:@"Failed to create or access system directory: %@", self.systemDirectory], 0); else { [self pushViewController:[RADirectoryList directoryListAtBrowseRoot] animated:YES]; [self refreshSystemConfig]; if (use_tv_mode) - [self runGame:nil withModule:nil]; + apple_run_core(nil, 0); } // Warn if there are no cores present if ([RAModuleInfo getModules].count == 0) - ios_display_alert(@"No libretro cores were found. You will not be able to play any games.", 0); + apple_display_alert(@"No libretro cores were found. You will not be able to play any games.", 0); } - (void)applicationWillEnterForeground:(UIApplication *)application @@ -253,71 +328,28 @@ static void event_reload_config(void* userdata) } -#pragma mark EMULATION -- (void)runGame:(NSString*)path withModule:(RAModuleInfo*)module +#pragma mark RetroArch_Platform +- (void)loadingCore:(RAModuleInfo*)core withFile:(const char*)file { - if (!_isRunning) - { - [self pushViewController:RAGameView.get animated:NO]; + [self pushViewController:RAGameView.get animated:NO]; + [RASettingsList refreshModuleConfig:core]; - _module = module; - [RASettingsList refreshModuleConfig:_module]; + btpad_set_inquiry_state(false); - _isRunning = true; - - btpad_set_inquiry_state(false); - - struct rarch_main_wrap* load_data = malloc(sizeof(struct rarch_main_wrap)); - memset(load_data, 0, sizeof(struct rarch_main_wrap)); - - load_data->sram_path = strdup(self.systemDirectory.UTF8String); - load_data->state_path = strdup(self.systemDirectory.UTF8String); - - if (path && module) - { - load_data->libretro_path = strdup(_module.path.UTF8String); - load_data->rom_path = strdup(path.UTF8String); - load_data->config_path = strdup(_module.configPath.UTF8String); - } - else - load_data->config_path = strdup(RAModuleInfo.globalConfigPath.UTF8String); - - if (pthread_create(&_retroThread, 0, rarch_main_apple, load_data)) - { - [self rarchExited:NO]; - return; - } - - pthread_detach(_retroThread); - [self refreshSystemConfig]; - } + [self refreshSystemConfig]; } -- (void)rarchExited:(BOOL)successful +- (void)unloadingCore:(RAModuleInfo*)core { - if (!successful) - ios_display_alert(@"Failed to load game.", 0); - - if (_isRunning) - { - _isRunning = false; + [self popToViewController:[RAGameView get] animated:NO]; + [self popViewControllerAnimated:NO]; - // - [self popToViewController:[RAGameView get] animated:NO]; - [self popViewControllerAnimated:NO]; - - btpad_set_inquiry_state(true); - } - - if (use_tv_mode) - [self runGame:nil withModule:nil]; - - _module = nil; + btpad_set_inquiry_state(true); } - (void)refreshConfig { - if (_isRunning) + if (apple_is_running) apple_frontend_post_event(&event_reload_config, 0); else objc_clear_config_hack(); @@ -376,9 +408,9 @@ static void event_reload_config(void* userdata) - (IBAction)showPauseMenu:(id)sender { - if (_isRunning && !_isPaused && _isGameTop) + if (apple_is_running && !apple_is_paused && _isGameTop) { - _isPaused = true; + apple_is_paused = true; [[RAGameView get] openPauseMenu]; btpad_set_inquiry_state(true); @@ -387,7 +419,7 @@ static void event_reload_config(void* userdata) - (IBAction)basicEvent:(id)sender { - if (_isRunning) + if (apple_is_running) apple_frontend_post_event(&event_basic_command, ((UIView*)sender).tag); [self closePauseMenu:sender]; @@ -395,13 +427,13 @@ static void event_reload_config(void* userdata) - (IBAction)chooseState:(id)sender { - if (_isRunning) + if (apple_is_running) apple_frontend_post_event(event_set_state_slot, (void*)((UISegmentedControl*)sender).selectedSegmentIndex); } - (IBAction)showRGUI:(id)sender { - if (_isRunning) + if (apple_is_running) apple_frontend_post_event(event_show_rgui, 0); [self closePauseMenu:sender]; @@ -410,7 +442,7 @@ static void event_reload_config(void* userdata) - (IBAction)closePauseMenu:(id)sender { [[RAGameView get] closePauseMenu]; - _isPaused = false; + apple_is_paused = false; btpad_set_inquiry_state(false); } @@ -427,12 +459,27 @@ static void event_reload_config(void* userdata) @end -void apple_rarch_exited(void* result) + +#endif + +// +// OSX +// +#pragma mark OSX +#ifdef OSX + +@implementation AppDelegate + +- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication { - [[RetroArch_iOS get] rarchExited:result ? NO : YES]; + return YES; } -char* ios_get_rarch_system_directory() +@end + +int main(int argc, char *argv[]) { - return strdup([RetroArch_iOS.get.systemDirectory UTF8String]); + return NSApplicationMain(argc, (const char **) argv); } + +#endif \ No newline at end of file diff --git a/ios/RetroArch/rarch_wrapper.h b/apple/RetroArch/rarch_wrapper.h similarity index 100% rename from ios/RetroArch/rarch_wrapper.h rename to apple/RetroArch/rarch_wrapper.h diff --git a/ios/RetroArch/utility.m b/apple/RetroArch/utility.m similarity index 93% rename from ios/RetroArch/utility.m rename to apple/RetroArch/utility.m index f7b991a494..f7ae385ea8 100644 --- a/ios/RetroArch/utility.m +++ b/apple/RetroArch/utility.m @@ -15,21 +15,23 @@ #include +#include "RetroArch_Apple.h" + #include "general.h" #include "file.h" #import "views.h" -#ifdef IOS -void ios_display_alert(NSString* message, NSString* title) +void apple_display_alert(NSString* message, NSString* title) { +#ifdef IOS UIAlertView* alert = [[UIAlertView alloc] initWithTitle:title ? title : @"RetroArch" message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; -} #endif +} // Little nudge to prevent stale values when reloading the confg file void objc_clear_config_hack() @@ -61,6 +63,12 @@ bool path_make_and_check_directory(const char* path, mode_t mode, int amode) } #ifdef IOS + +char* ios_get_rarch_system_directory() +{ + return strdup([RetroArch_iOS.get.systemDirectory UTF8String]); +} + // Simple class to reduce code duplication for fixed table views @implementation RATableViewController @@ -92,4 +100,5 @@ bool path_make_and_check_directory(const char* path, mode_t mode, int amode) } @end -#endif \ No newline at end of file + +#endif diff --git a/ios/modules/desmume_libretro.info b/apple/modules/desmume_libretro.info similarity index 100% rename from ios/modules/desmume_libretro.info rename to apple/modules/desmume_libretro.info diff --git a/ios/modules/example.info b/apple/modules/example.info similarity index 100% rename from ios/modules/example.info rename to apple/modules/example.info diff --git a/ios/modules/fb_alpha_libretro.info b/apple/modules/fb_alpha_libretro.info similarity index 100% rename from ios/modules/fb_alpha_libretro.info rename to apple/modules/fb_alpha_libretro.info diff --git a/ios/modules/fceumm_libretro.info b/apple/modules/fceumm_libretro.info similarity index 100% rename from ios/modules/fceumm_libretro.info rename to apple/modules/fceumm_libretro.info diff --git a/ios/modules/gambatte_libretro.info b/apple/modules/gambatte_libretro.info similarity index 100% rename from ios/modules/gambatte_libretro.info rename to apple/modules/gambatte_libretro.info diff --git a/ios/modules/genesis_plus_gx_libretro.info b/apple/modules/genesis_plus_gx_libretro.info similarity index 100% rename from ios/modules/genesis_plus_gx_libretro.info rename to apple/modules/genesis_plus_gx_libretro.info diff --git a/ios/modules/mame078_libretro.info b/apple/modules/mame078_libretro.info similarity index 100% rename from ios/modules/mame078_libretro.info rename to apple/modules/mame078_libretro.info diff --git a/ios/modules/mednafen_gba_libretro.info b/apple/modules/mednafen_gba_libretro.info similarity index 100% rename from ios/modules/mednafen_gba_libretro.info rename to apple/modules/mednafen_gba_libretro.info diff --git a/ios/modules/mednafen_ngp_libretro.info b/apple/modules/mednafen_ngp_libretro.info similarity index 100% rename from ios/modules/mednafen_ngp_libretro.info rename to apple/modules/mednafen_ngp_libretro.info diff --git a/ios/modules/mednafen_pce_fast_libretro.info b/apple/modules/mednafen_pce_fast_libretro.info similarity index 100% rename from ios/modules/mednafen_pce_fast_libretro.info rename to apple/modules/mednafen_pce_fast_libretro.info diff --git a/ios/modules/mednafen_psx_libretro.info b/apple/modules/mednafen_psx_libretro.info similarity index 100% rename from ios/modules/mednafen_psx_libretro.info rename to apple/modules/mednafen_psx_libretro.info diff --git a/ios/modules/mednafen_vb_libretro.info b/apple/modules/mednafen_vb_libretro.info similarity index 100% rename from ios/modules/mednafen_vb_libretro.info rename to apple/modules/mednafen_vb_libretro.info diff --git a/ios/modules/mednafen_wswan_libretro.info b/apple/modules/mednafen_wswan_libretro.info similarity index 100% rename from ios/modules/mednafen_wswan_libretro.info rename to apple/modules/mednafen_wswan_libretro.info diff --git a/ios/modules/modelviewer_libretro.info b/apple/modules/modelviewer_libretro.info similarity index 100% rename from ios/modules/modelviewer_libretro.info rename to apple/modules/modelviewer_libretro.info diff --git a/ios/modules/nestopia_libretro.info b/apple/modules/nestopia_libretro.info similarity index 100% rename from ios/modules/nestopia_libretro.info rename to apple/modules/nestopia_libretro.info diff --git a/ios/modules/nxengine_libretro.info b/apple/modules/nxengine_libretro.info similarity index 100% rename from ios/modules/nxengine_libretro.info rename to apple/modules/nxengine_libretro.info diff --git a/ios/modules/pcsx_rearmed_libretro.info b/apple/modules/pcsx_rearmed_libretro.info similarity index 100% rename from ios/modules/pcsx_rearmed_libretro.info rename to apple/modules/pcsx_rearmed_libretro.info diff --git a/ios/modules/picodrive_libretro.info b/apple/modules/picodrive_libretro.info similarity index 100% rename from ios/modules/picodrive_libretro.info rename to apple/modules/picodrive_libretro.info diff --git a/ios/modules/prboom_libretro.info b/apple/modules/prboom_libretro.info similarity index 100% rename from ios/modules/prboom_libretro.info rename to apple/modules/prboom_libretro.info diff --git a/ios/modules/quicknes_libretro.info b/apple/modules/quicknes_libretro.info similarity index 100% rename from ios/modules/quicknes_libretro.info rename to apple/modules/quicknes_libretro.info diff --git a/ios/modules/scenewalker_libretro.info b/apple/modules/scenewalker_libretro.info similarity index 100% rename from ios/modules/scenewalker_libretro.info rename to apple/modules/scenewalker_libretro.info diff --git a/ios/modules/snes9x_libretro.info b/apple/modules/snes9x_libretro.info similarity index 100% rename from ios/modules/snes9x_libretro.info rename to apple/modules/snes9x_libretro.info diff --git a/ios/modules/snes9x_next_libretro.info b/apple/modules/snes9x_next_libretro.info similarity index 100% rename from ios/modules/snes9x_next_libretro.info rename to apple/modules/snes9x_next_libretro.info diff --git a/ios/modules/stella_libretro.info b/apple/modules/stella_libretro.info similarity index 100% rename from ios/modules/stella_libretro.info rename to apple/modules/stella_libretro.info diff --git a/ios/modules/tyrquake_libretro.info b/apple/modules/tyrquake_libretro.info similarity index 100% rename from ios/modules/tyrquake_libretro.info rename to apple/modules/tyrquake_libretro.info diff --git a/ios/modules/vba_next_libretro.info b/apple/modules/vba_next_libretro.info similarity index 100% rename from ios/modules/vba_next_libretro.info rename to apple/modules/vba_next_libretro.info diff --git a/ios/script/build b/apple/script/build similarity index 100% rename from ios/script/build rename to apple/script/build diff --git a/ios/script/build.config b/apple/script/build.config similarity index 100% rename from ios/script/build.config rename to apple/script/build.config diff --git a/ios/script/mobileprovisionParser b/apple/script/mobileprovisionParser similarity index 100% rename from ios/script/mobileprovisionParser rename to apple/script/mobileprovisionParser diff --git a/frontend/frontend_objc.c b/frontend/frontend_objc.c index 5a0e85678e..1bb13d8472 100644 --- a/frontend/frontend_objc.c +++ b/frontend/frontend_objc.c @@ -21,8 +21,8 @@ #include "../conf/config_file.h" #include "../file.h" -#ifdef IOS -#include "../ios/RetroArch/rarch_wrapper.h" +#ifdef __APPLE__ +#include "../apple/RetroArch/rarch_wrapper.h" #endif #ifdef HAVE_RGUI @@ -93,10 +93,13 @@ void* rarch_main_apple(void* args) } #ifdef HAVE_RGUI + +#ifdef IOS char* system_directory = ios_get_rarch_system_directory(); strlcpy(g_extern.savestate_dir, system_directory, sizeof(g_extern.savestate_dir)); strlcpy(g_extern.savefile_dir, system_directory, sizeof(g_extern.savefile_dir)); free(system_directory); +#endif menu_init(); g_extern.lifecycle_mode_state |= 1ULL << MODE_GAME; diff --git a/gfx/context/ioseagl_ctx.c b/gfx/context/ioseagl_ctx.c index 3f17d75ded..30bd01df56 100644 --- a/gfx/context/ioseagl_ctx.c +++ b/gfx/context/ioseagl_ctx.c @@ -25,7 +25,7 @@ #include "../shader_glsl.h" #endif -#include "../../ios/RetroArch/rarch_wrapper.h" +#include "../../apple/RetroArch/rarch_wrapper.h" static bool gfx_ctx_bind_api(enum gfx_ctx_api api) { diff --git a/griffin/griffin.c b/griffin/griffin.c index f7bfa964b4..9349658ea0 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -255,14 +255,14 @@ INPUT #include "../android/native/jni/input_autodetect.c" #include "../android/native/jni/input_android.c" #elif defined(IOS) -#include "../ios/RetroArch/input/ios_input.c" -#include "../ios/RetroArch/input/ios_joypad.c" -#include "../ios/RetroArch/input/BTStack/btdynamic.c" -#include "../ios/RetroArch/input/BTStack/wiimote.c" -#include "../ios/RetroArch/input/BTStack/btpad.c" -#include "../ios/RetroArch/input/BTStack/btpad_ps3.c" -#include "../ios/RetroArch/input/BTStack/btpad_wii.c" -#include "../ios/RetroArch/input/BTStack/btpad_queue.c" +#include "../apple/RetroArch/input/ios_input.c" +#include "../apple/RetroArch/input/ios_joypad.c" +#include "../apple/RetroArch/input/BTStack/btdynamic.c" +#include "../apple/RetroArch/input/BTStack/wiimote.c" +#include "../apple/RetroArch/input/BTStack/btpad.c" +#include "../apple/RetroArch/input/BTStack/btpad_ps3.c" +#include "../apple/RetroArch/input/BTStack/btpad_wii.c" +#include "../apple/RetroArch/input/BTStack/btpad_queue.c" #elif defined(__BLACKBERRY_QNX__) #include "../blackberry-qnx/qnx_input.c" #endif