diff --git a/.all-contributorsrc b/.all-contributorsrc
new file mode 100644
index 0000000000..81bbddb1c9
--- /dev/null
+++ b/.all-contributorsrc
@@ -0,0 +1,17 @@
+{
+ "files": ["README.md"],
+ "imageSize": 100,
+ "contributorsPerLine": 7,
+ "contributorsSortAlphabetically": false,
+ "badgeTemplate": "[![All Contributors](https://img.shields.io/badge/all_contributors-<%= contributors.length %>-orange.svg?style=flat-square)](#contributors)",
+ "contributorTemplate": "\">\" width=\"<%= options.imageSize %>px;\" alt=\"\"/>
<%= contributor.name %>",
+ "types": {
+ "custom": {
+ "symbol": "🔭",
+ "description": "A custom contribution type.",
+ "link": "[<%= symbol %>](<%= url %> \"<%= description %>\"),"
+ }
+ },
+ "skipCi": "true",
+ "contributors": []
+}
diff --git a/.gitmodules b/.gitmodules
index e5391e3793..1bbfdede95 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -76,3 +76,9 @@
[submodule "Cores/FinalBurnNeo/FBNeo"]
path = Cores/FinalBurnNeo/FBNeo
url = https://github.com/Provenance-Emu/FBNeo.git
+[submodule "Cores/FCEU/fceux"]
+ path = Cores/FCEU/fceux
+ url = https://github.com/Provenance-Emu/fceux.git
+[submodule "Cores/DosBox/dosbox-pure"]
+ path = Cores/DosBox/dosbox-pure
+ url = https://github.com/Provenance-Emu/dosbox-pure.git
diff --git a/Build.xcconfig b/Build.xcconfig
index 8785bc5cb0..9739ebe9d3 100644
--- a/Build.xcconfig
+++ b/Build.xcconfig
@@ -1,8 +1,8 @@
// Configuration settings file format documentation can be found at:
// https://help.apple.com/xcode/#/dev745c5c974
-MARKETING_VERSION = 2.1.0
-CURRENT_PROJECT_VERSION = 2780
+MARKETING_VERSION = 2.1.1
+CURRENT_PROJECT_VERSION = 2781
// Vars to be overwritten by `CodeSigning.xcconfig` if exists
DEVELOPMENT_TEAM = S32Z3HMYVQ
@@ -50,7 +50,7 @@ PVLIBRARY_PRODUCT_BUNDLE_IDENTIFIER = $(ORG_PREFIX).$(PROJECT_NAME:lower).PVLibr
// MAC_CODE_SIGN_ENTITLEMENTS = $(MAC_CODE_SIGN_ENTITLEMENTS_$(DEVELOPER_ACCOUNT_VM_ACCESS:default=NO))
// Fixes XCode 13.2.1 issues
-OTHER_LDFLAGS = $(inherited) -Wl,-weak-lswift_Concurrency -Wl,-rpath,/usr/lib/swift -ObjC
+//OTHER_LDFLAGS = $(inherited) -Wl,-weak-lswift_Concurrency -Wl,-rpath,/usr/lib/swift -ObjC
//OTHER_LDFLAGS = $(inherited)
ENABLE_BITCODE = NO
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 0e514f5783..a38adcce6a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,24 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [2.1.1] - 2022-06-15
+
+### Added
+
+- Controls: PSX on-screen joystick can be disabled in settings. No longer shows when controller is connected
+- Swift UI beta for tvOS
+- tvOS theme support
+- Metal shader 200% speedup 👉 @mrjschulte
+- early dosbox testing code (no running yet)
+
+### Fixed
+
+- tgbdual crash on ios fixed
+
+### Updated
+
+- fceux update core to 2.6.2
+
## [2.1.0] - 2022-02-14
Special thanks to contributors on this release;
diff --git a/Cores/Cores.h b/Cores/Cores.h
new file mode 100644
index 0000000000..228be8210d
--- /dev/null
+++ b/Cores/Cores.h
@@ -0,0 +1,19 @@
+//
+// Cores.h
+// Cores
+//
+// Created by Joseph Mattiello on 3/12/22.
+// Copyright © 2022 Provenance Emu. All rights reserved.
+//
+
+#import
+
+//! Project version number for Cores.
+FOUNDATION_EXPORT double CoresVersionNumber;
+
+//! Project version string for Cores.
+FOUNDATION_EXPORT const unsigned char CoresVersionString[];
+
+// In this header, you should import all the public headers of your framework using statements like #import
+
+
diff --git a/Cores/DosBox/BuildFlags.xcconfig b/Cores/DosBox/BuildFlags.xcconfig
new file mode 100644
index 0000000000..8df90ae642
--- /dev/null
+++ b/Cores/DosBox/BuildFlags.xcconfig
@@ -0,0 +1,25 @@
+//
+// BuildFlags.xcconfig
+// PVDosBox
+//
+// Created by Joseph Mattiello on 11/1/18.
+//
+//
+
+// All
+GCC_PREPROCESSOR_DEFINITIONS = $(inherited)
+OTHER_CFLAGS = $(inherited)
+
+ // Device
+GCC_PREPROCESSOR_DEFINITIONS[sdk=iphoneos*] = $(inherited) TARGET_IPHONE=1
+OTHER_CFLAGS[sdk=iphoneos*] = $(inherited)
+
+// Simulator
+GCC_PREPROCESSOR_DEFINITIONS[sdk=iphonesimulator*] = $(inherited) TARGET_IPHONE_SIMULATOR=1
+
+// tvOS Device
+GCC_PREPROCESSOR_DEFINITIONS[sdk=appletvos*] = $(inherited) TARGET_IPHONE=1
+OTHER_CFLAGS[sdk=appletvos*] = $(inherited)
+
+// tvOS Simulator
+GCC_PREPROCESSOR_DEFINITIONS[sdk=appletvsimulator*] = $(inherited) TARGET_IPHONE_SIMULATOR=1
diff --git a/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Audio.h b/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Audio.h
new file mode 100644
index 0000000000..ecdbae25cf
--- /dev/null
+++ b/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Audio.h
@@ -0,0 +1,17 @@
+//
+// PVDosBoxCore+Audio.h
+// PVDosBox
+//
+// Created by Joseph Mattiello on 11/1/18.
+// Copyright © 2021 Provenance. All rights reserved.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PVDosBoxCore (Audio)
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Audio.m b/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Audio.m
new file mode 100644
index 0000000000..19e3f0f16d
--- /dev/null
+++ b/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Audio.m
@@ -0,0 +1,25 @@
+//
+// PVDosBoxCore+Audio.m
+// PVDosBox
+//
+// Created by Joseph Mattiello on 11/1/18.
+// Copyright © 2021 Provenance. All rights reserved.
+//
+
+#import "PVDosBoxCore+Audio.h"
+
+@implementation PVDosBoxCore (Audio)
+
+- (NSTimeInterval)frameInterval {
+ return isNTSC ? 60 : 50;
+}
+
+- (NSUInteger)channelCount {
+ return 2;
+}
+
+- (double)audioSampleRate {
+ return sampleRate;
+}
+
+@end
diff --git a/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Controls.h b/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Controls.h
new file mode 100644
index 0000000000..a43905a35b
--- /dev/null
+++ b/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Controls.h
@@ -0,0 +1,29 @@
+//
+// PVDosBoxCore+Controls.h
+// PVDosBox
+//
+// Created by Joseph Mattiello on 11/1/18.
+// Copyright © 2021 Provenance. All rights reserved.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PVDosBoxCore (Controls)
+
+- (void)initControllBuffers;
+- (void)pollControllers;
+
+#pragma mark - Control
+
+- (void)didPushGameCubeButton:(enum PVGameCubeButton)button forPlayer:(NSInteger)player;
+- (void)didReleaseGameCubeButton:(enum PVGameCubeButton)button forPlayer:(NSInteger)player;
+- (void)didMoveGameCubeJoystickDirection:(enum PVGameCubeButton)button withValue:(CGFloat)value forPlayer:(NSInteger)player;
+- (void)didMoveJoystick:(NSInteger)button withValue:(CGFloat)value forPlayer:(NSInteger)player;
+
+- (void)didPush:(NSInteger)button forPlayer:(NSInteger)player;
+- (void)didRelease:(NSInteger)button forPlayer:(NSInteger)player;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Controls.mm b/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Controls.mm
new file mode 100644
index 0000000000..8a63fda020
--- /dev/null
+++ b/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Controls.mm
@@ -0,0 +1,202 @@
+//
+// PVDosBoxCore+Controls.m
+// PVDosBox
+//
+// Created by Joseph Mattiello on 11/1/18.
+// Copyright © 2021 Provenance. All rights reserved.
+//
+
+#import
+#import
+#import
+
+#define DC_BTN_C (1<<0)
+#define DC_BTN_B (1<<1)
+#define DC_BTN_A (1<<2)
+#define DC_BTN_START (1<<3)
+#define DC_DPAD_UP (1<<4)
+#define DC_DPAD_DOWN (1<<5)
+#define DC_DPAD_LEFT (1<<6)
+#define DC_DPAD_RIGHT (1<<7)
+#define DC_BTN_Z (1<<8)
+#define DC_BTN_Y (1<<9)
+#define DC_BTN_X (1<<10)
+#define DC_BTN_D (1<<11)
+#define DC_DPAD2_UP (1<<12)
+#define DC_DPAD2_DOWN (1<<13)
+#define DC_DPAD2_LEFT (1<<14)
+#define DC_DPAD2_RIGHT (1<<15)
+
+#define DC_AXIS_LT (0X10000)
+#define DC_AXIS_RT (0X10001)
+#define DC_AXIS_X (0X20000)
+#define DC_AXIS_Y (0X20001)
+
+static const int GameCubeMap[] = {
+ DC_DPAD_UP, DC_DPAD_DOWN, DC_DPAD_LEFT, DC_DPAD_RIGHT,
+ DC_BTN_A, DC_BTN_B, DC_BTN_X, DC_BTN_Y,
+ DC_AXIS_LT, DC_AXIS_RT,
+ DC_BTN_START
+};
+
+typedef unsigned char u8;
+typedef signed char s8;
+typedef unsigned short u16;
+typedef unsigned int u32;
+
+ // Reicast controller data
+u16 kcode[4];
+u8 rt[4];
+u8 lt[4];
+u32 vks[4];
+s8 joyx[4], joyy[4];
+
+@implementation PVDosBoxCore (Controls)
+
+- (void)initControllBuffers {
+ memset(&kcode, 0xFFFF, sizeof(kcode));
+ bzero(&rt, sizeof(rt));
+ bzero(<, sizeof(lt));
+}
+
+#pragma mark - Control
+
+- (void)pollControllers {
+ for (NSInteger playerIndex = 0; playerIndex < 4; playerIndex++)
+ {
+ GCController *controller = nil;
+
+ if (self.controller1 && playerIndex == 0)
+ {
+ controller = self.controller1;
+ }
+ else if (self.controller2 && playerIndex == 1)
+ {
+ controller = self.controller2;
+ }
+ else if (self.controller3 && playerIndex == 3)
+ {
+ controller = self.controller3;
+ }
+ else if (self.controller4 && playerIndex == 4)
+ {
+ controller = self.controller4;
+ }
+
+ if ([controller extendedGamepad])
+ {
+ GCExtendedGamepad *gamepad = [controller extendedGamepad];
+ GCControllerDirectionPad *dpad = [gamepad dpad];
+
+ dpad.up.isPressed ? kcode[playerIndex] &= ~(DC_DPAD_UP) : kcode[playerIndex] |= (DC_DPAD_UP);
+ dpad.down.isPressed ? kcode[playerIndex] &= ~(DC_DPAD_DOWN) : kcode[playerIndex] |= (DC_DPAD_DOWN);
+ dpad.left.isPressed ? kcode[playerIndex] &= ~(DC_DPAD_LEFT) : kcode[playerIndex] |= (DC_DPAD_LEFT);
+ dpad.right.isPressed ? kcode[playerIndex] &= ~(DC_DPAD_RIGHT) : kcode[playerIndex] |= (DC_DPAD_RIGHT);
+
+ gamepad.buttonA.isPressed ? kcode[playerIndex] &= ~(DC_BTN_A) : kcode[playerIndex] |= (DC_BTN_A);
+ gamepad.buttonB.isPressed ? kcode[playerIndex] &= ~(DC_BTN_B) : kcode[playerIndex] |= (DC_BTN_B);
+ gamepad.buttonX.isPressed ? kcode[playerIndex] &= ~(DC_BTN_X) : kcode[playerIndex] |= (DC_BTN_X);
+ gamepad.buttonY.isPressed ? kcode[playerIndex] &= ~(DC_BTN_Y) : kcode[playerIndex] |= (DC_BTN_Y);
+
+ gamepad.leftShoulder.isPressed ? kcode[playerIndex] &= ~(DC_AXIS_LT) : kcode[playerIndex] |= (DC_AXIS_LT);
+ gamepad.rightShoulder.isPressed ? kcode[playerIndex] &= ~(DC_AXIS_RT) : kcode[playerIndex] |= (DC_AXIS_RT);
+
+ gamepad.leftTrigger.isPressed ? kcode[playerIndex] &= ~(DC_BTN_Z) : kcode[playerIndex] |= (DC_BTN_Z);
+ gamepad.rightTrigger.isPressed ? kcode[playerIndex] &= ~(DC_BTN_START) : kcode[playerIndex] |= (DC_BTN_START);
+
+
+ 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;
+
+ } else if ([controller gamepad]) {
+ GCGamepad *gamepad = [controller gamepad];
+ GCControllerDirectionPad *dpad = [gamepad dpad];
+
+ dpad.up.isPressed ? kcode[playerIndex] &= ~(DC_DPAD_UP) : kcode[playerIndex] |= (DC_DPAD_UP);
+ dpad.down.isPressed ? kcode[playerIndex] &= ~(DC_DPAD_DOWN) : kcode[playerIndex] |= (DC_DPAD_DOWN);
+ dpad.left.isPressed ? kcode[playerIndex] &= ~(DC_DPAD_LEFT) : kcode[playerIndex] |= (DC_DPAD_LEFT);
+ dpad.right.isPressed ? kcode[playerIndex] &= ~(DC_DPAD_RIGHT) : kcode[playerIndex] |= (DC_DPAD_RIGHT);
+
+ gamepad.buttonA.isPressed ? kcode[playerIndex] &= ~(DC_BTN_A) : kcode[playerIndex] |= (DC_BTN_A);
+ gamepad.buttonB.isPressed ? kcode[playerIndex] &= ~(DC_BTN_B) : kcode[playerIndex] |= (DC_BTN_B);
+ gamepad.buttonX.isPressed ? kcode[playerIndex] &= ~(DC_BTN_X) : kcode[playerIndex] |= (DC_BTN_X);
+ gamepad.buttonY.isPressed ? kcode[playerIndex] &= ~(DC_BTN_Y) : kcode[playerIndex] |= (DC_BTN_Y);
+
+ gamepad.leftShoulder.isPressed ? kcode[playerIndex] &= ~(DC_AXIS_LT) : kcode[playerIndex] |= (DC_AXIS_LT);
+ gamepad.rightShoulder.isPressed ? kcode[playerIndex] &= ~(DC_AXIS_RT) : kcode[playerIndex] |= (DC_AXIS_RT);
+ }
+#if TARGET_OS_TV
+ else if ([controller microGamepad]) {
+ GCMicroGamepad *gamepad = [controller microGamepad];
+ GCControllerDirectionPad *dpad = [gamepad dpad];
+ }
+#endif
+ }
+}
+
+-(void)didPushGameCubeButton:(enum PVGameCubeButton)button forPlayer:(NSInteger)player {
+// if(_isInitialized)
+// {
+// }
+}
+
+-(void)didReleaseGameCubeButton:(enum PVGameCubeButton)button forPlayer:(NSInteger)player {
+// if(_isInitialized)
+// {
+// }
+}
+
+- (void)didMoveGameCubeJoystickDirection:(enum PVGameCubeButton)button withValue:(CGFloat)value forPlayer:(NSInteger)player {
+// if(_isInitialized)
+// {
+// }
+}
+
+-(void)didMoveJoystick:(NSInteger)button withValue:(CGFloat)value forPlayer:(NSInteger)player {
+ [self didMoveGameCubeJoystickDirection:(enum PVGameCubeButton)button withValue:value forPlayer:player];
+}
+
+- (void)didPush:(NSInteger)button forPlayer:(NSInteger)player {
+ [self didPushGameCubeButton:(PVGameCubeButton)button forPlayer:player];
+}
+
+- (void)didRelease:(NSInteger)button forPlayer:(NSInteger)player {
+ [self didReleaseGameCubeButton:(PVGameCubeButton)button forPlayer:player];
+}
+
+
+# pragma mark - Input Wii
+//- (oneway void)didMoveWiiJoystickDirection:(OEWiiButton)button withValue:(CGFloat)value forPlayer:(NSUInteger)player
+//{
+// if(_isInitialized)
+// {
+// dol_host->SetAxis(button, value, (int)player);
+// }
+//}
+//
+//- (oneway void)didPushWiiButton:(OEWiiButton)button forPlayer:(NSUInteger)player
+//{
+// if(_isInitialized)
+// {
+// if (button > OEWiiButtonCount) {
+// dol_host->processSpecialKeys(button , (int)player);
+// } else {
+// dol_host->setButtonState(button, 1, (int)player);
+// }
+// }
+//}
+//
+//- (oneway void)didReleaseWiiButton:(OEWiiButton)button forPlayer:(NSUInteger)player
+//{
+// if(_isInitialized && button != OEWiimoteSideways && button != OEWiimoteUpright)
+// {
+// dol_host->setButtonState(button, 0, (int)player);
+// }
+//}
+
+@end
diff --git a/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Saves.h b/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Saves.h
new file mode 100644
index 0000000000..4ee6fb1980
--- /dev/null
+++ b/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Saves.h
@@ -0,0 +1,17 @@
+//
+// PVDosBox+Saves.h
+// PVDosBox
+//
+// Created by Joseph Mattiello on 11/1/18.
+// Copyright © 2021 Provenance. All rights reserved.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PVDosBoxCore (Saves)
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Saves.m b/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Saves.m
new file mode 100644
index 0000000000..f76a6feb45
--- /dev/null
+++ b/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Saves.m
@@ -0,0 +1,37 @@
+//
+// PVDosBox+Saves.m
+// PVDosBox
+//
+// Created by Joseph Mattiello on 11/1/18.
+// Copyright © 2021 Provenance. All rights reserved.
+//
+
+#import "PVDosBoxCore+Saves.h"
+#import "PVDosBoxCore.h"
+
+@implementation PVDosBoxCore (Saves)
+
+#pragma mark - Properties
+-(BOOL)supportsSaveStates {
+ return YES;
+}
+
+#pragma mark - Methods
+
+- (BOOL)saveStateToFileAtPath:(NSString *)fileName {
+ return NO;
+}
+
+- (void)saveStateToFileAtPath:(NSString *)fileName completionHandler:(void (^)(BOOL, NSError *))block {
+ block(NO, nil);
+}
+
+- (BOOL)loadStateFromFileAtPath:(NSString *)fileName {
+ return NO;
+}
+
+- (void)loadStateFromFileAtPath:(NSString *)fileName completionHandler:(void (^)(BOOL, NSError *))block {
+ block(NO, nil);
+}
+
+@end
diff --git a/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Video.h b/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Video.h
new file mode 100644
index 0000000000..7a12553c4e
--- /dev/null
+++ b/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Video.h
@@ -0,0 +1,19 @@
+//
+// PVDosBox+Video.h
+// PVDosBox
+//
+// Created by Joseph Mattiello on 11/1/18.
+// Copyright © 2021 Provenance. All rights reserved.
+//
+
+#import
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PVDosBoxCore (Video)
+
+- (void)videoInterrupt;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Video.m b/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Video.m
new file mode 100644
index 0000000000..928ef63ae9
--- /dev/null
+++ b/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore+Video.m
@@ -0,0 +1,86 @@
+//
+// PVDosBox+Video.m
+// PVDosBox
+//
+// Created by Joseph Mattiello on 11/1/18.
+// Copyright © 2021 Provenance. All rights reserved.
+//
+
+#import "PVDosBoxCore+Video.h"
+#import "PVDosBoxCore.h"
+
+#import
+#import
+#import
+
+@implementation PVDosBoxCore (Video)
+
+# pragma mark - Methods
+
+- (void)videoInterrupt {
+ //dispatch_semaphore_signal(coreWaitToEndFrameSemaphore);
+
+ //dispatch_semaphore_wait(mupenWaitToBeginFrameSemaphore, DISPATCH_TIME_FOREVER);
+}
+
+- (void)swapBuffers {
+ [self.renderDelegate didRenderFrameOnAlternateThread];
+}
+
+- (void)executeFrameSkippingFrame:(BOOL)skip {
+
+ if (![self isEmulationPaused])
+ {
+ }
+ //dispatch_semaphore_signal(mupenWaitToBeginFrameSemaphore);
+
+ //dispatch_semaphore_wait(coreWaitToEndFrameSemaphore, DISPATCH_TIME_FOREVER);
+}
+
+- (void)executeFrame {
+ [self executeFrameSkippingFrame:NO];
+}
+
+# pragma mark - Properties
+
+- (CGSize)bufferSize {
+ return CGSizeMake(1024, 512);
+}
+
+- (CGRect)screenRect {
+ return CGRectMake(0, 0, self.videoWidth, self.videoHeight);
+}
+
+- (CGSize)aspectSize {
+ return CGSizeMake(self.videoWidth, self.videoHeight);
+}
+
+- (BOOL)rendersToOpenGL {
+ return YES;
+}
+
+- (BOOL)isDoubleBuffered {
+ return YES;
+}
+
+- (const void *)videoBuffer {
+ return NULL;
+}
+
+- (GLenum)pixelFormat {
+ return GL_RGBA;
+}
+
+- (GLenum)pixelType {
+ return GL_UNSIGNED_BYTE;
+}
+
+- (GLenum)internalPixelFormat {
+ return GL_RGBA;
+}
+
+- (GLenum)depthFormat {
+ // 0, GL_DEPTH_COMPONENT16, GL_DEPTH_COMPONENT24
+ return GL_DEPTH_COMPONENT24;
+}
+@end
diff --git a/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore.h b/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore.h
new file mode 100644
index 0000000000..b9c4e6909a
--- /dev/null
+++ b/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore.h
@@ -0,0 +1,44 @@
+//
+// PVDosBoxCore.h
+// PVDosBox
+//
+// Created by Joseph Mattiello on 10/20/21.
+// Copyright © 2021 Provenance. All rights reserved.
+//
+
+#import
+#import
+#import
+#import
+
+#define GET_CURRENT_AND_RETURN(...) __strong __typeof__(_current) current = _current; if(current == nil) return __VA_ARGS__;
+#define GET_CURRENT_OR_RETURN(...) __strong __typeof__(_current) current = _current; if(current == nil) return __VA_ARGS__;
+
+@interface PVDosBoxCore : PVEmulatorCore
+{
+ uint8_t padData[4][PVDreamcastButtonCount];
+ int8_t xAxis[4];
+ int8_t yAxis[4];
+ // int videoWidth;
+ // int videoHeight;
+ // int videoBitDepth;
+ int videoDepthBitDepth; // eh
+
+ float sampleRate;
+
+ BOOL isNTSC;
+@public
+ dispatch_queue_t _callbackQueue;
+}
+
+@property (nonatomic, assign) int videoWidth;
+@property (nonatomic, assign) int videoHeight;
+@property (nonatomic, assign) int videoBitDepth;
+
+- (void) swapBuffers;
+- (const char *) getBundlePath;
+- (void) SetScreenSize:(int)width :(int)height;
+
+@end
+
+extern __weak PVDosBoxCore *_current;
diff --git a/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore.mm b/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore.mm
new file mode 100644
index 0000000000..0601e6f6d4
--- /dev/null
+++ b/Cores/DosBox/PBDosBoxCore/Core/PVDosBoxCore.mm
@@ -0,0 +1,157 @@
+//
+// PVDosBoxCore.m
+// PVDosBox
+//
+// Created by Joseph Mattiello on 6/15/22.
+// Copyright © 2022 Provenance. All rights reserved.
+//
+
+#import "PVDosBoxCore.h"
+#include
+#import "PVDosBoxCore+Controls.h"
+#import "PVDosBoxCore+Audio.h"
+#import "PVDosBoxCore+Video.h"
+
+#import "PVDosBoxCore+Audio.h"
+
+#import
+#import
+
+#define SAMPLERATE 48000
+#define SIZESOUNDBUFFER 48000 / 60 * 4
+#define OpenEmu 1
+
+__weak PVDosBoxCore *_current = 0;
+
+#pragma mark - Private
+@interface PVDosBoxCore() {
+
+}
+
+@end
+
+#pragma mark - PVDosBoxCore Begin
+
+@implementation PVDosBoxCore
+{
+ uint16_t *_soundBuffer;
+ atomic_bool _isInitialized;
+ float _frameInterval;
+
+ NSString *autoLoadStatefileName;
+}
+
+- (instancetype)init {
+ if (self = [super init]) {
+ _videoWidth = 640;
+ _videoHeight = 480;
+ _videoBitDepth = 32; // ignored
+ videoDepthBitDepth = 0; // TODO
+
+ sampleRate = 44100;
+
+ isNTSC = YES;
+ _frameInterval = 60;
+
+ dispatch_queue_attr_t queueAttributes = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_USER_INTERACTIVE, 0);
+
+ _callbackQueue = dispatch_queue_create("org.provenance-emu.dosbox.CallbackHandlerQueue", queueAttributes);
+ }
+
+ _current = self;
+ return self;
+}
+
+- (void)dealloc {
+ _current = nil;
+}
+
+#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;
+}
+
+#pragma mark - Running
+- (void)startEmulation {
+ if (!_isInitialized)
+ {
+// [self.renderDelegate willRenderFrameOnAlternateThread];
+ _isInitialized = true;
+// _frameInterval = dol_host->GetFrameInterval();
+ }
+ [super startEmulation];
+
+ //Disable the OE framelimiting
+// [self.renderDelegate suspendFPSLimiting];
+// if(!self.isRunning) {
+// [super startEmulation];
+//// [NSThread detachNewThreadSelector:@selector(runReicastRenderThread) toTarget:self withObject:nil];
+// }
+}
+
+- (void)runReicastEmuThread {
+ @autoreleasepool
+ {
+// [self reicastMain];
+
+ // Core returns
+
+ // Unlock rendering thread
+// dispatch_semaphore_signal(coreWaitToEndFrameSemaphore);
+
+ [super stopEmulation];
+ }
+}
+
+- (void)setPauseEmulation:(BOOL)flag {
+ [super setPauseEmulation:flag];
+}
+
+- (void)stopEmulation {
+ _isInitialized = false;
+
+ self->shouldStop = YES;
+// dispatch_semaphore_signal(mupenWaitToBeginFrameSemaphore);
+// dispatch_semaphore_wait(coreWaitForExitSemaphore, DISPATCH_TIME_FOREVER);
+ [self.frontBufferCondition lock];
+ [self.frontBufferCondition signal];
+ [self.frontBufferCondition unlock];
+
+ [super stopEmulation];
+}
+
+- (void)resetEmulation {
+ // dispatch_semaphore_signal(mupenWaitToBeginFrameSemaphore);
+ [self.frontBufferCondition lock];
+ [self.frontBufferCondition signal];
+ [self.frontBufferCondition unlock];
+}
+
+//# pragma mark - Cheats
+//- (void)setCheat:(NSString *)code setType:(NSString *)type setEnabled:(BOOL)enabled {
+//}
+//
+//- (BOOL)supportsRumble { return NO; }
+//- (BOOL)supportsCheatCodes { return NO; }
+
+@end
diff --git a/Cores/DosBox/PBDosBoxCore/DosBoxGameCore.h b/Cores/DosBox/PBDosBoxCore/DosBoxGameCore.h
new file mode 100755
index 0000000000..b2b4bb0d56
--- /dev/null
+++ b/Cores/DosBox/PBDosBoxCore/DosBoxGameCore.h
@@ -0,0 +1,45 @@
+/*
+ Copyright (c) 2013, OpenEmu Team
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the OpenEmu Team nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY OpenEmu Team ''AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL OpenEmu Team BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import
+#import
+#import
+#import
+#import "OEGCSystemResponderClient.h"
+#import "Wii/OEWiiSystemResponderClient.h"
+
+@class OERingBuffer;
+
+OE_EXPORTED_CLASS
+@interface DolphinGameCore : OEGameCore
+
+- (void) swapBuffers;
+- (const char *) getBundlePath;
+- (void) SetScreenSize:(int)width :(int)height;
+
+@end
+
+extern DolphinGameCore *_current;
diff --git a/Cores/DosBox/PBDosBoxCore/DosBoxGameCore.mm b/Cores/DosBox/PBDosBoxCore/DosBoxGameCore.mm
new file mode 100755
index 0000000000..598be40094
--- /dev/null
+++ b/Cores/DosBox/PBDosBoxCore/DosBoxGameCore.mm
@@ -0,0 +1,410 @@
+/*
+ Copyright (c) 2013, OpenEmu Team
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of the OpenEmu Team nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY OpenEmu Team ''AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL OpenEmu Team BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ What doesn't work:
+ I got everything in GC working
+
+ */
+
+// Changed includes to
+// Added iRenderFBO to Videoconfig, OGL postprocessing and renderer
+// Added SetState to device.h for input and FullAnalogControl
+// Added Render on alternate thread in Core.cpp in EmuThread() Video Thread
+// Added Render on alternate thread in Cope.cpp in CPUThread() to support single thread mode CPU/GPU
+
+#import "DolphinGameCore.h"
+#include "DolHost.h"
+#include "AudioCommon/SoundStream.h"
+#include "OpenEmuAudioStream.h"
+#include
+
+#import
+#include
+#include
+
+#define SAMPLERATE 48000
+#define SIZESOUNDBUFFER 48000 / 60 * 4
+#define OpenEmu 1
+
+@interface DolphinGameCore ()
+@property (copy) NSString *filePath;
+@end
+
+DolphinGameCore *_current = 0;
+
+extern std::unique_ptr g_sound_stream;
+
+@implementation DolphinGameCore
+{
+ DolHost *dol_host;
+
+ uint16_t *_soundBuffer;
+ bool _isWii;
+ atomic_bool _isInitialized;
+ float _frameInterval;
+
+ NSString *autoLoadStatefileName;
+ NSString *_dolphinCoreModule;
+ OEIntSize _dolphinCoreAspect;
+ OEIntSize _dolphinCoreScreen;
+}
+
+- (instancetype)init
+{
+ if(self = [super init]){
+ dol_host = DolHost::GetInstance();
+ }
+
+ _current = self;
+
+ return self;
+}
+
+- (void)dealloc
+{
+ delete dol_host;
+ free(_soundBuffer);
+}
+
+# pragma mark - Execution
+- (BOOL)loadFileAtPath:(NSString *)path
+{
+ self.filePath = path;
+
+ if([[self systemIdentifier] isEqualToString:@"openemu.system.gc"])
+ {
+ _dolphinCoreModule = @"gc";
+ _isWii = false;
+ _dolphinCoreAspect = OEIntSizeMake(4, 3);
+ _dolphinCoreScreen = OEIntSizeMake(640, 480);
+ }
+ else
+ {
+ _dolphinCoreModule = @"Wii";
+ _isWii = true;
+ _dolphinCoreAspect = OEIntSizeMake(16,9);
+ _dolphinCoreScreen = OEIntSizeMake(854, 480);
+ }
+
+ dol_host->Init([[self supportDirectoryPath] fileSystemRepresentation], [path fileSystemRepresentation] );
+
+ usleep(5000);
+ return YES;
+}
+
+- (void)setPauseEmulation:(BOOL)flag
+{
+ dol_host->Pause(flag);
+
+ [super setPauseEmulation:flag];
+}
+
+- (void)stopEmulation
+{
+ _isInitialized = false;
+
+ dol_host->RequestStop();
+
+ [super stopEmulation];
+}
+
+- (void)startEmulation
+{
+ if (!_isInitialized)
+ {
+ [self.renderDelegate willRenderFrameOnAlternateThread];
+
+ dol_host->SetPresentationFBO((int)[[self.renderDelegate presentationFramebuffer] integerValue]);
+
+ if(dol_host->LoadFileAtPath())
+ _isInitialized = true;
+
+ _frameInterval = dol_host->GetFrameInterval();
+
+ }
+ [super startEmulation];
+
+ //Disable the OE framelimiting
+ [self.renderDelegate suspendFPSLimiting];
+}
+
+- (void)resetEmulation
+{
+ dol_host->Reset();
+}
+
+- (void)executeFrame
+{
+ if (![self isEmulationPaused])
+ {
+ if(!dol_host->CoreRunning()) {
+ dol_host->Pause(false);
+ }
+
+ dol_host->UpdateFrame();
+ }
+}
+
+# pragma mark - Nand directory Callback
+- (const char *)getBundlePath
+{
+ NSBundle *coreBundle = [NSBundle bundleForClass:[self class]];
+ const char *dataPath;
+ dataPath = [[coreBundle resourcePath] fileSystemRepresentation];
+
+ return dataPath;
+}
+
+# pragma mark - Video
+- (OEGameCoreRendering)gameCoreRendering
+{
+ return OEGameCoreRenderingOpenGL3Video;
+}
+
+- (BOOL)hasAlternateRenderingThread
+{
+ return YES;
+}
+
+- (BOOL)needsDoubleBufferedFBO
+{
+ return NO;
+}
+
+- (const void *)videoBuffer
+{
+ return NULL;
+}
+
+- (NSTimeInterval)frameInterval
+{
+ return _frameInterval ?: 60;
+}
+
+- (OEIntSize)bufferSize
+{
+ return _dolphinCoreScreen;
+}
+
+- (OEIntSize)aspectSize
+{
+ return _dolphinCoreAspect;
+}
+
+- (void) SetScreenSize:(int)width :(int)height
+{
+}
+
+- (GLenum)pixelFormat
+{
+ return GL_RGBA;
+}
+
+- (GLenum)pixelType
+{
+ return GL_UNSIGNED_BYTE;
+}
+
+- (GLenum)internalPixelFormat
+{
+ return GL_RGBA;
+}
+
+# pragma mark - Audio
+- (NSUInteger)channelCount
+{
+ return 2;
+}
+
+- (double)audioSampleRate
+{
+ return OE_SAMPLERATE;
+}
+
+- (id)audioBufferAtIndex:(NSUInteger)index
+{
+ return self;
+}
+
+- (NSUInteger)length
+{
+ return OE_SIZESOUNDBUFFER;
+}
+
+- (NSUInteger)read:(void *)buffer maxLength:(NSUInteger)len
+{
+ if (_isInitialized && g_sound_stream)
+ return static_cast(g_sound_stream.get())->readAudio(buffer, (int)len);
+ return 0;
+}
+
+- (NSUInteger)write:(const void *)buffer maxLength:(NSUInteger)length
+{
+ return 0;
+}
+
+# pragma mark - Save States
+- (void)saveStateToFileAtPath:(NSString *)fileName completionHandler:(void (^)(BOOL, NSError *))block
+{
+ // we need to make sure we are initialized before attempting to save a state
+ while (! _isInitialized)
+ usleep (1000);
+
+ block(dol_host->SaveState([fileName UTF8String]),nil);
+
+}
+
+- (void)loadStateFromFileAtPath:(NSString *)fileName completionHandler:(void (^)(BOOL, NSError *))block
+{
+ if (!_isInitialized)
+ {
+ //Start a separate thread to load
+ autoLoadStatefileName = fileName;
+
+ [NSThread detachNewThreadSelector:@selector(autoloadWaitThread) toTarget:self withObject:nil];
+ block(true, nil);
+ } else {
+ block(dol_host->LoadState([fileName UTF8String]),nil);
+ }
+}
+
+- (void)autoloadWaitThread
+{
+ @autoreleasepool
+ {
+ //Wait here until we get the signal for full initialization
+ while (!_isInitialized)
+ usleep (100);
+
+ dol_host->LoadState([autoLoadStatefileName UTF8String]);
+ }
+}
+
+# pragma mark - Input GC
+- (oneway void)didMoveGCJoystickDirection:(OEGCButton)button withValue:(CGFloat)value forPlayer:(NSUInteger)player
+{
+ if(_isInitialized)
+ {
+ dol_host->SetAxis(button, value, (int)player);
+ }
+}
+
+- (oneway void)didPushGCButton:(OEGCButton)button forPlayer:(NSUInteger)player
+{
+ if(_isInitialized)
+ {
+ dol_host->setButtonState(button, 1, (int)player);
+ }
+}
+
+- (oneway void)didReleaseGCButton:(OEGCButton)button forPlayer:(NSUInteger)player
+{
+ if(_isInitialized)
+ {
+ dol_host->setButtonState(button, 0, (int)player);
+ }
+}
+
+# pragma mark - Input Wii
+- (oneway void)didMoveWiiJoystickDirection:(OEWiiButton)button withValue:(CGFloat)value forPlayer:(NSUInteger)player
+{
+ if(_isInitialized)
+ {
+ dol_host->SetAxis(button, value, (int)player);
+ }
+}
+
+- (oneway void)didPushWiiButton:(OEWiiButton)button forPlayer:(NSUInteger)player
+{
+ if(_isInitialized)
+ {
+ if (button > OEWiiButtonCount) {
+ dol_host->processSpecialKeys(button , (int)player);
+ } else {
+ dol_host->setButtonState(button, 1, (int)player);
+ }
+ }
+}
+
+- (oneway void)didReleaseWiiButton:(OEWiiButton)button forPlayer:(NSUInteger)player
+{
+ if(_isInitialized && button != OEWiimoteSideways && button != OEWiimoteUpright)
+ {
+ dol_host->setButtonState(button, 0, (int)player);
+ }
+}
+
+//- (oneway void) didMoveWiiAccelerometer:(OEWiiAccelerometer)accelerometer withValue:(CGFloat)X withValue:(CGFloat)Y withValue:(CGFloat)Z forPlayer:(NSUInteger)player
+//{
+// if(_isInitialized)
+// {
+// if (accelerometer == OEWiiNunchuk)
+// {
+// dol_host->setNunchukAccel(X,Y,Z,(int)player);
+// }
+// else
+// {
+// dol_host->setWiimoteAccel(X,Y,Z,(int)player);
+// }
+// }
+//}
+
+//- (oneway void)didMoveWiiIR:(OEWiiButton)button IRinfo:(OEwiimoteIRinfo)IRinfo forPlayer:(NSUInteger)player
+//{
+// if(_isInitialized)
+// {
+// dol_host->setIRdata(IRinfo ,(int)player);
+// }
+//}
+
+- (oneway void)didChangeWiiExtension:(OEWiimoteExtension)extension forPlayer:(NSUInteger)player
+{
+ if(_isInitialized)
+ {
+ dol_host->changeWiimoteExtension(extension, (int)player);
+ }
+}
+
+- (oneway void)IRMovedAtPoint:(int)X withValue:(int)Y
+{
+// if (_isInitialized)
+// {
+// int dX = (1023.0 / 854.0) * X;
+// int dY = (767.0 / 480.0) * Y;
+//
+//// dol_host->DisplayMessage([[NSString stringWithFormat:@"X: %d, Y: %d",dX,dY ] UTF8String]);
+//
+// dol_host->SetIR(0, dX,dY);
+// }
+}
+
+# pragma mark - Cheats
+- (void)setCheat:(NSString *)code setType:(NSString *)type setEnabled:(BOOL)enabled
+{
+ dol_host->SetCheat([code UTF8String], [type UTF8String], enabled);
+}
+@end
diff --git a/Cores/DosBox/PBDosBoxCore/PVDosBox.mm b/Cores/DosBox/PBDosBoxCore/PVDosBox.mm
new file mode 100644
index 0000000000..45eae2e55f
--- /dev/null
+++ b/Cores/DosBox/PBDosBoxCore/PVDosBox.mm
@@ -0,0 +1,11 @@
+//
+// PVDosBox.mm
+// PVDosBox
+//
+// Created by Joseph Mattiello on 9/5/21.
+// Copyright © 2021 Provenance. All rights reserved.
+//
+
+#import "PVDosBoxCore.h"
+#import "PVDosBoxCore+Controls.h"
+#import "PVDosBoxCore+Video.h"
diff --git a/Cores/DosBox/PVDosBox.xcodeproj/project.pbxproj b/Cores/DosBox/PVDosBox.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..569f457bef
--- /dev/null
+++ b/Cores/DosBox/PVDosBox.xcodeproj/project.pbxproj
@@ -0,0 +1,2238 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 54;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ B301797F207C909E0051B93D /* libdos-box-iOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B30178D3207C901D0051B93D /* libdos-box-iOS.a */; };
+ B3135B9B26E4CAD40047F338 /* PVDosBoxCore.mm in Sources */ = {isa = PBXBuildFile; fileRef = B3C76224207833DE009950E4 /* PVDosBoxCore.mm */; };
+ B3135B9C26E4CC290047F338 /* PVDosBoxCore.h in Headers */ = {isa = PBXBuildFile; fileRef = B3C76223207833DE009950E4 /* PVDosBoxCore.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ B3135B9D26E4CC330047F338 /* PVDosBoxCore+Audio.h in Headers */ = {isa = PBXBuildFile; fileRef = B3447EB1218BC69700557ACE /* PVDosBoxCore+Audio.h */; };
+ B3135B9E26E4CC330047F338 /* PVDosBoxCore+Video.h in Headers */ = {isa = PBXBuildFile; fileRef = B3447EAD218BC5C500557ACE /* PVDosBoxCore+Video.h */; };
+ B3135B9F26E4CC330047F338 /* PVDosBoxCore+Saves.h in Headers */ = {isa = PBXBuildFile; fileRef = B3447EA9218BC59D00557ACE /* PVDosBoxCore+Saves.h */; };
+ B3135BA026E4CC330047F338 /* PVDosBoxCore+Controls.h in Headers */ = {isa = PBXBuildFile; fileRef = B3447E96218B809200557ACE /* PVDosBoxCore+Controls.h */; };
+ B3135BA126E4CC620047F338 /* PVDosBox.h in Headers */ = {isa = PBXBuildFile; fileRef = B3C7621320783162009950E4 /* PVDosBox.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ B3135BA226E4CC650047F338 /* PVDosBox.h in Headers */ = {isa = PBXBuildFile; fileRef = B3C7621320783162009950E4 /* PVDosBox.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ B3135BA326E4CD080047F338 /* PVDosBoxCore.mm in Sources */ = {isa = PBXBuildFile; fileRef = B3C76224207833DE009950E4 /* PVDosBoxCore.mm */; };
+ B3135BA426E4CD500047F338 /* PVDosBoxCore+Saves.m in Sources */ = {isa = PBXBuildFile; fileRef = B3447EAA218BC59D00557ACE /* PVDosBoxCore+Saves.m */; };
+ B3135BA526E4CD500047F338 /* PVDosBoxCore+Saves.m in Sources */ = {isa = PBXBuildFile; fileRef = B3447EAA218BC59D00557ACE /* PVDosBoxCore+Saves.m */; };
+ B3135BA626E4CD5A0047F338 /* PVDosBoxCore+Video.m in Sources */ = {isa = PBXBuildFile; fileRef = B3447EAE218BC5C500557ACE /* PVDosBoxCore+Video.m */; };
+ B3135BA726E4CD5A0047F338 /* PVDosBoxCore+Video.m in Sources */ = {isa = PBXBuildFile; fileRef = B3447EAE218BC5C500557ACE /* PVDosBoxCore+Video.m */; };
+ B3135BA826E4CD600047F338 /* PVDosBoxCore+Audio.m in Sources */ = {isa = PBXBuildFile; fileRef = B3447EB2218BC69700557ACE /* PVDosBoxCore+Audio.m */; };
+ B3135BA926E4CD600047F338 /* PVDosBoxCore+Audio.m in Sources */ = {isa = PBXBuildFile; fileRef = B3447EB2218BC69700557ACE /* PVDosBoxCore+Audio.m */; };
+ B3135BAB26E4CDC50047F338 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3135BAA26E4CDC50047F338 /* QuartzCore.framework */; };
+ B324C31C2191964F009F4EDC /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B324C31B2191964F009F4EDC /* AVFoundation.framework */; };
+ B33350262078619C0036A448 /* Core.plist in Resources */ = {isa = PBXBuildFile; fileRef = B3C7622720783510009950E4 /* Core.plist */; };
+ B3344A802859D5CF006E6B3A /* core_normal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A1A2859D566006E6B3A /* core_normal.cpp */; };
+ B3344A812859D5CF006E6B3A /* dosbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A502859D566006E6B3A /* dosbox.cpp */; };
+ B3344A822859D5CF006E6B3A /* callback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A1C2859D566006E6B3A /* callback.cpp */; };
+ B3344A832859D5CF006E6B3A /* core_dynrec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A212859D566006E6B3A /* core_dynrec.cpp */; };
+ B3344A842859D5CF006E6B3A /* modrm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A202859D566006E6B3A /* modrm.cpp */; };
+ B3344A852859D5CF006E6B3A /* flags.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A112859D566006E6B3A /* flags.cpp */; };
+ B3344A862859D5CF006E6B3A /* core_full.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A392859D566006E6B3A /* core_full.cpp */; };
+ B3344A872859D5CF006E6B3A /* core_prefetch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A2B2859D566006E6B3A /* core_prefetch.cpp */; };
+ B3344A882859D5CF006E6B3A /* core_simple.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A1E2859D566006E6B3A /* core_simple.cpp */; };
+ B3344A892859D5CF006E6B3A /* paging.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A1F2859D566006E6B3A /* paging.cpp */; };
+ B3344A8A2859D5CF006E6B3A /* core_dyn_x86.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A372859D566006E6B3A /* core_dyn_x86.cpp */; };
+ B3344A8B2859D5CF006E6B3A /* cpu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A382859D566006E6B3A /* cpu.cpp */; };
+ B3344A8C2859D5CF006E6B3A /* dbp_serialize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A7B2859D566006E6B3A /* dbp_serialize.cpp */; };
+ B3344A8D2859D5D3006E6B3A /* dos_execute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A062859D566006E6B3A /* dos_execute.cpp */; };
+ B3344A8E2859D5D3006E6B3A /* dos_mscdex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449F92859D566006E6B3A /* dos_mscdex.cpp */; };
+ B3344A8F2859D5D3006E6B3A /* dos_files.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449F12859D566006E6B3A /* dos_files.cpp */; };
+ B3344A902859D5D3006E6B3A /* dos_devices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A072859D566006E6B3A /* dos_devices.cpp */; };
+ B3344A912859D5D3006E6B3A /* drive_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A092859D566006E6B3A /* drive_memory.cpp */; };
+ B3344A922859D5D3006E6B3A /* dos.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A0A2859D566006E6B3A /* dos.cpp */; };
+ B3344A932859D5D3006E6B3A /* dos_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A0C2859D566006E6B3A /* dos_misc.cpp */; };
+ B3344A942859D5D4006E6B3A /* drive_virtual.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449FE2859D566006E6B3A /* drive_virtual.cpp */; };
+ B3344A952859D5D4006E6B3A /* dos_keyboard_layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449FA2859D566006E6B3A /* dos_keyboard_layout.cpp */; };
+ B3344A962859D5D4006E6B3A /* dos_programs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449FB2859D566006E6B3A /* dos_programs.cpp */; };
+ B3344A972859D5D4006E6B3A /* dos_ioctl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449F32859D566006E6B3A /* dos_ioctl.cpp */; };
+ B3344A982859D5D4006E6B3A /* drive_fat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A0D2859D566006E6B3A /* drive_fat.cpp */; };
+ B3344A992859D5D4006E6B3A /* dos_tables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449F22859D566006E6B3A /* dos_tables.cpp */; };
+ B3344A9A2859D5D4006E6B3A /* drives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A052859D566006E6B3A /* drives.cpp */; };
+ B3344A9B2859D5D4006E6B3A /* drive_iso.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A0B2859D566006E6B3A /* drive_iso.cpp */; };
+ B3344A9C2859D5D4006E6B3A /* drive_local.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A0F2859D566006E6B3A /* drive_local.cpp */; };
+ B3344A9D2859D5D4006E6B3A /* drive_overlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449F62859D566006E6B3A /* drive_overlay.cpp */; };
+ B3344A9E2859D5D4006E6B3A /* dos_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449FD2859D566006E6B3A /* dos_memory.cpp */; };
+ B3344A9F2859D5D4006E6B3A /* cdrom_image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449F52859D566006E6B3A /* cdrom_image.cpp */; };
+ B3344AA02859D5D4006E6B3A /* drive_zip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449F72859D566006E6B3A /* drive_zip.cpp */; };
+ B3344AA12859D5D4006E6B3A /* drive_union.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A002859D566006E6B3A /* drive_union.cpp */; };
+ B3344AA22859D5D4006E6B3A /* dos_classes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A012859D566006E6B3A /* dos_classes.cpp */; };
+ B3344AA32859D5D4006E6B3A /* cdrom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449F42859D566006E6B3A /* cdrom.cpp */; };
+ B3344AA42859D5D4006E6B3A /* drive_cache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449F02859D566006E6B3A /* drive_cache.cpp */; };
+ B3344AA52859D5EA006E6B3A /* midi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A572859D566006E6B3A /* midi.cpp */; };
+ B3344AA62859D5EA006E6B3A /* cmos.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449D72859D566006E6B3A /* cmos.cpp */; };
+ B3344AA72859D5EA006E6B3A /* sn76496.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449C32859D566006E6B3A /* sn76496.cpp */; };
+ B3344AA82859D5EA006E6B3A /* vga_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449BA2859D566006E6B3A /* vga_memory.cpp */; };
+ B3344AA92859D5EA006E6B3A /* mixer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449C72859D566006E6B3A /* mixer.cpp */; };
+ B3344AAA2859D5EA006E6B3A /* vga_gfx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449D02859D566006E6B3A /* vga_gfx.cpp */; };
+ B3344AAB2859D5EA006E6B3A /* render_scalers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A5A2859D566006E6B3A /* render_scalers.cpp */; };
+ B3344AAC2859D5EA006E6B3A /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449C62859D566006E6B3A /* timer.cpp */; };
+ B3344AAD2859D5EA006E6B3A /* gus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449C92859D566006E6B3A /* gus.cpp */; };
+ B3344AAE2859D5EA006E6B3A /* vga_crtc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449DC2859D566006E6B3A /* vga_crtc.cpp */; };
+ B3344AAF2859D5EA006E6B3A /* dbopl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449DD2859D566006E6B3A /* dbopl.cpp */; };
+ B3344AB02859D5EA006E6B3A /* vga_tseng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449D52859D566006E6B3A /* vga_tseng.cpp */; };
+ B3344AB12859D5EA006E6B3A /* gameblaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449CA2859D566006E6B3A /* gameblaster.cpp */; };
+ B3344AB22859D5EA006E6B3A /* disney.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449D12859D566006E6B3A /* disney.cpp */; };
+ B3344AB32859D5EA006E6B3A /* vga_attr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449D22859D566006E6B3A /* vga_attr.cpp */; };
+ B3344AB42859D5EA006E6B3A /* adlib.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449D62859D566006E6B3A /* adlib.cpp */; };
+ B3344AB52859D5EA006E6B3A /* hardware.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449BC2859D566006E6B3A /* hardware.cpp */; };
+ B3344AB62859D5EA006E6B3A /* vga_dac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449D92859D566006E6B3A /* vga_dac.cpp */; };
+ B3344AB72859D5EA006E6B3A /* pic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449B92859D566006E6B3A /* pic.cpp */; };
+ B3344AB82859D5EA006E6B3A /* saa1099.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449C22859D566006E6B3A /* saa1099.cpp */; };
+ B3344AB92859D5EA006E6B3A /* tandy_sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449CE2859D566006E6B3A /* tandy_sound.cpp */; };
+ B3344ABA2859D5EA006E6B3A /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A542859D566006E6B3A /* render.cpp */; };
+ B3344ABB2859D5EA006E6B3A /* dma.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449BE2859D566006E6B3A /* dma.cpp */; };
+ B3344ABC2859D5EA006E6B3A /* vga_xga.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449D32859D566006E6B3A /* vga_xga.cpp */; };
+ B3344ABD2859D5EA006E6B3A /* pci_bus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449C52859D566006E6B3A /* pci_bus.cpp */; };
+ B3344ABE2859D5EA006E6B3A /* vga_other.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449BD2859D566006E6B3A /* vga_other.cpp */; };
+ B3344ABF2859D5EA006E6B3A /* fpu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A7E2859D566006E6B3A /* fpu.cpp */; };
+ B3344AC02859D5EA006E6B3A /* vga_draw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449CB2859D566006E6B3A /* vga_draw.cpp */; };
+ B3344AC12859D5EA006E6B3A /* sblaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449CD2859D566006E6B3A /* sblaster.cpp */; };
+ B3344AC22859D5EA006E6B3A /* nukedopl3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449D82859D566006E6B3A /* nukedopl3.cpp */; };
+ B3344AC32859D5EA006E6B3A /* iohandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449D42859D566006E6B3A /* iohandler.cpp */; };
+ B3344AC42859D5EA006E6B3A /* memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449BB2859D566006E6B3A /* memory.cpp */; };
+ B3344AC52859D5EA006E6B3A /* pcspeaker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449DA2859D566006E6B3A /* pcspeaker.cpp */; };
+ B3344AC62859D5F0006E6B3A /* vga_seq.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449EE2859D566006E6B3A /* vga_seq.cpp */; };
+ B3344AC72859D5F0006E6B3A /* serialdummy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449E42859D566006E6B3A /* serialdummy.cpp */; };
+ B3344AC82859D5F0006E6B3A /* keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449E92859D566006E6B3A /* keyboard.cpp */; };
+ B3344AC92859D5F0006E6B3A /* vga_paradise.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449E72859D566006E6B3A /* vga_paradise.cpp */; };
+ B3344ACA2859D5F0006E6B3A /* vga_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449EC2859D566006E6B3A /* vga_misc.cpp */; };
+ B3344ACB2859D5F0006E6B3A /* vga.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449EB2859D566006E6B3A /* vga.cpp */; };
+ B3344ACC2859D5F0006E6B3A /* joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449EA2859D566006E6B3A /* joystick.cpp */; };
+ B3344ACD2859D5F0006E6B3A /* mpu401.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449E82859D566006E6B3A /* mpu401.cpp */; };
+ B3344ACE2859D5F0006E6B3A /* serialport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449DF2859D566006E6B3A /* serialport.cpp */; };
+ B3344ACF2859D5F0006E6B3A /* vga_s3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449ED2859D566006E6B3A /* vga_s3.cpp */; };
+ B3344AD02859D5F4006E6B3A /* bios.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A692859D566006E6B3A /* bios.cpp */; };
+ B3344AD12859D5F4006E6B3A /* int10.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A702859D566006E6B3A /* int10.cpp */; };
+ B3344AD22859D5F4006E6B3A /* int10_modes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A722859D566006E6B3A /* int10_modes.cpp */; };
+ B3344AD32859D5F4006E6B3A /* int10_vptable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A782859D566006E6B3A /* int10_vptable.cpp */; };
+ B3344AD42859D5F4006E6B3A /* int10_vesa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A6B2859D566006E6B3A /* int10_vesa.cpp */; };
+ B3344AD52859D5F4006E6B3A /* mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A6D2859D566006E6B3A /* mouse.cpp */; };
+ B3344AD62859D5F4006E6B3A /* bios_keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A792859D566006E6B3A /* bios_keyboard.cpp */; };
+ B3344AD72859D5F4006E6B3A /* int10_put_pixel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A6C2859D566006E6B3A /* int10_put_pixel.cpp */; };
+ B3344AD82859D5F4006E6B3A /* ems.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A6F2859D566006E6B3A /* ems.cpp */; };
+ B3344AD92859D5F4006E6B3A /* int10_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A752859D566006E6B3A /* int10_memory.cpp */; };
+ B3344ADA2859D5F4006E6B3A /* int10_video_state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A742859D566006E6B3A /* int10_video_state.cpp */; };
+ B3344ADB2859D5F4006E6B3A /* xms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A732859D566006E6B3A /* xms.cpp */; };
+ B3344ADC2859D5F4006E6B3A /* int10_char.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A6E2859D566006E6B3A /* int10_char.cpp */; };
+ B3344ADD2859D5F4006E6B3A /* int10_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A712859D566006E6B3A /* int10_misc.cpp */; };
+ B3344ADE2859D5F4006E6B3A /* bios_disk.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A7A2859D566006E6B3A /* bios_disk.cpp */; };
+ B3344ADF2859D5F4006E6B3A /* int10_pal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A6A2859D566006E6B3A /* int10_pal.cpp */; };
+ B3344AE02859D5F9006E6B3A /* cross.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449B52859D566006E6B3A /* cross.cpp */; };
+ B3344AE12859D5F9006E6B3A /* messages.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449B32859D566006E6B3A /* messages.cpp */; };
+ B3344AE22859D5F9006E6B3A /* setup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449B42859D566006E6B3A /* setup.cpp */; };
+ B3344AE32859D5F9006E6B3A /* programs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449B62859D566006E6B3A /* programs.cpp */; };
+ B3344AE42859D5F9006E6B3A /* support.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449B72859D566006E6B3A /* support.cpp */; };
+ B3344AE52859D5FF006E6B3A /* shell_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A4D2859D566006E6B3A /* shell_misc.cpp */; };
+ B3344AE62859D5FF006E6B3A /* shell_cmds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A4E2859D566006E6B3A /* shell_cmds.cpp */; };
+ B3344AE72859D5FF006E6B3A /* shell.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A4F2859D566006E6B3A /* shell.cpp */; };
+ B3344AE82859D5FF006E6B3A /* shell_batch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A4C2859D566006E6B3A /* shell_batch.cpp */; };
+ B3344AE92859D664006E6B3A /* int10_pal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A6A2859D566006E6B3A /* int10_pal.cpp */; };
+ B3344AEA2859D664006E6B3A /* gus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449C92859D566006E6B3A /* gus.cpp */; };
+ B3344AEB2859D664006E6B3A /* dos_keyboard_layout.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449FA2859D566006E6B3A /* dos_keyboard_layout.cpp */; };
+ B3344AEC2859D664006E6B3A /* vga.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449EB2859D566006E6B3A /* vga.cpp */; };
+ B3344AED2859D664006E6B3A /* drive_virtual.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449FE2859D566006E6B3A /* drive_virtual.cpp */; };
+ B3344AEE2859D664006E6B3A /* shell_cmds.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A4E2859D566006E6B3A /* shell_cmds.cpp */; };
+ B3344AEF2859D664006E6B3A /* bios_keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A792859D566006E6B3A /* bios_keyboard.cpp */; };
+ B3344AF02859D664006E6B3A /* render_scalers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A5A2859D566006E6B3A /* render_scalers.cpp */; };
+ B3344AF12859D664006E6B3A /* keyboard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449E92859D566006E6B3A /* keyboard.cpp */; };
+ B3344AF22859D664006E6B3A /* messages.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449B32859D566006E6B3A /* messages.cpp */; };
+ B3344AF32859D664006E6B3A /* bios_disk.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A7A2859D566006E6B3A /* bios_disk.cpp */; };
+ B3344AF42859D664006E6B3A /* core_prefetch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A2B2859D566006E6B3A /* core_prefetch.cpp */; };
+ B3344AF52859D664006E6B3A /* vga_crtc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449DC2859D566006E6B3A /* vga_crtc.cpp */; };
+ B3344AF62859D664006E6B3A /* core_full.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A392859D566006E6B3A /* core_full.cpp */; };
+ B3344AF72859D664006E6B3A /* fpu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A7E2859D566006E6B3A /* fpu.cpp */; };
+ B3344AF82859D664006E6B3A /* int10.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A702859D566006E6B3A /* int10.cpp */; };
+ B3344AF92859D664006E6B3A /* int10_char.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A6E2859D566006E6B3A /* int10_char.cpp */; };
+ B3344AFA2859D664006E6B3A /* dos_classes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A012859D566006E6B3A /* dos_classes.cpp */; };
+ B3344AFB2859D664006E6B3A /* callback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A1C2859D566006E6B3A /* callback.cpp */; };
+ B3344AFC2859D664006E6B3A /* serialport.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449DF2859D566006E6B3A /* serialport.cpp */; };
+ B3344AFD2859D664006E6B3A /* vga_s3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449ED2859D566006E6B3A /* vga_s3.cpp */; };
+ B3344AFE2859D664006E6B3A /* drive_overlay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449F62859D566006E6B3A /* drive_overlay.cpp */; };
+ B3344AFF2859D664006E6B3A /* vga_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449BA2859D566006E6B3A /* vga_memory.cpp */; };
+ B3344B002859D664006E6B3A /* core_dynrec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A212859D566006E6B3A /* core_dynrec.cpp */; };
+ B3344B012859D664006E6B3A /* modrm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A202859D566006E6B3A /* modrm.cpp */; };
+ B3344B022859D664006E6B3A /* int10_vesa.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A6B2859D566006E6B3A /* int10_vesa.cpp */; };
+ B3344B032859D664006E6B3A /* memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449BB2859D566006E6B3A /* memory.cpp */; };
+ B3344B042859D664006E6B3A /* vga_xga.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449D32859D566006E6B3A /* vga_xga.cpp */; };
+ B3344B052859D664006E6B3A /* int10_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A752859D566006E6B3A /* int10_memory.cpp */; };
+ B3344B062859D664006E6B3A /* vga_paradise.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449E72859D566006E6B3A /* vga_paradise.cpp */; };
+ B3344B072859D664006E6B3A /* dbopl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449DD2859D566006E6B3A /* dbopl.cpp */; };
+ B3344B082859D664006E6B3A /* int10_modes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A722859D566006E6B3A /* int10_modes.cpp */; };
+ B3344B092859D664006E6B3A /* render.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A542859D566006E6B3A /* render.cpp */; };
+ B3344B0A2859D664006E6B3A /* drive_cache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449F02859D566006E6B3A /* drive_cache.cpp */; };
+ B3344B0B2859D664006E6B3A /* shell_batch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A4C2859D566006E6B3A /* shell_batch.cpp */; };
+ B3344B0C2859D664006E6B3A /* core_simple.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A1E2859D566006E6B3A /* core_simple.cpp */; };
+ B3344B0D2859D664006E6B3A /* drive_iso.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A0B2859D566006E6B3A /* drive_iso.cpp */; };
+ B3344B0E2859D664006E6B3A /* cross.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449B52859D566006E6B3A /* cross.cpp */; };
+ B3344B0F2859D664006E6B3A /* xms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A732859D566006E6B3A /* xms.cpp */; };
+ B3344B102859D664006E6B3A /* vga_tseng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449D52859D566006E6B3A /* vga_tseng.cpp */; };
+ B3344B112859D664006E6B3A /* cmos.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449D72859D566006E6B3A /* cmos.cpp */; };
+ B3344B122859D664006E6B3A /* iohandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449D42859D566006E6B3A /* iohandler.cpp */; };
+ B3344B132859D664006E6B3A /* dos_files.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449F12859D566006E6B3A /* dos_files.cpp */; };
+ B3344B142859D664006E6B3A /* drive_fat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A0D2859D566006E6B3A /* drive_fat.cpp */; };
+ B3344B152859D664006E6B3A /* shell.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A4F2859D566006E6B3A /* shell.cpp */; };
+ B3344B162859D664006E6B3A /* dos_ioctl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449F32859D566006E6B3A /* dos_ioctl.cpp */; };
+ B3344B172859D664006E6B3A /* drive_zip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449F72859D566006E6B3A /* drive_zip.cpp */; };
+ B3344B182859D664006E6B3A /* dma.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449BE2859D566006E6B3A /* dma.cpp */; };
+ B3344B192859D664006E6B3A /* sn76496.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449C32859D566006E6B3A /* sn76496.cpp */; };
+ B3344B1A2859D664006E6B3A /* mpu401.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449E82859D566006E6B3A /* mpu401.cpp */; };
+ B3344B1B2859D664006E6B3A /* midi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A572859D566006E6B3A /* midi.cpp */; };
+ B3344B1C2859D664006E6B3A /* support.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449B72859D566006E6B3A /* support.cpp */; };
+ B3344B1D2859D664006E6B3A /* int10_put_pixel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A6C2859D566006E6B3A /* int10_put_pixel.cpp */; };
+ B3344B1E2859D664006E6B3A /* programs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449B62859D566006E6B3A /* programs.cpp */; };
+ B3344B1F2859D664006E6B3A /* dos_programs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449FB2859D566006E6B3A /* dos_programs.cpp */; };
+ B3344B202859D664006E6B3A /* shell_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A4D2859D566006E6B3A /* shell_misc.cpp */; };
+ B3344B212859D664006E6B3A /* cdrom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449F42859D566006E6B3A /* cdrom.cpp */; };
+ B3344B222859D664006E6B3A /* vga_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449EC2859D566006E6B3A /* vga_misc.cpp */; };
+ B3344B232859D664006E6B3A /* adlib.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449D62859D566006E6B3A /* adlib.cpp */; };
+ B3344B242859D664006E6B3A /* gameblaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449CA2859D566006E6B3A /* gameblaster.cpp */; };
+ B3344B252859D664006E6B3A /* cpu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A382859D566006E6B3A /* cpu.cpp */; };
+ B3344B262859D664006E6B3A /* tandy_sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449CE2859D566006E6B3A /* tandy_sound.cpp */; };
+ B3344B272859D664006E6B3A /* nukedopl3.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449D82859D566006E6B3A /* nukedopl3.cpp */; };
+ B3344B282859D664006E6B3A /* int10_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A712859D566006E6B3A /* int10_misc.cpp */; };
+ B3344B292859D664006E6B3A /* core_normal.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A1A2859D566006E6B3A /* core_normal.cpp */; };
+ B3344B2A2859D664006E6B3A /* int10_video_state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A742859D566006E6B3A /* int10_video_state.cpp */; };
+ B3344B2B2859D664006E6B3A /* vga_gfx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449D02859D566006E6B3A /* vga_gfx.cpp */; };
+ B3344B2C2859D664006E6B3A /* saa1099.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449C22859D566006E6B3A /* saa1099.cpp */; };
+ B3344B2D2859D664006E6B3A /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449C62859D566006E6B3A /* timer.cpp */; };
+ B3344B2E2859D664006E6B3A /* dosbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A502859D566006E6B3A /* dosbox.cpp */; };
+ B3344B2F2859D664006E6B3A /* bios.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A692859D566006E6B3A /* bios.cpp */; };
+ B3344B302859D664006E6B3A /* dos.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A0A2859D566006E6B3A /* dos.cpp */; };
+ B3344B312859D664006E6B3A /* pic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449B92859D566006E6B3A /* pic.cpp */; };
+ B3344B322859D664006E6B3A /* pci_bus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449C52859D566006E6B3A /* pci_bus.cpp */; };
+ B3344B332859D664006E6B3A /* drive_local.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A0F2859D566006E6B3A /* drive_local.cpp */; };
+ B3344B342859D664006E6B3A /* dos_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449FD2859D566006E6B3A /* dos_memory.cpp */; };
+ B3344B352859D664006E6B3A /* drive_memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A092859D566006E6B3A /* drive_memory.cpp */; };
+ B3344B362859D664006E6B3A /* setup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449B42859D566006E6B3A /* setup.cpp */; };
+ B3344B372859D664006E6B3A /* joystick.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449EA2859D566006E6B3A /* joystick.cpp */; };
+ B3344B382859D664006E6B3A /* disney.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449D12859D566006E6B3A /* disney.cpp */; };
+ B3344B392859D664006E6B3A /* pcspeaker.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449DA2859D566006E6B3A /* pcspeaker.cpp */; };
+ B3344B3A2859D664006E6B3A /* dos_execute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A062859D566006E6B3A /* dos_execute.cpp */; };
+ B3344B3B2859D664006E6B3A /* int10_vptable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A782859D566006E6B3A /* int10_vptable.cpp */; };
+ B3344B3C2859D664006E6B3A /* mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A6D2859D566006E6B3A /* mouse.cpp */; };
+ B3344B3D2859D664006E6B3A /* drive_union.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A002859D566006E6B3A /* drive_union.cpp */; };
+ B3344B3E2859D664006E6B3A /* ems.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A6F2859D566006E6B3A /* ems.cpp */; };
+ B3344B3F2859D664006E6B3A /* paging.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A1F2859D566006E6B3A /* paging.cpp */; };
+ B3344B402859D664006E6B3A /* vga_other.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449BD2859D566006E6B3A /* vga_other.cpp */; };
+ B3344B412859D664006E6B3A /* dos_mscdex.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449F92859D566006E6B3A /* dos_mscdex.cpp */; };
+ B3344B422859D664006E6B3A /* vga_draw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449CB2859D566006E6B3A /* vga_draw.cpp */; };
+ B3344B432859D664006E6B3A /* vga_dac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449D92859D566006E6B3A /* vga_dac.cpp */; };
+ B3344B442859D664006E6B3A /* dos_devices.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A072859D566006E6B3A /* dos_devices.cpp */; };
+ B3344B452859D664006E6B3A /* dbp_serialize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A7B2859D566006E6B3A /* dbp_serialize.cpp */; };
+ B3344B462859D664006E6B3A /* core_dyn_x86.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A372859D566006E6B3A /* core_dyn_x86.cpp */; };
+ B3344B472859D664006E6B3A /* sblaster.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449CD2859D566006E6B3A /* sblaster.cpp */; };
+ B3344B482859D664006E6B3A /* dos_tables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449F22859D566006E6B3A /* dos_tables.cpp */; };
+ B3344B492859D664006E6B3A /* flags.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A112859D566006E6B3A /* flags.cpp */; };
+ B3344B4A2859D664006E6B3A /* dos_misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A0C2859D566006E6B3A /* dos_misc.cpp */; };
+ B3344B4B2859D664006E6B3A /* hardware.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449BC2859D566006E6B3A /* hardware.cpp */; };
+ B3344B4C2859D664006E6B3A /* vga_attr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449D22859D566006E6B3A /* vga_attr.cpp */; };
+ B3344B4D2859D664006E6B3A /* vga_seq.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449EE2859D566006E6B3A /* vga_seq.cpp */; };
+ B3344B4E2859D664006E6B3A /* mixer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449C72859D566006E6B3A /* mixer.cpp */; };
+ B3344B4F2859D664006E6B3A /* cdrom_image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449F52859D566006E6B3A /* cdrom_image.cpp */; };
+ B3344B502859D664006E6B3A /* drives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B3344A052859D566006E6B3A /* drives.cpp */; };
+ B3344B512859D664006E6B3A /* serialdummy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = B33449E42859D566006E6B3A /* serialdummy.cpp */; };
+ B339468920783F41008DBAB4 /* libpthread.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B339468820783F41008DBAB4 /* libpthread.tbd */; };
+ B339468B20783F48008DBAB4 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B339468A20783F48008DBAB4 /* libz.tbd */; };
+ B3447ECD218BEDD200557ACE /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B35E6BF4207CD2740040709A /* CoreAudio.framework */; };
+ B3447ECE218BEDD200557ACE /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B35E6BF1207CD2670040709A /* AudioToolbox.framework */; };
+ B3447ED0218BEDD200557ACE /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B339468A20783F48008DBAB4 /* libz.tbd */; };
+ B3447ED1218BEDD200557ACE /* libpthread.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B339468820783F41008DBAB4 /* libpthread.tbd */; };
+ B3447ED3218BEDD200557ACE /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3C7621E2078325C009950E4 /* Foundation.framework */; };
+ B3447ED4218BEDD200557ACE /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3C7621C20783243009950E4 /* OpenGLES.framework */; };
+ B3447EE2218BEDD200557ACE /* Core.plist in Resources */ = {isa = PBXBuildFile; fileRef = B3C7622720783510009950E4 /* Core.plist */; };
+ B35E6BF2207CD2680040709A /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B35E6BF1207CD2670040709A /* AudioToolbox.framework */; };
+ B35E6BF5207CD2740040709A /* CoreAudioKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B35E6BF3207CD2730040709A /* CoreAudioKit.framework */; };
+ B35E6BF6207CD2740040709A /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B35E6BF4207CD2740040709A /* CoreAudio.framework */; };
+ B35E6BF9207D00D00040709A /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B35E6BF8207D00D00040709A /* AVFoundation.framework */; };
+ B3A3204227209ED700F338F6 /* PVDosBoxCore+Controls.h in Headers */ = {isa = PBXBuildFile; fileRef = B3447E96218B809200557ACE /* PVDosBoxCore+Controls.h */; };
+ B3A3204527209EE100F338F6 /* PVDosBoxCore+Controls.mm in Sources */ = {isa = PBXBuildFile; fileRef = B3447E97218B809300557ACE /* PVDosBoxCore+Controls.mm */; };
+ B3A3204627209EE100F338F6 /* PVDosBoxCore+Controls.mm in Sources */ = {isa = PBXBuildFile; fileRef = B3447E97218B809300557ACE /* PVDosBoxCore+Controls.mm */; };
+ B3B104AF218F26F400210C39 /* libdos-box-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = B3447F91218BEE3F00557ACE /* libdos-box-tvOS.a */; };
+ B3B104B9218F281B00210C39 /* PVSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3B104B8218F281B00210C39 /* PVSupport.framework */; };
+ B3C7621D20783243009950E4 /* OpenGLES.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3C7621C20783243009950E4 /* OpenGLES.framework */; };
+ B3C7621F2078325C009950E4 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3C7621E2078325C009950E4 /* Foundation.framework */; };
+ B3C7622220783297009950E4 /* PVSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3C7622120783297009950E4 /* PVSupport.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ B30178D1207C901D0051B93D /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "include/$(PRODUCT_NAME)";
+ dstSubfolderSpec = 16;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B3447F8D218BEE3F00557ACE /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "include/$(PRODUCT_NAME)";
+ dstSubfolderSpec = 16;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ B30178D3207C901D0051B93D /* libdos-box-iOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libdos-box-iOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
+ B3135BAA26E4CDC50047F338 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX12.0.sdk/System/Library/Frameworks/QuartzCore.framework; sourceTree = DEVELOPER_DIR; };
+ B324C31B2191964F009F4EDC /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.1.sdk/System/Library/Frameworks/AVFoundation.framework; sourceTree = DEVELOPER_DIR; };
+ B33448842859D565006E6B3A /* core_options.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = core_options.h; sourceTree = ""; };
+ B33448852859D566006E6B3A /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = ""; };
+ B33448872859D566006E6B3A /* onscreenkeyboard.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = onscreenkeyboard.png; sourceTree = ""; };
+ B33448882859D566006E6B3A /* padmapper.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = padmapper.png; sourceTree = ""; };
+ B33448892859D566006E6B3A /* startmenu.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = startmenu.png; sourceTree = ""; };
+ B334488A2859D566006E6B3A /* logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo.png; sourceTree = ""; };
+ B334488B2859D566006E6B3A /* Makefile */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; };
+ B334488D2859D566006E6B3A /* dma.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dma.h; sourceTree = ""; };
+ B334488E2859D566006E6B3A /* dos_system.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dos_system.h; sourceTree = ""; };
+ B334488F2859D566006E6B3A /* bios.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bios.h; sourceTree = ""; };
+ B33448902859D566006E6B3A /* control.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = control.h; sourceTree = ""; };
+ B33448912859D566006E6B3A /* debug.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = ""; };
+ B33448922859D566006E6B3A /* shell.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = shell.h; sourceTree = ""; };
+ B33448932859D566006E6B3A /* setup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = setup.h; sourceTree = ""; };
+ B33448942859D566006E6B3A /* cross.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cross.h; sourceTree = ""; };
+ B33448952859D566006E6B3A /* ipx.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ipx.h; sourceTree = ""; };
+ B33448962859D566006E6B3A /* dos_inc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dos_inc.h; sourceTree = ""; };
+ B33448972859D566006E6B3A /* midi.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = midi.h; sourceTree = ""; };
+ B33448982859D566006E6B3A /* config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; };
+ B33448992859D566006E6B3A /* joystick.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = joystick.h; sourceTree = ""; };
+ B334489A2859D566006E6B3A /* bios_disk.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bios_disk.h; sourceTree = ""; };
+ B334489B2859D566006E6B3A /* mapper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mapper.h; sourceTree = ""; };
+ B334489C2859D566006E6B3A /* vga.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vga.h; sourceTree = ""; };
+ B334489D2859D566006E6B3A /* logging.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = logging.h; sourceTree = ""; };
+ B334489E2859D566006E6B3A /* serialport.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = serialport.h; sourceTree = ""; };
+ B334489F2859D566006E6B3A /* mouse.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mouse.h; sourceTree = ""; };
+ B33448A02859D566006E6B3A /* timer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = timer.h; sourceTree = ""; };
+ B33448A12859D566006E6B3A /* mixer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mixer.h; sourceTree = ""; };
+ B33448A22859D566006E6B3A /* ipxserver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ipxserver.h; sourceTree = ""; };
+ B33448A32859D566006E6B3A /* fpu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = fpu.h; sourceTree = ""; };
+ B33448A42859D566006E6B3A /* pic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pic.h; sourceTree = ""; };
+ B33448A52859D566006E6B3A /* keyboard.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = keyboard.h; sourceTree = ""; };
+ B33448A62859D566006E6B3A /* cpu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cpu.h; sourceTree = ""; };
+ B33448A72859D566006E6B3A /* video.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = video.h; sourceTree = ""; };
+ B33448A82859D566006E6B3A /* paging.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = paging.h; sourceTree = ""; };
+ B33448A92859D566006E6B3A /* regs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = regs.h; sourceTree = ""; };
+ B33448AA2859D566006E6B3A /* mem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mem.h; sourceTree = ""; };
+ B33448AB2859D566006E6B3A /* inout.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = inout.h; sourceTree = ""; };
+ B33448AC2859D566006E6B3A /* pci_bus.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pci_bus.h; sourceTree = ""; };
+ B33448AD2859D566006E6B3A /* hardware.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = hardware.h; sourceTree = ""; };
+ B33448AE2859D566006E6B3A /* callback.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = callback.h; sourceTree = ""; };
+ B33448AF2859D566006E6B3A /* dosbox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dosbox.h; sourceTree = ""; };
+ B33448B02859D566006E6B3A /* programs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = programs.h; sourceTree = ""; };
+ B33448B12859D566006E6B3A /* render.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = render.h; sourceTree = ""; };
+ B33448B22859D566006E6B3A /* dbp_serialize.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dbp_serialize.h; sourceTree = ""; };
+ B33448B32859D566006E6B3A /* support.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = support.h; sourceTree = ""; };
+ B33448B42859D566006E6B3A /* keyb2joypad.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = keyb2joypad.h; sourceTree = ""; };
+ B33448B52859D566006E6B3A /* dosbox_pure_libretro.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = dosbox_pure_libretro.dylib; sourceTree = ""; };
+ B33448B62859D566006E6B3A /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; };
+ B33448B72859D566006E6B3A /* .gitignore */ = {isa = PBXFileReference; lastKnownFileType = text; path = .gitignore; sourceTree = ""; };
+ B33448B82859D566006E6B3A /* DOSBOX-AUTHORS */ = {isa = PBXFileReference; lastKnownFileType = text; path = "DOSBOX-AUTHORS"; sourceTree = ""; };
+ B33448BB2859D566006E6B3A /* encoding_utf.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = encoding_utf.c; sourceTree = ""; };
+ B33448BD2859D566006E6B3A /* compat_strl.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = compat_strl.c; sourceTree = ""; };
+ B33448BE2859D566006E6B3A /* fopen_utf8.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = fopen_utf8.c; sourceTree = ""; };
+ B33448C12859D566006E6B3A /* utf.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = utf.h; sourceTree = ""; };
+ B33448C32859D566006E6B3A /* strl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = strl.h; sourceTree = ""; };
+ B33448C42859D566006E6B3A /* fopen_utf8.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = fopen_utf8.h; sourceTree = ""; };
+ B33448C52859D566006E6B3A /* retro_common_api.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = retro_common_api.h; sourceTree = ""; };
+ B33448C62859D566006E6B3A /* retro_timers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = retro_timers.h; sourceTree = ""; };
+ B33448C72859D566006E6B3A /* retro_inline.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = retro_inline.h; sourceTree = ""; };
+ B33448C82859D566006E6B3A /* boolean.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = boolean.h; sourceTree = ""; };
+ B33448C92859D566006E6B3A /* libretro.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = libretro.h; sourceTree = ""; };
+ B33448CB2859D566006E6B3A /* wiiu_pthread.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wiiu_pthread.h; sourceTree = ""; };
+ B33448CC2859D566006E6B3A /* gx_pthread.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gx_pthread.h; sourceTree = ""; };
+ B33448CD2859D566006E6B3A /* ctr_pthread.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ctr_pthread.h; sourceTree = ""; };
+ B33448CE2859D566006E6B3A /* dosbox_pure_libretro.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dosbox_pure_libretro.cpp; sourceTree = ""; };
+ B33448CF2859D566006E6B3A /* dosbox_pure_libretro.sln */ = {isa = PBXFileReference; lastKnownFileType = text; path = dosbox_pure_libretro.sln; sourceTree = ""; };
+ B33448D02859D566006E6B3A /* .gitlab-ci.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = ".gitlab-ci.yml"; sourceTree = ""; };
+ B33448D12859D566006E6B3A /* DOSBOX-THANKS */ = {isa = PBXFileReference; lastKnownFileType = text; path = "DOSBOX-THANKS"; sourceTree = ""; };
+ B33449AA2859D566006E6B3A /* dosbox_pure_libretro.vcxproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = dosbox_pure_libretro.vcxproj; sourceTree = ""; };
+ B33449AB2859D566006E6B3A /* dosbox_pure_libretro.vcxproj.filters */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = dosbox_pure_libretro.vcxproj.filters; sourceTree = ""; };
+ B33449AC2859D566006E6B3A /* dosbox_pure_libretro.info */ = {isa = PBXFileReference; lastKnownFileType = text; path = dosbox_pure_libretro.info; sourceTree = ""; };
+ B33449AE2859D566006E6B3A /* Android.mk */ = {isa = PBXFileReference; lastKnownFileType = text; path = Android.mk; sourceTree = ""; };
+ B33449AF2859D566006E6B3A /* Application.mk */ = {isa = PBXFileReference; lastKnownFileType = text; path = Application.mk; sourceTree = ""; };
+ B33449B02859D566006E6B3A /* keyb2joypad.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = keyb2joypad.cpp; sourceTree = ""; };
+ B33449B32859D566006E6B3A /* messages.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = messages.cpp; sourceTree = ""; };
+ B33449B42859D566006E6B3A /* setup.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = setup.cpp; sourceTree = ""; };
+ B33449B52859D566006E6B3A /* cross.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = cross.cpp; sourceTree = ""; };
+ B33449B62859D566006E6B3A /* programs.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = programs.cpp; sourceTree = ""; };
+ B33449B72859D566006E6B3A /* support.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = support.cpp; sourceTree = ""; };
+ B33449B92859D566006E6B3A /* pic.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = pic.cpp; sourceTree = ""; };
+ B33449BA2859D566006E6B3A /* vga_memory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = vga_memory.cpp; sourceTree = ""; };
+ B33449BB2859D566006E6B3A /* memory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = memory.cpp; sourceTree = ""; };
+ B33449BC2859D566006E6B3A /* hardware.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = hardware.cpp; sourceTree = ""; };
+ B33449BD2859D566006E6B3A /* vga_other.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = vga_other.cpp; sourceTree = ""; };
+ B33449BE2859D566006E6B3A /* dma.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dma.cpp; sourceTree = ""; };
+ B33449C02859D566006E6B3A /* sn76496.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = sn76496.h; sourceTree = ""; };
+ B33449C12859D566006E6B3A /* emu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = emu.h; sourceTree = ""; };
+ B33449C22859D566006E6B3A /* saa1099.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = saa1099.cpp; sourceTree = ""; };
+ B33449C32859D566006E6B3A /* sn76496.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = sn76496.cpp; sourceTree = ""; };
+ B33449C42859D566006E6B3A /* saa1099.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = saa1099.h; sourceTree = ""; };
+ B33449C52859D566006E6B3A /* pci_bus.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = pci_bus.cpp; sourceTree = ""; };
+ B33449C62859D566006E6B3A /* timer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = timer.cpp; sourceTree = ""; };
+ B33449C72859D566006E6B3A /* mixer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = mixer.cpp; sourceTree = ""; };
+ B33449C82859D566006E6B3A /* adlib.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = adlib.h; sourceTree = ""; };
+ B33449C92859D566006E6B3A /* gus.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = gus.cpp; sourceTree = ""; };
+ B33449CA2859D566006E6B3A /* gameblaster.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = gameblaster.cpp; sourceTree = ""; };
+ B33449CB2859D566006E6B3A /* vga_draw.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = vga_draw.cpp; sourceTree = ""; };
+ B33449CC2859D566006E6B3A /* dbopl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dbopl.h; sourceTree = ""; };
+ B33449CD2859D566006E6B3A /* sblaster.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = sblaster.cpp; sourceTree = ""; };
+ B33449CE2859D566006E6B3A /* tandy_sound.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = tandy_sound.cpp; sourceTree = ""; };
+ B33449CF2859D566006E6B3A /* pci_devices.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pci_devices.h; sourceTree = ""; };
+ B33449D02859D566006E6B3A /* vga_gfx.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = vga_gfx.cpp; sourceTree = ""; };
+ B33449D12859D566006E6B3A /* disney.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = disney.cpp; sourceTree = ""; };
+ B33449D22859D566006E6B3A /* vga_attr.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = vga_attr.cpp; sourceTree = ""; };
+ B33449D32859D566006E6B3A /* vga_xga.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = vga_xga.cpp; sourceTree = ""; };
+ B33449D42859D566006E6B3A /* iohandler.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = iohandler.cpp; sourceTree = ""; };
+ B33449D52859D566006E6B3A /* vga_tseng.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = vga_tseng.cpp; sourceTree = ""; };
+ B33449D62859D566006E6B3A /* adlib.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = adlib.cpp; sourceTree = ""; };
+ B33449D72859D566006E6B3A /* cmos.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = cmos.cpp; sourceTree = ""; };
+ B33449D82859D566006E6B3A /* nukedopl3.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = nukedopl3.cpp; sourceTree = ""; };
+ B33449D92859D566006E6B3A /* vga_dac.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = vga_dac.cpp; sourceTree = ""; };
+ B33449DA2859D566006E6B3A /* pcspeaker.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = pcspeaker.cpp; sourceTree = ""; };
+ B33449DB2859D566006E6B3A /* nukedopl3.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = nukedopl3.h; sourceTree = ""; };
+ B33449DC2859D566006E6B3A /* vga_crtc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = vga_crtc.cpp; sourceTree = ""; };
+ B33449DD2859D566006E6B3A /* dbopl.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dbopl.cpp; sourceTree = ""; };
+ B33449DF2859D566006E6B3A /* serialport.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialport.cpp; sourceTree = ""; };
+ B33449E02859D566006E6B3A /* misc_util.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = misc_util.h; sourceTree = ""; };
+ B33449E12859D566006E6B3A /* directserial.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = directserial.h; sourceTree = ""; };
+ B33449E22859D566006E6B3A /* softmodem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = softmodem.h; sourceTree = ""; };
+ B33449E32859D566006E6B3A /* serialdummy.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = serialdummy.h; sourceTree = ""; };
+ B33449E42859D566006E6B3A /* serialdummy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialdummy.cpp; sourceTree = ""; };
+ B33449E52859D566006E6B3A /* nullmodem.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = nullmodem.h; sourceTree = ""; };
+ B33449E62859D566006E6B3A /* libserial.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = libserial.h; sourceTree = ""; };
+ B33449E72859D566006E6B3A /* vga_paradise.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = vga_paradise.cpp; sourceTree = ""; };
+ B33449E82859D566006E6B3A /* mpu401.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = mpu401.cpp; sourceTree = ""; };
+ B33449E92859D566006E6B3A /* keyboard.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = keyboard.cpp; sourceTree = ""; };
+ B33449EA2859D566006E6B3A /* joystick.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = joystick.cpp; sourceTree = ""; };
+ B33449EB2859D566006E6B3A /* vga.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = vga.cpp; sourceTree = ""; };
+ B33449EC2859D566006E6B3A /* vga_misc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = vga_misc.cpp; sourceTree = ""; };
+ B33449ED2859D566006E6B3A /* vga_s3.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = vga_s3.cpp; sourceTree = ""; };
+ B33449EE2859D566006E6B3A /* vga_seq.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = vga_seq.cpp; sourceTree = ""; };
+ B33449F02859D566006E6B3A /* drive_cache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = drive_cache.cpp; sourceTree = ""; };
+ B33449F12859D566006E6B3A /* dos_files.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dos_files.cpp; sourceTree = ""; };
+ B33449F22859D566006E6B3A /* dos_tables.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dos_tables.cpp; sourceTree = ""; };
+ B33449F32859D566006E6B3A /* dos_ioctl.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dos_ioctl.cpp; sourceTree = ""; };
+ B33449F42859D566006E6B3A /* cdrom.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = cdrom.cpp; sourceTree = ""; };
+ B33449F52859D566006E6B3A /* cdrom_image.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = cdrom_image.cpp; sourceTree = ""; };
+ B33449F62859D566006E6B3A /* drive_overlay.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = drive_overlay.cpp; sourceTree = ""; };
+ B33449F72859D566006E6B3A /* drive_zip.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = drive_zip.cpp; sourceTree = ""; };
+ B33449F82859D566006E6B3A /* stb_vorbis.inl */ = {isa = PBXFileReference; lastKnownFileType = text; path = stb_vorbis.inl; sourceTree = ""; };
+ B33449F92859D566006E6B3A /* dos_mscdex.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dos_mscdex.cpp; sourceTree = ""; };
+ B33449FA2859D566006E6B3A /* dos_keyboard_layout.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dos_keyboard_layout.cpp; sourceTree = ""; };
+ B33449FB2859D566006E6B3A /* dos_programs.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dos_programs.cpp; sourceTree = ""; };
+ B33449FC2859D566006E6B3A /* dos_keyboard_layout_data.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dos_keyboard_layout_data.h; sourceTree = ""; };
+ B33449FD2859D566006E6B3A /* dos_memory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dos_memory.cpp; sourceTree = ""; };
+ B33449FE2859D566006E6B3A /* drive_virtual.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = drive_virtual.cpp; sourceTree = ""; };
+ B33449FF2859D566006E6B3A /* dos_codepages.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dos_codepages.h; sourceTree = ""; };
+ B3344A002859D566006E6B3A /* drive_union.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = drive_union.cpp; sourceTree = ""; };
+ B3344A012859D566006E6B3A /* dos_classes.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dos_classes.cpp; sourceTree = ""; };
+ B3344A022859D566006E6B3A /* cdrom.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cdrom.h; sourceTree = ""; };
+ B3344A032859D566006E6B3A /* dev_con.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dev_con.h; sourceTree = ""; };
+ B3344A042859D566006E6B3A /* drives.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = drives.h; sourceTree = ""; };
+ B3344A052859D566006E6B3A /* drives.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = drives.cpp; sourceTree = ""; };
+ B3344A062859D566006E6B3A /* dos_execute.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dos_execute.cpp; sourceTree = ""; };
+ B3344A072859D566006E6B3A /* dos_devices.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dos_devices.cpp; sourceTree = ""; };
+ B3344A082859D566006E6B3A /* scsidefs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = scsidefs.h; sourceTree = ""; };
+ B3344A092859D566006E6B3A /* drive_memory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = drive_memory.cpp; sourceTree = ""; };
+ B3344A0A2859D566006E6B3A /* dos.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dos.cpp; sourceTree = ""; };
+ B3344A0B2859D566006E6B3A /* drive_iso.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = drive_iso.cpp; sourceTree = ""; };
+ B3344A0C2859D566006E6B3A /* dos_misc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dos_misc.cpp; sourceTree = ""; };
+ B3344A0D2859D566006E6B3A /* drive_fat.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = drive_fat.cpp; sourceTree = ""; };
+ B3344A0E2859D566006E6B3A /* wnaspi32.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = wnaspi32.h; sourceTree = ""; };
+ B3344A0F2859D566006E6B3A /* drive_local.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = drive_local.cpp; sourceTree = ""; };
+ B3344A112859D566006E6B3A /* flags.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = flags.cpp; sourceTree = ""; };
+ B3344A132859D566006E6B3A /* risc_x86.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = risc_x86.h; sourceTree = ""; };
+ B3344A142859D566006E6B3A /* dyn_fpu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dyn_fpu.h; sourceTree = ""; };
+ B3344A152859D566006E6B3A /* decoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = decoder.h; sourceTree = ""; };
+ B3344A162859D566006E6B3A /* dyn_fpu_dh.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dyn_fpu_dh.h; sourceTree = ""; };
+ B3344A172859D566006E6B3A /* helpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = helpers.h; sourceTree = ""; };
+ B3344A182859D566006E6B3A /* risc_x64.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = risc_x64.h; sourceTree = ""; };
+ B3344A192859D566006E6B3A /* string.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = string.h; sourceTree = ""; };
+ B3344A1A2859D566006E6B3A /* core_normal.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = core_normal.cpp; sourceTree = ""; };
+ B3344A1B2859D566006E6B3A /* modrm.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = modrm.h; sourceTree = ""; };
+ B3344A1C2859D566006E6B3A /* callback.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = callback.cpp; sourceTree = ""; };
+ B3344A1D2859D566006E6B3A /* dyn_cache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dyn_cache.h; sourceTree = ""; };
+ B3344A1E2859D566006E6B3A /* core_simple.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = core_simple.cpp; sourceTree = ""; };
+ B3344A1F2859D566006E6B3A /* paging.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = paging.cpp; sourceTree = ""; };
+ B3344A202859D566006E6B3A /* modrm.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = modrm.cpp; sourceTree = ""; };
+ B3344A212859D566006E6B3A /* core_dynrec.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = core_dynrec.cpp; sourceTree = ""; };
+ B3344A232859D566006E6B3A /* loadwrite.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = loadwrite.h; sourceTree = ""; };
+ B3344A242859D566006E6B3A /* ea_lookup.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ea_lookup.h; sourceTree = ""; };
+ B3344A252859D566006E6B3A /* op.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = op.h; sourceTree = ""; };
+ B3344A262859D566006E6B3A /* load.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = load.h; sourceTree = ""; };
+ B3344A272859D566006E6B3A /* save.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = save.h; sourceTree = ""; };
+ B3344A282859D566006E6B3A /* optable.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = optable.h; sourceTree = ""; };
+ B3344A292859D566006E6B3A /* string.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = string.h; sourceTree = ""; };
+ B3344A2A2859D566006E6B3A /* support.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = support.h; sourceTree = ""; };
+ B3344A2B2859D566006E6B3A /* core_prefetch.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = core_prefetch.cpp; sourceTree = ""; };
+ B3344A2C2859D566006E6B3A /* lazyflags.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = lazyflags.h; sourceTree = ""; };
+ B3344A2D2859D566006E6B3A /* instructions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = instructions.h; sourceTree = ""; };
+ B3344A2F2859D566006E6B3A /* prefix_none.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = prefix_none.h; sourceTree = ""; };
+ B3344A302859D566006E6B3A /* prefix_66.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = prefix_66.h; sourceTree = ""; };
+ B3344A312859D566006E6B3A /* table_ea.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = table_ea.h; sourceTree = ""; };
+ B3344A322859D566006E6B3A /* prefix_0f.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = prefix_0f.h; sourceTree = ""; };
+ B3344A332859D566006E6B3A /* prefix_66_0f.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = prefix_66_0f.h; sourceTree = ""; };
+ B3344A342859D566006E6B3A /* helpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = helpers.h; sourceTree = ""; };
+ B3344A352859D566006E6B3A /* string.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = string.h; sourceTree = ""; };
+ B3344A362859D566006E6B3A /* support.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = support.h; sourceTree = ""; };
+ B3344A372859D566006E6B3A /* core_dyn_x86.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = core_dyn_x86.cpp; sourceTree = ""; };
+ B3344A382859D566006E6B3A /* cpu.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = cpu.cpp; sourceTree = ""; };
+ B3344A392859D566006E6B3A /* core_full.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = core_full.cpp; sourceTree = ""; };
+ B3344A3B2859D566006E6B3A /* risc_armv4le-o3.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "risc_armv4le-o3.h"; sourceTree = ""; };
+ B3344A3C2859D566006E6B3A /* risc_armv4le-thumb-iw.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "risc_armv4le-thumb-iw.h"; sourceTree = ""; };
+ B3344A3D2859D566006E6B3A /* risc_x86.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = risc_x86.h; sourceTree = ""; };
+ B3344A3E2859D566006E6B3A /* dyn_fpu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dyn_fpu.h; sourceTree = ""; };
+ B3344A3F2859D566006E6B3A /* operators.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = operators.h; sourceTree = ""; };
+ B3344A402859D566006E6B3A /* risc_armv4le-thumb-niw.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "risc_armv4le-thumb-niw.h"; sourceTree = ""; };
+ B3344A412859D566006E6B3A /* decoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = decoder.h; sourceTree = ""; };
+ B3344A422859D566006E6B3A /* risc_mipsel32.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = risc_mipsel32.h; sourceTree = ""; };
+ B3344A432859D566006E6B3A /* risc_armv8le.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = risc_armv8le.h; sourceTree = ""; };
+ B3344A442859D566006E6B3A /* risc_armv4le.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = risc_armv4le.h; sourceTree = ""; };
+ B3344A452859D566006E6B3A /* risc_armv4le-thumb.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "risc_armv4le-thumb.h"; sourceTree = ""; };
+ B3344A462859D566006E6B3A /* risc_armv4le-common.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "risc_armv4le-common.h"; sourceTree = ""; };
+ B3344A472859D566006E6B3A /* decoder_basic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = decoder_basic.h; sourceTree = ""; };
+ B3344A482859D566006E6B3A /* decoder_opcodes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = decoder_opcodes.h; sourceTree = ""; };
+ B3344A492859D566006E6B3A /* risc_x64.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = risc_x64.h; sourceTree = ""; };
+ B3344A4A2859D566006E6B3A /* risc_ppc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = risc_ppc.h; sourceTree = ""; };
+ B3344A4C2859D566006E6B3A /* shell_batch.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = shell_batch.cpp; sourceTree = "