diff --git a/Cores/fmsx/PVfMSX.xcodeproj/project.pbxproj b/Cores/fmsx/PVfMSX.xcodeproj/project.pbxproj index dc6450860d..4c4c12bfbb 100644 --- a/Cores/fmsx/PVfMSX.xcodeproj/project.pbxproj +++ b/Cores/fmsx/PVfMSX.xcodeproj/project.pbxproj @@ -17,14 +17,22 @@ B35E6BF5207CD2740040709A /* CoreAudioKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B35E6BF3207CD2730040709A /* CoreAudioKit.framework */; platformFilters = (driverkit, ios, maccatalyst, macos, watchos, ); }; B35E6BF6207CD2740040709A /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B35E6BF4207CD2740040709A /* CoreAudio.framework */; }; B35E6BF9207D00D00040709A /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B35E6BF8207D00D00040709A /* AVFoundation.framework */; }; - B37022C82872553E00B3F6DA /* PVfMSXCore.mm in Sources */ = {isa = PBXBuildFile; fileRef = B37022C6287253B300B3F6DA /* PVfMSXCore.mm */; }; - B37022C92872554300B3F6DA /* PVfMSXCore.h in Headers */ = {isa = PBXBuildFile; fileRef = B37022C5287253B300B3F6DA /* PVfMSXCore.h */; settings = {ATTRIBUTES = (Public, ); }; }; + B37022C82872553E00B3F6DA /* PVfMSXCoreBridge.mm in Sources */ = {isa = PBXBuildFile; fileRef = B37022C6287253B300B3F6DA /* PVfMSXCoreBridge.mm */; }; + B37022C92872554300B3F6DA /* PVfMSXCoreBridge.h in Headers */ = {isa = PBXBuildFile; fileRef = B37022C5287253B300B3F6DA /* PVfMSXCoreBridge.h */; settings = {ATTRIBUTES = (Public, ); }; }; B37022CB2872556600B3F6DA /* Core.plist in Resources */ = {isa = PBXBuildFile; fileRef = B37022BF287253B300B3F6DA /* Core.plist */; }; B37022CD2872558F00B3F6DA /* PVfMSX.h in Headers */ = {isa = PBXBuildFile; fileRef = B37022C0287253B300B3F6DA /* PVfMSX.h */; settings = {ATTRIBUTES = (Public, ); }; }; B39768F82859E23200558958 /* libfMSX-libretro.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B3344BC32859E088006E6B3A /* libfMSX-libretro.a */; }; + B3AD6F2E2D246A10001E5EC3 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3AD6F2D2D246A10001E5EC3 /* OpenGL.framework */; platformFilter = maccatalyst; }; + B3AD72422D246B03001E5EC3 /* PVfMSXCore.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3AD72412D246B03001E5EC3 /* PVfMSXCore.swift */; }; + B3AD72442D246BC9001E5EC3 /* CorePlist.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3AD72432D246BC9001E5EC3 /* CorePlist.swift */; }; + B3AD72472D246C37001E5EC3 /* PVPlists in Frameworks */ = {isa = PBXBuildFile; productRef = B3AD72462D246C37001E5EC3 /* PVPlists */; }; + B3AD72492D246C9A001E5EC3 /* CorePlist-Generated.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3AD72482D246C9A001E5EC3 /* CorePlist-Generated.swift */; }; + B3AD724C2D246D7C001E5EC3 /* PVEmulatorCore in Frameworks */ = {isa = PBXBuildFile; productRef = B3AD724B2D246D7C001E5EC3 /* PVEmulatorCore */; }; B3AFCFB32977A87D00A01010 /* PVLogging in Frameworks */ = {isa = PBXBuildFile; productRef = B3AFCFB22977A87D00A01010 /* PVLogging */; }; - B3C7621D20783243009950E4 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3C7621C20783243009950E4 /* OpenGLES.framework */; platformFilter = ios; }; + B3C7621D20783243009950E4 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3C7621C20783243009950E4 /* OpenGLES.framework */; platformFilters = (ios, tvos, watchos, ); }; B3C7621F2078325C009950E4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3C7621E2078325C009950E4 /* Foundation.framework */; }; + B3CBAF8B2D2490C000D5224E /* opll.c in Sources */ = {isa = PBXBuildFile; fileRef = B3CBAF872D2490C000D5224E /* opll.c */; }; + B3CBAF8C2D2490C000D5224E /* WrapNukeYKT.c in Sources */ = {isa = PBXBuildFile; fileRef = B3CBAF892D2490C000D5224E /* WrapNukeYKT.c */; }; B3E2AA652CB6531C00E2636D /* PVCoreObjCBridge in Frameworks */ = {isa = PBXBuildFile; productRef = B3E2AA642CB6531C00E2636D /* PVCoreObjCBridge */; }; B3E2AA7F2CB6725B00E2636D /* PVCoreBridgeRetro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3E2AA7E2CB6725B00E2636D /* PVCoreBridgeRetro.framework */; }; B3EBB19B28729B4300EAEB37 /* Z80.c in Sources */ = {isa = PBXBuildFile; fileRef = B3EBAC122872971F00EAEB37 /* Z80.c */; }; @@ -124,18 +132,27 @@ B37022BF287253B300B3F6DA /* Core.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Core.plist; sourceTree = ""; }; B37022C0287253B300B3F6DA /* PVfMSX.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PVfMSX.h; sourceTree = ""; }; B37022C1287253B300B3F6DA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B37022C5287253B300B3F6DA /* PVfMSXCore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PVfMSXCore.h; sourceTree = ""; }; - B37022C6287253B300B3F6DA /* PVfMSXCore.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = PVfMSXCore.mm; sourceTree = ""; }; + B37022C5287253B300B3F6DA /* PVfMSXCoreBridge.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PVfMSXCoreBridge.h; sourceTree = ""; }; + B37022C6287253B300B3F6DA /* PVfMSXCoreBridge.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = PVfMSXCoreBridge.mm; sourceTree = ""; }; B39769132859E3A300558958 /* PVLibrary.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PVLibrary.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B39769172859E3AD00558958 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.3.sdk/System/Library/Frameworks/CoreFoundation.framework; sourceTree = DEVELOPER_DIR; }; B39769182859E3AD00558958 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.3.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; B3A41BEC286E76330054E9A5 /* PVLibRetro.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PVLibRetro.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B3A41BEF286E76490054E9A5 /* PVLibRetro.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PVLibRetro.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B3AD6F2D2D246A10001E5EC3 /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX15.2.sdk/System/Library/Frameworks/OpenGL.framework; sourceTree = DEVELOPER_DIR; }; + B3AD72412D246B03001E5EC3 /* PVfMSXCore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PVfMSXCore.swift; sourceTree = ""; }; + B3AD72432D246BC9001E5EC3 /* CorePlist.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CorePlist.swift; sourceTree = ""; }; + B3AD72482D246C9A001E5EC3 /* CorePlist-Generated.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "CorePlist-Generated.swift"; sourceTree = ""; }; B3B104B8218F281B00210C39 /* PVSupport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PVSupport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B3C7621020783162009950E4 /* PVfMSX.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PVfMSX.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B3C7621C20783243009950E4 /* OpenGLES.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGLES.framework; path = System/Library/Frameworks/OpenGLES.framework; sourceTree = SDKROOT; }; B3C7621E2078325C009950E4 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; B3C7622120783297009950E4 /* PVSupport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PVSupport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B3CBAF852D2490C000D5224E /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; + B3CBAF862D2490C000D5224E /* opll.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = opll.h; sourceTree = ""; }; + B3CBAF872D2490C000D5224E /* opll.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = opll.c; sourceTree = ""; }; + B3CBAF882D2490C000D5224E /* WrapNukeYKT.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WrapNukeYKT.h; sourceTree = ""; }; + B3CBAF892D2490C000D5224E /* WrapNukeYKT.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = WrapNukeYKT.c; sourceTree = ""; }; B3E2AA7E2CB6725B00E2636D /* PVCoreBridgeRetro.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PVCoreBridgeRetro.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B3EBABF72872971F00EAEB37 /* libretro.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = libretro.c; sourceTree = ""; }; B3EBABF92872971F00EAEB37 /* Sound.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Sound.h; sourceTree = ""; }; @@ -300,10 +317,13 @@ B35E6BF5207CD2740040709A /* CoreAudioKit.framework in Frameworks */, B35E6BF6207CD2740040709A /* CoreAudio.framework in Frameworks */, B3AFCFB32977A87D00A01010 /* PVLogging in Frameworks */, + B3AD6F2E2D246A10001E5EC3 /* OpenGL.framework in Frameworks */, B30E99CC2C6F041900C1431E /* PVCoreBridge in Frameworks */, B3135BAB26E4CDC50047F338 /* QuartzCore.framework in Frameworks */, + B3AD724C2D246D7C001E5EC3 /* PVEmulatorCore in Frameworks */, B35E6BF2207CD2680040709A /* AudioToolbox.framework in Frameworks */, B3E2AA652CB6531C00E2636D /* PVCoreObjCBridge in Frameworks */, + B3AD72472D246C37001E5EC3 /* PVPlists in Frameworks */, B339468B20783F48008DBAB4 /* libz.tbd in Frameworks */, B39768F82859E23200558958 /* libfMSX-libretro.a in Frameworks */, B339468920783F41008DBAB4 /* libpthread.tbd in Frameworks */, @@ -329,8 +349,11 @@ B37022C4287253B300B3F6DA /* PVfMSXCore */ = { isa = PBXGroup; children = ( - B37022C5287253B300B3F6DA /* PVfMSXCore.h */, - B37022C6287253B300B3F6DA /* PVfMSXCore.mm */, + B3AD72432D246BC9001E5EC3 /* CorePlist.swift */, + B3AD72412D246B03001E5EC3 /* PVfMSXCore.swift */, + B3AD72482D246C9A001E5EC3 /* CorePlist-Generated.swift */, + B37022C5287253B300B3F6DA /* PVfMSXCoreBridge.h */, + B37022C6287253B300B3F6DA /* PVfMSXCoreBridge.mm */, ); path = PVfMSXCore; sourceTree = ""; @@ -361,6 +384,7 @@ B3C7621B20783242009950E4 /* Frameworks */ = { isa = PBXGroup; children = ( + B3AD6F2D2D246A10001E5EC3 /* OpenGL.framework */, B3E2AA7E2CB6725B00E2636D /* PVCoreBridgeRetro.framework */, B3A41BEF286E76490054E9A5 /* PVLibRetro.framework */, B3A41BEC286E76330054E9A5 /* PVLibRetro.framework */, @@ -384,6 +408,19 @@ name = Frameworks; sourceTree = ""; }; + B3CBAF8A2D2490C000D5224E /* NukeYKT */ = { + isa = PBXGroup; + children = ( + B3CBAF852D2490C000D5224E /* LICENSE */, + B3CBAF862D2490C000D5224E /* opll.h */, + B3CBAF872D2490C000D5224E /* opll.c */, + B3CBAF882D2490C000D5224E /* WrapNukeYKT.h */, + B3CBAF892D2490C000D5224E /* WrapNukeYKT.c */, + ); + name = NukeYKT; + path = "../fmsx/fmsx-libretro/NukeYKT"; + sourceTree = SOURCE_ROOT; + }; B3EBABF62872971F00EAEB37 /* fmsx-libretro */ = { isa = PBXGroup; children = ( @@ -399,6 +436,7 @@ B3EBAC942872972000EAEB37 /* link.T */, B3EBAC932872972000EAEB37 /* .gitlab-ci.yml */, B3EBAC982872972000EAEB37 /* .travis.yml */, + B3CBAF8A2D2490C000D5224E /* NukeYKT */, B3EBABF82872971F00EAEB37 /* EMULib */, B3EBAC1A2872971F00EAEB37 /* fMSX */, B3EBAC952872972000EAEB37 /* jni */, @@ -751,7 +789,7 @@ buildActionMask = 2147483647; files = ( B37022CD2872558F00B3F6DA /* PVfMSX.h in Headers */, - B37022C92872554300B3F6DA /* PVfMSXCore.h in Headers */, + B37022C92872554300B3F6DA /* PVfMSXCoreBridge.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -812,6 +850,8 @@ B30E98852C6EEDD900C1431E /* PVSupport */, B30E99CB2C6F041900C1431E /* PVCoreBridge */, B3E2AA642CB6531C00E2636D /* PVCoreObjCBridge */, + B3AD72462D246C37001E5EC3 /* PVPlists */, + B3AD724B2D246D7C001E5EC3 /* PVEmulatorCore */, ); productName = PVReicast; productReference = B3C7621020783162009950E4 /* PVfMSX.framework */; @@ -834,6 +874,7 @@ }; B3C7620F20783162009950E4 = { CreatedOnToolsVersion = 9.3; + LastSwiftMigration = 1620; }; }; }; @@ -862,6 +903,8 @@ B30E98842C6EEDD900C1431E /* XCLocalSwiftPackageReference "../../PVSupport" */, B30E99CA2C6F041900C1431E /* XCLocalSwiftPackageReference "../../PVCoreBridge" */, B3E2AA632CB6531C00E2636D /* XCLocalSwiftPackageReference "../../PVCoreObjCBridge" */, + B3AD72452D246C37001E5EC3 /* XCLocalSwiftPackageReference "../../PVPlists" */, + B3AD724A2D246D7C001E5EC3 /* XCLocalSwiftPackageReference "../../PVEmulatorCore" */, ); productRefGroup = B3C7621120783162009950E4 /* Products */; projectDirPath = ""; @@ -912,6 +955,8 @@ B3EBB1A428729B7200EAEB37 /* I8255.c in Sources */, B3EBB1A128729B7200EAEB37 /* WD1793.c in Sources */, B3EBB19E28729B7200EAEB37 /* MCF.c in Sources */, + B3CBAF8B2D2490C000D5224E /* opll.c in Sources */, + B3CBAF8C2D2490C000D5224E /* WrapNukeYKT.c in Sources */, B3EBB19F28729B7200EAEB37 /* Sound.c in Sources */, B3EBB19B28729B4300EAEB37 /* Z80.c in Sources */, B3EBB1A328729B7200EAEB37 /* SHA1.c in Sources */, @@ -951,7 +996,10 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B37022C82872553E00B3F6DA /* PVfMSXCore.mm in Sources */, + B3AD72442D246BC9001E5EC3 /* CorePlist.swift in Sources */, + B3AD72492D246C9A001E5EC3 /* CorePlist-Generated.swift in Sources */, + B37022C82872553E00B3F6DA /* PVfMSXCoreBridge.mm in Sources */, + B3AD72422D246B03001E5EC3 /* PVfMSXCore.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1078,7 +1126,7 @@ ); IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; - SDKROOT = iphoneos; + SDKROOT = auto; SYMROOT = "${SRCROOT}/build"; TVOS_DEPLOYMENT_TARGET = 13.0; VALIDATE_PRODUCT = YES; @@ -1092,6 +1140,7 @@ isa = XCBuildConfiguration; buildSettings = { ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; @@ -1100,6 +1149,7 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_WARN_INHIBIT_ALL_WARNINGS = YES; + GENERATE_INFOPLIST_FILE = YES; HEADER_SEARCH_PATHS = ( "$(inherited)", "\"$(TOOLCHAIN_DIR)/usr/include\"", @@ -1107,9 +1157,8 @@ "\"$(SRCROOT)/Play-/Source/ui_ios\"", "\"$(SRCROOT)/Play-/deps/Dependencies/ghc_filesystem/include\"", ); - INFOPLIST_FILE = "$(SRCROOT)/PVfMSX/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.6; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1122,8 +1171,9 @@ SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator watchos watchsimulator"; SUPPORTS_MACCATALYST = YES; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; + SWIFT_VERSION = 6.0; TARGETED_DEVICE_FAMILY = "1,2,3,4"; - TVOS_DEPLOYMENT_TARGET = 15.6; + TVOS_DEPLOYMENT_TARGET = 16.0; }; name = Archive; }; @@ -1292,7 +1342,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; + SDKROOT = auto; SYMROOT = "${SRCROOT}/build"; TVOS_DEPLOYMENT_TARGET = 13.0; VALIDATE_WORKSPACE_SKIPPED_SDK_FRAMEWORKS = OpenGLES; @@ -1364,7 +1414,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 13.0; MTL_ENABLE_DEBUG_INFO = NO; ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; + SDKROOT = auto; SYMROOT = "${SRCROOT}/build"; TVOS_DEPLOYMENT_TARGET = 13.0; VALIDATE_PRODUCT = YES; @@ -1378,6 +1428,7 @@ isa = XCBuildConfiguration; buildSettings = { ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; @@ -1386,6 +1437,7 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_WARN_INHIBIT_ALL_WARNINGS = YES; + GENERATE_INFOPLIST_FILE = YES; HEADER_SEARCH_PATHS = ( "$(inherited)", "\"$(TOOLCHAIN_DIR)/usr/include\"", @@ -1393,9 +1445,8 @@ "\"$(SRCROOT)/Play-/Source/ui_ios\"", "\"$(SRCROOT)/Play-/deps/Dependencies/ghc_filesystem/include\"", ); - INFOPLIST_FILE = "$(SRCROOT)/PVfMSX/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.6; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1408,8 +1459,10 @@ SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator watchos watchsimulator"; SUPPORTS_MACCATALYST = YES; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 6.0; TARGETED_DEVICE_FAMILY = "1,2,3,4"; - TVOS_DEPLOYMENT_TARGET = 15.6; + TVOS_DEPLOYMENT_TARGET = 16.0; }; name = Debug; }; @@ -1417,6 +1470,7 @@ isa = XCBuildConfiguration; buildSettings = { ALLOW_TARGET_PLATFORM_SPECIALIZATION = YES; + CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; @@ -1425,6 +1479,7 @@ DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_WARN_INHIBIT_ALL_WARNINGS = YES; + GENERATE_INFOPLIST_FILE = YES; HEADER_SEARCH_PATHS = ( "$(inherited)", "\"$(TOOLCHAIN_DIR)/usr/include\"", @@ -1432,9 +1487,8 @@ "\"$(SRCROOT)/Play-/Source/ui_ios\"", "\"$(SRCROOT)/Play-/deps/Dependencies/ghc_filesystem/include\"", ); - INFOPLIST_FILE = "$(SRCROOT)/PVfMSX/Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; - IPHONEOS_DEPLOYMENT_TARGET = 15.6; + IPHONEOS_DEPLOYMENT_TARGET = 16.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1447,8 +1501,9 @@ SUPPORTED_PLATFORMS = "appletvos appletvsimulator iphoneos iphonesimulator watchos watchsimulator"; SUPPORTS_MACCATALYST = YES; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES; + SWIFT_VERSION = 6.0; TARGETED_DEVICE_FAMILY = "1,2,3,4"; - TVOS_DEPLOYMENT_TARGET = 15.6; + TVOS_DEPLOYMENT_TARGET = 16.0; }; name = Release; }; @@ -1506,6 +1561,14 @@ isa = XCLocalSwiftPackageReference; relativePath = ../../PVCoreBridge; }; + B3AD72452D246C37001E5EC3 /* XCLocalSwiftPackageReference "../../PVPlists" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ../../PVPlists; + }; + B3AD724A2D246D7C001E5EC3 /* XCLocalSwiftPackageReference "../../PVEmulatorCore" */ = { + isa = XCLocalSwiftPackageReference; + relativePath = ../../PVEmulatorCore; + }; B3E2AA632CB6531C00E2636D /* XCLocalSwiftPackageReference "../../PVCoreObjCBridge" */ = { isa = XCLocalSwiftPackageReference; relativePath = ../../PVCoreObjCBridge; @@ -1521,6 +1584,14 @@ isa = XCSwiftPackageProductDependency; productName = PVCoreBridge; }; + B3AD72462D246C37001E5EC3 /* PVPlists */ = { + isa = XCSwiftPackageProductDependency; + productName = PVPlists; + }; + B3AD724B2D246D7C001E5EC3 /* PVEmulatorCore */ = { + isa = XCSwiftPackageProductDependency; + productName = PVEmulatorCore; + }; B3AFCFB22977A87D00A01010 /* PVLogging */ = { isa = XCSwiftPackageProductDependency; productName = PVLogging; diff --git a/Cores/fmsx/PVfMSX/Core.plist b/Cores/fmsx/PVfMSX/Core.plist index 4dcd367417..d26edc4fea 100644 --- a/Cores/fmsx/PVfMSX/Core.plist +++ b/Cores/fmsx/PVfMSX/Core.plist @@ -5,7 +5,7 @@ PVCoreIdentifier com.provenance.core.fMSX PVPrincipleClass - PVfMSXCore + PVfMSX.PVfMSXEmuCore PVSupportedSystems com.provenance.msx diff --git a/Cores/fmsx/PVfMSX/PVfMSX.h b/Cores/fmsx/PVfMSX/PVfMSX.h index f320ccabbe..2c517794fb 100644 --- a/Cores/fmsx/PVfMSX/PVfMSX.h +++ b/Cores/fmsx/PVfMSX/PVfMSX.h @@ -15,4 +15,4 @@ FOUNDATION_EXPORT double PVfMSXVersionNumber; FOUNDATION_EXPORT const unsigned char PVfMSXVersionString[]; // In this header, you should import all the public headers of your framework using statements like #import -#import +#import diff --git a/Cores/fmsx/PVfMSXCore/CorePlist-Generated.swift b/Cores/fmsx/PVfMSXCore/CorePlist-Generated.swift new file mode 100644 index 0000000000..e013c25b5f --- /dev/null +++ b/Cores/fmsx/PVfMSXCore/CorePlist-Generated.swift @@ -0,0 +1,39 @@ +// swiftlint:disable all +// Generated using SwiftGen — https://github.com/SwiftGen/SwiftGen + +import Foundation + +#if canImport(PVCoreBridge) +@_exported import PVCoreBridge +@_exported import PVPlists +#endif + +// swiftlint:disable superfluous_disable_command +// swiftlint:disable file_length + +// MARK: - Plist Files + +// swiftlint:disable identifier_name line_length number_separator type_body_length +public enum CorePlist { + public static let pvCoreIdentifier: String = "com.provenance.core.fMSX" + public static let pvPrincipleClass: String = "PVfMSX.PVfMSXEmuCore" + public static let pvProjectName: String = "fMSX" + public static let pvProjectURL: String = "http://fms.komkon.org/fMSX/" + public static let pvProjectVersion: String = "0" + public static let pvSupportedSystems: [String] = ["com.provenance.msx", "com.provenance.msx2"] + + #if canImport(PVCoreBridge) + public static var corePlist: EmulatorCoreInfoPlist { + .init( + identifier: CorePlist.pvCoreIdentifier, + principleClass: CorePlist.pvPrincipleClass, + supportedSystems: CorePlist.pvSupportedSystems, + projectName: CorePlist.pvProjectName, + projectURL: CorePlist.pvProjectURL, + projectVersion: CorePlist.pvProjectVersion) + } + + public var corePlist: EmulatorCoreInfoPlist { Self.corePlist } + #endif +} +// swiftlint:enable identifier_name line_length number_separator type_body_length diff --git a/Cores/fmsx/PVfMSXCore/CorePlist.swift b/Cores/fmsx/PVfMSXCore/CorePlist.swift new file mode 100644 index 0000000000..a51c216913 --- /dev/null +++ b/Cores/fmsx/PVfMSXCore/CorePlist.swift @@ -0,0 +1,71 @@ +// +// CorePlist.swift +// +// +// Created by Joseph Mattiello on 6/21/24. +// + +import Foundation +import PVLogging +import PVCoreBridge +import PVEmulatorCore +import PVPlists + +#if SWIFT_PACKAGE +public extension PVBundleFinder { + static var fMSXModule: Bundle { Bundle.module } + static var fMSXBundle: Bundle { Bundle(for: PVfMSXEmuCore.self) } +} +#else +public extension PVBundleFinder { + static var PVfMSXCoreBundle: Bundle { Bundle(for: PVfMSXEmuCore.self) } +} +#endif + +@objc +extension PVfMSXEmuCore: EmulatorCoreInfoPlistProvider { + +#if SWIFT_PACKAGE + @objc + public static var resourceBundle: Bundle { Bundle.module } + + @objc + public override var resourceBundle: Bundle { Bundle.module } + #else + @objc + public static var resourceBundle: Bundle { PVBundleFinder.PVfMSXCoreBundle } + + @objc + public override var resourceBundle: Bundle { PVBundleFinder.PVfMSXCoreBundle } + + #endif + @objc(corePlistFromBundle) + public static var corePlistFromBundle: EmulatorCoreInfoPlist { + + guard let plistPath = resourceBundle.url(forResource: "Core", withExtension: "plist") else { + fatalError("Could not locate Core.plist") + } + + guard let data = try? Data(contentsOf: plistPath) else { + fatalError("Could not read Core.plist") + } + + guard let plistObject = try? PropertyListSerialization.propertyList(from: data, options: [], format: nil) as? [String: Any] else { + fatalError("Could not generate parse Core.plist") + } + + guard let corePlist = EmulatorCoreInfoPlist.init(fromInfoDictionary: plistObject) else { + fatalError("Could not generate EmulatorCoreInfoPlist from Core.plist") + } + + return corePlist + } + + /// Note: CorePlist is an enum generated by SwiftGen with a custom stencil + /// Change the swiftgen config to the local path to see the outputs and tweak + @objc(corePlist) + public static var corePlist: EmulatorCoreInfoPlist { CorePlist.corePlist } + + @objc + public var corePlist: EmulatorCoreInfoPlist { Self.corePlist } +} diff --git a/Cores/fmsx/PVfMSXCore/PVfMSXCore.swift b/Cores/fmsx/PVfMSXCore/PVfMSXCore.swift new file mode 100644 index 0000000000..5c8a5b0bfa --- /dev/null +++ b/Cores/fmsx/PVfMSXCore/PVfMSXCore.swift @@ -0,0 +1,79 @@ +// +// PVfMSXEmuCore.swift +// PVfMSXEmuCore +// +// Created by Joseph Mattiello on 12/31/24. +// Copyright © 2024 Provenance Emu. All rights reserved. +// + +import Foundation +import PVEmulatorCore +import PVCoreBridge +import PVCoreObjCBridge +import PVCoreBridgeRetro + +@objc +@objcMembers +open class PVfMSXEmuCore: PVEmulatorCore { + + let _bridge: PVfMSXCoreBridge = .init() + + public required init() { + super.init() + self.bridge = (_bridge as! any ObjCBridgedCoreBridge) + } +} + +extension PVfMSXEmuCore: PVMSXSystemResponderClient { + public func didPush(_ button: PVCoreBridge.PVMSXButton, forPlayer player: Int) { + (_bridge as! PVMSXSystemResponderClient).didPush(button, forPlayer: player) + } + public func didRelease(_ button: PVCoreBridge.PVMSXButton, forPlayer player: Int) { + (_bridge as! PVMSXSystemResponderClient).didRelease(button, forPlayer: player) + } + + public var gameSupportsKeyboard: Bool { true } + public var requiresKeyboard: Bool { false } +#if canImport(GameController) +// @objc optional var keyChangedHandler: GCKeyboardValueChangedHandler? { _bridge.keyChangedHandler } + public func keyDown(_ key: GCKeyCode) { + (_bridge as! PVMSXSystemResponderClient).keyDown(key) + } + public func keyUp(_ key: GCKeyCode) { + (_bridge as! PVMSXSystemResponderClient).keyUp(key) + } +#endif +} + +extension PVfMSXEmuCore: MouseResponder { + public var gameSupportsMouse: Bool { true } + public var requiresMouse: Bool { false } + +#if canImport(GameController) + public func didScroll(_ cursor: GCDeviceCursor) { + (_bridge as! MouseResponder).didScroll(cursor) + } + public var mouseMovedHandler: GCMouseMoved? { nil } +#endif + public func mouseMoved(atPoint point: CGPoint) { + (_bridge as! MouseResponder).mouseMoved(atPoint: point) + } + public func mouseMoved(at point: CGPoint) { + (_bridge as! MouseResponder).mouseMoved(atPoint: point) + } + public func leftMouseDown(at point: CGPoint) { + (_bridge as! MouseResponder).leftMouseDown(atPoint: point) + } + public func leftMouseDown(atPoint point: CGPoint) { + (_bridge as! MouseResponder).leftMouseDown(atPoint: point) + } + public func leftMouseUp() { + (_bridge as! MouseResponder).leftMouseUp() + } + public func rightMouseDown(atPoint point: CGPoint) { + (_bridge as! MouseResponder).rightMouseDown(atPoint: point) + } + public func rightMouseUp() { + (_bridge as! MouseResponder).rightMouseUp() + } +} diff --git a/Cores/fmsx/PVfMSXCore/PVfMSXCore.h b/Cores/fmsx/PVfMSXCore/PVfMSXCoreBridge.h similarity index 93% rename from Cores/fmsx/PVfMSXCore/PVfMSXCore.h rename to Cores/fmsx/PVfMSXCore/PVfMSXCoreBridge.h index 7236623429..9836484080 100644 --- a/Cores/fmsx/PVfMSXCore/PVfMSXCore.h +++ b/Cores/fmsx/PVfMSXCore/PVfMSXCoreBridge.h @@ -17,7 +17,7 @@ #define GET_CURRENT_OR_RETURN(...) __strong __typeof__(_current) current = _current; if(current == nil) return __VA_ARGS__; __attribute__((visibility("default"))) -@interface PVfMSXCore : PVLibRetroCoreBridge { +@interface PVfMSXCoreBridge : PVLibRetroCoreBridge { // uint8_t padData[4][PVDOSButtonCount]; // int8_t xAxis[4]; // int8_t yAxis[4]; diff --git a/Cores/fmsx/PVfMSXCore/PVfMSXCore.mm b/Cores/fmsx/PVfMSXCore/PVfMSXCoreBridge.mm similarity index 62% rename from Cores/fmsx/PVfMSXCore/PVfMSXCore.mm rename to Cores/fmsx/PVfMSXCore/PVfMSXCoreBridge.mm index d2c2bc97d5..ff2cf61463 100644 --- a/Cores/fmsx/PVfMSXCore/PVfMSXCore.mm +++ b/Cores/fmsx/PVfMSXCore/PVfMSXCoreBridge.mm @@ -6,17 +6,18 @@ // Copyright © 2022 Provenance. All rights reserved. // -#import "PVfMSXCore.h" +#import "PVfMSXCoreBridge.h" #include +#include "libretro.h" //#import "PVfMSXCore+Controls.h" //#import "PVfMSXCore+Audio.h" //#import "PVfMSXCore+Video.h" // //#import "PVfMSXCore+Audio.h" -#import +@import Foundation; @import PVCoreBridge; -#import +@import PVLoggingObjC; #if TARGET_OS_OSX || TARGET_OS_MACCATALYST #import @@ -28,7 +29,7 @@ #define OpenEmu 1 #pragma mark - Private -@interface PVfMSXCore() { +@interface PVfMSXCoreBridge() { } @@ -36,12 +37,14 @@ @interface PVfMSXCore() { #pragma mark - PVfMSXCore Begin -@implementation PVfMSXCore +@implementation PVfMSXCoreBridge { } - (instancetype)init { if (self = [super init]) { + // Set pitch_shift to 1 for RGB565 (16-bit/2 bytes per pixel) + pitch_shift = 1; } _current = self; @@ -53,29 +56,49 @@ - (void)dealloc { } #pragma mark - PVEmulatorCore -//- (BOOL)loadFileAtPath:(NSString *)path error:(NSError**)error { -// NSBundle *coreBundle = [NSBundle bundleForClass:[self class]]; -// const char *dataPath; -// -// [self initControllBuffers]; -// -// // TODO: Proper path -// NSString *configPath = self.saveStatesPath; -// dataPath = [[coreBundle resourcePath] fileSystemRepresentation]; -// -// [[NSFileManager defaultManager] createDirectoryAtPath:configPath -// withIntermediateDirectories:YES -// attributes:nil -// error:nil]; -// -// NSString *batterySavesDirectory = self.batterySavesPath; -// [[NSFileManager defaultManager] createDirectoryAtPath:batterySavesDirectory -// withIntermediateDirectories:YES -// attributes:nil -// error:NULL]; -// -// return YES; -//} +- (BOOL)loadFileAtPath:(NSString *)path error:(NSError**)error { + // Get paths + NSBundle *coreBundle = [NSBundle bundleForClass:[self class]]; + NSString *biosPath = self.BIOSPath; + + // Create BIOS directory if it doesn't exist + [[NSFileManager defaultManager] createDirectoryAtPath:biosPath + withIntermediateDirectories:YES + attributes:nil + error:nil]; + + // List of BIOS files to copy + NSArray *biosFiles = @[ + @"CARTS.SHA", @"CYRILLIC.FNT", @"DEFAULT.FNT", @"DISK.ROM", + @"FMPAC.ROM", @"FMPAC16.ROM", @"INTERNAT.FNT", @"ITALIC.FNT", + @"JAPANESE.FNT", @"KANJI.ROM", @"KOREAN.FNT", @"MSX.ROM", + @"MSX2.ROM", @"MSX2EXT.ROM", @"MSX2P.ROM", @"MSX2PEXT.ROM", + @"MSXDOS2.ROM", @"PAINTER.ROM", @"RS232.ROM" + ]; + + NSFileManager *fileManager = [NSFileManager defaultManager]; + + // Copy each BIOS file if it doesn't exist in target directory + for (NSString *filename in biosFiles) { + NSString *sourcePath = [coreBundle pathForResource:[filename stringByDeletingPathExtension] + ofType:[filename pathExtension]]; + NSString *destPath = [biosPath stringByAppendingPathComponent:filename]; + + // Only copy if source exists and destination doesn't + if (sourcePath && ![fileManager fileExistsAtPath:destPath]) { + ILOG(@"Copying BIOS file: %@", filename); + NSError *copyError = nil; + [fileManager copyItemAtPath:sourcePath toPath:destPath error:©Error]; + + if (copyError) { + ELOG(@"Failed to copy BIOS file %@: %@", filename, copyError); + } + } + } + + // Call super implementation + return [super loadFileAtPath:path error:error]; +} #pragma mark - Running //- (void)startEmulation { @@ -126,20 +149,26 @@ - (void)dealloc { //- (BOOL)supportsRumble { return NO; } //- (BOOL)supportsCheatCode { return NO; } -- (NSTimeInterval)frameInterval { - return 60; -} +//- (NSTimeInterval)frameInterval { +// retro_system_av_info info; +// retro_get_system_av_info(&info); +// return info.timing.fps ?: 60; +//} -- (CGSize)aspectSize { - return CGSizeMake(4, 3); +- (CGRect)screenRect { + return CGRectMake(0, 0, 272, 240); } +//- (CGSize)aspectSize { +// return CGSizeMake(4, 3); +//} + - (CGSize)bufferSize { - return CGSizeMake(1024, 768); + return CGSizeMake(272, 240); } - (GLenum)pixelFormat { - return GL_RGB; + return GL_RGB565; } - (GLenum)pixelType { @@ -147,27 +176,16 @@ - (GLenum)pixelType { } - (GLenum)internalPixelFormat { - // TODO: use struct retro_pixel_format var, set with, RETRO_ENVIRONMENT_SET_PIXEL_FORMAT return GL_RGB565; } - -//- (GLenum)pixelFormat { -// return GL_BGRA; -//} -// -//- (GLenum)pixelType { -// return GL_UNSIGNED_BYTE; -//} -// -//- (GLenum)internalPixelFormat { -// return GL_RGBA; -//} # pragma mark - Audio -- (double)audioSampleRate { - return 48000; -} +//- (double)audioSampleRate { +// retro_system_av_info info; +// retro_get_system_av_info(&info); +// return info.timing.sample_rate ?: 48000; +//} #if 0 const struct retro_variable vars[] = { @@ -219,8 +237,8 @@ - (double)audioSampleRate { #pragma mark - Options - (void *)getVariable:(const char *)variable { ILOG(@"%s", variable); - - + + #define V(x) strcmp(variable, x) == 0 if (V("fmsx_video_mode")) { // NTSC|PAL|Dynamic @@ -250,14 +268,47 @@ - (void *)getVariable:(const char *)variable { // "GameMaster2|" // "FMPAC" // }, - char *value = strdup("FMPAC"); + char *value = strdup("Guess"); return value; } else { ELOG(@"Unprocessed var: %s", variable); return nil; } - + #undef V return NULL; } + +- (void)didPushMSXButton:(PVMSXButton)button forPlayer:(NSInteger)player { + _pad[player][button] = 1; +} + +-(void)didReleaseMSXButton:(enum PVMSXButton)button forPlayer:(NSInteger)player { + _pad[player][button] = 0; +} + +- (void)didMoveMSXJoystickDirection:(enum PVMSXButton)button withValue:(CGFloat)value forPlayer:(NSInteger)player { + /* + float xvalue = gamepad.leftThumbstick.xAxis.value; + s8 x=(s8)(xvalue*127); + joyx[0] = x; + + float yvalue = gamepad.leftThumbstick.yAxis.value; + s8 y=(s8)(yvalue*127 * - 1); //-127 ... + 127 range + joyy[0] = y; + */ +} + +-(void)didMoveJoystick:(NSInteger)button withValue:(CGFloat)value forPlayer:(NSInteger)player { + [self didMoveMSXJoystickDirection:(enum PVMSXButton)button withValue:value forPlayer:player]; +} + +- (void)didPush:(NSInteger)button forPlayer:(NSInteger)player { + [self didPushMSXButton:(PVMSXButton)button forPlayer:player]; +} + +- (void)didRelease:(NSInteger)button forPlayer:(NSInteger)player { + [self didReleaseMSXButton:(PVMSXButton)button forPlayer:player]; +} + @end diff --git a/Cores/fmsx/fmsx-libretro b/Cores/fmsx/fmsx-libretro index bdb15d0066..deb801cc57 160000 --- a/Cores/fmsx/fmsx-libretro +++ b/Cores/fmsx/fmsx-libretro @@ -1 +1 @@ -Subproject commit bdb15d0066b151c95e65e966c0f3ef1973f498a7 +Subproject commit deb801cc5705f2071d9275b6826bbc4b351b9ee3 diff --git a/Provenance.xcodeproj/project.pbxproj b/Provenance.xcodeproj/project.pbxproj index d3898d07e4..0c4a167980 100644 --- a/Provenance.xcodeproj/project.pbxproj +++ b/Provenance.xcodeproj/project.pbxproj @@ -728,6 +728,12 @@ B3A610272CB8865C001D99C2 /* PVVirtualJaguar-Dynamic in Embed Frameworks */ = {isa = PBXBuildFile; productRef = B3A610252CB8865C001D99C2 /* PVVirtualJaguar-Dynamic */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; B3AAFB562949F9B800CC8234 /* PVDolphin.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3A320392720991B00F338F6 /* PVDolphin.framework */; platformFilters = (ios, tvos, ); }; B3AAFB572949F9B800CC8234 /* PVDolphin.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B3A320392720991B00F338F6 /* PVDolphin.framework */; platformFilters = (ios, tvos, ); settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + B3AD724E2D246DC7001E5EC3 /* PVfMSX.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3AD724D2D246DC7001E5EC3 /* PVfMSX.framework */; }; + B3AD724F2D246DC7001E5EC3 /* PVfMSX.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B3AD724D2D246DC7001E5EC3 /* PVfMSX.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + B3AD74452D24737B001E5EC3 /* PVfMSX.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3AD74442D24737B001E5EC3 /* PVfMSX.framework */; }; + B3AD74462D24737B001E5EC3 /* PVfMSX.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B3AD74442D24737B001E5EC3 /* PVfMSX.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + B3AD74492D2474F3001E5EC3 /* PVCoreBridgeRetro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3AD74482D2474F3001E5EC3 /* PVCoreBridgeRetro.framework */; }; + B3AD744A2D2474F3001E5EC3 /* PVCoreBridgeRetro.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B3AD74482D2474F3001E5EC3 /* PVCoreBridgeRetro.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; B3AED2F72BE355B7003A9290 /* LaunchScreenTV.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 555454422AC09998006A065F /* LaunchScreenTV.storyboard */; platformFilters = (tvos, ); }; B3AED2F82BE355BB003A9290 /* LaunchImageTV.png in Resources */ = {isa = PBXBuildFile; fileRef = 555454412AC09997006A065F /* LaunchImageTV.png */; platformFilters = (tvos, ); }; B3AED2F92BE355C3003A9290 /* SaveStates.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B3296ECA26CABFCA0088AC32 /* SaveStates.storyboard */; platformFilters = (tvos, ); }; @@ -1480,6 +1486,7 @@ B351E7CF2CBE072D0000E087 /* libavformat.xcframework in Embed Frameworks */, B377ECCA2CB3533C00E9B750 /* PVVecX.framework in Embed Frameworks */, B3E264DA2CA548E3002BB0FE /* PVRSPCXD4.framework in Embed Frameworks */, + B3AD724F2D246DC7001E5EC3 /* PVfMSX.framework in Embed Frameworks */, B351E7D72CBE072E0000E087 /* libswscale.xcframework in Embed Frameworks */, B35EEFA52C6C6D1A00EBD1A8 /* RealmSwift in Embed Frameworks */, B37321A22C900A6400CF59EF /* PVAtari800-Dynamic in Embed Frameworks */, @@ -1586,6 +1593,18 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; + B3AD74472D24737C001E5EC3 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + B3AD74462D24737B001E5EC3 /* PVfMSX.framework in Embed Frameworks */, + B3AD744A2D2474F3001E5EC3 /* PVCoreBridgeRetro.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; B3DFEE132686D848005C6CF2 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -2100,6 +2119,9 @@ B3A4FB65278FFB6600A65248 /* Result+Conveniences.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Result+Conveniences.swift"; sourceTree = ""; }; B3A60E852CB7707F001D99C2 /* FrameworksRetro */ = {isa = PBXFileReference; lastKnownFileType = folder; name = FrameworksRetro; path = CoresRetro/RetroArch/modules/FrameworksRetro; sourceTree = ""; }; B3AD689A1D6EA6180021B949 /* PicoDrive.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PicoDrive.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B3AD724D2D246DC7001E5EC3 /* PVfMSX.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PVfMSX.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B3AD74442D24737B001E5EC3 /* PVfMSX.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PVfMSX.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B3AD74482D2474F3001E5EC3 /* PVCoreBridgeRetro.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PVCoreBridgeRetro.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B3AEDE24293F34740050BDB6 /* PVProSystem.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PVProSystem.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B3AEDE27293F34B30050BDB6 /* PVPicoDrive.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PVPicoDrive.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B3AEDE2A293F34CA0050BDB6 /* PVPicoDrive.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = PVPicoDrive.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -2811,6 +2833,7 @@ B3C65E622CA53668000E37B0 /* PVMupen64PlusVideoRice.framework in Frameworks */, B30ED0DA2CFD3C5200AFCFCE /* PVCoreMednafen-Dynamic in Frameworks */, B3C65E5A2CA53666000E37B0 /* PVMupen64Plus.framework in Frameworks */, + B3AD724E2D246DC7001E5EC3 /* PVfMSX.framework in Frameworks */, B35EEFBA2C6C6D1A00EBD1A8 /* libz.tbd in Frameworks */, B35EEFBB2C6C6D1A00EBD1A8 /* CoreTelephony.framework in Frameworks */, B392B3E22CCC5BB700B1C760 /* PVVisualBoyAdvance-Dynamic in Frameworks */, @@ -3009,6 +3032,7 @@ files = ( B3F7E378297736BE00362B92 /* CoreTelephony.framework in Frameworks */, B3F7E37A297736BE00362B92 /* Photos.framework in Frameworks */, + B3AD74452D24737B001E5EC3 /* PVfMSX.framework in Frameworks */, B3F7E37D297736BE00362B92 /* GameController.framework in Frameworks */, B3F7E37E297736BE00362B92 /* libxml2.dylib in Frameworks */, B3F7E37F297736BE00362B92 /* MetalKit.framework in Frameworks */, @@ -3041,6 +3065,7 @@ B3F7E3BB297736BE00362B92 /* CoreGraphics.framework in Frameworks */, B323B0092BF46D2800CEA3CF /* PVLibrary in Frameworks */, B3E88CBA2977AB5900C90E86 /* Reachability in Frameworks */, + B3AD74492D2474F3001E5EC3 /* PVCoreBridgeRetro.framework in Frameworks */, B3F7E3BE297736BE00362B92 /* Introspect in Frameworks */, B395958F2BF47033004C5AA9 /* RxDataSources in Frameworks */, ); @@ -3213,6 +3238,9 @@ 1A3D409617B2DCE4004DFFFC /* Frameworks */ = { isa = PBXGroup; children = ( + B3AD74482D2474F3001E5EC3 /* PVCoreBridgeRetro.framework */, + B3AD74442D24737B001E5EC3 /* PVfMSX.framework */, + B3AD724D2D246DC7001E5EC3 /* PVfMSX.framework */, B35197FB2D1A5EF100D2B413 /* PVGenesis.framework */, B32C08F82D053FF60024A3E2 /* PVMupen64PlusBridge.framework */, B32C08EB2D053DD50024A3E2 /* PVEmuThree.framework */, @@ -4620,6 +4648,7 @@ B3F7E373297736BE00362B92 /* Frameworks */, B3F7E3C3297736BE00362B92 /* Resources */, B3F7E3E6297736BE00362B92 /* Script: Set Build Number */, + B3AD74472D24737C001E5EC3 /* Embed Frameworks */, ); buildRules = ( );