├── .gitignore ├── .gitmodules ├── BSNES.xcodeproj ├── TemplateIcon.icns └── project.pbxproj ├── BSNESGameCore.h ├── BSNESGameCore.mm ├── Info.plist ├── bsnes.icns ├── en.lproj └── InfoPlist.strings ├── program.mm └── version.plist /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | *.DS_Store 3 | OEBuildVersion.h 4 | */build/* 5 | *.pbxuser 6 | !default.pbxuser 7 | *.mode1v3 8 | !default.mode1v3 9 | *.mode2v3 10 | !default.mode2v3 11 | *.perspectivev3 12 | !default.perspectivev3 13 | *.xcworkspace 14 | !OpenEmu.xcworkspace 15 | !default.xcworkspace 16 | xcuserdata 17 | profile 18 | *.moved-aside 19 | icon? 20 | DerivedData 21 | build/ 22 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "bsnes"] 2 | path = bsnes 3 | url = git@github.com:bsnes-emu/bsnes.git 4 | -------------------------------------------------------------------------------- /BSNES.xcodeproj/TemplateIcon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenEmu/BSNES-Core/c21062858b35a7a3434e956885faf4351fda9a51/BSNES.xcodeproj/TemplateIcon.icns -------------------------------------------------------------------------------- /BSNES.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXAggregateTarget section */ 10 | 8230C6A110AFBC9100412F24 /* Distribution */ = { 11 | isa = PBXAggregateTarget; 12 | buildConfigurationList = 8230C6AD10AFBCC700412F24 /* Build configuration list for PBXAggregateTarget "Distribution" */; 13 | buildPhases = ( 14 | 8230C6AC10AFBCC700412F24 /* CopyFiles */, 15 | 8230C6A010AFBC9100412F24 /* ShellScript */, 16 | ); 17 | dependencies = ( 18 | 8230C6A510AFBC9600412F24 /* PBXTargetDependency */, 19 | ); 20 | name = Distribution; 21 | productName = Distribution; 22 | }; 23 | 82B9195310150EA2007BD6DB /* Build & Install BSNES */ = { 24 | isa = PBXAggregateTarget; 25 | buildConfigurationList = 82B9195D10150EA4007BD6DB /* Build configuration list for PBXAggregateTarget "Build & Install BSNES" */; 26 | buildPhases = ( 27 | 82B9195210150EA2007BD6DB /* ShellScript */, 28 | ); 29 | dependencies = ( 30 | 82B9195F10150EB3007BD6DB /* PBXTargetDependency */, 31 | ); 32 | name = "Build & Install BSNES"; 33 | productName = "Build & Install"; 34 | }; 35 | /* End PBXAggregateTarget section */ 36 | 37 | /* Begin PBXBuildFile section */ 38 | 0113624523BA377D00BC181F /* ipl.rom in Resources */ = {isa = PBXBuildFile; fileRef = 0113624323BA377D00BC181F /* ipl.rom */; }; 39 | 0113624623BA377D00BC181F /* boards.bml in Resources */ = {isa = PBXBuildFile; fileRef = 0113624423BA377D00BC181F /* boards.bml */; }; 40 | 013D75CA23BCEF0100D74AD3 /* Super Famicom.bml in Resources */ = {isa = PBXBuildFile; fileRef = 013D75C623BCEF0100D74AD3 /* Super Famicom.bml */; }; 41 | 0167A54323B984A300F0B36E /* interface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0167A30A23B9843600F0B36E /* interface.cpp */; }; 42 | 0167A54423B984AF00F0B36E /* system.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0167A3BD23B9843600F0B36E /* system.cpp */; }; 43 | 0167A54523B984B600F0B36E /* controller.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0167A3AE23B9843600F0B36E /* controller.cpp */; }; 44 | 0167A54623B984BA00F0B36E /* cartridge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0167A39923B9843600F0B36E /* cartridge.cpp */; }; 45 | 0167A54723B984C300F0B36E /* memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0167A30D23B9843600F0B36E /* memory.cpp */; }; 46 | 0167A54823B984CC00F0B36E /* cpu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0167A31923B9843600F0B36E /* cpu.cpp */; }; 47 | 0167A54923B984D400F0B36E /* smp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0167A3CD23B9843600F0B36E /* smp.cpp */; }; 48 | 0167A54A23B984DA00F0B36E /* dsp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0167A3F023B9843600F0B36E /* dsp.cpp */; }; 49 | 0167A54B23B984E000F0B36E /* ppu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0167A3DA23B9843600F0B36E /* ppu.cpp */; }; 50 | 0167A54C23B984F600F0B36E /* ppu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0167A3B223B9843600F0B36E /* ppu.cpp */; }; 51 | 0167A54D23B9850400F0B36E /* expansion.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0167A3C223B9843600F0B36E /* expansion.cpp */; }; 52 | 0167A54E23B9850A00F0B36E /* coprocessor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0167A37823B9843600F0B36E /* coprocessor.cpp */; }; 53 | 0167A54F23B9851000F0B36E /* slot.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0167A3D423B9843600F0B36E /* slot.cpp */; }; 54 | 0167A55323B9856C00F0B36E /* wdc65816.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0167A41923B9843600F0B36E /* wdc65816.cpp */; }; 55 | 0167A55523B9857700F0B36E /* arm7tdmi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0167A43123B9843600F0B36E /* arm7tdmi.cpp */; }; 56 | 0167A55623B9857C00F0B36E /* spc700.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0167A43A23B9843600F0B36E /* spc700.cpp */; }; 57 | 0167A55723B985A800F0B36E /* display.c in Sources */ = {isa = PBXBuildFile; fileRef = 0167A44323B9843600F0B36E /* display.c */; }; 58 | 0167A55823B985A800F0B36E /* memory.c in Sources */ = {isa = PBXBuildFile; fileRef = 0167A44523B9843600F0B36E /* memory.c */; }; 59 | 0167A55923B985A800F0B36E /* apu.c in Sources */ = {isa = PBXBuildFile; fileRef = 0167A44723B9843600F0B36E /* apu.c */; }; 60 | 0167A55A23B985A800F0B36E /* gb.c in Sources */ = {isa = PBXBuildFile; fileRef = 0167A44923B9843600F0B36E /* gb.c */; }; 61 | 0167A55B23B985A800F0B36E /* joypad.c in Sources */ = {isa = PBXBuildFile; fileRef = 0167A44B23B9843600F0B36E /* joypad.c */; }; 62 | 0167A55D23B985A800F0B36E /* random.c in Sources */ = {isa = PBXBuildFile; fileRef = 0167A45023B9843600F0B36E /* random.c */; }; 63 | 0167A55E23B985A800F0B36E /* symbol_hash.c in Sources */ = {isa = PBXBuildFile; fileRef = 0167A45123B9843600F0B36E /* symbol_hash.c */; }; 64 | 0167A55F23B985A800F0B36E /* sgb.c in Sources */ = {isa = PBXBuildFile; fileRef = 0167A45223B9843600F0B36E /* sgb.c */; }; 65 | 0167A56023B985A800F0B36E /* printer.c in Sources */ = {isa = PBXBuildFile; fileRef = 0167A45423B9843600F0B36E /* printer.c */; }; 66 | 0167A56123B985A800F0B36E /* sm83_cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 0167A45523B9843600F0B36E /* sm83_cpu.c */; }; 67 | 0167A56223B985A800F0B36E /* mbc.c in Sources */ = {isa = PBXBuildFile; fileRef = 0167A45623B9843600F0B36E /* mbc.c */; }; 68 | 0167A56323B985A800F0B36E /* save_state.c in Sources */ = {isa = PBXBuildFile; fileRef = 0167A45823B9843600F0B36E /* save_state.c */; }; 69 | 0167A56523B985A800F0B36E /* rewind.c in Sources */ = {isa = PBXBuildFile; fileRef = 0167A45D23B9843600F0B36E /* rewind.c */; }; 70 | 0167A56623B985A800F0B36E /* timing.c in Sources */ = {isa = PBXBuildFile; fileRef = 0167A45E23B9843600F0B36E /* timing.c */; }; 71 | 0167A56723B985A800F0B36E /* camera.c in Sources */ = {isa = PBXBuildFile; fileRef = 0167A45F23B9843600F0B36E /* camera.c */; }; 72 | 0167A56D23B985E600F0B36E /* lzma.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0167A4E423B9843600F0B36E /* lzma.cpp */; }; 73 | 0167A59523B985F000F0B36E /* emulator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0167A4D323B9843600F0B36E /* emulator.cpp */; }; 74 | 0167A59C23B9861000F0B36E /* libco.c in Sources */ = {isa = PBXBuildFile; fileRef = 0167A53B23B9843700F0B36E /* libco.c */; }; 75 | 82B9198810150FA9007BD6DB /* bsnes.icns in Resources */ = {isa = PBXBuildFile; fileRef = 82B9198710150FA9007BD6DB /* bsnes.icns */; }; 76 | 8D5B49B0048680CD000E48DA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; }; 77 | 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; }; 78 | 94D9257314CA9879008F697D /* BSNESGameCore.mm in Sources */ = {isa = PBXBuildFile; fileRef = 826FE0F41014D8930023A8E9 /* BSNESGameCore.mm */; }; 79 | C6D120EC1711307900E868A8 /* OpenEmuBase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C6D120EB1711307900E868A8 /* OpenEmuBase.framework */; }; 80 | /* End PBXBuildFile section */ 81 | 82 | /* Begin PBXContainerItemProxy section */ 83 | 8230C6A410AFBC9600412F24 /* PBXContainerItemProxy */ = { 84 | isa = PBXContainerItemProxy; 85 | containerPortal = 089C1669FE841209C02AAC07 /* Project object */; 86 | proxyType = 1; 87 | remoteGlobalIDString = 8D5B49AC048680CD000E48DA; 88 | remoteInfo = BSNES; 89 | }; 90 | 82B9195E10150EB3007BD6DB /* PBXContainerItemProxy */ = { 91 | isa = PBXContainerItemProxy; 92 | containerPortal = 089C1669FE841209C02AAC07 /* Project object */; 93 | proxyType = 1; 94 | remoteGlobalIDString = 8D5B49AC048680CD000E48DA; 95 | remoteInfo = BSNES; 96 | }; 97 | /* End PBXContainerItemProxy section */ 98 | 99 | /* Begin PBXCopyFilesBuildPhase section */ 100 | 8230C6AC10AFBCC700412F24 /* CopyFiles */ = { 101 | isa = PBXCopyFilesBuildPhase; 102 | buildActionMask = 2147483647; 103 | dstPath = ""; 104 | dstSubfolderSpec = 16; 105 | files = ( 106 | ); 107 | runOnlyForDeploymentPostprocessing = 0; 108 | }; 109 | /* End PBXCopyFilesBuildPhase section */ 110 | 111 | /* Begin PBXFileReference section */ 112 | 0113624123BA353400BC181F /* program.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = program.mm; sourceTree = ""; }; 113 | 0113624323BA377D00BC181F /* ipl.rom */ = {isa = PBXFileReference; lastKnownFileType = file; path = ipl.rom; sourceTree = ""; }; 114 | 0113624423BA377D00BC181F /* boards.bml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = boards.bml; sourceTree = ""; }; 115 | 013D75C623BCEF0100D74AD3 /* Super Famicom.bml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "Super Famicom.bml"; sourceTree = ""; }; 116 | 013D75CB23BD147A00D74AD3 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 117 | 0167A1FB23B9843600F0B36E /* sqlite3.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = sqlite3.hpp; sourceTree = ""; }; 118 | 0167A1FC23B9843600F0B36E /* odbc.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = odbc.hpp; sourceTree = ""; }; 119 | 0167A1FD23B9843600F0B36E /* inline-if.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "inline-if.hpp"; sourceTree = ""; }; 120 | 0167A1FE23B9843600F0B36E /* instance.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = instance.hpp; sourceTree = ""; }; 121 | 0167A20023B9843600F0B36E /* service.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = service.hpp; sourceTree = ""; }; 122 | 0167A20123B9843600F0B36E /* shared-memory.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "shared-memory.hpp"; sourceTree = ""; }; 123 | 0167A20223B9843600F0B36E /* adaptive-array.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "adaptive-array.hpp"; sourceTree = ""; }; 124 | 0167A20523B9843600F0B36E /* file.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = file.hpp; sourceTree = ""; }; 125 | 0167A20623B9843600F0B36E /* vfs.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = vfs.hpp; sourceTree = ""; }; 126 | 0167A20823B9843600F0B36E /* file.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = file.hpp; sourceTree = ""; }; 127 | 0167A20923B9843600F0B36E /* file-map.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "file-map.hpp"; sourceTree = ""; }; 128 | 0167A20A23B9843600F0B36E /* serializer.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = serializer.hpp; sourceTree = ""; }; 129 | 0167A20B23B9843600F0B36E /* hashset.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = hashset.hpp; sourceTree = ""; }; 130 | 0167A20C23B9843600F0B36E /* array-span.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "array-span.hpp"; sourceTree = ""; }; 131 | 0167A20D23B9843600F0B36E /* suffix-array.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "suffix-array.hpp"; sourceTree = ""; }; 132 | 0167A20F23B9843600F0B36E /* guard.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = guard.hpp; sourceTree = ""; }; 133 | 0167A21023B9843600F0B36E /* utility.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = utility.hpp; sourceTree = ""; }; 134 | 0167A21123B9843600F0B36E /* reed-solomon.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "reed-solomon.hpp"; sourceTree = ""; }; 135 | 0167A21223B9843600F0B36E /* main.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = main.hpp; sourceTree = ""; }; 136 | 0167A21323B9843600F0B36E /* vfs.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = vfs.hpp; sourceTree = ""; }; 137 | 0167A21423B9843600F0B36E /* nall.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = nall.hpp; sourceTree = ""; }; 138 | 0167A21623B9843600F0B36E /* sha384.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = sha384.hpp; sourceTree = ""; }; 139 | 0167A21723B9843600F0B36E /* hash.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = hash.hpp; sourceTree = ""; }; 140 | 0167A21823B9843600F0B36E /* sha224.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = sha224.hpp; sourceTree = ""; }; 141 | 0167A21923B9843600F0B36E /* crc64.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = crc64.hpp; sourceTree = ""; }; 142 | 0167A21A23B9843600F0B36E /* sha256.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = sha256.hpp; sourceTree = ""; }; 143 | 0167A21B23B9843600F0B36E /* crc16.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = crc16.hpp; sourceTree = ""; }; 144 | 0167A21C23B9843600F0B36E /* crc32.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = crc32.hpp; sourceTree = ""; }; 145 | 0167A21D23B9843600F0B36E /* sha512.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = sha512.hpp; sourceTree = ""; }; 146 | 0167A21E23B9843600F0B36E /* varint.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = varint.hpp; sourceTree = ""; }; 147 | 0167A21F23B9843600F0B36E /* function.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = function.hpp; sourceTree = ""; }; 148 | 0167A22023B9843600F0B36E /* array.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = array.hpp; sourceTree = ""; }; 149 | 0167A22223B9843600F0B36E /* 21fx.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = 21fx.hpp; sourceTree = ""; }; 150 | 0167A22323B9843600F0B36E /* vector.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = vector.hpp; sourceTree = ""; }; 151 | 0167A22423B9843600F0B36E /* traits.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = traits.hpp; sourceTree = ""; }; 152 | 0167A22523B9843600F0B36E /* interpolation.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = interpolation.hpp; sourceTree = ""; }; 153 | 0167A22623B9843600F0B36E /* map.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = map.hpp; sourceTree = ""; }; 154 | 0167A22923B9843600F0B36E /* container.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = container.hpp; sourceTree = ""; }; 155 | 0167A22A23B9843600F0B36E /* extract.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = extract.hpp; sourceTree = ""; }; 156 | 0167A22B23B9843600F0B36E /* create.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = create.hpp; sourceTree = ""; }; 157 | 0167A22C23B9843600F0B36E /* node.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = node.hpp; sourceTree = ""; }; 158 | 0167A22E23B9843600F0B36E /* apply.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = apply.hpp; sourceTree = ""; }; 159 | 0167A22F23B9843600F0B36E /* create.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = create.hpp; sourceTree = ""; }; 160 | 0167A23123B9843600F0B36E /* modulo25519-optimized.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "modulo25519-optimized.hpp"; sourceTree = ""; }; 161 | 0167A23223B9843600F0B36E /* curve25519.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = curve25519.hpp; sourceTree = ""; }; 162 | 0167A23323B9843600F0B36E /* ed25519.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = ed25519.hpp; sourceTree = ""; }; 163 | 0167A23423B9843600F0B36E /* modulo25519-reference.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "modulo25519-reference.hpp"; sourceTree = ""; }; 164 | 0167A23523B9843600F0B36E /* arithmetic.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = arithmetic.hpp; sourceTree = ""; }; 165 | 0167A23623B9843600F0B36E /* bit.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = bit.hpp; sourceTree = ""; }; 166 | 0167A23723B9843600F0B36E /* file.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = file.hpp; sourceTree = ""; }; 167 | 0167A23823B9843600F0B36E /* inode.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = inode.hpp; sourceTree = ""; }; 168 | 0167A23923B9843600F0B36E /* intrinsics.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = intrinsics.hpp; sourceTree = ""; }; 169 | 0167A23B23B9843600F0B36E /* clipboard.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = clipboard.hpp; sourceTree = ""; }; 170 | 0167A23C23B9843600F0B36E /* xorg.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = xorg.hpp; sourceTree = ""; }; 171 | 0167A23D23B9843600F0B36E /* guard.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = guard.hpp; sourceTree = ""; }; 172 | 0167A23E23B9843600F0B36E /* service.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = service.hpp; sourceTree = ""; }; 173 | 0167A23F23B9843600F0B36E /* serial.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = serial.hpp; sourceTree = ""; }; 174 | 0167A24023B9843600F0B36E /* terminal.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = terminal.hpp; sourceTree = ""; }; 175 | 0167A24223B9843600F0B36E /* chacha20.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = chacha20.hpp; sourceTree = ""; }; 176 | 0167A24323B9843600F0B36E /* algorithm.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = algorithm.hpp; sourceTree = ""; }; 177 | 0167A24423B9843600F0B36E /* primitives.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = primitives.hpp; sourceTree = ""; }; 178 | 0167A24523B9843600F0B36E /* queue.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = queue.hpp; sourceTree = ""; }; 179 | 0167A24623B9843600F0B36E /* literals.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = literals.hpp; sourceTree = ""; }; 180 | 0167A24723B9843600F0B36E /* variant.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = variant.hpp; sourceTree = ""; }; 181 | 0167A24823B9843600F0B36E /* shared-pointer.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "shared-pointer.hpp"; sourceTree = ""; }; 182 | 0167A24A23B9843600F0B36E /* huffman.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = huffman.hpp; sourceTree = ""; }; 183 | 0167A24B23B9843600F0B36E /* zip.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = zip.hpp; sourceTree = ""; }; 184 | 0167A24C23B9843600F0B36E /* bwt.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = bwt.hpp; sourceTree = ""; }; 185 | 0167A24D23B9843600F0B36E /* mtf.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = mtf.hpp; sourceTree = ""; }; 186 | 0167A24E23B9843600F0B36E /* rle.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = rle.hpp; sourceTree = ""; }; 187 | 0167A24F23B9843600F0B36E /* url.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = url.hpp; sourceTree = ""; }; 188 | 0167A25023B9843600F0B36E /* base.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = base.hpp; sourceTree = ""; }; 189 | 0167A25123B9843600F0B36E /* html.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = html.hpp; sourceTree = ""; }; 190 | 0167A25223B9843600F0B36E /* lzsa.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = lzsa.hpp; sourceTree = ""; }; 191 | 0167A25323B9843600F0B36E /* bmp.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = bmp.hpp; sourceTree = ""; }; 192 | 0167A25423B9843600F0B36E /* base64.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = base64.hpp; sourceTree = ""; }; 193 | 0167A25523B9843600F0B36E /* matrix.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = matrix.hpp; sourceTree = ""; }; 194 | 0167A25623B9843600F0B36E /* dl.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = dl.hpp; sourceTree = ""; }; 195 | 0167A25723B9843600F0B36E /* path.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = path.hpp; sourceTree = ""; }; 196 | 0167A25823B9843600F0B36E /* platform.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = platform.hpp; sourceTree = ""; }; 197 | 0167A25923B9843600F0B36E /* pointer.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = pointer.hpp; sourceTree = ""; }; 198 | 0167A25A23B9843600F0B36E /* galois-field.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "galois-field.hpp"; sourceTree = ""; }; 199 | 0167A25C23B9843600F0B36E /* load.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = load.hpp; sourceTree = ""; }; 200 | 0167A25D23B9843600F0B36E /* static.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = static.hpp; sourceTree = ""; }; 201 | 0167A25E23B9843600F0B36E /* scale.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = scale.hpp; sourceTree = ""; }; 202 | 0167A25F23B9843600F0B36E /* utility.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = utility.hpp; sourceTree = ""; }; 203 | 0167A26023B9843600F0B36E /* interpolation.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = interpolation.hpp; sourceTree = ""; }; 204 | 0167A26123B9843600F0B36E /* blend.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = blend.hpp; sourceTree = ""; }; 205 | 0167A26223B9843600F0B36E /* fill.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = fill.hpp; sourceTree = ""; }; 206 | 0167A26323B9843600F0B36E /* core.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = core.hpp; sourceTree = ""; }; 207 | 0167A26423B9843600F0B36E /* induced-sort.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "induced-sort.hpp"; sourceTree = ""; }; 208 | 0167A26623B9843600F0B36E /* integer.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = integer.hpp; sourceTree = ""; }; 209 | 0167A26723B9843600F0B36E /* boolean.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = boolean.hpp; sourceTree = ""; }; 210 | 0167A26823B9843600F0B36E /* bit-field.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "bit-field.hpp"; sourceTree = ""; }; 211 | 0167A26923B9843600F0B36E /* real.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = real.hpp; sourceTree = ""; }; 212 | 0167A26A23B9843600F0B36E /* literals.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = literals.hpp; sourceTree = ""; }; 213 | 0167A26B23B9843600F0B36E /* natural.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = natural.hpp; sourceTree = ""; }; 214 | 0167A26C23B9843600F0B36E /* bit-range.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "bit-range.hpp"; sourceTree = ""; }; 215 | 0167A26D23B9843600F0B36E /* types.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = types.hpp; sourceTree = ""; }; 216 | 0167A26E23B9843600F0B36E /* property.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = property.hpp; sourceTree = ""; }; 217 | 0167A26F23B9843600F0B36E /* array-view.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "array-view.hpp"; sourceTree = ""; }; 218 | 0167A27023B9843600F0B36E /* random.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = random.hpp; sourceTree = ""; }; 219 | 0167A27223B9843600F0B36E /* poly1305.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = poly1305.hpp; sourceTree = ""; }; 220 | 0167A27423B9843600F0B36E /* huffman.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = huffman.hpp; sourceTree = ""; }; 221 | 0167A27523B9843600F0B36E /* zip.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = zip.hpp; sourceTree = ""; }; 222 | 0167A27623B9843600F0B36E /* bwt.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = bwt.hpp; sourceTree = ""; }; 223 | 0167A27723B9843600F0B36E /* mtf.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = mtf.hpp; sourceTree = ""; }; 224 | 0167A27823B9843600F0B36E /* rle.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = rle.hpp; sourceTree = ""; }; 225 | 0167A27923B9843600F0B36E /* png.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = png.hpp; sourceTree = ""; }; 226 | 0167A27A23B9843600F0B36E /* url.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = url.hpp; sourceTree = ""; }; 227 | 0167A27B23B9843600F0B36E /* base.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = base.hpp; sourceTree = ""; }; 228 | 0167A27C23B9843600F0B36E /* gzip.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = gzip.hpp; sourceTree = ""; }; 229 | 0167A27D23B9843600F0B36E /* html.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = html.hpp; sourceTree = ""; }; 230 | 0167A27E23B9843600F0B36E /* lzsa.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = lzsa.hpp; sourceTree = ""; }; 231 | 0167A27F23B9843600F0B36E /* inflate.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = inflate.hpp; sourceTree = ""; }; 232 | 0167A28023B9843600F0B36E /* bmp.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = bmp.hpp; sourceTree = ""; }; 233 | 0167A28123B9843600F0B36E /* base64.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = base64.hpp; sourceTree = ""; }; 234 | 0167A28223B9843600F0B36E /* any.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = any.hpp; sourceTree = ""; }; 235 | 0167A28323B9843600F0B36E /* endian.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = endian.hpp; sourceTree = ""; }; 236 | 0167A28423B9843600F0B36E /* unique-pointer.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "unique-pointer.hpp"; sourceTree = ""; }; 237 | 0167A28523B9843600F0B36E /* run.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = run.hpp; sourceTree = ""; }; 238 | 0167A28623B9843600F0B36E /* set.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = set.hpp; sourceTree = ""; }; 239 | 0167A28823B9843600F0B36E /* server.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = server.hpp; sourceTree = ""; }; 240 | 0167A28923B9843600F0B36E /* response.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = response.hpp; sourceTree = ""; }; 241 | 0167A28A23B9843600F0B36E /* role.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = role.hpp; sourceTree = ""; }; 242 | 0167A28B23B9843600F0B36E /* request.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = request.hpp; sourceTree = ""; }; 243 | 0167A28C23B9843600F0B36E /* client.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = client.hpp; sourceTree = ""; }; 244 | 0167A28D23B9843600F0B36E /* message.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = message.hpp; sourceTree = ""; }; 245 | 0167A28E23B9843600F0B36E /* hid.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = hid.hpp; sourceTree = ""; }; 246 | 0167A28F23B9843600F0B36E /* stdint.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = stdint.hpp; sourceTree = ""; }; 247 | 0167A29023B9843600F0B36E /* string.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = string.hpp; sourceTree = ""; }; 248 | 0167A29123B9843600F0B36E /* location.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = location.hpp; sourceTree = ""; }; 249 | 0167A29223B9843600F0B36E /* chrono.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = chrono.hpp; sourceTree = ""; }; 250 | 0167A29323B9843600F0B36E /* view.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = view.hpp; sourceTree = ""; }; 251 | 0167A29423B9843600F0B36E /* atoi.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = atoi.hpp; sourceTree = ""; }; 252 | 0167A29523B9843600F0B36E /* directory.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = directory.hpp; sourceTree = ""; }; 253 | 0167A29723B9843600F0B36E /* barrett.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = barrett.hpp; sourceTree = ""; }; 254 | 0167A29823B9843600F0B36E /* unsigned.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = unsigned.hpp; sourceTree = ""; }; 255 | 0167A29923B9843600F0B36E /* natural.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = natural.hpp; sourceTree = ""; }; 256 | 0167A29A23B9843600F0B36E /* file-buffer.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "file-buffer.hpp"; sourceTree = ""; }; 257 | 0167A29B23B9843600F0B36E /* smtp.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = smtp.hpp; sourceTree = ""; }; 258 | 0167A29D23B9843600F0B36E /* cast.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = cast.hpp; sourceTree = ""; }; 259 | 0167A29E23B9843600F0B36E /* utility.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = utility.hpp; sourceTree = ""; }; 260 | 0167A29F23B9843600F0B36E /* utf8.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = utf8.hpp; sourceTree = ""; }; 261 | 0167A2A023B9843600F0B36E /* vector.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = vector.hpp; sourceTree = ""; }; 262 | 0167A2A123B9843600F0B36E /* pascal.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = pascal.hpp; sourceTree = ""; }; 263 | 0167A2A223B9843600F0B36E /* trim.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = trim.hpp; sourceTree = ""; }; 264 | 0167A2A323B9843600F0B36E /* replace.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = replace.hpp; sourceTree = ""; }; 265 | 0167A2A523B9843600F0B36E /* bml.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = bml.hpp; sourceTree = ""; }; 266 | 0167A2A623B9843600F0B36E /* xml.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = xml.hpp; sourceTree = ""; }; 267 | 0167A2A723B9843600F0B36E /* node.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = node.hpp; sourceTree = ""; }; 268 | 0167A2A823B9843600F0B36E /* find.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = find.hpp; sourceTree = ""; }; 269 | 0167A2A923B9843600F0B36E /* find.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = find.hpp; sourceTree = ""; }; 270 | 0167A2AA23B9843600F0B36E /* match.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = match.hpp; sourceTree = ""; }; 271 | 0167A2AC23B9843600F0B36E /* adaptive.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = adaptive.hpp; sourceTree = ""; }; 272 | 0167A2AD23B9843600F0B36E /* vector.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = vector.hpp; sourceTree = ""; }; 273 | 0167A2AE23B9843600F0B36E /* copy-on-write.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "copy-on-write.hpp"; sourceTree = ""; }; 274 | 0167A2AF23B9843600F0B36E /* small-string-optimization.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "small-string-optimization.hpp"; sourceTree = ""; }; 275 | 0167A2B023B9843600F0B36E /* view.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = view.hpp; sourceTree = ""; }; 276 | 0167A2B123B9843600F0B36E /* atoi.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = atoi.hpp; sourceTree = ""; }; 277 | 0167A2B323B9843600F0B36E /* parser.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = parser.hpp; sourceTree = ""; }; 278 | 0167A2B423B9843600F0B36E /* literal.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = literal.hpp; sourceTree = ""; }; 279 | 0167A2B523B9843600F0B36E /* node.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = node.hpp; sourceTree = ""; }; 280 | 0167A2B623B9843600F0B36E /* evaluator.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = evaluator.hpp; sourceTree = ""; }; 281 | 0167A2B823B9843600F0B36E /* dml.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = dml.hpp; sourceTree = ""; }; 282 | 0167A2B923B9843600F0B36E /* cml.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = cml.hpp; sourceTree = ""; }; 283 | 0167A2BA23B9843600F0B36E /* compare.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = compare.hpp; sourceTree = ""; }; 284 | 0167A2BB23B9843600F0B36E /* format.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = format.hpp; sourceTree = ""; }; 285 | 0167A2BC23B9843600F0B36E /* core.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = core.hpp; sourceTree = ""; }; 286 | 0167A2BD23B9843600F0B36E /* split.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = split.hpp; sourceTree = ""; }; 287 | 0167A2BE23B9843600F0B36E /* convert.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = convert.hpp; sourceTree = ""; }; 288 | 0167A2C023B9843600F0B36E /* edc.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = edc.hpp; sourceTree = ""; }; 289 | 0167A2C123B9843600F0B36E /* efm.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = efm.hpp; sourceTree = ""; }; 290 | 0167A2C223B9843600F0B36E /* scrambler.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = scrambler.hpp; sourceTree = ""; }; 291 | 0167A2C323B9843600F0B36E /* session.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = session.hpp; sourceTree = ""; }; 292 | 0167A2C423B9843600F0B36E /* crc16.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = crc16.hpp; sourceTree = ""; }; 293 | 0167A2C523B9843600F0B36E /* rspc.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = rspc.hpp; sourceTree = ""; }; 294 | 0167A2C623B9843600F0B36E /* sync.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = sync.hpp; sourceTree = ""; }; 295 | 0167A2C723B9843600F0B36E /* memory.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = memory.hpp; sourceTree = ""; }; 296 | 0167A2C823B9843600F0B36E /* cd.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = cd.hpp; sourceTree = ""; }; 297 | 0167A2C923B9843600F0B36E /* maybe.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = maybe.hpp; sourceTree = ""; }; 298 | 0167A2CB23B9843600F0B36E /* guid.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = guid.hpp; sourceTree = ""; }; 299 | 0167A2CC23B9843600F0B36E /* utf8.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = utf8.hpp; sourceTree = ""; }; 300 | 0167A2CD23B9843600F0B36E /* launcher.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = launcher.hpp; sourceTree = ""; }; 301 | 0167A2CE23B9843600F0B36E /* registry.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = registry.hpp; sourceTree = ""; }; 302 | 0167A2CF23B9843600F0B36E /* detour.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = detour.hpp; sourceTree = ""; }; 303 | 0167A2D023B9843600F0B36E /* service.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = service.hpp; sourceTree = ""; }; 304 | 0167A2D123B9843600F0B36E /* guard.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = guard.hpp; sourceTree = ""; }; 305 | 0167A2D223B9843600F0B36E /* shared-memory.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "shared-memory.hpp"; sourceTree = ""; }; 306 | 0167A2D323B9843600F0B36E /* thread.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = thread.hpp; sourceTree = ""; }; 307 | 0167A2D423B9843600F0B36E /* merge-sort.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "merge-sort.hpp"; sourceTree = ""; }; 308 | 0167A2D523B9843600F0B36E /* counting-sort.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "counting-sort.hpp"; sourceTree = ""; }; 309 | 0167A2D623B9843600F0B36E /* range.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = range.hpp; sourceTree = ""; }; 310 | 0167A2D923B9843600F0B36E /* cubic.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = cubic.hpp; sourceTree = ""; }; 311 | 0167A2DA23B9843600F0B36E /* dsp.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = dsp.hpp; sourceTree = ""; }; 312 | 0167A2DC23B9843600F0B36E /* one-pole.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "one-pole.hpp"; sourceTree = ""; }; 313 | 0167A2DD23B9843600F0B36E /* biquad.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = biquad.hpp; sourceTree = ""; }; 314 | 0167A2DE23B9843600F0B36E /* dc-removal.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "dc-removal.hpp"; sourceTree = ""; }; 315 | 0167A2E123B9843600F0B36E /* uint8_t.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = uint8_t.hpp; sourceTree = ""; }; 316 | 0167A2E223B9843600F0B36E /* access.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = access.hpp; sourceTree = ""; }; 317 | 0167A2E323B9843600F0B36E /* utility.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = utility.hpp; sourceTree = ""; }; 318 | 0167A2E423B9843600F0B36E /* modify.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = modify.hpp; sourceTree = ""; }; 319 | 0167A2E523B9843600F0B36E /* assign.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = assign.hpp; sourceTree = ""; }; 320 | 0167A2E623B9843600F0B36E /* memory.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = memory.hpp; sourceTree = ""; }; 321 | 0167A2E723B9843600F0B36E /* compare.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = compare.hpp; sourceTree = ""; }; 322 | 0167A2E823B9843600F0B36E /* iterator.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = iterator.hpp; sourceTree = ""; }; 323 | 0167A2E923B9843600F0B36E /* core.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = core.hpp; sourceTree = ""; }; 324 | 0167A2EA23B9843600F0B36E /* iterator.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = iterator.hpp; sourceTree = ""; }; 325 | 0167A2EB23B9843600F0B36E /* image.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = image.hpp; sourceTree = ""; }; 326 | 0167A2EC23B9843600F0B36E /* arguments.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = arguments.hpp; sourceTree = ""; }; 327 | 0167A2ED23B9843600F0B36E /* locale.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = locale.hpp; sourceTree = ""; }; 328 | 0167A2EE23B9843600F0B36E /* simd.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = simd.hpp; sourceTree = ""; }; 329 | 0167A2EF23B9843600F0B36E /* matrix-multiply.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "matrix-multiply.hpp"; sourceTree = ""; }; 330 | 0167A2F023B9843600F0B36E /* shared-memory.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "shared-memory.hpp"; sourceTree = ""; }; 331 | 0167A2F423B9843600F0B36E /* game-boy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "game-boy.cpp"; sourceTree = ""; }; 332 | 0167A2F523B9843600F0B36E /* heuristics.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = heuristics.cpp; sourceTree = ""; }; 333 | 0167A2F623B9843600F0B36E /* sufami-turbo.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "sufami-turbo.cpp"; sourceTree = ""; }; 334 | 0167A2F723B9843600F0B36E /* super-famicom.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "super-famicom.cpp"; sourceTree = ""; }; 335 | 0167A2F823B9843600F0B36E /* heuristics.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = heuristics.hpp; sourceTree = ""; }; 336 | 0167A2F923B9843600F0B36E /* bs-memory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "bs-memory.cpp"; sourceTree = ""; }; 337 | 0167A2FB23B9843600F0B36E /* Sufami Turbo.bml */ = {isa = PBXFileReference; lastKnownFileType = text; path = "Sufami Turbo.bml"; sourceTree = ""; }; 338 | 0167A2FC23B9843600F0B36E /* Cheat Codes.bml */ = {isa = PBXFileReference; lastKnownFileType = text; path = "Cheat Codes.bml"; sourceTree = ""; }; 339 | 0167A2FD23B9843600F0B36E /* BS Memory.bml */ = {isa = PBXFileReference; lastKnownFileType = text; path = "BS Memory.bml"; sourceTree = ""; }; 340 | 0167A2FE23B9843600F0B36E /* Super Famicom.bml */ = {isa = PBXFileReference; lastKnownFileType = text; path = "Super Famicom.bml"; sourceTree = ""; }; 341 | 0167A30823B9843600F0B36E /* interface.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = interface.hpp; sourceTree = ""; }; 342 | 0167A30923B9843600F0B36E /* configuration.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = configuration.hpp; sourceTree = ""; }; 343 | 0167A30A23B9843600F0B36E /* interface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = interface.cpp; sourceTree = ""; }; 344 | 0167A30B23B9843600F0B36E /* configuration.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = configuration.cpp; sourceTree = ""; }; 345 | 0167A30D23B9843600F0B36E /* memory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = memory.cpp; sourceTree = ""; }; 346 | 0167A30E23B9843600F0B36E /* writable.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = writable.hpp; sourceTree = ""; }; 347 | 0167A30F23B9843600F0B36E /* protectable.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = protectable.hpp; sourceTree = ""; }; 348 | 0167A31023B9843600F0B36E /* memory-inline.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "memory-inline.hpp"; sourceTree = ""; }; 349 | 0167A31123B9843600F0B36E /* readable.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = readable.hpp; sourceTree = ""; }; 350 | 0167A31223B9843600F0B36E /* memory.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = memory.hpp; sourceTree = ""; }; 351 | 0167A31423B9843600F0B36E /* memory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = memory.cpp; sourceTree = ""; }; 352 | 0167A31523B9843600F0B36E /* cpu.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = cpu.hpp; sourceTree = ""; }; 353 | 0167A31623B9843600F0B36E /* dma.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dma.cpp; sourceTree = ""; }; 354 | 0167A31723B9843600F0B36E /* io.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = io.cpp; sourceTree = ""; }; 355 | 0167A31823B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 356 | 0167A31923B9843600F0B36E /* cpu.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = cpu.cpp; sourceTree = ""; }; 357 | 0167A31A23B9843600F0B36E /* timing.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = timing.cpp; sourceTree = ""; }; 358 | 0167A31B23B9843600F0B36E /* irq.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = irq.cpp; sourceTree = ""; }; 359 | 0167A31E23B9843600F0B36E /* dsp2.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dsp2.cpp; sourceTree = ""; }; 360 | 0167A31F23B9843600F0B36E /* dsp2.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = dsp2.hpp; sourceTree = ""; }; 361 | 0167A32023B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 362 | 0167A32123B9843600F0B36E /* opcodes.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = opcodes.cpp; sourceTree = ""; }; 363 | 0167A32323B9843600F0B36E /* memory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = memory.cpp; sourceTree = ""; }; 364 | 0167A32423B9843600F0B36E /* armdsp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = armdsp.cpp; sourceTree = ""; }; 365 | 0167A32523B9843600F0B36E /* registers.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = registers.hpp; sourceTree = ""; }; 366 | 0167A32623B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 367 | 0167A32723B9843600F0B36E /* armdsp.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = armdsp.hpp; sourceTree = ""; }; 368 | 0167A32923B9843600F0B36E /* dsp4emu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dsp4emu.h; sourceTree = ""; }; 369 | 0167A32A23B9843600F0B36E /* dsp4.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dsp4.cpp; sourceTree = ""; }; 370 | 0167A32B23B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 371 | 0167A32C23B9843600F0B36E /* dsp4.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = dsp4.hpp; sourceTree = ""; }; 372 | 0167A32D23B9843600F0B36E /* dsp4emu.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = dsp4emu.c; sourceTree = ""; }; 373 | 0167A32F23B9843600F0B36E /* memory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = memory.cpp; sourceTree = ""; }; 374 | 0167A33023B9843600F0B36E /* hitachidsp.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = hitachidsp.hpp; sourceTree = ""; }; 375 | 0167A33123B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 376 | 0167A33223B9843600F0B36E /* data-rom.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "data-rom.cpp"; sourceTree = ""; }; 377 | 0167A33323B9843600F0B36E /* hitachidsp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = hitachidsp.cpp; sourceTree = ""; }; 378 | 0167A33523B9843600F0B36E /* dip.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = dip.hpp; sourceTree = ""; }; 379 | 0167A33623B9843600F0B36E /* dip.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dip.cpp; sourceTree = ""; }; 380 | 0167A33723B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 381 | 0167A33923B9843600F0B36E /* obc1.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = obc1.cpp; sourceTree = ""; }; 382 | 0167A33A23B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 383 | 0167A33B23B9843600F0B36E /* obc1.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = obc1.hpp; sourceTree = ""; }; 384 | 0167A33D23B9843600F0B36E /* st0010.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = st0010.hpp; sourceTree = ""; }; 385 | 0167A33E23B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 386 | 0167A33F23B9843600F0B36E /* opcodes.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = opcodes.cpp; sourceTree = ""; }; 387 | 0167A34023B9843600F0B36E /* st0010.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = st0010.cpp; sourceTree = ""; }; 388 | 0167A34123B9843600F0B36E /* data.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = data.hpp; sourceTree = ""; }; 389 | 0167A34323B9843600F0B36E /* cx4.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = cx4.cpp; sourceTree = ""; }; 390 | 0167A34423B9843600F0B36E /* oam.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = oam.cpp; sourceTree = ""; }; 391 | 0167A34523B9843600F0B36E /* data.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = data.cpp; sourceTree = ""; }; 392 | 0167A34623B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 393 | 0167A34723B9843600F0B36E /* cx4.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = cx4.hpp; sourceTree = ""; }; 394 | 0167A34823B9843600F0B36E /* opcodes.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = opcodes.cpp; sourceTree = ""; }; 395 | 0167A34923B9843600F0B36E /* functions.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = functions.cpp; sourceTree = ""; }; 396 | 0167A34B23B9843600F0B36E /* mcc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = mcc.cpp; sourceTree = ""; }; 397 | 0167A34C23B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 398 | 0167A34D23B9843600F0B36E /* mcc.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = mcc.hpp; sourceTree = ""; }; 399 | 0167A34F23B9843600F0B36E /* boot-roms.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "boot-roms.cpp"; sourceTree = ""; }; 400 | 0167A35023B9843600F0B36E /* icd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = icd.cpp; sourceTree = ""; }; 401 | 0167A35123B9843600F0B36E /* interface.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = interface.cpp; sourceTree = ""; }; 402 | 0167A35223B9843600F0B36E /* io.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = io.cpp; sourceTree = ""; }; 403 | 0167A35323B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 404 | 0167A35423B9843600F0B36E /* icd.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = icd.hpp; sourceTree = ""; }; 405 | 0167A35523B9843600F0B36E /* coprocessor.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = coprocessor.hpp; sourceTree = ""; }; 406 | 0167A35723B9843600F0B36E /* dsp1.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dsp1.cpp; sourceTree = ""; }; 407 | 0167A35823B9843600F0B36E /* dsp1emu.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dsp1emu.cpp; sourceTree = ""; }; 408 | 0167A35923B9843600F0B36E /* dsp1.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = dsp1.hpp; sourceTree = ""; }; 409 | 0167A35A23B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 410 | 0167A35B23B9843600F0B36E /* dsp1emu.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = dsp1emu.hpp; sourceTree = ""; }; 411 | 0167A35D23B9843600F0B36E /* memory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = memory.cpp; sourceTree = ""; }; 412 | 0167A35E23B9843600F0B36E /* dma.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dma.cpp; sourceTree = ""; }; 413 | 0167A35F23B9843600F0B36E /* bwram.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = bwram.cpp; sourceTree = ""; }; 414 | 0167A36023B9843600F0B36E /* sa1.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = sa1.hpp; sourceTree = ""; }; 415 | 0167A36123B9843600F0B36E /* io.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = io.cpp; sourceTree = ""; }; 416 | 0167A36223B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 417 | 0167A36323B9843600F0B36E /* rom.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = rom.cpp; sourceTree = ""; }; 418 | 0167A36423B9843600F0B36E /* iram.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = iram.cpp; sourceTree = ""; }; 419 | 0167A36523B9843600F0B36E /* sa1.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = sa1.cpp; sourceTree = ""; }; 420 | 0167A36723B9843600F0B36E /* msu1.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = msu1.cpp; sourceTree = ""; }; 421 | 0167A36823B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 422 | 0167A36923B9843600F0B36E /* msu1.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = msu1.hpp; sourceTree = ""; }; 423 | 0167A36B23B9843600F0B36E /* decompressor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = decompressor.cpp; sourceTree = ""; }; 424 | 0167A36C23B9843600F0B36E /* alu.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = alu.cpp; sourceTree = ""; }; 425 | 0167A36D23B9843600F0B36E /* data.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = data.cpp; sourceTree = ""; }; 426 | 0167A36E23B9843600F0B36E /* spc7110.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = spc7110.cpp; sourceTree = ""; }; 427 | 0167A36F23B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 428 | 0167A37023B9843600F0B36E /* spc7110.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = spc7110.hpp; sourceTree = ""; }; 429 | 0167A37123B9843600F0B36E /* dcu.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dcu.cpp; sourceTree = ""; }; 430 | 0167A37323B9843600F0B36E /* decompressor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = decompressor.cpp; sourceTree = ""; }; 431 | 0167A37423B9843600F0B36E /* sdd1.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = sdd1.cpp; sourceTree = ""; }; 432 | 0167A37523B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 433 | 0167A37623B9843600F0B36E /* decompressor.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = decompressor.hpp; sourceTree = ""; }; 434 | 0167A37723B9843600F0B36E /* sdd1.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = sdd1.hpp; sourceTree = ""; }; 435 | 0167A37823B9843600F0B36E /* coprocessor.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = coprocessor.cpp; sourceTree = ""; }; 436 | 0167A37A23B9843600F0B36E /* necdsp.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = necdsp.hpp; sourceTree = ""; }; 437 | 0167A37B23B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 438 | 0167A37C23B9843600F0B36E /* necdsp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = necdsp.cpp; sourceTree = ""; }; 439 | 0167A37E23B9843600F0B36E /* memory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = memory.cpp; sourceTree = ""; }; 440 | 0167A37F23B9843600F0B36E /* epsonrtc.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = epsonrtc.hpp; sourceTree = ""; }; 441 | 0167A38023B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 442 | 0167A38123B9843600F0B36E /* epsonrtc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = epsonrtc.cpp; sourceTree = ""; }; 443 | 0167A38223B9843600F0B36E /* time.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = time.cpp; sourceTree = ""; }; 444 | 0167A38423B9843600F0B36E /* memory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = memory.cpp; sourceTree = ""; }; 445 | 0167A38523B9843600F0B36E /* sharprtc.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = sharprtc.hpp; sourceTree = ""; }; 446 | 0167A38623B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 447 | 0167A38723B9843600F0B36E /* sharprtc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = sharprtc.cpp; sourceTree = ""; }; 448 | 0167A38823B9843600F0B36E /* time.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = time.cpp; sourceTree = ""; }; 449 | 0167A38A23B9843600F0B36E /* bus.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = bus.cpp; sourceTree = ""; }; 450 | 0167A38B23B9843600F0B36E /* memory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = memory.cpp; sourceTree = ""; }; 451 | 0167A38C23B9843600F0B36E /* core.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = core.cpp; sourceTree = ""; }; 452 | 0167A38D23B9843600F0B36E /* superfx.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = superfx.hpp; sourceTree = ""; }; 453 | 0167A38E23B9843600F0B36E /* io.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = io.cpp; sourceTree = ""; }; 454 | 0167A38F23B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 455 | 0167A39023B9843600F0B36E /* superfx.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = superfx.cpp; sourceTree = ""; }; 456 | 0167A39123B9843600F0B36E /* timing.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = timing.cpp; sourceTree = ""; }; 457 | 0167A39323B9843600F0B36E /* event.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = event.hpp; sourceTree = ""; }; 458 | 0167A39423B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 459 | 0167A39523B9843600F0B36E /* event.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = event.cpp; sourceTree = ""; }; 460 | 0167A39623B9843600F0B36E /* sfc.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = sfc.hpp; sourceTree = ""; }; 461 | 0167A39823B9843600F0B36E /* save.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = save.cpp; sourceTree = ""; }; 462 | 0167A39923B9843600F0B36E /* cartridge.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = cartridge.cpp; sourceTree = ""; }; 463 | 0167A39A23B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 464 | 0167A39B23B9843600F0B36E /* load.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = load.cpp; sourceTree = ""; }; 465 | 0167A39C23B9843600F0B36E /* cartridge.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = cartridge.hpp; sourceTree = ""; }; 466 | 0167A39E23B9843600F0B36E /* controller.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = controller.hpp; sourceTree = ""; }; 467 | 0167A3A023B9843600F0B36E /* super-multitap.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "super-multitap.hpp"; sourceTree = ""; }; 468 | 0167A3A123B9843600F0B36E /* super-multitap.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "super-multitap.cpp"; sourceTree = ""; }; 469 | 0167A3A323B9843600F0B36E /* gamepad.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = gamepad.cpp; sourceTree = ""; }; 470 | 0167A3A423B9843600F0B36E /* gamepad.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = gamepad.hpp; sourceTree = ""; }; 471 | 0167A3A623B9843600F0B36E /* justifier.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = justifier.cpp; sourceTree = ""; }; 472 | 0167A3A723B9843600F0B36E /* justifier.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = justifier.hpp; sourceTree = ""; }; 473 | 0167A3A923B9843600F0B36E /* mouse.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = mouse.cpp; sourceTree = ""; }; 474 | 0167A3AA23B9843600F0B36E /* mouse.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = mouse.hpp; sourceTree = ""; }; 475 | 0167A3AC23B9843600F0B36E /* super-scope.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "super-scope.cpp"; sourceTree = ""; }; 476 | 0167A3AD23B9843600F0B36E /* super-scope.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "super-scope.hpp"; sourceTree = ""; }; 477 | 0167A3AE23B9843600F0B36E /* controller.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = controller.cpp; sourceTree = ""; }; 478 | 0167A3B023B9843600F0B36E /* mode7hd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = mode7hd.cpp; sourceTree = ""; }; 479 | 0167A3B123B9843600F0B36E /* line.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = line.cpp; sourceTree = ""; }; 480 | 0167A3B223B9843600F0B36E /* ppu.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ppu.cpp; sourceTree = ""; }; 481 | 0167A3B323B9843600F0B36E /* window.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = window.cpp; sourceTree = ""; }; 482 | 0167A3B423B9843600F0B36E /* mode7.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = mode7.cpp; sourceTree = ""; }; 483 | 0167A3B523B9843600F0B36E /* object.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = object.cpp; sourceTree = ""; }; 484 | 0167A3B623B9843600F0B36E /* io.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = io.cpp; sourceTree = ""; }; 485 | 0167A3B723B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 486 | 0167A3B823B9843600F0B36E /* background.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = background.cpp; sourceTree = ""; }; 487 | 0167A3B923B9843600F0B36E /* ppu.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = ppu.hpp; sourceTree = ""; }; 488 | 0167A3BB23B9843600F0B36E /* system.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = system.hpp; sourceTree = ""; }; 489 | 0167A3BC23B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 490 | 0167A3BD23B9843600F0B36E /* system.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = system.cpp; sourceTree = ""; }; 491 | 0167A3C023B9843600F0B36E /* 21fx.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = 21fx.cpp; sourceTree = ""; }; 492 | 0167A3C123B9843600F0B36E /* 21fx.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = 21fx.hpp; sourceTree = ""; }; 493 | 0167A3C223B9843600F0B36E /* expansion.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = expansion.cpp; sourceTree = ""; }; 494 | 0167A3C423B9843600F0B36E /* satellaview.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = satellaview.hpp; sourceTree = ""; }; 495 | 0167A3C523B9843600F0B36E /* satellaview.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = satellaview.cpp; sourceTree = ""; }; 496 | 0167A3C623B9843600F0B36E /* expansion.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = expansion.hpp; sourceTree = ""; }; 497 | 0167A3C823B9843600F0B36E /* memory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = memory.cpp; sourceTree = ""; }; 498 | 0167A3C923B9843600F0B36E /* smp.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = smp.hpp; sourceTree = ""; }; 499 | 0167A3CA23B9843600F0B36E /* io.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = io.cpp; sourceTree = ""; }; 500 | 0167A3CB23B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 501 | 0167A3CC23B9843600F0B36E /* timing.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = timing.cpp; sourceTree = ""; }; 502 | 0167A3CD23B9843600F0B36E /* smp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = smp.cpp; sourceTree = ""; }; 503 | 0167A3D023B9843600F0B36E /* bsmemory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = bsmemory.cpp; sourceTree = ""; }; 504 | 0167A3D123B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 505 | 0167A3D223B9843600F0B36E /* bsmemory.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = bsmemory.hpp; sourceTree = ""; }; 506 | 0167A3D323B9843600F0B36E /* slot.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = slot.hpp; sourceTree = ""; }; 507 | 0167A3D423B9843600F0B36E /* slot.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = slot.cpp; sourceTree = ""; }; 508 | 0167A3D623B9843600F0B36E /* sufamiturbo.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = sufamiturbo.cpp; sourceTree = ""; }; 509 | 0167A3D723B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 510 | 0167A3D823B9843600F0B36E /* sufamiturbo.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = sufamiturbo.hpp; sourceTree = ""; }; 511 | 0167A3DA23B9843600F0B36E /* ppu.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ppu.cpp; sourceTree = ""; }; 512 | 0167A3DB23B9843600F0B36E /* window.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = window.cpp; sourceTree = ""; }; 513 | 0167A3DC23B9843600F0B36E /* mode7.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = mode7.cpp; sourceTree = ""; }; 514 | 0167A3DD23B9843600F0B36E /* screen.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = screen.cpp; sourceTree = ""; }; 515 | 0167A3DE23B9843600F0B36E /* object.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = object.cpp; sourceTree = ""; }; 516 | 0167A3DF23B9843600F0B36E /* oam.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = oam.cpp; sourceTree = ""; }; 517 | 0167A3E023B9843600F0B36E /* background.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = background.hpp; sourceTree = ""; }; 518 | 0167A3E123B9843600F0B36E /* window.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = window.hpp; sourceTree = ""; }; 519 | 0167A3E223B9843600F0B36E /* screen.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = screen.hpp; sourceTree = ""; }; 520 | 0167A3E323B9843600F0B36E /* object.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = object.hpp; sourceTree = ""; }; 521 | 0167A3E423B9843600F0B36E /* io.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = io.cpp; sourceTree = ""; }; 522 | 0167A3E523B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 523 | 0167A3E623B9843600F0B36E /* background.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = background.cpp; sourceTree = ""; }; 524 | 0167A3E823B9843600F0B36E /* counter.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = counter.hpp; sourceTree = ""; }; 525 | 0167A3E923B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 526 | 0167A3EA23B9843600F0B36E /* counter-inline.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = "counter-inline.hpp"; sourceTree = ""; }; 527 | 0167A3EB23B9843600F0B36E /* ppu.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = ppu.hpp; sourceTree = ""; }; 528 | 0167A3EC23B9843600F0B36E /* main.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = ""; }; 529 | 0167A3EE23B9843600F0B36E /* blargg_common.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = blargg_common.h; sourceTree = ""; }; 530 | 0167A3EF23B9843600F0B36E /* SPC_DSP.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SPC_DSP.h; sourceTree = ""; }; 531 | 0167A3F023B9843600F0B36E /* dsp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = dsp.cpp; sourceTree = ""; }; 532 | 0167A3F123B9843600F0B36E /* blargg_config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = blargg_config.h; sourceTree = ""; }; 533 | 0167A3F223B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 534 | 0167A3F323B9843600F0B36E /* dsp.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = dsp.hpp; sourceTree = ""; }; 535 | 0167A3F423B9843600F0B36E /* blargg_source.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = blargg_source.h; sourceTree = ""; }; 536 | 0167A3F523B9843600F0B36E /* SPC_DSP.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SPC_DSP.cpp; sourceTree = ""; }; 537 | 0167A3F623B9843600F0B36E /* blargg_endian.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = blargg_endian.h; sourceTree = ""; }; 538 | 0167A3FA23B9843600F0B36E /* memory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = memory.cpp; sourceTree = ""; }; 539 | 0167A3FB23B9843600F0B36E /* algorithms.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = algorithms.cpp; sourceTree = ""; }; 540 | 0167A3FC23B9843600F0B36E /* sm83.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = sm83.hpp; sourceTree = ""; }; 541 | 0167A3FD23B9843600F0B36E /* disassembler.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = disassembler.cpp; sourceTree = ""; }; 542 | 0167A3FE23B9843600F0B36E /* registers.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = registers.cpp; sourceTree = ""; }; 543 | 0167A3FF23B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 544 | 0167A40023B9843600F0B36E /* instruction.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = instruction.cpp; sourceTree = ""; }; 545 | 0167A40123B9843600F0B36E /* sm83.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = sm83.cpp; sourceTree = ""; }; 546 | 0167A40223B9843600F0B36E /* instructions.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = instructions.cpp; sourceTree = ""; }; 547 | 0167A40423B9843600F0B36E /* gsu.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = gsu.cpp; sourceTree = ""; }; 548 | 0167A40523B9843600F0B36E /* disassembler.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = disassembler.cpp; sourceTree = ""; }; 549 | 0167A40623B9843600F0B36E /* registers.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = registers.hpp; sourceTree = ""; }; 550 | 0167A40723B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 551 | 0167A40823B9843600F0B36E /* instruction.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = instruction.cpp; sourceTree = ""; }; 552 | 0167A40923B9843600F0B36E /* gsu.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = gsu.hpp; sourceTree = ""; }; 553 | 0167A40A23B9843600F0B36E /* instructions.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = instructions.cpp; sourceTree = ""; }; 554 | 0167A40C23B9843600F0B36E /* hg51b.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = hg51b.hpp; sourceTree = ""; }; 555 | 0167A40D23B9843600F0B36E /* registers.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = registers.cpp; sourceTree = ""; }; 556 | 0167A40E23B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 557 | 0167A40F23B9843600F0B36E /* instruction.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = instruction.cpp; sourceTree = ""; }; 558 | 0167A41023B9843600F0B36E /* hg51b.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = hg51b.cpp; sourceTree = ""; }; 559 | 0167A41123B9843600F0B36E /* instructions.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = instructions.cpp; sourceTree = ""; }; 560 | 0167A41323B9843600F0B36E /* memory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = memory.cpp; sourceTree = ""; }; 561 | 0167A41423B9843600F0B36E /* instruction.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = instruction.hpp; sourceTree = ""; }; 562 | 0167A41523B9843600F0B36E /* algorithms.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = algorithms.cpp; sourceTree = ""; }; 563 | 0167A41623B9843600F0B36E /* disassembler.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = disassembler.cpp; sourceTree = ""; }; 564 | 0167A41723B9843600F0B36E /* wdc65816.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = wdc65816.hpp; sourceTree = ""; }; 565 | 0167A41823B9843600F0B36E /* instructions-read.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "instructions-read.cpp"; sourceTree = ""; }; 566 | 0167A41923B9843600F0B36E /* wdc65816.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = wdc65816.cpp; sourceTree = ""; }; 567 | 0167A41A23B9843600F0B36E /* instructions-pc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "instructions-pc.cpp"; sourceTree = ""; }; 568 | 0167A41B23B9843600F0B36E /* instructions-write.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "instructions-write.cpp"; sourceTree = ""; }; 569 | 0167A41C23B9843600F0B36E /* registers.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = registers.hpp; sourceTree = ""; }; 570 | 0167A41D23B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 571 | 0167A41E23B9843600F0B36E /* instructions-modify.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "instructions-modify.cpp"; sourceTree = ""; }; 572 | 0167A41F23B9843600F0B36E /* instruction.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = instruction.cpp; sourceTree = ""; }; 573 | 0167A42023B9843600F0B36E /* instructions-other.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "instructions-other.cpp"; sourceTree = ""; }; 574 | 0167A42223B9843600F0B36E /* memory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = memory.cpp; sourceTree = ""; }; 575 | 0167A42323B9843600F0B36E /* disassembler.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = disassembler.cpp; sourceTree = ""; }; 576 | 0167A42423B9843600F0B36E /* upd96050.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = upd96050.hpp; sourceTree = ""; }; 577 | 0167A42523B9843600F0B36E /* upd96050.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = upd96050.cpp; sourceTree = ""; }; 578 | 0167A42623B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 579 | 0167A42723B9843600F0B36E /* instructions.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = instructions.cpp; sourceTree = ""; }; 580 | 0167A42823B9843600F0B36E /* processor.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = processor.hpp; sourceTree = ""; }; 581 | 0167A42A23B9843600F0B36E /* memory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = memory.cpp; sourceTree = ""; }; 582 | 0167A42B23B9843600F0B36E /* algorithms.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = algorithms.cpp; sourceTree = ""; }; 583 | 0167A42C23B9843600F0B36E /* disassembler.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = disassembler.cpp; sourceTree = ""; }; 584 | 0167A42D23B9843600F0B36E /* instructions-arm.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "instructions-arm.cpp"; sourceTree = ""; }; 585 | 0167A42E23B9843600F0B36E /* registers.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = registers.cpp; sourceTree = ""; }; 586 | 0167A42F23B9843600F0B36E /* arm7tdmi.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = arm7tdmi.hpp; sourceTree = ""; }; 587 | 0167A43023B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 588 | 0167A43123B9843600F0B36E /* arm7tdmi.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = arm7tdmi.cpp; sourceTree = ""; }; 589 | 0167A43223B9843600F0B36E /* instructions-thumb.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "instructions-thumb.cpp"; sourceTree = ""; }; 590 | 0167A43323B9843600F0B36E /* instruction.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = instruction.cpp; sourceTree = ""; }; 591 | 0167A43523B9843600F0B36E /* memory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = memory.cpp; sourceTree = ""; }; 592 | 0167A43623B9843600F0B36E /* algorithms.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = algorithms.cpp; sourceTree = ""; }; 593 | 0167A43723B9843600F0B36E /* disassembler.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = disassembler.cpp; sourceTree = ""; }; 594 | 0167A43823B9843600F0B36E /* spc700.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = spc700.hpp; sourceTree = ""; }; 595 | 0167A43923B9843600F0B36E /* serialization.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = serialization.cpp; sourceTree = ""; }; 596 | 0167A43A23B9843600F0B36E /* spc700.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = spc700.cpp; sourceTree = ""; }; 597 | 0167A43B23B9843600F0B36E /* instruction.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = instruction.cpp; sourceTree = ""; }; 598 | 0167A43C23B9843600F0B36E /* instructions.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = instructions.cpp; sourceTree = ""; }; 599 | 0167A44023B9843600F0B36E /* sm83_cpu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = sm83_cpu.h; sourceTree = ""; }; 600 | 0167A44123B9843600F0B36E /* sgb_animation_logo.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; path = sgb_animation_logo.inc; sourceTree = ""; }; 601 | 0167A44223B9843600F0B36E /* printer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = printer.h; sourceTree = ""; }; 602 | 0167A44323B9843600F0B36E /* display.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = display.c; sourceTree = ""; }; 603 | 0167A44423B9843600F0B36E /* sgb.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = sgb.h; sourceTree = ""; }; 604 | 0167A44523B9843600F0B36E /* memory.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = memory.c; sourceTree = ""; }; 605 | 0167A44623B9843600F0B36E /* save_state.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = save_state.h; sourceTree = ""; }; 606 | 0167A44723B9843600F0B36E /* apu.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = apu.c; sourceTree = ""; }; 607 | 0167A44823B9843600F0B36E /* mbc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mbc.h; sourceTree = ""; }; 608 | 0167A44923B9843600F0B36E /* gb.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = gb.c; sourceTree = ""; }; 609 | 0167A44A23B9843600F0B36E /* camera.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = camera.h; sourceTree = ""; }; 610 | 0167A44B23B9843600F0B36E /* joypad.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = joypad.c; sourceTree = ""; }; 611 | 0167A44C23B9843600F0B36E /* debugger.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = debugger.c; sourceTree = ""; }; 612 | 0167A44D23B9843600F0B36E /* timing.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = timing.h; sourceTree = ""; }; 613 | 0167A44E23B9843600F0B36E /* rewind.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rewind.h; sourceTree = ""; }; 614 | 0167A44F23B9843600F0B36E /* sgb_border.inc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.pascal; path = sgb_border.inc; sourceTree = ""; }; 615 | 0167A45023B9843600F0B36E /* random.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = random.c; sourceTree = ""; }; 616 | 0167A45123B9843600F0B36E /* symbol_hash.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = symbol_hash.c; sourceTree = ""; }; 617 | 0167A45223B9843600F0B36E /* sgb.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = sgb.c; sourceTree = ""; }; 618 | 0167A45323B9843600F0B36E /* display.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = display.h; sourceTree = ""; }; 619 | 0167A45423B9843600F0B36E /* printer.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = printer.c; sourceTree = ""; }; 620 | 0167A45523B9843600F0B36E /* sm83_cpu.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = sm83_cpu.c; sourceTree = ""; }; 621 | 0167A45623B9843600F0B36E /* mbc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = mbc.c; sourceTree = ""; }; 622 | 0167A45723B9843600F0B36E /* gb.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gb.h; sourceTree = ""; }; 623 | 0167A45823B9843600F0B36E /* save_state.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = save_state.c; sourceTree = ""; }; 624 | 0167A45923B9843600F0B36E /* apu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = apu.h; sourceTree = ""; }; 625 | 0167A45A23B9843600F0B36E /* memory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = memory.h; sourceTree = ""; }; 626 | 0167A45B23B9843600F0B36E /* sm83_disassembler.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = sm83_disassembler.c; sourceTree = ""; }; 627 | 0167A45C23B9843600F0B36E /* debugger.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = debugger.h; sourceTree = ""; }; 628 | 0167A45D23B9843600F0B36E /* rewind.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = rewind.c; sourceTree = ""; }; 629 | 0167A45E23B9843600F0B36E /* timing.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = timing.c; sourceTree = ""; }; 630 | 0167A45F23B9843600F0B36E /* camera.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = camera.c; sourceTree = ""; }; 631 | 0167A46023B9843600F0B36E /* joypad.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = joypad.h; sourceTree = ""; }; 632 | 0167A46123B9843600F0B36E /* symbol_hash.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = symbol_hash.h; sourceTree = ""; }; 633 | 0167A46223B9843600F0B36E /* random.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = random.h; sourceTree = ""; }; 634 | 0167A46323B9843600F0B36E /* gb_struct_def.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = gb_struct_def.h; sourceTree = ""; }; 635 | 0167A46423B9843600F0B36E /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; 636 | 0167A46523B9843600F0B36E /* README */ = {isa = PBXFileReference; lastKnownFileType = text; path = README; sourceTree = ""; }; 637 | 0167A4CD23B9843600F0B36E /* cheat.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = cheat.hpp; sourceTree = ""; }; 638 | 0167A4CF23B9843600F0B36E /* writable.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = writable.hpp; sourceTree = ""; }; 639 | 0167A4D023B9843600F0B36E /* readable.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = readable.hpp; sourceTree = ""; }; 640 | 0167A4D123B9843600F0B36E /* memory.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = memory.hpp; sourceTree = ""; }; 641 | 0167A4D223B9843600F0B36E /* game.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = game.hpp; sourceTree = ""; }; 642 | 0167A4D323B9843600F0B36E /* emulator.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = emulator.cpp; sourceTree = ""; }; 643 | 0167A4D423B9843600F0B36E /* interface.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = interface.hpp; sourceTree = ""; }; 644 | 0167A4D523B9843600F0B36E /* platform.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = platform.hpp; sourceTree = ""; }; 645 | 0167A4D623B9843600F0B36E /* random.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = random.hpp; sourceTree = ""; }; 646 | 0167A4D723B9843600F0B36E /* emulator.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = emulator.hpp; sourceTree = ""; }; 647 | 0167A4D923B9843600F0B36E /* audio.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = audio.cpp; sourceTree = ""; }; 648 | 0167A4DA23B9843600F0B36E /* audio.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = audio.hpp; sourceTree = ""; }; 649 | 0167A4DB23B9843600F0B36E /* stream.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = stream.cpp; sourceTree = ""; }; 650 | 0167A4DC23B9843600F0B36E /* types.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = types.hpp; sourceTree = ""; }; 651 | 0167A4DE23B9843600F0B36E /* Lzma2Dec.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Lzma2Dec.c; sourceTree = ""; }; 652 | 0167A4DF23B9843600F0B36E /* LzHash.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LzHash.h; sourceTree = ""; }; 653 | 0167A4E023B9843600F0B36E /* LzmaEnc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = LzmaEnc.c; sourceTree = ""; }; 654 | 0167A4E123B9843600F0B36E /* Ppmd7Dec.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Ppmd7Dec.c; sourceTree = ""; }; 655 | 0167A4E223B9843600F0B36E /* Aes.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Aes.c; sourceTree = ""; }; 656 | 0167A4E323B9843600F0B36E /* LzFindMt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = LzFindMt.c; sourceTree = ""; }; 657 | 0167A4E423B9843600F0B36E /* lzma.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = lzma.cpp; sourceTree = ""; }; 658 | 0167A4E523B9843600F0B36E /* 7zTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 7zTypes.h; sourceTree = ""; }; 659 | 0167A4E623B9843600F0B36E /* XzDec.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = XzDec.c; sourceTree = ""; }; 660 | 0167A4E723B9843600F0B36E /* MtDec.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = MtDec.c; sourceTree = ""; }; 661 | 0167A4E823B9843600F0B36E /* MtCoder.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = MtCoder.c; sourceTree = ""; }; 662 | 0167A4E923B9843600F0B36E /* Bcj2.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Bcj2.c; sourceTree = ""; }; 663 | 0167A4EA23B9843600F0B36E /* Compiler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Compiler.h; sourceTree = ""; }; 664 | 0167A4EB23B9843600F0B36E /* LzFind.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = LzFind.c; sourceTree = ""; }; 665 | 0167A4EC23B9843600F0B36E /* XzCrc64.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XzCrc64.h; sourceTree = ""; }; 666 | 0167A4ED23B9843600F0B36E /* Precomp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Precomp.h; sourceTree = ""; }; 667 | 0167A4EE23B9843600F0B36E /* DllSecur.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = DllSecur.c; sourceTree = ""; }; 668 | 0167A4EF23B9843600F0B36E /* CpuArch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CpuArch.h; sourceTree = ""; }; 669 | 0167A4F023B9843600F0B36E /* Sort.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Sort.c; sourceTree = ""; }; 670 | 0167A4F123B9843600F0B36E /* 7zCrc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 7zCrc.h; sourceTree = ""; }; 671 | 0167A4F223B9843600F0B36E /* Ppmd7.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Ppmd7.c; sourceTree = ""; }; 672 | 0167A4F323B9843600F0B36E /* Delta.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Delta.h; sourceTree = ""; }; 673 | 0167A4F423B9843600F0B36E /* Bra.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Bra.c; sourceTree = ""; }; 674 | 0167A4F523B9843600F0B36E /* 7zFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 7zFile.h; sourceTree = ""; }; 675 | 0167A4F623B9843600F0B36E /* Bra86.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Bra86.c; sourceTree = ""; }; 676 | 0167A4F723B9843600F0B36E /* 7zArcIn.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = 7zArcIn.c; sourceTree = ""; }; 677 | 0167A4F823B9843600F0B36E /* 7zAlloc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = 7zAlloc.c; sourceTree = ""; }; 678 | 0167A4F923B9843600F0B36E /* Sha256.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Sha256.h; sourceTree = ""; }; 679 | 0167A4FA23B9843600F0B36E /* XzIn.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = XzIn.c; sourceTree = ""; }; 680 | 0167A4FB23B9843600F0B36E /* XzEnc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = XzEnc.c; sourceTree = ""; }; 681 | 0167A4FC23B9843600F0B36E /* Lzma2DecMt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Lzma2DecMt.c; sourceTree = ""; }; 682 | 0167A4FD23B9843600F0B36E /* Threads.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Threads.h; sourceTree = ""; }; 683 | 0167A4FE23B9843600F0B36E /* LzmaLib.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LzmaLib.h; sourceTree = ""; }; 684 | 0167A4FF23B9843600F0B36E /* 7zBuf.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 7zBuf.h; sourceTree = ""; }; 685 | 0167A50023B9843600F0B36E /* 7z.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 7z.h; sourceTree = ""; }; 686 | 0167A50123B9843600F0B36E /* Alloc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Alloc.c; sourceTree = ""; }; 687 | 0167A50223B9843600F0B36E /* Xz.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Xz.h; sourceTree = ""; }; 688 | 0167A50323B9843600F0B36E /* LzmaDec.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = LzmaDec.c; sourceTree = ""; }; 689 | 0167A50423B9843600F0B36E /* Lzma2Enc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Lzma2Enc.c; sourceTree = ""; }; 690 | 0167A50523B9843600F0B36E /* Ppmd7Enc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Ppmd7Enc.c; sourceTree = ""; }; 691 | 0167A50623B9843600F0B36E /* LzFindMt.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LzFindMt.h; sourceTree = ""; }; 692 | 0167A50723B9843600F0B36E /* 7zDec.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = 7zDec.c; sourceTree = ""; }; 693 | 0167A50823B9843600F0B36E /* Lzma86.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Lzma86.h; sourceTree = ""; }; 694 | 0167A50923B9843600F0B36E /* LzmaEnc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LzmaEnc.h; sourceTree = ""; }; 695 | 0167A50A23B9843600F0B36E /* Lzma2Dec.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Lzma2Dec.h; sourceTree = ""; }; 696 | 0167A50B23B9843700F0B36E /* Aes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Aes.h; sourceTree = ""; }; 697 | 0167A50C23B9843700F0B36E /* DllSecur.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DllSecur.h; sourceTree = ""; }; 698 | 0167A50D23B9843700F0B36E /* 7zBuf2.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = 7zBuf2.c; sourceTree = ""; }; 699 | 0167A50E23B9843700F0B36E /* XzCrc64.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = XzCrc64.c; sourceTree = ""; }; 700 | 0167A50F23B9843700F0B36E /* LzFind.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LzFind.h; sourceTree = ""; }; 701 | 0167A51023B9843700F0B36E /* BraIA64.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = BraIA64.c; sourceTree = ""; }; 702 | 0167A51123B9843700F0B36E /* Lzma86Dec.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Lzma86Dec.c; sourceTree = ""; }; 703 | 0167A51223B9843700F0B36E /* 7zStream.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = 7zStream.c; sourceTree = ""; }; 704 | 0167A51323B9843700F0B36E /* Bcj2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Bcj2.h; sourceTree = ""; }; 705 | 0167A51423B9843700F0B36E /* 7zVersion.rc */ = {isa = PBXFileReference; lastKnownFileType = text; path = 7zVersion.rc; sourceTree = ""; }; 706 | 0167A51523B9843700F0B36E /* Ppmd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Ppmd.h; sourceTree = ""; }; 707 | 0167A51623B9843700F0B36E /* MtDec.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MtDec.h; sourceTree = ""; }; 708 | 0167A51723B9843700F0B36E /* MtCoder.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MtCoder.h; sourceTree = ""; }; 709 | 0167A51823B9843700F0B36E /* Sha256.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Sha256.c; sourceTree = ""; }; 710 | 0167A51923B9843700F0B36E /* 7zAlloc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 7zAlloc.h; sourceTree = ""; }; 711 | 0167A51A23B9843700F0B36E /* Delta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Delta.c; sourceTree = ""; }; 712 | 0167A51B23B9843700F0B36E /* 7zVersion.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 7zVersion.h; sourceTree = ""; }; 713 | 0167A51C23B9843700F0B36E /* 7zFile.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = 7zFile.c; sourceTree = ""; }; 714 | 0167A51D23B9843700F0B36E /* lzma.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = lzma.hpp; sourceTree = ""; }; 715 | 0167A51E23B9843700F0B36E /* Bra.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Bra.h; sourceTree = ""; }; 716 | 0167A51F23B9843700F0B36E /* 7zCrc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = 7zCrc.c; sourceTree = ""; }; 717 | 0167A52023B9843700F0B36E /* Sort.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Sort.h; sourceTree = ""; }; 718 | 0167A52123B9843700F0B36E /* AesOpt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = AesOpt.c; sourceTree = ""; }; 719 | 0167A52223B9843700F0B36E /* RotateDefs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RotateDefs.h; sourceTree = ""; }; 720 | 0167A52323B9843700F0B36E /* Lzma86Enc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Lzma86Enc.c; sourceTree = ""; }; 721 | 0167A52423B9843700F0B36E /* Ppmd7.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Ppmd7.h; sourceTree = ""; }; 722 | 0167A52523B9843700F0B36E /* CpuArch.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = CpuArch.c; sourceTree = ""; }; 723 | 0167A52623B9843700F0B36E /* Lzma2Enc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Lzma2Enc.h; sourceTree = ""; }; 724 | 0167A52723B9843700F0B36E /* Bcj2Enc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Bcj2Enc.c; sourceTree = ""; }; 725 | 0167A52823B9843700F0B36E /* LzmaDec.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LzmaDec.h; sourceTree = ""; }; 726 | 0167A52923B9843700F0B36E /* XzCrc64Opt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = XzCrc64Opt.c; sourceTree = ""; }; 727 | 0167A52A23B9843700F0B36E /* Xz.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Xz.c; sourceTree = ""; }; 728 | 0167A52B23B9843700F0B36E /* 7zCrcOpt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = 7zCrcOpt.c; sourceTree = ""; }; 729 | 0167A52C23B9843700F0B36E /* Alloc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Alloc.h; sourceTree = ""; }; 730 | 0167A52D23B9843700F0B36E /* Threads.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Threads.c; sourceTree = ""; }; 731 | 0167A52E23B9843700F0B36E /* Lzma2DecMt.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Lzma2DecMt.h; sourceTree = ""; }; 732 | 0167A52F23B9843700F0B36E /* 7zBuf.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = 7zBuf.c; sourceTree = ""; }; 733 | 0167A53023B9843700F0B36E /* LzmaLib.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = LzmaLib.c; sourceTree = ""; }; 734 | 0167A53123B9843700F0B36E /* XzEnc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XzEnc.h; sourceTree = ""; }; 735 | 0167A53323B9843700F0B36E /* sjlj.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = sjlj.c; sourceTree = ""; }; 736 | 0167A53423B9843700F0B36E /* libco.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = libco.h; sourceTree = ""; }; 737 | 0167A53523B9843700F0B36E /* settings.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = settings.h; sourceTree = ""; }; 738 | 0167A53823B9843700F0B36E /* ucontext.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ucontext.c; sourceTree = ""; }; 739 | 0167A53B23B9843700F0B36E /* libco.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = libco.c; sourceTree = ""; }; 740 | 0167A53C23B9843700F0B36E /* amd64.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = amd64.c; sourceTree = ""; }; 741 | 0167A53E23B9843700F0B36E /* style.css */ = {isa = PBXFileReference; lastKnownFileType = text.css; path = style.css; sourceTree = ""; }; 742 | 0167A53F23B9843700F0B36E /* targets.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = targets.html; sourceTree = ""; }; 743 | 0167A54023B9843700F0B36E /* usage.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = usage.html; sourceTree = ""; }; 744 | 089C1672FE841209C02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = ""; }; 745 | 089C167FFE841241C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = ""; }; 746 | 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = ""; }; 747 | 826FE0F31014D8930023A8E9 /* BSNESGameCore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BSNESGameCore.h; sourceTree = ""; }; 748 | 826FE0F41014D8930023A8E9 /* BSNESGameCore.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = BSNESGameCore.mm; sourceTree = ""; }; 749 | 82B9198710150FA9007BD6DB /* bsnes.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = bsnes.icns; sourceTree = ""; }; 750 | 8D5B49B6048680CD000E48DA /* BSNES.oecoreplugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BSNES.oecoreplugin; sourceTree = BUILT_PRODUCTS_DIR; }; 751 | 8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 752 | C6480FFB1364B2E10094FA33 /* OESNESSystemResponderClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = OESNESSystemResponderClient.h; path = ../OpenEmu/SystemPlugins/SuperNES/OESNESSystemResponderClient.h; sourceTree = ""; }; 753 | C6D120EB1711307900E868A8 /* OpenEmuBase.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = OpenEmuBase.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 754 | D2F7E65807B2D6F200F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = ""; }; 755 | /* End PBXFileReference section */ 756 | 757 | /* Begin PBXFrameworksBuildPhase section */ 758 | 8D5B49B3048680CD000E48DA /* Frameworks */ = { 759 | isa = PBXFrameworksBuildPhase; 760 | buildActionMask = 2147483647; 761 | files = ( 762 | C6D120EC1711307900E868A8 /* OpenEmuBase.framework in Frameworks */, 763 | 8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */, 764 | ); 765 | runOnlyForDeploymentPostprocessing = 0; 766 | }; 767 | /* End PBXFrameworksBuildPhase section */ 768 | 769 | /* Begin PBXGroup section */ 770 | 0113624223BA377D00BC181F /* system */ = { 771 | isa = PBXGroup; 772 | children = ( 773 | 0113624323BA377D00BC181F /* ipl.rom */, 774 | 0113624423BA377D00BC181F /* boards.bml */, 775 | ); 776 | name = system; 777 | path = "bsnes/bsnes/target-bsnes/resource/system"; 778 | sourceTree = ""; 779 | }; 780 | 013D75C223BCEF0100D74AD3 /* Database */ = { 781 | isa = PBXGroup; 782 | children = ( 783 | 013D75C623BCEF0100D74AD3 /* Super Famicom.bml */, 784 | ); 785 | name = Database; 786 | path = bsnes/bsnes/Database; 787 | sourceTree = ""; 788 | }; 789 | 0167A1F823B9843600F0B36E /* nall */ = { 790 | isa = PBXGroup; 791 | children = ( 792 | 0167A1FA23B9843600F0B36E /* database */, 793 | 0167A1FD23B9843600F0B36E /* inline-if.hpp */, 794 | 0167A1FE23B9843600F0B36E /* instance.hpp */, 795 | 0167A1FF23B9843600F0B36E /* posix */, 796 | 0167A20223B9843600F0B36E /* adaptive-array.hpp */, 797 | 0167A20323B9843600F0B36E /* vfs */, 798 | 0167A20923B9843600F0B36E /* file-map.hpp */, 799 | 0167A20A23B9843600F0B36E /* serializer.hpp */, 800 | 0167A20B23B9843600F0B36E /* hashset.hpp */, 801 | 0167A20C23B9843600F0B36E /* array-span.hpp */, 802 | 0167A20D23B9843600F0B36E /* suffix-array.hpp */, 803 | 0167A20E23B9843600F0B36E /* macos */, 804 | 0167A21023B9843600F0B36E /* utility.hpp */, 805 | 0167A21123B9843600F0B36E /* reed-solomon.hpp */, 806 | 0167A21223B9843600F0B36E /* main.hpp */, 807 | 0167A21323B9843600F0B36E /* vfs.hpp */, 808 | 0167A21423B9843600F0B36E /* nall.hpp */, 809 | 0167A21523B9843600F0B36E /* hash */, 810 | 0167A21E23B9843600F0B36E /* varint.hpp */, 811 | 0167A21F23B9843600F0B36E /* function.hpp */, 812 | 0167A22023B9843600F0B36E /* array.hpp */, 813 | 0167A22123B9843600F0B36E /* emulation */, 814 | 0167A22323B9843600F0B36E /* vector.hpp */, 815 | 0167A22423B9843600F0B36E /* traits.hpp */, 816 | 0167A22523B9843600F0B36E /* interpolation.hpp */, 817 | 0167A22623B9843600F0B36E /* map.hpp */, 818 | 0167A22723B9843600F0B36E /* beat */, 819 | 0167A23023B9843600F0B36E /* elliptic-curve */, 820 | 0167A23523B9843600F0B36E /* arithmetic.hpp */, 821 | 0167A23623B9843600F0B36E /* bit.hpp */, 822 | 0167A23723B9843600F0B36E /* file.hpp */, 823 | 0167A23823B9843600F0B36E /* inode.hpp */, 824 | 0167A23923B9843600F0B36E /* intrinsics.hpp */, 825 | 0167A23A23B9843600F0B36E /* xorg */, 826 | 0167A23E23B9843600F0B36E /* service.hpp */, 827 | 0167A23F23B9843600F0B36E /* serial.hpp */, 828 | 0167A24023B9843600F0B36E /* terminal.hpp */, 829 | 0167A24123B9843600F0B36E /* cipher */, 830 | 0167A24323B9843600F0B36E /* algorithm.hpp */, 831 | 0167A24423B9843600F0B36E /* primitives.hpp */, 832 | 0167A24523B9843600F0B36E /* queue.hpp */, 833 | 0167A24623B9843600F0B36E /* literals.hpp */, 834 | 0167A24723B9843600F0B36E /* variant.hpp */, 835 | 0167A24823B9843600F0B36E /* shared-pointer.hpp */, 836 | 0167A24923B9843600F0B36E /* encode */, 837 | 0167A25523B9843600F0B36E /* matrix.hpp */, 838 | 0167A25623B9843600F0B36E /* dl.hpp */, 839 | 0167A25723B9843600F0B36E /* path.hpp */, 840 | 0167A25823B9843600F0B36E /* platform.hpp */, 841 | 0167A25923B9843600F0B36E /* pointer.hpp */, 842 | 0167A25A23B9843600F0B36E /* galois-field.hpp */, 843 | 0167A25B23B9843600F0B36E /* image */, 844 | 0167A26423B9843600F0B36E /* induced-sort.hpp */, 845 | 0167A26523B9843600F0B36E /* primitives */, 846 | 0167A26E23B9843600F0B36E /* property.hpp */, 847 | 0167A26F23B9843600F0B36E /* array-view.hpp */, 848 | 0167A27023B9843600F0B36E /* random.hpp */, 849 | 0167A27123B9843600F0B36E /* mac */, 850 | 0167A27323B9843600F0B36E /* decode */, 851 | 0167A28223B9843600F0B36E /* any.hpp */, 852 | 0167A28323B9843600F0B36E /* endian.hpp */, 853 | 0167A28423B9843600F0B36E /* unique-pointer.hpp */, 854 | 0167A28523B9843600F0B36E /* run.hpp */, 855 | 0167A28623B9843600F0B36E /* set.hpp */, 856 | 0167A28723B9843600F0B36E /* http */, 857 | 0167A28E23B9843600F0B36E /* hid.hpp */, 858 | 0167A28F23B9843600F0B36E /* stdint.hpp */, 859 | 0167A29023B9843600F0B36E /* string.hpp */, 860 | 0167A29123B9843600F0B36E /* location.hpp */, 861 | 0167A29223B9843600F0B36E /* chrono.hpp */, 862 | 0167A29323B9843600F0B36E /* view.hpp */, 863 | 0167A29423B9843600F0B36E /* atoi.hpp */, 864 | 0167A29523B9843600F0B36E /* directory.hpp */, 865 | 0167A29623B9843600F0B36E /* arithmetic */, 866 | 0167A29A23B9843600F0B36E /* file-buffer.hpp */, 867 | 0167A29B23B9843600F0B36E /* smtp.hpp */, 868 | 0167A29C23B9843600F0B36E /* string */, 869 | 0167A2BF23B9843600F0B36E /* cd */, 870 | 0167A2C723B9843600F0B36E /* memory.hpp */, 871 | 0167A2C823B9843600F0B36E /* cd.hpp */, 872 | 0167A2C923B9843600F0B36E /* maybe.hpp */, 873 | 0167A2CA23B9843600F0B36E /* windows */, 874 | 0167A2D323B9843600F0B36E /* thread.hpp */, 875 | 0167A2D423B9843600F0B36E /* merge-sort.hpp */, 876 | 0167A2D523B9843600F0B36E /* counting-sort.hpp */, 877 | 0167A2D623B9843600F0B36E /* range.hpp */, 878 | 0167A2D723B9843600F0B36E /* dsp */, 879 | 0167A2DF23B9843600F0B36E /* vector */, 880 | 0167A2EA23B9843600F0B36E /* iterator.hpp */, 881 | 0167A2EB23B9843600F0B36E /* image.hpp */, 882 | 0167A2EC23B9843600F0B36E /* arguments.hpp */, 883 | 0167A2ED23B9843600F0B36E /* locale.hpp */, 884 | 0167A2EE23B9843600F0B36E /* simd.hpp */, 885 | 0167A2EF23B9843600F0B36E /* matrix-multiply.hpp */, 886 | 0167A2F023B9843600F0B36E /* shared-memory.hpp */, 887 | ); 888 | name = nall; 889 | path = bsnes/nall; 890 | sourceTree = ""; 891 | }; 892 | 0167A1FA23B9843600F0B36E /* database */ = { 893 | isa = PBXGroup; 894 | children = ( 895 | 0167A1FB23B9843600F0B36E /* sqlite3.hpp */, 896 | 0167A1FC23B9843600F0B36E /* odbc.hpp */, 897 | ); 898 | path = database; 899 | sourceTree = ""; 900 | }; 901 | 0167A1FF23B9843600F0B36E /* posix */ = { 902 | isa = PBXGroup; 903 | children = ( 904 | 0167A20023B9843600F0B36E /* service.hpp */, 905 | 0167A20123B9843600F0B36E /* shared-memory.hpp */, 906 | ); 907 | path = posix; 908 | sourceTree = ""; 909 | }; 910 | 0167A20323B9843600F0B36E /* vfs */ = { 911 | isa = PBXGroup; 912 | children = ( 913 | 0167A20423B9843600F0B36E /* memory */, 914 | 0167A20623B9843600F0B36E /* vfs.hpp */, 915 | 0167A20723B9843600F0B36E /* fs */, 916 | ); 917 | path = vfs; 918 | sourceTree = ""; 919 | }; 920 | 0167A20423B9843600F0B36E /* memory */ = { 921 | isa = PBXGroup; 922 | children = ( 923 | 0167A20523B9843600F0B36E /* file.hpp */, 924 | ); 925 | path = memory; 926 | sourceTree = ""; 927 | }; 928 | 0167A20723B9843600F0B36E /* fs */ = { 929 | isa = PBXGroup; 930 | children = ( 931 | 0167A20823B9843600F0B36E /* file.hpp */, 932 | ); 933 | path = fs; 934 | sourceTree = ""; 935 | }; 936 | 0167A20E23B9843600F0B36E /* macos */ = { 937 | isa = PBXGroup; 938 | children = ( 939 | 0167A20F23B9843600F0B36E /* guard.hpp */, 940 | ); 941 | path = macos; 942 | sourceTree = ""; 943 | }; 944 | 0167A21523B9843600F0B36E /* hash */ = { 945 | isa = PBXGroup; 946 | children = ( 947 | 0167A21623B9843600F0B36E /* sha384.hpp */, 948 | 0167A21723B9843600F0B36E /* hash.hpp */, 949 | 0167A21823B9843600F0B36E /* sha224.hpp */, 950 | 0167A21923B9843600F0B36E /* crc64.hpp */, 951 | 0167A21A23B9843600F0B36E /* sha256.hpp */, 952 | 0167A21B23B9843600F0B36E /* crc16.hpp */, 953 | 0167A21C23B9843600F0B36E /* crc32.hpp */, 954 | 0167A21D23B9843600F0B36E /* sha512.hpp */, 955 | ); 956 | path = hash; 957 | sourceTree = ""; 958 | }; 959 | 0167A22123B9843600F0B36E /* emulation */ = { 960 | isa = PBXGroup; 961 | children = ( 962 | 0167A22223B9843600F0B36E /* 21fx.hpp */, 963 | ); 964 | path = emulation; 965 | sourceTree = ""; 966 | }; 967 | 0167A22723B9843600F0B36E /* beat */ = { 968 | isa = PBXGroup; 969 | children = ( 970 | 0167A22823B9843600F0B36E /* archive */, 971 | 0167A22D23B9843600F0B36E /* single */, 972 | ); 973 | path = beat; 974 | sourceTree = ""; 975 | }; 976 | 0167A22823B9843600F0B36E /* archive */ = { 977 | isa = PBXGroup; 978 | children = ( 979 | 0167A22923B9843600F0B36E /* container.hpp */, 980 | 0167A22A23B9843600F0B36E /* extract.hpp */, 981 | 0167A22B23B9843600F0B36E /* create.hpp */, 982 | 0167A22C23B9843600F0B36E /* node.hpp */, 983 | ); 984 | path = archive; 985 | sourceTree = ""; 986 | }; 987 | 0167A22D23B9843600F0B36E /* single */ = { 988 | isa = PBXGroup; 989 | children = ( 990 | 0167A22E23B9843600F0B36E /* apply.hpp */, 991 | 0167A22F23B9843600F0B36E /* create.hpp */, 992 | ); 993 | path = single; 994 | sourceTree = ""; 995 | }; 996 | 0167A23023B9843600F0B36E /* elliptic-curve */ = { 997 | isa = PBXGroup; 998 | children = ( 999 | 0167A23123B9843600F0B36E /* modulo25519-optimized.hpp */, 1000 | 0167A23223B9843600F0B36E /* curve25519.hpp */, 1001 | 0167A23323B9843600F0B36E /* ed25519.hpp */, 1002 | 0167A23423B9843600F0B36E /* modulo25519-reference.hpp */, 1003 | ); 1004 | path = "elliptic-curve"; 1005 | sourceTree = ""; 1006 | }; 1007 | 0167A23A23B9843600F0B36E /* xorg */ = { 1008 | isa = PBXGroup; 1009 | children = ( 1010 | 0167A23B23B9843600F0B36E /* clipboard.hpp */, 1011 | 0167A23C23B9843600F0B36E /* xorg.hpp */, 1012 | 0167A23D23B9843600F0B36E /* guard.hpp */, 1013 | ); 1014 | path = xorg; 1015 | sourceTree = ""; 1016 | }; 1017 | 0167A24123B9843600F0B36E /* cipher */ = { 1018 | isa = PBXGroup; 1019 | children = ( 1020 | 0167A24223B9843600F0B36E /* chacha20.hpp */, 1021 | ); 1022 | path = cipher; 1023 | sourceTree = ""; 1024 | }; 1025 | 0167A24923B9843600F0B36E /* encode */ = { 1026 | isa = PBXGroup; 1027 | children = ( 1028 | 0167A24A23B9843600F0B36E /* huffman.hpp */, 1029 | 0167A24B23B9843600F0B36E /* zip.hpp */, 1030 | 0167A24C23B9843600F0B36E /* bwt.hpp */, 1031 | 0167A24D23B9843600F0B36E /* mtf.hpp */, 1032 | 0167A24E23B9843600F0B36E /* rle.hpp */, 1033 | 0167A24F23B9843600F0B36E /* url.hpp */, 1034 | 0167A25023B9843600F0B36E /* base.hpp */, 1035 | 0167A25123B9843600F0B36E /* html.hpp */, 1036 | 0167A25223B9843600F0B36E /* lzsa.hpp */, 1037 | 0167A25323B9843600F0B36E /* bmp.hpp */, 1038 | 0167A25423B9843600F0B36E /* base64.hpp */, 1039 | ); 1040 | path = encode; 1041 | sourceTree = ""; 1042 | }; 1043 | 0167A25B23B9843600F0B36E /* image */ = { 1044 | isa = PBXGroup; 1045 | children = ( 1046 | 0167A25C23B9843600F0B36E /* load.hpp */, 1047 | 0167A25D23B9843600F0B36E /* static.hpp */, 1048 | 0167A25E23B9843600F0B36E /* scale.hpp */, 1049 | 0167A25F23B9843600F0B36E /* utility.hpp */, 1050 | 0167A26023B9843600F0B36E /* interpolation.hpp */, 1051 | 0167A26123B9843600F0B36E /* blend.hpp */, 1052 | 0167A26223B9843600F0B36E /* fill.hpp */, 1053 | 0167A26323B9843600F0B36E /* core.hpp */, 1054 | ); 1055 | path = image; 1056 | sourceTree = ""; 1057 | }; 1058 | 0167A26523B9843600F0B36E /* primitives */ = { 1059 | isa = PBXGroup; 1060 | children = ( 1061 | 0167A26623B9843600F0B36E /* integer.hpp */, 1062 | 0167A26723B9843600F0B36E /* boolean.hpp */, 1063 | 0167A26823B9843600F0B36E /* bit-field.hpp */, 1064 | 0167A26923B9843600F0B36E /* real.hpp */, 1065 | 0167A26A23B9843600F0B36E /* literals.hpp */, 1066 | 0167A26B23B9843600F0B36E /* natural.hpp */, 1067 | 0167A26C23B9843600F0B36E /* bit-range.hpp */, 1068 | 0167A26D23B9843600F0B36E /* types.hpp */, 1069 | ); 1070 | path = primitives; 1071 | sourceTree = ""; 1072 | }; 1073 | 0167A27123B9843600F0B36E /* mac */ = { 1074 | isa = PBXGroup; 1075 | children = ( 1076 | 0167A27223B9843600F0B36E /* poly1305.hpp */, 1077 | ); 1078 | path = mac; 1079 | sourceTree = ""; 1080 | }; 1081 | 0167A27323B9843600F0B36E /* decode */ = { 1082 | isa = PBXGroup; 1083 | children = ( 1084 | 0167A27423B9843600F0B36E /* huffman.hpp */, 1085 | 0167A27523B9843600F0B36E /* zip.hpp */, 1086 | 0167A27623B9843600F0B36E /* bwt.hpp */, 1087 | 0167A27723B9843600F0B36E /* mtf.hpp */, 1088 | 0167A27823B9843600F0B36E /* rle.hpp */, 1089 | 0167A27923B9843600F0B36E /* png.hpp */, 1090 | 0167A27A23B9843600F0B36E /* url.hpp */, 1091 | 0167A27B23B9843600F0B36E /* base.hpp */, 1092 | 0167A27C23B9843600F0B36E /* gzip.hpp */, 1093 | 0167A27D23B9843600F0B36E /* html.hpp */, 1094 | 0167A27E23B9843600F0B36E /* lzsa.hpp */, 1095 | 0167A27F23B9843600F0B36E /* inflate.hpp */, 1096 | 0167A28023B9843600F0B36E /* bmp.hpp */, 1097 | 0167A28123B9843600F0B36E /* base64.hpp */, 1098 | ); 1099 | path = decode; 1100 | sourceTree = ""; 1101 | }; 1102 | 0167A28723B9843600F0B36E /* http */ = { 1103 | isa = PBXGroup; 1104 | children = ( 1105 | 0167A28823B9843600F0B36E /* server.hpp */, 1106 | 0167A28923B9843600F0B36E /* response.hpp */, 1107 | 0167A28A23B9843600F0B36E /* role.hpp */, 1108 | 0167A28B23B9843600F0B36E /* request.hpp */, 1109 | 0167A28C23B9843600F0B36E /* client.hpp */, 1110 | 0167A28D23B9843600F0B36E /* message.hpp */, 1111 | ); 1112 | path = http; 1113 | sourceTree = ""; 1114 | }; 1115 | 0167A29623B9843600F0B36E /* arithmetic */ = { 1116 | isa = PBXGroup; 1117 | children = ( 1118 | 0167A29723B9843600F0B36E /* barrett.hpp */, 1119 | 0167A29823B9843600F0B36E /* unsigned.hpp */, 1120 | 0167A29923B9843600F0B36E /* natural.hpp */, 1121 | ); 1122 | path = arithmetic; 1123 | sourceTree = ""; 1124 | }; 1125 | 0167A29C23B9843600F0B36E /* string */ = { 1126 | isa = PBXGroup; 1127 | children = ( 1128 | 0167A29D23B9843600F0B36E /* cast.hpp */, 1129 | 0167A29E23B9843600F0B36E /* utility.hpp */, 1130 | 0167A29F23B9843600F0B36E /* utf8.hpp */, 1131 | 0167A2A023B9843600F0B36E /* vector.hpp */, 1132 | 0167A2A123B9843600F0B36E /* pascal.hpp */, 1133 | 0167A2A223B9843600F0B36E /* trim.hpp */, 1134 | 0167A2A323B9843600F0B36E /* replace.hpp */, 1135 | 0167A2A423B9843600F0B36E /* markup */, 1136 | 0167A2A923B9843600F0B36E /* find.hpp */, 1137 | 0167A2AA23B9843600F0B36E /* match.hpp */, 1138 | 0167A2AB23B9843600F0B36E /* allocator */, 1139 | 0167A2B023B9843600F0B36E /* view.hpp */, 1140 | 0167A2B123B9843600F0B36E /* atoi.hpp */, 1141 | 0167A2B223B9843600F0B36E /* eval */, 1142 | 0167A2B723B9843600F0B36E /* transform */, 1143 | 0167A2BA23B9843600F0B36E /* compare.hpp */, 1144 | 0167A2BB23B9843600F0B36E /* format.hpp */, 1145 | 0167A2BC23B9843600F0B36E /* core.hpp */, 1146 | 0167A2BD23B9843600F0B36E /* split.hpp */, 1147 | 0167A2BE23B9843600F0B36E /* convert.hpp */, 1148 | ); 1149 | path = string; 1150 | sourceTree = ""; 1151 | }; 1152 | 0167A2A423B9843600F0B36E /* markup */ = { 1153 | isa = PBXGroup; 1154 | children = ( 1155 | 0167A2A523B9843600F0B36E /* bml.hpp */, 1156 | 0167A2A623B9843600F0B36E /* xml.hpp */, 1157 | 0167A2A723B9843600F0B36E /* node.hpp */, 1158 | 0167A2A823B9843600F0B36E /* find.hpp */, 1159 | ); 1160 | path = markup; 1161 | sourceTree = ""; 1162 | }; 1163 | 0167A2AB23B9843600F0B36E /* allocator */ = { 1164 | isa = PBXGroup; 1165 | children = ( 1166 | 0167A2AC23B9843600F0B36E /* adaptive.hpp */, 1167 | 0167A2AD23B9843600F0B36E /* vector.hpp */, 1168 | 0167A2AE23B9843600F0B36E /* copy-on-write.hpp */, 1169 | 0167A2AF23B9843600F0B36E /* small-string-optimization.hpp */, 1170 | ); 1171 | path = allocator; 1172 | sourceTree = ""; 1173 | }; 1174 | 0167A2B223B9843600F0B36E /* eval */ = { 1175 | isa = PBXGroup; 1176 | children = ( 1177 | 0167A2B323B9843600F0B36E /* parser.hpp */, 1178 | 0167A2B423B9843600F0B36E /* literal.hpp */, 1179 | 0167A2B523B9843600F0B36E /* node.hpp */, 1180 | 0167A2B623B9843600F0B36E /* evaluator.hpp */, 1181 | ); 1182 | path = eval; 1183 | sourceTree = ""; 1184 | }; 1185 | 0167A2B723B9843600F0B36E /* transform */ = { 1186 | isa = PBXGroup; 1187 | children = ( 1188 | 0167A2B823B9843600F0B36E /* dml.hpp */, 1189 | 0167A2B923B9843600F0B36E /* cml.hpp */, 1190 | ); 1191 | path = transform; 1192 | sourceTree = ""; 1193 | }; 1194 | 0167A2BF23B9843600F0B36E /* cd */ = { 1195 | isa = PBXGroup; 1196 | children = ( 1197 | 0167A2C023B9843600F0B36E /* edc.hpp */, 1198 | 0167A2C123B9843600F0B36E /* efm.hpp */, 1199 | 0167A2C223B9843600F0B36E /* scrambler.hpp */, 1200 | 0167A2C323B9843600F0B36E /* session.hpp */, 1201 | 0167A2C423B9843600F0B36E /* crc16.hpp */, 1202 | 0167A2C523B9843600F0B36E /* rspc.hpp */, 1203 | 0167A2C623B9843600F0B36E /* sync.hpp */, 1204 | ); 1205 | path = cd; 1206 | sourceTree = ""; 1207 | }; 1208 | 0167A2CA23B9843600F0B36E /* windows */ = { 1209 | isa = PBXGroup; 1210 | children = ( 1211 | 0167A2CB23B9843600F0B36E /* guid.hpp */, 1212 | 0167A2CC23B9843600F0B36E /* utf8.hpp */, 1213 | 0167A2CD23B9843600F0B36E /* launcher.hpp */, 1214 | 0167A2CE23B9843600F0B36E /* registry.hpp */, 1215 | 0167A2CF23B9843600F0B36E /* detour.hpp */, 1216 | 0167A2D023B9843600F0B36E /* service.hpp */, 1217 | 0167A2D123B9843600F0B36E /* guard.hpp */, 1218 | 0167A2D223B9843600F0B36E /* shared-memory.hpp */, 1219 | ); 1220 | path = windows; 1221 | sourceTree = ""; 1222 | }; 1223 | 0167A2D723B9843600F0B36E /* dsp */ = { 1224 | isa = PBXGroup; 1225 | children = ( 1226 | 0167A2D823B9843600F0B36E /* resampler */, 1227 | 0167A2DA23B9843600F0B36E /* dsp.hpp */, 1228 | 0167A2DB23B9843600F0B36E /* iir */, 1229 | ); 1230 | path = dsp; 1231 | sourceTree = ""; 1232 | }; 1233 | 0167A2D823B9843600F0B36E /* resampler */ = { 1234 | isa = PBXGroup; 1235 | children = ( 1236 | 0167A2D923B9843600F0B36E /* cubic.hpp */, 1237 | ); 1238 | path = resampler; 1239 | sourceTree = ""; 1240 | }; 1241 | 0167A2DB23B9843600F0B36E /* iir */ = { 1242 | isa = PBXGroup; 1243 | children = ( 1244 | 0167A2DC23B9843600F0B36E /* one-pole.hpp */, 1245 | 0167A2DD23B9843600F0B36E /* biquad.hpp */, 1246 | 0167A2DE23B9843600F0B36E /* dc-removal.hpp */, 1247 | ); 1248 | path = iir; 1249 | sourceTree = ""; 1250 | }; 1251 | 0167A2DF23B9843600F0B36E /* vector */ = { 1252 | isa = PBXGroup; 1253 | children = ( 1254 | 0167A2E023B9843600F0B36E /* specialization */, 1255 | 0167A2E223B9843600F0B36E /* access.hpp */, 1256 | 0167A2E323B9843600F0B36E /* utility.hpp */, 1257 | 0167A2E423B9843600F0B36E /* modify.hpp */, 1258 | 0167A2E523B9843600F0B36E /* assign.hpp */, 1259 | 0167A2E623B9843600F0B36E /* memory.hpp */, 1260 | 0167A2E723B9843600F0B36E /* compare.hpp */, 1261 | 0167A2E823B9843600F0B36E /* iterator.hpp */, 1262 | 0167A2E923B9843600F0B36E /* core.hpp */, 1263 | ); 1264 | path = vector; 1265 | sourceTree = ""; 1266 | }; 1267 | 0167A2E023B9843600F0B36E /* specialization */ = { 1268 | isa = PBXGroup; 1269 | children = ( 1270 | 0167A2E123B9843600F0B36E /* uint8_t.hpp */, 1271 | ); 1272 | path = specialization; 1273 | sourceTree = ""; 1274 | }; 1275 | 0167A2F123B9843600F0B36E /* bsnes */ = { 1276 | isa = PBXGroup; 1277 | children = ( 1278 | 0167A2F323B9843600F0B36E /* heuristics */, 1279 | 0167A2FA23B9843600F0B36E /* Database */, 1280 | 0167A30523B9843600F0B36E /* sfc */, 1281 | 0167A3F723B9843600F0B36E /* processor */, 1282 | 0167A43D23B9843600F0B36E /* gb */, 1283 | 0167A4CC23B9843600F0B36E /* emulator */, 1284 | 0167A4DD23B9843600F0B36E /* lzma */, 1285 | ); 1286 | name = bsnes; 1287 | path = bsnes/bsnes; 1288 | sourceTree = ""; 1289 | }; 1290 | 0167A2F323B9843600F0B36E /* heuristics */ = { 1291 | isa = PBXGroup; 1292 | children = ( 1293 | 0167A2F423B9843600F0B36E /* game-boy.cpp */, 1294 | 0167A2F523B9843600F0B36E /* heuristics.cpp */, 1295 | 0167A2F623B9843600F0B36E /* sufami-turbo.cpp */, 1296 | 0167A2F723B9843600F0B36E /* super-famicom.cpp */, 1297 | 0167A2F823B9843600F0B36E /* heuristics.hpp */, 1298 | 0167A2F923B9843600F0B36E /* bs-memory.cpp */, 1299 | ); 1300 | path = heuristics; 1301 | sourceTree = ""; 1302 | }; 1303 | 0167A2FA23B9843600F0B36E /* Database */ = { 1304 | isa = PBXGroup; 1305 | children = ( 1306 | 0167A2FB23B9843600F0B36E /* Sufami Turbo.bml */, 1307 | 0167A2FC23B9843600F0B36E /* Cheat Codes.bml */, 1308 | 0167A2FD23B9843600F0B36E /* BS Memory.bml */, 1309 | 0167A2FE23B9843600F0B36E /* Super Famicom.bml */, 1310 | ); 1311 | path = Database; 1312 | sourceTree = ""; 1313 | }; 1314 | 0167A30523B9843600F0B36E /* sfc */ = { 1315 | isa = PBXGroup; 1316 | children = ( 1317 | 0167A30723B9843600F0B36E /* interface */, 1318 | 0167A30C23B9843600F0B36E /* memory */, 1319 | 0167A31323B9843600F0B36E /* cpu */, 1320 | 0167A31C23B9843600F0B36E /* coprocessor */, 1321 | 0167A39623B9843600F0B36E /* sfc.hpp */, 1322 | 0167A39723B9843600F0B36E /* cartridge */, 1323 | 0167A39D23B9843600F0B36E /* controller */, 1324 | 0167A3AF23B9843600F0B36E /* ppu-fast */, 1325 | 0167A3BA23B9843600F0B36E /* system */, 1326 | 0167A3BE23B9843600F0B36E /* expansion */, 1327 | 0167A3C723B9843600F0B36E /* smp */, 1328 | 0167A3CE23B9843600F0B36E /* slot */, 1329 | 0167A3D923B9843600F0B36E /* ppu */, 1330 | 0167A3ED23B9843600F0B36E /* dsp */, 1331 | ); 1332 | path = sfc; 1333 | sourceTree = ""; 1334 | }; 1335 | 0167A30723B9843600F0B36E /* interface */ = { 1336 | isa = PBXGroup; 1337 | children = ( 1338 | 0167A30823B9843600F0B36E /* interface.hpp */, 1339 | 0167A30923B9843600F0B36E /* configuration.hpp */, 1340 | 0167A30A23B9843600F0B36E /* interface.cpp */, 1341 | 0167A30B23B9843600F0B36E /* configuration.cpp */, 1342 | ); 1343 | path = interface; 1344 | sourceTree = ""; 1345 | }; 1346 | 0167A30C23B9843600F0B36E /* memory */ = { 1347 | isa = PBXGroup; 1348 | children = ( 1349 | 0167A30D23B9843600F0B36E /* memory.cpp */, 1350 | 0167A30E23B9843600F0B36E /* writable.hpp */, 1351 | 0167A30F23B9843600F0B36E /* protectable.hpp */, 1352 | 0167A31023B9843600F0B36E /* memory-inline.hpp */, 1353 | 0167A31123B9843600F0B36E /* readable.hpp */, 1354 | 0167A31223B9843600F0B36E /* memory.hpp */, 1355 | ); 1356 | path = memory; 1357 | sourceTree = ""; 1358 | }; 1359 | 0167A31323B9843600F0B36E /* cpu */ = { 1360 | isa = PBXGroup; 1361 | children = ( 1362 | 0167A31423B9843600F0B36E /* memory.cpp */, 1363 | 0167A31523B9843600F0B36E /* cpu.hpp */, 1364 | 0167A31623B9843600F0B36E /* dma.cpp */, 1365 | 0167A31723B9843600F0B36E /* io.cpp */, 1366 | 0167A31823B9843600F0B36E /* serialization.cpp */, 1367 | 0167A31923B9843600F0B36E /* cpu.cpp */, 1368 | 0167A31A23B9843600F0B36E /* timing.cpp */, 1369 | 0167A31B23B9843600F0B36E /* irq.cpp */, 1370 | ); 1371 | path = cpu; 1372 | sourceTree = ""; 1373 | }; 1374 | 0167A31C23B9843600F0B36E /* coprocessor */ = { 1375 | isa = PBXGroup; 1376 | children = ( 1377 | 0167A31D23B9843600F0B36E /* dsp2 */, 1378 | 0167A32223B9843600F0B36E /* armdsp */, 1379 | 0167A32823B9843600F0B36E /* dsp4 */, 1380 | 0167A32E23B9843600F0B36E /* hitachidsp */, 1381 | 0167A33423B9843600F0B36E /* dip */, 1382 | 0167A33823B9843600F0B36E /* obc1 */, 1383 | 0167A33C23B9843600F0B36E /* st0010 */, 1384 | 0167A34223B9843600F0B36E /* cx4 */, 1385 | 0167A34A23B9843600F0B36E /* mcc */, 1386 | 0167A34E23B9843600F0B36E /* icd */, 1387 | 0167A35523B9843600F0B36E /* coprocessor.hpp */, 1388 | 0167A35623B9843600F0B36E /* dsp1 */, 1389 | 0167A35C23B9843600F0B36E /* sa1 */, 1390 | 0167A36623B9843600F0B36E /* msu1 */, 1391 | 0167A36A23B9843600F0B36E /* spc7110 */, 1392 | 0167A37223B9843600F0B36E /* sdd1 */, 1393 | 0167A37823B9843600F0B36E /* coprocessor.cpp */, 1394 | 0167A37923B9843600F0B36E /* necdsp */, 1395 | 0167A37D23B9843600F0B36E /* epsonrtc */, 1396 | 0167A38323B9843600F0B36E /* sharprtc */, 1397 | 0167A38923B9843600F0B36E /* superfx */, 1398 | 0167A39223B9843600F0B36E /* event */, 1399 | ); 1400 | path = coprocessor; 1401 | sourceTree = ""; 1402 | }; 1403 | 0167A31D23B9843600F0B36E /* dsp2 */ = { 1404 | isa = PBXGroup; 1405 | children = ( 1406 | 0167A31E23B9843600F0B36E /* dsp2.cpp */, 1407 | 0167A31F23B9843600F0B36E /* dsp2.hpp */, 1408 | 0167A32023B9843600F0B36E /* serialization.cpp */, 1409 | 0167A32123B9843600F0B36E /* opcodes.cpp */, 1410 | ); 1411 | path = dsp2; 1412 | sourceTree = ""; 1413 | }; 1414 | 0167A32223B9843600F0B36E /* armdsp */ = { 1415 | isa = PBXGroup; 1416 | children = ( 1417 | 0167A32323B9843600F0B36E /* memory.cpp */, 1418 | 0167A32423B9843600F0B36E /* armdsp.cpp */, 1419 | 0167A32523B9843600F0B36E /* registers.hpp */, 1420 | 0167A32623B9843600F0B36E /* serialization.cpp */, 1421 | 0167A32723B9843600F0B36E /* armdsp.hpp */, 1422 | ); 1423 | path = armdsp; 1424 | sourceTree = ""; 1425 | }; 1426 | 0167A32823B9843600F0B36E /* dsp4 */ = { 1427 | isa = PBXGroup; 1428 | children = ( 1429 | 0167A32923B9843600F0B36E /* dsp4emu.h */, 1430 | 0167A32A23B9843600F0B36E /* dsp4.cpp */, 1431 | 0167A32B23B9843600F0B36E /* serialization.cpp */, 1432 | 0167A32C23B9843600F0B36E /* dsp4.hpp */, 1433 | 0167A32D23B9843600F0B36E /* dsp4emu.c */, 1434 | ); 1435 | path = dsp4; 1436 | sourceTree = ""; 1437 | }; 1438 | 0167A32E23B9843600F0B36E /* hitachidsp */ = { 1439 | isa = PBXGroup; 1440 | children = ( 1441 | 0167A32F23B9843600F0B36E /* memory.cpp */, 1442 | 0167A33023B9843600F0B36E /* hitachidsp.hpp */, 1443 | 0167A33123B9843600F0B36E /* serialization.cpp */, 1444 | 0167A33223B9843600F0B36E /* data-rom.cpp */, 1445 | 0167A33323B9843600F0B36E /* hitachidsp.cpp */, 1446 | ); 1447 | path = hitachidsp; 1448 | sourceTree = ""; 1449 | }; 1450 | 0167A33423B9843600F0B36E /* dip */ = { 1451 | isa = PBXGroup; 1452 | children = ( 1453 | 0167A33523B9843600F0B36E /* dip.hpp */, 1454 | 0167A33623B9843600F0B36E /* dip.cpp */, 1455 | 0167A33723B9843600F0B36E /* serialization.cpp */, 1456 | ); 1457 | path = dip; 1458 | sourceTree = ""; 1459 | }; 1460 | 0167A33823B9843600F0B36E /* obc1 */ = { 1461 | isa = PBXGroup; 1462 | children = ( 1463 | 0167A33923B9843600F0B36E /* obc1.cpp */, 1464 | 0167A33A23B9843600F0B36E /* serialization.cpp */, 1465 | 0167A33B23B9843600F0B36E /* obc1.hpp */, 1466 | ); 1467 | path = obc1; 1468 | sourceTree = ""; 1469 | }; 1470 | 0167A33C23B9843600F0B36E /* st0010 */ = { 1471 | isa = PBXGroup; 1472 | children = ( 1473 | 0167A33D23B9843600F0B36E /* st0010.hpp */, 1474 | 0167A33E23B9843600F0B36E /* serialization.cpp */, 1475 | 0167A33F23B9843600F0B36E /* opcodes.cpp */, 1476 | 0167A34023B9843600F0B36E /* st0010.cpp */, 1477 | 0167A34123B9843600F0B36E /* data.hpp */, 1478 | ); 1479 | path = st0010; 1480 | sourceTree = ""; 1481 | }; 1482 | 0167A34223B9843600F0B36E /* cx4 */ = { 1483 | isa = PBXGroup; 1484 | children = ( 1485 | 0167A34323B9843600F0B36E /* cx4.cpp */, 1486 | 0167A34423B9843600F0B36E /* oam.cpp */, 1487 | 0167A34523B9843600F0B36E /* data.cpp */, 1488 | 0167A34623B9843600F0B36E /* serialization.cpp */, 1489 | 0167A34723B9843600F0B36E /* cx4.hpp */, 1490 | 0167A34823B9843600F0B36E /* opcodes.cpp */, 1491 | 0167A34923B9843600F0B36E /* functions.cpp */, 1492 | ); 1493 | path = cx4; 1494 | sourceTree = ""; 1495 | }; 1496 | 0167A34A23B9843600F0B36E /* mcc */ = { 1497 | isa = PBXGroup; 1498 | children = ( 1499 | 0167A34B23B9843600F0B36E /* mcc.cpp */, 1500 | 0167A34C23B9843600F0B36E /* serialization.cpp */, 1501 | 0167A34D23B9843600F0B36E /* mcc.hpp */, 1502 | ); 1503 | path = mcc; 1504 | sourceTree = ""; 1505 | }; 1506 | 0167A34E23B9843600F0B36E /* icd */ = { 1507 | isa = PBXGroup; 1508 | children = ( 1509 | 0167A34F23B9843600F0B36E /* boot-roms.cpp */, 1510 | 0167A35023B9843600F0B36E /* icd.cpp */, 1511 | 0167A35123B9843600F0B36E /* interface.cpp */, 1512 | 0167A35223B9843600F0B36E /* io.cpp */, 1513 | 0167A35323B9843600F0B36E /* serialization.cpp */, 1514 | 0167A35423B9843600F0B36E /* icd.hpp */, 1515 | ); 1516 | path = icd; 1517 | sourceTree = ""; 1518 | }; 1519 | 0167A35623B9843600F0B36E /* dsp1 */ = { 1520 | isa = PBXGroup; 1521 | children = ( 1522 | 0167A35723B9843600F0B36E /* dsp1.cpp */, 1523 | 0167A35823B9843600F0B36E /* dsp1emu.cpp */, 1524 | 0167A35923B9843600F0B36E /* dsp1.hpp */, 1525 | 0167A35A23B9843600F0B36E /* serialization.cpp */, 1526 | 0167A35B23B9843600F0B36E /* dsp1emu.hpp */, 1527 | ); 1528 | path = dsp1; 1529 | sourceTree = ""; 1530 | }; 1531 | 0167A35C23B9843600F0B36E /* sa1 */ = { 1532 | isa = PBXGroup; 1533 | children = ( 1534 | 0167A35D23B9843600F0B36E /* memory.cpp */, 1535 | 0167A35E23B9843600F0B36E /* dma.cpp */, 1536 | 0167A35F23B9843600F0B36E /* bwram.cpp */, 1537 | 0167A36023B9843600F0B36E /* sa1.hpp */, 1538 | 0167A36123B9843600F0B36E /* io.cpp */, 1539 | 0167A36223B9843600F0B36E /* serialization.cpp */, 1540 | 0167A36323B9843600F0B36E /* rom.cpp */, 1541 | 0167A36423B9843600F0B36E /* iram.cpp */, 1542 | 0167A36523B9843600F0B36E /* sa1.cpp */, 1543 | ); 1544 | path = sa1; 1545 | sourceTree = ""; 1546 | }; 1547 | 0167A36623B9843600F0B36E /* msu1 */ = { 1548 | isa = PBXGroup; 1549 | children = ( 1550 | 0167A36723B9843600F0B36E /* msu1.cpp */, 1551 | 0167A36823B9843600F0B36E /* serialization.cpp */, 1552 | 0167A36923B9843600F0B36E /* msu1.hpp */, 1553 | ); 1554 | path = msu1; 1555 | sourceTree = ""; 1556 | }; 1557 | 0167A36A23B9843600F0B36E /* spc7110 */ = { 1558 | isa = PBXGroup; 1559 | children = ( 1560 | 0167A36B23B9843600F0B36E /* decompressor.cpp */, 1561 | 0167A36C23B9843600F0B36E /* alu.cpp */, 1562 | 0167A36D23B9843600F0B36E /* data.cpp */, 1563 | 0167A36E23B9843600F0B36E /* spc7110.cpp */, 1564 | 0167A36F23B9843600F0B36E /* serialization.cpp */, 1565 | 0167A37023B9843600F0B36E /* spc7110.hpp */, 1566 | 0167A37123B9843600F0B36E /* dcu.cpp */, 1567 | ); 1568 | path = spc7110; 1569 | sourceTree = ""; 1570 | }; 1571 | 0167A37223B9843600F0B36E /* sdd1 */ = { 1572 | isa = PBXGroup; 1573 | children = ( 1574 | 0167A37323B9843600F0B36E /* decompressor.cpp */, 1575 | 0167A37423B9843600F0B36E /* sdd1.cpp */, 1576 | 0167A37523B9843600F0B36E /* serialization.cpp */, 1577 | 0167A37623B9843600F0B36E /* decompressor.hpp */, 1578 | 0167A37723B9843600F0B36E /* sdd1.hpp */, 1579 | ); 1580 | path = sdd1; 1581 | sourceTree = ""; 1582 | }; 1583 | 0167A37923B9843600F0B36E /* necdsp */ = { 1584 | isa = PBXGroup; 1585 | children = ( 1586 | 0167A37A23B9843600F0B36E /* necdsp.hpp */, 1587 | 0167A37B23B9843600F0B36E /* serialization.cpp */, 1588 | 0167A37C23B9843600F0B36E /* necdsp.cpp */, 1589 | ); 1590 | path = necdsp; 1591 | sourceTree = ""; 1592 | }; 1593 | 0167A37D23B9843600F0B36E /* epsonrtc */ = { 1594 | isa = PBXGroup; 1595 | children = ( 1596 | 0167A37E23B9843600F0B36E /* memory.cpp */, 1597 | 0167A37F23B9843600F0B36E /* epsonrtc.hpp */, 1598 | 0167A38023B9843600F0B36E /* serialization.cpp */, 1599 | 0167A38123B9843600F0B36E /* epsonrtc.cpp */, 1600 | 0167A38223B9843600F0B36E /* time.cpp */, 1601 | ); 1602 | path = epsonrtc; 1603 | sourceTree = ""; 1604 | }; 1605 | 0167A38323B9843600F0B36E /* sharprtc */ = { 1606 | isa = PBXGroup; 1607 | children = ( 1608 | 0167A38423B9843600F0B36E /* memory.cpp */, 1609 | 0167A38523B9843600F0B36E /* sharprtc.hpp */, 1610 | 0167A38623B9843600F0B36E /* serialization.cpp */, 1611 | 0167A38723B9843600F0B36E /* sharprtc.cpp */, 1612 | 0167A38823B9843600F0B36E /* time.cpp */, 1613 | ); 1614 | path = sharprtc; 1615 | sourceTree = ""; 1616 | }; 1617 | 0167A38923B9843600F0B36E /* superfx */ = { 1618 | isa = PBXGroup; 1619 | children = ( 1620 | 0167A38A23B9843600F0B36E /* bus.cpp */, 1621 | 0167A38B23B9843600F0B36E /* memory.cpp */, 1622 | 0167A38C23B9843600F0B36E /* core.cpp */, 1623 | 0167A38D23B9843600F0B36E /* superfx.hpp */, 1624 | 0167A38E23B9843600F0B36E /* io.cpp */, 1625 | 0167A38F23B9843600F0B36E /* serialization.cpp */, 1626 | 0167A39023B9843600F0B36E /* superfx.cpp */, 1627 | 0167A39123B9843600F0B36E /* timing.cpp */, 1628 | ); 1629 | path = superfx; 1630 | sourceTree = ""; 1631 | }; 1632 | 0167A39223B9843600F0B36E /* event */ = { 1633 | isa = PBXGroup; 1634 | children = ( 1635 | 0167A39323B9843600F0B36E /* event.hpp */, 1636 | 0167A39423B9843600F0B36E /* serialization.cpp */, 1637 | 0167A39523B9843600F0B36E /* event.cpp */, 1638 | ); 1639 | path = event; 1640 | sourceTree = ""; 1641 | }; 1642 | 0167A39723B9843600F0B36E /* cartridge */ = { 1643 | isa = PBXGroup; 1644 | children = ( 1645 | 0167A39823B9843600F0B36E /* save.cpp */, 1646 | 0167A39923B9843600F0B36E /* cartridge.cpp */, 1647 | 0167A39A23B9843600F0B36E /* serialization.cpp */, 1648 | 0167A39B23B9843600F0B36E /* load.cpp */, 1649 | 0167A39C23B9843600F0B36E /* cartridge.hpp */, 1650 | ); 1651 | path = cartridge; 1652 | sourceTree = ""; 1653 | }; 1654 | 0167A39D23B9843600F0B36E /* controller */ = { 1655 | isa = PBXGroup; 1656 | children = ( 1657 | 0167A39E23B9843600F0B36E /* controller.hpp */, 1658 | 0167A39F23B9843600F0B36E /* super-multitap */, 1659 | 0167A3A223B9843600F0B36E /* gamepad */, 1660 | 0167A3A523B9843600F0B36E /* justifier */, 1661 | 0167A3A823B9843600F0B36E /* mouse */, 1662 | 0167A3AB23B9843600F0B36E /* super-scope */, 1663 | 0167A3AE23B9843600F0B36E /* controller.cpp */, 1664 | ); 1665 | path = controller; 1666 | sourceTree = ""; 1667 | }; 1668 | 0167A39F23B9843600F0B36E /* super-multitap */ = { 1669 | isa = PBXGroup; 1670 | children = ( 1671 | 0167A3A023B9843600F0B36E /* super-multitap.hpp */, 1672 | 0167A3A123B9843600F0B36E /* super-multitap.cpp */, 1673 | ); 1674 | path = "super-multitap"; 1675 | sourceTree = ""; 1676 | }; 1677 | 0167A3A223B9843600F0B36E /* gamepad */ = { 1678 | isa = PBXGroup; 1679 | children = ( 1680 | 0167A3A323B9843600F0B36E /* gamepad.cpp */, 1681 | 0167A3A423B9843600F0B36E /* gamepad.hpp */, 1682 | ); 1683 | path = gamepad; 1684 | sourceTree = ""; 1685 | }; 1686 | 0167A3A523B9843600F0B36E /* justifier */ = { 1687 | isa = PBXGroup; 1688 | children = ( 1689 | 0167A3A623B9843600F0B36E /* justifier.cpp */, 1690 | 0167A3A723B9843600F0B36E /* justifier.hpp */, 1691 | ); 1692 | path = justifier; 1693 | sourceTree = ""; 1694 | }; 1695 | 0167A3A823B9843600F0B36E /* mouse */ = { 1696 | isa = PBXGroup; 1697 | children = ( 1698 | 0167A3A923B9843600F0B36E /* mouse.cpp */, 1699 | 0167A3AA23B9843600F0B36E /* mouse.hpp */, 1700 | ); 1701 | path = mouse; 1702 | sourceTree = ""; 1703 | }; 1704 | 0167A3AB23B9843600F0B36E /* super-scope */ = { 1705 | isa = PBXGroup; 1706 | children = ( 1707 | 0167A3AC23B9843600F0B36E /* super-scope.cpp */, 1708 | 0167A3AD23B9843600F0B36E /* super-scope.hpp */, 1709 | ); 1710 | path = "super-scope"; 1711 | sourceTree = ""; 1712 | }; 1713 | 0167A3AF23B9843600F0B36E /* ppu-fast */ = { 1714 | isa = PBXGroup; 1715 | children = ( 1716 | 0167A3B023B9843600F0B36E /* mode7hd.cpp */, 1717 | 0167A3B123B9843600F0B36E /* line.cpp */, 1718 | 0167A3B223B9843600F0B36E /* ppu.cpp */, 1719 | 0167A3B323B9843600F0B36E /* window.cpp */, 1720 | 0167A3B423B9843600F0B36E /* mode7.cpp */, 1721 | 0167A3B523B9843600F0B36E /* object.cpp */, 1722 | 0167A3B623B9843600F0B36E /* io.cpp */, 1723 | 0167A3B723B9843600F0B36E /* serialization.cpp */, 1724 | 0167A3B823B9843600F0B36E /* background.cpp */, 1725 | 0167A3B923B9843600F0B36E /* ppu.hpp */, 1726 | ); 1727 | path = "ppu-fast"; 1728 | sourceTree = ""; 1729 | }; 1730 | 0167A3BA23B9843600F0B36E /* system */ = { 1731 | isa = PBXGroup; 1732 | children = ( 1733 | 0167A3BB23B9843600F0B36E /* system.hpp */, 1734 | 0167A3BC23B9843600F0B36E /* serialization.cpp */, 1735 | 0167A3BD23B9843600F0B36E /* system.cpp */, 1736 | ); 1737 | path = system; 1738 | sourceTree = ""; 1739 | }; 1740 | 0167A3BE23B9843600F0B36E /* expansion */ = { 1741 | isa = PBXGroup; 1742 | children = ( 1743 | 0167A3BF23B9843600F0B36E /* 21fx */, 1744 | 0167A3C223B9843600F0B36E /* expansion.cpp */, 1745 | 0167A3C323B9843600F0B36E /* satellaview */, 1746 | 0167A3C623B9843600F0B36E /* expansion.hpp */, 1747 | ); 1748 | path = expansion; 1749 | sourceTree = ""; 1750 | }; 1751 | 0167A3BF23B9843600F0B36E /* 21fx */ = { 1752 | isa = PBXGroup; 1753 | children = ( 1754 | 0167A3C023B9843600F0B36E /* 21fx.cpp */, 1755 | 0167A3C123B9843600F0B36E /* 21fx.hpp */, 1756 | ); 1757 | path = 21fx; 1758 | sourceTree = ""; 1759 | }; 1760 | 0167A3C323B9843600F0B36E /* satellaview */ = { 1761 | isa = PBXGroup; 1762 | children = ( 1763 | 0167A3C423B9843600F0B36E /* satellaview.hpp */, 1764 | 0167A3C523B9843600F0B36E /* satellaview.cpp */, 1765 | ); 1766 | path = satellaview; 1767 | sourceTree = ""; 1768 | }; 1769 | 0167A3C723B9843600F0B36E /* smp */ = { 1770 | isa = PBXGroup; 1771 | children = ( 1772 | 0167A3C823B9843600F0B36E /* memory.cpp */, 1773 | 0167A3C923B9843600F0B36E /* smp.hpp */, 1774 | 0167A3CA23B9843600F0B36E /* io.cpp */, 1775 | 0167A3CB23B9843600F0B36E /* serialization.cpp */, 1776 | 0167A3CC23B9843600F0B36E /* timing.cpp */, 1777 | 0167A3CD23B9843600F0B36E /* smp.cpp */, 1778 | ); 1779 | path = smp; 1780 | sourceTree = ""; 1781 | }; 1782 | 0167A3CE23B9843600F0B36E /* slot */ = { 1783 | isa = PBXGroup; 1784 | children = ( 1785 | 0167A3CF23B9843600F0B36E /* bsmemory */, 1786 | 0167A3D323B9843600F0B36E /* slot.hpp */, 1787 | 0167A3D423B9843600F0B36E /* slot.cpp */, 1788 | 0167A3D523B9843600F0B36E /* sufamiturbo */, 1789 | ); 1790 | path = slot; 1791 | sourceTree = ""; 1792 | }; 1793 | 0167A3CF23B9843600F0B36E /* bsmemory */ = { 1794 | isa = PBXGroup; 1795 | children = ( 1796 | 0167A3D023B9843600F0B36E /* bsmemory.cpp */, 1797 | 0167A3D123B9843600F0B36E /* serialization.cpp */, 1798 | 0167A3D223B9843600F0B36E /* bsmemory.hpp */, 1799 | ); 1800 | path = bsmemory; 1801 | sourceTree = ""; 1802 | }; 1803 | 0167A3D523B9843600F0B36E /* sufamiturbo */ = { 1804 | isa = PBXGroup; 1805 | children = ( 1806 | 0167A3D623B9843600F0B36E /* sufamiturbo.cpp */, 1807 | 0167A3D723B9843600F0B36E /* serialization.cpp */, 1808 | 0167A3D823B9843600F0B36E /* sufamiturbo.hpp */, 1809 | ); 1810 | path = sufamiturbo; 1811 | sourceTree = ""; 1812 | }; 1813 | 0167A3D923B9843600F0B36E /* ppu */ = { 1814 | isa = PBXGroup; 1815 | children = ( 1816 | 0167A3DA23B9843600F0B36E /* ppu.cpp */, 1817 | 0167A3DB23B9843600F0B36E /* window.cpp */, 1818 | 0167A3DC23B9843600F0B36E /* mode7.cpp */, 1819 | 0167A3DD23B9843600F0B36E /* screen.cpp */, 1820 | 0167A3DE23B9843600F0B36E /* object.cpp */, 1821 | 0167A3DF23B9843600F0B36E /* oam.cpp */, 1822 | 0167A3E023B9843600F0B36E /* background.hpp */, 1823 | 0167A3E123B9843600F0B36E /* window.hpp */, 1824 | 0167A3E223B9843600F0B36E /* screen.hpp */, 1825 | 0167A3E323B9843600F0B36E /* object.hpp */, 1826 | 0167A3E423B9843600F0B36E /* io.cpp */, 1827 | 0167A3E523B9843600F0B36E /* serialization.cpp */, 1828 | 0167A3E623B9843600F0B36E /* background.cpp */, 1829 | 0167A3E723B9843600F0B36E /* counter */, 1830 | 0167A3EB23B9843600F0B36E /* ppu.hpp */, 1831 | 0167A3EC23B9843600F0B36E /* main.cpp */, 1832 | ); 1833 | path = ppu; 1834 | sourceTree = ""; 1835 | }; 1836 | 0167A3E723B9843600F0B36E /* counter */ = { 1837 | isa = PBXGroup; 1838 | children = ( 1839 | 0167A3E823B9843600F0B36E /* counter.hpp */, 1840 | 0167A3E923B9843600F0B36E /* serialization.cpp */, 1841 | 0167A3EA23B9843600F0B36E /* counter-inline.hpp */, 1842 | ); 1843 | path = counter; 1844 | sourceTree = ""; 1845 | }; 1846 | 0167A3ED23B9843600F0B36E /* dsp */ = { 1847 | isa = PBXGroup; 1848 | children = ( 1849 | 0167A3EE23B9843600F0B36E /* blargg_common.h */, 1850 | 0167A3EF23B9843600F0B36E /* SPC_DSP.h */, 1851 | 0167A3F023B9843600F0B36E /* dsp.cpp */, 1852 | 0167A3F123B9843600F0B36E /* blargg_config.h */, 1853 | 0167A3F223B9843600F0B36E /* serialization.cpp */, 1854 | 0167A3F323B9843600F0B36E /* dsp.hpp */, 1855 | 0167A3F423B9843600F0B36E /* blargg_source.h */, 1856 | 0167A3F523B9843600F0B36E /* SPC_DSP.cpp */, 1857 | 0167A3F623B9843600F0B36E /* blargg_endian.h */, 1858 | ); 1859 | path = dsp; 1860 | sourceTree = ""; 1861 | }; 1862 | 0167A3F723B9843600F0B36E /* processor */ = { 1863 | isa = PBXGroup; 1864 | children = ( 1865 | 0167A3F923B9843600F0B36E /* sm83 */, 1866 | 0167A40323B9843600F0B36E /* gsu */, 1867 | 0167A40B23B9843600F0B36E /* hg51b */, 1868 | 0167A41223B9843600F0B36E /* wdc65816 */, 1869 | 0167A42123B9843600F0B36E /* upd96050 */, 1870 | 0167A42823B9843600F0B36E /* processor.hpp */, 1871 | 0167A42923B9843600F0B36E /* arm7tdmi */, 1872 | 0167A43423B9843600F0B36E /* spc700 */, 1873 | ); 1874 | path = processor; 1875 | sourceTree = ""; 1876 | }; 1877 | 0167A3F923B9843600F0B36E /* sm83 */ = { 1878 | isa = PBXGroup; 1879 | children = ( 1880 | 0167A3FA23B9843600F0B36E /* memory.cpp */, 1881 | 0167A3FB23B9843600F0B36E /* algorithms.cpp */, 1882 | 0167A3FC23B9843600F0B36E /* sm83.hpp */, 1883 | 0167A3FD23B9843600F0B36E /* disassembler.cpp */, 1884 | 0167A3FE23B9843600F0B36E /* registers.cpp */, 1885 | 0167A3FF23B9843600F0B36E /* serialization.cpp */, 1886 | 0167A40023B9843600F0B36E /* instruction.cpp */, 1887 | 0167A40123B9843600F0B36E /* sm83.cpp */, 1888 | 0167A40223B9843600F0B36E /* instructions.cpp */, 1889 | ); 1890 | path = sm83; 1891 | sourceTree = ""; 1892 | }; 1893 | 0167A40323B9843600F0B36E /* gsu */ = { 1894 | isa = PBXGroup; 1895 | children = ( 1896 | 0167A40423B9843600F0B36E /* gsu.cpp */, 1897 | 0167A40523B9843600F0B36E /* disassembler.cpp */, 1898 | 0167A40623B9843600F0B36E /* registers.hpp */, 1899 | 0167A40723B9843600F0B36E /* serialization.cpp */, 1900 | 0167A40823B9843600F0B36E /* instruction.cpp */, 1901 | 0167A40923B9843600F0B36E /* gsu.hpp */, 1902 | 0167A40A23B9843600F0B36E /* instructions.cpp */, 1903 | ); 1904 | path = gsu; 1905 | sourceTree = ""; 1906 | }; 1907 | 0167A40B23B9843600F0B36E /* hg51b */ = { 1908 | isa = PBXGroup; 1909 | children = ( 1910 | 0167A40C23B9843600F0B36E /* hg51b.hpp */, 1911 | 0167A40D23B9843600F0B36E /* registers.cpp */, 1912 | 0167A40E23B9843600F0B36E /* serialization.cpp */, 1913 | 0167A40F23B9843600F0B36E /* instruction.cpp */, 1914 | 0167A41023B9843600F0B36E /* hg51b.cpp */, 1915 | 0167A41123B9843600F0B36E /* instructions.cpp */, 1916 | ); 1917 | path = hg51b; 1918 | sourceTree = ""; 1919 | }; 1920 | 0167A41223B9843600F0B36E /* wdc65816 */ = { 1921 | isa = PBXGroup; 1922 | children = ( 1923 | 0167A41323B9843600F0B36E /* memory.cpp */, 1924 | 0167A41423B9843600F0B36E /* instruction.hpp */, 1925 | 0167A41523B9843600F0B36E /* algorithms.cpp */, 1926 | 0167A41623B9843600F0B36E /* disassembler.cpp */, 1927 | 0167A41723B9843600F0B36E /* wdc65816.hpp */, 1928 | 0167A41823B9843600F0B36E /* instructions-read.cpp */, 1929 | 0167A41923B9843600F0B36E /* wdc65816.cpp */, 1930 | 0167A41A23B9843600F0B36E /* instructions-pc.cpp */, 1931 | 0167A41B23B9843600F0B36E /* instructions-write.cpp */, 1932 | 0167A41C23B9843600F0B36E /* registers.hpp */, 1933 | 0167A41D23B9843600F0B36E /* serialization.cpp */, 1934 | 0167A41E23B9843600F0B36E /* instructions-modify.cpp */, 1935 | 0167A41F23B9843600F0B36E /* instruction.cpp */, 1936 | 0167A42023B9843600F0B36E /* instructions-other.cpp */, 1937 | ); 1938 | path = wdc65816; 1939 | sourceTree = ""; 1940 | }; 1941 | 0167A42123B9843600F0B36E /* upd96050 */ = { 1942 | isa = PBXGroup; 1943 | children = ( 1944 | 0167A42223B9843600F0B36E /* memory.cpp */, 1945 | 0167A42323B9843600F0B36E /* disassembler.cpp */, 1946 | 0167A42423B9843600F0B36E /* upd96050.hpp */, 1947 | 0167A42523B9843600F0B36E /* upd96050.cpp */, 1948 | 0167A42623B9843600F0B36E /* serialization.cpp */, 1949 | 0167A42723B9843600F0B36E /* instructions.cpp */, 1950 | ); 1951 | path = upd96050; 1952 | sourceTree = ""; 1953 | }; 1954 | 0167A42923B9843600F0B36E /* arm7tdmi */ = { 1955 | isa = PBXGroup; 1956 | children = ( 1957 | 0167A42A23B9843600F0B36E /* memory.cpp */, 1958 | 0167A42B23B9843600F0B36E /* algorithms.cpp */, 1959 | 0167A42C23B9843600F0B36E /* disassembler.cpp */, 1960 | 0167A42D23B9843600F0B36E /* instructions-arm.cpp */, 1961 | 0167A42E23B9843600F0B36E /* registers.cpp */, 1962 | 0167A42F23B9843600F0B36E /* arm7tdmi.hpp */, 1963 | 0167A43023B9843600F0B36E /* serialization.cpp */, 1964 | 0167A43123B9843600F0B36E /* arm7tdmi.cpp */, 1965 | 0167A43223B9843600F0B36E /* instructions-thumb.cpp */, 1966 | 0167A43323B9843600F0B36E /* instruction.cpp */, 1967 | ); 1968 | path = arm7tdmi; 1969 | sourceTree = ""; 1970 | }; 1971 | 0167A43423B9843600F0B36E /* spc700 */ = { 1972 | isa = PBXGroup; 1973 | children = ( 1974 | 0167A43523B9843600F0B36E /* memory.cpp */, 1975 | 0167A43623B9843600F0B36E /* algorithms.cpp */, 1976 | 0167A43723B9843600F0B36E /* disassembler.cpp */, 1977 | 0167A43823B9843600F0B36E /* spc700.hpp */, 1978 | 0167A43923B9843600F0B36E /* serialization.cpp */, 1979 | 0167A43A23B9843600F0B36E /* spc700.cpp */, 1980 | 0167A43B23B9843600F0B36E /* instruction.cpp */, 1981 | 0167A43C23B9843600F0B36E /* instructions.cpp */, 1982 | ); 1983 | path = spc700; 1984 | sourceTree = ""; 1985 | }; 1986 | 0167A43D23B9843600F0B36E /* gb */ = { 1987 | isa = PBXGroup; 1988 | children = ( 1989 | 0167A43F23B9843600F0B36E /* Core */, 1990 | 0167A46423B9843600F0B36E /* LICENSE */, 1991 | 0167A46523B9843600F0B36E /* README */, 1992 | ); 1993 | path = gb; 1994 | sourceTree = ""; 1995 | }; 1996 | 0167A43F23B9843600F0B36E /* Core */ = { 1997 | isa = PBXGroup; 1998 | children = ( 1999 | 0167A44023B9843600F0B36E /* sm83_cpu.h */, 2000 | 0167A44123B9843600F0B36E /* sgb_animation_logo.inc */, 2001 | 0167A44223B9843600F0B36E /* printer.h */, 2002 | 0167A44323B9843600F0B36E /* display.c */, 2003 | 0167A44423B9843600F0B36E /* sgb.h */, 2004 | 0167A44523B9843600F0B36E /* memory.c */, 2005 | 0167A44623B9843600F0B36E /* save_state.h */, 2006 | 0167A44723B9843600F0B36E /* apu.c */, 2007 | 0167A44823B9843600F0B36E /* mbc.h */, 2008 | 0167A44923B9843600F0B36E /* gb.c */, 2009 | 0167A44A23B9843600F0B36E /* camera.h */, 2010 | 0167A44B23B9843600F0B36E /* joypad.c */, 2011 | 0167A44C23B9843600F0B36E /* debugger.c */, 2012 | 0167A44D23B9843600F0B36E /* timing.h */, 2013 | 0167A44E23B9843600F0B36E /* rewind.h */, 2014 | 0167A44F23B9843600F0B36E /* sgb_border.inc */, 2015 | 0167A45023B9843600F0B36E /* random.c */, 2016 | 0167A45123B9843600F0B36E /* symbol_hash.c */, 2017 | 0167A45223B9843600F0B36E /* sgb.c */, 2018 | 0167A45323B9843600F0B36E /* display.h */, 2019 | 0167A45423B9843600F0B36E /* printer.c */, 2020 | 0167A45523B9843600F0B36E /* sm83_cpu.c */, 2021 | 0167A45623B9843600F0B36E /* mbc.c */, 2022 | 0167A45723B9843600F0B36E /* gb.h */, 2023 | 0167A45823B9843600F0B36E /* save_state.c */, 2024 | 0167A45923B9843600F0B36E /* apu.h */, 2025 | 0167A45A23B9843600F0B36E /* memory.h */, 2026 | 0167A45B23B9843600F0B36E /* sm83_disassembler.c */, 2027 | 0167A45C23B9843600F0B36E /* debugger.h */, 2028 | 0167A45D23B9843600F0B36E /* rewind.c */, 2029 | 0167A45E23B9843600F0B36E /* timing.c */, 2030 | 0167A45F23B9843600F0B36E /* camera.c */, 2031 | 0167A46023B9843600F0B36E /* joypad.h */, 2032 | 0167A46123B9843600F0B36E /* symbol_hash.h */, 2033 | 0167A46223B9843600F0B36E /* random.h */, 2034 | 0167A46323B9843600F0B36E /* gb_struct_def.h */, 2035 | ); 2036 | path = Core; 2037 | sourceTree = ""; 2038 | }; 2039 | 0167A4CC23B9843600F0B36E /* emulator */ = { 2040 | isa = PBXGroup; 2041 | children = ( 2042 | 0167A4CD23B9843600F0B36E /* cheat.hpp */, 2043 | 0167A4CE23B9843600F0B36E /* memory */, 2044 | 0167A4D223B9843600F0B36E /* game.hpp */, 2045 | 0167A4D323B9843600F0B36E /* emulator.cpp */, 2046 | 0167A4D423B9843600F0B36E /* interface.hpp */, 2047 | 0167A4D523B9843600F0B36E /* platform.hpp */, 2048 | 0167A4D623B9843600F0B36E /* random.hpp */, 2049 | 0167A4D723B9843600F0B36E /* emulator.hpp */, 2050 | 0167A4D823B9843600F0B36E /* audio */, 2051 | 0167A4DC23B9843600F0B36E /* types.hpp */, 2052 | ); 2053 | path = emulator; 2054 | sourceTree = ""; 2055 | }; 2056 | 0167A4CE23B9843600F0B36E /* memory */ = { 2057 | isa = PBXGroup; 2058 | children = ( 2059 | 0167A4CF23B9843600F0B36E /* writable.hpp */, 2060 | 0167A4D023B9843600F0B36E /* readable.hpp */, 2061 | 0167A4D123B9843600F0B36E /* memory.hpp */, 2062 | ); 2063 | path = memory; 2064 | sourceTree = ""; 2065 | }; 2066 | 0167A4D823B9843600F0B36E /* audio */ = { 2067 | isa = PBXGroup; 2068 | children = ( 2069 | 0167A4D923B9843600F0B36E /* audio.cpp */, 2070 | 0167A4DA23B9843600F0B36E /* audio.hpp */, 2071 | 0167A4DB23B9843600F0B36E /* stream.cpp */, 2072 | ); 2073 | path = audio; 2074 | sourceTree = ""; 2075 | }; 2076 | 0167A4DD23B9843600F0B36E /* lzma */ = { 2077 | isa = PBXGroup; 2078 | children = ( 2079 | 0167A4DE23B9843600F0B36E /* Lzma2Dec.c */, 2080 | 0167A4DF23B9843600F0B36E /* LzHash.h */, 2081 | 0167A4E023B9843600F0B36E /* LzmaEnc.c */, 2082 | 0167A4E123B9843600F0B36E /* Ppmd7Dec.c */, 2083 | 0167A4E223B9843600F0B36E /* Aes.c */, 2084 | 0167A4E323B9843600F0B36E /* LzFindMt.c */, 2085 | 0167A4E423B9843600F0B36E /* lzma.cpp */, 2086 | 0167A4E523B9843600F0B36E /* 7zTypes.h */, 2087 | 0167A4E623B9843600F0B36E /* XzDec.c */, 2088 | 0167A4E723B9843600F0B36E /* MtDec.c */, 2089 | 0167A4E823B9843600F0B36E /* MtCoder.c */, 2090 | 0167A4E923B9843600F0B36E /* Bcj2.c */, 2091 | 0167A4EA23B9843600F0B36E /* Compiler.h */, 2092 | 0167A4EB23B9843600F0B36E /* LzFind.c */, 2093 | 0167A4EC23B9843600F0B36E /* XzCrc64.h */, 2094 | 0167A4ED23B9843600F0B36E /* Precomp.h */, 2095 | 0167A4EE23B9843600F0B36E /* DllSecur.c */, 2096 | 0167A4EF23B9843600F0B36E /* CpuArch.h */, 2097 | 0167A4F023B9843600F0B36E /* Sort.c */, 2098 | 0167A4F123B9843600F0B36E /* 7zCrc.h */, 2099 | 0167A4F223B9843600F0B36E /* Ppmd7.c */, 2100 | 0167A4F323B9843600F0B36E /* Delta.h */, 2101 | 0167A4F423B9843600F0B36E /* Bra.c */, 2102 | 0167A4F523B9843600F0B36E /* 7zFile.h */, 2103 | 0167A4F623B9843600F0B36E /* Bra86.c */, 2104 | 0167A4F723B9843600F0B36E /* 7zArcIn.c */, 2105 | 0167A4F823B9843600F0B36E /* 7zAlloc.c */, 2106 | 0167A4F923B9843600F0B36E /* Sha256.h */, 2107 | 0167A4FA23B9843600F0B36E /* XzIn.c */, 2108 | 0167A4FB23B9843600F0B36E /* XzEnc.c */, 2109 | 0167A4FC23B9843600F0B36E /* Lzma2DecMt.c */, 2110 | 0167A4FD23B9843600F0B36E /* Threads.h */, 2111 | 0167A4FE23B9843600F0B36E /* LzmaLib.h */, 2112 | 0167A4FF23B9843600F0B36E /* 7zBuf.h */, 2113 | 0167A50023B9843600F0B36E /* 7z.h */, 2114 | 0167A50123B9843600F0B36E /* Alloc.c */, 2115 | 0167A50223B9843600F0B36E /* Xz.h */, 2116 | 0167A50323B9843600F0B36E /* LzmaDec.c */, 2117 | 0167A50423B9843600F0B36E /* Lzma2Enc.c */, 2118 | 0167A50523B9843600F0B36E /* Ppmd7Enc.c */, 2119 | 0167A50623B9843600F0B36E /* LzFindMt.h */, 2120 | 0167A50723B9843600F0B36E /* 7zDec.c */, 2121 | 0167A50823B9843600F0B36E /* Lzma86.h */, 2122 | 0167A50923B9843600F0B36E /* LzmaEnc.h */, 2123 | 0167A50A23B9843600F0B36E /* Lzma2Dec.h */, 2124 | 0167A50B23B9843700F0B36E /* Aes.h */, 2125 | 0167A50C23B9843700F0B36E /* DllSecur.h */, 2126 | 0167A50D23B9843700F0B36E /* 7zBuf2.c */, 2127 | 0167A50E23B9843700F0B36E /* XzCrc64.c */, 2128 | 0167A50F23B9843700F0B36E /* LzFind.h */, 2129 | 0167A51023B9843700F0B36E /* BraIA64.c */, 2130 | 0167A51123B9843700F0B36E /* Lzma86Dec.c */, 2131 | 0167A51223B9843700F0B36E /* 7zStream.c */, 2132 | 0167A51323B9843700F0B36E /* Bcj2.h */, 2133 | 0167A51423B9843700F0B36E /* 7zVersion.rc */, 2134 | 0167A51523B9843700F0B36E /* Ppmd.h */, 2135 | 0167A51623B9843700F0B36E /* MtDec.h */, 2136 | 0167A51723B9843700F0B36E /* MtCoder.h */, 2137 | 0167A51823B9843700F0B36E /* Sha256.c */, 2138 | 0167A51923B9843700F0B36E /* 7zAlloc.h */, 2139 | 0167A51A23B9843700F0B36E /* Delta.c */, 2140 | 0167A51B23B9843700F0B36E /* 7zVersion.h */, 2141 | 0167A51C23B9843700F0B36E /* 7zFile.c */, 2142 | 0167A51D23B9843700F0B36E /* lzma.hpp */, 2143 | 0167A51E23B9843700F0B36E /* Bra.h */, 2144 | 0167A51F23B9843700F0B36E /* 7zCrc.c */, 2145 | 0167A52023B9843700F0B36E /* Sort.h */, 2146 | 0167A52123B9843700F0B36E /* AesOpt.c */, 2147 | 0167A52223B9843700F0B36E /* RotateDefs.h */, 2148 | 0167A52323B9843700F0B36E /* Lzma86Enc.c */, 2149 | 0167A52423B9843700F0B36E /* Ppmd7.h */, 2150 | 0167A52523B9843700F0B36E /* CpuArch.c */, 2151 | 0167A52623B9843700F0B36E /* Lzma2Enc.h */, 2152 | 0167A52723B9843700F0B36E /* Bcj2Enc.c */, 2153 | 0167A52823B9843700F0B36E /* LzmaDec.h */, 2154 | 0167A52923B9843700F0B36E /* XzCrc64Opt.c */, 2155 | 0167A52A23B9843700F0B36E /* Xz.c */, 2156 | 0167A52B23B9843700F0B36E /* 7zCrcOpt.c */, 2157 | 0167A52C23B9843700F0B36E /* Alloc.h */, 2158 | 0167A52D23B9843700F0B36E /* Threads.c */, 2159 | 0167A52E23B9843700F0B36E /* Lzma2DecMt.h */, 2160 | 0167A52F23B9843700F0B36E /* 7zBuf.c */, 2161 | 0167A53023B9843700F0B36E /* LzmaLib.c */, 2162 | 0167A53123B9843700F0B36E /* XzEnc.h */, 2163 | ); 2164 | path = lzma; 2165 | sourceTree = ""; 2166 | }; 2167 | 0167A53223B9843700F0B36E /* libco */ = { 2168 | isa = PBXGroup; 2169 | children = ( 2170 | 0167A53323B9843700F0B36E /* sjlj.c */, 2171 | 0167A53423B9843700F0B36E /* libco.h */, 2172 | 0167A53523B9843700F0B36E /* settings.h */, 2173 | 0167A53823B9843700F0B36E /* ucontext.c */, 2174 | 0167A53B23B9843700F0B36E /* libco.c */, 2175 | 0167A53C23B9843700F0B36E /* amd64.c */, 2176 | 0167A53D23B9843700F0B36E /* doc */, 2177 | ); 2178 | name = libco; 2179 | path = bsnes/libco; 2180 | sourceTree = ""; 2181 | }; 2182 | 0167A53D23B9843700F0B36E /* doc */ = { 2183 | isa = PBXGroup; 2184 | children = ( 2185 | 0167A53E23B9843700F0B36E /* style.css */, 2186 | 0167A53F23B9843700F0B36E /* targets.html */, 2187 | 0167A54023B9843700F0B36E /* usage.html */, 2188 | ); 2189 | path = doc; 2190 | sourceTree = ""; 2191 | }; 2192 | 089C166AFE841209C02AAC07 /* BSNES */ = { 2193 | isa = PBXGroup; 2194 | children = ( 2195 | 08FB77AFFE84173DC02AAC07 /* Classes */, 2196 | 089C167CFE841241C02AAC07 /* Resources */, 2197 | 089C1671FE841209C02AAC07 /* Frameworks and Libraries */, 2198 | 19C28FB8FE9D52D311CA2CBB /* Products */, 2199 | ); 2200 | indentWidth = 4; 2201 | name = BSNES; 2202 | sourceTree = ""; 2203 | tabWidth = 4; 2204 | }; 2205 | 089C1671FE841209C02AAC07 /* Frameworks and Libraries */ = { 2206 | isa = PBXGroup; 2207 | children = ( 2208 | C6D120EB1711307900E868A8 /* OpenEmuBase.framework */, 2209 | 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */, 2210 | 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */, 2211 | ); 2212 | name = "Frameworks and Libraries"; 2213 | sourceTree = ""; 2214 | }; 2215 | 089C167CFE841241C02AAC07 /* Resources */ = { 2216 | isa = PBXGroup; 2217 | children = ( 2218 | 013D75C223BCEF0100D74AD3 /* Database */, 2219 | 0113624223BA377D00BC181F /* system */, 2220 | 82B9198710150FA9007BD6DB /* bsnes.icns */, 2221 | 8D5B49B7048680CD000E48DA /* Info.plist */, 2222 | 089C167DFE841241C02AAC07 /* InfoPlist.strings */, 2223 | ); 2224 | name = Resources; 2225 | sourceTree = ""; 2226 | }; 2227 | 08FB77AFFE84173DC02AAC07 /* Classes */ = { 2228 | isa = PBXGroup; 2229 | children = ( 2230 | C6480FFB1364B2E10094FA33 /* OESNESSystemResponderClient.h */, 2231 | 0113624123BA353400BC181F /* program.mm */, 2232 | 826FE0F31014D8930023A8E9 /* BSNESGameCore.h */, 2233 | 826FE0F41014D8930023A8E9 /* BSNESGameCore.mm */, 2234 | 0167A2F123B9843600F0B36E /* bsnes */, 2235 | 0167A53223B9843700F0B36E /* libco */, 2236 | 0167A1F823B9843600F0B36E /* nall */, 2237 | ); 2238 | name = Classes; 2239 | sourceTree = ""; 2240 | }; 2241 | 1058C7ACFEA557BF11CA2CBB /* Linked Frameworks */ = { 2242 | isa = PBXGroup; 2243 | children = ( 2244 | 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */, 2245 | ); 2246 | name = "Linked Frameworks"; 2247 | sourceTree = ""; 2248 | }; 2249 | 1058C7AEFEA557BF11CA2CBB /* Other Frameworks */ = { 2250 | isa = PBXGroup; 2251 | children = ( 2252 | 089C167FFE841241C02AAC07 /* AppKit.framework */, 2253 | D2F7E65807B2D6F200F64583 /* CoreData.framework */, 2254 | 089C1672FE841209C02AAC07 /* Foundation.framework */, 2255 | ); 2256 | name = "Other Frameworks"; 2257 | sourceTree = ""; 2258 | }; 2259 | 19C28FB8FE9D52D311CA2CBB /* Products */ = { 2260 | isa = PBXGroup; 2261 | children = ( 2262 | 8D5B49B6048680CD000E48DA /* BSNES.oecoreplugin */, 2263 | ); 2264 | name = Products; 2265 | sourceTree = ""; 2266 | }; 2267 | /* End PBXGroup section */ 2268 | 2269 | /* Begin PBXNativeTarget section */ 2270 | 8D5B49AC048680CD000E48DA /* BSNES */ = { 2271 | isa = PBXNativeTarget; 2272 | buildConfigurationList = 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "BSNES" */; 2273 | buildPhases = ( 2274 | 8D5B49AF048680CD000E48DA /* Resources */, 2275 | 8D5B49B1048680CD000E48DA /* Sources */, 2276 | 8D5B49B3048680CD000E48DA /* Frameworks */, 2277 | ); 2278 | buildRules = ( 2279 | ); 2280 | dependencies = ( 2281 | ); 2282 | name = BSNES; 2283 | productInstallPath = "$(HOME)/Library/Bundles"; 2284 | productName = BSNES; 2285 | productReference = 8D5B49B6048680CD000E48DA /* BSNES.oecoreplugin */; 2286 | productType = "com.apple.product-type.bundle"; 2287 | }; 2288 | /* End PBXNativeTarget section */ 2289 | 2290 | /* Begin PBXProject section */ 2291 | 089C1669FE841209C02AAC07 /* Project object */ = { 2292 | isa = PBXProject; 2293 | attributes = { 2294 | LastUpgradeCheck = 1130; 2295 | }; 2296 | buildConfigurationList = 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "BSNES" */; 2297 | compatibilityVersion = "Xcode 3.2"; 2298 | developmentRegion = en; 2299 | hasScannedForEncodings = 1; 2300 | knownRegions = ( 2301 | en, 2302 | Base, 2303 | ); 2304 | mainGroup = 089C166AFE841209C02AAC07 /* BSNES */; 2305 | projectDirPath = ""; 2306 | projectRoot = ""; 2307 | targets = ( 2308 | 8D5B49AC048680CD000E48DA /* BSNES */, 2309 | 82B9195310150EA2007BD6DB /* Build & Install BSNES */, 2310 | 8230C6A110AFBC9100412F24 /* Distribution */, 2311 | ); 2312 | }; 2313 | /* End PBXProject section */ 2314 | 2315 | /* Begin PBXResourcesBuildPhase section */ 2316 | 8D5B49AF048680CD000E48DA /* Resources */ = { 2317 | isa = PBXResourcesBuildPhase; 2318 | buildActionMask = 2147483647; 2319 | files = ( 2320 | 0113624623BA377D00BC181F /* boards.bml in Resources */, 2321 | 0113624523BA377D00BC181F /* ipl.rom in Resources */, 2322 | 8D5B49B0048680CD000E48DA /* InfoPlist.strings in Resources */, 2323 | 82B9198810150FA9007BD6DB /* bsnes.icns in Resources */, 2324 | 013D75CA23BCEF0100D74AD3 /* Super Famicom.bml in Resources */, 2325 | ); 2326 | runOnlyForDeploymentPostprocessing = 0; 2327 | }; 2328 | /* End PBXResourcesBuildPhase section */ 2329 | 2330 | /* Begin PBXShellScriptBuildPhase section */ 2331 | 8230C6A010AFBC9100412F24 /* ShellScript */ = { 2332 | isa = PBXShellScriptBuildPhase; 2333 | buildActionMask = 2147483647; 2334 | files = ( 2335 | ); 2336 | inputPaths = ( 2337 | ); 2338 | outputPaths = ( 2339 | ); 2340 | runOnlyForDeploymentPostprocessing = 0; 2341 | shellPath = /bin/sh; 2342 | shellScript = /usr/bin/openemu_rb_automation.rb; 2343 | }; 2344 | 82B9195210150EA2007BD6DB /* ShellScript */ = { 2345 | isa = PBXShellScriptBuildPhase; 2346 | buildActionMask = 2147483647; 2347 | files = ( 2348 | ); 2349 | inputPaths = ( 2350 | ); 2351 | outputPaths = ( 2352 | ); 2353 | runOnlyForDeploymentPostprocessing = 0; 2354 | shellPath = /bin/sh; 2355 | shellScript = "mkdir -p \"$USER_LIBRARY_DIR/Application Support/OpenEmu/Cores\"\nrm -rf \"$USER_LIBRARY_DIR/Application Support/OpenEmu/Cores/$PROJECT_NAME.oecoreplugin\"{,.dSYM}\ncp -rf \"$BUILT_PRODUCTS_DIR/$PROJECT_NAME.oecoreplugin\"{,.dSYM} \"$USER_LIBRARY_DIR/Application Support/OpenEmu/Cores/\"\n"; 2356 | }; 2357 | /* End PBXShellScriptBuildPhase section */ 2358 | 2359 | /* Begin PBXSourcesBuildPhase section */ 2360 | 8D5B49B1048680CD000E48DA /* Sources */ = { 2361 | isa = PBXSourcesBuildPhase; 2362 | buildActionMask = 2147483647; 2363 | files = ( 2364 | 0167A56223B985A800F0B36E /* mbc.c in Sources */, 2365 | 0167A56D23B985E600F0B36E /* lzma.cpp in Sources */, 2366 | 0167A54A23B984DA00F0B36E /* dsp.cpp in Sources */, 2367 | 0167A54C23B984F600F0B36E /* ppu.cpp in Sources */, 2368 | 0167A54B23B984E000F0B36E /* ppu.cpp in Sources */, 2369 | 0167A54923B984D400F0B36E /* smp.cpp in Sources */, 2370 | 94D9257314CA9879008F697D /* BSNESGameCore.mm in Sources */, 2371 | 0167A56023B985A800F0B36E /* printer.c in Sources */, 2372 | 0167A55323B9856C00F0B36E /* wdc65816.cpp in Sources */, 2373 | 0167A55F23B985A800F0B36E /* sgb.c in Sources */, 2374 | 0167A54623B984BA00F0B36E /* cartridge.cpp in Sources */, 2375 | 0167A54723B984C300F0B36E /* memory.cpp in Sources */, 2376 | 0167A55623B9857C00F0B36E /* spc700.cpp in Sources */, 2377 | 0167A55E23B985A800F0B36E /* symbol_hash.c in Sources */, 2378 | 0167A56623B985A800F0B36E /* timing.c in Sources */, 2379 | 0167A56123B985A800F0B36E /* sm83_cpu.c in Sources */, 2380 | 0167A59523B985F000F0B36E /* emulator.cpp in Sources */, 2381 | 0167A55D23B985A800F0B36E /* random.c in Sources */, 2382 | 0167A55823B985A800F0B36E /* memory.c in Sources */, 2383 | 0167A59C23B9861000F0B36E /* libco.c in Sources */, 2384 | 0167A56523B985A800F0B36E /* rewind.c in Sources */, 2385 | 0167A55923B985A800F0B36E /* apu.c in Sources */, 2386 | 0167A55523B9857700F0B36E /* arm7tdmi.cpp in Sources */, 2387 | 0167A54323B984A300F0B36E /* interface.cpp in Sources */, 2388 | 0167A54423B984AF00F0B36E /* system.cpp in Sources */, 2389 | 0167A54823B984CC00F0B36E /* cpu.cpp in Sources */, 2390 | 0167A54523B984B600F0B36E /* controller.cpp in Sources */, 2391 | 0167A56323B985A800F0B36E /* save_state.c in Sources */, 2392 | 0167A55723B985A800F0B36E /* display.c in Sources */, 2393 | 0167A54E23B9850A00F0B36E /* coprocessor.cpp in Sources */, 2394 | 0167A56723B985A800F0B36E /* camera.c in Sources */, 2395 | 0167A55B23B985A800F0B36E /* joypad.c in Sources */, 2396 | 0167A54D23B9850400F0B36E /* expansion.cpp in Sources */, 2397 | 0167A54F23B9851000F0B36E /* slot.cpp in Sources */, 2398 | 0167A55A23B985A800F0B36E /* gb.c in Sources */, 2399 | ); 2400 | runOnlyForDeploymentPostprocessing = 0; 2401 | }; 2402 | /* End PBXSourcesBuildPhase section */ 2403 | 2404 | /* Begin PBXTargetDependency section */ 2405 | 8230C6A510AFBC9600412F24 /* PBXTargetDependency */ = { 2406 | isa = PBXTargetDependency; 2407 | target = 8D5B49AC048680CD000E48DA /* BSNES */; 2408 | targetProxy = 8230C6A410AFBC9600412F24 /* PBXContainerItemProxy */; 2409 | }; 2410 | 82B9195F10150EB3007BD6DB /* PBXTargetDependency */ = { 2411 | isa = PBXTargetDependency; 2412 | target = 8D5B49AC048680CD000E48DA /* BSNES */; 2413 | targetProxy = 82B9195E10150EB3007BD6DB /* PBXContainerItemProxy */; 2414 | }; 2415 | /* End PBXTargetDependency section */ 2416 | 2417 | /* Begin PBXVariantGroup section */ 2418 | 089C167DFE841241C02AAC07 /* InfoPlist.strings */ = { 2419 | isa = PBXVariantGroup; 2420 | children = ( 2421 | 013D75CB23BD147A00D74AD3 /* en */, 2422 | ); 2423 | name = InfoPlist.strings; 2424 | sourceTree = ""; 2425 | }; 2426 | /* End PBXVariantGroup section */ 2427 | 2428 | /* Begin XCBuildConfiguration section */ 2429 | 1DEB913B08733D840010E9CD /* Debug */ = { 2430 | isa = XCBuildConfiguration; 2431 | buildSettings = { 2432 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; 2433 | CLANG_ENABLE_OBJC_ARC = YES; 2434 | COMBINE_HIDPI_IMAGES = YES; 2435 | CURRENT_PROJECT_VERSION = 115; 2436 | GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; 2437 | GCC_UNROLL_LOOPS = YES; 2438 | GCC_WARN_UNUSED_VARIABLE = NO; 2439 | HEADER_SEARCH_PATHS = "\"$(PROJECT_DIR)/bsnes\""; 2440 | INFOPLIST_FILE = Info.plist; 2441 | INSTALL_PATH = "\"$(USER_LIBRARY_DIR)/Application Support/OpenEmu/Cores\""; 2442 | MARKETING_VERSION = 115; 2443 | OTHER_CFLAGS = ( 2444 | "-DGB_INTERNAL", 2445 | "-DDISABLE_DEBUGGER", 2446 | ); 2447 | PRODUCT_BUNDLE_IDENTIFIER = "org.openemu.${PRODUCT_NAME:identifier}"; 2448 | PRODUCT_NAME = BSNES; 2449 | SKIP_INSTALL = YES; 2450 | SYSTEM_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/bsnes/bsnes\""; 2451 | USER_HEADER_SEARCH_PATHS = "\"$(PROJECT_DIR)/bsnes/\""; 2452 | WRAPPER_EXTENSION = oecoreplugin; 2453 | }; 2454 | name = Debug; 2455 | }; 2456 | 1DEB913C08733D840010E9CD /* Release */ = { 2457 | isa = XCBuildConfiguration; 2458 | buildSettings = { 2459 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; 2460 | CLANG_ENABLE_OBJC_ARC = YES; 2461 | COMBINE_HIDPI_IMAGES = YES; 2462 | CURRENT_PROJECT_VERSION = 115; 2463 | GCC_OPTIMIZATION_LEVEL = fast; 2464 | GCC_UNROLL_LOOPS = YES; 2465 | GCC_WARN_UNUSED_VARIABLE = NO; 2466 | HEADER_SEARCH_PATHS = "\"$(PROJECT_DIR)/bsnes\""; 2467 | INFOPLIST_FILE = Info.plist; 2468 | INSTALL_PATH = "\"$(USER_LIBRARY_DIR)/Application Support/OpenEmu/Cores\""; 2469 | MARKETING_VERSION = 115; 2470 | OTHER_CFLAGS = ( 2471 | "-DGB_INTERNAL", 2472 | "-DDISABLE_DEBUGGER", 2473 | ); 2474 | PRODUCT_BUNDLE_IDENTIFIER = "org.openemu.${PRODUCT_NAME:identifier}"; 2475 | PRODUCT_NAME = BSNES; 2476 | SKIP_INSTALL = YES; 2477 | SYSTEM_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/bsnes/bsnes\""; 2478 | USER_HEADER_SEARCH_PATHS = "\"$(PROJECT_DIR)/bsnes/\""; 2479 | WRAPPER_EXTENSION = oecoreplugin; 2480 | }; 2481 | name = Release; 2482 | }; 2483 | 1DEB913F08733D840010E9CD /* Debug */ = { 2484 | isa = XCBuildConfiguration; 2485 | buildSettings = { 2486 | ALWAYS_SEARCH_USER_PATHS = NO; 2487 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 2488 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 2489 | CLANG_CXX_LIBRARY = "libc++"; 2490 | CLANG_ENABLE_MODULES = YES; 2491 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 2492 | CLANG_WARN_BOOL_CONVERSION = YES; 2493 | CLANG_WARN_COMMA = YES; 2494 | CLANG_WARN_CONSTANT_CONVERSION = YES; 2495 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 2496 | CLANG_WARN_EMPTY_BODY = YES; 2497 | CLANG_WARN_ENUM_CONVERSION = YES; 2498 | CLANG_WARN_INFINITE_RECURSION = YES; 2499 | CLANG_WARN_INT_CONVERSION = YES; 2500 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 2501 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 2502 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 2503 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 2504 | CLANG_WARN_STRICT_PROTOTYPES = YES; 2505 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 2506 | CLANG_WARN_UNREACHABLE_CODE = YES; 2507 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 2508 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 2509 | ENABLE_STRICT_OBJC_MSGSEND = YES; 2510 | ENABLE_TESTABILITY = YES; 2511 | GCC_C_LANGUAGE_STANDARD = gnu99; 2512 | GCC_INCREASE_PRECOMPILED_HEADER_SHARING = YES; 2513 | GCC_NO_COMMON_BLOCKS = YES; 2514 | GCC_OPTIMIZATION_LEVEL = 0; 2515 | GCC_PREPROCESSOR_DEFINITIONS = "DEBUG=1"; 2516 | GCC_SYMBOLS_PRIVATE_EXTERN = YES; 2517 | GCC_VERSION = ""; 2518 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 2519 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 2520 | GCC_WARN_UNDECLARED_SELECTOR = YES; 2521 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 2522 | GCC_WARN_UNUSED_FUNCTION = YES; 2523 | GCC_WARN_UNUSED_VARIABLE = YES; 2524 | MACOSX_DEPLOYMENT_TARGET = 10.11; 2525 | "MACOSX_DEPLOYMENT_TARGET[arch=arm64]" = 11.0; 2526 | ONLY_ACTIVE_ARCH = YES; 2527 | SDKROOT = macosx; 2528 | }; 2529 | name = Debug; 2530 | }; 2531 | 1DEB914008733D840010E9CD /* Release */ = { 2532 | isa = XCBuildConfiguration; 2533 | buildSettings = { 2534 | ALWAYS_SEARCH_USER_PATHS = NO; 2535 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 2536 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 2537 | CLANG_CXX_LIBRARY = "libc++"; 2538 | CLANG_ENABLE_MODULES = YES; 2539 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 2540 | CLANG_WARN_BOOL_CONVERSION = YES; 2541 | CLANG_WARN_COMMA = YES; 2542 | CLANG_WARN_CONSTANT_CONVERSION = YES; 2543 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 2544 | CLANG_WARN_EMPTY_BODY = YES; 2545 | CLANG_WARN_ENUM_CONVERSION = YES; 2546 | CLANG_WARN_INFINITE_RECURSION = YES; 2547 | CLANG_WARN_INT_CONVERSION = YES; 2548 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 2549 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 2550 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 2551 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 2552 | CLANG_WARN_STRICT_PROTOTYPES = YES; 2553 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 2554 | CLANG_WARN_UNREACHABLE_CODE = YES; 2555 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 2556 | DEAD_CODE_STRIPPING = YES; 2557 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 2558 | ENABLE_STRICT_OBJC_MSGSEND = YES; 2559 | GCC_C_LANGUAGE_STANDARD = gnu99; 2560 | GCC_INCREASE_PRECOMPILED_HEADER_SHARING = YES; 2561 | GCC_NO_COMMON_BLOCKS = YES; 2562 | GCC_SYMBOLS_PRIVATE_EXTERN = YES; 2563 | GCC_VERSION = ""; 2564 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 2565 | GCC_WARN_ABOUT_RETURN_TYPE = YES; 2566 | GCC_WARN_UNDECLARED_SELECTOR = YES; 2567 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 2568 | GCC_WARN_UNUSED_FUNCTION = YES; 2569 | GCC_WARN_UNUSED_VARIABLE = YES; 2570 | MACOSX_DEPLOYMENT_TARGET = 10.11; 2571 | "MACOSX_DEPLOYMENT_TARGET[arch=arm64]" = 11.0; 2572 | SDKROOT = macosx; 2573 | }; 2574 | name = Release; 2575 | }; 2576 | 8230C6A210AFBC9100412F24 /* Debug */ = { 2577 | isa = XCBuildConfiguration; 2578 | buildSettings = { 2579 | CLANG_ENABLE_OBJC_WEAK = YES; 2580 | COMBINE_HIDPI_IMAGES = YES; 2581 | INSTALL_PATH = "\"$(USER_LIBRARY_DIR)/Application Support/OpenEmu/Cores\""; 2582 | PRODUCT_NAME = Distribution; 2583 | SKIP_INSTALL = YES; 2584 | }; 2585 | name = Debug; 2586 | }; 2587 | 8230C6A310AFBC9100412F24 /* Release */ = { 2588 | isa = XCBuildConfiguration; 2589 | buildSettings = { 2590 | CLANG_ENABLE_OBJC_WEAK = YES; 2591 | COMBINE_HIDPI_IMAGES = YES; 2592 | INSTALL_PATH = "\"$(USER_LIBRARY_DIR)/Application Support/OpenEmu/Cores\""; 2593 | PRODUCT_NAME = Distribution; 2594 | SKIP_INSTALL = YES; 2595 | }; 2596 | name = Release; 2597 | }; 2598 | 82B9195410150EA2007BD6DB /* Debug */ = { 2599 | isa = XCBuildConfiguration; 2600 | buildSettings = { 2601 | CLANG_ENABLE_OBJC_WEAK = YES; 2602 | COMBINE_HIDPI_IMAGES = YES; 2603 | INSTALL_PATH = "\"$(USER_LIBRARY_DIR)/Application Support/OpenEmu/Cores\""; 2604 | PRODUCT_NAME = "Build & Install"; 2605 | SKIP_INSTALL = YES; 2606 | }; 2607 | name = Debug; 2608 | }; 2609 | 82B9195510150EA2007BD6DB /* Release */ = { 2610 | isa = XCBuildConfiguration; 2611 | buildSettings = { 2612 | CLANG_ENABLE_OBJC_WEAK = YES; 2613 | COMBINE_HIDPI_IMAGES = YES; 2614 | INSTALL_PATH = "\"$(USER_LIBRARY_DIR)/Application Support/OpenEmu/Cores\""; 2615 | PRODUCT_NAME = "Build & Install"; 2616 | SKIP_INSTALL = YES; 2617 | }; 2618 | name = Release; 2619 | }; 2620 | /* End XCBuildConfiguration section */ 2621 | 2622 | /* Begin XCConfigurationList section */ 2623 | 1DEB913A08733D840010E9CD /* Build configuration list for PBXNativeTarget "BSNES" */ = { 2624 | isa = XCConfigurationList; 2625 | buildConfigurations = ( 2626 | 1DEB913B08733D840010E9CD /* Debug */, 2627 | 1DEB913C08733D840010E9CD /* Release */, 2628 | ); 2629 | defaultConfigurationIsVisible = 0; 2630 | defaultConfigurationName = Release; 2631 | }; 2632 | 1DEB913E08733D840010E9CD /* Build configuration list for PBXProject "BSNES" */ = { 2633 | isa = XCConfigurationList; 2634 | buildConfigurations = ( 2635 | 1DEB913F08733D840010E9CD /* Debug */, 2636 | 1DEB914008733D840010E9CD /* Release */, 2637 | ); 2638 | defaultConfigurationIsVisible = 0; 2639 | defaultConfigurationName = Release; 2640 | }; 2641 | 8230C6AD10AFBCC700412F24 /* Build configuration list for PBXAggregateTarget "Distribution" */ = { 2642 | isa = XCConfigurationList; 2643 | buildConfigurations = ( 2644 | 8230C6A210AFBC9100412F24 /* Debug */, 2645 | 8230C6A310AFBC9100412F24 /* Release */, 2646 | ); 2647 | defaultConfigurationIsVisible = 0; 2648 | defaultConfigurationName = Release; 2649 | }; 2650 | 82B9195D10150EA4007BD6DB /* Build configuration list for PBXAggregateTarget "Build & Install BSNES" */ = { 2651 | isa = XCConfigurationList; 2652 | buildConfigurations = ( 2653 | 82B9195410150EA2007BD6DB /* Debug */, 2654 | 82B9195510150EA2007BD6DB /* Release */, 2655 | ); 2656 | defaultConfigurationIsVisible = 0; 2657 | defaultConfigurationName = Release; 2658 | }; 2659 | /* End XCConfigurationList section */ 2660 | }; 2661 | rootObject = 089C1669FE841209C02AAC07 /* Project object */; 2662 | } 2663 | -------------------------------------------------------------------------------- /BSNESGameCore.h: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2009, OpenEmu Team 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | * Redistributions of source code must retain the above copyright 7 | notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above copyright 9 | notice, this list of conditions and the following disclaimer in the 10 | documentation and/or other materials provided with the distribution. 11 | * Neither the name of the OpenEmu Team nor the 12 | names of its contributors may be used to endorse or promote products 13 | derived from this software without specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY OpenEmu Team ''AS IS'' AND ANY 16 | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL OpenEmu Team BE LIABLE FOR ANY 19 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 | */ 26 | 27 | #import 28 | #import "OESNESSystemResponderClient.h" 29 | #import 30 | 31 | OE_EXPORTED_CLASS 32 | @interface BSNESGameCore : OEGameCore { 33 | @public 34 | /* these ivars are accessed by the emulator interface object Program */ 35 | BOOL pad[2][OESNESButtonCount]; 36 | OEIntRect screenRect; 37 | uint32_t *videoBuffer; 38 | } 39 | 40 | @end 41 | -------------------------------------------------------------------------------- /BSNESGameCore.mm: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2012, OpenEmu Team 3 | 4 | 5 | Redistribution and use in source and binary forms, with or without 6 | modification, are permitted provided that the following conditions are met: 7 | * Redistributions of source code must retain the above copyright 8 | notice, this list of conditions and the following disclaimer. 9 | * Redistributions in binary form must reproduce the above copyright 10 | notice, this list of conditions and the following disclaimer in the 11 | documentation and/or other materials provided with the distribution. 12 | * Neither the name of the OpenEmu Team nor the 13 | names of its contributors may be used to endorse or promote products 14 | derived from this software without specific prior written permission. 15 | 16 | THIS SOFTWARE IS PROVIDED BY OpenEmu Team ''AS IS'' AND ANY 17 | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 18 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | DISCLAIMED. IN NO EVENT SHALL OpenEmu Team BE LIABLE FOR ANY 20 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 21 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 22 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 23 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 25 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | */ 27 | 28 | #import 29 | #import "BSNESGameCore.h" 30 | #import "OESNESSystemResponderClient.h" 31 | 32 | #define SYS_PARAM_H__BSD BSD 33 | #undef BSD 34 | 35 | #include "program.mm" 36 | 37 | 38 | /* 39 | * TODO 40 | * - Multitap support 41 | * - Mouse support 42 | */ 43 | 44 | 45 | @implementation BSNESGameCore { 46 | NSMutableSet *_activeCheats; 47 | NSMutableDictionary *_displayModes; 48 | } 49 | 50 | - (id)init 51 | { 52 | self = [super init]; 53 | emulator = new SuperFamicom::Interface; 54 | program = new Program(self); 55 | _activeCheats = [[NSMutableSet alloc] init]; 56 | _displayModes = [[NSMutableDictionary alloc] init]; 57 | screenRect = OEIntRectMake(0, 0, 256, 224); 58 | return self; 59 | } 60 | 61 | - (void)dealloc 62 | { 63 | delete emulator; 64 | delete program; 65 | } 66 | 67 | 68 | #pragma mark - Configuration & Cheats 69 | 70 | 71 | - (void)setDisplayModeInfo:(NSDictionary *)displayModeInfo 72 | { 73 | const struct { 74 | NSString *key; 75 | Class valueClass; 76 | id defaultValue; 77 | } defaultValues[] = { 78 | { @"bsnes/Video/BlurEmulation", [NSNumber class], @NO }, 79 | { @"bsnes/Video/ColorEmulation", [NSNumber class], @YES }, 80 | { @"bsnes/Hacks/PPU/NoSpriteLimit", [NSNumber class], @NO }, 81 | { @"bsnes/Hacks/PPU/Mode7/Scale", [NSString class], @"1" }}; 82 | 83 | /* validate the defaults to avoid crashes caused by users playing 84 | * around where they shouldn't */ 85 | _displayModes = [[NSMutableDictionary alloc] init]; 86 | int n = sizeof(defaultValues)/sizeof(defaultValues[0]); 87 | for (int i=0; i *)displayModeInfo 97 | { 98 | return [_displayModes copy]; 99 | } 100 | 101 | - (NSArray *> *)displayModes 102 | { 103 | #define OptionToggleable(n, k) \ 104 | OEDisplayMode_OptionToggleableWithState(n, k, _displayModes[k]) 105 | #define OptionWithValue(n, k, v) \ 106 | OEDisplayMode_OptionWithStateValue(n, k, @([_displayModes[k] isEqual:v]), v) 107 | return @[ 108 | OptionToggleable(@"Blur Emulation", @"bsnes/Video/BlurEmulation"), 109 | OptionToggleable(@"Color Emulation", @"bsnes/Video/ColorEmulation"), 110 | OEDisplayMode_SeparatorItem(), 111 | OEDisplayMode_Label(@"HD Mode 7"), 112 | OptionWithValue(@"240p (disabled)", @"bsnes/Hacks/PPU/Mode7/Scale", @"1"), 113 | OptionWithValue(@"480p", @"bsnes/Hacks/PPU/Mode7/Scale", @"2"), 114 | OptionWithValue(@"720p", @"bsnes/Hacks/PPU/Mode7/Scale", @"3"), 115 | OptionWithValue(@"960p", @"bsnes/Hacks/PPU/Mode7/Scale", @"4"), 116 | OptionWithValue(@"1200p", @"bsnes/Hacks/PPU/Mode7/Scale", @"5"), 117 | OptionWithValue(@"1440p", @"bsnes/Hacks/PPU/Mode7/Scale", @"6"), 118 | OptionWithValue(@"1680p", @"bsnes/Hacks/PPU/Mode7/Scale", @"7"), 119 | OptionWithValue(@"1920p", @"bsnes/Hacks/PPU/Mode7/Scale", @"8"), 120 | OEDisplayMode_SeparatorItem(), 121 | OptionToggleable(@"Disable Sprite Limit (requires reset)", @"bsnes/Hacks/PPU/NoSpriteLimit"), 122 | ]; 123 | #undef OptionToggleable 124 | #undef OptionWithValue 125 | } 126 | 127 | - (void)changeDisplayWithMode:(NSString *)displayMode 128 | { 129 | NSString *key; 130 | id currentVal; 131 | OEDisplayModeListGetPrefKeyValueFromModeName(self.displayModes, displayMode, &key, ¤tVal); 132 | if ([currentVal isKindOfClass:[NSNumber class]]) 133 | _displayModes[key] = @(![currentVal boolValue]); 134 | else 135 | _displayModes[key] = currentVal; 136 | [self loadConfiguration]; 137 | } 138 | 139 | - (void)loadConfiguration 140 | { 141 | [_displayModes enumerateKeysAndObjectsUsingBlock:^(NSString *key, id obj, BOOL *stop) { 142 | if ([key hasPrefix:@"bsnes/"]) { 143 | NSString *keyNoPrefix = [key substringFromIndex:@"bsnes/".length]; 144 | if ([obj isKindOfClass:[NSNumber class]]) 145 | emulator->configure(keyNoPrefix.UTF8String, (bool)[obj boolValue]); 146 | else if ([obj isKindOfClass:[NSString class]]) 147 | emulator->configure(keyNoPrefix.UTF8String, [obj UTF8String]); 148 | } 149 | }]; 150 | program->updateVideoPalette(); 151 | } 152 | 153 | - (void)setCheat:(NSString *)code setType:(NSString *)type setEnabled:(BOOL)enabled 154 | { 155 | if ([type isEqual:@"Action Replay"]) 156 | code = [code stringByReplacingOccurrencesOfString:@":" withString:@""]; 157 | NSArray *codes = [code componentsSeparatedByString:@"+"]; 158 | if (enabled) 159 | [_activeCheats addObjectsFromArray:codes]; 160 | else 161 | [_activeCheats minusSet:[NSSet setWithArray:codes]]; 162 | [self loadCheats]; 163 | } 164 | 165 | - (void)loadCheats 166 | { 167 | vector newCheatList; 168 | for (NSString *cheat in _activeCheats) { 169 | string decodedCheat = string(cheat.UTF8String).downcase(); 170 | if (OEBSNESCheatDecodeSNES(decodedCheat)) { 171 | NSLog(@"Successfully decoded cheat %@ to %s", cheat, decodedCheat.begin()); 172 | newCheatList.append(decodedCheat); 173 | } else { 174 | NSLog(@"Could not decode cheat %@", cheat); 175 | } 176 | } 177 | emulator->cheats(newCheatList); 178 | } 179 | 180 | 181 | #pragma mark - Load / Save 182 | 183 | 184 | - (BOOL)loadFileAtPath:(NSString *)path error:(NSError **)error 185 | { 186 | memset(pad, 0, sizeof(pad)); 187 | 188 | emulator->configure("Hacks/Hotfixes", true); 189 | emulator->configure("Hacks/PPU/Fast", true); 190 | [self loadConfiguration]; 191 | 192 | NSString *batterySavesDirectory = [self batterySavesDirectoryPath]; 193 | NSAssert(batterySavesDirectory.length > 0, @"no battery save directory!?"); 194 | [[NSFileManager defaultManager] createDirectoryAtPath:batterySavesDirectory withIntermediateDirectories:YES attributes:nil error:NULL]; 195 | 196 | const char *fullPath = path.fileSystemRepresentation; 197 | program->superFamicom.location = string(fullPath); 198 | program->base_name = string(fullPath); 199 | program->load(); 200 | 201 | if (program->failedLoadingAtLeastOneRequiredFile) { 202 | NSError *outErr; 203 | if (program->lastFailedBiosLoad) { 204 | NSString *missing = [NSString stringWithUTF8String:program->lastFailedBiosLoad.get().begin()]; 205 | outErr = [NSError 206 | errorWithDomain:OEGameCoreErrorDomain code:OEGameCoreCouldNotLoadROMError 207 | userInfo:@{ 208 | NSLocalizedDescriptionKey: @"Required chip dump file missing.", 209 | NSLocalizedRecoverySuggestionErrorKey: [NSString stringWithFormat: 210 | @"To run this game you need the following file:\n" 211 | @"\"%@\"\n\n" 212 | @"Obtain this file, drag and drop onto the game library " 213 | @"window and try again.", missing]}]; 214 | } 215 | if (error) 216 | *error = outErr; 217 | return NO; 218 | } 219 | 220 | emulator->connect(SuperFamicom::ID::Port::Controller1, SuperFamicom::ID::Device::Gamepad); 221 | emulator->connect(SuperFamicom::ID::Port::Controller2, SuperFamicom::ID::Device::Gamepad); 222 | [self loadCheats]; 223 | 224 | return YES; 225 | } 226 | 227 | - (NSData *)serializeStateWithError:(NSError *__autoreleasing *)outError 228 | { 229 | serializer s = emulator->serialize(); 230 | return [NSData dataWithBytes:s.data() length:s.size()]; 231 | } 232 | 233 | - (BOOL)deserializeState:(NSData *)state withError:(NSError *__autoreleasing *)outError 234 | { 235 | serializer s(static_cast(state.bytes), (uint)state.length); 236 | BOOL res = emulator->unserialize(s); 237 | if (!res && outError) 238 | *outError = [NSError 239 | errorWithDomain:OEGameCoreErrorDomain 240 | code:OEGameCoreCouldNotLoadStateError 241 | userInfo:@{ 242 | NSLocalizedDescriptionKey: @"The save state data could not be read.", 243 | NSLocalizedRecoverySuggestionErrorKey: @"When the BSNES core is updated, existing save states may stop working. This is normal and unavoidable.\n\nPlease use in-game saves as much as possible instead." 244 | }]; 245 | return res; 246 | } 247 | 248 | - (void)saveStateToFileAtPath:(NSString *)fileName completionHandler:(void (^)(BOOL, NSError *))block 249 | { 250 | NSData *stateData = [self serializeStateWithError:nil]; 251 | 252 | __autoreleasing NSError *error = nil; 253 | BOOL success = [stateData writeToFile:fileName options:NSDataWritingAtomic error:&error]; 254 | 255 | block(success, success ? nil : error); 256 | } 257 | 258 | - (void)loadStateFromFileAtPath:(NSString *)fileName completionHandler:(void (^)(BOOL, NSError *))block 259 | { 260 | __autoreleasing NSError *error = nil; 261 | NSData *data = [NSData dataWithContentsOfFile:fileName options:NSDataReadingMappedIfSafe | NSDataReadingUncached error:&error]; 262 | 263 | if(data == nil) { 264 | block(NO, error); 265 | return; 266 | } 267 | 268 | BOOL success = [self deserializeState:data withError:&error]; 269 | block(success, success ? nil : error); 270 | } 271 | 272 | 273 | #pragma mark - Input 274 | 275 | 276 | - (oneway void)didPushSNESButton:(OESNESButton)button forPlayer:(NSUInteger)player; 277 | { 278 | NSAssert(player > 0 && player <= 2, @"too many players"); 279 | pad[player-1][button] = YES; 280 | } 281 | 282 | - (oneway void)didReleaseSNESButton:(OESNESButton)button forPlayer:(NSUInteger)player; 283 | { 284 | NSAssert(player > 0 && player <= 2, @"too many players"); 285 | pad[player-1][button] = NO; 286 | } 287 | 288 | - (oneway void)leftMouseDownAtPoint:(OEIntPoint)point 289 | { 290 | } 291 | 292 | - (oneway void)leftMouseUp 293 | { 294 | } 295 | 296 | - (oneway void)mouseMovedAtPoint:(OEIntPoint)point 297 | { 298 | } 299 | 300 | - (oneway void)rightMouseDownAtPoint:(OEIntPoint)point 301 | { 302 | } 303 | 304 | - (oneway void)rightMouseUp 305 | { 306 | } 307 | 308 | 309 | #pragma mark - Execution 310 | 311 | 312 | - (void)executeFrame 313 | { 314 | emulator->run(); 315 | } 316 | 317 | - (void)resetEmulation 318 | { 319 | emulator->reset(); 320 | } 321 | 322 | - (void)stopEmulation 323 | { 324 | program->save(); 325 | [super stopEmulation]; 326 | } 327 | 328 | 329 | #pragma mark - Video 330 | 331 | 332 | - (const void *)getVideoBufferWithHint:(void *)hint 333 | { 334 | NSAssert(hint, @"no hint? bummer"); 335 | videoBuffer = (uint32_t *)hint; 336 | return hint; 337 | } 338 | 339 | - (OEIntRect)screenRect 340 | { 341 | return screenRect; 342 | } 343 | 344 | - (OEIntSize)bufferSize 345 | { 346 | return OEIntSizeMake(OE_VIDEO_BUFFER_SIZE_W, OE_VIDEO_BUFFER_SIZE_H); 347 | } 348 | 349 | - (OEIntSize)aspectSize 350 | { 351 | if (!(program->overscan)) { 352 | /* Overscan hiding removes the top and bottom 8 pixels. */ 353 | return OEIntSizeMake(256 * 8, 224 * 7); 354 | } 355 | return OEIntSizeMake(8, 7); 356 | } 357 | 358 | - (GLenum)pixelFormat 359 | { 360 | return GL_BGRA; 361 | } 362 | 363 | - (GLenum)pixelType 364 | { 365 | return GL_UNSIGNED_INT_8_8_8_8_REV; 366 | } 367 | 368 | - (GLenum)internalPixelFormat 369 | { 370 | return GL_RGB8; 371 | } 372 | 373 | - (NSTimeInterval)frameInterval 374 | { 375 | if (program->superFamicom.region == "NTSC") { 376 | return 21477272.0 / 357366.0; 377 | } 378 | return 21281370.0 / 425568.0; 379 | } 380 | 381 | 382 | #pragma mark - Audio 383 | 384 | 385 | - (double)audioSampleRate 386 | { 387 | return Emulator::audio.frequency(); 388 | } 389 | 390 | - (NSUInteger)channelCount 391 | { 392 | return Emulator::audio.channels(); 393 | } 394 | 395 | 396 | @end 397 | -------------------------------------------------------------------------------- /Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | bsnes 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | BNDL 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSPrincipalClass 24 | OEGameCoreController 25 | OEGameCoreClass 26 | BSNESGameCore 27 | OEGameCoreOptions 28 | 29 | openemu.system.snes 30 | 31 | OEGameCoreRequiresFiles 32 | 33 | OEGameCoreRewindBufferSeconds 34 | 120 35 | OEGameCoreRewindInterval 36 | 1 37 | OEGameCoreSupportsCheatCode 38 | 39 | OEGameCoreSupportsDisplayModeChange 40 | 41 | OEGameCoreSupportsRewinding 42 | 43 | OERequiredFiles 44 | 45 | 46 | Description 47 | DSP3 coprocessor 48 | MD5 49 | 484908D68405D44E2BE757B4E1E75D15 50 | Name 51 | dsp3.rom 52 | Optional 53 | 54 | Size 55 | 8192 56 | 57 | 58 | Description 59 | ST-0018 coprocessor 60 | MD5 61 | DAFAE0E0C71C924075811C595C61A30E 62 | Name 63 | st018.rom 64 | Optional 65 | 66 | Size 67 | 163840 68 | 69 | 70 | Description 71 | ST-0011 coprocessor 72 | MD5 73 | 5C209CE0283632B6574AD835BF862BEE 74 | Name 75 | st011.rom 76 | Optional 77 | 78 | Size 79 | 53248 80 | 81 | 82 | 83 | 84 | OEGameCorePlayerCount 85 | 2 86 | OEProjectURL 87 | https://byuu.org/bsnes 88 | OESystemIdentifiers 89 | 90 | openemu.system.snes 91 | 92 | SUEnableAutomaticChecks 93 | 1 94 | SUFeedURL 95 | https://raw.github.com/OpenEmu/OpenEmu-Update/master/bsnes_appcast.xml 96 | 97 | 98 | -------------------------------------------------------------------------------- /bsnes.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenEmu/BSNES-Core/c21062858b35a7a3434e956885faf4351fda9a51/bsnes.icns -------------------------------------------------------------------------------- /en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/OpenEmu/BSNES-Core/c21062858b35a7a3434e956885faf4351fda9a51/en.lproj/InfoPlist.strings -------------------------------------------------------------------------------- /program.mm: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | using namespace nall; 4 | 5 | #include 6 | #include 7 | #include 8 | 9 | /* This file is mostly lifted from bsnes/target-libretro/program.cpp, which 10 | * in turn was mostly lifted from bsnes/target-bsnes/program/program.cpp and 11 | * its plethora of includes. 12 | * It is a good idea to keep the common parts of this file in sync with its 13 | * target-libretro and target-bsnes counterparts when the core gets updated. */ 14 | 15 | 16 | #pragma mark - Globals 17 | 18 | 19 | /* The actual SFC emulator object. Communicates to the front-end (an instance 20 | * of Emulator::Platform) through the Emulator::platform global variable. 21 | * Owned by BSNESGameCore */ 22 | static Emulator::Interface *emulator; 23 | 24 | /* The current instance of Emulator::Platform 25 | * Owned by BSNESGameCore */ 26 | struct Program; 27 | static Program *program = nullptr; 28 | 29 | 30 | #define OE_MODE7_MAX_HIRES (8) 31 | #define OE_VIDEO_BUFFER_SIZE_W (512 * OE_MODE7_MAX_HIRES) 32 | #define OE_VIDEO_BUFFER_SIZE_H (480 * OE_MODE7_MAX_HIRES) 33 | 34 | 35 | #pragma mark - Platform Object 36 | 37 | struct Program : Emulator::Platform { 38 | Program(BSNESGameCore *oeCore); 39 | ~Program() {}; 40 | 41 | auto open(uint id, string name, vfs::file::mode mode, bool required) -> shared_pointer override; 42 | auto load(uint id, string name, string type, vector options = {}) -> Emulator::Platform::Load override; 43 | auto videoFrame(const uint16* data, uint pitch, uint width, uint height, uint scale) -> void override; 44 | auto audioFrame(const double* samples, uint channels) -> void override; 45 | auto inputPoll(uint port, uint device, uint input) -> int16 override; 46 | auto inputRumble(uint port, uint device, uint input, bool enable) -> void override; 47 | 48 | auto load() -> void; 49 | auto loadFile(string location) -> vector; 50 | auto loadSuperFamicom(string location) -> bool; 51 | 52 | auto save() -> void; 53 | 54 | auto openRomSuperFamicom(string name, vfs::file::mode mode) -> shared_pointer; 55 | auto loadSuperFamicomFirmware(string fwname) -> void; 56 | 57 | auto hackCompatibility() -> void; 58 | auto hackPatchMemory(vector& data) -> void; 59 | 60 | auto updateVideoPalette() -> void; 61 | 62 | __weak BSNESGameCore *oeCore; 63 | string base_name; 64 | 65 | bool overscan = false; 66 | 67 | maybe lastFailedBiosLoad; 68 | bool failedLoadingAtLeastOneRequiredFile; 69 | 70 | public: 71 | struct Game { 72 | explicit operator bool() const { return (bool)location; } 73 | 74 | string option; 75 | string location; 76 | string manifest; 77 | Markup::Node document; 78 | boolean patched; 79 | boolean verified; 80 | }; 81 | 82 | struct SuperFamicom : Game { 83 | string title; 84 | string region; 85 | vector program; 86 | vector data; 87 | vector expansion; 88 | vector firmware; 89 | } superFamicom; 90 | 91 | uint32_t palette[0x8000]; 92 | }; 93 | 94 | Program::Program(BSNESGameCore *oeCore) : oeCore(oeCore) 95 | { 96 | // tell the emulator that all event callbacks should be invoked on this object 97 | Emulator::platform = this; 98 | updateVideoPalette(); 99 | } 100 | 101 | auto Program::save() -> void 102 | { 103 | if(!emulator->loaded()) return; 104 | emulator->save(); 105 | } 106 | 107 | auto Program::open(uint id, string name, vfs::file::mode mode, bool required) -> shared_pointer 108 | { 109 | shared_pointer result; 110 | 111 | if ((name == "ipl.rom" || name == "boards.bml") && mode == vfs::file::mode::read) { 112 | NSString *nsname = [NSString stringWithUTF8String:name.begin()]; 113 | NSURL *url = [[NSBundle bundleForClass:[oeCore class]] URLForResource:nsname withExtension:nil]; 114 | return vfs::fs::file::open(url.fileSystemRepresentation, mode); 115 | } 116 | 117 | if (id == ::SuperFamicom::ID::SuperFamicom) { //Super Famicom 118 | if (name == "manifest.bml" && mode == vfs::file::mode::read) { 119 | result = vfs::memory::file::open(superFamicom.manifest.data(), superFamicom.manifest.size()); 120 | } else if (name == "program.rom" && mode == vfs::file::mode::read) { 121 | result = vfs::memory::file::open(superFamicom.program.data(), superFamicom.program.size()); 122 | } else if (name == "data.rom" && mode == vfs::file::mode::read) { 123 | result = vfs::memory::file::open(superFamicom.data.data(), superFamicom.data.size()); 124 | } else if (name == "expansion.rom" && mode == vfs::file::mode::read) { 125 | result = vfs::memory::file::open(superFamicom.expansion.data(), superFamicom.expansion.size()); 126 | } else { 127 | result = openRomSuperFamicom(name, mode); 128 | } 129 | } 130 | 131 | if (required && !result) { 132 | failedLoadingAtLeastOneRequiredFile = true; 133 | NSLog(@"Failed loading file required by BSNES: %s", name.begin()); 134 | } 135 | 136 | return result; 137 | } 138 | 139 | auto Program::load() -> void 140 | { 141 | failedLoadingAtLeastOneRequiredFile = false; 142 | lastFailedBiosLoad.reset(); 143 | 144 | emulator->unload(); 145 | emulator->load(); 146 | 147 | hackCompatibility(); 148 | 149 | emulator->power(); 150 | } 151 | 152 | auto Program::load(uint id, string name, string type, vector options) -> Emulator::Platform::Load 153 | { 154 | if (id == ::SuperFamicom::ID::SuperFamicom) 155 | { 156 | if (loadSuperFamicom(superFamicom.location)) 157 | { 158 | return {id, superFamicom.region}; 159 | } 160 | } 161 | return { id, options(0) }; 162 | } 163 | 164 | auto Program::videoFrame(const uint16* data, uint pitch, uint width, uint height, uint scale) -> void 165 | { 166 | BSNESGameCore *core = oeCore; 167 | uint32_t *outBuffer = core->videoBuffer; 168 | 169 | if (!overscan) { 170 | uint multiplier = height / 240; 171 | data += 8 * (pitch >> 1) * multiplier; 172 | height -= 16 * multiplier; 173 | } 174 | // avoid buffer overflows 175 | width = min(OE_VIDEO_BUFFER_SIZE_W, width); 176 | height = min(OE_VIDEO_BUFFER_SIZE_H, height); 177 | core->screenRect = OEIntRectMake(0, 0, width, height); 178 | 179 | uint yoffset = 0; 180 | for (uint y=0; y 0x7fff) 194 | v = 0x7fff; 195 | else if (v < -0x8000) 196 | v = -0x8000; 197 | return int16_t(floor(v + 0.5)); 198 | } 199 | 200 | auto Program::audioFrame(const double* samples, uint channels) -> void 201 | { 202 | int16_t data[2]; 203 | data[0] = d2i16(samples[0]); 204 | data[1] = d2i16(samples[1]); 205 | [[oeCore audioBufferAtIndex:0] write:data maxLength:sizeof(data)]; 206 | } 207 | 208 | auto Program::inputPoll(uint port, uint device, uint input) -> int16 209 | { 210 | if (device != ::SuperFamicom::ID::Device::Gamepad) 211 | return 0; 212 | BSNESGameCore *core = oeCore; 213 | 214 | /* see bsnes/sfc/interface/interface.cpp for the ordering */ 215 | const OESNESButton buttonMap[OESNESButtonCount] = { 216 | OESNESButtonUp, 217 | OESNESButtonDown, 218 | OESNESButtonLeft, 219 | OESNESButtonRight, 220 | OESNESButtonB, 221 | OESNESButtonA, 222 | OESNESButtonY, 223 | OESNESButtonX, 224 | OESNESButtonTriggerLeft, 225 | OESNESButtonTriggerRight, 226 | OESNESButtonSelect, 227 | OESNESButtonStart}; 228 | 229 | return core->pad[port][buttonMap[input]]; 230 | } 231 | 232 | auto Program::inputRumble(uint port, uint device, uint input, bool enable) -> void 233 | { 234 | } 235 | 236 | auto Program::openRomSuperFamicom(string name, vfs::file::mode mode) -> shared_pointer 237 | { 238 | if(name == "program.rom" && mode == vfs::file::mode::read) { 239 | return vfs::memory::file::open(superFamicom.program.data(), superFamicom.program.size()); 240 | } 241 | 242 | if(name == "data.rom" && mode == vfs::file::mode::read) { 243 | return vfs::memory::file::open(superFamicom.data.data(), superFamicom.data.size()); 244 | } 245 | 246 | if(name == "expansion.rom" && mode == vfs::file::mode::read) { 247 | return vfs::memory::file::open(superFamicom.expansion.data(), superFamicom.expansion.size()); 248 | } 249 | 250 | if(name == "msu1/data.rom") 251 | { 252 | return vfs::fs::file::open({Location::notsuffix(superFamicom.location), ".msu"}, mode); 253 | } 254 | 255 | if(name.match("msu1/track*.pcm")) 256 | { 257 | name.trimLeft("msu1/track", 1L); 258 | return vfs::fs::file::open({Location::notsuffix(superFamicom.location), name}, mode); 259 | } 260 | 261 | /* DSP3.rom */ 262 | if ((name == "upd7725.program.rom" || name == "upd7725.data.rom") && !superFamicom.firmware.size()) { 263 | if(auto memory = superFamicom.document["game/board/memory(type=ROM,content=Program,architecture=uPD7725)"]) { 264 | loadSuperFamicomFirmware(memory["identifier"].text().downcase()); 265 | } 266 | } 267 | if(name == "upd7725.program.rom" && mode == vfs::file::mode::read) { 268 | if(superFamicom.firmware.size() == 0x2000) { 269 | return vfs::memory::file::open(&superFamicom.firmware.data()[0x0000], 0x1800); 270 | } 271 | } 272 | if(name == "upd7725.data.rom" && mode == vfs::file::mode::read) { 273 | if(superFamicom.firmware.size() == 0x2000) { 274 | return vfs::memory::file::open(&superFamicom.firmware.data()[0x1800], 0x0800); 275 | } 276 | } 277 | 278 | /* ST018.rom */ 279 | if ((name == "arm6.program.rom" || name == "arm6.data.rom") && !superFamicom.firmware.size()) { 280 | if(auto memory = superFamicom.document["game/board/memory(type=ROM,content=Program,architecture=ARM6)"]) { 281 | loadSuperFamicomFirmware(memory["identifier"].text().downcase()); 282 | } 283 | } 284 | if(name == "arm6.program.rom" && mode == vfs::file::mode::read) { 285 | if(superFamicom.firmware.size() == 0x28000) { 286 | return vfs::memory::file::open(&superFamicom.firmware.data()[0x00000], 0x20000); 287 | } 288 | } 289 | if(name == "arm6.data.rom" && mode == vfs::file::mode::read) { 290 | if(superFamicom.firmware.size() == 0x28000) { 291 | return vfs::memory::file::open(&superFamicom.firmware.data()[0x20000], 0x08000); 292 | } 293 | } 294 | 295 | /* ST011.rom */ 296 | if ((name == "upd96050.program.rom" || name == "upd96050.data.rom") && !superFamicom.firmware.size()) { 297 | if(auto memory = superFamicom.document["game/board/memory(type=ROM,content=Program,architecture=uPD96050)"]) { 298 | loadSuperFamicomFirmware(memory["identifier"].text().downcase()); 299 | } 300 | } 301 | if(name == "upd96050.program.rom" && mode == vfs::file::mode::read) { 302 | if(superFamicom.firmware.size() == 0xd000) { 303 | return vfs::memory::file::open(&superFamicom.firmware.data()[0x0000], 0xc000); 304 | } 305 | } 306 | if(name == "upd96050.data.rom" && mode == vfs::file::mode::read) { 307 | if(superFamicom.firmware.size() == 0xd000) { 308 | return vfs::memory::file::open(&superFamicom.firmware.data()[0xc000], 0x1000); 309 | } 310 | } 311 | 312 | if(name == "save.ram") { 313 | NSURL *gameFn = [NSURL fileURLWithFileSystemRepresentation:base_name.begin() isDirectory:NO relativeToURL:nil]; 314 | NSString *gameBasename = [gameFn lastPathComponent]; 315 | NSString *gameBasenameNoExt = [gameBasename stringByDeletingPathExtension]; 316 | NSURL *batterySavesDir = [NSURL fileURLWithPath:oeCore.batterySavesDirectoryPath]; 317 | NSURL *savePath = [batterySavesDir URLByAppendingPathComponent:[gameBasenameNoExt stringByAppendingPathExtension:@"srm"]]; 318 | 319 | if (!nall::file::exists(savePath.fileSystemRepresentation)) { 320 | /* attempt importing an old save file from the Higan core */ 321 | NSURL *higanBattSaveDir = [NSURL fileURLWithPath:@"../../Higan/Super Famicom/" relativeToURL:batterySavesDir]; 322 | NSURL *higanBundleDir = [higanBattSaveDir URLByAppendingPathComponent:gameBasename isDirectory:YES]; 323 | NSURL *higanSavePath = [higanBundleDir URLByAppendingPathComponent:@"save.ram"]; 324 | if (nall::file::copy(higanSavePath.fileSystemRepresentation, savePath.fileSystemRepresentation)) { 325 | NSLog(@"Imported Higan save.ram file %@", higanSavePath.path); 326 | } else { 327 | NSLog(@"No existing save.ram file found"); 328 | } 329 | } else { 330 | NSLog(@"Opening save.ram file %@", savePath.path); 331 | } 332 | 333 | return vfs::fs::file::open(savePath.fileSystemRepresentation, mode); 334 | } 335 | 336 | return {}; 337 | } 338 | 339 | auto Program::loadSuperFamicomFirmware(string fwname) -> void 340 | { 341 | string biosfn = string(fwname).append(".rom"); 342 | string path = oeCore.biosDirectoryPath.fileSystemRepresentation; 343 | path.append("/", biosfn); 344 | NSLog(@"Attempting to load BIOS file %s", path.begin()); 345 | superFamicom.firmware = file::read(path); 346 | if (superFamicom.firmware.size() == 0) 347 | lastFailedBiosLoad = biosfn; 348 | } 349 | 350 | auto Program::loadFile(string location) -> vector 351 | { 352 | return file::read(location); 353 | } 354 | 355 | auto Program::loadSuperFamicom(string location) -> bool 356 | { 357 | string manifest; 358 | vector rom; 359 | rom = loadFile(location); 360 | 361 | if(rom.size() < 0x8000) return false; 362 | 363 | //assume ROM and IPS agree on whether a copier header is present 364 | //superFamicom.patched = applyPatchIPS(rom, location); 365 | if((rom.size() & 0x7fff) == 512) { 366 | //remove copier header 367 | memory::move(&rom[0], &rom[512], (uint)(rom.size() - 512)); 368 | rom.resize(rom.size() - 512); 369 | } 370 | 371 | auto heuristics = Heuristics::SuperFamicom(rom, location); 372 | auto sha256 = Hash::SHA256(rom).digest(); 373 | superFamicom.title = heuristics.title(); 374 | superFamicom.region = heuristics.videoRegion(); 375 | NSURL *dburl = [[NSBundle bundleForClass:[oeCore class]] URLForResource:@"Super Famicom" withExtension:@"bml"]; 376 | if(auto document = BML::unserialize(string::read(dburl.fileSystemRepresentation))) { 377 | if(auto game = document[{"game(sha256=", sha256, ")"}]) { 378 | manifest = BML::serialize(game); 379 | //the internal ROM header title is not present in the database, but is needed for internal core overrides 380 | manifest.append(" title: ", superFamicom.title, "\n"); 381 | superFamicom.verified = true; 382 | NSLog(@"The game being loaded (sha256=%s, title=%s) is VERIFIED", sha256.begin(), superFamicom.title.begin()); 383 | } else { 384 | NSLog(@"The game being loaded (sha256=%s, title=%s) is NOT VERIFIED", sha256.begin(), superFamicom.title.begin()); 385 | } 386 | } 387 | superFamicom.manifest = manifest ? manifest : heuristics.manifest(); 388 | hackPatchMemory(rom); 389 | superFamicom.document = BML::unserialize(superFamicom.manifest); 390 | superFamicom.location = location; 391 | 392 | NSLog(@"Region of game: %s", superFamicom.region.begin()); 393 | 394 | uint offset = 0; 395 | if(auto size = heuristics.programRomSize()) { 396 | superFamicom.program.resize(size); 397 | memory::copy(&superFamicom.program[0], &rom[offset], size); 398 | offset += size; 399 | } 400 | if(auto size = heuristics.dataRomSize()) { 401 | superFamicom.data.resize(size); 402 | memory::copy(&superFamicom.data[0], &rom[offset], size); 403 | offset += size; 404 | } 405 | if(auto size = heuristics.expansionRomSize()) { 406 | superFamicom.expansion.resize(size); 407 | memory::copy(&superFamicom.expansion[0], &rom[offset], size); 408 | offset += size; 409 | } 410 | if(auto size = heuristics.firmwareRomSize()) { 411 | superFamicom.firmware.resize(size); 412 | memory::copy(&superFamicom.firmware[0], &rom[offset], size); 413 | offset += size; 414 | } 415 | return true; 416 | } 417 | 418 | // Keep in sync with bsnes/target-bsnes/program/hacks.cpp 419 | auto Program::hackCompatibility() -> void 420 | { 421 | string entropy = ::SuperFamicom::configuration.hacks.entropy; 422 | bool fastJoypadPolling = false; 423 | bool fastPPU = ::SuperFamicom::configuration.hacks.ppu.fast; 424 | bool fastPPUNoSpriteLimit = ::SuperFamicom::configuration.hacks.ppu.noSpriteLimit; 425 | bool fastDSP = ::SuperFamicom::configuration.hacks.dsp.fast; 426 | bool coprocessorDelayedSync = ::SuperFamicom::configuration.hacks.coprocessor.delayedSync; 427 | uint renderCycle = 512; 428 | 429 | auto title = superFamicom.title; 430 | auto region = superFamicom.region; 431 | 432 | //sometimes menu options are skipped over in the main menu with cycle-based joypad polling 433 | if(title == "Arcades Greatest Hits") fastJoypadPolling = true; 434 | 435 | //the start button doesn't work in this game with cycle-based joypad polling 436 | if(title == "TAIKYOKU-IGO Goliath") fastJoypadPolling = true; 437 | 438 | //holding up or down on the menu quickly cycles through options instead of stopping after each button press 439 | if(title == "WORLD MASTERS GOLF") fastJoypadPolling = true; 440 | 441 | //relies on mid-scanline rendering techniques 442 | if(title == "AIR STRIKE PATROL" || title == "DESERT FIGHTER") fastPPU = false; 443 | 444 | //the dialogue text is blurry due to an issue in the scanline-based renderer's color math support 445 | if(title == "マーヴェラス") fastPPU = false; 446 | 447 | //stage 2 uses pseudo-hires in a way that's not compatible with the scanline-based renderer 448 | if(title == "SFC クレヨンシンチャン") fastPPU = false; 449 | 450 | //title screen game select (after choosing a game) changes OAM tiledata address mid-frame 451 | //this is only supported by the cycle-based PPU renderer 452 | if(title == "Winter olympics") fastPPU = false; 453 | 454 | //title screen shows remnants of the flag after choosing a language with the scanline-based renderer 455 | if(title == "WORLD CUP STRIKER") fastPPU = false; 456 | 457 | //relies on cycle-accurate writes to the echo buffer 458 | if(title == "KOUSHIEN_2") fastDSP = false; 459 | 460 | //will hang immediately 461 | if(title == "RENDERING RANGER R2") fastDSP = false; 462 | 463 | //will hang sometimes in the "Bach in Time" stage 464 | if(title == "BUBSY II" && region == "PAL") fastDSP = false; 465 | 466 | //fixes an errant scanline on the title screen due to writing to PPU registers too late 467 | if(title == "ADVENTURES OF FRANKEN" && region == "PAL") renderCycle = 32; 468 | 469 | //fixes an errant scanline on the title screen due to writing to PPU registers too late 470 | if(title == "FIREPOWER 2000" || title == "SUPER SWIV") renderCycle = 32; 471 | 472 | //fixes an errant scanline on the title screen due to writing to PPU registers too late 473 | if(title == "NHL '94" || title == "NHL PROHOCKEY'94") renderCycle = 32; 474 | 475 | //fixes an errant scanline on the title screen due to writing to PPU registers too late 476 | if(title == "Sugoro Quest++") renderCycle = 128; 477 | 478 | if(::SuperFamicom::configuration.hacks.hotfixes) { 479 | //this game transfers uninitialized memory into video RAM: this can cause a row of invalid tiles 480 | //to appear in the background of stage 12. this one is a bug in the original game, so only enable 481 | //it if the hotfixes option has been enabled. 482 | if(title == "The Hurricanes") entropy = "None"; 483 | 484 | //Frisky Tom attract sequence sometimes hangs when WRAM is initialized to pseudo-random patterns 485 | if(title == "ニチブツ・アーケード・クラシックス") entropy = "None"; 486 | } 487 | 488 | emulator->configure("Hacks/Entropy", entropy); 489 | emulator->configure("Hacks/CPU/FastJoypadPolling", fastJoypadPolling); 490 | emulator->configure("Hacks/PPU/Fast", fastPPU); 491 | emulator->configure("Hacks/PPU/NoSpriteLimit", fastPPUNoSpriteLimit); 492 | emulator->configure("Hacks/PPU/RenderCycle", renderCycle); 493 | emulator->configure("Hacks/DSP/Fast", fastDSP); 494 | emulator->configure("Hacks/Coprocessor/DelayedSync", coprocessorDelayedSync); 495 | } 496 | 497 | // Keep in sync with bsnes/target-bsnes/program/hacks.cpp 498 | auto Program::hackPatchMemory(vector& data) -> void 499 | { 500 | auto title = superFamicom.title; 501 | 502 | if(title == "Satellaview BS-X" && data.size() >= 0x100000) { 503 | //BS-X: Sore wa Namae o Nusumareta Machi no Monogatari (JPN) (1.1) 504 | //disable limited play check for BS Memory flash cartridges 505 | //benefit: allow locked out BS Memory flash games to play without manual header patching 506 | //detriment: BS Memory ROM cartridges will cause the game to hang in the load menu 507 | if(data[0x4a9b] == 0x10) data[0x4a9b] = 0x80; 508 | if(data[0x4d6d] == 0x10) data[0x4d6d] = 0x80; 509 | if(data[0x4ded] == 0x10) data[0x4ded] = 0x80; 510 | if(data[0x4e9a] == 0x10) data[0x4e9a] = 0x80; 511 | } 512 | } 513 | 514 | auto Program::updateVideoPalette() -> void 515 | { 516 | static const uint8 gammaRamp_colorEmulation[32] = { 517 | 0x00, 0x01, 0x03, 0x06, 0x0a, 0x0f, 0x15, 0x1c, 518 | 0x24, 0x2d, 0x37, 0x42, 0x4e, 0x5b, 0x69, 0x78, 519 | 0x88, 0x90, 0x98, 0xa0, 0xa8, 0xb0, 0xb8, 0xc0, 520 | 0xc8, 0xd0, 0xd8, 0xe0, 0xe8, 0xf0, 0xf8, 0xff, 521 | }; 522 | static const uint8 gammaRamp_linear[32] = { 523 | 0x00, 0x08, 0x10, 0x18, 0x21, 0x29, 0x31, 0x39, 524 | 0x42, 0x4a, 0x52, 0x5a, 0x63, 0x6b, 0x73, 0x7b, 525 | 0x84, 0x8c, 0x94, 0x9c, 0xa5, 0xad, 0xb5, 0xbd, 526 | 0xc6, 0xce, 0xd6, 0xde, 0xe7, 0xef, 0xf7, 0xff, 527 | }; 528 | const uint8 *gammaRamp = gammaRamp_linear; 529 | if (::SuperFamicom::configuration.video.colorEmulation) 530 | gammaRamp = gammaRamp_colorEmulation; 531 | 532 | for (uint16_t color = 0; color < 0x8000; color++) { 533 | uint16 r = (color >> 0) & 31; 534 | uint16 g = (color >> 5) & 31; 535 | uint16 b = (color >> 10) & 31; 536 | palette[color] = 537 | ((uint32_t)gammaRamp[r]) + 538 | (((uint32_t)gammaRamp[g]) << 8) + 539 | (((uint32_t)gammaRamp[b]) << 16); 540 | } 541 | } 542 | 543 | 544 | #pragma mark - Utility Functions 545 | 546 | 547 | // The following function is copy-pasted from 548 | // bsnes/target-bsnes/cheat-editor.cpp 549 | // (its original name was CheatEditor::decodeSNES) 550 | 551 | auto OEBSNESCheatDecodeSNES(string& code) -> bool 552 | { 553 | //Game Genie 554 | if(code.size() == 9 && code[4] == '-') { 555 | //strip '-' 556 | code = {code.slice(0, 4), code.slice(5, 4)}; 557 | //validate 558 | for(uint n : code) { 559 | if(n >= '0' && n <= '9') continue; 560 | if(n >= 'a' && n <= 'f') continue; 561 | return false; 562 | } 563 | //decode 564 | code.transform("df4709156bc8a23e", "0123456789abcdef"); 565 | uint32_t r = toHex(code); 566 | //abcd efgh ijkl mnop qrst uvwx 567 | //ijkl qrst opab cduv wxef ghmn 568 | uint address = 569 | (!!(r & 0x002000) << 23) | (!!(r & 0x001000) << 22) 570 | | (!!(r & 0x000800) << 21) | (!!(r & 0x000400) << 20) 571 | | (!!(r & 0x000020) << 19) | (!!(r & 0x000010) << 18) 572 | | (!!(r & 0x000008) << 17) | (!!(r & 0x000004) << 16) 573 | | (!!(r & 0x800000) << 15) | (!!(r & 0x400000) << 14) 574 | | (!!(r & 0x200000) << 13) | (!!(r & 0x100000) << 12) 575 | | (!!(r & 0x000002) << 11) | (!!(r & 0x000001) << 10) 576 | | (!!(r & 0x008000) << 9) | (!!(r & 0x004000) << 8) 577 | | (!!(r & 0x080000) << 7) | (!!(r & 0x040000) << 6) 578 | | (!!(r & 0x020000) << 5) | (!!(r & 0x010000) << 4) 579 | | (!!(r & 0x000200) << 3) | (!!(r & 0x000100) << 2) 580 | | (!!(r & 0x000080) << 1) | (!!(r & 0x000040) << 0); 581 | uint data = r >> 24; 582 | code = {hex(address, 6L), "=", hex(data, 2L)}; 583 | return true; 584 | } 585 | 586 | //Pro Action Replay 587 | if(code.size() == 8) { 588 | //validate 589 | for(uint n : code) { 590 | if(n >= '0' && n <= '9') continue; 591 | if(n >= 'a' && n <= 'f') continue; 592 | return false; 593 | } 594 | //decode 595 | uint32_t r = toHex(code); 596 | uint address = r >> 8; 597 | uint data = r & 0xff; 598 | code = {hex(address, 6L), "=", hex(data, 2L)}; 599 | return true; 600 | } 601 | 602 | //higan: address=data 603 | if(code.size() == 9 && code[6] == '=') { 604 | string nibbles = {code.slice(0, 6), code.slice(7, 2)}; 605 | //validate 606 | for(uint n : nibbles) { 607 | if(n >= '0' && n <= '9') continue; 608 | if(n >= 'a' && n <= 'f') continue; 609 | return false; 610 | } 611 | //already in decoded form 612 | return true; 613 | } 614 | 615 | //higan: address=compare?data 616 | if(code.size() == 12 && code[6] == '=' && code[9] == '?') { 617 | string nibbles = {code.slice(0, 6), code.slice(7, 2), code.slice(10, 2)}; 618 | //validate 619 | for(uint n : nibbles) { 620 | if(n >= '0' && n <= '9') continue; 621 | if(n >= 'a' && n <= 'f') continue; 622 | return false; 623 | } 624 | //already in decoded form 625 | return true; 626 | } 627 | 628 | //unrecognized code format 629 | return false; 630 | } 631 | -------------------------------------------------------------------------------- /version.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildVersion 6 | 3 7 | CFBundleVersion 8 | 1.0 9 | ProductBuildVersion 10 | 9M2729 11 | ProjectName 12 | DevToolsWizardTemplates 13 | SourceVersion 14 | 11600000 15 | 16 | 17 | --------------------------------------------------------------------------------