diff --git a/Mednafen/English.lproj/InfoPlist.strings b/Mednafen/English.lproj/InfoPlist.strings
new file mode 100644
index 0000000000..5e45963c38
Binary files /dev/null and b/Mednafen/English.lproj/InfoPlist.strings differ
diff --git a/Mednafen/Info.plist b/Mednafen/Info.plist
new file mode 100644
index 0000000000..3ead16707b
--- /dev/null
+++ b/Mednafen/Info.plist
@@ -0,0 +1,182 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ English
+ CFBundleExecutable
+ ${EXECUTABLE_NAME}
+ CFBundleIconFile
+ Mednafen
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ ${PRODUCT_NAME}
+ CFBundlePackageType
+ BNDL
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 0.9.38.7.1
+ NSPrincipalClass
+ OEGameCoreController
+ OEGameCoreClass
+ MednafenGameCore
+ OEGameCoreOptions
+
+ openemu.system.lynx
+
+ OEGameCoreRequiresFiles
+
+ OEGameCoreRewindBufferSeconds
+ 60
+ OEGameCoreRewindInterval
+ 0
+ OEGameCoreSupportsRewinding
+
+ OERequiredFiles
+
+
+ Description
+ Lynx boot ROM
+ MD5
+ fcd403db69f54290b51035d82f835e7b
+ Name
+ lynxboot.img
+ Size
+ 512
+
+
+
+ openemu.system.pce
+
+ OEGameCoreRewindBufferSeconds
+ 60
+ OEGameCoreRewindInterval
+ 0
+ OEGameCoreSupportsRewinding
+
+
+ openemu.system.pcecd
+
+ OEGameCoreRequiresFiles
+
+ OEGameCoreRewindBufferSeconds
+ 60
+ OEGameCoreRewindInterval
+ 0
+ OEGameCoreSupportsRewinding
+
+ OERequiredFiles
+
+
+ Description
+ TurboGrafx-CD/PC Engine CD BIOS
+ MD5
+ ff1a674273fe3540ccef576376407d1d
+ Name
+ syscard3.pce
+ Size
+ 262656
+
+
+
+ openemu.system.pcfx
+
+ OEGameCoreRequiresFiles
+
+ OERequiredFiles
+
+
+ Description
+ PC-FX BIOS
+ MD5
+ 08e36edbea28a017f79f8d4f7ff9b6d7
+ Name
+ pcfx.rom
+ Size
+ 1048576
+
+
+
+ openemu.system.psx
+
+ OEGameCoreRequiresFiles
+
+ OEGameCoreSupportsMultipleDiscs
+
+ OERequiredFiles
+
+
+ Description
+ PlayStation (JP) SCPH-5500 BIOS
+ MD5
+ 8dd7d5296a650fac7319bce665a6a53c
+ Name
+ scph5500.bin
+ Size
+ 524288
+
+
+ Description
+ PlayStation (NA) SCPH-5501 BIOS
+ MD5
+ 490f666e1afb15b7362b406ed1cea246
+ Name
+ scph5501.bin
+ Size
+ 524288
+
+
+ Description
+ PlayStation (EU) SCPH-5502 BIOS
+ MD5
+ 32736f17079d0b2b7024407c39bd3050
+ Name
+ scph5502.bin
+ Size
+ 524288
+
+
+
+ openemu.system.vb
+
+ OEGameCoreRewindBufferSeconds
+ 60
+ OEGameCoreRewindInterval
+ 0
+ OEGameCoreSupportsRewinding
+
+
+ openemu.system.ws
+
+ OEGameCoreRewindBufferSeconds
+ 60
+ OEGameCoreRewindInterval
+ 0
+ OEGameCoreSupportsRewinding
+
+
+
+ OEGameCorePlayerCount
+ 2
+ OEProjectURL
+ http://mednafen.sourceforge.net/
+ OESystemIdentifiers
+
+ openemu.system.lynx
+ openemu.system.pce
+ openemu.system.pcecd
+ openemu.system.pcfx
+ openemu.system.psx
+ openemu.system.vb
+ openemu.system.ws
+
+ SUEnableAutomaticChecks
+ 1
+ SUFeedURL
+ https://raw.github.com/OpenEmu/OpenEmu-Update/master/mednafen_appcast.xml
+
+
diff --git a/Mednafen/Mednafen.icns b/Mednafen/Mednafen.icns
new file mode 100644
index 0000000000..af8627be5f
Binary files /dev/null and b/Mednafen/Mednafen.icns differ
diff --git a/Mednafen/MednafenGameCore.h b/Mednafen/MednafenGameCore.h
new file mode 100644
index 0000000000..e66ae458ab
--- /dev/null
+++ b/Mednafen/MednafenGameCore.h
@@ -0,0 +1,202 @@
+/*
+ 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
+
+@class OERingBuffer;
+
+typedef NS_ENUM(NSInteger, PVPSXButton)
+{
+ PVPSXButtonUp,
+ PVPSXButtonDown,
+ PVPSXButtonLeft,
+ PVPSXButtonRight,
+ PVPSXButtonTriangle,
+ PVPSXButtonCircle,
+ PVPSXButtonCross,
+ PVPSXButtonSquare,
+ PVPSXButtonL1,
+ PVPSXButtonL2,
+ PVPSXButtonL3,
+ PVPSXButtonR1,
+ PVPSXButtonR2,
+ PVPSXButtonR3,
+ PVPSXButtonStart,
+ PVPSXButtonSelect,
+ PVPSXButtonAnalogMode,
+ OEPSXLeftAnalogUp,
+ OEPSXLeftAnalogDown,
+ OEPSXLeftAnalogLeft,
+ OEPSXLeftAnalogRight,
+ OEPSXRightAnalogUp,
+ OEPSXRightAnalogDown,
+ OEPSXRightAnalogLeft,
+ OEPSXRightAnalogRight,
+ PVPSXButtonCount
+};
+
+typedef NS_ENUM(NSInteger, OEWSButton) {
+ OEWSButtonX1, // Up
+ OEWSButtonX3, // Down
+ OEWSButtonX4, // Left
+ OEWSButtonX2, // Right
+ OEWSButtonY1,
+ OEWSButtonY3,
+ OEWSButtonY4,
+ OEWSButtonY2,
+ OEWSButtonA,
+ OEWSButtonB,
+ OEWSButtonStart,
+ OEWSButtonSound,
+ OEWSButtonCount
+};
+
+typedef NS_ENUM(NSInteger, OEVBButton) {
+ OEVBButtonLeftUp,
+ OEVBButtonLeftDown,
+ OEVBButtonLeftLeft,
+ OEVBButtonLeftRight,
+ OEVBButtonRightUp,
+ OEVBButtonRightDown,
+ OEVBButtonRightLeft,
+ OEVBButtonRightRight,
+ OEVBButtonL,
+ OEVBButtonR,
+ OEVBButtonA,
+ OEVBButtonB,
+ OEVBButtonStart,
+ OEVBButtonSelect,
+ OEVBButtonCount
+};
+
+typedef NS_ENUM(NSInteger, OEPCEButton) {
+ OEPCEButtonUp,
+ OEPCEButtonDown,
+ OEPCEButtonLeft,
+ OEPCEButtonRight,
+ OEPCEButton1,
+ OEPCEButton2,
+ OEPCEButton3,
+ OEPCEButton4,
+ OEPCEButton5,
+ OEPCEButton6,
+ OEPCEButtonRun,
+ OEPCEButtonSelect,
+ OEPCEButtonMode,
+ OEPCEButtonCount
+};
+
+typedef NS_ENUM(NSInteger, OEPCFXButton) {
+ OEPCFXButtonUp,
+ OEPCFXButtonDown,
+ OEPCFXButtonLeft,
+ OEPCFXButtonRight,
+ OEPCFXButton1,
+ OEPCFXButton2,
+ OEPCFXButton3,
+ OEPCFXButton4,
+ OEPCFXButton5,
+ OEPCFXButton6,
+ OEPCFXButtonRun,
+ OEPCFXButtonSelect,
+ OEPCFXButtonCount,
+};
+
+typedef NS_ENUM(NSInteger, OEPCECDButton) {
+ OEPCECDButtonUp,
+ OEPCECDButtonDown,
+ OEPCECDButtonLeft,
+ OEPCECDButtonRight,
+ OEPCECDButton1,
+ OEPCECDButton2,
+ OEPCECDButton3,
+ OEPCECDButton4,
+ OEPCECDButton5,
+ OEPCECDButton6,
+ OEPCECDButtonRun,
+ OEPCECDButtonSelect,
+ OEPCECDButtonMode,
+ OEPCECDButtonCount
+};
+
+typedef NS_ENUM(NSInteger, OELynxButton) {
+ OELynxButtonUp,
+ OELynxButtonDown,
+ OELynxButtonLeft,
+ OELynxButtonRight,
+ OELynxButtonA,
+ OELynxButtonB,
+ OELynxButtonOption1,
+ OELynxButtonOption2,
+ OELynxButtonCount
+};
+
+typedef NS_ENUM(NSInteger, OENGPButton) {
+ OENGPButtonUp,
+ OENGPButtonDown,
+ OENGPButtonLeft,
+ OENGPButtonRight,
+ OENGPButtonA,
+ OENGPButtonB,
+ OENGPButtonOption,
+ OENGPButtonCount,
+};
+
+__attribute__((visibility("default")))
+@interface MednafenGameCore : PVEmulatorCore
+
+// Atari Lynx
+- (oneway void)didPushLynxButton:(OELynxButton)button forPlayer:(NSUInteger)player;
+- (oneway void)didReleaseLynxButton:(OELynxButton)button forPlayer:(NSUInteger)player;
+
+// Neo Geo Pocket + Color
+- (oneway void)didPushNGPButton:(OENGPButton)button forPlayer:(NSUInteger)player;
+- (oneway void)didReleaseNGPButton:(OENGPButton)button forPlayer:(NSUInteger)player;
+
+// PC-*
+- (oneway void)didPushPCEButton:(OEPCEButton)button forPlayer:(NSUInteger)player;
+- (oneway void)didReleasePCEButton:(OEPCEButton)button forPlayer:(NSUInteger)player;
+- (oneway void)didPushPCECDButton:(OEPCECDButton)button forPlayer:(NSUInteger)player;
+- (oneway void)didReleasePCECDButton:(OEPCECDButton)button forPlayer:(NSUInteger)player;
+- (oneway void)didPushPCFXButton:(OEPCFXButton)button forPlayer:(NSUInteger)player;
+- (oneway void)didReleasePCFXButton:(OEPCFXButton)button forPlayer:(NSUInteger)player;
+
+// PSX
+- (oneway void)didPushPSXButton:(PVPSXButton)button forPlayer:(NSUInteger)player;
+- (oneway void)didReleasePSXButton:(PVPSXButton)button forPlayer:(NSUInteger)player;
+- (oneway void)didMovePSXJoystickDirection:(PVPSXButton)button withValue:(CGFloat)value forPlayer:(NSUInteger)player;
+
+// Virtual Boy
+- (oneway void)didPushVBButton:(OEVBButton)button forPlayer:(NSUInteger)player;
+- (oneway void)didReleaseVBButton:(OEVBButton)button forPlayer:(NSUInteger)player;
+
+// WonderSwan
+- (oneway void)didPushWSButton:(OEWSButton)button forPlayer:(NSUInteger)player;
+- (oneway void)didReleaseWSButton:(OEWSButton)button forPlayer:(NSUInteger)player;
+
+@end
diff --git a/Mednafen/MednafenGameCore.mm b/Mednafen/MednafenGameCore.mm
new file mode 100644
index 0000000000..56ba67481e
--- /dev/null
+++ b/Mednafen/MednafenGameCore.mm
@@ -0,0 +1,2156 @@
+/*
+ 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.
+ */
+
+#include "mednafen.h"
+#include "settings-driver.h"
+#include "state-driver.h"
+#include "mednafen-driver.h"
+#include "MemoryStream.h"
+
+#import "MednafenGameCore.h"
+#import
+#import
+#import
+
+#import
+
+#define GET_CURRENT_OR_RETURN(...) __strong __typeof__(_current) current = _current; if(current == nil) return __VA_ARGS__;
+
+typedef struct OEIntPoint {
+ int x;
+ int y;
+} OEIntPoint;
+
+typedef struct OEIntSize {
+ int width;
+ int height;
+} OEIntSize;
+
+typedef struct OEIntRect {
+ OEIntPoint origin;
+ OEIntSize size;
+} OEIntRect;
+
+static inline OEIntSize OEIntSizeMake(int width, int height)
+{
+ return (OEIntSize){ width, height };
+}
+static inline BOOL OEIntSizeEqualToSize(OEIntSize size1, OEIntSize size2)
+{
+ return size1.width == size2.width && size1.height == size2.height;
+}
+static inline BOOL OEIntSizeIsEmpty(OEIntSize size)
+{
+ return size.width == 0 || size.height == 0;
+}
+
+static inline OEIntRect OEIntRectMake(int x, int y, int width, int height)
+{
+ return (OEIntRect){ (OEIntPoint){ x, y }, (OEIntSize){ width, height } };
+}
+
+static MDFNGI *game;
+static MDFN_Surface *surf;
+
+namespace MDFN_IEN_VB
+{
+ extern void VIP_SetParallaxDisable(bool disabled);
+ extern void VIP_SetAnaglyphColors(uint32 lcolor, uint32 rcolor);
+ int mednafenCurrentDisplayMode = 1;
+}
+
+typedef enum MednaSystem {lynx, neogeo, pce, pcfx, psx, vb, wswan };
+
+@interface MednafenGameCore ()
+{
+ uint32_t *inputBuffer[8];
+ MednaSystem systemType;
+ int videoWidth, videoHeight;
+ int videoOffsetX, videoOffsetY;
+ int multiTapPlayerCount;
+ NSString *romName;
+ double sampleRate;
+ double masterClock;
+
+ NSString *mednafenCoreModule;
+ NSTimeInterval mednafenCoreTiming;
+ OEIntSize mednafenCoreAspect;
+ NSUInteger maxDiscs;
+}
+
+@end
+
+static __weak MednafenGameCore *_current;
+
+@implementation MednafenGameCore
+
+-(uint32_t*) getInputBuffer:(int)bufferId
+{
+ return inputBuffer[bufferId];
+}
+
+static void mednafen_init(MednafenGameCore* current)
+{
+ //passing by parameter
+ //GET_CURRENT_OR_RETURN();
+
+ NSString* batterySavesDirectory = current.batterySavesPath;
+ NSString* biosPath = current.BIOSPath;
+
+ std::vector ext;
+ MDFNI_InitializeModules(ext);
+
+ std::vector settings;
+
+ //passing by parameter
+ //NSString *batterySavesDirectory = [self batterySavesPath];
+ //NSString *biosPath = current.biosDirectoryPath;
+
+ MDFNI_Initialize([biosPath UTF8String], settings);
+
+ // Set bios/system file and memcard save paths
+ MDFNI_SetSetting("pce.cdbios", [[[biosPath stringByAppendingPathComponent:@"syscard3"] stringByAppendingPathExtension:@"pce"] UTF8String]); // PCE CD BIOS
+ MDFNI_SetSetting("pcfx.bios", [[[biosPath stringByAppendingPathComponent:@"pcfx"] stringByAppendingPathExtension:@"rom"] UTF8String]); // PCFX BIOS
+ MDFNI_SetSetting("psx.bios_jp", [[[biosPath stringByAppendingPathComponent:@"scph5500"] stringByAppendingPathExtension:@"bin"] UTF8String]); // JP SCPH-5500 BIOS
+ MDFNI_SetSetting("psx.bios_na", [[[biosPath stringByAppendingPathComponent:@"scph5501"] stringByAppendingPathExtension:@"bin"] UTF8String]); // NA SCPH-5501 BIOS
+ MDFNI_SetSetting("psx.bios_eu", [[[biosPath stringByAppendingPathComponent:@"scph5502"] stringByAppendingPathExtension:@"bin"] UTF8String]); // EU SCPH-5502 BIOS
+ MDFNI_SetSetting("filesys.path_sav", [batterySavesDirectory UTF8String]); // Memcards
+
+ // VB defaults. dox http://mednafen.sourceforge.net/documentation/09x/vb.html
+ MDFNI_SetSetting("vb.disable_parallax", "1"); // Disable parallax for BG and OBJ rendering
+ MDFNI_SetSetting("vb.anaglyph.preset", "disabled"); // Disable anaglyph preset
+ MDFNI_SetSetting("vb.anaglyph.lcolor", "0xFF0000"); // Anaglyph l color
+ MDFNI_SetSetting("vb.anaglyph.rcolor", "0x000000"); // Anaglyph r color
+ //MDFNI_SetSetting("vb.allow_draw_skip", "1"); // Allow draw skipping
+ //MDFNI_SetSetting("vb.instant_display_hack", "1"); // Display latency reduction hack
+
+ MDFNI_SetSetting("pce.slstart", "0"); // PCE: First rendered scanline
+ MDFNI_SetSetting("pce.slend", "239"); // PCE: Last rendered scanline
+
+ MDFNI_SetSetting("psx.h_overscan", "0"); // Remove PSX overscan
+
+ // PlayStation Multitap supported games (incomplete list)
+ NSDictionary *multiTapGames =
+ @{
+ @"SLES-02339" : @3, // Arcade Party Pak (Europe, Australia)
+ @"SLUS-00952" : @3, // Arcade Party Pak (USA)
+ @"SLES-02537" : @3, // Bishi Bashi Special (Europe)
+ @"SLPM-86123" : @3, // Bishi Bashi Special (Japan)
+ @"SLPM-86539" : @3, // Bishi Bashi Special 3: Step Champ (Japan)
+ @"SLPS-01701" : @3, // Capcom Generation - Dai 4 Shuu Kokou no Eiyuu (Japan)
+ @"SLPS-01567" : @3, // Captain Commando (Japan)
+ @"SLUS-00682" : @3, // Jeopardy! (USA)
+ @"SLUS-01173" : @3, // Jeopardy! 2nd Edition (USA)
+ @"SLES-03752" : @3, // Quiz Show (Italy) (Disc 1)
+ @"SLES-13752" : @3, // Quiz Show (Italy) (Disc 2)
+ @"SLES-02849" : @3, // Rampage - Through Time (Europe) (En,Fr,De)
+ @"SLUS-01065" : @3, // Rampage - Through Time (USA)
+ @"SLES-02021" : @3, // Rampage 2 - Universal Tour (Europe)
+ @"SLUS-00742" : @3, // Rampage 2 - Universal Tour (USA)
+ @"SLUS-01174" : @3, // Wheel of Fortune - 2nd Edition (USA)
+ @"SLES-03499" : @3, // You Don't Know Jack (Germany)
+ @"SLUS-00716" : @3, // You Don't Know Jack (USA) (Disc 1)
+ @"SLUS-00762" : @3, // You Don't Know Jack (USA) (Disc 2)
+ @"SLUS-01194" : @3, // You Don't Know Jack - Mock 2 (USA)
+ @"SLES-00015" : @4, // Actua Golf (Europe) (En,Fr,De)
+ @"SLPS-00298" : @4, // Actua Golf (Japan)
+ @"SLUS-00198" : @4, // VR Golf '97 (USA) (En,Fr)
+ @"SLES-00044" : @4, // Actua Golf 2 (Europe)
+ @"SLUS-00636" : @4, // FOX Sports Golf '99 (USA)
+ @"SLES-01042" : @4, // Actua Golf 3 (Europe)
+ @"SLES-00188" : @4, // Actua Ice Hockey (Europe) (En,Fr,De,Sv,Fi)
+ @"SLPM-86078" : @4, // Actua Ice Hockey (Japan)
+ @"SLES-01226" : @4, // Actua Ice Hockey 2 (Europe)
+ @"SLES-00021" : @4, // Actua Soccer 2 (Europe) (En,Fr)
+ @"SLES-01029" : @4, // Actua Soccer 2 (Germany) (En,De)
+ @"SLES-01028" : @4, // Actua Soccer 2 (Italy)
+ @"SLES-00265" : @4, // Actua Tennis (Europe)
+ @"SLES-01396" : @4, // Actua Tennis (Europe) (Fr,De)
+ @"SLES-00189" : @4, // Adidas Power Soccer (Europe) (En,Fr,De,Es,It)
+ @"SCUS-94502" : @4, // Adidas Power Soccer (USA)
+ @"SLES-00857" : @4, // Adidas Power Soccer 2 (Europe) (En,Fr,De,Es,It,Nl)
+ @"SLES-00270" : @4, // Adidas Power Soccer International '97 (Europe) (En,Fr,De,Es,It,Nl)
+ @"SLES-01239" : @4, // Adidas Power Soccer 98 (Europe) (En,Fr,De,Es,It,Nl)
+ @"SLUS-00547" : @4, // Adidas Power Soccer 98 (USA)
+ @"SLES-03963" : @4, // All Star Tennis (Europe)
+ @"SLPS-02228" : @4, // Simple 1500 Series Vol. 26 - The Tennis (Japan)
+ @"SLUS-01348" : @4, // Tennis (USA)
+ @"SLES-01433" : @4, // All Star Tennis '99 (Europe) (En,Fr,De,Es,It)
+ @"SLES-02764" : @4, // All Star Tennis 2000 (Europe) (En,De,Es,It)
+ @"SLES-02765" : @4, // All Star Tennis 2000 (France)
+ @"SCES-00263" : @4, // Namco Tennis Smash Court (Europe)
+ @"SLPS-00450" : @4, // Smash Court (Japan)
+ @"SCES-01833" : @4, // Anna Kournikova's Smash Court Tennis (Europe)
+ @"SLPS-01693" : @4, // Smash Court 2 (Japan)
+ @"SLPS-03001" : @4, // Smash Court 3 (Japan)
+ @"SLES-03579" : @4, // Junior Sports Football (Europe)
+ @"SLES-03581" : @4, // Junior Sports Fussball (Germany)
+ @"SLUS-01094" : @4, // Backyard Soccer (USA)
+ @"SLES-03210" : @4, // Hunter, The (Europe)
+ @"SLPM-86400" : @4, // SuperLite 1500 Series - Battle Sugoroku the Hunter - A.R.0062 (Japan)
+ @"SLUS-01335" : @4, // Battle Hunter (USA)
+ @"SLES-00476" : @4, // Blast Chamber (Europe) (En,Fr,De,Es,It)
+ @"SLPS-00622" : @4, // Kyuu Bakukku (Japan)
+ @"SLUS-00219" : @4, // Blast Chamber (USA)
+ @"SLES-00845" : @4, // Blaze & Blade - Eternal Quest (Europe)
+ @"SLES-01274" : @4, // Blaze & Blade - Eternal Quest (Germany)
+ @"SLPS-01209" : @4, // Blaze & Blade - Eternal Quest (Japan)
+ @"SLPS-01576" : @4, // Blaze & Blade Busters (Japan)
+ @"SCES-01443" : @4, // Blood Lines (Europe) (En,Fr,De,Es,It)
+ @"SLPS-03002" : @4, // Bomberman Land (Japan) (v1.0) / (v1.1) / (v1.2)
+ @"SLES-00258" : @4, // Break Point (Europe) (En,Fr)
+ @"SLES-02854" : @4, // Break Out (Europe) (En,Fr,De,It)
+ @"SLUS-01170" : @4, // Break Out (USA)
+ @"SLES-00759" : @4, // Brian Lara Cricket (Europe)
+ @"SLES-01486" : @4, // Caesars Palace II (Europe)
+ @"SLES-02476" : @4, // Caesars Palace 2000 - Millennium Gold Edition (Europe)
+ @"SLUS-01089" : @4, // Caesars Palace 2000 - Millennium Gold Edition (USA)
+ @"SLES-03206" : @4, // Card Shark (Europe)
+ @"SLPS-02225" : @4, // Trump Shiyouyo! (Japan) (v1.0)
+ @"SLPS-02612" : @4, // Trump Shiyouyo! (Japan) (v1.1)
+ @"SLES-02825" : @4, // Catan - Die erste Insel (Germany)
+ @"SLUS-00886" : @4, // Chessmaster II (USA)
+ @"SLES-00753" : @4, // Circuit Breakers (Europe) (En,Fr,De,Es,It)
+ @"SLUS-00697" : @4, // Circuit Breakers (USA)
+ @"SLUS-00196" : @4, // College Slam (USA)
+ @"SCES-02834" : @4, // Crash Bash (Europe) (En,Fr,De,Es,It)
+ @"SCPS-10140" : @4, // Crash Bandicoot Carnival (Japan)
+ @"SCUS-94570" : @4, // Crash Bash (USA)
+ @"SCES-02105" : @4, // CTR - Crash Team Racing (Europe) (En,Fr,De,Es,It,Nl) (EDC) / (No EDC)
+ @"SCPS-10118" : @4, // Crash Bandicoot Racing (Japan)
+ @"SCUS-94426" : @4, // CTR - Crash Team Racing (USA)
+ @"SLES-02371" : @4, // CyberTiger (Australia)
+ @"SLES-02370" : @4, // CyberTiger (Europe) (En,Fr,De,Es,Sv)
+ @"SLUS-01004" : @4, // CyberTiger (USA)
+ @"SLES-03488" : @4, // David Beckham Soccer (Europe)
+ @"SLES-03682" : @4, // David Beckham Soccer (Europe) (Fr,De,Es,It)
+ @"SLUS-01455" : @4, // David Beckham Soccer (USA)
+ @"SLES-00096" : @4, // Davis Cup Complete Tennis (Europe)
+ @"SCES-03705" : @4, // Disney's Party Time with Winnie the Pooh (Europe)
+ @"SCES-03744" : @4, // Disney's Winnie l'Ourson - C'est la récré! (France)
+ @"SCES-03745" : @4, // Disney's Party mit Winnie Puuh (Germany)
+ @"SCES-03749" : @4, // Disney Pooh e Tigro! E Qui la Festa (Italy)
+ @"SLPS-03460" : @4, // Pooh-San no Minna de Mori no Daikyosou! (Japan)
+ @"SCES-03746" : @4, // Disney's Spelen met Winnie de Poeh en zijn Vriendjes! (Netherlands)
+ @"SCES-03748" : @4, // Disney Ven a la Fiesta! con Winnie the Pooh (Spain)
+ @"SLUS-01437" : @4, // Disney's Pooh's Party Game - In Search of the Treasure (USA)
+ @"SLPS-00155" : @4, // DX Jinsei Game (Japan)
+ @"SLPS-00918" : @4, // DX Jinsei Game II (Japan) (v1.0) / (v1.1)
+ @"SLPS-02469" : @4, // DX Jinsei Game III (Japan)
+ @"SLPM-86963" : @4, // DX Jinsei Game IV (Japan)
+ @"SLPM-87187" : @4, // DX Jinsei Game V (Japan)
+ @"SLES-02823" : @4, // ECW Anarchy Rulz (Europe)
+ @"SLES-03069" : @4, // ECW Anarchy Rulz (Germany)
+ @"SLUS-01169" : @4, // ECW Anarchy Rulz (USA)
+ @"SLES-02535" : @4, // ECW Hardcore Revolution (Europe) (v1.0) / (v1.1)
+ @"SLES-02536" : @4, // ECW Hardcore Revolution (Germany) (v1.0) / (v1.1)
+ @"SLUS-01045" : @4, // ECW Hardcore Revolution (USA)
+ @"SLUS-01186" : @4, // ESPN MLS Gamenight (USA)
+ @"SLES-03082" : @4, // European Super League (Europe) (En,Fr,De,Es,It,Pt)
+ @"SLES-02142" : @4, // F.A. Premier League Stars, The (Europe)
+ @"SLES-02143" : @4, // Bundesliga Stars 2000 (Germany)
+ @"SLES-02702" : @4, // Primera Division Stars (Spain)
+ @"SLES-03063" : @4, // F.A. Premier League Stars 2001, The (Europe)
+ @"SLES-03064" : @4, // LNF Stars 2001 (France)
+ @"SLES-03065" : @4, // Bundesliga Stars 2001 (Germany)
+ @"SLES-00548" : @4, // Fantastic Four (Europe) (En,Fr,De,Es,It)
+ @"SLPS-01034" : @4, // Fantastic Four (Japan)
+ @"SLUS-00395" : @4, // Fantastic Four (USA)
+ @"SLPS-02065" : @4, // Fire Pro Wrestling G (Japan) (v1.0)
+ @"SLPS-02817" : @4, // Fire Pro Wrestling G (Japan) (v1.1)
+ @"SLES-00704" : @4, // Frogger (Europe) (En,Fr,De,Es,It)
+ @"SLPS-01399" : @4, // Frogger (Japan)
+ @"SLUS-00506" : @4, // Frogger (USA)
+ @"SLES-02853" : @4, // Frogger 2 - Swampy's Revenge (Europe) (En,Fr,De,It)
+ @"SLUS-01172" : @4, // Frogger 2 - Swampy's Revenge (USA)
+ @"SLES-01241" : @4, // Gekido - Urban Fighters (Europe) (En,Fr,De,Es,It)
+ @"SLUS-00970" : @4, // Gekido - Urban Fighters (USA)
+ @"SLPM-86761" : @4, // Simple 1500 Series Vol. 60 - The Table Hockey (Japan)
+ @"SLPS-03362" : @4, // Simple Character 2000 Series Vol. 05 - High School Kimengumi - The Table Hockey (Japan)
+ @"SLES-01041" : @4, // Hogs of War (Europe)
+ @"SLUS-01195" : @4, // Hogs of War (USA)
+ @"SCES-00983" : @4, // Everybody's Golf (Europe) (En,Fr,De,Es,It)
+ @"SCPS-10042" : @4, // Minna no Golf (Japan)
+ @"SCUS-94188" : @4, // Hot Shots Golf (USA)
+ @"SCES-02146" : @4, // Everybody's Golf 2 (Europe)
+ @"SCPS-10093" : @4, // Minna no Golf 2 (Japan) (v1.0)
+ @"SCUS-94476" : @4, // Hot Shots Golf 2 (USA)
+ @"SLES-03595" : @4, // Hot Wheels - Extreme Racing (Europe)
+ @"SLUS-01293" : @4, // Hot Wheels - Extreme Racing (USA)
+ @"SLPM-86651" : @4, // Hunter X Hunter - Maboroshi no Greed Island (Japan)
+ @"SLES-00309" : @4, // Hyper Tennis - Final Match (Europe)
+ @"SLES-00309" : @4, // Hyper Final Match Tennis (Japan)
+ @"SLES-02550" : @4, // International Superstar Soccer (Europe) (En,De)
+ @"SLES-03149" : @4, // International Superstar Soccer (Europe) (Fr,Es,It)
+ @"SLPM-86317" : @4, // Jikkyou J. League 1999 - Perfect Striker (Japan)
+ @"SLES-00511" : @4, // International Superstar Soccer Deluxe (Europe)
+ @"SLPM-86538" : @4, // J. League Jikkyou Winning Eleven 2000 (Japan)
+ @"SLPM-86668" : @4, // J. League Jikkyou Winning Eleven 2000 2nd (Japan)
+ @"SLPM-86835" : @4, // J. League Jikkyou Winning Eleven 2001 (Japan)
+ @"SLES-00333" : @4, // International Track & Field (Europe)
+ @"SLPM-86002" : @4, // Hyper Olympic in Atlanta (Japan)
+ @"SLUS-00238" : @4, // International Track & Field (USA)
+ @"SLES-02448" : @4, // International Track & Field 2 (Europe)
+ @"SLPM-86482" : @4, // Ganbare! Nippon! Olympic 2000 (Japan)
+ @"SLUS-00987" : @4, // International Track & Field 2000 (USA)
+ @"SLES-02424" : @4, // ISS Pro Evolution (Europe) (Es,It)
+ @"SLES-02095" : @4, // ISS Pro Evolution (Europe) (En,Fr,De) (EDC) / (No EDC)
+ @"SLPM-86291" : @4, // World Soccer Jikkyou Winning Eleven 4 (Japan) (v1.0) / (v1.1)
+ @"SLUS-01014" : @4, // ISS Pro Evolution (USA)
+ @"SLES-03321" : @4, // ISS Pro Evolution 2 (Europe) (En,Fr,De)
+ @"SLPM-86600" : @4, // World Soccer Jikkyou Winning Eleven 2000 - U-23 Medal e no Chousen (Japan)
+ @"SLPS-00832" : @4, // Iwatobi Penguin Rocky x Hopper (Japan)
+ @"SLPS-01283" : @4, // Iwatobi Penguin Rocky x Hopper 2 - Tantei Monogatari (Japan)
+ @"SLES-02572" : @4, // TOCA World Touring Cars (Europe) (En,Fr,De)
+ @"SLES-02573" : @4, // TOCA World Touring Cars (Europe) (Es,It)
+ @"SLPS-02852" : @4, // WTC World Touring Car Championship (Japan)
+ @"SLUS-01139" : @4, // Jarrett & Labonte Stock Car Racing (USA)
+ @"SLES-03328" : @4, // Jetracer (Europe) (En,Fr,De)
+ @"SLES-00377" : @4, // Jonah Lomu Rugby (Europe) (En,De,Es,It)
+ @"SLES-00611" : @4, // Jonah Lomu Rugby (France)
+ @"SLPS-01268" : @4, // Great Rugby Jikkyou '98 - World Cup e no Michi (Japan)
+ @"SLES-01061" : @4, // Kick Off World (Europe) (En,Fr)
+ @"SLES-01327" : @4, // Kick Off World (Europe) (Es,Nl)
+ @"SLES-01062" : @4, // Kick Off World (Germany)
+ @"SLES-01328" : @4, // Kick Off World (Greece)
+ @"SLES-01063" : @4, // Kick Off World Manager (Italy)
+ @"SCES-03922" : @4, // Klonoa - Beach Volleyball (Europe) (En,Fr,De,Es,It)
+ @"SLPS-03433" : @4, // Klonoa Beach Volley - Saikyou Team Ketteisen! (Japan)
+ @"SLUS-01125" : @4, // Kurt Warner's Arena Football Unleashed (USA)
+ @"SLPS-00686" : @4, // Love Game's - Wai Wai Tennis (Japan)
+ @"SLES-02272" : @4, // Yeh Yeh Tennis (Europe) (En,Fr,De)
+ @"SLPS-02983" : @4, // Love Game's - Wai Wai Tennis 2 (Japan)
+ @"SLPM-86899" : @4, // Love Game's - Wai Wai Tennis Plus (Japan)
+ @"SLES-01594" : @4, // Michael Owen's World League Soccer 99 (Europe) (En,Fr,It)
+ @"SLES-02499" : @4, // Midnight in Vegas (Europe) (En,Fr,De) (v1.0) / (v1.1)
+ @"SLUS-00836" : @4, // Vegas Games 2000 (USA)
+ @"SLES-03246" : @4, // Monster Racer (Europe) (En,Fr,De,Es,It,Pt)
+ @"SLES-03813" : @4, // Monte Carlo Games Compendium (Europe) (Disc 1)
+ @"SLES-13813" : @4, // Monte Carlo Games Compendium (Europe) (Disc 2)
+ @"SLES-00945" : @4, // Monopoly (Europe) (En,Fr,De,Es,Nl) (v1.0) / (v1.1)
+ @"SLPS-00741" : @4, // Monopoly (Japan)
+ @"SLES-00310" : @4, // Motor Mash (Europe) (En,Fr,De)
+ @"SCES-03085" : @4, // Ms. Pac-Man Maze Madness (Europe) (En,Fr,De,Es,It)
+ @"SLPS-03000" : @4, // Ms. Pac-Man Maze Madness (Japan)
+ @"SLUS-01018" : @4, // Ms. Pac-Man Maze Madness (USA) (v1.0) / (v1.1)
+ @"SLES-02224" : @4, // Music 2000 (Europe) (En,Fr,De,Es,It)
+ @"SLUS-01006" : @4, // MTV Music Generator (USA)
+ @"SLES-00999" : @4, // Nagano Winter Olympics '98 (Europe)
+ @"SLPM-86056" : @4, // Hyper Olympic in Nagano (Japan)
+ @"SLUS-00591" : @4, // Nagano Winter Olympics '98 (USA)
+ @"SLUS-00329" : @4, // NBA Hangtime (USA)
+ @"SLES-00529" : @4, // NBA Jam Extreme (Europe)
+ @"SLPS-00699" : @4, // NBA Jam Extreme (Japan)
+ @"SLUS-00388" : @4, // NBA Jam Extreme (USA)
+ @"SLES-00068" : @4, // NBA Jam - Tournament Edition (Europe)
+ @"SLPS-00199" : @4, // NBA Jam - Tournament Edition (Japan)
+ @"SLUS-00002" : @4, // NBA Jam - Tournament Edition (USA)
+ @"SLES-02336" : @4, // NBA Showtime - NBA on NBC (Europe)
+ @"SLUS-00948" : @4, // NBA Showtime - NBA on NBC (USA)
+ @"SLES-02689" : @4, // Need for Speed - Porsche 2000 (Europe) (En,De,Sv)
+ @"SLES-02700" : @4, // Need for Speed - Porsche 2000 (Europe) (Fr,Es,It)
+ @"SLUS-01104" : @4, // Need for Speed - Porsche Unleashed (USA)
+ @"SLES-01907" : @4, // V-Rally - Championship Edition 2 (Europe) (En,Fr,De)
+ @"SLPS-02516" : @4, // V-Rally - Championship Edition 2 (Japan)
+ @"SLUS-01003" : @4, // Need for Speed - V-Rally 2 (USA)
+ @"SLES-02335" : @4, // NFL Blitz 2000 (Europe)
+ @"SLUS-00861" : @4, // NFL Blitz 2000 (USA)
+ @"SLUS-01146" : @4, // NFL Blitz 2001 (USA)
+ @"SLUS-00327" : @4, // NHL Open Ice - 2 on 2 Challenge (USA)
+ @"SLES-00113" : @4, // Olympic Soccer (Europe) (En,Fr,De,Es,It)
+ @"SLPS-00523" : @4, // Olympic Soccer (Japan)
+ @"SLUS-00156" : @4, // Olympic Soccer (USA)
+ @"SLPS-03056" : @4, // Oshigoto-shiki Jinsei Game - Mezase Shokugyou King (Japan)
+ @"SLPS-00899" : @4, // Panzer Bandit (Japan)
+ @"SLPM-86016" : @4, // Paro Wars (Japan)
+ @"SLUS-01130" : @4, // Peter Jacobsen's Golden Tee Golf (USA)
+ @"SLES-00201" : @4, // Pitball (Europe) (En,Fr,De,Es,It)
+ @"SLPS-00607" : @4, // Pitball (Japan)
+ @"SLUS-00146" : @4, // Pitball (USA)
+ @"SLUS-01033" : @4, // Polaris SnoCross (USA)
+ @"SLES-02020" : @4, // Pong (Europe) (En,Fr,De,Es,It,Nl)
+ @"SLUS-00889" : @4, // Pong - The Next Level (USA)
+ @"SLES-02808" : @4, // Beach Volleyball (Europe) (En,Fr,De,Es,It)
+ @"SLUS-01196" : @4, // Power Spike - Pro Beach Volleyball (USA)
+ @"SLES-00785" : @4, // Poy Poy (Europe)
+ @"SLPM-86034" : @4, // Poitters' Point (Japan)
+ @"SLUS-00486" : @4, // Poy Poy (USA)
+ @"SLES-01536" : @4, // Poy Poy 2 (Europe)
+ @"SLPM-86061" : @4, // Poitters' Point 2 - Sodom no Inbou
+ @"SLES-01544" : @4, // Premier Manager Ninety Nine (Europe)
+ @"SLES-01864" : @4, // Premier Manager Novanta Nove (Italy)
+ @"SLES-02292" : @4, // Premier Manager 2000 (Europe)
+ @"SLES-02293" : @4, // Canal+ Premier Manager (Europe) (Fr,Es,It)
+ @"SLES-02563" : @4, // Anstoss - Premier Manager (Germany)
+ @"SLES-00738" : @4, // Premier Manager 98 (Europe)
+ @"SLES-01284" : @4, // Premier Manager 98 (Italy)
+ @"SLES-03795" : @4, // Pro Evolution Soccer (Europe) (En,Fr,De)
+ @"SLES-03796" : @4, // Pro Evolution Soccer (Europe) (Es,It)
+ @"SLES-03946" : @4, // Pro Evolution Soccer 2 (Europe) (En,Fr,De)
+ @"SLES-03957" : @4, // Pro Evolution Soccer 2 (Europe) (Es,It)
+ @"SLPM-87056" : @4, // World Soccer Winning Eleven 2002 (Japan)
+ @"SLPM-86868" : @4, // Simple 1500 Series Vol. 69 - The Putter Golf (Japan)
+ @"SLUS-01371" : @4, // Putter Golf (USA)
+ @"SLPS-03114" : @4, // Puyo Puyo Box (Japan)
+ @"SLUS-00757" : @4, // Quake II (USA)
+ @"SLPS-02909" : @4, // Simple 1500 Series Vol. 34 - The Quiz Bangumi (Japan)
+ @"SLPS-03384" : @4, // Nice Price Series Vol. 06 - Quiz de Battle (Japan)
+ @"SLES-03511" : @4, // Rageball (Europe)
+ @"SLUS-01461" : @4, // Rageball (USA)
+ @"SLPM-86272" : @4, // Rakugaki Showtime
+ @"SCES-00408" : @4, // Rally Cross (Europe)
+ @"SIPS-60022" : @4, // Rally Cross (Japan)
+ @"SCUS-94308" : @4, // Rally Cross (USA)
+ @"SLES-01103" : @4, // Rat Attack (Europe) (En,Fr,De,Es,It,Nl)
+ @"SLUS-00656" : @4, // Rat Attack! (USA)
+ @"SLES-00707" : @4, // Risk (Europe) (En,Fr,De,Es)
+ @"SLUS-00616" : @4, // Risk - The Game of Global Domination (USA)
+ @"SLES-02552" : @4, // Road Rash - Jailbreak (Europe) (En,Fr,De)
+ @"SLUS-01053" : @4, // Road Rash - Jailbreak (USA)
+ @"SCES-01630" : @4, // Running Wild (Europe)
+ @"SCUS-94272" : @4, // Running Wild (USA)
+ @"SLES-00217" : @4, // Sampras Extreme Tennis (Europe) (En,Fr,De,Es,It)
+ @"SLPS-00594" : @4, // Sampras Extreme Tennis (Japan)
+ @"SLES-01286" : @4, // S.C.A.R.S. (Europe) (En,Fr,De,Es,It)
+ @"SLUS-00692" : @4, // S.C.A.R.S. (USA)
+ @"SLES-03642" : @4, // Scrabble (Europe) (En,De,Es)
+ @"SLUS-00903" : @4, // Scrabble (USA)
+ @"SLPS-02912" : @4, // SD Gundam - G Generation-F (Japan) (Disc 1)
+ @"SLPS-02913" : @4, // SD Gundam - G Generation-F (Japan) (Disc 2)
+ @"SLPS-02914" : @4, // SD Gundam - G Generation-F (Japan) (Disc 3)
+ @"SLPS-02915" : @4, // SD Gundam - G Generation-F (Japan) (Premium Disc)
+ @"SLPS-03195" : @4, // SD Gundam - G Generation-F.I.F (Japan)
+ @"SLPS-00785" : @4, // SD Gundam - GCentury (Japan) (v1.0) / (v1.1)
+ @"SLPS-01560" : @4, // SD Gundam - GGeneration (Japan) (v1.0) / (v1.1)
+ @"SLPS-01561" : @4, // SD Gundam - GGeneration (Premium Disc) (Japan)
+ @"SLPS-02200" : @4, // SD Gundam - GGeneration-0 (Japan) (Disc 1) (v1.0)
+ @"SLPS-02201" : @4, // SD Gundam - GGeneration-0 (Japan) (Disc 2) (v1.0)
+ @"SLES-03776" : @4, // Sky Sports Football Quiz (Europe)
+ @"SLES-03856" : @4, // Sky Sports Football Quiz - Season 02 (Europe)
+ @"SLES-00076" : @4, // Slam 'n Jam '96 featuring Magic & Kareem (Europe)
+ @"SLPS-00426" : @4, // Magic Johnson to Kareem Abdul-Jabbar no Slam 'n Jam '96 (Japan)
+ @"SLUS-00022" : @4, // Slam 'n Jam '96 featuring Magic & Kareem (USA)
+ @"SLES-02194" : @4, // Sled Storm (Europe) (En,Fr,De,Es)
+ @"SLUS-00955" : @4, // Sled Storm (USA)
+ @"SLES-01972" : @4, // South Park - Chef's Luv Shack (Europe)
+ @"SLUS-00997" : @4, // South Park - Chef's Luv Shack (USA)
+ @"SCES-01763" : @4, // Speed Freaks (Europe)
+ @"SCUS-94563" : @4, // Speed Punks (USA)
+ @"SLES-00023" : @4, // Striker 96 (Europe) (v1.0)
+ @"SLPS-00127" : @4, // Striker - World Cup Premiere Stage (Japan)
+ @"SLUS-00210" : @4, // Striker 96 (USA)
+ @"SLES-01733" : @4, // UEFA Striker (Europe) (En,Fr,De,Es,It,Nl)
+ @"SLUS-01078" : @4, // Striker Pro 2000 (USA)
+ @"SLPS-01264" : @4, // Suchie-Pai Adventure - Doki Doki Nightmare (Japan) (Disc 1)
+ @"SLPS-01265" : @4, // Suchie-Pai Adventure - Doki Doki Nightmare (Japan) (Disc 2)
+ @"SLES-00213" : @4, // Syndicate Wars (Europe) (En,Fr,Es,It,Sv)
+ @"SLES-00212" : @4, // Syndicate Wars (Germany)
+ @"SLUS-00262" : @4, // Syndicate Wars (USA)
+ @"SLPS-03050" : @4, // Tales of Eternia (Japan) (Disc 1)
+ @"SLPS-03051" : @4, // Tales of Eternia (Japan) (Disc 2)
+ @"SLPS-03052" : @4, // Tales of Eternia (Japan) (Disc 3)
+ @"SLUS-01355" : @4, // Tales of Destiny II (USA) (Disc 1)
+ @"SLUS-01367" : @4, // Tales of Destiny II (USA) (Disc 2)
+ @"SLUS-01368" : @4, // Tales of Destiny II (USA) (Disc 3)
+ @"SCES-01923" : @4, // Team Buddies (Europe) (En,Fr,De)
+ @"SLUS-00869" : @4, // Team Buddies (USA)
+ @"SLPS-00321" : @4, // Tetris X (Japan)
+ @"SLES-01675" : @4, // Tiger Woods 99 USA Tour Golf (Australia)
+ @"SLES-01674" : @4, // Tiger Woods 99 PGA Tour Golf (Europe) (En,Fr,De,Es,Sv)
+ @"SLPS-02012" : @4, // Tiger Woods 99 PGA Tour Golf (Japan)
+ @"SLUS-00785" : @4, // Tiger Woods 99 PGA Tour Golf (USA) (v1.0) / (v1.1)
+ @"SLES-03148" : @4, // Tiger Woods PGA Tour Golf (Europe)
+ @"SLUS-01273" : @4, // Tiger Woods PGA Tour Golf (USA)
+ @"SLES-02595" : @4, // Tiger Woods USA Tour 2000 (Australia)
+ @"SLES-02551" : @4, // Tiger Woods PGA Tour 2000 (Europe) (En,Fr,De,Es,Sv)
+ @"SLUS-01054" : @4, // Tiger Woods PGA Tour 2000 (USA)
+ @"SLPS-01113" : @4, // Toshinden Card Quest (Japan)
+ @"SLES-00256" : @4, // Trash It (Europe) (En,Fr,De,Es,It)
+ @"SCUS-94249" : @4, // Twisted Metal III (USA) (v1.0) / (v1.1)
+ @"SCUS-94560" : @4, // Twisted Metal 4 (USA)
+ @"SLES-02806" : @4, // UEFA Challenge (Europe) (En,Fr,De,Nl)
+ @"SLES-02807" : @4, // UEFA Challenge (Europe) (Fr,Es,It,Pt)
+ @"SLES-01622" : @4, // UEFA Champions League - Season 1998-99 (Europe)
+ @"SLES-01745" : @4, // UEFA Champions League - Saison 1998-99 (Germany)
+ @"SLES-01746" : @4, // UEFA Champions League - Stagione 1998-99 (Italy)
+ @"SLES-02918" : @4, // Vegas Casino (Europe)
+ @"SLPS-00467" : @4, // Super Casino Special (Japan)
+ @"SLES-00761" : @4, // Viva Football (Europe) (En,Fr,De,Es,It,Pt)
+ @"SLES-01341" : @4, // Absolute Football (France) (En,Fr,De,Es,It,Pt)
+ @"SLUS-00953" : @4, // Viva Soccer (USA) (En,Fr,De,Es,It,Pt)
+ @"SLES-02193" : @4, // WCW Mayhem (Europe)
+ @"SLUS-00963" : @4, // WCW Mayhem (USA)
+ @"SLES-03806" : @4, // Westlife - Fan-O-Mania (Europe)
+ @"SLES-03779" : @4, // Westlife - Fan-O-Mania (Europe) (Fr,De)
+ @"SLES-00717" : @4, // World League Soccer '98 (Europe) (En,Es,It)
+ @"SLES-01166" : @4, // World League Soccer '98 (France)
+ @"SLES-01167" : @4, // World League Soccer '98 (Germany)
+ @"SLPS-01389" : @4, // World League Soccer (Japan)
+ @"SLES-02170" : @4, // Wu-Tang - Taste the Pain (Europe)
+ @"SLES-02171" : @4, // Wu-Tang - Shaolin Style (France)
+ @"SLES-02172" : @4, // Wu-Tang - Shaolin Style (Germany)
+ @"SLUS-00929" : @4, // Wu-Tang - Shaolin Style (USA)
+ @"SLES-01980" : @4, // WWF Attitude (Europe)
+ @"SLES-02255" : @4, // WWF Attitude (Germany)
+ @"SLUS-00831" : @4, // WWF Attitude (USA)
+ @"SLES-00286" : @4, // WWF In Your House (Europe)
+ @"SLPS-00695" : @4, // WWF In Your House (Japan)
+ @"SLUS-00246" : @4, // WWF In Your House (USA) (v1.0) / (v1.1)
+ @"SLES-02619" : @4, // WWF SmackDown! (Europe)
+ @"SLPS-02885" : @4, // Exciting Pro Wres (Japan)
+ @"SLUS-00927" : @4, // WWF SmackDown! (USA)
+ @"SLES-03251" : @4, // WWF SmackDown! 2 - Know Your Role (Europe)
+ @"SLPS-03122" : @4, // Exciting Pro Wres 2 (Japan)
+ @"SLUS-01234" : @4, // WWF SmackDown! 2 - Know Your Role (USA)
+ @"SLES-00804" : @4, // WWF War Zone (Europe)
+ @"SLUS-00495" : @4, // WWF War Zone (USA) (v1.0) / (v1.1)
+ @"SLES-01893" : @5, // Bomberman (Europe)
+ @"SLPS-01717" : @5, // Bomberman (Japan)
+ @"SLUS-01189" : @5, // Bomberman - Party Edition (USA)
+ @"SCES-01078" : @5, // Bomberman World (Europe) (En,Fr,De,Es,It)
+ @"SLPS-01155" : @5, // Bomberman World (Japan)
+ @"SLUS-00680" : @5, // Bomberman World (USA)
+ @"SCES-01312" : @5, // Devil Dice (Europe) (En,Fr,De,Es,It)
+ @"SCPS-10051" : @5, // XI [sai] (Japan) (En,Ja)
+ @"SLUS-00672" : @5, // Devil Dice (USA)
+ @"SLPS-02943" : @5, // DX Monopoly (Japan)
+ @"SLES-00865" : @5, // Overboard! (Europe)
+ @"SLUS-00558" : @5, // Shipwreckers! (USA)
+ @"SLES-01376" : @6, // Brunswick Circuit Pro Bowling (Europe)
+ @"SLUS-00571" : @6, // Brunswick Circuit Pro Bowling (USA)
+ @"SLUS-00769" : @6, // Game of Life, The (USA)
+ @"SLES-03362" : @6, // NBA Hoopz (Europe) (En,Fr,De)
+ @"SLUS-01331" : @6, // NBA Hoopz (USA)
+ @"SLES-00284" : @6, // Space Jam (Europe)
+ @"SLPS-00697" : @6, // Space Jam (Japan)
+ @"SLUS-00243" : @6, // Space Jam (USA)
+ @"SLES-00534" : @6, // Ten Pin Alley (Europe)
+ @"SLUS-00377" : @6, // Ten Pin Alley (USA)
+ @"SLPS-01243" : @6, // Tenant Wars (Japan)
+ @"SLPM-86240" : @6, // SuperLite 1500 Series - Tenant Wars Alpha - SuperLite 1500 Version (Japan)
+ @"SLUS-01333" : @6, // Board Game - Top Shop (USA)
+ @"SLES-03830" : @8, // 2002 FIFA World Cup Korea Japan (Europe) (En,Sv)
+ @"SLES-03831" : @8, // Coupe du Monde FIFA 2002 (France)
+ @"SLES-03832" : @8, // 2002 FIFA World Cup Korea Japan (Germany)
+ @"SLES-03833" : @8, // 2002 FIFA World Cup Korea Japan (Italy)
+ @"SLES-03834" : @8, // 2002 FIFA World Cup Korea Japan (Spain)
+ @"SLUS-01449" : @8, // 2002 FIFA World Cup (USA) (En,Es)
+ @"SLES-01210" : @8, // Actua Soccer 3 (Europe)
+ @"SLES-01644" : @8, // Actua Soccer 3 (France)
+ @"SLES-01645" : @8, // Actua Soccer 3 (Germany)
+ @"SLES-01646" : @8, // Actua Soccer 3 (Italy)
+ @"SLPM-86044" : @8, // Break Point (Japan)
+ @"SCUS-94156" : @8, // Cardinal Syn (USA)
+ @"SLES-02948" : @8, // Chris Kamara's Street Soccer (Europe)
+ @"SLES-00080" : @8, // Supersonic Racers (Europe) (En,Fr,De,Es,It)
+ @"SLPS-01025" : @8, // Dare Devil Derby 3D (Japan)
+ @"SLUS-00300" : @8, // Dare Devil Derby 3D (USA)
+ @"SLES-00116" : @8, // FIFA Soccer 96 (Europe) (En,Fr,De,Es,It,Sv)
+ @"SLUS-00038" : @8, // FIFA Soccer 96 (USA)
+ @"SLES-00504" : @8, // FIFA 97 (Europe) (En,Fr,De,Es,It,Sv)
+ @"SLES-00505" : @8, // FIFA 97 (France) (En,Fr,De,Es,It,Sv)
+ @"SLES-00506" : @8, // FIFA 97 (Germany) (En,Fr,De,Es,It,Sv)
+ @"SLPS-00878" : @8, // FIFA Soccer 97 (Japan)
+ @"SLUS-00269" : @8, // FIFA Soccer 97 (USA)
+ @"SLES-00914" : @8, // FIFA - Road to World Cup 98 (Europe) (En,Fr,De,Es,Nl,Sv)
+ @"SLES-00915" : @8, // FIFA - En Route pour la Coupe du Monde 98 (France) (En,Fr,De,Es,Nl,Sv)
+ @"SLES-00916" : @8, // FIFA - Die WM-Qualifikation 98 (Germany) (En,Fr,De,Es,Nl,Sv)
+ @"SLES-00917" : @8, // FIFA - Road to World Cup 98 (Italy)
+ @"SLPS-01383" : @8, // FIFA - Road to World Cup 98 (Japan)
+ @"SLES-00918" : @8, // FIFA - Rumbo al Mundial 98 (Spain) (En,Fr,De,Es,Nl,Sv)
+ @"SLUS-00520" : @8, // FIFA - Road to World Cup 98 (USA) (En,Fr,De,Es,Nl,Sv)
+ @"SLES-01584" : @8, // FIFA 99 (Europe) (En,Fr,De,Es,Nl,Sv)
+ @"SLES-01585" : @8, // FIFA 99 (France) (En,Fr,De,Es,Nl,Sv)
+ @"SLES-01586" : @8, // FIFA 99 (Germany) (En,Fr,De,Es,Nl,Sv)
+ @"SLES-01587" : @8, // FIFA 99 (Italy)
+ @"SLPS-02309" : @8, // FIFA 99 - Europe League Soccer (Japan)
+ @"SLES-01588" : @8, // FIFA 99 (Spain) (En,Fr,De,Es,Nl,Sv)
+ @"SLUS-00782" : @8, // FIFA 99 (USA)
+ @"SLES-02315" : @8, // FIFA 2000 (Europe) (En,De,Es,Nl,Sv) (v1.0) / (v1.1)
+ @"SLES-02316" : @8, // FIFA 2000 (France)
+ @"SLES-02317" : @8, // FIFA 2000 (Germany) (En,De,Es,Nl,Sv)
+ @"SLES-02320" : @8, // FIFA 2000 (Greece)
+ @"SLES-02319" : @8, // FIFA 2000 (Italy)
+ @"SLPS-02675" : @8, // FIFA 2000 - Europe League Soccer (Japan)
+ @"SLES-02318" : @8, // FIFA 2000 (Spain) (En,De,Es,Nl,Sv)
+ @"SLUS-00994" : @8, // FIFA 2000 - Major League Soccer (USA) (En,De,Es,Nl,Sv)
+ @"SLES-03140" : @8, // FIFA 2001 (Europe) (En,De,Es,Nl,Sv)
+ @"SLES-03141" : @8, // FIFA 2001 (France)
+ @"SLES-03142" : @8, // FIFA 2001 (Germany) (En,De,Es,Nl,Sv)
+ @"SLES-03143" : @8, // FIFA 2001 (Greece)
+ @"SLES-03145" : @8, // FIFA 2001 (Italy)
+ @"SLES-03146" : @8, // FIFA 2001 (Spain) (En,De,Es,Nl,Sv)
+ @"SLUS-01262" : @8, // FIFA 2001 (USA)
+ @"SLES-03666" : @8, // FIFA Football 2002 (Europe) (En,De,Es,Nl,Sv)
+ @"SLES-03668" : @8, // FIFA Football 2002 (France)
+ @"SLES-03669" : @8, // FIFA Football 2002 (Germany) (En,De,Es,Nl,Sv)
+ @"SLES-03671" : @8, // FIFA Football 2002 (Italy)
+ @"SLES-03672" : @8, // FIFA Football 2002 (Spain) (En,De,Es,Nl,Sv)
+ @"SLUS-01408" : @8, // FIFA Soccer 2002 (USA) (En,Es)
+ @"SLES-03977" : @8, // FIFA Football 2003 (Europe) (En,Nl,Sv)
+ @"SLES-03978" : @8, // FIFA Football 2003 (France)
+ @"SLES-03979" : @8, // FIFA Football 2003 (Germany)
+ @"SLES-03980" : @8, // FIFA Football 2003 (Italy)
+ @"SLES-03981" : @8, // FIFA Football 2003 (Spain)
+ @"SLUS-01504" : @8, // FIFA Soccer 2003 (USA)
+ @"SLES-04115" : @8, // FIFA Football 2004 (Europe) (En,Nl,Sv)
+ @"SLES-04116" : @8, // FIFA Football 2004 (France)
+ @"SLES-04117" : @8, // FIFA Football 2004 (Germany)
+ @"SLES-04119" : @8, // FIFA Football 2004 (Italy)
+ @"SLES-04118" : @8, // FIFA Football 2004 (Spain)
+ @"SLUS-01578" : @8, // FIFA Soccer 2004 (USA) (En,Es)
+ @"SLES-04165" : @8, // FIFA Football 2005 (Europe) (En,Nl)
+ @"SLES-04166" : @8, // FIFA Football 2005 (France)
+ @"SLES-04168" : @8, // FIFA Football 2005 (Germany)
+ @"SLES-04167" : @8, // FIFA Football 2005 (Italy)
+ @"SLES-04169" : @8, // FIFA Football 2005 (Spain)
+ @"SLUS-01585" : @8, // FIFA Soccer 2005 (USA) (En,Es)
+ @"SLUS-01129" : @8, // FoxKids.com - Micro Maniacs Racing (USA)
+ @"SLES-03084" : @8, // Inspector Gadget - Gadget's Crazy Maze (Europe) (En,Fr,De,Es,It,Nl)
+ @"SLUS-01267" : @8, // Inspector Gadget - Gadget's Crazy Maze (USA) (En,Fr,De,Es,It,Nl)
+ @"SLUS-00500" : @8, // Jimmy Johnson's VR Football '98 (USA)
+ @"SLES-00436" : @8, // Madden NFL 97 (Europe)
+ @"SLUS-00018" : @8, // Madden NFL 97 (USA)
+ @"SLES-00904" : @8, // Madden NFL 98 (Europe)
+ @"SLUS-00516" : @8, // Madden NFL 98 (USA) / (Alt)
+ @"SLES-01427" : @8, // Madden NFL 99 (Europe)
+ @"SLUS-00729" : @8, // Madden NFL 99 (USA)
+ @"SLES-02192" : @8, // Madden NFL 2000 (Europe)
+ @"SLUS-00961" : @8, // Madden NFL 2000 (USA)
+ @"SLES-03067" : @8, // Madden NFL 2001 (Europe)
+ @"SLUS-01241" : @8, // Madden NFL 2001 (USA)
+ @"SLUS-01402" : @8, // Madden NFL 2002 (USA)
+ @"SLUS-01482" : @8, // Madden NFL 2003 (USA)
+ @"SLUS-01570" : @8, // Madden NFL 2004 (USA)
+ @"SLUS-01584" : @8, // Madden NFL 2005 (USA)
+ @"SLUS-00526" : @8, // March Madness '98 (USA)
+ @"SLUS-00559" : @8, // Micro Machines V3 (USA)
+ @"SLUS-00507" : @8, // Monopoly (USA)
+ @"SLUS-01178" : @8, // Monster Rancher Battle Card - Episode II (USA)
+ @"SLES-02299" : @8, // NBA Basketball 2000 (Europe) (En,Fr,De,Es,It)
+ @"SLUS-00926" : @8, // NBA Basketball 2000 (USA)
+ @"SLES-01003" : @8, // NBA Fastbreak '98 (Europe)
+ @"SLUS-00492" : @8, // NBA Fastbreak '98 (USA)
+ @"SLES-00171" : @8, // NBA in the Zone (Europe)
+ @"SLPS-00188" : @8, // NBA Power Dunkers (Japan)
+ @"SLUS-00048" : @8, // NBA in the Zone (USA)
+ @"SLES-00560" : @8, // NBA in the Zone 2 (Europe)
+ @"SLPM-86011" : @8, // NBA Power Dunkers 2 (Japan)
+ @"SLUS-00294" : @8, // NBA in the Zone 2 (USA)
+ @"SLES-00882" : @8, // NBA Pro 98 (Europe)
+ @"SLPM-86060" : @8, // NBA Power Dunkers 3 (Japan)
+ @"SLUS-00445" : @8, // NBA in the Zone '98 (USA) (v1.0) / (v1.1)
+ @"SLES-01970" : @8, // NBA Pro 99 (Europe)
+ @"SLPM-86176" : @8, // NBA Power Dunkers 4 (Japan)
+ @"SLUS-00791" : @8, // NBA in the Zone '99 (USA)
+ @"SLES-02513" : @8, // NBA in the Zone 2000 (Europe)
+ @"SLPM-86397" : @8, // NBA Power Dunkers 5 (Japan)
+ @"SLUS-01028" : @8, // NBA in the Zone 2000 (USA)
+ @"SLES-00225" : @8, // NBA Live 96 (Europe)
+ @"SLPS-00389" : @8, // NBA Live 96 (Japan)
+ @"SLUS-00060" : @8, // NBA Live 96 (USA)
+ @"SLES-00517" : @8, // NBA Live 97 (Europe) (En,Fr,De)
+ @"SLPS-00736" : @8, // NBA Live 97 (Japan)
+ @"SLUS-00267" : @8, // NBA Live 97 (USA)
+ @"SLES-00906" : @8, // NBA Live 98 (Europe) (En,Es,It)
+ @"SLES-00952" : @8, // NBA Live 98 (Germany)
+ @"SLPS-01296" : @8, // NBA Live 98 (Japan)
+ @"SLUS-00523" : @8, // NBA Live 98 (USA)
+ @"SLES-01446" : @8, // NBA Live 99 (Europe)
+ @"SLES-01455" : @8, // NBA Live 99 (Germany)
+ @"SLES-01456" : @8, // NBA Live 99 (Italy)
+ @"SLPS-02033" : @8, // NBA Live 99 (Japan)
+ @"SLES-01457" : @8, // NBA Live 99 (Spain)
+ @"SLUS-00736" : @8, // NBA Live 99 (USA)
+ @"SLES-02358" : @8, // NBA Live 2000 (Europe)
+ @"SLES-02360" : @8, // NBA Live 2000 (Germany)
+ @"SLES-02361" : @8, // NBA Live 2000 (Italy)
+ @"SLPS-02603" : @8, // NBA Live 2000 (Japan)
+ @"SLES-02362" : @8, // NBA Live 2000 (Spain)
+ @"SLUS-00998" : @8, // NBA Live 2000 (USA)
+ @"SLES-03128" : @8, // NBA Live 2001 (Europe)
+ @"SLES-03129" : @8, // NBA Live 2001 (France)
+ @"SLES-03130" : @8, // NBA Live 2001 (Germany)
+ @"SLES-03131" : @8, // NBA Live 2001 (Italy)
+ @"SLES-03132" : @8, // NBA Live 2001 (Spain)
+ @"SLUS-01271" : @8, // NBA Live 2001 (USA)
+ @"SLES-03718" : @8, // NBA Live 2002 (Europe)
+ @"SLES-03719" : @8, // NBA Live 2002 (France)
+ @"SLES-03720" : @8, // NBA Live 2002 (Germany)
+ @"SLES-03721" : @8, // NBA Live 2002 (Italy)
+ @"SLES-03722" : @8, // NBA Live 2002 (Spain)
+ @"SLUS-01416" : @8, // NBA Live 2002 (USA)
+ @"SLES-03982" : @8, // NBA Live 2003 (Europe)
+ @"SLES-03969" : @8, // NBA Live 2003 (France)
+ @"SLES-03968" : @8, // NBA Live 2003 (Germany)
+ @"SLES-03970" : @8, // NBA Live 2003 (Italy)
+ @"SLES-03971" : @8, // NBA Live 2003 (Spain)
+ @"SLUS-01483" : @8, // NBA Live 2003 (USA)
+ @"SCES-00067" : @8, // Total NBA '96 (Europe)
+ @"SIPS-60008" : @8, // Total NBA '96 (Japan)
+ @"SCUS-94500" : @8, // NBA Shoot Out (USA)
+ @"SCES-00623" : @8, // Total NBA '97 (Europe)
+ @"SIPS-60015" : @8, // Total NBA '97 (Japan)
+ @"SCUS-94552" : @8, // NBA Shoot Out '97 (USA)
+ @"SCES-01079" : @8, // Total NBA 98 (Europe)
+ @"SCUS-94171" : @8, // NBA ShootOut 98 (USA)
+ @"SCUS-94561" : @8, // NBA ShootOut 2000 (USA)
+ @"SCUS-94581" : @8, // NBA ShootOut 2001 (USA)
+ @"SCUS-94641" : @8, // NBA ShootOut 2002 (USA)
+ @"SCUS-94673" : @8, // NBA ShootOut 2003 (USA)
+ @"SCUS-94691" : @8, // NBA ShootOut 2004 (USA)
+ @"SLUS-00142" : @8, // NCAA Basketball Final Four 97 (USA)
+ @"SCUS-94264" : @8, // NCAA Final Four 99 (USA)
+ @"SCUS-94562" : @8, // NCAA Final Four 2000 (USA)
+ @"SCUS-94579" : @8, // NCAA Final Four 2001 (USA)
+ @"SLUS-00514" : @8, // NCAA Football 98 (USA)
+ @"SLUS-00688" : @8, // NCAA Football 99 (USA)
+ @"SLUS-00932" : @8, // NCAA Football 2000 (USA) (v1.0) / (v1.1)
+ @"SLUS-01219" : @8, // NCAA Football 2001 (USA)
+ @"SCUS-94509" : @8, // NCAA Football GameBreaker (USA)
+ @"SCUS-94172" : @8, // NCAA GameBreaker 98 (USA)
+ @"SCUS-94246" : @8, // NCAA GameBreaker 99 (USA)
+ @"SCUS-94557" : @8, // NCAA GameBreaker 2000 (USA)
+ @"SCUS-94573" : @8, // NCAA GameBreaker 2001 (USA)
+ @"SLUS-00805" : @8, // NCAA March Madness 99 (USA)
+ @"SLUS-01023" : @8, // NCAA March Madness 2000 (USA)
+ @"SLUS-01320" : @8, // NCAA March Madness 2001 (USA)
+ @"SCES-00219" : @8, // NFL GameDay (Europe)
+ @"SCUS-94505" : @8, // NFL GameDay (USA)
+ @"SCUS-94510" : @8, // NFL GameDay 97 (USA)
+ @"SCUS-94173" : @8, // NFL GameDay 98 (USA)
+ @"SCUS-94234" : @8, // NFL GameDay 99 (USA) (v1.0) / (v1.1)
+ @"SCUS-94556" : @8, // NFL GameDay 2000 (USA)
+ @"SCUS-94575" : @8, // NFL GameDay 2001 (USA)
+ @"SCUS-94639" : @8, // NFL GameDay 2002 (USA)
+ @"SCUS-94665" : @8, // NFL GameDay 2003 (USA)
+ @"SCUS-94690" : @8, // NFL GameDay 2004 (USA)
+ @"SCUS-94695" : @8, // NFL GameDay 2005 (USA)
+ @"SLES-00449" : @8, // NFL Quarterback Club 97 (Europe)
+ @"SLUS-00011" : @8, // NFL Quarterback Club 97 (USA)
+ @"SCUS-94420" : @8, // NFL Xtreme 2 (USA)
+ @"SLES-00492" : @8, // NHL 97 (Europe)
+ @"SLES-00533" : @8, // NHL 97 (Germany)
+ @"SLPS-00861" : @8, // NHL 97 (Japan)
+ @"SLUS-00030" : @8, // NHL 97 (USA)
+ @"SLES-00907" : @8, // NHL 98 (Europe) (En,Sv,Fi)
+ @"SLES-00512" : @8, // NHL 98 (Germany)
+ @"SLUS-00519" : @8, // NHL 98 (USA)
+ @"SLES-01445" : @8, // NHL 99 (Europe) (En,Fr,Sv,Fi)
+ @"SLES-01458" : @8, // NHL 99 (Germany)
+ @"SLUS-00735" : @8, // NHL 99 (USA)
+ @"SLES-02225" : @8, // NHL 2000 (Europe) (En,Sv,Fi)
+ @"SLES-02227" : @8, // NHL 2000 (Germany)
+ @"SLUS-00965" : @8, // NHL 2000 (USA)
+ @"SLES-03139" : @8, // NHL 2001 (Europe) (En,Sv,Fi)
+ @"SLES-03154" : @8, // NHL 2001 (Germany)
+ @"SLUS-01264" : @8, // NHL 2001 (USA)
+ @"SLES-02514" : @8, // NHL Blades of Steel 2000 (Europe)
+ @"SLPM-86193" : @8, // NHL Blades of Steel 2000 (Japan)
+ @"SLUS-00825" : @8, // NHL Blades of Steel 2000 (USA)
+ @"SLES-00624" : @8, // NHL Breakaway 98 (Europe)
+ @"SLUS-00391" : @8, // NHL Breakaway 98 (USA)
+ @"SLES-02298" : @8, // NHL Championship 2000 (Europe) (En,Fr,De,Sv)
+ @"SLUS-00925" : @8, // NHL Championship 2000 (USA)
+ @"SCES-00392" : @8, // NHL Face Off '97 (Europe)
+ @"SIPS-60018" : @8, // NHL PowerRink '97 (Japan)
+ @"SCUS-94550" : @8, // NHL Face Off '97 (USA)
+ @"SCES-01022" : @8, // NHL FaceOff 98 (Europe)
+ @"SCUS-94174" : @8, // NHL FaceOff 98 (USA)
+ @"SCES-01736" : @8, // NHL FaceOff 99 (Europe)
+ @"SCUS-94235" : @8, // NHL FaceOff 99 (USA)
+ @"SCES-02451" : @8, // NHL FaceOff 2000 (Europe)
+ @"SCUS-94558" : @8, // NHL FaceOff 2000 (USA)
+ @"SCUS-94577" : @8, // NHL FaceOff 2001 (USA)
+ @"SLES-00418" : @8, // NHL Powerplay 98 (Europe) (En,Fr,De)
+ @"SLUS-00528" : @8, // NHL Powerplay 98 (USA) (En,Fr,De)
+ @"SLES-00110" : @8, // Olympic Games (Europe) (En,Fr,De,Es,It)
+ @"SLPS-00465" : @8, // Atlanta Olympics '96
+ @"SLUS-00148" : @8, // Olympic Summer Games (USA)
+ @"SLES-01559" : @8, // Pro 18 - World Tour Golf (Europe) (En,Fr,De,Es,It,Sv)
+ @"SLUS-00817" : @8, // Pro 18 - World Tour Golf (USA)
+ @"SLES-00472" : @8, // Riot (Europe)
+ @"SCUS-94551" : @8, // Professional Underground League of Pain (USA)
+ @"SLES-01203" : @8, // Puma Street Soccer (Europe) (En,Fr,De,It)
+ @"SLES-01436" : @8, // Rival Schools - United by Fate (Europe) (Disc 1) (Evolution Disc)
+ @"SLES-11436" : @8, // Rival Schools - United by Fate (Europe) (Disc 2) (Arcade Disc)
+ @"SLPS-01240" : @8, // Shiritsu Justice Gakuen - Legion of Heroes (Japan) (Disc 1) (Evolution Disc)
+ @"SLPS-01241" : @8, // Shiritsu Justice Gakuen - Legion of Heroes (Japan) (Disc 2) (Arcade Disc)
+ @"SLPS-02120" : @8, // Shiritsu Justice Gakuen - Nekketsu Seishun Nikki 2 (Japan)
+ @"SLES-01658" : @8, // Shaolin (Europe)
+ @"SLPS-02168" : @8, // Lord of Fist (Japan)
+ @"SLES-00296" : @8, // Street Racer (Europe)
+ @"SLPS-00610" : @8, // Street Racer Extra (Japan)
+ @"SLUS-00099" : @8, // Street Racer (USA)
+ @"SLES-02857" : @8, // Sydney 2000 (Europe)
+ @"SLES-02858" : @8, // Sydney 2000 (France)
+ @"SLES-02859" : @8, // Sydney 2000 (Germany)
+ @"SLPM-86626" : @8, // Sydney 2000 (Japan)
+ @"SLES-02861" : @8, // Sydney 2000 (Spain)
+ @"SLUS-01177" : @8, // Sydney 2000 (USA)
+ @"SCES-01700" : @8, // This Is Football (Europe)
+ @"SCES-01882" : @8, // This Is Football (Europe) (Fr,Nl)
+ @"SCES-01701" : @8, // Monde des Bleus, Le - Le jeu officiel de l'equipe de France (France)
+ @"SCES-01702" : @8, // Fussball Live (Germany)
+ @"SCES-01703" : @8, // This Is Football (Italy)
+ @"SCES-01704" : @8, // Esto es Futbol (Spain)
+ @"SCES-03070" : @8, // This Is Football 2 (Europe)
+ @"SCES-03073" : @8, // Monde des Bleus 2, Le (France)
+ @"SCES-03074" : @8, // Fussball Live 2 (Germany)
+ @"SCES-03075" : @8, // This Is Football 2 (Italy)
+ @"SCES-03072" : @8, // This Is Football 2 (Netherlands)
+ @"SCES-03076" : @8, // Esto es Futbol 2 (Spain)
+ @"SLPS-00682" : @8, // Triple Play 97 (Japan)
+ @"SLUS-00237" : @8, // Triple Play 97 (USA)
+ @"SLPS-00887" : @8, // Triple Play 98 (Japan)
+ @"SLUS-00465" : @8, // Triple Play 98 (USA)
+ @"SLUS-00618" : @8, // Triple Play 99 (USA) (En,Es)
+ @"SLES-02577" : @8, // UEFA Champions League - Season 1999-2000 (Europe)
+ @"SLES-02578" : @8, // UEFA Champions League - Season 1999-2000 (France)
+ @"SLES-02579" : @8, // UEFA Champions League - Season 1999-2000 (Germany)
+ @"SLES-02580" : @8, // UEFA Champions League - Season 1999-2000 (Italy)
+ @"SLES-03262" : @8, // UEFA Champions League - Season 2000-2001 (Europe)
+ @"SLES-03281" : @8, // UEFA Champions League - Season 2000-2001 (Germany)
+ @"SLES-02704" : @8, // UEFA Euro 2000 (Europe)
+ @"SLES-02705" : @8, // UEFA Euro 2000 (France)
+ @"SLES-02706" : @8, // UEFA Euro 2000 (Germany)
+ @"SLES-02707" : @8, // UEFA Euro 2000 (Italy)
+ @"SLES-01265" : @8, // World Cup 98 (Europe) (En,Fr,De,Es,Nl,Sv,Da)
+ @"SLES-01266" : @8, // Coupe du Monde 98 (France)
+ @"SLES-01267" : @8, // Frankreich 98 - Die Fussball-WM (Germany) (En,Fr,De,Es,Nl,Sv,Da)
+ @"SLES-01268" : @8, // World Cup 98 - Coppa del Mondo (Italy)
+ @"SLPS-01719" : @8, // FIFA World Cup 98 - France 98 Soushuuhen (Japan)
+ @"SLUS-00644" : @8, // World Cup 98 (USA)
+ };
+
+ // 5-player games requiring Multitap on port 2 instead of port 1
+ NSArray *multiTap5PlayerPort2 =
+ @[
+ @"SLES-01893", // Bomberman (Europe)
+ @"SLPS-01717", // Bomberman (Japan)
+ @"SLUS-01189", // Bomberman - Party Edition (USA)
+ ];
+
+#pragma message "forget about multitap for now :)"
+ // Set multitap configuration if detected
+// if (multiTapGames[[current ROMSerial]])
+// {
+// current->multiTapPlayerCount = [[multiTapGames objectForKey:[current ROMSerial]] intValue];
+//
+// if([multiTap5PlayerPort2 containsObject:[current ROMSerial]])
+// MDFNI_SetSetting("psx.input.pport2.multitap", "1"); // Enable multitap on PSX port 2
+// else
+// {
+// MDFNI_SetSetting("psx.input.pport1.multitap", "1"); // Enable multitap on PSX port 1
+// if(current->multiTapPlayerCount > 5)
+// MDFNI_SetSetting("psx.input.pport2.multitap", "1"); // Enable multitap on PSX port 2
+// }
+// }
+}
+
+- (id)init {
+ if((self = [super init]))
+ {
+ _current = self;
+
+ multiTapPlayerCount = 2;
+
+ for(unsigned i = 0; i < 8; i++) {
+ inputBuffer[i] = (uint32_t *) calloc(9, sizeof(uint32_t));
+ }
+ }
+
+ return self;
+}
+
+- (void)dealloc {
+ for(unsigned i = 0; i < 8; i++) {
+ free(inputBuffer[i]);
+ }
+
+ delete surf;
+
+ if (_current == self) {
+ _current = nil;
+ }
+}
+
+# pragma mark - Execution
+
+static void emulation_run() {
+ GET_CURRENT_OR_RETURN();
+
+ static int16_t sound_buf[0x10000];
+ int32 rects[game->fb_height];
+ rects[0] = ~0;
+
+ EmulateSpecStruct spec = {0};
+ spec.surface = surf;
+ spec.SoundRate = current->sampleRate;
+ spec.SoundBuf = sound_buf;
+ spec.LineWidths = rects;
+ spec.SoundBufMaxSize = sizeof(sound_buf) / 2;
+ spec.SoundVolume = 1.0;
+ spec.soundmultiplier = 1.0;
+
+ MDFNI_Emulate(&spec);
+
+ current->mednafenCoreTiming = current->masterClock / spec.MasterCycles;
+
+ // Fix for game stutter. mednafenCoreTiming flutters on init before settling and we only read it
+ // after the first frame wot set the current->gameInterval in the super class. This work around
+ // resets the value after a few frames. -Joe M
+ static int fixCount = 0;
+ static dispatch_once_t onceToken;
+ dispatch_once(&onceToken, ^{
+ // The looping counter wasn't enough sometimes, just adding a 2 second one time trigger to rsset frame timing
+ // Need to investigate more why this happens at all but this seems to resolve with no known side effects - jm
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
+ current->gameInterval = 1.0 / current->mednafenCoreTiming;
+ });
+ });
+
+ if(fixCount < 10) {
+ current->gameInterval = 1.0 / current->mednafenCoreTiming;
+ NSLog(@"%f", current->mednafenCoreTiming);
+ fixCount++;
+ }
+
+ if(current->systemType == psx)
+ {
+ current->videoWidth = rects[spec.DisplayRect.y];
+ current->videoOffsetX = spec.DisplayRect.x;
+ }
+ else if(game->multires)
+ {
+ current->videoWidth = rects[spec.DisplayRect.y];
+ current->videoOffsetX = spec.DisplayRect.x;
+ }
+ else
+ {
+ current->videoWidth = spec.DisplayRect.w;
+ current->videoOffsetX = spec.DisplayRect.x;
+ }
+
+ current->videoHeight = spec.DisplayRect.h;
+ current->videoOffsetY = spec.DisplayRect.y;
+
+ update_audio_batch(spec.SoundBuf, spec.SoundBufSize);
+}
+
+- (BOOL)loadFileAtPath:(NSString *)path
+{
+ [[NSFileManager defaultManager] createDirectoryAtPath:[self batterySavesPath] withIntermediateDirectories:YES attributes:nil error:NULL];
+
+ if([[self systemIdentifier] isEqualToString:@"com.provenance.lynx"])
+ {
+ systemType = lynx;
+
+ mednafenCoreModule = @"lynx";
+ mednafenCoreAspect = OEIntSizeMake(80, 51);
+ //mednafenCoreAspect = OEIntSizeMake(game->nominal_width, game->nominal_height);
+ sampleRate = 48000;
+ }
+ else if([[self systemIdentifier] isEqualToString:@"com.provenance.ngp"] || [[self systemIdentifier] isEqualToString:@"com.provenance.ngpc"])
+ {
+ systemType = neogeo;
+
+ mednafenCoreModule = @"ngp";
+ mednafenCoreAspect = OEIntSizeMake(20, 19);
+ //mednafenCoreAspect = OEIntSizeMake(game->nominal_width, game->nominal_height);
+ sampleRate = 44100;
+ }
+ else if([[self systemIdentifier] isEqualToString:@"com.provenance.pce"] || [[self systemIdentifier] isEqualToString:@"com.provenance.pcecd"] || [[self systemIdentifier] isEqualToString:@"com.provenance.sgfx"])
+ {
+ systemType = pce;
+
+ mednafenCoreModule = @"pce";
+ mednafenCoreAspect = OEIntSizeMake(256 * (8.0/7.0), 240);
+ //mednafenCoreAspect = OEIntSizeMake(game->nominal_width, game->nominal_height);
+ sampleRate = 48000;
+ }
+ else if([[self systemIdentifier] isEqualToString:@"com.provenance.pcfx"])
+ {
+ systemType = pcfx;
+
+ mednafenCoreModule = @"pcfx";
+ mednafenCoreAspect = OEIntSizeMake(4, 3);
+ //mednafenCoreAspect = OEIntSizeMake(game->nominal_width, game->nominal_height);
+ sampleRate = 48000;
+ }
+ else if([[self systemIdentifier] isEqualToString:@"com.provenance.psx"])
+ {
+ systemType = psx;
+
+ mednafenCoreModule = @"psx";
+ // Note: OpenEMU sets this to 4, 3.
+ mednafenCoreAspect = OEIntSizeMake(3, 2);
+ //mednafenCoreAspect = OEIntSizeMake(game->nominal_width, game->nominal_height);
+ sampleRate = 44100;
+ }
+ else if([[self systemIdentifier] isEqualToString:@"com.provenance.vb"])
+ {
+ systemType = vb;
+
+ mednafenCoreModule = @"vb";
+ mednafenCoreAspect = OEIntSizeMake(12, 7);
+ //mednafenCoreAspect = OEIntSizeMake(game->nominal_width, game->nominal_height);
+ sampleRate = 48000;
+ }
+ else if([[self systemIdentifier] isEqualToString:@"com.provenance.ws"] || [[self systemIdentifier] isEqualToString:@"com.provenance.wsc"])
+ {
+ systemType = wswan;
+
+ mednafenCoreModule = @"wswan";
+ mednafenCoreAspect = OEIntSizeMake(14, 9);
+ //mednafenCoreAspect = OEIntSizeMake(game->nominal_width, game->nominal_height);
+ sampleRate = 48000;
+ }
+ else
+ {
+ NSLog(@"MednafenGameCore loadFileAtPath: Incorrect systemIdentifier");
+ assert(false);
+ }
+
+ assert(_current);
+ mednafen_init(_current);
+
+ game = MDFNI_LoadGame([mednafenCoreModule UTF8String], [path UTF8String]);
+
+ if(!game) {
+ return NO;
+ }
+
+ // BGRA pixel format
+ MDFN_PixelFormat pix_fmt(MDFN_COLORSPACE_RGB, 16, 8, 0, 24);
+ surf = new MDFN_Surface(NULL, game->fb_width, game->fb_height, game->fb_width, pix_fmt);
+
+ masterClock = game->MasterClock >> 32;
+
+ if (systemType == pce)
+ {
+ game->SetInput(0, "gamepad", (uint8_t *)inputBuffer[0]);
+ game->SetInput(1, "gamepad", (uint8_t *)inputBuffer[1]);
+ game->SetInput(2, "gamepad", (uint8_t *)inputBuffer[2]);
+ game->SetInput(3, "gamepad", (uint8_t *)inputBuffer[3]);
+ game->SetInput(4, "gamepad", (uint8_t *)inputBuffer[4]);
+ }
+ else if (systemType == pcfx)
+ {
+ game->SetInput(0, "gamepad", (uint8_t *)inputBuffer[0]);
+ game->SetInput(1, "gamepad", (uint8_t *)inputBuffer[1]);
+ }
+ else if (systemType == psx)
+ {
+ for(unsigned i = 0; i < multiTapPlayerCount; i++) {
+ game->SetInput(i, "dualshock", (uint8_t *)inputBuffer[i]);
+ }
+ }
+ else
+ {
+ game->SetInput(0, "gamepad", (uint8_t *)inputBuffer[0]);
+ }
+
+ MDFNI_SetMedia(0, 2, 0, 0); // Disc selection API
+
+ // Parse number of discs in m3u
+ if([[[path pathExtension] lowercaseString] isEqualToString:@"m3u"])
+ {
+ NSString *m3uString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
+ NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@".cue|.ccd" options:NSRegularExpressionCaseInsensitive error:nil];
+ NSUInteger numberOfMatches = [regex numberOfMatchesInString:m3uString options:0 range:NSMakeRange(0, [m3uString length])];
+
+ NSLog(@"Loaded m3u containing %lu cue sheets or ccd",numberOfMatches);
+
+ maxDiscs = numberOfMatches;
+ }
+
+ emulation_run();
+
+ return YES;
+}
+
+- (void)pollControllers {
+ unsigned maxValue = 0;
+ const int*map;
+ switch (systemType) {
+ case psx:
+ maxValue = PVPSXButtonCount;
+ map = PSXMap;
+ break;
+ case neogeo:
+ maxValue = OENGPButtonCount;
+ map = NeoMap;
+ break;
+ case lynx:
+ maxValue = OELynxButtonCount;
+ map = LynxMap;
+ break;
+ case pce:
+ maxValue = OEPCEButtonCount;
+ map = PCEMap;
+ break;
+ case pcfx:
+ maxValue = OEPCFXButtonCount;
+ map = PCFXMap;
+ break;
+ case vb:
+ maxValue = OEVBButtonCount;
+ map = VBMap;
+ break;
+ case wswan:
+ maxValue = OEWSButtonCount;
+ map = WSMap;
+ break;
+ return;
+ }
+
+ for (NSInteger playerIndex = 0; playerIndex < 2; playerIndex++) {
+ GCController *controller = nil;
+
+ if (self.controller1 && playerIndex == 0) {
+ controller = self.controller1;
+ }
+ else if (self.controller2 && playerIndex == 1)
+ {
+ controller = self.controller2;
+ }
+
+ if (controller) {
+ for (unsigned i=0; i 0) {
+ inputBuffer[playerIndex][0] |= 1 << map[i];
+ } else {
+ inputBuffer[playerIndex][0] &= ~(1 << map[i]);
+ }
+ } else {
+ float analogValue = [self PSXAnalogControllerValueForButtonID:i forController:controller];
+ [self didMovePSXJoystickDirection:(PVPSXButton)i
+ withValue:analogValue
+ forPlayer:playerIndex];
+ }
+ }
+ }
+ }
+}
+
+- (void)executeFrame
+{
+ // Should we be using controller callbacks instead?
+ if (self.controller1 || self.controller2) {
+ [self pollControllers];
+ }
+
+ emulation_run();
+}
+
+- (void)resetEmulation
+{
+ MDFNI_Reset();
+}
+
+- (void)stopEmulation
+{
+ MDFNI_CloseGame();
+ MDFNI_Kill();
+ [super stopEmulation];
+}
+
+- (NSTimeInterval)frameInterval
+{
+ return mednafenCoreTiming ?: 60;
+}
+
+# pragma mark - Video
+
+- (CGRect)screenRect
+{
+ return CGRectMake(videoOffsetX, videoOffsetY, videoWidth, videoHeight);
+}
+
+- (CGSize)bufferSize
+{
+
+ return CGSizeMake(game->fb_width, game->fb_height);
+}
+
+- (CGSize)aspectSize
+{
+ return CGSizeMake(mednafenCoreAspect.width,mednafenCoreAspect.height);
+}
+
+- (const void *)videoBuffer
+{
+ return surf->pixels;
+}
+
+- (GLenum)pixelFormat
+{
+ return GL_BGRA;
+}
+
+- (GLenum)pixelType
+{
+ return GL_UNSIGNED_BYTE;
+}
+
+- (GLenum)internalPixelFormat
+{
+ return GL_RGBA;
+}
+
+- (BOOL)wideScreen {
+ switch (systemType) {
+ case psx:
+ return YES;
+ case neogeo:
+ case lynx:
+ case pce:
+ case pcfx:
+ case vb:
+ case wswan:
+ return NO;
+ }
+}
+
+# pragma mark - Audio
+
+static size_t update_audio_batch(const int16_t *data, size_t frames)
+{
+ GET_CURRENT_OR_RETURN(frames);
+
+ [[current ringBufferAtIndex:0] write:data maxLength:frames * [current channelCount] * 2];
+ return frames;
+}
+
+- (double)audioSampleRate
+{
+ return sampleRate ? sampleRate : 48000;
+}
+
+- (NSUInteger)channelCount
+{
+ return game->soundchan;
+}
+
+# pragma mark - Save States
+
+- (BOOL)saveStateToFileAtPath:(NSString *)fileName {
+ return MDFNI_SaveState(fileName.fileSystemRepresentation, "", NULL, NULL, NULL);
+}
+
+- (BOOL)loadStateFromFileAtPath:(NSString *)fileName {
+ return MDFNI_LoadState(fileName.fileSystemRepresentation, "");
+}
+
+- (NSData *)serializeStateWithError:(NSError **)outError
+{
+ MemoryStream stream(65536, false);
+ MDFNSS_SaveSM(&stream, true);
+ size_t length = stream.map_size();
+ void *bytes = stream.map();
+
+ if(length) {
+ return [NSData dataWithBytes:bytes length:length];
+ }
+
+ if(outError) {
+ assert(false);
+#pragma message "fix error log"
+// *outError = [NSError errorWithDomain:OEGameCoreErrorDomain code:OEGameCoreCouldNotSaveStateError userInfo:@{
+// NSLocalizedDescriptionKey : @"Save state data could not be written",
+// NSLocalizedRecoverySuggestionErrorKey : @"The emulator could not write the state data."
+// }];
+ }
+
+ return nil;
+}
+
+- (BOOL)deserializeState:(NSData *)state withError:(NSError **)outError {
+ NSError *error;
+ const void *bytes = [state bytes];
+ size_t length = [state length];
+
+ MemoryStream stream(length, -1);
+ memcpy(stream.map(), bytes, length);
+ MDFNSS_LoadSM(&stream, true);
+ size_t serialSize = stream.map_size();
+
+ if(serialSize != length)
+ {
+ #pragma message "fix error log"
+// error = [NSError errorWithDomain:OEGameCoreErrorDomain
+// code:OEGameCoreStateHasWrongSizeError
+// userInfo:@{
+// NSLocalizedDescriptionKey : @"Save state has wrong file size.",
+// NSLocalizedRecoverySuggestionErrorKey : [NSString stringWithFormat:@"The size of the save state does not have the right size, %lu expected, got: %ld.", serialSize, [state length]],
+// }];
+ }
+
+ if(error) {
+ if(outError) {
+ *outError = error;
+ }
+ return false;
+ } else {
+ return true;
+ }
+}
+
+# pragma mark - Input
+
+// Map OE button order to Mednafen button order
+const int LynxMap[] = { 6, 7, 4, 5, 0, 1, 3, 2 };
+const int PCEMap[] = { 4, 6, 7, 5, 0, 1, 8, 9, 10, 11, 3, 2, 12 };
+const int PCFXMap[] = { 8, 10, 11, 9, 0, 1, 2, 3, 4, 5, 7, 6 };
+const int PSXMap[] = { 4, 6, 7, 5, 12, 13, 14, 15, 10, 8, 1, 11, 9, 2, 3, 0, 16, 24, 23, 22, 21, 20, 19, 18, 17 };
+const int VBMap[] = { 9, 8, 7, 6, 4, 13, 12, 5, 3, 2, 0, 1, 10, 11 };
+const int WSMap[] = { 0, 2, 3, 1, 4, 6, 7, 5, 9, 10, 8, 11 };
+const int NeoMap[] = { 0, 1, 2, 3, 4, 5, 6};
+
+#pragma mark Atari Lynx
+- (oneway void)didPushLynxButton:(OELynxButton)button forPlayer:(NSUInteger)player {
+ inputBuffer[player][0] |= 1 << LynxMap[button];
+}
+
+- (oneway void)didReleaseLynxButton:(OELynxButton)button forPlayer:(NSUInteger)player {
+ inputBuffer[player][0] &= ~(1 << LynxMap[button]);
+}
+
+- (NSInteger)LynxControllerValueForButtonID:(unsigned)buttonID forController:(GCController*)controller {
+ if ([controller extendedGamepad]) {
+ GCExtendedGamepad *pad = [controller extendedGamepad];
+ GCControllerDirectionPad *dpad = [pad dpad];
+ switch (buttonID) {
+ case OELynxButtonUp:
+ return [[dpad up] isPressed]?:[[[pad leftThumbstick] up] isPressed];
+ case OELynxButtonDown:
+ return [[dpad down] isPressed]?:[[[pad leftThumbstick] down] isPressed];
+ case OELynxButtonLeft:
+ return [[dpad left] isPressed]?:[[[pad leftThumbstick] left] isPressed];
+ case OELynxButtonRight:
+ return [[dpad right] isPressed]?:[[[pad leftThumbstick] right] isPressed];
+ case OELynxButtonB:
+ return [[pad buttonB] isPressed]?:[[pad buttonX] isPressed];
+ case OELynxButtonA:
+ return [[pad buttonA] isPressed]?:[[pad buttonY] isPressed];
+ case OELynxButtonOption1:
+ return [[pad leftShoulder] isPressed]?:[[pad leftTrigger] isPressed];
+ case OELynxButtonOption2:
+ return [[pad rightShoulder] isPressed]?:[[pad rightTrigger] isPressed];
+ default:
+ break;
+ }
+ } else if ([controller gamepad]) {
+ GCGamepad *pad = [controller gamepad];
+ GCControllerDirectionPad *dpad = [pad dpad];
+ switch (buttonID) {
+ case OELynxButtonUp:
+ return [[dpad up] isPressed];
+ case OELynxButtonDown:
+ return [[dpad down] isPressed];
+ case OELynxButtonLeft:
+ return [[dpad left] isPressed];
+ case OELynxButtonRight:
+ return [[dpad right] isPressed];
+ case OELynxButtonB:
+ return [[pad buttonB] isPressed]?:[[pad buttonX] isPressed];
+ case OELynxButtonA:
+ return [[pad buttonA] isPressed]?:[[pad buttonY] isPressed];
+ case OELynxButtonOption1:
+ return [[pad leftShoulder] isPressed];
+ case OELynxButtonOption2:
+ return [[pad rightShoulder] isPressed];
+ default:
+ break;
+ }
+ }
+#if TARGET_OS_TV
+ else if ([controller microGamepad]) {
+ GCMicroGamepad *pad = [controller microGamepad];
+ GCControllerDirectionPad *dpad = [pad dpad];
+ switch (buttonID) {
+ case OELynxButtonUp:
+ return [[dpad up] value] > 0.5;
+ break;
+ case OELynxButtonDown:
+ return [[dpad down] value] > 0.5;
+ break;
+ case OELynxButtonLeft:
+ return [[dpad left] value] > 0.5;
+ break;
+ case OELynxButtonRight:
+ return [[dpad right] value] > 0.5;
+ break;
+ case OELynxButtonA:
+ return [[pad buttonA] isPressed];
+ break;
+ case OELynxButtonB:
+ return [[pad buttonX] isPressed];
+ break;
+ default:
+ break;
+ }
+ }
+#endif
+ return 0;
+}
+
+#pragma mark Neo Geo
+- (oneway void)didPushNGPButton:(OENGPButton)button forPlayer:(NSUInteger)player
+{
+ inputBuffer[player][0] |= 1 << NeoMap[button];
+}
+
+- (oneway void)didReleaseNGPButton:(OENGPButton)button forPlayer:(NSUInteger)player
+{
+ inputBuffer[player][0] &= ~(1 << NeoMap[button]);
+}
+
+#pragma mark PC-*
+- (oneway void)didPushPCEButton:(OEPCEButton)button forPlayer:(NSUInteger)player
+{
+ if (button != OEPCEButtonMode) { // Check for six button mode toggle
+ inputBuffer[player][0] |= 1 << PCEMap[button];
+ } else {
+ inputBuffer[player][0] ^= 1 << PCEMap[button];
+ }
+}
+
+- (oneway void)didReleasePCEButton:(OEPCEButton)button forPlayer:(NSUInteger)player
+{
+ if (button != OEPCEButtonMode)
+ inputBuffer[player][0] &= ~(1 << PCEMap[button]);
+}
+
+- (oneway void)didPushPCECDButton:(OEPCECDButton)button forPlayer:(NSUInteger)player
+{
+ if (button != OEPCECDButtonMode) { // Check for six button mode toggle
+ inputBuffer[player][0] |= 1 << PCEMap[button];
+ } else {
+ inputBuffer[player][0] ^= 1 << PCEMap[button];
+ }
+}
+
+- (oneway void)didReleasePCECDButton:(OEPCECDButton)button forPlayer:(NSUInteger)player;
+{
+ if (button != OEPCECDButtonMode) {
+ inputBuffer[player][0] &= ~(1 << PCEMap[button]);
+ }
+}
+
+- (oneway void)didPushPCFXButton:(OEPCFXButton)button forPlayer:(NSUInteger)player;
+{
+ inputBuffer[player][0] |= 1 << PCFXMap[button];
+}
+
+- (oneway void)didReleasePCFXButton:(OEPCFXButton)button forPlayer:(NSUInteger)player;
+{
+ inputBuffer[player][0] &= ~(1 << PCFXMap[button]);
+}
+
+#pragma mark PSX
+- (oneway void)didPushPSXButton:(PVPSXButton)button forPlayer:(NSUInteger)player;
+{
+ inputBuffer[player][0] |= 1 << PSXMap[button];
+}
+
+- (oneway void)didReleasePSXButton:(PVPSXButton)button forPlayer:(NSUInteger)player;
+{
+ inputBuffer[player][0] &= ~(1 << PSXMap[button]);
+}
+
+- (oneway void)didMovePSXJoystickDirection:(PVPSXButton)button withValue:(CGFloat)value forPlayer:(NSUInteger)player
+{
+ int analogNumber = PSXMap[button] - 17;
+ uint8_t *buf = (uint8_t *)inputBuffer[player];
+ *(uint16*)& buf[3 + analogNumber * 2] = 32767 * value;
+}
+
+#pragma mark Virtual Boy
+- (oneway void)didPushVBButton:(OEVBButton)button forPlayer:(NSUInteger)player;
+{
+ inputBuffer[player][0] |= 1 << VBMap[button];
+}
+
+- (oneway void)didReleaseVBButton:(OEVBButton)button forPlayer:(NSUInteger)player;
+{
+ inputBuffer[player][0] &= ~(1 << VBMap[button]);
+}
+
+#pragma mark WonderSwan
+- (oneway void)didPushWSButton:(OEWSButton)button forPlayer:(NSUInteger)player;
+{
+ inputBuffer[player][0] |= 1 << WSMap[button];
+}
+
+- (oneway void)didReleaseWSButton:(OEWSButton)button forPlayer:(NSUInteger)player;
+{
+ inputBuffer[player][0] &= ~(1 << WSMap[button]);
+}
+
+- (NSInteger)controllerValueForButtonID:(unsigned)buttonID forPlayer:(NSInteger)player {
+ GCController *controller = nil;
+
+ if (player == 0) {
+ controller = self.controller1;
+ } else {
+ controller = self.controller2;
+ }
+
+ switch (systemType) {
+ case neogeo:
+ return [self NeoGeoValueForButtonID:buttonID forController:controller];
+ break;
+
+ case lynx:
+ return [self LynxControllerValueForButtonID:buttonID forController:controller];
+ break;
+
+ case pce:
+ case pcfx:
+ return [self PCEValueForButtonID:buttonID forController:controller];
+ break;
+
+ case psx:
+ return [self PSXcontrollerValueForButtonID:buttonID forController:controller];
+ break;
+
+ case vb:
+ return [self VirtualBoyControllerValueForButtonID:buttonID forController:controller];
+ break;
+
+ case wswan:
+ return [self WonderSwanControllerValueForButtonID:buttonID forController:controller];
+ break;
+
+ default:
+ break;
+ }
+
+ return 0;
+}
+
+- (NSInteger)NeoGeoValueForButtonID:(unsigned)buttonID forController:(GCController*)controller {
+ if ([controller extendedGamepad]) {
+ GCExtendedGamepad *pad = [controller extendedGamepad];
+ GCControllerDirectionPad *dpad = [pad dpad];
+ switch (buttonID) {
+ case OENGPButtonUp:
+ return [[dpad up] isPressed]?:[[[pad leftThumbstick] up] isPressed];
+ case OENGPButtonDown:
+ return [[dpad down] isPressed]?:[[[pad leftThumbstick] down] isPressed];
+ case OENGPButtonLeft:
+ return [[dpad left] isPressed]?:[[[pad leftThumbstick] left] isPressed];
+ case OENGPButtonRight:
+ return [[dpad right] isPressed]?:[[[pad leftThumbstick] right] isPressed];
+ case OENGPButtonB:
+ return [[pad buttonB] isPressed]?:[[pad buttonX] isPressed];
+ case OENGPButtonA:
+ return [[pad buttonA] isPressed]?:[[pad buttonY] isPressed];
+ case OENGPButtonOption:
+ return [[pad leftShoulder] isPressed]?:[[pad leftTrigger] isPressed] ?: [[pad rightShoulder] isPressed]?:[[pad rightTrigger] isPressed];
+ default:
+ break;
+ }
+ } else if ([controller gamepad]) {
+ GCGamepad *pad = [controller gamepad];
+ GCControllerDirectionPad *dpad = [pad dpad];
+ switch (buttonID) {
+ case OENGPButtonUp:
+ return [[dpad up] isPressed];
+ case OENGPButtonDown:
+ return [[dpad down] isPressed];
+ case OENGPButtonLeft:
+ return [[dpad left] isPressed];
+ case OENGPButtonRight:
+ return [[dpad right] isPressed];
+ case OENGPButtonB:
+ return [[pad buttonB] isPressed]?:[[pad buttonX] isPressed];
+ case OENGPButtonA:
+ return [[pad buttonA] isPressed]?:[[pad buttonY] isPressed];
+ case OENGPButtonOption:
+ return [[pad leftShoulder] isPressed] ?: [[pad rightShoulder] isPressed];
+ default:
+ break;
+ }
+ }
+#if TARGET_OS_TV
+ else if ([controller microGamepad])
+ {
+ GCMicroGamepad *pad = [controller microGamepad];
+ GCControllerDirectionPad *dpad = [pad dpad];
+ switch (buttonID) {
+ case OENGPButtonUp:
+ return [[dpad up] value] > 0.5;
+ break;
+ case OENGPButtonDown:
+ return [[dpad down] value] > 0.5;
+ break;
+ case OENGPButtonLeft:
+ return [[dpad left] value] > 0.5;
+ break;
+ case OENGPButtonRight:
+ return [[dpad right] value] > 0.5;
+ break;
+ case OENGPButtonA:
+ return [[pad buttonA] isPressed];
+ break;
+ case OENGPButtonB:
+ return [[pad buttonX] isPressed];
+ break;
+ default:
+ break;
+ }
+ }
+#endif
+ return 0;
+}
+
+- (NSInteger)PCEValueForButtonID:(unsigned)buttonID forController:(GCController*)controller {
+ if ([controller extendedGamepad])
+ {
+ GCExtendedGamepad *gamePad = [controller extendedGamepad];
+ GCControllerDirectionPad *dpad = [gamePad dpad];
+ switch (buttonID) {
+ case OEPCEButtonUp:
+ return [[dpad up] isPressed]?:[[[gamePad leftThumbstick] up] isPressed];
+ case OEPCEButtonDown:
+ return [[dpad down] isPressed]?:[[[gamePad leftThumbstick] down] isPressed];
+ case OEPCEButtonLeft:
+ return [[dpad left] isPressed]?:[[[gamePad leftThumbstick] left] isPressed];
+ case OEPCEButtonRight:
+ return [[dpad right] isPressed]?:[[[gamePad leftThumbstick] right] isPressed];
+ case OEPCEButton3:
+ return [[gamePad buttonX] isPressed];
+ case OEPCEButton2:
+ return [[gamePad buttonA] isPressed];
+ case OEPCEButton1:
+ return [[gamePad buttonB] isPressed];
+ case OEPCEButton4:
+ return [[gamePad leftShoulder] isPressed];
+ case OEPCEButton5:
+ return [[gamePad buttonY] isPressed];
+ case OEPCEButton6:
+ return [[gamePad rightShoulder] isPressed];
+ case OEPCEButtonMode:
+ return [[gamePad leftTrigger] isPressed];
+ case OEPCEButtonRun:
+ return [[gamePad leftTrigger] isPressed];
+ default:
+ break;
+ }
+ }
+ else if ([controller gamepad])
+ {
+ GCGamepad *gamePad = [controller gamepad];
+ GCControllerDirectionPad *dpad = [gamePad dpad];
+ switch (buttonID) {
+ case OEPCEButtonUp:
+ return [[dpad up] isPressed];
+ case OEPCEButtonDown:
+ return [[dpad down] isPressed];
+ case OEPCEButtonLeft:
+ return [[dpad left] isPressed];
+ case OEPCEButtonRight:
+ return [[dpad right] isPressed];
+ case OEPCEButton3:
+ return [[gamePad buttonX] isPressed];
+ case OEPCEButton2:
+ return [[gamePad buttonA] isPressed];
+ case OEPCEButton1:
+ return [[gamePad buttonB] isPressed];
+ case OEPCEButton4:
+ return [[gamePad leftShoulder] isPressed];
+ case OEPCEButton5:
+ return [[gamePad buttonY] isPressed];
+ case OEPCEButton6:
+ return [[gamePad rightShoulder] isPressed];
+ default:
+ break;
+ }
+ }
+#if TARGET_OS_TV
+ else if ([controller microGamepad])
+ {
+ GCMicroGamepad *gamePad = [controller microGamepad];
+ GCControllerDirectionPad *dpad = [gamePad dpad];
+ switch (buttonID) {
+ case OEPCEButtonUp:
+ return [[dpad up] value] > 0.5;
+ break;
+ case OEPCEButtonDown:
+ return [[dpad down] value] > 0.5;
+ break;
+ case OEPCEButtonLeft:
+ return [[dpad left] value] > 0.5;
+ break;
+ case OEPCEButtonRight:
+ return [[dpad right] value] > 0.5;
+ break;
+ case OEPCEButton2:
+ return [[gamePad buttonA] isPressed];
+ break;
+ case OEPCEButton1:
+ return [[gamePad buttonX] isPressed];
+ break;
+ default:
+ break;
+ }
+ }
+#endif
+
+ return 0;
+}
+
+- (float)PSXAnalogControllerValueForButtonID:(unsigned)buttonID forController:(GCController*)controller {
+ if ([controller extendedGamepad])
+ {
+ GCExtendedGamepad *pad = [controller extendedGamepad];
+ switch (buttonID) {
+ case OEPSXLeftAnalogUp:
+ return [pad leftThumbstick].up.value;
+ case OEPSXLeftAnalogDown:
+ return [pad leftThumbstick].down.value;
+ case OEPSXLeftAnalogLeft:
+ return [pad leftThumbstick].left.value;
+ case OEPSXLeftAnalogRight:
+ return [pad leftThumbstick].right.value;
+ case OEPSXRightAnalogUp:
+ return [pad rightThumbstick].up.value;
+ case OEPSXRightAnalogDown:
+ return [pad rightThumbstick].down.value;
+ case OEPSXRightAnalogLeft:
+ return [pad rightThumbstick].left.value;
+ case OEPSXRightAnalogRight:
+ return [pad rightThumbstick].right.value;
+ default:
+ break;
+ }
+ }
+ return 0;
+}
+
+- (NSInteger)PSXcontrollerValueForButtonID:(unsigned)buttonID forController:(GCController*)controller {
+ if ([controller extendedGamepad])
+ {
+ GCExtendedGamepad *pad = [controller extendedGamepad];
+ GCControllerDirectionPad *dpad = [pad dpad];
+ switch (buttonID) {
+ case PVPSXButtonUp:
+ return [[dpad up] isPressed];
+ case PVPSXButtonDown:
+ return [[dpad down] isPressed];
+ case PVPSXButtonLeft:
+ return [[dpad left] isPressed];
+ case PVPSXButtonRight:
+ return [[dpad right] isPressed];
+ case OEPSXLeftAnalogUp:
+ return [pad leftThumbstick].up.value;
+ case OEPSXLeftAnalogDown:
+ return [pad leftThumbstick].down.value;
+ case OEPSXLeftAnalogLeft:
+ return [pad leftThumbstick].left.value;
+ case OEPSXLeftAnalogRight:
+ return [pad leftThumbstick].right.value;
+ case PVPSXButtonSquare:
+ return [[pad buttonX] isPressed];
+ case PVPSXButtonCross:
+ return [[pad buttonA] isPressed];
+ case PVPSXButtonCircle:
+ return [[pad buttonB] isPressed];
+ case PVPSXButtonL1:
+ return [[pad leftShoulder] isPressed];
+ case PVPSXButtonTriangle:
+ return [[pad buttonY] isPressed];
+ case PVPSXButtonR1:
+ return [[pad rightShoulder] isPressed];
+ case PVPSXButtonStart:
+ return [[pad leftTrigger] isPressed];
+ case PVPSXButtonSelect:
+ return [[pad rightTrigger] isPressed];
+ default:
+ break;
+ }
+ }
+ else if ([controller gamepad])
+ {
+ GCGamepad *pad = [controller gamepad];
+ GCControllerDirectionPad *dpad = [pad dpad];
+ switch (buttonID) {
+ case PVPSXButtonUp:
+ return [[dpad up] isPressed];
+ case PVPSXButtonDown:
+ return [[dpad down] isPressed];
+ case PVPSXButtonLeft:
+ return [[dpad left] isPressed];
+ case PVPSXButtonRight:
+ return [[dpad right] isPressed];
+ case PVPSXButtonSquare:
+ return [[pad buttonX] isPressed];
+ case PVPSXButtonCross:
+ return [[pad buttonA] isPressed];
+ case PVPSXButtonCircle:
+ return [[pad buttonB] isPressed];
+ case PVPSXButtonL1:
+ return [[pad leftShoulder] isPressed];
+ case PVPSXButtonTriangle:
+ return [[pad buttonY] isPressed];
+ case PVPSXButtonR1:
+ return [[pad rightShoulder] isPressed];
+ default:
+ break;
+ }
+ }
+#if TARGET_OS_TV
+ else if ([controller microGamepad])
+ {
+ GCMicroGamepad *pad = [controller microGamepad];
+ GCControllerDirectionPad *dpad = [pad dpad];
+ switch (buttonID) {
+ case PVPSXButtonUp:
+ return [[dpad up] value] > 0.5;
+ break;
+ case PVPSXButtonDown:
+ return [[dpad down] value] > 0.5;
+ break;
+ case PVPSXButtonLeft:
+ return [[dpad left] value] > 0.5;
+ break;
+ case PVPSXButtonRight:
+ return [[dpad right] value] > 0.5;
+ break;
+ case PVPSXButtonCross:
+ return [[pad buttonA] isPressed];
+ break;
+ case PVPSXButtonCircle:
+ return [[pad buttonX] isPressed];
+ break;
+ default:
+ break;
+ }
+ }
+#endif
+ return 0;
+}
+
+- (NSInteger)VirtualBoyControllerValueForButtonID:(unsigned)buttonID forController:(GCController*)controller {
+ if ([controller extendedGamepad])
+ {
+ GCExtendedGamepad *pad = [controller extendedGamepad];
+ GCControllerDirectionPad *dpad = [pad dpad];
+ switch (buttonID) {
+ case OEVBButtonLeftUp:
+ return [[dpad up] isPressed]?:[[[pad leftThumbstick] up] isPressed];
+ case OEVBButtonLeftDown:
+ return [[dpad down] isPressed]?:[[[pad leftThumbstick] down] isPressed];
+ case OEVBButtonLeftLeft:
+ return [[dpad left] isPressed]?:[[[pad leftThumbstick] left] isPressed];
+ case OEVBButtonLeftRight:
+ return [[dpad right] isPressed]?:[[[pad leftThumbstick] right] isPressed];
+ case OEVBButtonRightUp:
+ return [[[pad rightThumbstick] up] isPressed];
+ case OEVBButtonRightDown:
+ return [[[pad rightThumbstick] down] isPressed];
+ case OEVBButtonRightLeft:
+ return [[[pad rightThumbstick] left] isPressed];
+ case OEVBButtonRightRight:
+ return [[[pad rightThumbstick] right] isPressed];
+ case OEVBButtonB:
+ return [[pad buttonB] isPressed]?:[[pad buttonX] isPressed];
+ case OEVBButtonA:
+ return [[pad buttonA] isPressed]?:[[pad buttonY] isPressed];
+ case OEVBButtonL:
+ return [[pad leftShoulder] isPressed];
+ case OEVBButtonR:
+ return [[pad rightShoulder] isPressed];
+ case OEVBButtonStart:
+ return [[pad leftTrigger] isPressed];
+ case OEVBButtonSelect:
+ return [[pad rightTrigger] isPressed];
+ default:
+ break;
+ }
+ }
+ else if ([controller gamepad])
+ {
+ GCGamepad *pad = [controller gamepad];
+ GCControllerDirectionPad *dpad = [pad dpad];
+ switch (buttonID) {
+ case OEVBButtonLeftUp:
+ return [[dpad up] isPressed];
+ case OEVBButtonLeftDown:
+ return [[dpad down] isPressed];
+ case OEVBButtonLeftLeft:
+ return [[dpad left] isPressed];
+ case OEVBButtonLeftRight:
+ return [[dpad right] isPressed];
+ case OEVBButtonB:
+ return [[pad buttonB] isPressed];
+ case OEVBButtonA:
+ return [[pad buttonA] isPressed];
+ case OEVBButtonL:
+ return [[pad leftShoulder] isPressed];
+ case OEVBButtonR:
+ return [[pad rightShoulder] isPressed];
+ case OEVBButtonStart:
+ return [[pad buttonX] isPressed];
+ case OEVBButtonSelect:
+ return [[pad buttonY] isPressed];
+ default:
+ break;
+ }
+ }
+#if TARGET_OS_TV
+ else if ([controller microGamepad])
+ {
+ GCMicroGamepad *pad = [controller microGamepad];
+ GCControllerDirectionPad *dpad = [pad dpad];
+ switch (buttonID) {
+ case OEVBButtonLeftUp:
+ return [[dpad up] value] > 0.5;
+ break;
+ case OEVBButtonLeftDown:
+ return [[dpad down] value] > 0.5;
+ break;
+ case OEVBButtonLeftLeft:
+ return [[dpad left] value] > 0.5;
+ break;
+ case OEVBButtonLeftRight:
+ return [[dpad right] value] > 0.5;
+ break;
+ case OEVBButtonA:
+ return [[pad buttonA] isPressed];
+ break;
+ case OEVBButtonB:
+ return [[pad buttonX] isPressed];
+ break;
+ default:
+ break;
+ }
+ }
+#endif
+ return 0;
+}
+
+- (NSInteger)WonderSwanControllerValueForButtonID:(unsigned)buttonID forController:(GCController*)controller {
+ if ([controller extendedGamepad])
+ {
+ GCExtendedGamepad *pad = [controller extendedGamepad];
+ GCControllerDirectionPad *dpad = [pad dpad];
+ switch (buttonID) {
+ /* WonderSwan has a Top (Y) D-Pad and a lower (X) D-Pad. MFi controllers
+ may have the Joy Stick and Left D-Pad in either Top/Bottom configuration.
+ Another Option is to map to Left/Right Joystick and Make left D-Pad same as
+ left JoyStick, but if the games require using Left/Right hand at same time it
+ may be difficult to his the right d-pad and action buttons at the same time.
+ -joe M */
+ case OEWSButtonX1:
+ return [[[pad leftThumbstick] up] isPressed];
+ case OEWSButtonX3:
+ return [[[pad leftThumbstick] down] isPressed];
+ case OEWSButtonX4:
+ return [[[pad leftThumbstick] left] isPressed];
+ case OEWSButtonX2:
+ return [[[pad leftThumbstick] right] isPressed];
+ case OEWSButtonY1:
+ return [[dpad up] isPressed];
+ case OEWSButtonY3:
+ return [[dpad down] isPressed];
+ case OEWSButtonY4:
+ return [[dpad left] isPressed];
+ case OEWSButtonY2:
+ return [[dpad right] isPressed];
+ case OEWSButtonA:
+ return [[pad buttonX] isPressed];
+ case OEWSButtonB:
+ return [[pad buttonA] isPressed];
+ case OEWSButtonStart:
+ return [[pad buttonB] isPressed];
+ case OEWSButtonSound:
+ return [[pad leftShoulder] isPressed];
+ default:
+ break;
+ }
+ }
+ else if ([controller gamepad])
+ {
+ GCGamepad *pad = [controller gamepad];
+ GCControllerDirectionPad *dpad = [pad dpad];
+ switch (buttonID) {
+ case OEWSButtonX1:
+ return [[dpad up] isPressed];
+ case OEWSButtonX3:
+ return [[dpad down] isPressed];
+ case OEWSButtonX4:
+ return [[dpad left] isPressed];
+ case OEWSButtonX2:
+ return [[dpad right] isPressed];
+ case OEWSButtonA:
+ return [[pad buttonX] isPressed];
+ case OEWSButtonB:
+ return [[pad buttonA] isPressed];
+ case OEWSButtonStart:
+ return [[pad buttonB] isPressed];
+ case OEWSButtonSound:
+ return [[pad leftShoulder] isPressed];
+ default:
+ break;
+ }
+ }
+#if TARGET_OS_TV
+ else if ([controller microGamepad])
+ {
+ GCMicroGamepad *pad = [controller microGamepad];
+ GCControllerDirectionPad *dpad = [pad dpad];
+ switch (buttonID) {
+ case OEWSButtonX1:
+ return [[dpad up] value] > 0.5;
+ break;
+ case OEWSButtonX3:
+ return [[dpad down] value] > 0.5;
+ break;
+ case OEWSButtonX4:
+ return [[dpad left] value] > 0.5;
+ break;
+ case OEWSButtonX2:
+ return [[dpad right] value] > 0.5;
+ break;
+ case OEWSButtonA:
+ return [[pad buttonA] isPressed];
+ break;
+ case OEWSButtonB:
+ return [[pad buttonX] isPressed];
+ break;
+ default:
+ break;
+ }
+ }
+#endif
+ return 0;
+}
+
+- (void)changeDisplayMode
+{
+ if (systemType == vb)
+ {
+ switch (MDFN_IEN_VB::mednafenCurrentDisplayMode)
+ {
+ case 0: // (2D) red/black
+ MDFN_IEN_VB::VIP_SetAnaglyphColors(0xFF0000, 0x000000);
+ MDFN_IEN_VB::VIP_SetParallaxDisable(true);
+ MDFN_IEN_VB::mednafenCurrentDisplayMode++;
+ break;
+
+ case 1: // (2D) white/black
+ MDFN_IEN_VB::VIP_SetAnaglyphColors(0xFFFFFF, 0x000000);
+ MDFN_IEN_VB::VIP_SetParallaxDisable(true);
+ MDFN_IEN_VB::mednafenCurrentDisplayMode++;
+ break;
+
+ case 2: // (2D) purple/black
+ MDFN_IEN_VB::VIP_SetAnaglyphColors(0xFF00FF, 0x000000);
+ MDFN_IEN_VB::VIP_SetParallaxDisable(true);
+ MDFN_IEN_VB::mednafenCurrentDisplayMode++;
+ break;
+
+ case 3: // (3D) red/blue
+ MDFN_IEN_VB::VIP_SetAnaglyphColors(0xFF0000, 0x0000FF);
+ MDFN_IEN_VB::VIP_SetParallaxDisable(false);
+ MDFN_IEN_VB::mednafenCurrentDisplayMode++;
+ break;
+
+ case 4: // (3D) red/cyan
+ MDFN_IEN_VB::VIP_SetAnaglyphColors(0xFF0000, 0x00B7EB);
+ MDFN_IEN_VB::VIP_SetParallaxDisable(false);
+ MDFN_IEN_VB::mednafenCurrentDisplayMode++;
+ break;
+
+ case 5: // (3D) red/electric cyan
+ MDFN_IEN_VB::VIP_SetAnaglyphColors(0xFF0000, 0x00FFFF);
+ MDFN_IEN_VB::VIP_SetParallaxDisable(false);
+ MDFN_IEN_VB::mednafenCurrentDisplayMode++;
+ break;
+
+ case 6: // (3D) red/green
+ MDFN_IEN_VB::VIP_SetAnaglyphColors(0xFF0000, 0x00FF00);
+ MDFN_IEN_VB::VIP_SetParallaxDisable(false);
+ MDFN_IEN_VB::mednafenCurrentDisplayMode++;
+ break;
+
+ case 7: // (3D) green/red
+ MDFN_IEN_VB::VIP_SetAnaglyphColors(0x00FF00, 0xFF0000);
+ MDFN_IEN_VB::VIP_SetParallaxDisable(false);
+ MDFN_IEN_VB::mednafenCurrentDisplayMode++;
+ break;
+
+ case 8: // (3D) yellow/blue
+ MDFN_IEN_VB::VIP_SetAnaglyphColors(0xFFFF00, 0x0000FF);
+ MDFN_IEN_VB::VIP_SetParallaxDisable(false);
+ MDFN_IEN_VB::mednafenCurrentDisplayMode = 0;
+ break;
+
+ default:
+ return;
+ break;
+ }
+ }
+}
+
+- (void)setDisc:(NSUInteger)discNumber {
+ uint32_t index = discNumber - 1; // 0-based index
+ MDFNI_SetMedia(0, 0, 0, 0); // open drive/eject disc
+
+ // Open/eject needs a bit of delay, so wait 1 second until inserting new disc
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
+ MDFNI_SetMedia(0, 2, index, 0); // close drive/insert disc (2 = close)
+ });
+}
+
+- (NSUInteger)discCount {
+ return maxDiscs ? maxDiscs : 1;
+}
+
+- (BOOL)supportsDiskSwapping {
+ switch (systemType) {
+ case psx:
+ return YES;
+ case neogeo:
+ case lynx:
+ case pce:
+ case pcfx:
+ case vb:
+ case wswan:
+ return NO;
+ }
+}
+
+@end
diff --git a/Mednafen/PVMednafen.xcodeproj/TemplateIcon.icns b/Mednafen/PVMednafen.xcodeproj/TemplateIcon.icns
new file mode 100644
index 0000000000..62cb7015e0
Binary files /dev/null and b/Mednafen/PVMednafen.xcodeproj/TemplateIcon.icns differ
diff --git a/Mednafen/PVMednafen.xcodeproj/project.pbxproj b/Mednafen/PVMednafen.xcodeproj/project.pbxproj
new file mode 100644
index 0000000000..7237a109c7
--- /dev/null
+++ b/Mednafen/PVMednafen.xcodeproj/project.pbxproj
@@ -0,0 +1,5417 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ B3223CDD1E09E0CA007BB244 /* MednafenGameCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 824088340FFDDCF400F0FE7D /* MednafenGameCore.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ B3223CDE1E09E0CB007BB244 /* MednafenGameCore.h in Headers */ = {isa = PBXBuildFile; fileRef = 824088340FFDDCF400F0FE7D /* MednafenGameCore.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ B340E4661E08887700AD0E8B /* PVMednafen.h in Headers */ = {isa = PBXBuildFile; fileRef = B340E4641E08887700AD0E8B /* PVMednafen.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ B340E4791E08893000AD0E8B /* c68k.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB6371A75DA89001F174F /* c68k.cpp */; };
+ B340E47A1E08893000AD0E8B /* c68kexec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB6381A75DA9C001F174F /* c68kexec.cpp */; };
+ B340E47B1E08893000AD0E8B /* MednafenGameCore.mm in Sources */ = {isa = PBXBuildFile; fileRef = 824088350FFDDCF400F0FE7D /* MednafenGameCore.mm */; };
+ B340E47C1E08893000AD0E8B /* video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC8317F1DE5D0090372A /* video.cpp */; };
+ B340E47D1E08893000AD0E8B /* negcon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D89317F1DE5C0090372A /* negcon.cpp */; };
+ B340E47E1E08893000AD0E8B /* ZLInflateFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB6231A75D6CB001F174F /* ZLInflateFilter.cpp */; };
+ B340E47F1E08893000AD0E8B /* soundbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D86417F1DE5C0090372A /* soundbox.cpp */; };
+ B340E4801E08893000AD0E8B /* galois.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D53317F1DE5A0090372A /* galois.cpp */; };
+ B340E4811E08893000AD0E8B /* PSFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D86A17F1DE5C0090372A /* PSFLoader.cpp */; };
+ B340E4821E08893000AD0E8B /* input.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D81E17F1DE5C0090372A /* input.cpp */; };
+ B340E4831E08893000AD0E8B /* res012.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC4417F1DE5D0090372A /* res012.c */; };
+ B340E4841E08893000AD0E8B /* hes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D81317F1DE5C0090372A /* hes.cpp */; };
+ B340E4851E08893000AD0E8B /* sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC9F17F1DE5E0090372A /* sound.cpp */; };
+ B340E4861E08893000AD0E8B /* arcade_card.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D64F17F1DE5B0090372A /* arcade_card.cpp */; };
+ B340E4871E08893000AD0E8B /* psx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D89D17F1DE5C0090372A /* psx.cpp */; };
+ B340E4881E08893000AD0E8B /* c65c02.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D67A17F1DE5B0090372A /* c65c02.cpp */; };
+ B340E4891E08893000AD0E8B /* OwlResampler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 948D5B4418C805E500346504 /* OwlResampler.cpp */; };
+ B340E48A1E08893000AD0E8B /* CDUtility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D52E17F1DE5A0090372A /* CDUtility.cpp */; };
+ B340E48B1E08893000AD0E8B /* huc6273.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D84A17F1DE5C0090372A /* huc6273.cpp */; };
+ B340E48C1E08893000AD0E8B /* crc32.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D53017F1DE5A0090372A /* crc32.cpp */; };
+ B340E48D1E08893000AD0E8B /* sio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D8A017F1DE5C0090372A /* sio.cpp */; };
+ B340E48F1E08893000AD0E8B /* mapping0.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC3917F1DE5D0090372A /* mapping0.c */; };
+ B340E4901E08893000AD0E8B /* registry.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC4217F1DE5D0090372A /* registry.c */; };
+ B340E4911E08893000AD0E8B /* okiadpcm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94817C381922B53900FDFC99 /* okiadpcm.cpp */; };
+ B340E4921E08893000AD0E8B /* mpc_demux.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D70117F1DE5B0090372A /* mpc_demux.c */; };
+ B340E4931E08893000AD0E8B /* mdec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D89917F1DE5C0090372A /* mdec.cpp */; };
+ B340E4941E08893000AD0E8B /* tcache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DCA217F1DE5E0090372A /* tcache.cpp */; };
+ B340E4951E08893000AD0E8B /* general.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D60B17F1DE5B0090372A /* general.cpp */; };
+ B340E4961E08893000AD0E8B /* vsu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC6317F1DE5D0090372A /* vsu.cpp */; };
+ B340E4971E08893000AD0E8B /* frontio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D87717F1DE5C0090372A /* frontio.cpp */; };
+ B340E4981E08893000AD0E8B /* framing.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC3017F1DE5D0090372A /* framing.c */; };
+ B340E4991E08893000AD0E8B /* triostr.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC5317F1DE5D0090372A /* triostr.c */; };
+ B340E49A1E08893000AD0E8B /* png.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC7317F1DE5D0090372A /* png.cpp */; };
+ B340E49B1E08893000AD0E8B /* synthesis.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC4617F1DE5D0090372A /* synthesis.c */; };
+ B340E49C1E08893000AD0E8B /* endian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D5CD17F1DE5B0090372A /* endian.cpp */; };
+ B340E49D1E08893000AD0E8B /* FileStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D5D317F1DE5B0090372A /* FileStream.cpp */; };
+ B340E49E1E08893000AD0E8B /* gpu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D87917F1DE5C0090372A /* gpu.cpp */; };
+ B340E49F1E08893000AD0E8B /* synth_filter.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D70D17F1DE5B0090372A /* synth_filter.c */; };
+ B340E4A01E08893000AD0E8B /* sha1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB62D1A75D73F001F174F /* sha1.cpp */; };
+ B340E4A11E08893000AD0E8B /* MemoryStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D6E517F1DE5B0090372A /* MemoryStream.cpp */; };
+ B340E4A21E08893000AD0E8B /* trio.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC5117F1DE5D0090372A /* trio.c */; };
+ B340E4A31E08893000AD0E8B /* vb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC5E17F1DE5D0090372A /* vb.cpp */; };
+ B340E4A41E08893000AD0E8B /* netplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7C417F1DE5B0090372A /* netplay.cpp */; };
+ B340E4A51E08893000AD0E8B /* debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D55917F1DE5A0090372A /* debug.cpp */; };
+ B340E4A61E08893000AD0E8B /* dualshock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D88517F1DE5C0090372A /* dualshock.cpp */; };
+ B340E4A71E08893000AD0E8B /* mpc_decoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D70017F1DE5B0090372A /* mpc_decoder.c */; };
+ B340E4A81E08893000AD0E8B /* mpc_bits_reader.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D6FE17F1DE5B0090372A /* mpc_bits_reader.c */; };
+ B340E4A91E08893000AD0E8B /* v30mz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DCA617F1DE5E0090372A /* v30mz.cpp */; };
+ B340E4AA1E08893000AD0E8B /* rtc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC9D17F1DE5E0090372A /* rtc.cpp */; };
+ B340E4AB1E08893000AD0E8B /* vip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC6017F1DE5D0090372A /* vip.cpp */; };
+ B340E4AC1E08893000AD0E8B /* mempatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D6E817F1DE5B0090372A /* mempatcher.cpp */; };
+ B340E4AD1E08893000AD0E8B /* irq.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D89517F1DE5C0090372A /* irq.cpp */; };
+ B340E4AE1E08893000AD0E8B /* dis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D87317F1DE5C0090372A /* dis.cpp */; };
+ B340E4AF1E08893000AD0E8B /* spu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D8A317F1DE5C0090372A /* spu.cpp */; };
+ B340E4B01E08893000AD0E8B /* thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94454E3617852E44006C057B /* thread.cpp */; };
+ B340E4B11E08893000AD0E8B /* dis_groups.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC8B17F1DE5D0090372A /* dis_groups.cpp */; };
+ B340E4B21E08893000AD0E8B /* memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D6E317F1DE5B0090372A /* memory.cpp */; };
+ B340E4B31E08893000AD0E8B /* qtrecord.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D8AA17F1DE5C0090372A /* qtrecord.cpp */; };
+ B340E4B41E08893000AD0E8B /* streaminfo.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D70B17F1DE5B0090372A /* streaminfo.c */; };
+ B340E4B51E08893000AD0E8B /* mednafen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D6E117F1DE5B0090372A /* mednafen.cpp */; };
+ B340E4B61E08893000AD0E8B /* Fir_Resampler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC0A17F1DE5D0090372A /* Fir_Resampler.cpp */; };
+ B340E4B71E08893000AD0E8B /* sharedbook.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC4517F1DE5D0090372A /* sharedbook.c */; };
+ B340E4B81E08893000AD0E8B /* Stream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC1417F1DE5D0090372A /* Stream.cpp */; };
+ B340E4B91E08893000AD0E8B /* gpu_line.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB6411A75DB60001F174F /* gpu_line.cpp */; };
+ B340E4BA1E08893000AD0E8B /* crc32.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D6F317F1DE5B0090372A /* crc32.c */; };
+ B340E4BB1E08893000AD0E8B /* movie.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D6EB17F1DE5B0090372A /* movie.cpp */; };
+ B340E4BC1E08893000AD0E8B /* CDAccess_Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D52817F1DE5A0090372A /* CDAccess_Image.cpp */; };
+ B340E4BD1E08893000AD0E8B /* gte.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D87F17F1DE5C0090372A /* gte.cpp */; };
+ B340E4BE1E08893000AD0E8B /* guncon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D88917F1DE5C0090372A /* guncon.cpp */; };
+ B340E4BF1E08893000AD0E8B /* v810_fp_ops.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94817C3D1922B75000FDFC99 /* v810_fp_ops.cpp */; };
+ B340E4C01E08893000AD0E8B /* system.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D68F17F1DE5B0090372A /* system.cpp */; };
+ B340E4C11E08893000AD0E8B /* text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC8017F1DE5D0090372A /* text.cpp */; };
+ B340E4C21E08893000AD0E8B /* ConvertUTF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC1817F1DE5D0090372A /* ConvertUTF.cpp */; };
+ B340E4C31E08893000AD0E8B /* z80.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D64517F1DE5B0090372A /* z80.cpp */; };
+ B340E4C41E08893000AD0E8B /* file.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D5D117F1DE5B0090372A /* file.cpp */; };
+ B340E4C51E08893000AD0E8B /* huc6280.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D62C17F1DE5B0090372A /* huc6280.cpp */; };
+ B340E4C61E08893000AD0E8B /* CDAccess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D52417F1DE5A0090372A /* CDAccess.cpp */; };
+ B340E4C71E08893000AD0E8B /* justifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D88B17F1DE5C0090372A /* justifier.cpp */; };
+ B340E4C81E08893000AD0E8B /* CDAFReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94B0824B1A8697EF00D3C0BC /* CDAFReader.cpp */; };
+ B340E4C91E08893000AD0E8B /* mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D84F17F1DE5C0090372A /* mouse.cpp */; };
+ B340E4CA1E08893000AD0E8B /* codebook.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC2917F1DE5D0090372A /* codebook.c */; };
+ B340E4CB1E08893000AD0E8B /* stubs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94454E3B17852E61006C057B /* stubs.cpp */; };
+ B340E4CC1E08893000AD0E8B /* player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D86817F1DE5C0090372A /* player.cpp */; };
+ B340E4CD1E08893000AD0E8B /* l-ec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D53417F1DE5A0090372A /* l-ec.cpp */; };
+ B340E4CE1E08893000AD0E8B /* settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D8B617F1DE5C0090372A /* settings.cpp */; };
+ B340E4CF1E08893000AD0E8B /* trionan.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC5217F1DE5D0090372A /* trionan.c */; };
+ B340E4D01E08893000AD0E8B /* huffman.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D6F817F1DE5B0090372A /* huffman.c */; };
+ B340E4D11E08893000AD0E8B /* bitwise.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC2517F1DE5D0090372A /* bitwise.c */; };
+ B340E4D21E08893000AD0E8B /* md5.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB62B1A75D73F001F174F /* md5.cpp */; };
+ B340E4D31E08893000AD0E8B /* tblur.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC7E17F1DE5D0090372A /* tblur.cpp */; };
+ B340E4D41E08893000AD0E8B /* vorbisfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC4817F1DE5D0090372A /* vorbisfile.c */; };
+ B340E4D51E08893000AD0E8B /* minilzo.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D54917F1DE5A0090372A /* minilzo.c */; };
+ B340E4D61E08893000AD0E8B /* pcecd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94FD853018C7F53C001B426D /* pcecd.cpp */; };
+ B340E4D71E08893000AD0E8B /* cpu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D86F17F1DE5C0090372A /* cpu.cpp */; };
+ B340E4D81E08893000AD0E8B /* mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D81A17F1DE5C0090372A /* mouse.cpp */; };
+ B340E4D91E08893000AD0E8B /* requant.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D70917F1DE5B0090372A /* requant.c */; };
+ B340E4DA1E08893000AD0E8B /* git.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB61E1A75D654001F174F /* git.cpp */; };
+ B340E4DB1E08893000AD0E8B /* surface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC7C17F1DE5D0090372A /* surface.cpp */; };
+ B340E4DC1E08893000AD0E8B /* Deinterlacer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC6617F1DE5D0090372A /* Deinterlacer.cpp */; };
+ B340E4DD1E08893000AD0E8B /* gfx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC9417F1DE5D0090372A /* gfx.cpp */; };
+ B340E4DE1E08893000AD0E8B /* fxscsi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D84717F1DE5C0090372A /* fxscsi.cpp */; };
+ B340E4DF1E08893000AD0E8B /* gpu_sprite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB6431A75DB60001F174F /* gpu_sprite.cpp */; };
+ B340E4E01E08893000AD0E8B /* trim.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94FD853318C7F58C001B426D /* trim.cpp */; };
+ B340E4E11E08893000AD0E8B /* input.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D85117F1DE5C0090372A /* input.cpp */; };
+ B340E4E21E08893000AD0E8B /* multitap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D89117F1DE5C0090372A /* multitap.cpp */; };
+ B340E4E31E08893000AD0E8B /* memmap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D68417F1DE5B0090372A /* memmap.cpp */; };
+ B340E4E41E08893000AD0E8B /* state_rewind.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB6591A75DC7B001F174F /* state_rewind.cpp */; };
+ B340E4E51E08893000AD0E8B /* cart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D67C17F1DE5B0090372A /* cart.cpp */; };
+ B340E4E61E08893000AD0E8B /* ram.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D68817F1DE5B0090372A /* ram.cpp */; };
+ B340E4E71E08893000AD0E8B /* mikie.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D68617F1DE5B0090372A /* mikie.cpp */; };
+ B340E4E81E08893000AD0E8B /* interrupt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC9617F1DE5D0090372A /* interrupt.cpp */; };
+ B340E4E91E08893000AD0E8B /* syntax.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC9117F1DE5D0090372A /* syntax.cpp */; };
+ B340E4EA1E08893000AD0E8B /* mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D88F17F1DE5C0090372A /* mouse.cpp */; };
+ B340E4EB1E08893000AD0E8B /* lec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D53517F1DE5A0090372A /* lec.cpp */; };
+ B340E4EC1E08893000AD0E8B /* dis_decode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC8A17F1DE5D0090372A /* dis_decode.cpp */; };
+ B340E4ED1E08893000AD0E8B /* interrupt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D85317F1DE5C0090372A /* interrupt.cpp */; };
+ B340E4EE1E08893000AD0E8B /* dma.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D87517F1DE5C0090372A /* dma.cpp */; };
+ B340E4EF1E08893000AD0E8B /* tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC1F17F1DE5D0090372A /* tests.cpp */; };
+ B340E4F01E08893000AD0E8B /* cdc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D86D17F1DE5C0090372A /* cdc.cpp */; };
+ B340E4F11E08893000AD0E8B /* dualanalog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D88317F1DE5C0090372A /* dualanalog.cpp */; };
+ B340E4F21E08893000AD0E8B /* huc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D81517F1DE5C0090372A /* huc.cpp */; };
+ B340E4F31E08893000AD0E8B /* memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC9B17F1DE5E0090372A /* memory.cpp */; };
+ B340E4F41E08893000AD0E8B /* cdplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94817C2A1922B45500FDFC99 /* cdplay.cpp */; };
+ B340E4F51E08893000AD0E8B /* eeprom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC9217F1DE5D0090372A /* eeprom.cpp */; };
+ B340E4F61E08893000AD0E8B /* vce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D82D17F1DE5C0090372A /* vce.cpp */; };
+ B340E4F71E08893000AD0E8B /* window.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC4A17F1DE5D0090372A /* window.c */; };
+ B340E4F81E08893000AD0E8B /* quicklz.c in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB6541A75DC2D001F174F /* quicklz.c */; };
+ B340E4F91E08893000AD0E8B /* CDAFReader_MPC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94B082451A8697EF00D3C0BC /* CDAFReader_MPC.cpp */; };
+ B340E4FA1E08893000AD0E8B /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D8A817F1DE5C0090372A /* timer.cpp */; };
+ B340E4FB1E08893000AD0E8B /* Blip_Buffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC0917F1DE5D0090372A /* Blip_Buffer.cpp */; };
+ B340E4FC1E08893000AD0E8B /* tsushinkb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D81C17F1DE5C0090372A /* tsushinkb.cpp */; };
+ B340E4FD1E08893000AD0E8B /* mcgenjin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D82217F1DE5C0090372A /* mcgenjin.cpp */; };
+ B340E4FE1E08893000AD0E8B /* pcfx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D86017F1DE5C0090372A /* pcfx.cpp */; };
+ B340E4FF1E08893000AD0E8B /* gpu_polygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB6421A75DB60001F174F /* gpu_polygon.cpp */; };
+ B340E5001E08893000AD0E8B /* gamepad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D88717F1DE5C0090372A /* gamepad.cpp */; };
+ B340E5011E08893000AD0E8B /* vdc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D67317F1DE5B0090372A /* vdc.cpp */; };
+ B340E5021E08893000AD0E8B /* rainbow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D86217F1DE5C0090372A /* rainbow.cpp */; };
+ B340E5031E08893000AD0E8B /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC5C17F1DE5D0090372A /* timer.cpp */; };
+ B340E5041E08893000AD0E8B /* GZFileStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94B082511A86982900D3C0BC /* GZFileStream.cpp */; };
+ B340E5051E08893000AD0E8B /* IPSPatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB6261A75D70C001F174F /* IPSPatcher.cpp */; };
+ B340E5061E08893000AD0E8B /* rom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D68A17F1DE5B0090372A /* rom.cpp */; };
+ B340E5071E08893000AD0E8B /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D54E17F1DE5A0090372A /* unzip.c */; };
+ B340E5081E08893000AD0E8B /* resample.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D8B017F1DE5C0090372A /* resample.c */; };
+ B340E5091E08893000AD0E8B /* cdromif.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D52C17F1DE5A0090372A /* cdromif.cpp */; };
+ B340E50A1E08893000AD0E8B /* comm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9454E32919516301005A5CFE /* comm.cpp */; };
+ B340E50B1E08893000AD0E8B /* error.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D5CF17F1DE5B0090372A /* error.cpp */; };
+ B340E50C1E08893000AD0E8B /* pce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D82517F1DE5C0090372A /* pce.cpp */; };
+ B340E50D1E08893000AD0E8B /* info.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC3117F1DE5D0090372A /* info.c */; };
+ B340E50E1E08893000AD0E8B /* king.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D85A17F1DE5C0090372A /* king.cpp */; };
+ B340E50F1E08893000AD0E8B /* resize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC7817F1DE5D0090372A /* resize.cpp */; };
+ B340E5101E08893000AD0E8B /* v810_cpu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D63B17F1DE5B0090372A /* v810_cpu.cpp */; };
+ B340E5111E08893000AD0E8B /* WAVRecord.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC0E17F1DE5D0090372A /* WAVRecord.cpp */; };
+ B340E5121E08893000AD0E8B /* block.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC2617F1DE5D0090372A /* block.c */; };
+ B340E5131E08893000AD0E8B /* memcard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D88D17F1DE5C0090372A /* memcard.cpp */; };
+ B340E5141E08893000AD0E8B /* gamepad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D84D17F1DE5C0090372A /* gamepad.cpp */; };
+ B340E5151E08893000AD0E8B /* pce_psg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D66017F1DE5B0090372A /* pce_psg.cpp */; };
+ B340E5161E08893000AD0E8B /* state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC1217F1DE5D0090372A /* state.cpp */; };
+ B340E5171E08893000AD0E8B /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D86617F1DE5C0090372A /* timer.cpp */; };
+ B340E5181E08893000AD0E8B /* CDAFReader_Vorbis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94B082491A8697EF00D3C0BC /* CDAFReader_Vorbis.cpp */; };
+ B340E5191E08893000AD0E8B /* floor0.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC2E17F1DE5D0090372A /* floor0.c */; };
+ B340E51A1E08893000AD0E8B /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D54417F1DE5A0090372A /* ioapi.c */; };
+ B340E51B1E08893000AD0E8B /* mdct.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC3A17F1DE5D0090372A /* mdct.c */; };
+ B340E51C1E08893000AD0E8B /* CDAccess_CCD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D52617F1DE5A0090372A /* CDAccess_CCD.cpp */; };
+ B340E51D1E08893000AD0E8B /* recover-raw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D53A17F1DE5A0090372A /* recover-raw.cpp */; };
+ B340E51E1E08893000AD0E8B /* scsicd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D53C17F1DE5A0090372A /* scsicd.cpp */; };
+ B340E51F1E08893000AD0E8B /* tsushin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D82B17F1DE5C0090372A /* tsushin.cpp */; };
+ B340E5201E08893000AD0E8B /* font-data.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC6A17F1DE5D0090372A /* font-data.cpp */; };
+ B340E5211E08893000AD0E8B /* floor1.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC2F17F1DE5D0090372A /* floor1.c */; };
+ B340E5221E08893000AD0E8B /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC9817F1DE5D0090372A /* main.cpp */; };
+ B340E5231E08893000AD0E8B /* susie.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D68C17F1DE5B0090372A /* susie.cpp */; };
+ B340E5241E08893000AD0E8B /* jrevdct.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D85617F1DE5C0090372A /* jrevdct.cpp */; };
+ B340E5251E08893000AD0E8B /* gamepad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D81817F1DE5C0090372A /* gamepad.cpp */; };
+ B340E5261E08893000AD0E8B /* escape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC1A17F1DE5D0090372A /* escape.cpp */; };
+ B340E5271E08893000AD0E8B /* input.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC5817F1DE5D0090372A /* input.cpp */; };
+ B340E5281E08893000AD0E8B /* resolve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC9017F1DE5D0090372A /* resolve.cpp */; };
+ B340E5291E08893000AD0E8B /* Stereo_Buffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC0D17F1DE5D0090372A /* Stereo_Buffer.cpp */; };
+ B340E52A1E08893000AD0E8B /* cputest.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D55217F1DE5A0090372A /* cputest.c */; };
+ B340E52C1E08893000AD0E8B /* demo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D55C17F1DE5A0090372A /* demo.cpp */; };
+ B340E52D1E08893000AD0E8B /* sha256.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB62F1A75D73F001F174F /* sha256.cpp */; };
+ B340E52E1E08893000AD0E8B /* primitives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC7517F1DE5D0090372A /* primitives.cpp */; };
+ B340E52F1E08893000AD0E8B /* c68k.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB6371A75DA89001F174F /* c68k.cpp */; };
+ B340E5301E08893000AD0E8B /* c68kexec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB6381A75DA9C001F174F /* c68kexec.cpp */; };
+ B340E5311E08893000AD0E8B /* MednafenGameCore.mm in Sources */ = {isa = PBXBuildFile; fileRef = 824088350FFDDCF400F0FE7D /* MednafenGameCore.mm */; };
+ B340E5321E08893000AD0E8B /* video.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC8317F1DE5D0090372A /* video.cpp */; };
+ B340E5331E08893000AD0E8B /* negcon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D89317F1DE5C0090372A /* negcon.cpp */; };
+ B340E5341E08893000AD0E8B /* ZLInflateFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB6231A75D6CB001F174F /* ZLInflateFilter.cpp */; };
+ B340E5351E08893000AD0E8B /* soundbox.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D86417F1DE5C0090372A /* soundbox.cpp */; };
+ B340E5361E08893000AD0E8B /* galois.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D53317F1DE5A0090372A /* galois.cpp */; };
+ B340E5371E08893000AD0E8B /* PSFLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D86A17F1DE5C0090372A /* PSFLoader.cpp */; };
+ B340E5381E08893000AD0E8B /* input.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D81E17F1DE5C0090372A /* input.cpp */; };
+ B340E5391E08893000AD0E8B /* res012.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC4417F1DE5D0090372A /* res012.c */; };
+ B340E53A1E08893000AD0E8B /* hes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D81317F1DE5C0090372A /* hes.cpp */; };
+ B340E53B1E08893000AD0E8B /* sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC9F17F1DE5E0090372A /* sound.cpp */; };
+ B340E53C1E08893000AD0E8B /* arcade_card.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D64F17F1DE5B0090372A /* arcade_card.cpp */; };
+ B340E53D1E08893000AD0E8B /* psx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D89D17F1DE5C0090372A /* psx.cpp */; };
+ B340E53E1E08893000AD0E8B /* c65c02.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D67A17F1DE5B0090372A /* c65c02.cpp */; };
+ B340E53F1E08893000AD0E8B /* OwlResampler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 948D5B4418C805E500346504 /* OwlResampler.cpp */; };
+ B340E5401E08893000AD0E8B /* CDUtility.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D52E17F1DE5A0090372A /* CDUtility.cpp */; };
+ B340E5411E08893000AD0E8B /* huc6273.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D84A17F1DE5C0090372A /* huc6273.cpp */; };
+ B340E5421E08893000AD0E8B /* crc32.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D53017F1DE5A0090372A /* crc32.cpp */; };
+ B340E5431E08893000AD0E8B /* sio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D8A017F1DE5C0090372A /* sio.cpp */; };
+ B340E5451E08893000AD0E8B /* mapping0.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC3917F1DE5D0090372A /* mapping0.c */; };
+ B340E5461E08893000AD0E8B /* registry.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC4217F1DE5D0090372A /* registry.c */; };
+ B340E5471E08893000AD0E8B /* okiadpcm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94817C381922B53900FDFC99 /* okiadpcm.cpp */; };
+ B340E5481E08893000AD0E8B /* mpc_demux.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D70117F1DE5B0090372A /* mpc_demux.c */; };
+ B340E5491E08893000AD0E8B /* mdec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D89917F1DE5C0090372A /* mdec.cpp */; };
+ B340E54A1E08893000AD0E8B /* tcache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DCA217F1DE5E0090372A /* tcache.cpp */; };
+ B340E54B1E08893000AD0E8B /* general.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D60B17F1DE5B0090372A /* general.cpp */; };
+ B340E54C1E08893000AD0E8B /* vsu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC6317F1DE5D0090372A /* vsu.cpp */; };
+ B340E54D1E08893000AD0E8B /* frontio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D87717F1DE5C0090372A /* frontio.cpp */; };
+ B340E54E1E08893000AD0E8B /* framing.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC3017F1DE5D0090372A /* framing.c */; };
+ B340E54F1E08893000AD0E8B /* triostr.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC5317F1DE5D0090372A /* triostr.c */; };
+ B340E5501E08893000AD0E8B /* png.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC7317F1DE5D0090372A /* png.cpp */; };
+ B340E5511E08893000AD0E8B /* synthesis.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC4617F1DE5D0090372A /* synthesis.c */; };
+ B340E5521E08893000AD0E8B /* endian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D5CD17F1DE5B0090372A /* endian.cpp */; };
+ B340E5531E08893000AD0E8B /* FileStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D5D317F1DE5B0090372A /* FileStream.cpp */; };
+ B340E5541E08893000AD0E8B /* gpu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D87917F1DE5C0090372A /* gpu.cpp */; };
+ B340E5551E08893000AD0E8B /* synth_filter.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D70D17F1DE5B0090372A /* synth_filter.c */; };
+ B340E5561E08893000AD0E8B /* sha1.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB62D1A75D73F001F174F /* sha1.cpp */; };
+ B340E5571E08893000AD0E8B /* MemoryStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D6E517F1DE5B0090372A /* MemoryStream.cpp */; };
+ B340E5581E08893000AD0E8B /* trio.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC5117F1DE5D0090372A /* trio.c */; };
+ B340E5591E08893000AD0E8B /* vb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC5E17F1DE5D0090372A /* vb.cpp */; };
+ B340E55A1E08893000AD0E8B /* netplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7C417F1DE5B0090372A /* netplay.cpp */; };
+ B340E55B1E08893000AD0E8B /* debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D55917F1DE5A0090372A /* debug.cpp */; };
+ B340E55C1E08893000AD0E8B /* dualshock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D88517F1DE5C0090372A /* dualshock.cpp */; };
+ B340E55D1E08893000AD0E8B /* mpc_decoder.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D70017F1DE5B0090372A /* mpc_decoder.c */; };
+ B340E55E1E08893000AD0E8B /* mpc_bits_reader.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D6FE17F1DE5B0090372A /* mpc_bits_reader.c */; };
+ B340E55F1E08893000AD0E8B /* v30mz.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DCA617F1DE5E0090372A /* v30mz.cpp */; };
+ B340E5601E08893000AD0E8B /* rtc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC9D17F1DE5E0090372A /* rtc.cpp */; };
+ B340E5611E08893000AD0E8B /* vip.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC6017F1DE5D0090372A /* vip.cpp */; };
+ B340E5621E08893000AD0E8B /* mempatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D6E817F1DE5B0090372A /* mempatcher.cpp */; };
+ B340E5631E08893000AD0E8B /* irq.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D89517F1DE5C0090372A /* irq.cpp */; };
+ B340E5641E08893000AD0E8B /* dis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D87317F1DE5C0090372A /* dis.cpp */; };
+ B340E5651E08893000AD0E8B /* spu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D8A317F1DE5C0090372A /* spu.cpp */; };
+ B340E5661E08893000AD0E8B /* thread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94454E3617852E44006C057B /* thread.cpp */; };
+ B340E5671E08893000AD0E8B /* dis_groups.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC8B17F1DE5D0090372A /* dis_groups.cpp */; };
+ B340E5681E08893000AD0E8B /* memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D6E317F1DE5B0090372A /* memory.cpp */; };
+ B340E5691E08893000AD0E8B /* qtrecord.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D8AA17F1DE5C0090372A /* qtrecord.cpp */; };
+ B340E56A1E08893000AD0E8B /* streaminfo.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D70B17F1DE5B0090372A /* streaminfo.c */; };
+ B340E56B1E08893000AD0E8B /* mednafen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D6E117F1DE5B0090372A /* mednafen.cpp */; };
+ B340E56C1E08893000AD0E8B /* Fir_Resampler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC0A17F1DE5D0090372A /* Fir_Resampler.cpp */; };
+ B340E56D1E08893000AD0E8B /* sharedbook.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC4517F1DE5D0090372A /* sharedbook.c */; };
+ B340E56E1E08893000AD0E8B /* Stream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC1417F1DE5D0090372A /* Stream.cpp */; };
+ B340E56F1E08893000AD0E8B /* gpu_line.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB6411A75DB60001F174F /* gpu_line.cpp */; };
+ B340E5701E08893000AD0E8B /* crc32.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D6F317F1DE5B0090372A /* crc32.c */; };
+ B340E5711E08893000AD0E8B /* movie.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D6EB17F1DE5B0090372A /* movie.cpp */; };
+ B340E5721E08893000AD0E8B /* CDAccess_Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D52817F1DE5A0090372A /* CDAccess_Image.cpp */; };
+ B340E5731E08893000AD0E8B /* gte.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D87F17F1DE5C0090372A /* gte.cpp */; };
+ B340E5741E08893000AD0E8B /* guncon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D88917F1DE5C0090372A /* guncon.cpp */; };
+ B340E5751E08893000AD0E8B /* v810_fp_ops.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94817C3D1922B75000FDFC99 /* v810_fp_ops.cpp */; };
+ B340E5761E08893000AD0E8B /* system.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D68F17F1DE5B0090372A /* system.cpp */; };
+ B340E5771E08893000AD0E8B /* text.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC8017F1DE5D0090372A /* text.cpp */; };
+ B340E5781E08893000AD0E8B /* ConvertUTF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC1817F1DE5D0090372A /* ConvertUTF.cpp */; };
+ B340E5791E08893000AD0E8B /* z80.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D64517F1DE5B0090372A /* z80.cpp */; };
+ B340E57A1E08893000AD0E8B /* file.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D5D117F1DE5B0090372A /* file.cpp */; };
+ B340E57B1E08893000AD0E8B /* huc6280.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D62C17F1DE5B0090372A /* huc6280.cpp */; };
+ B340E57C1E08893000AD0E8B /* CDAccess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D52417F1DE5A0090372A /* CDAccess.cpp */; };
+ B340E57D1E08893000AD0E8B /* justifier.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D88B17F1DE5C0090372A /* justifier.cpp */; };
+ B340E57E1E08893000AD0E8B /* CDAFReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94B0824B1A8697EF00D3C0BC /* CDAFReader.cpp */; };
+ B340E57F1E08893000AD0E8B /* mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D84F17F1DE5C0090372A /* mouse.cpp */; };
+ B340E5801E08893000AD0E8B /* codebook.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC2917F1DE5D0090372A /* codebook.c */; };
+ B340E5811E08893000AD0E8B /* stubs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94454E3B17852E61006C057B /* stubs.cpp */; };
+ B340E5821E08893000AD0E8B /* player.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D86817F1DE5C0090372A /* player.cpp */; };
+ B340E5831E08893000AD0E8B /* l-ec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D53417F1DE5A0090372A /* l-ec.cpp */; };
+ B340E5841E08893000AD0E8B /* settings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D8B617F1DE5C0090372A /* settings.cpp */; };
+ B340E5851E08893000AD0E8B /* trionan.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC5217F1DE5D0090372A /* trionan.c */; };
+ B340E5861E08893000AD0E8B /* huffman.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D6F817F1DE5B0090372A /* huffman.c */; };
+ B340E5871E08893000AD0E8B /* bitwise.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC2517F1DE5D0090372A /* bitwise.c */; };
+ B340E5881E08893000AD0E8B /* md5.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB62B1A75D73F001F174F /* md5.cpp */; };
+ B340E5891E08893000AD0E8B /* tblur.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC7E17F1DE5D0090372A /* tblur.cpp */; };
+ B340E58A1E08893000AD0E8B /* vorbisfile.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC4817F1DE5D0090372A /* vorbisfile.c */; };
+ B340E58B1E08893000AD0E8B /* minilzo.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D54917F1DE5A0090372A /* minilzo.c */; };
+ B340E58C1E08893000AD0E8B /* pcecd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94FD853018C7F53C001B426D /* pcecd.cpp */; };
+ B340E58D1E08893000AD0E8B /* cpu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D86F17F1DE5C0090372A /* cpu.cpp */; };
+ B340E58E1E08893000AD0E8B /* mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D81A17F1DE5C0090372A /* mouse.cpp */; };
+ B340E58F1E08893000AD0E8B /* requant.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D70917F1DE5B0090372A /* requant.c */; };
+ B340E5901E08893000AD0E8B /* git.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB61E1A75D654001F174F /* git.cpp */; };
+ B340E5911E08893000AD0E8B /* surface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC7C17F1DE5D0090372A /* surface.cpp */; };
+ B340E5921E08893000AD0E8B /* Deinterlacer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC6617F1DE5D0090372A /* Deinterlacer.cpp */; };
+ B340E5931E08893000AD0E8B /* gfx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC9417F1DE5D0090372A /* gfx.cpp */; };
+ B340E5941E08893000AD0E8B /* fxscsi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D84717F1DE5C0090372A /* fxscsi.cpp */; };
+ B340E5951E08893000AD0E8B /* gpu_sprite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB6431A75DB60001F174F /* gpu_sprite.cpp */; };
+ B340E5961E08893000AD0E8B /* trim.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94FD853318C7F58C001B426D /* trim.cpp */; };
+ B340E5971E08893000AD0E8B /* input.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D85117F1DE5C0090372A /* input.cpp */; };
+ B340E5981E08893000AD0E8B /* multitap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D89117F1DE5C0090372A /* multitap.cpp */; };
+ B340E5991E08893000AD0E8B /* memmap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D68417F1DE5B0090372A /* memmap.cpp */; };
+ B340E59A1E08893000AD0E8B /* state_rewind.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB6591A75DC7B001F174F /* state_rewind.cpp */; };
+ B340E59B1E08893000AD0E8B /* cart.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D67C17F1DE5B0090372A /* cart.cpp */; };
+ B340E59C1E08893000AD0E8B /* ram.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D68817F1DE5B0090372A /* ram.cpp */; };
+ B340E59D1E08893000AD0E8B /* mikie.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D68617F1DE5B0090372A /* mikie.cpp */; };
+ B340E59E1E08893000AD0E8B /* interrupt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC9617F1DE5D0090372A /* interrupt.cpp */; };
+ B340E59F1E08893000AD0E8B /* syntax.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC9117F1DE5D0090372A /* syntax.cpp */; };
+ B340E5A01E08893000AD0E8B /* mouse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D88F17F1DE5C0090372A /* mouse.cpp */; };
+ B340E5A11E08893000AD0E8B /* lec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D53517F1DE5A0090372A /* lec.cpp */; };
+ B340E5A21E08893000AD0E8B /* dis_decode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC8A17F1DE5D0090372A /* dis_decode.cpp */; };
+ B340E5A31E08893000AD0E8B /* interrupt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D85317F1DE5C0090372A /* interrupt.cpp */; };
+ B340E5A41E08893000AD0E8B /* dma.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D87517F1DE5C0090372A /* dma.cpp */; };
+ B340E5A51E08893000AD0E8B /* tests.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC1F17F1DE5D0090372A /* tests.cpp */; };
+ B340E5A61E08893000AD0E8B /* cdc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D86D17F1DE5C0090372A /* cdc.cpp */; };
+ B340E5A71E08893000AD0E8B /* dualanalog.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D88317F1DE5C0090372A /* dualanalog.cpp */; };
+ B340E5A81E08893000AD0E8B /* huc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D81517F1DE5C0090372A /* huc.cpp */; };
+ B340E5A91E08893000AD0E8B /* memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC9B17F1DE5E0090372A /* memory.cpp */; };
+ B340E5AA1E08893000AD0E8B /* cdplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94817C2A1922B45500FDFC99 /* cdplay.cpp */; };
+ B340E5AB1E08893000AD0E8B /* eeprom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC9217F1DE5D0090372A /* eeprom.cpp */; };
+ B340E5AC1E08893000AD0E8B /* vce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D82D17F1DE5C0090372A /* vce.cpp */; };
+ B340E5AD1E08893000AD0E8B /* window.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC4A17F1DE5D0090372A /* window.c */; };
+ B340E5AE1E08893000AD0E8B /* quicklz.c in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB6541A75DC2D001F174F /* quicklz.c */; };
+ B340E5AF1E08893000AD0E8B /* CDAFReader_MPC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94B082451A8697EF00D3C0BC /* CDAFReader_MPC.cpp */; };
+ B340E5B01E08893000AD0E8B /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D8A817F1DE5C0090372A /* timer.cpp */; };
+ B340E5B11E08893000AD0E8B /* Blip_Buffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC0917F1DE5D0090372A /* Blip_Buffer.cpp */; };
+ B340E5B21E08893000AD0E8B /* tsushinkb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D81C17F1DE5C0090372A /* tsushinkb.cpp */; };
+ B340E5B31E08893000AD0E8B /* mcgenjin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D82217F1DE5C0090372A /* mcgenjin.cpp */; };
+ B340E5B41E08893000AD0E8B /* pcfx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D86017F1DE5C0090372A /* pcfx.cpp */; };
+ B340E5B51E08893000AD0E8B /* gpu_polygon.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB6421A75DB60001F174F /* gpu_polygon.cpp */; };
+ B340E5B61E08893000AD0E8B /* gamepad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D88717F1DE5C0090372A /* gamepad.cpp */; };
+ B340E5B71E08893000AD0E8B /* vdc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D67317F1DE5B0090372A /* vdc.cpp */; };
+ B340E5B81E08893000AD0E8B /* rainbow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D86217F1DE5C0090372A /* rainbow.cpp */; };
+ B340E5B91E08893000AD0E8B /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC5C17F1DE5D0090372A /* timer.cpp */; };
+ B340E5BA1E08893000AD0E8B /* GZFileStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94B082511A86982900D3C0BC /* GZFileStream.cpp */; };
+ B340E5BB1E08893000AD0E8B /* IPSPatcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB6261A75D70C001F174F /* IPSPatcher.cpp */; };
+ B340E5BC1E08893000AD0E8B /* rom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D68A17F1DE5B0090372A /* rom.cpp */; };
+ B340E5BD1E08893000AD0E8B /* unzip.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D54E17F1DE5A0090372A /* unzip.c */; };
+ B340E5BE1E08893000AD0E8B /* resample.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D8B017F1DE5C0090372A /* resample.c */; };
+ B340E5BF1E08893000AD0E8B /* cdromif.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D52C17F1DE5A0090372A /* cdromif.cpp */; };
+ B340E5C01E08893000AD0E8B /* comm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 9454E32919516301005A5CFE /* comm.cpp */; };
+ B340E5C11E08893000AD0E8B /* error.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D5CF17F1DE5B0090372A /* error.cpp */; };
+ B340E5C21E08893000AD0E8B /* pce.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D82517F1DE5C0090372A /* pce.cpp */; };
+ B340E5C31E08893000AD0E8B /* info.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC3117F1DE5D0090372A /* info.c */; };
+ B340E5C41E08893000AD0E8B /* king.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D85A17F1DE5C0090372A /* king.cpp */; };
+ B340E5C51E08893000AD0E8B /* resize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC7817F1DE5D0090372A /* resize.cpp */; };
+ B340E5C61E08893000AD0E8B /* v810_cpu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D63B17F1DE5B0090372A /* v810_cpu.cpp */; };
+ B340E5C71E08893000AD0E8B /* WAVRecord.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC0E17F1DE5D0090372A /* WAVRecord.cpp */; };
+ B340E5C81E08893000AD0E8B /* block.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC2617F1DE5D0090372A /* block.c */; };
+ B340E5C91E08893000AD0E8B /* memcard.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D88D17F1DE5C0090372A /* memcard.cpp */; };
+ B340E5CA1E08893000AD0E8B /* gamepad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D84D17F1DE5C0090372A /* gamepad.cpp */; };
+ B340E5CB1E08893000AD0E8B /* pce_psg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D66017F1DE5B0090372A /* pce_psg.cpp */; };
+ B340E5CC1E08893000AD0E8B /* state.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC1217F1DE5D0090372A /* state.cpp */; };
+ B340E5CD1E08893000AD0E8B /* timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D86617F1DE5C0090372A /* timer.cpp */; };
+ B340E5CE1E08893000AD0E8B /* CDAFReader_Vorbis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94B082491A8697EF00D3C0BC /* CDAFReader_Vorbis.cpp */; };
+ B340E5CF1E08893000AD0E8B /* floor0.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC2E17F1DE5D0090372A /* floor0.c */; };
+ B340E5D01E08893000AD0E8B /* ioapi.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D54417F1DE5A0090372A /* ioapi.c */; };
+ B340E5D11E08893000AD0E8B /* mdct.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC3A17F1DE5D0090372A /* mdct.c */; };
+ B340E5D21E08893000AD0E8B /* CDAccess_CCD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D52617F1DE5A0090372A /* CDAccess_CCD.cpp */; };
+ B340E5D31E08893000AD0E8B /* recover-raw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D53A17F1DE5A0090372A /* recover-raw.cpp */; };
+ B340E5D41E08893000AD0E8B /* scsicd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D53C17F1DE5A0090372A /* scsicd.cpp */; };
+ B340E5D51E08893000AD0E8B /* tsushin.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D82B17F1DE5C0090372A /* tsushin.cpp */; };
+ B340E5D61E08893000AD0E8B /* font-data.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC6A17F1DE5D0090372A /* font-data.cpp */; };
+ B340E5D71E08893000AD0E8B /* floor1.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC2F17F1DE5D0090372A /* floor1.c */; };
+ B340E5D81E08893000AD0E8B /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC9817F1DE5D0090372A /* main.cpp */; };
+ B340E5D91E08893000AD0E8B /* susie.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D68C17F1DE5B0090372A /* susie.cpp */; };
+ B340E5DA1E08893000AD0E8B /* jrevdct.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D85617F1DE5C0090372A /* jrevdct.cpp */; };
+ B340E5DB1E08893000AD0E8B /* gamepad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D81817F1DE5C0090372A /* gamepad.cpp */; };
+ B340E5DC1E08893000AD0E8B /* escape.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC1A17F1DE5D0090372A /* escape.cpp */; };
+ B340E5DD1E08893000AD0E8B /* input.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC5817F1DE5D0090372A /* input.cpp */; };
+ B340E5DE1E08893000AD0E8B /* resolve.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC9017F1DE5D0090372A /* resolve.cpp */; };
+ B340E5DF1E08893000AD0E8B /* Stereo_Buffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC0D17F1DE5D0090372A /* Stereo_Buffer.cpp */; };
+ B340E5E01E08893000AD0E8B /* cputest.c in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D55217F1DE5A0090372A /* cputest.c */; };
+ B340E5E21E08893000AD0E8B /* demo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D55C17F1DE5A0090372A /* demo.cpp */; };
+ B340E5E31E08893000AD0E8B /* sha256.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 94CFB62F1A75D73F001F174F /* sha256.cpp */; };
+ B340E5E41E08893000AD0E8B /* primitives.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3DC7517F1DE5D0090372A /* primitives.cpp */; };
+ B340E5E71E0889FB00AD0E8B /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B340E5E61E0889FB00AD0E8B /* libz.tbd */; };
+ B340E5E91E088A0100AD0E8B /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B340E5E81E088A0100AD0E8B /* libz.tbd */; };
+ B340E5EB1E088A1100AD0E8B /* libiconv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B340E5EA1E088A1100AD0E8B /* libiconv.tbd */; };
+ B340E5ED1E088A1E00AD0E8B /* libiconv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = B340E5EC1E088A1E00AD0E8B /* libiconv.tbd */; };
+ B340E5EF1E088A3500AD0E8B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B340E5EE1E088A3500AD0E8B /* UIKit.framework */; };
+ B340E5F11E088A3A00AD0E8B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B340E5F01E088A3A00AD0E8B /* Foundation.framework */; };
+ B340E5F31E088A4000AD0E8B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B340E5F21E088A4000AD0E8B /* UIKit.framework */; };
+ B340E5F51E088A4500AD0E8B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B340E5F41E088A4500AD0E8B /* Foundation.framework */; };
+ B340E5FB1E088AF100AD0E8B /* PVSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B340E5FA1E088AF100AD0E8B /* PVSupport.framework */; };
+ B340E5FD1E088AF700AD0E8B /* PVSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B340E5FC1E088AF700AD0E8B /* PVSupport.framework */; };
+ B39578C91E6D57DD00854D7A /* neopop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7D817F1DE5B0090372A /* neopop.cpp */; };
+ B39578CA1E6D57DE00854D7A /* neopop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7D817F1DE5B0090372A /* neopop.cpp */; };
+ B39578CB1E6D57F900854D7A /* bios.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7C717F1DE5B0090372A /* bios.cpp */; };
+ B39578CC1E6D57F900854D7A /* biosHLE.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7C917F1DE5B0090372A /* biosHLE.cpp */; };
+ B39578CD1E6D57F900854D7A /* dma.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7CA17F1DE5B0090372A /* dma.cpp */; };
+ B39578CE1E6D57FA00854D7A /* bios.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7C717F1DE5B0090372A /* bios.cpp */; };
+ B39578CF1E6D57FA00854D7A /* biosHLE.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7C917F1DE5B0090372A /* biosHLE.cpp */; };
+ B39578D01E6D57FA00854D7A /* dma.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7CA17F1DE5B0090372A /* dma.cpp */; };
+ B39578D11E6D582300854D7A /* flash.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7CC17F1DE5B0090372A /* flash.cpp */; };
+ B39578D21E6D582300854D7A /* gfx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7CE17F1DE5B0090372A /* gfx.cpp */; };
+ B39578D31E6D582300854D7A /* gfx_scanline_colour.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7D017F1DE5B0090372A /* gfx_scanline_colour.cpp */; };
+ B39578D41E6D582300854D7A /* interrupt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7D217F1DE5B0090372A /* interrupt.cpp */; };
+ B39578D51E6D582300854D7A /* mem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7D617F1DE5B0090372A /* mem.cpp */; };
+ B39578D61E6D582300854D7A /* rom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7DA17F1DE5B0090372A /* rom.cpp */; };
+ B39578D71E6D582300854D7A /* rtc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7DB17F1DE5B0090372A /* rtc.cpp */; };
+ B39578D81E6D582300854D7A /* sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7DD17F1DE5B0090372A /* sound.cpp */; };
+ B39578D91E6D582300854D7A /* T6W28_Apu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7DF17F1DE5B0090372A /* T6W28_Apu.cpp */; };
+ B39578DB1E6D582300854D7A /* flash.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7CC17F1DE5B0090372A /* flash.cpp */; };
+ B39578DC1E6D582300854D7A /* gfx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7CE17F1DE5B0090372A /* gfx.cpp */; };
+ B39578DD1E6D582300854D7A /* gfx_scanline_colour.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7D017F1DE5B0090372A /* gfx_scanline_colour.cpp */; };
+ B39578DE1E6D582300854D7A /* interrupt.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7D217F1DE5B0090372A /* interrupt.cpp */; };
+ B39578DF1E6D582300854D7A /* mem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7D617F1DE5B0090372A /* mem.cpp */; };
+ B39578E01E6D582300854D7A /* rom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7DA17F1DE5B0090372A /* rom.cpp */; };
+ B39578E11E6D582300854D7A /* rtc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7DB17F1DE5B0090372A /* rtc.cpp */; };
+ B39578E21E6D582300854D7A /* sound.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7DD17F1DE5B0090372A /* sound.cpp */; };
+ B39578E31E6D582300854D7A /* T6W28_Apu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7DF17F1DE5B0090372A /* T6W28_Apu.cpp */; };
+ B39578E51E6D583B00854D7A /* TLCS900h_disassemble.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7E317F1DE5B0090372A /* TLCS900h_disassemble.cpp */; };
+ B39578E61E6D583B00854D7A /* TLCS900h_disassemble_dst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7E517F1DE5B0090372A /* TLCS900h_disassemble_dst.cpp */; };
+ B39578E71E6D583B00854D7A /* TLCS900h_disassemble_extra.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7E617F1DE5B0090372A /* TLCS900h_disassemble_extra.cpp */; };
+ B39578E81E6D583B00854D7A /* TLCS900h_disassemble_reg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7E717F1DE5B0090372A /* TLCS900h_disassemble_reg.cpp */; };
+ B39578E91E6D583B00854D7A /* TLCS900h_disassemble_src.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7E817F1DE5B0090372A /* TLCS900h_disassemble_src.cpp */; };
+ B39578EA1E6D583B00854D7A /* TLCS900h_interpret.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7E917F1DE5B0090372A /* TLCS900h_interpret.cpp */; };
+ B39578EB1E6D583B00854D7A /* TLCS900h_interpret_dst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7EB17F1DE5B0090372A /* TLCS900h_interpret_dst.cpp */; };
+ B39578EC1E6D583B00854D7A /* TLCS900h_interpret_reg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7ED17F1DE5B0090372A /* TLCS900h_interpret_reg.cpp */; };
+ B39578ED1E6D583B00854D7A /* TLCS900h_interpret_single.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7EF17F1DE5B0090372A /* TLCS900h_interpret_single.cpp */; };
+ B39578EE1E6D583B00854D7A /* TLCS900h_interpret_src.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7F117F1DE5B0090372A /* TLCS900h_interpret_src.cpp */; };
+ B39578EF1E6D583B00854D7A /* TLCS900h_registers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7F317F1DE5B0090372A /* TLCS900h_registers.cpp */; };
+ B39578F01E6D583C00854D7A /* TLCS900h_disassemble.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7E317F1DE5B0090372A /* TLCS900h_disassemble.cpp */; };
+ B39578F11E6D583C00854D7A /* TLCS900h_disassemble_dst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7E517F1DE5B0090372A /* TLCS900h_disassemble_dst.cpp */; };
+ B39578F21E6D583C00854D7A /* TLCS900h_disassemble_extra.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7E617F1DE5B0090372A /* TLCS900h_disassemble_extra.cpp */; };
+ B39578F31E6D583C00854D7A /* TLCS900h_disassemble_reg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7E717F1DE5B0090372A /* TLCS900h_disassemble_reg.cpp */; };
+ B39578F41E6D583C00854D7A /* TLCS900h_disassemble_src.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7E817F1DE5B0090372A /* TLCS900h_disassemble_src.cpp */; };
+ B39578F51E6D583C00854D7A /* TLCS900h_interpret.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7E917F1DE5B0090372A /* TLCS900h_interpret.cpp */; };
+ B39578F61E6D583C00854D7A /* TLCS900h_interpret_dst.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7EB17F1DE5B0090372A /* TLCS900h_interpret_dst.cpp */; };
+ B39578F71E6D583C00854D7A /* TLCS900h_interpret_reg.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7ED17F1DE5B0090372A /* TLCS900h_interpret_reg.cpp */; };
+ B39578F81E6D583C00854D7A /* TLCS900h_interpret_single.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7EF17F1DE5B0090372A /* TLCS900h_interpret_single.cpp */; };
+ B39578F91E6D583C00854D7A /* TLCS900h_interpret_src.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7F117F1DE5B0090372A /* TLCS900h_interpret_src.cpp */; };
+ B39578FA1E6D583C00854D7A /* TLCS900h_registers.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7F317F1DE5B0090372A /* TLCS900h_registers.cpp */; };
+ B39578FB1E6D585C00854D7A /* Z80_interface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D80417F1DE5B0090372A /* Z80_interface.cpp */; };
+ B39578FC1E6D585D00854D7A /* Z80_interface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D80417F1DE5B0090372A /* Z80_interface.cpp */; };
+ B39578FD1E6D58FF00854D7A /* gfx_scanline_mono.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7D117F1DE5B0090372A /* gfx_scanline_mono.cpp */; };
+ B39578FE1E6D58FF00854D7A /* gfx_scanline_mono.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D7D117F1DE5B0090372A /* gfx_scanline_mono.cpp */; };
+ B39578FF1E6D591E00854D7A /* z80_ops.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D64C17F1DE5B0090372A /* z80_ops.cpp */; };
+ B39579001E6D591E00854D7A /* z80_ops.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8CB3D64C17F1DE5B0090372A /* z80_ops.cpp */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; };
+ 089C167EFE841241C02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = ""; };
+ 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; };
+ 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; };
+ 27FF3AC11B1CF78F002F941E /* libsndfile_FLAC.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libsndfile_FLAC.a; path = libsndfile/libsndfile_FLAC.a; sourceTree = ""; };
+ 8240861A0FFDD64600F0FE7D /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = usr/lib/libz.dylib; sourceTree = SDKROOT; };
+ 824088340FFDDCF400F0FE7D /* MednafenGameCore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MednafenGameCore.h; sourceTree = ""; };
+ 824088350FFDDCF400F0FE7D /* MednafenGameCore.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MednafenGameCore.mm; sourceTree = ""; };
+ 82CFBC510FFEF432002B6C7C /* Mednafen.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Mednafen.icns; sourceTree = ""; };
+ 8305628B1A98C6AD0030F6DB /* libiconv.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.dylib; path = usr/lib/libiconv.dylib; sourceTree = SDKROOT; };
+ 87CD091F1B3DFB3100021C64 /* SNSFLoader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SNSFLoader.cpp; sourceTree = ""; };
+ 87CD09201B3DFB3100021C64 /* SNSFLoader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SNSFLoader.h; sourceTree = ""; };
+ 87CD09211B3DFB4500021C64 /* SPCReader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SPCReader.cpp; sourceTree = ""; };
+ 87CD09221B3DFB4500021C64 /* SPCReader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SPCReader.h; sourceTree = ""; };
+ 87CD09241B3DFB7600021C64 /* apu.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = apu.cpp; path = snes_faust/apu.cpp; sourceTree = ""; };
+ 87CD09251B3DFB7600021C64 /* apu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = apu.h; path = snes_faust/apu.h; sourceTree = ""; };
+ 87CD09261B3DFB7600021C64 /* cart.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = cart.cpp; path = snes_faust/cart.cpp; sourceTree = ""; };
+ 87CD09271B3DFB7600021C64 /* cart.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cart.h; path = snes_faust/cart.h; sourceTree = ""; };
+ 87CD09281B3DFB7600021C64 /* cpu_loop_body.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; name = cpu_loop_body.inc; path = snes_faust/cpu_loop_body.inc; sourceTree = ""; };
+ 87CD09291B3DFB7600021C64 /* cpu.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = cpu.cpp; path = snes_faust/cpu.cpp; sourceTree = ""; };
+ 87CD092A1B3DFB7600021C64 /* cpu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cpu.h; path = snes_faust/cpu.h; sourceTree = ""; };
+ 87CD092B1B3DFB7600021C64 /* dma.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; name = dma.inc; path = snes_faust/dma.inc; sourceTree = ""; };
+ 87CD092C1B3DFB7600021C64 /* dsp.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; name = dsp.inc; path = snes_faust/dsp.inc; sourceTree = ""; };
+ 87CD092D1B3DFB7600021C64 /* input.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = input.cpp; path = snes_faust/input.cpp; sourceTree = ""; };
+ 87CD092E1B3DFB7600021C64 /* input.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = input.h; path = snes_faust/input.h; sourceTree = ""; };
+ 87CD092F1B3DFB7600021C64 /* Makefile.am */ = {isa = PBXFileReference; lastKnownFileType = text; name = Makefile.am; path = snes_faust/Makefile.am; sourceTree = ""; };
+ 87CD09301B3DFB7600021C64 /* Makefile.in */ = {isa = PBXFileReference; lastKnownFileType = text; name = Makefile.in; path = snes_faust/Makefile.in; sourceTree = ""; };
+ 87CD09311B3DFB7600021C64 /* PPU_DESIGN */ = {isa = PBXFileReference; lastKnownFileType = text; name = PPU_DESIGN; path = snes_faust/PPU_DESIGN; sourceTree = ""; };
+ 87CD09321B3DFB7600021C64 /* ppu.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = ppu.cpp; path = snes_faust/ppu.cpp; sourceTree = ""; };
+ 87CD09331B3DFB7600021C64 /* ppu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = ppu.h; path = snes_faust/ppu.h; sourceTree = ""; };
+ 87CD09341B3DFB7600021C64 /* snes.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = snes.cpp; path = snes_faust/snes.cpp; sourceTree = ""; };
+ 87CD09351B3DFB7600021C64 /* snes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = snes.h; path = snes_faust/snes.h; sourceTree = ""; };
+ 87CD09361B3DFB7600021C64 /* spc700.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; name = spc700.inc; path = snes_faust/spc700.inc; sourceTree = ""; };
+ 87DC74711AE45DCF006F1CD7 /* notes */ = {isa = PBXFileReference; lastKnownFileType = folder; path = notes; sourceTree = ""; };
+ 87DC74721AE45E31006F1CD7 /* notes */ = {isa = PBXFileReference; lastKnownFileType = folder; path = notes; sourceTree = ""; };
+ 8CB3D52417F1DE5A0090372A /* CDAccess.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDAccess.cpp; sourceTree = ""; };
+ 8CB3D52517F1DE5A0090372A /* CDAccess.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDAccess.h; sourceTree = ""; };
+ 8CB3D52617F1DE5A0090372A /* CDAccess_CCD.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDAccess_CCD.cpp; sourceTree = ""; };
+ 8CB3D52717F1DE5A0090372A /* CDAccess_CCD.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDAccess_CCD.h; sourceTree = ""; };
+ 8CB3D52817F1DE5A0090372A /* CDAccess_Image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDAccess_Image.cpp; sourceTree = ""; };
+ 8CB3D52917F1DE5A0090372A /* CDAccess_Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDAccess_Image.h; sourceTree = ""; };
+ 8CB3D52C17F1DE5A0090372A /* cdromif.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cdromif.cpp; sourceTree = ""; };
+ 8CB3D52D17F1DE5A0090372A /* cdromif.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cdromif.h; sourceTree = ""; };
+ 8CB3D52E17F1DE5A0090372A /* CDUtility.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CDUtility.cpp; sourceTree = ""; };
+ 8CB3D52F17F1DE5A0090372A /* CDUtility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CDUtility.h; sourceTree = ""; };
+ 8CB3D53017F1DE5A0090372A /* crc32.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = crc32.cpp; sourceTree = ""; };
+ 8CB3D53117F1DE5A0090372A /* dvdisaster.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dvdisaster.h; sourceTree = ""; };
+ 8CB3D53217F1DE5A0090372A /* galois-inlines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "galois-inlines.h"; sourceTree = ""; };
+ 8CB3D53317F1DE5A0090372A /* galois.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = galois.cpp; sourceTree = ""; };
+ 8CB3D53417F1DE5A0090372A /* l-ec.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "l-ec.cpp"; sourceTree = ""; };
+ 8CB3D53517F1DE5A0090372A /* lec.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = lec.cpp; sourceTree = ""; };
+ 8CB3D53617F1DE5A0090372A /* lec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lec.h; sourceTree = ""; };
+ 8CB3D53717F1DE5A0090372A /* Makefile.am.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = Makefile.am.inc; sourceTree = ""; };
+ 8CB3D53A17F1DE5A0090372A /* recover-raw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "recover-raw.cpp"; sourceTree = ""; };
+ 8CB3D53B17F1DE5A0090372A /* scsicd-pce-commands.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = "scsicd-pce-commands.inc"; sourceTree = ""; };
+ 8CB3D53C17F1DE5A0090372A /* scsicd.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = scsicd.cpp; sourceTree = ""; };
+ 8CB3D53D17F1DE5A0090372A /* scsicd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scsicd.h; sourceTree = ""; };
+ 8CB3D53F17F1DE5A0090372A /* SimpleFIFO.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleFIFO.h; sourceTree = ""; };
+ 8CB3D54417F1DE5A0090372A /* ioapi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ioapi.c; sourceTree = ""; };
+ 8CB3D54517F1DE5A0090372A /* ioapi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ioapi.h; sourceTree = ""; };
+ 8CB3D54617F1DE5A0090372A /* lzoconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lzoconf.h; sourceTree = ""; };
+ 8CB3D54717F1DE5A0090372A /* lzodefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lzodefs.h; sourceTree = ""; };
+ 8CB3D54817F1DE5A0090372A /* Makefile.am.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = Makefile.am.inc; sourceTree = ""; };
+ 8CB3D54917F1DE5A0090372A /* minilzo.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = minilzo.c; sourceTree = ""; };
+ 8CB3D54A17F1DE5A0090372A /* minilzo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = minilzo.h; sourceTree = ""; };
+ 8CB3D54D17F1DE5A0090372A /* README.LZO */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.LZO; sourceTree = ""; };
+ 8CB3D54E17F1DE5A0090372A /* unzip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = unzip.c; sourceTree = ""; };
+ 8CB3D54F17F1DE5A0090372A /* unzip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = unzip.h; sourceTree = ""; };
+ 8CB3D55117F1DE5A0090372A /* arm_cpu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = arm_cpu.c; sourceTree = ""; };
+ 8CB3D55217F1DE5A0090372A /* cputest.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cputest.c; sourceTree = ""; };
+ 8CB3D55317F1DE5A0090372A /* cputest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cputest.h; sourceTree = ""; };
+ 8CB3D55417F1DE5A0090372A /* Makefile.am.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = Makefile.am.inc; sourceTree = ""; };
+ 8CB3D55517F1DE5A0090372A /* ppc_cpu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ppc_cpu.c; sourceTree = ""; };
+ 8CB3D55617F1DE5A0090372A /* README */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README; sourceTree = ""; };
+ 8CB3D55717F1DE5A0090372A /* x86_cpu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = x86_cpu.c; sourceTree = ""; };
+ 8CB3D55817F1DE5A0090372A /* x86_cpu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x86_cpu.h; sourceTree = ""; };
+ 8CB3D55917F1DE5A0090372A /* debug.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = debug.cpp; sourceTree = ""; };
+ 8CB3D55A17F1DE5A0090372A /* debug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = debug.h; sourceTree = ""; };
+ 8CB3D55C17F1DE5A0090372A /* demo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = demo.cpp; sourceTree = ""; };
+ 8CB3D55D17F1DE5A0090372A /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; };
+ 8CB3D55E17F1DE5A0090372A /* Makefile.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.in; sourceTree = ""; };
+ 8CB3D56017F1DE5A0090372A /* desa68.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = desa68.c; sourceTree = ""; };
+ 8CB3D56117F1DE5A0090372A /* desa68.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = desa68.h; sourceTree = ""; };
+ 8CB3D56217F1DE5A0090372A /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; };
+ 8CB3D56317F1DE5A0090372A /* Makefile.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.in; sourceTree = ""; };
+ 8CB3D56417F1DE5A0090372A /* dis6502.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dis6502.cpp; sourceTree = ""; };
+ 8CB3D56517F1DE5A0090372A /* dis6502.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dis6502.h; sourceTree = ""; };
+ 8CB3D56617F1DE5A0090372A /* driver.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = driver.h; sourceTree = ""; };
+ 8CB3D56817F1DE5A0090372A /* 2xSaI.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = 2xSaI.cpp; sourceTree = ""; };
+ 8CB3D56917F1DE5A0090372A /* 2xSaI.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 2xSaI.h; sourceTree = ""; };
+ 8CB3D56A17F1DE5A0090372A /* args.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = args.cpp; sourceTree = ""; };
+ 8CB3D56B17F1DE5A0090372A /* args.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = args.h; sourceTree = ""; };
+ 8CB3D56C17F1DE5A0090372A /* cheat.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cheat.cpp; sourceTree = ""; };
+ 8CB3D56D17F1DE5A0090372A /* cheat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cheat.h; sourceTree = ""; };
+ 8CB3D56E17F1DE5A0090372A /* console.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = console.cpp; sourceTree = ""; };
+ 8CB3D56F17F1DE5A0090372A /* console.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = console.h; sourceTree = ""; };
+ 8CB3D57017F1DE5A0090372A /* debugger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = debugger.cpp; sourceTree = ""; };
+ 8CB3D57117F1DE5A0090372A /* debugger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = debugger.h; sourceTree = ""; };
+ 8CB3D57217F1DE5A0090372A /* ers.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ers.cpp; sourceTree = ""; };
+ 8CB3D57317F1DE5A0090372A /* ers.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ers.h; sourceTree = ""; };
+ 8CB3D57417F1DE5A0090372A /* fps.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fps.cpp; sourceTree = ""; };
+ 8CB3D57517F1DE5A0090372A /* fps.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fps.h; sourceTree = ""; };
+ 8CB3D57617F1DE5A0090372A /* gfxdebugger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gfxdebugger.cpp; sourceTree = ""; };
+ 8CB3D57717F1DE5A0090372A /* gfxdebugger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gfxdebugger.h; sourceTree = ""; };
+ 8CB3D57817F1DE5A0090372A /* help.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = help.cpp; sourceTree = ""; };
+ 8CB3D57917F1DE5A0090372A /* help.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = help.h; sourceTree = ""; };
+ 8CB3D57A17F1DE5A0090372A /* hq2x.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hq2x.cpp; sourceTree = ""; };
+ 8CB3D57B17F1DE5A0090372A /* hq3x.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hq3x.cpp; sourceTree = ""; };
+ 8CB3D57C17F1DE5A0090372A /* hq4x.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = hq4x.cpp; sourceTree = ""; };
+ 8CB3D57D17F1DE5A0090372A /* hqxx-common.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "hqxx-common.cpp"; sourceTree = ""; };
+ 8CB3D57E17F1DE5A0090372A /* hqxx-common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "hqxx-common.h"; sourceTree = ""; };
+ 8CB3D57F17F1DE5A0090372A /* icon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = icon.h; sourceTree = ""; };
+ 8CB3D58017F1DE5A0090372A /* input-config.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "input-config.cpp"; sourceTree = ""; };
+ 8CB3D58117F1DE5A0090372A /* input-config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "input-config.h"; sourceTree = ""; };
+ 8CB3D58217F1DE5A0090372A /* input-default-buttons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "input-default-buttons.h"; sourceTree = ""; };
+ 8CB3D58317F1DE5A0090372A /* input.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = input.cpp; sourceTree = ""; };
+ 8CB3D58417F1DE5A0090372A /* input.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = input.h; sourceTree = ""; };
+ 8CB3D58517F1DE5A0090372A /* Joystick.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Joystick.cpp; sourceTree = ""; };
+ 8CB3D58617F1DE5A0090372A /* Joystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Joystick.h; sourceTree = ""; };
+ 8CB3D58717F1DE5A0090372A /* Joystick_DX5.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Joystick_DX5.cpp; sourceTree = ""; };
+ 8CB3D58817F1DE5A0090372A /* Joystick_DX5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Joystick_DX5.h; sourceTree = ""; };
+ 8CB3D58B17F1DE5A0090372A /* Joystick_Linux.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Joystick_Linux.cpp; sourceTree = ""; };
+ 8CB3D58C17F1DE5A0090372A /* Joystick_Linux.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Joystick_Linux.h; sourceTree = ""; };
+ 8CB3D58D17F1DE5A0090372A /* Joystick_SDL.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Joystick_SDL.cpp; sourceTree = ""; };
+ 8CB3D58E17F1DE5A0090372A /* Joystick_SDL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Joystick_SDL.h; sourceTree = ""; };
+ 8CB3D58F17F1DE5A0090372A /* Joystick_XInput.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Joystick_XInput.cpp; sourceTree = ""; };
+ 8CB3D59017F1DE5A0090372A /* Joystick_XInput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Joystick_XInput.h; sourceTree = ""; };
+ 8CB3D59117F1DE5A0090372A /* logdebugger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = logdebugger.cpp; sourceTree = ""; };
+ 8CB3D59217F1DE5A0090372A /* logdebugger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = logdebugger.h; sourceTree = ""; };
+ 8CB3D59317F1DE5A0090372A /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = ""; };
+ 8CB3D59417F1DE5A0090372A /* main.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = main.h; sourceTree = ""; };
+ 8CB3D59517F1DE5A0090372A /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; };
+ 8CB3D59617F1DE5A0090372A /* Makefile.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.in; sourceTree = ""; };
+ 8CB3D59717F1DE5A0090372A /* memdebugger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = memdebugger.cpp; sourceTree = ""; };
+ 8CB3D59817F1DE5A0090372A /* memdebugger.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memdebugger.h; sourceTree = ""; };
+ 8CB3D59917F1DE5A0090372A /* NetClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetClient.h; sourceTree = ""; };
+ 8CB3D59A17F1DE5A0090372A /* NetClient_POSIX.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetClient_POSIX.cpp; sourceTree = ""; };
+ 8CB3D59B17F1DE5A0090372A /* NetClient_POSIX.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetClient_POSIX.h; sourceTree = ""; };
+ 8CB3D59C17F1DE5A0090372A /* NetClient_WS2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NetClient_WS2.cpp; sourceTree = ""; };
+ 8CB3D59D17F1DE5B0090372A /* NetClient_WS2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetClient_WS2.h; sourceTree = ""; };
+ 8CB3D59E17F1DE5B0090372A /* netplay.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = netplay.cpp; sourceTree = ""; };
+ 8CB3D59F17F1DE5B0090372A /* netplay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = netplay.h; sourceTree = ""; };
+ 8CB3D5A017F1DE5B0090372A /* nnx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = nnx.cpp; sourceTree = ""; };
+ 8CB3D5A117F1DE5B0090372A /* nnx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nnx.h; sourceTree = ""; };
+ 8CB3D5A217F1DE5B0090372A /* nongl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = nongl.cpp; sourceTree = ""; };
+ 8CB3D5A317F1DE5B0090372A /* nongl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nongl.h; sourceTree = ""; };
+ 8CB3D5A417F1DE5B0090372A /* opengl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = opengl.cpp; sourceTree = ""; };
+ 8CB3D5A517F1DE5B0090372A /* opengl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opengl.h; sourceTree = ""; };
+ 8CB3D5A617F1DE5B0090372A /* overlay.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = overlay.cpp; sourceTree = ""; };
+ 8CB3D5A717F1DE5B0090372A /* overlay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = overlay.h; sourceTree = ""; };
+ 8CB3D5A817F1DE5B0090372A /* prompt.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = prompt.cpp; sourceTree = ""; };
+ 8CB3D5A917F1DE5B0090372A /* prompt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = prompt.h; sourceTree = ""; };
+ 8CB3D5AA17F1DE5B0090372A /* remote.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = remote.cpp; sourceTree = ""; };
+ 8CB3D5AB17F1DE5B0090372A /* remote.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = remote.h; sourceTree = ""; };
+ 8CB3D5AC17F1DE5B0090372A /* scale2x.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = scale2x.c; sourceTree = ""; };
+ 8CB3D5AD17F1DE5B0090372A /* scale2x.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scale2x.h; sourceTree = ""; };
+ 8CB3D5AE17F1DE5B0090372A /* scale3x.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = scale3x.c; sourceTree = ""; };
+ 8CB3D5AF17F1DE5B0090372A /* scale3x.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scale3x.h; sourceTree = ""; };
+ 8CB3D5B017F1DE5B0090372A /* scalebit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = scalebit.c; sourceTree = ""; };
+ 8CB3D5B117F1DE5B0090372A /* scalebit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scalebit.h; sourceTree = ""; };
+ 8CB3D5B217F1DE5B0090372A /* shader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = shader.cpp; sourceTree = ""; };
+ 8CB3D5B317F1DE5B0090372A /* shader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = shader.h; sourceTree = ""; };
+ 8CB3D5B417F1DE5B0090372A /* shader_sabr.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = shader_sabr.inc; sourceTree = ""; };
+ 8CB3D5B517F1DE5B0090372A /* sound.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sound.cpp; sourceTree = ""; };
+ 8CB3D5B617F1DE5B0090372A /* sound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sound.h; sourceTree = ""; };
+ 8CB3D5B717F1DE5B0090372A /* video-state.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "video-state.cpp"; sourceTree = ""; };
+ 8CB3D5B817F1DE5B0090372A /* video-state.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "video-state.h"; sourceTree = ""; };
+ 8CB3D5B917F1DE5B0090372A /* video.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = video.cpp; sourceTree = ""; };
+ 8CB3D5BA17F1DE5B0090372A /* video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = video.h; sourceTree = ""; };
+ 8CB3D5BC17F1DE5B0090372A /* Joystick.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Joystick.cpp; sourceTree = ""; };
+ 8CB3D5BD17F1DE5B0090372A /* Joystick.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Joystick.h; sourceTree = ""; };
+ 8CB3D5C017F1DE5B0090372A /* Joystick_DOS_Standard.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Joystick_DOS_Standard.cpp; sourceTree = ""; };
+ 8CB3D5C117F1DE5B0090372A /* Joystick_DOS_Standard.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Joystick_DOS_Standard.h; sourceTree = ""; };
+ 8CB3D5C417F1DE5B0090372A /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; };
+ 8CB3D5C617F1DE5B0090372A /* Sound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sound.h; sourceTree = ""; };
+ 8CB3D5CA17F1DE5B0090372A /* Video.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Video.h; sourceTree = ""; };
+ 8CB3D5CC17F1DE5B0090372A /* Video_VGA.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Video_VGA.h; sourceTree = ""; };
+ 8CB3D5CD17F1DE5B0090372A /* endian.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = endian.cpp; sourceTree = ""; };
+ 8CB3D5CE17F1DE5B0090372A /* endian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = endian.h; sourceTree = ""; };
+ 8CB3D5CF17F1DE5B0090372A /* error.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = error.cpp; sourceTree = ""; };
+ 8CB3D5D017F1DE5B0090372A /* error.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = error.h; sourceTree = ""; };
+ 8CB3D5D117F1DE5B0090372A /* file.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = file.cpp; sourceTree = ""; };
+ 8CB3D5D217F1DE5B0090372A /* file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = file.h; sourceTree = ""; };
+ 8CB3D5D317F1DE5B0090372A /* FileStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileStream.cpp; sourceTree = ""; };
+ 8CB3D5D417F1DE5B0090372A /* FileStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileStream.h; sourceTree = ""; };
+ 8CB3D5D817F1DE5B0090372A /* gb.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gb.cpp; sourceTree = ""; };
+ 8CB3D5D917F1DE5B0090372A /* gb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gb.h; sourceTree = ""; };
+ 8CB3D5DA17F1DE5B0090372A /* gbCodes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gbCodes.h; sourceTree = ""; };
+ 8CB3D5DB17F1DE5B0090372A /* gbCodesCB.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gbCodesCB.h; sourceTree = ""; };
+ 8CB3D5DC17F1DE5B0090372A /* gbGlobals.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gbGlobals.cpp; sourceTree = ""; };
+ 8CB3D5DD17F1DE5B0090372A /* gbGlobals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gbGlobals.h; sourceTree = ""; };
+ 8CB3D5DE17F1DE5B0090372A /* gfx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = gfx.cpp; sourceTree = ""; };
+ 8CB3D5DF17F1DE5B0090372A /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; };
+ 8CB3D5E017F1DE5B0090372A /* Makefile.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.in; sourceTree = ""; };
+ 8CB3D5E117F1DE5B0090372A /* memory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = memory.cpp; sourceTree = ""; };
+ 8CB3D5E217F1DE5B0090372A /* memory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memory.h; sourceTree = ""; };
+ 8CB3D5E317F1DE5B0090372A /* sound.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sound.cpp; sourceTree = ""; };
+ 8CB3D5E417F1DE5B0090372A /* sound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sound.h; sourceTree = ""; };
+ 8CB3D5E517F1DE5B0090372A /* z80.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = z80.cpp; sourceTree = ""; };
+ 8CB3D5E617F1DE5B0090372A /* z80.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = z80.h; sourceTree = ""; };
+ 8CB3D5E817F1DE5B0090372A /* arm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = arm.cpp; sourceTree = ""; };
+ 8CB3D5E917F1DE5B0090372A /* arm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = arm.h; sourceTree = ""; };
+ 8CB3D5EA17F1DE5B0090372A /* bios.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bios.cpp; sourceTree = ""; };
+ 8CB3D5EB17F1DE5B0090372A /* bios.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bios.h; sourceTree = ""; };
+ 8CB3D5EC17F1DE5B0090372A /* eeprom.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = eeprom.cpp; sourceTree = ""; };
+ 8CB3D5ED17F1DE5B0090372A /* eeprom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = eeprom.h; sourceTree = ""; };
+ 8CB3D5EE17F1DE5B0090372A /* flash.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = flash.cpp; sourceTree = ""; };
+ 8CB3D5EF17F1DE5B0090372A /* flash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = flash.h; sourceTree = ""; };
+ 8CB3D5F017F1DE5B0090372A /* GBA.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GBA.cpp; sourceTree = ""; };
+ 8CB3D5F117F1DE5B0090372A /* GBA.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GBA.h; sourceTree = ""; };
+ 8CB3D5F217F1DE5B0090372A /* GBAinline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GBAinline.cpp; sourceTree = ""; };
+ 8CB3D5F317F1DE5B0090372A /* GBAinline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GBAinline.h; sourceTree = ""; };
+ 8CB3D5F417F1DE5B0090372A /* gfx-draw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "gfx-draw.h"; sourceTree = ""; };
+ 8CB3D5F517F1DE5B0090372A /* Gfx.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Gfx.cpp; sourceTree = ""; };
+ 8CB3D5F617F1DE5B0090372A /* Gfx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Gfx.h; sourceTree = ""; };
+ 8CB3D5F717F1DE5B0090372A /* Globals.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Globals.cpp; sourceTree = ""; };
+ 8CB3D5F817F1DE5B0090372A /* Globals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Globals.h; sourceTree = ""; };
+ 8CB3D5F917F1DE5B0090372A /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; };
+ 8CB3D5FA17F1DE5B0090372A /* Makefile.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.in; sourceTree = ""; };
+ 8CB3D5FB17F1DE5B0090372A /* Mode0.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mode0.cpp; sourceTree = ""; };
+ 8CB3D5FC17F1DE5B0090372A /* Mode1.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mode1.cpp; sourceTree = ""; };
+ 8CB3D5FD17F1DE5B0090372A /* Mode2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mode2.cpp; sourceTree = ""; };
+ 8CB3D5FE17F1DE5B0090372A /* Mode3.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mode3.cpp; sourceTree = ""; };
+ 8CB3D5FF17F1DE5B0090372A /* Mode4.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mode4.cpp; sourceTree = ""; };
+ 8CB3D60017F1DE5B0090372A /* Mode5.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Mode5.cpp; sourceTree = ""; };
+ 8CB3D60117F1DE5B0090372A /* myrom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = myrom.h; sourceTree = ""; };
+ 8CB3D60217F1DE5B0090372A /* Port.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Port.h; sourceTree = ""; };
+ 8CB3D60317F1DE5B0090372A /* RTC.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTC.cpp; sourceTree = ""; };
+ 8CB3D60417F1DE5B0090372A /* RTC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTC.h; sourceTree = ""; };
+ 8CB3D60517F1DE5B0090372A /* Sound.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Sound.cpp; sourceTree = ""; };
+ 8CB3D60617F1DE5B0090372A /* Sound.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sound.h; sourceTree = ""; };
+ 8CB3D60717F1DE5B0090372A /* sram.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sram.cpp; sourceTree = ""; };
+ 8CB3D60817F1DE5B0090372A /* sram.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sram.h; sourceTree = ""; };
+ 8CB3D60917F1DE5B0090372A /* thumb.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = thumb.cpp; sourceTree = ""; };
+ 8CB3D60A17F1DE5B0090372A /* thumb.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = thumb.h; sourceTree = ""; };
+ 8CB3D60B17F1DE5B0090372A /* general.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = general.cpp; sourceTree = ""; };
+ 8CB3D60C17F1DE5B0090372A /* general.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = general.h; sourceTree = ""; };
+ 8CB3D60D17F1DE5B0090372A /* gettext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = gettext.h; sourceTree = ""; };
+ 8CB3D60E17F1DE5B0090372A /* git.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = git.h; sourceTree = ""; };
+ 8CB3D61217F1DE5B0090372A /* c68k.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = c68k.h; sourceTree = ""; };
+ 8CB3D61317F1DE5B0090372A /* c68k_ini.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = c68k_ini.inc; sourceTree = ""; };
+ 8CB3D61417F1DE5B0090372A /* c68k_op0.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = c68k_op0.inc; sourceTree = ""; };
+ 8CB3D61517F1DE5B0090372A /* c68k_op1.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = c68k_op1.inc; sourceTree = ""; };
+ 8CB3D61617F1DE5B0090372A /* c68k_op2.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = c68k_op2.inc; sourceTree = ""; };
+ 8CB3D61717F1DE5B0090372A /* c68k_op3.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = c68k_op3.inc; sourceTree = ""; };
+ 8CB3D61817F1DE5B0090372A /* c68k_op4.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = c68k_op4.inc; sourceTree = ""; };
+ 8CB3D61917F1DE5B0090372A /* c68k_op5.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = c68k_op5.inc; sourceTree = ""; };
+ 8CB3D61A17F1DE5B0090372A /* c68k_op6.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = c68k_op6.inc; sourceTree = "