diff --git a/desmume/src/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj b/desmume/src/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj index 38c796fc4..cffb13236 100644 --- a/desmume/src/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj +++ b/desmume/src/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj @@ -52,6 +52,50 @@ AB0F29C714BE7213009ABC6F /* Icon_RotateCW_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A314BE7213009ABC6F /* Icon_RotateCW_420x420.png */; }; AB0F29C814BE7213009ABC6F /* Icon_ShowHUD_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A414BE7213009ABC6F /* Icon_ShowHUD_420x420.png */; }; AB0F29C914BE7213009ABC6F /* Icon_Speaker_420x420.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0F29A514BE7213009ABC6F /* Icon_Speaker_420x420.png */; }; + AB279D5916A4E6DE00ECC692 /* AAFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D4E16A4E6DE00ECC692 /* AAFilter.cpp */; }; + AB279D5A16A4E6DE00ECC692 /* BPMDetect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D4F16A4E6DE00ECC692 /* BPMDetect.cpp */; }; + AB279D5B16A4E6DE00ECC692 /* cpu_detect_x86.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5016A4E6DE00ECC692 /* cpu_detect_x86.cpp */; }; + AB279D5C16A4E6DE00ECC692 /* FIFOSampleBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5116A4E6DE00ECC692 /* FIFOSampleBuffer.cpp */; }; + AB279D5D16A4E6DE00ECC692 /* FIRFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5216A4E6DE00ECC692 /* FIRFilter.cpp */; }; + AB279D5E16A4E6DE00ECC692 /* mmx_optimized.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5316A4E6DE00ECC692 /* mmx_optimized.cpp */; }; + AB279D5F16A4E6DE00ECC692 /* PeakFinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5416A4E6DE00ECC692 /* PeakFinder.cpp */; }; + AB279D6016A4E6DE00ECC692 /* RateTransposer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5516A4E6DE00ECC692 /* RateTransposer.cpp */; }; + AB279D6116A4E6DE00ECC692 /* SoundTouch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5616A4E6DE00ECC692 /* SoundTouch.cpp */; }; + AB279D6216A4E6DE00ECC692 /* sse_optimized.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5716A4E6DE00ECC692 /* sse_optimized.cpp */; }; + AB279D6316A4E6DE00ECC692 /* TDStretch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5816A4E6DE00ECC692 /* TDStretch.cpp */; }; + AB279D6416A4E6DE00ECC692 /* AAFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D4E16A4E6DE00ECC692 /* AAFilter.cpp */; }; + AB279D6516A4E6DE00ECC692 /* BPMDetect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D4F16A4E6DE00ECC692 /* BPMDetect.cpp */; }; + AB279D6616A4E6DE00ECC692 /* cpu_detect_x86.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5016A4E6DE00ECC692 /* cpu_detect_x86.cpp */; }; + AB279D6716A4E6DE00ECC692 /* FIFOSampleBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5116A4E6DE00ECC692 /* FIFOSampleBuffer.cpp */; }; + AB279D6816A4E6DE00ECC692 /* FIRFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5216A4E6DE00ECC692 /* FIRFilter.cpp */; }; + AB279D6916A4E6DE00ECC692 /* mmx_optimized.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5316A4E6DE00ECC692 /* mmx_optimized.cpp */; }; + AB279D6A16A4E6DE00ECC692 /* PeakFinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5416A4E6DE00ECC692 /* PeakFinder.cpp */; }; + AB279D6B16A4E6DE00ECC692 /* RateTransposer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5516A4E6DE00ECC692 /* RateTransposer.cpp */; }; + AB279D6C16A4E6DE00ECC692 /* SoundTouch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5616A4E6DE00ECC692 /* SoundTouch.cpp */; }; + AB279D6D16A4E6DE00ECC692 /* sse_optimized.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5716A4E6DE00ECC692 /* sse_optimized.cpp */; }; + AB279D6E16A4E6DE00ECC692 /* TDStretch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5816A4E6DE00ECC692 /* TDStretch.cpp */; }; + AB279D6F16A4E6DE00ECC692 /* AAFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D4E16A4E6DE00ECC692 /* AAFilter.cpp */; }; + AB279D7016A4E6DE00ECC692 /* BPMDetect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D4F16A4E6DE00ECC692 /* BPMDetect.cpp */; }; + AB279D7116A4E6DE00ECC692 /* cpu_detect_x86.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5016A4E6DE00ECC692 /* cpu_detect_x86.cpp */; }; + AB279D7216A4E6DE00ECC692 /* FIFOSampleBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5116A4E6DE00ECC692 /* FIFOSampleBuffer.cpp */; }; + AB279D7316A4E6DE00ECC692 /* FIRFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5216A4E6DE00ECC692 /* FIRFilter.cpp */; }; + AB279D7416A4E6DE00ECC692 /* mmx_optimized.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5316A4E6DE00ECC692 /* mmx_optimized.cpp */; }; + AB279D7516A4E6DE00ECC692 /* PeakFinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5416A4E6DE00ECC692 /* PeakFinder.cpp */; }; + AB279D7616A4E6DE00ECC692 /* RateTransposer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5516A4E6DE00ECC692 /* RateTransposer.cpp */; }; + AB279D7716A4E6DE00ECC692 /* SoundTouch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5616A4E6DE00ECC692 /* SoundTouch.cpp */; }; + AB279D7816A4E6DE00ECC692 /* sse_optimized.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5716A4E6DE00ECC692 /* sse_optimized.cpp */; }; + AB279D7916A4E6DE00ECC692 /* TDStretch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5816A4E6DE00ECC692 /* TDStretch.cpp */; }; + AB279D7A16A4E6DE00ECC692 /* AAFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D4E16A4E6DE00ECC692 /* AAFilter.cpp */; }; + AB279D7B16A4E6DE00ECC692 /* BPMDetect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D4F16A4E6DE00ECC692 /* BPMDetect.cpp */; }; + AB279D7C16A4E6DE00ECC692 /* cpu_detect_x86.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5016A4E6DE00ECC692 /* cpu_detect_x86.cpp */; }; + AB279D7D16A4E6DE00ECC692 /* FIFOSampleBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5116A4E6DE00ECC692 /* FIFOSampleBuffer.cpp */; }; + AB279D7E16A4E6DE00ECC692 /* FIRFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5216A4E6DE00ECC692 /* FIRFilter.cpp */; }; + AB279D7F16A4E6DE00ECC692 /* mmx_optimized.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5316A4E6DE00ECC692 /* mmx_optimized.cpp */; }; + AB279D8016A4E6DE00ECC692 /* PeakFinder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5416A4E6DE00ECC692 /* PeakFinder.cpp */; }; + AB279D8116A4E6DE00ECC692 /* RateTransposer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5516A4E6DE00ECC692 /* RateTransposer.cpp */; }; + AB279D8216A4E6DE00ECC692 /* SoundTouch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5616A4E6DE00ECC692 /* SoundTouch.cpp */; }; + AB279D8316A4E6DE00ECC692 /* sse_optimized.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5716A4E6DE00ECC692 /* sse_optimized.cpp */; }; + AB279D8416A4E6DE00ECC692 /* TDStretch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB279D5816A4E6DE00ECC692 /* TDStretch.cpp */; }; AB2F3B7D15CF9C6000858373 /* KeyNames.plist in Resources */ = {isa = PBXBuildFile; fileRef = AB02475B13886BF300E9F9AB /* KeyNames.plist */; }; AB2F3B7E15CF9C6000858373 /* DefaultKeyMappings.plist in Resources */ = {isa = PBXBuildFile; fileRef = ABC719E1138CB25E002827A9 /* DefaultKeyMappings.plist */; }; AB2F3B7F15CF9C6000858373 /* DefaultUserPrefs.plist in Resources */ = {isa = PBXBuildFile; fileRef = ABBC0F8C1394B1AA0028B6BD /* DefaultUserPrefs.plist */; }; @@ -124,7 +168,6 @@ AB2F3BC215CF9C6000858373 /* README.MAC in Resources */ = {isa = PBXBuildFile; fileRef = AB3ACC3D14C24D5400D7D192 /* README.MAC */; }; AB2F3BC315CF9C6000858373 /* AppIcon_FirmwareConfig.icns in Resources */ = {isa = PBXBuildFile; fileRef = AB75226D14C7BB51009B97B3 /* AppIcon_FirmwareConfig.icns */; }; AB2F3BC515CF9C6000858373 /* ConvertUTF.c in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF1D1345ACBF00AF11D1 /* ConvertUTF.c */; }; - AB2F3BC615CF9C6000858373 /* AAFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6513AF1D6D00502E1E /* AAFilter.cpp */; }; AB2F3BC715CF9C6000858373 /* addons.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEA11345AC8400AF11D1 /* addons.cpp */; }; AB2F3BC815CF9C6000858373 /* arm_instructions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEA31345AC8400AF11D1 /* arm_instructions.cpp */; }; AB2F3BC915CF9C6000858373 /* armcpu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEA41345AC8400AF11D1 /* armcpu.cpp */; }; @@ -133,7 +176,6 @@ AB2F3BCC15CF9C6000858373 /* cheatSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEA61345AC8400AF11D1 /* cheatSystem.cpp */; }; AB2F3BCD15CF9C6000858373 /* common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEA81345AC8400AF11D1 /* common.cpp */; }; AB2F3BCE15CF9C6000858373 /* cp15.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEA91345AC8400AF11D1 /* cp15.cpp */; }; - AB2F3BCF15CF9C6000858373 /* cpu_detect_x86_gcc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6613AF1D6D00502E1E /* cpu_detect_x86_gcc.cpp */; }; AB2F3BD015CF9C6000858373 /* crc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF221345ACBF00AF11D1 /* crc.cpp */; }; AB2F3BD115CF9C6000858373 /* datetime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF1F1345ACBF00AF11D1 /* datetime.cpp */; }; AB2F3BD215CF9C6000858373 /* debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEAB1345AC8400AF11D1 /* debug.cpp */; }; @@ -148,10 +190,8 @@ AB2F3BDB15CF9C6000858373 /* fatdir.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF391345ACBF00AF11D1 /* fatdir.cpp */; }; AB2F3BDC15CF9C6000858373 /* fatfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF3B1345ACBF00AF11D1 /* fatfile.cpp */; }; AB2F3BDD15CF9C6000858373 /* FIFO.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEB01345AC8400AF11D1 /* FIFO.cpp */; }; - AB2F3BDE15CF9C6000858373 /* FIFOSampleBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6813AF1D6D00502E1E /* FIFOSampleBuffer.cpp */; }; AB2F3BDF15CF9C6000858373 /* file_allocation_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF3D1345ACBF00AF11D1 /* file_allocation_table.cpp */; }; AB2F3BE015CF9C6000858373 /* filetime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF3F1345ACBF00AF11D1 /* filetime.cpp */; }; - AB2F3BE115CF9C6000858373 /* FIRFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6913AF1D6D00502E1E /* FIRFilter.cpp */; }; AB2F3BE215CF9C6000858373 /* firmware.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEB11345AC8400AF11D1 /* firmware.cpp */; }; AB2F3BE315CF9C6000858373 /* fs-linux.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEB21345AC8400AF11D1 /* fs-linux.cpp */; }; AB2F3BE415CF9C6000858373 /* gfx3d.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEB41345AC8400AF11D1 /* gfx3d.cpp */; }; @@ -167,13 +207,11 @@ AB2F3BEE15CF9C6000858373 /* md5.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF4A1345ACBF00AF11D1 /* md5.cpp */; }; AB2F3BEF15CF9C6000858373 /* metaspu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF771345ACFA00AF11D1 /* metaspu.cpp */; }; AB2F3BF015CF9C6000858373 /* MMU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEBE1345AC8400AF11D1 /* MMU.cpp */; }; - AB2F3BF115CF9C6000858373 /* mmx_optimized.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6A13AF1D6D00502E1E /* mmx_optimized.cpp */; }; AB2F3BF215CF9C6000858373 /* movie.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEBF1345AC8400AF11D1 /* movie.cpp */; }; AB2F3BF315CF9C6000858373 /* NDSSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC01345AC8400AF11D1 /* NDSSystem.cpp */; }; AB2F3BF415CF9C6000858373 /* partition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF481345ACBF00AF11D1 /* partition.cpp */; }; AB2F3BF515CF9C6000858373 /* path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC21345AC8400AF11D1 /* path.cpp */; }; AB2F3BF615CF9C6000858373 /* rasterize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC31345AC8400AF11D1 /* rasterize.cpp */; }; - AB2F3BF715CF9C6000858373 /* RateTransposer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6B13AF1D6D00502E1E /* RateTransposer.cpp */; }; AB2F3BF815CF9C6000858373 /* readwrite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC41345AC8400AF11D1 /* readwrite.cpp */; }; AB2F3BF915CF9C6000858373 /* render3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC51345AC8400AF11D1 /* render3D.cpp */; }; AB2F3BFA15CF9C6000858373 /* ROMReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC61345AC8400AF11D1 /* ROMReader.cpp */; }; @@ -194,11 +232,8 @@ AB2F3C0915CF9C6000858373 /* slot2_rumblepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF0A1345AC9C00AF11D1 /* slot2_rumblepak.cpp */; }; AB2F3C0A15CF9C6000858373 /* sndOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD104141346652500AF11D1 /* sndOSX.cpp */; }; AB2F3C0B15CF9C6000858373 /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF7A1345ACFA00AF11D1 /* SndOut.cpp */; }; - AB2F3C0C15CF9C6000858373 /* SoundTouch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6C13AF1D6D00502E1E /* SoundTouch.cpp */; }; AB2F3C0D15CF9C6000858373 /* SPU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECB1345AC8400AF11D1 /* SPU.cpp */; }; - AB2F3C0E15CF9C6000858373 /* sse_optimized.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6D13AF1D6D00502E1E /* sse_optimized.cpp */; }; AB2F3C0F15CF9C6000858373 /* task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF4C1345ACBF00AF11D1 /* task.cpp */; }; - AB2F3C1015CF9C6000858373 /* TDStretch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6E13AF1D6D00502E1E /* TDStretch.cpp */; }; AB2F3C1115CF9C6000858373 /* texcache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECC1345AC8400AF11D1 /* texcache.cpp */; }; AB2F3C1215CF9C6000858373 /* thumb_instructions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECD1345AC8400AF11D1 /* thumb_instructions.cpp */; }; AB2F3C1315CF9C6000858373 /* Timestretcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF9B1345ACFA00AF11D1 /* Timestretcher.cpp */; }; @@ -209,7 +244,6 @@ AB2F3C1815CF9C6000858373 /* version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECE1345AC8400AF11D1 /* version.cpp */; }; AB2F3C1915CF9C6000858373 /* vfat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF4F1345ACBF00AF11D1 /* vfat.cpp */; }; AB2F3C1A15CF9C6000858373 /* videofilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB817A35143EE2DB00A7DFE9 /* videofilter.cpp */; }; - AB2F3C1B15CF9C6000858373 /* WavFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6F13AF1D6D00502E1E /* WavFile.cpp */; }; AB2F3C1C15CF9C6000858373 /* wifi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECF1345AC8400AF11D1 /* wifi.cpp */; }; AB2F3C1D15CF9C6000858373 /* xstring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF511345ACBF00AF11D1 /* xstring.cpp */; }; AB2F3C1E15CF9C6000858373 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = ABD104271346653B00AF11D1 /* main.m */; }; @@ -258,6 +292,14 @@ AB3ACC4614C24D5400D7D192 /* COPYING in Resources */ = {isa = PBXBuildFile; fileRef = AB3ACC3A14C24D5400D7D192 /* COPYING */; }; AB3ACC4714C24D5400D7D192 /* README in Resources */ = {isa = PBXBuildFile; fileRef = AB3ACC3B14C24D5400D7D192 /* README */; }; AB3ACC4914C24D5400D7D192 /* README.MAC in Resources */ = {isa = PBXBuildFile; fileRef = AB3ACC3D14C24D5400D7D192 /* README.MAC */; }; + AB6A187C16C9951C00384EED /* EmuControllerDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB6A187B16C9951C00384EED /* EmuControllerDelegate.mm */; }; + AB6A187D16C9951C00384EED /* EmuControllerDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB6A187B16C9951C00384EED /* EmuControllerDelegate.mm */; }; + AB6A187E16C9951C00384EED /* EmuControllerDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB6A187B16C9951C00384EED /* EmuControllerDelegate.mm */; }; + AB6A187F16C9951C00384EED /* EmuControllerDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB6A187B16C9951C00384EED /* EmuControllerDelegate.mm */; }; + AB6A198316CAD66900384EED /* cocoa_GPU.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB6A198216CAD66900384EED /* cocoa_GPU.mm */; }; + AB6A198416CAD66900384EED /* cocoa_GPU.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB6A198216CAD66900384EED /* cocoa_GPU.mm */; }; + AB6A198516CAD66900384EED /* cocoa_GPU.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB6A198216CAD66900384EED /* cocoa_GPU.mm */; }; + AB6A198616CAD66900384EED /* cocoa_GPU.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB6A198216CAD66900384EED /* cocoa_GPU.mm */; }; AB711ED21481C35F009011C8 /* KeyNames.plist in Resources */ = {isa = PBXBuildFile; fileRef = AB02475B13886BF300E9F9AB /* KeyNames.plist */; }; AB711ED31481C35F009011C8 /* DefaultKeyMappings.plist in Resources */ = {isa = PBXBuildFile; fileRef = ABC719E1138CB25E002827A9 /* DefaultKeyMappings.plist */; }; AB711ED81481C35F009011C8 /* DefaultUserPrefs.plist in Resources */ = {isa = PBXBuildFile; fileRef = ABBC0F8C1394B1AA0028B6BD /* DefaultUserPrefs.plist */; }; @@ -351,15 +393,6 @@ AB711F501481C35F009011C8 /* slot1_retail_nand.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB6FBEF5139B6258007BB045 /* slot1_retail_nand.cpp */; }; AB711F511481C35F009011C8 /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF7A1345ACFA00AF11D1 /* SndOut.cpp */; }; AB711F521481C35F009011C8 /* Timestretcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF9B1345ACFA00AF11D1 /* Timestretcher.cpp */; }; - AB711F531481C35F009011C8 /* AAFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6513AF1D6D00502E1E /* AAFilter.cpp */; }; - AB711F541481C35F009011C8 /* FIFOSampleBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6813AF1D6D00502E1E /* FIFOSampleBuffer.cpp */; }; - AB711F551481C35F009011C8 /* FIRFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6913AF1D6D00502E1E /* FIRFilter.cpp */; }; - AB711F561481C35F009011C8 /* mmx_optimized.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6A13AF1D6D00502E1E /* mmx_optimized.cpp */; }; - AB711F571481C35F009011C8 /* RateTransposer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6B13AF1D6D00502E1E /* RateTransposer.cpp */; }; - AB711F581481C35F009011C8 /* SoundTouch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6C13AF1D6D00502E1E /* SoundTouch.cpp */; }; - AB711F591481C35F009011C8 /* sse_optimized.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6D13AF1D6D00502E1E /* sse_optimized.cpp */; }; - AB711F5A1481C35F009011C8 /* TDStretch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6E13AF1D6D00502E1E /* TDStretch.cpp */; }; - AB711F5B1481C35F009011C8 /* WavFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6F13AF1D6D00502E1E /* WavFile.cpp */; }; AB711F5C1481C35F009011C8 /* datetime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF1F1345ACBF00AF11D1 /* datetime.cpp */; }; AB711F5D1481C35F009011C8 /* fs-linux.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEB21345AC8400AF11D1 /* fs-linux.cpp */; }; AB711F5E1481C35F009011C8 /* cocoa_mic.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABD9A46413DB99B300777194 /* cocoa_mic.mm */; }; @@ -373,7 +406,6 @@ AB711F6D1481C35F009011C8 /* videofilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB817A35143EE2DB00A7DFE9 /* videofilter.cpp */; }; AB711F6E1481C35F009011C8 /* cocoa_videofilter.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABE5DFE4143FB1DA00835AD8 /* cocoa_videofilter.mm */; }; AB711F701481C35F009011C8 /* cocoa_cheat.mm in Sources */ = {isa = PBXBuildFile; fileRef = ABA6574A14511EC90077E5E9 /* cocoa_cheat.mm */; }; - AB711F711481C35F009011C8 /* cpu_detect_x86_gcc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6613AF1D6D00502E1E /* cpu_detect_x86_gcc.cpp */; }; AB711F721481C35F009011C8 /* cocoa_hid.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB350B691478A5B3007165AC /* cocoa_hid.mm */; }; AB711F741481C35F009011C8 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; }; AB711F751481C35F009011C8 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABC570D0134431CE00E7B0B1 /* AudioUnit.framework */; }; @@ -453,7 +485,6 @@ AB73A9B01507C9F500A310C8 /* README.MAC in Resources */ = {isa = PBXBuildFile; fileRef = AB3ACC3D14C24D5400D7D192 /* README.MAC */; }; AB73A9B11507C9F500A310C8 /* AppIcon_FirmwareConfig.icns in Resources */ = {isa = PBXBuildFile; fileRef = AB75226D14C7BB51009B97B3 /* AppIcon_FirmwareConfig.icns */; }; AB73A9B31507C9F500A310C8 /* ConvertUTF.c in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF1D1345ACBF00AF11D1 /* ConvertUTF.c */; }; - AB73A9B41507C9F500A310C8 /* AAFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6513AF1D6D00502E1E /* AAFilter.cpp */; }; AB73A9B51507C9F500A310C8 /* addons.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEA11345AC8400AF11D1 /* addons.cpp */; }; AB73A9B61507C9F500A310C8 /* arm_instructions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEA31345AC8400AF11D1 /* arm_instructions.cpp */; }; AB73A9B71507C9F500A310C8 /* armcpu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEA41345AC8400AF11D1 /* armcpu.cpp */; }; @@ -462,7 +493,6 @@ AB73A9BA1507C9F500A310C8 /* cheatSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEA61345AC8400AF11D1 /* cheatSystem.cpp */; }; AB73A9BB1507C9F500A310C8 /* common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEA81345AC8400AF11D1 /* common.cpp */; }; AB73A9BC1507C9F500A310C8 /* cp15.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEA91345AC8400AF11D1 /* cp15.cpp */; }; - AB73A9BD1507C9F500A310C8 /* cpu_detect_x86_gcc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6613AF1D6D00502E1E /* cpu_detect_x86_gcc.cpp */; }; AB73A9BE1507C9F500A310C8 /* crc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF221345ACBF00AF11D1 /* crc.cpp */; }; AB73A9BF1507C9F500A310C8 /* datetime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF1F1345ACBF00AF11D1 /* datetime.cpp */; }; AB73A9C01507C9F500A310C8 /* debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEAB1345AC8400AF11D1 /* debug.cpp */; }; @@ -477,10 +507,8 @@ AB73A9C91507C9F500A310C8 /* fatdir.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF391345ACBF00AF11D1 /* fatdir.cpp */; }; AB73A9CA1507C9F500A310C8 /* fatfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF3B1345ACBF00AF11D1 /* fatfile.cpp */; }; AB73A9CB1507C9F500A310C8 /* FIFO.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEB01345AC8400AF11D1 /* FIFO.cpp */; }; - AB73A9CC1507C9F500A310C8 /* FIFOSampleBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6813AF1D6D00502E1E /* FIFOSampleBuffer.cpp */; }; AB73A9CD1507C9F500A310C8 /* file_allocation_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF3D1345ACBF00AF11D1 /* file_allocation_table.cpp */; }; AB73A9CE1507C9F500A310C8 /* filetime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF3F1345ACBF00AF11D1 /* filetime.cpp */; }; - AB73A9CF1507C9F500A310C8 /* FIRFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6913AF1D6D00502E1E /* FIRFilter.cpp */; }; AB73A9D01507C9F500A310C8 /* firmware.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEB11345AC8400AF11D1 /* firmware.cpp */; }; AB73A9D11507C9F500A310C8 /* fs-linux.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEB21345AC8400AF11D1 /* fs-linux.cpp */; }; AB73A9D21507C9F500A310C8 /* gfx3d.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEB41345AC8400AF11D1 /* gfx3d.cpp */; }; @@ -496,13 +524,11 @@ AB73A9DC1507C9F500A310C8 /* md5.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF4A1345ACBF00AF11D1 /* md5.cpp */; }; AB73A9DD1507C9F500A310C8 /* metaspu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF771345ACFA00AF11D1 /* metaspu.cpp */; }; AB73A9DE1507C9F500A310C8 /* MMU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEBE1345AC8400AF11D1 /* MMU.cpp */; }; - AB73A9DF1507C9F500A310C8 /* mmx_optimized.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6A13AF1D6D00502E1E /* mmx_optimized.cpp */; }; AB73A9E01507C9F500A310C8 /* movie.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEBF1345AC8400AF11D1 /* movie.cpp */; }; AB73A9E11507C9F500A310C8 /* NDSSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC01345AC8400AF11D1 /* NDSSystem.cpp */; }; AB73A9E21507C9F500A310C8 /* partition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF481345ACBF00AF11D1 /* partition.cpp */; }; AB73A9E31507C9F500A310C8 /* path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC21345AC8400AF11D1 /* path.cpp */; }; AB73A9E41507C9F500A310C8 /* rasterize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC31345AC8400AF11D1 /* rasterize.cpp */; }; - AB73A9E51507C9F500A310C8 /* RateTransposer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6B13AF1D6D00502E1E /* RateTransposer.cpp */; }; AB73A9E61507C9F500A310C8 /* readwrite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC41345AC8400AF11D1 /* readwrite.cpp */; }; AB73A9E71507C9F500A310C8 /* render3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC51345AC8400AF11D1 /* render3D.cpp */; }; AB73A9E81507C9F500A310C8 /* ROMReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC61345AC8400AF11D1 /* ROMReader.cpp */; }; @@ -523,11 +549,8 @@ AB73A9F71507C9F500A310C8 /* slot2_rumblepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF0A1345AC9C00AF11D1 /* slot2_rumblepak.cpp */; }; AB73A9F81507C9F500A310C8 /* sndOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD104141346652500AF11D1 /* sndOSX.cpp */; }; AB73A9F91507C9F500A310C8 /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF7A1345ACFA00AF11D1 /* SndOut.cpp */; }; - AB73A9FA1507C9F500A310C8 /* SoundTouch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6C13AF1D6D00502E1E /* SoundTouch.cpp */; }; AB73A9FB1507C9F500A310C8 /* SPU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECB1345AC8400AF11D1 /* SPU.cpp */; }; - AB73A9FC1507C9F500A310C8 /* sse_optimized.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6D13AF1D6D00502E1E /* sse_optimized.cpp */; }; AB73A9FD1507C9F500A310C8 /* task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF4C1345ACBF00AF11D1 /* task.cpp */; }; - AB73A9FE1507C9F500A310C8 /* TDStretch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6E13AF1D6D00502E1E /* TDStretch.cpp */; }; AB73A9FF1507C9F500A310C8 /* texcache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECC1345AC8400AF11D1 /* texcache.cpp */; }; AB73AA001507C9F500A310C8 /* thumb_instructions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECD1345AC8400AF11D1 /* thumb_instructions.cpp */; }; AB73AA011507C9F500A310C8 /* Timestretcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF9B1345ACFA00AF11D1 /* Timestretcher.cpp */; }; @@ -538,7 +561,6 @@ AB73AA061507C9F500A310C8 /* version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECE1345AC8400AF11D1 /* version.cpp */; }; AB73AA071507C9F500A310C8 /* vfat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF4F1345ACBF00AF11D1 /* vfat.cpp */; }; AB73AA081507C9F500A310C8 /* videofilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB817A35143EE2DB00A7DFE9 /* videofilter.cpp */; }; - AB73AA091507C9F500A310C8 /* WavFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6F13AF1D6D00502E1E /* WavFile.cpp */; }; AB73AA0A1507C9F500A310C8 /* wifi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECF1345AC8400AF11D1 /* wifi.cpp */; }; AB73AA0B1507C9F500A310C8 /* xstring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF511345ACBF00AF11D1 /* xstring.cpp */; }; AB73AA0C1507C9F500A310C8 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = ABD104271346653B00AF11D1 /* main.m */; }; @@ -657,7 +679,6 @@ ABAD0FB815ACE7A00000EC47 /* README.MAC in Resources */ = {isa = PBXBuildFile; fileRef = AB3ACC3D14C24D5400D7D192 /* README.MAC */; }; ABAD0FB915ACE7A00000EC47 /* AppIcon_FirmwareConfig.icns in Resources */ = {isa = PBXBuildFile; fileRef = AB75226D14C7BB51009B97B3 /* AppIcon_FirmwareConfig.icns */; }; ABAD0FBB15ACE7A00000EC47 /* ConvertUTF.c in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF1D1345ACBF00AF11D1 /* ConvertUTF.c */; }; - ABAD0FBC15ACE7A00000EC47 /* AAFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6513AF1D6D00502E1E /* AAFilter.cpp */; }; ABAD0FBD15ACE7A00000EC47 /* addons.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEA11345AC8400AF11D1 /* addons.cpp */; }; ABAD0FBE15ACE7A00000EC47 /* arm_instructions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEA31345AC8400AF11D1 /* arm_instructions.cpp */; }; ABAD0FBF15ACE7A00000EC47 /* armcpu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEA41345AC8400AF11D1 /* armcpu.cpp */; }; @@ -666,7 +687,6 @@ ABAD0FC215ACE7A00000EC47 /* cheatSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEA61345AC8400AF11D1 /* cheatSystem.cpp */; }; ABAD0FC315ACE7A00000EC47 /* common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEA81345AC8400AF11D1 /* common.cpp */; }; ABAD0FC415ACE7A00000EC47 /* cp15.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEA91345AC8400AF11D1 /* cp15.cpp */; }; - ABAD0FC515ACE7A00000EC47 /* cpu_detect_x86_gcc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6613AF1D6D00502E1E /* cpu_detect_x86_gcc.cpp */; }; ABAD0FC615ACE7A00000EC47 /* crc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF221345ACBF00AF11D1 /* crc.cpp */; }; ABAD0FC715ACE7A00000EC47 /* datetime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF1F1345ACBF00AF11D1 /* datetime.cpp */; }; ABAD0FC815ACE7A00000EC47 /* debug.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEAB1345AC8400AF11D1 /* debug.cpp */; }; @@ -681,10 +701,8 @@ ABAD0FD115ACE7A00000EC47 /* fatdir.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF391345ACBF00AF11D1 /* fatdir.cpp */; }; ABAD0FD215ACE7A00000EC47 /* fatfile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF3B1345ACBF00AF11D1 /* fatfile.cpp */; }; ABAD0FD315ACE7A00000EC47 /* FIFO.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEB01345AC8400AF11D1 /* FIFO.cpp */; }; - ABAD0FD415ACE7A00000EC47 /* FIFOSampleBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6813AF1D6D00502E1E /* FIFOSampleBuffer.cpp */; }; ABAD0FD515ACE7A00000EC47 /* file_allocation_table.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF3D1345ACBF00AF11D1 /* file_allocation_table.cpp */; }; ABAD0FD615ACE7A00000EC47 /* filetime.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF3F1345ACBF00AF11D1 /* filetime.cpp */; }; - ABAD0FD715ACE7A00000EC47 /* FIRFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6913AF1D6D00502E1E /* FIRFilter.cpp */; }; ABAD0FD815ACE7A00000EC47 /* firmware.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEB11345AC8400AF11D1 /* firmware.cpp */; }; ABAD0FD915ACE7A00000EC47 /* fs-linux.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEB21345AC8400AF11D1 /* fs-linux.cpp */; }; ABAD0FDA15ACE7A00000EC47 /* gfx3d.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEB41345AC8400AF11D1 /* gfx3d.cpp */; }; @@ -700,13 +718,11 @@ ABAD0FE415ACE7A00000EC47 /* md5.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF4A1345ACBF00AF11D1 /* md5.cpp */; }; ABAD0FE515ACE7A00000EC47 /* metaspu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF771345ACFA00AF11D1 /* metaspu.cpp */; }; ABAD0FE615ACE7A00000EC47 /* MMU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEBE1345AC8400AF11D1 /* MMU.cpp */; }; - ABAD0FE715ACE7A00000EC47 /* mmx_optimized.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6A13AF1D6D00502E1E /* mmx_optimized.cpp */; }; ABAD0FE815ACE7A00000EC47 /* movie.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEBF1345AC8400AF11D1 /* movie.cpp */; }; ABAD0FE915ACE7A00000EC47 /* NDSSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC01345AC8400AF11D1 /* NDSSystem.cpp */; }; ABAD0FEA15ACE7A00000EC47 /* partition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF481345ACBF00AF11D1 /* partition.cpp */; }; ABAD0FEB15ACE7A00000EC47 /* path.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC21345AC8400AF11D1 /* path.cpp */; }; ABAD0FEC15ACE7A00000EC47 /* rasterize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC31345AC8400AF11D1 /* rasterize.cpp */; }; - ABAD0FED15ACE7A00000EC47 /* RateTransposer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6B13AF1D6D00502E1E /* RateTransposer.cpp */; }; ABAD0FEE15ACE7A00000EC47 /* readwrite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC41345AC8400AF11D1 /* readwrite.cpp */; }; ABAD0FEF15ACE7A00000EC47 /* render3D.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC51345AC8400AF11D1 /* render3D.cpp */; }; ABAD0FF015ACE7A00000EC47 /* ROMReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FEC61345AC8400AF11D1 /* ROMReader.cpp */; }; @@ -727,11 +743,8 @@ ABAD0FFF15ACE7A00000EC47 /* slot2_rumblepak.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF0A1345AC9C00AF11D1 /* slot2_rumblepak.cpp */; }; ABAD100015ACE7A00000EC47 /* sndOSX.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD104141346652500AF11D1 /* sndOSX.cpp */; }; ABAD100115ACE7A00000EC47 /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF7A1345ACFA00AF11D1 /* SndOut.cpp */; }; - ABAD100215ACE7A00000EC47 /* SoundTouch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6C13AF1D6D00502E1E /* SoundTouch.cpp */; }; ABAD100315ACE7A00000EC47 /* SPU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECB1345AC8400AF11D1 /* SPU.cpp */; }; - ABAD100415ACE7A00000EC47 /* sse_optimized.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6D13AF1D6D00502E1E /* sse_optimized.cpp */; }; ABAD100515ACE7A00000EC47 /* task.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF4C1345ACBF00AF11D1 /* task.cpp */; }; - ABAD100615ACE7A00000EC47 /* TDStretch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6E13AF1D6D00502E1E /* TDStretch.cpp */; }; ABAD100715ACE7A00000EC47 /* texcache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECC1345AC8400AF11D1 /* texcache.cpp */; }; ABAD100815ACE7A00000EC47 /* thumb_instructions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECD1345AC8400AF11D1 /* thumb_instructions.cpp */; }; ABAD100915ACE7A00000EC47 /* Timestretcher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF9B1345ACFA00AF11D1 /* Timestretcher.cpp */; }; @@ -742,7 +755,6 @@ ABAD100E15ACE7A00000EC47 /* version.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECE1345AC8400AF11D1 /* version.cpp */; }; ABAD100F15ACE7A00000EC47 /* vfat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF4F1345ACBF00AF11D1 /* vfat.cpp */; }; ABAD101015ACE7A00000EC47 /* videofilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB817A35143EE2DB00A7DFE9 /* videofilter.cpp */; }; - ABAD101115ACE7A00000EC47 /* WavFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABAD3E6F13AF1D6D00502E1E /* WavFile.cpp */; }; ABAD101215ACE7A00000EC47 /* wifi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FECF1345AC8400AF11D1 /* wifi.cpp */; }; ABAD101315ACE7A00000EC47 /* xstring.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF511345ACBF00AF11D1 /* xstring.cpp */; }; ABAD101415ACE7A00000EC47 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = ABD104271346653B00AF11D1 /* main.m */; }; @@ -913,6 +925,29 @@ AB0F29A314BE7213009ABC6F /* Icon_RotateCW_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_RotateCW_420x420.png; path = images/Icon_RotateCW_420x420.png; sourceTree = ""; }; AB0F29A414BE7213009ABC6F /* Icon_ShowHUD_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_ShowHUD_420x420.png; path = images/Icon_ShowHUD_420x420.png; sourceTree = ""; }; AB0F29A514BE7213009ABC6F /* Icon_Speaker_420x420.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_Speaker_420x420.png; path = images/Icon_Speaker_420x420.png; sourceTree = ""; }; + AB279D4216A4E6DE00ECC692 /* AAFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AAFilter.h; sourceTree = ""; }; + AB279D4316A4E6DE00ECC692 /* BPMDetect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BPMDetect.h; sourceTree = ""; }; + AB279D4416A4E6DE00ECC692 /* cpu_detect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cpu_detect.h; sourceTree = ""; }; + AB279D4516A4E6DE00ECC692 /* FIFOSampleBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIFOSampleBuffer.h; sourceTree = ""; }; + AB279D4616A4E6DE00ECC692 /* FIFOSamplePipe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIFOSamplePipe.h; sourceTree = ""; }; + AB279D4716A4E6DE00ECC692 /* FIRFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIRFilter.h; sourceTree = ""; }; + AB279D4816A4E6DE00ECC692 /* PeakFinder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PeakFinder.h; sourceTree = ""; }; + AB279D4916A4E6DE00ECC692 /* RateTransposer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RateTransposer.h; sourceTree = ""; }; + AB279D4A16A4E6DE00ECC692 /* soundtouch_config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = soundtouch_config.h; sourceTree = ""; }; + AB279D4B16A4E6DE00ECC692 /* SoundTouch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SoundTouch.h; sourceTree = ""; }; + AB279D4C16A4E6DE00ECC692 /* STTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = STTypes.h; sourceTree = ""; }; + AB279D4D16A4E6DE00ECC692 /* TDStretch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TDStretch.h; sourceTree = ""; }; + AB279D4E16A4E6DE00ECC692 /* AAFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AAFilter.cpp; sourceTree = ""; }; + AB279D4F16A4E6DE00ECC692 /* BPMDetect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BPMDetect.cpp; sourceTree = ""; }; + AB279D5016A4E6DE00ECC692 /* cpu_detect_x86.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cpu_detect_x86.cpp; sourceTree = ""; }; + AB279D5116A4E6DE00ECC692 /* FIFOSampleBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FIFOSampleBuffer.cpp; sourceTree = ""; }; + AB279D5216A4E6DE00ECC692 /* FIRFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FIRFilter.cpp; sourceTree = ""; }; + AB279D5316A4E6DE00ECC692 /* mmx_optimized.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mmx_optimized.cpp; sourceTree = ""; }; + AB279D5416A4E6DE00ECC692 /* PeakFinder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PeakFinder.cpp; sourceTree = ""; }; + AB279D5516A4E6DE00ECC692 /* RateTransposer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RateTransposer.cpp; sourceTree = ""; }; + AB279D5616A4E6DE00ECC692 /* SoundTouch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SoundTouch.cpp; sourceTree = ""; }; + AB279D5716A4E6DE00ECC692 /* sse_optimized.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sse_optimized.cpp; sourceTree = ""; }; + AB279D5816A4E6DE00ECC692 /* TDStretch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TDStretch.cpp; sourceTree = ""; }; AB2F3C4515CF9C6000858373 /* DeSmuME (PPC).app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DeSmuME (PPC).app"; sourceTree = BUILT_PRODUCTS_DIR; }; AB350B681478A5B3007165AC /* cocoa_hid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_hid.h; sourceTree = ""; }; AB350B691478A5B3007165AC /* cocoa_hid.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_hid.mm; sourceTree = ""; }; @@ -940,6 +975,10 @@ AB58F32B1364F44B0074C376 /* cocoa_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_file.h; sourceTree = ""; }; AB58F32C1364F44B0074C376 /* cocoa_file.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_file.mm; sourceTree = ""; }; AB64987B13ECC73800EE7DD2 /* FileTypeInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = FileTypeInfo.plist; sourceTree = ""; }; + AB6A187A16C9951C00384EED /* EmuControllerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EmuControllerDelegate.h; sourceTree = ""; }; + AB6A187B16C9951C00384EED /* EmuControllerDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = EmuControllerDelegate.mm; sourceTree = ""; }; + AB6A198116CAD66900384EED /* cocoa_GPU.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_GPU.h; sourceTree = ""; }; + AB6A198216CAD66900384EED /* cocoa_GPU.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_GPU.mm; sourceTree = ""; }; AB6FBEF5139B6258007BB045 /* slot1_retail_nand.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = slot1_retail_nand.cpp; sourceTree = ""; }; AB711F7F1481C35F009011C8 /* DeSmuME.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DeSmuME.app; sourceTree = BUILT_PRODUCTS_DIR; }; AB73AA331507C9F500A310C8 /* DeSmuME.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = DeSmuME.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -961,27 +1000,6 @@ ABA6574914511EC90077E5E9 /* cocoa_cheat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_cheat.h; sourceTree = ""; }; ABA6574A14511EC90077E5E9 /* cocoa_cheat.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_cheat.mm; sourceTree = ""; }; ABAD104915ACE7A00000EC47 /* DeSmuME (PPC).app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "DeSmuME (PPC).app"; sourceTree = BUILT_PRODUCTS_DIR; }; - ABAD3E5913AF1D6D00502E1E /* AAFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AAFilter.h; sourceTree = ""; }; - ABAD3E5A13AF1D6D00502E1E /* BPMDetect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BPMDetect.h; sourceTree = ""; }; - ABAD3E5B13AF1D6D00502E1E /* cpu_detect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cpu_detect.h; sourceTree = ""; }; - ABAD3E5C13AF1D6D00502E1E /* FIFOSampleBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIFOSampleBuffer.h; sourceTree = ""; }; - ABAD3E5D13AF1D6D00502E1E /* FIFOSamplePipe.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIFOSamplePipe.h; sourceTree = ""; }; - ABAD3E5E13AF1D6D00502E1E /* FIRFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIRFilter.h; sourceTree = ""; }; - ABAD3E5F13AF1D6D00502E1E /* RateTransposer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RateTransposer.h; sourceTree = ""; }; - ABAD3E6013AF1D6D00502E1E /* SoundTouch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SoundTouch.h; sourceTree = ""; }; - ABAD3E6113AF1D6D00502E1E /* STTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = STTypes.h; sourceTree = ""; }; - ABAD3E6213AF1D6D00502E1E /* TDStretch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TDStretch.h; sourceTree = ""; }; - ABAD3E6313AF1D6D00502E1E /* WavFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WavFile.h; sourceTree = ""; }; - ABAD3E6513AF1D6D00502E1E /* AAFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = AAFilter.cpp; sourceTree = ""; }; - ABAD3E6613AF1D6D00502E1E /* cpu_detect_x86_gcc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = cpu_detect_x86_gcc.cpp; sourceTree = ""; }; - ABAD3E6813AF1D6D00502E1E /* FIFOSampleBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FIFOSampleBuffer.cpp; sourceTree = ""; }; - ABAD3E6913AF1D6D00502E1E /* FIRFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FIRFilter.cpp; sourceTree = ""; }; - ABAD3E6A13AF1D6D00502E1E /* mmx_optimized.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = mmx_optimized.cpp; sourceTree = ""; }; - ABAD3E6B13AF1D6D00502E1E /* RateTransposer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RateTransposer.cpp; sourceTree = ""; }; - ABAD3E6C13AF1D6D00502E1E /* SoundTouch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SoundTouch.cpp; sourceTree = ""; }; - ABAD3E6D13AF1D6D00502E1E /* sse_optimized.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sse_optimized.cpp; sourceTree = ""; }; - ABAD3E6E13AF1D6D00502E1E /* TDStretch.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TDStretch.cpp; sourceTree = ""; }; - ABAD3E6F13AF1D6D00502E1E /* WavFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WavFile.cpp; sourceTree = ""; }; ABB97873144E89CC00793FA3 /* Icon_ActionReplay_32x32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_ActionReplay_32x32.png; path = Images/Icon_ActionReplay_32x32.png; sourceTree = ""; }; ABB97874144E89CC00793FA3 /* Icon_CodeBreaker_32x32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_CodeBreaker_32x32.png; path = Images/Icon_CodeBreaker_32x32.png; sourceTree = ""; }; ABB97875144E89CC00793FA3 /* Icon_DeSmuME_32x32.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_DeSmuME_32x32.png; path = Images/Icon_DeSmuME_32x32.png; sourceTree = ""; }; @@ -1353,6 +1371,7 @@ AB58F32B1364F44B0074C376 /* cocoa_file.h */, ABE7F53C13EE1C7900FD3A71 /* cocoa_firmware.h */, AB9971CE134EDA0800531BA7 /* cocoa_globals.h */, + AB6A198116CAD66900384EED /* cocoa_GPU.h */, AB350B681478A5B3007165AC /* cocoa_hid.h */, ABD103FF1346652500AF11D1 /* cocoa_input.h */, ABD9A46313DB99B300777194 /* cocoa_mic.h */, @@ -1367,6 +1386,7 @@ ABD104121346652500AF11D1 /* cocoa_core.mm */, AB58F32C1364F44B0074C376 /* cocoa_file.mm */, ABE7F53D13EE1C7900FD3A71 /* cocoa_firmware.mm */, + AB6A198216CAD66900384EED /* cocoa_GPU.mm */, AB350B691478A5B3007165AC /* cocoa_hid.mm */, ABD104111346652500AF11D1 /* cocoa_input.mm */, ABD9A46413DB99B300777194 /* cocoa_mic.mm */, @@ -1471,6 +1491,7 @@ AB3ACB6614C2361100D7D192 /* appDelegate.h */, AB3ACB6814C2361100D7D192 /* cheatWindowDelegate.h */, AB3ACB6A14C2361100D7D192 /* displayView.h */, + AB6A187A16C9951C00384EED /* EmuControllerDelegate.h */, AB3ACB6C14C2361100D7D192 /* emuWindowDelegate.h */, AB3ACB6E14C2361100D7D192 /* inputPrefsView.h */, AB3ACB7014C2361100D7D192 /* preferencesWindowDelegate.h */, @@ -1478,6 +1499,7 @@ AB3ACB6714C2361100D7D192 /* appDelegate.mm */, AB3ACB6914C2361100D7D192 /* cheatWindowDelegate.mm */, AB3ACB6B14C2361100D7D192 /* displayView.mm */, + AB6A187B16C9951C00384EED /* EmuControllerDelegate.mm */, AB3ACB6D14C2361100D7D192 /* emuWindowDelegate.mm */, AB3ACB6F14C2361100D7D192 /* inputPrefsView.mm */, AB3ACB7114C2361100D7D192 /* preferencesWindowDelegate.mm */, @@ -1810,27 +1832,29 @@ ABD1FF7C1345ACFA00AF11D1 /* SoundTouch */ = { isa = PBXGroup; children = ( - ABAD3E5913AF1D6D00502E1E /* AAFilter.h */, - ABAD3E5A13AF1D6D00502E1E /* BPMDetect.h */, - ABAD3E5B13AF1D6D00502E1E /* cpu_detect.h */, - ABAD3E5C13AF1D6D00502E1E /* FIFOSampleBuffer.h */, - ABAD3E5D13AF1D6D00502E1E /* FIFOSamplePipe.h */, - ABAD3E5E13AF1D6D00502E1E /* FIRFilter.h */, - ABAD3E5F13AF1D6D00502E1E /* RateTransposer.h */, - ABAD3E6013AF1D6D00502E1E /* SoundTouch.h */, - ABAD3E6113AF1D6D00502E1E /* STTypes.h */, - ABAD3E6213AF1D6D00502E1E /* TDStretch.h */, - ABAD3E6313AF1D6D00502E1E /* WavFile.h */, - ABAD3E6513AF1D6D00502E1E /* AAFilter.cpp */, - ABAD3E6613AF1D6D00502E1E /* cpu_detect_x86_gcc.cpp */, - ABAD3E6813AF1D6D00502E1E /* FIFOSampleBuffer.cpp */, - ABAD3E6913AF1D6D00502E1E /* FIRFilter.cpp */, - ABAD3E6A13AF1D6D00502E1E /* mmx_optimized.cpp */, - ABAD3E6B13AF1D6D00502E1E /* RateTransposer.cpp */, - ABAD3E6C13AF1D6D00502E1E /* SoundTouch.cpp */, - ABAD3E6D13AF1D6D00502E1E /* sse_optimized.cpp */, - ABAD3E6E13AF1D6D00502E1E /* TDStretch.cpp */, - ABAD3E6F13AF1D6D00502E1E /* WavFile.cpp */, + AB279D4E16A4E6DE00ECC692 /* AAFilter.cpp */, + AB279D4F16A4E6DE00ECC692 /* BPMDetect.cpp */, + AB279D5016A4E6DE00ECC692 /* cpu_detect_x86.cpp */, + AB279D5116A4E6DE00ECC692 /* FIFOSampleBuffer.cpp */, + AB279D5216A4E6DE00ECC692 /* FIRFilter.cpp */, + AB279D5316A4E6DE00ECC692 /* mmx_optimized.cpp */, + AB279D5416A4E6DE00ECC692 /* PeakFinder.cpp */, + AB279D5516A4E6DE00ECC692 /* RateTransposer.cpp */, + AB279D5616A4E6DE00ECC692 /* SoundTouch.cpp */, + AB279D5716A4E6DE00ECC692 /* sse_optimized.cpp */, + AB279D5816A4E6DE00ECC692 /* TDStretch.cpp */, + AB279D4216A4E6DE00ECC692 /* AAFilter.h */, + AB279D4316A4E6DE00ECC692 /* BPMDetect.h */, + AB279D4416A4E6DE00ECC692 /* cpu_detect.h */, + AB279D4516A4E6DE00ECC692 /* FIFOSampleBuffer.h */, + AB279D4616A4E6DE00ECC692 /* FIFOSamplePipe.h */, + AB279D4716A4E6DE00ECC692 /* FIRFilter.h */, + AB279D4816A4E6DE00ECC692 /* PeakFinder.h */, + AB279D4916A4E6DE00ECC692 /* RateTransposer.h */, + AB279D4B16A4E6DE00ECC692 /* SoundTouch.h */, + AB279D4A16A4E6DE00ECC692 /* soundtouch_config.h */, + AB279D4C16A4E6DE00ECC692 /* STTypes.h */, + AB279D4D16A4E6DE00ECC692 /* TDStretch.h */, ); path = SoundTouch; sourceTree = ""; @@ -2505,7 +2529,6 @@ buildActionMask = 2147483647; files = ( AB2F3BC515CF9C6000858373 /* ConvertUTF.c in Sources */, - AB2F3BC615CF9C6000858373 /* AAFilter.cpp in Sources */, AB2F3BC715CF9C6000858373 /* addons.cpp in Sources */, AB2F3BC815CF9C6000858373 /* arm_instructions.cpp in Sources */, AB2F3BC915CF9C6000858373 /* armcpu.cpp in Sources */, @@ -2514,7 +2537,6 @@ AB2F3BCC15CF9C6000858373 /* cheatSystem.cpp in Sources */, AB2F3BCD15CF9C6000858373 /* common.cpp in Sources */, AB2F3BCE15CF9C6000858373 /* cp15.cpp in Sources */, - AB2F3BCF15CF9C6000858373 /* cpu_detect_x86_gcc.cpp in Sources */, AB2F3BD015CF9C6000858373 /* crc.cpp in Sources */, AB2F3BD115CF9C6000858373 /* datetime.cpp in Sources */, AB2F3BD215CF9C6000858373 /* debug.cpp in Sources */, @@ -2529,10 +2551,8 @@ AB2F3BDB15CF9C6000858373 /* fatdir.cpp in Sources */, AB2F3BDC15CF9C6000858373 /* fatfile.cpp in Sources */, AB2F3BDD15CF9C6000858373 /* FIFO.cpp in Sources */, - AB2F3BDE15CF9C6000858373 /* FIFOSampleBuffer.cpp in Sources */, AB2F3BDF15CF9C6000858373 /* file_allocation_table.cpp in Sources */, AB2F3BE015CF9C6000858373 /* filetime.cpp in Sources */, - AB2F3BE115CF9C6000858373 /* FIRFilter.cpp in Sources */, AB2F3BE215CF9C6000858373 /* firmware.cpp in Sources */, AB2F3BE315CF9C6000858373 /* fs-linux.cpp in Sources */, AB2F3BE415CF9C6000858373 /* gfx3d.cpp in Sources */, @@ -2548,13 +2568,11 @@ AB2F3BEE15CF9C6000858373 /* md5.cpp in Sources */, AB2F3BEF15CF9C6000858373 /* metaspu.cpp in Sources */, AB2F3BF015CF9C6000858373 /* MMU.cpp in Sources */, - AB2F3BF115CF9C6000858373 /* mmx_optimized.cpp in Sources */, AB2F3BF215CF9C6000858373 /* movie.cpp in Sources */, AB2F3BF315CF9C6000858373 /* NDSSystem.cpp in Sources */, AB2F3BF415CF9C6000858373 /* partition.cpp in Sources */, AB2F3BF515CF9C6000858373 /* path.cpp in Sources */, AB2F3BF615CF9C6000858373 /* rasterize.cpp in Sources */, - AB2F3BF715CF9C6000858373 /* RateTransposer.cpp in Sources */, AB2F3BF815CF9C6000858373 /* readwrite.cpp in Sources */, AB2F3BF915CF9C6000858373 /* render3D.cpp in Sources */, AB2F3BFA15CF9C6000858373 /* ROMReader.cpp in Sources */, @@ -2575,11 +2593,8 @@ AB2F3C0915CF9C6000858373 /* slot2_rumblepak.cpp in Sources */, AB2F3C0A15CF9C6000858373 /* sndOSX.cpp in Sources */, AB2F3C0B15CF9C6000858373 /* SndOut.cpp in Sources */, - AB2F3C0C15CF9C6000858373 /* SoundTouch.cpp in Sources */, AB2F3C0D15CF9C6000858373 /* SPU.cpp in Sources */, - AB2F3C0E15CF9C6000858373 /* sse_optimized.cpp in Sources */, AB2F3C0F15CF9C6000858373 /* task.cpp in Sources */, - AB2F3C1015CF9C6000858373 /* TDStretch.cpp in Sources */, AB2F3C1115CF9C6000858373 /* texcache.cpp in Sources */, AB2F3C1215CF9C6000858373 /* thumb_instructions.cpp in Sources */, AB2F3C1315CF9C6000858373 /* Timestretcher.cpp in Sources */, @@ -2590,7 +2605,6 @@ AB2F3C1815CF9C6000858373 /* version.cpp in Sources */, AB2F3C1915CF9C6000858373 /* vfat.cpp in Sources */, AB2F3C1A15CF9C6000858373 /* videofilter.cpp in Sources */, - AB2F3C1B15CF9C6000858373 /* WavFile.cpp in Sources */, AB2F3C1C15CF9C6000858373 /* wifi.cpp in Sources */, AB2F3C1D15CF9C6000858373 /* xstring.cpp in Sources */, AB2F3C1E15CF9C6000858373 /* main.m in Sources */, @@ -2622,6 +2636,19 @@ AB2F3C3815CF9C6000858373 /* coreaudiosound.cpp in Sources */, AB2F3C3915CF9C6000858373 /* ringbuffer.cpp in Sources */, ABA03571169127C000817C69 /* troubleshootingWindowDelegate.mm in Sources */, + AB279D6416A4E6DE00ECC692 /* AAFilter.cpp in Sources */, + AB279D6516A4E6DE00ECC692 /* BPMDetect.cpp in Sources */, + AB279D6616A4E6DE00ECC692 /* cpu_detect_x86.cpp in Sources */, + AB279D6716A4E6DE00ECC692 /* FIFOSampleBuffer.cpp in Sources */, + AB279D6816A4E6DE00ECC692 /* FIRFilter.cpp in Sources */, + AB279D6916A4E6DE00ECC692 /* mmx_optimized.cpp in Sources */, + AB279D6A16A4E6DE00ECC692 /* PeakFinder.cpp in Sources */, + AB279D6B16A4E6DE00ECC692 /* RateTransposer.cpp in Sources */, + AB279D6C16A4E6DE00ECC692 /* SoundTouch.cpp in Sources */, + AB279D6D16A4E6DE00ECC692 /* sse_optimized.cpp in Sources */, + AB279D6E16A4E6DE00ECC692 /* TDStretch.cpp in Sources */, + AB6A187C16C9951C00384EED /* EmuControllerDelegate.mm in Sources */, + AB6A198316CAD66900384EED /* cocoa_GPU.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2630,7 +2657,6 @@ buildActionMask = 2147483647; files = ( AB711F2D1481C35F009011C8 /* ConvertUTF.c in Sources */, - AB711F531481C35F009011C8 /* AAFilter.cpp in Sources */, AB711F001481C35F009011C8 /* addons.cpp in Sources */, AB711F011481C35F009011C8 /* arm_instructions.cpp in Sources */, AB711F021481C35F009011C8 /* armcpu.cpp in Sources */, @@ -2639,7 +2665,6 @@ AB711F041481C35F009011C8 /* cheatSystem.cpp in Sources */, AB711F051481C35F009011C8 /* common.cpp in Sources */, AB711F061481C35F009011C8 /* cp15.cpp in Sources */, - AB711F711481C35F009011C8 /* cpu_detect_x86_gcc.cpp in Sources */, AB711F2E1481C35F009011C8 /* crc.cpp in Sources */, AB711F5C1481C35F009011C8 /* datetime.cpp in Sources */, AB711F071481C35F009011C8 /* debug.cpp in Sources */, @@ -2654,10 +2679,8 @@ AB711F371481C35F009011C8 /* fatdir.cpp in Sources */, AB711F381481C35F009011C8 /* fatfile.cpp in Sources */, AB711F0B1481C35F009011C8 /* FIFO.cpp in Sources */, - AB711F541481C35F009011C8 /* FIFOSampleBuffer.cpp in Sources */, AB711F391481C35F009011C8 /* file_allocation_table.cpp in Sources */, AB711F3A1481C35F009011C8 /* filetime.cpp in Sources */, - AB711F551481C35F009011C8 /* FIRFilter.cpp in Sources */, AB711F0C1481C35F009011C8 /* firmware.cpp in Sources */, AB711F5D1481C35F009011C8 /* fs-linux.cpp in Sources */, AB711F0D1481C35F009011C8 /* gfx3d.cpp in Sources */, @@ -2673,14 +2696,12 @@ AB711F3F1481C35F009011C8 /* md5.cpp in Sources */, AB711F431481C35F009011C8 /* metaspu.cpp in Sources */, AB711F121481C35F009011C8 /* MMU.cpp in Sources */, - AB711F561481C35F009011C8 /* mmx_optimized.cpp in Sources */, AB711F131481C35F009011C8 /* movie.cpp in Sources */, AB711F141481C35F009011C8 /* NDSSystem.cpp in Sources */, AB711F5F1481C35F009011C8 /* OGLRender.cpp in Sources */, AB711F3E1481C35F009011C8 /* partition.cpp in Sources */, AB711F151481C35F009011C8 /* path.cpp in Sources */, AB711F161481C35F009011C8 /* rasterize.cpp in Sources */, - AB711F571481C35F009011C8 /* RateTransposer.cpp in Sources */, AB711F171481C35F009011C8 /* readwrite.cpp in Sources */, AB711F181481C35F009011C8 /* render3D.cpp in Sources */, AB711F191481C35F009011C8 /* ROMReader.cpp in Sources */, @@ -2701,11 +2722,8 @@ AB711F2C1481C35F009011C8 /* slot2_rumblepak.cpp in Sources */, AB711F491481C35F009011C8 /* sndOSX.cpp in Sources */, AB711F511481C35F009011C8 /* SndOut.cpp in Sources */, - AB711F581481C35F009011C8 /* SoundTouch.cpp in Sources */, AB711F1D1481C35F009011C8 /* SPU.cpp in Sources */, - AB711F591481C35F009011C8 /* sse_optimized.cpp in Sources */, AB711F401481C35F009011C8 /* task.cpp in Sources */, - AB711F5A1481C35F009011C8 /* TDStretch.cpp in Sources */, AB711F1E1481C35F009011C8 /* texcache.cpp in Sources */, AB711F1F1481C35F009011C8 /* thumb_instructions.cpp in Sources */, AB711F521481C35F009011C8 /* Timestretcher.cpp in Sources */, @@ -2716,7 +2734,6 @@ AB711F201481C35F009011C8 /* version.cpp in Sources */, AB711F411481C35F009011C8 /* vfat.cpp in Sources */, AB711F6D1481C35F009011C8 /* videofilter.cpp in Sources */, - AB711F5B1481C35F009011C8 /* WavFile.cpp in Sources */, AB711F211481C35F009011C8 /* wifi.cpp in Sources */, AB711F421481C35F009011C8 /* xstring.cpp in Sources */, AB711F4A1481C35F009011C8 /* main.m in Sources */, @@ -2777,6 +2794,19 @@ ABF50AD4169F5FDA0018C08D /* x86func.cpp in Sources */, ABF50AD5169F5FDA0018C08D /* x86operand.cpp in Sources */, ABF50AD6169F5FDA0018C08D /* x86util.cpp in Sources */, + AB279D6F16A4E6DE00ECC692 /* AAFilter.cpp in Sources */, + AB279D7016A4E6DE00ECC692 /* BPMDetect.cpp in Sources */, + AB279D7116A4E6DE00ECC692 /* cpu_detect_x86.cpp in Sources */, + AB279D7216A4E6DE00ECC692 /* FIFOSampleBuffer.cpp in Sources */, + AB279D7316A4E6DE00ECC692 /* FIRFilter.cpp in Sources */, + AB279D7416A4E6DE00ECC692 /* mmx_optimized.cpp in Sources */, + AB279D7516A4E6DE00ECC692 /* PeakFinder.cpp in Sources */, + AB279D7616A4E6DE00ECC692 /* RateTransposer.cpp in Sources */, + AB279D7716A4E6DE00ECC692 /* SoundTouch.cpp in Sources */, + AB279D7816A4E6DE00ECC692 /* sse_optimized.cpp in Sources */, + AB279D7916A4E6DE00ECC692 /* TDStretch.cpp in Sources */, + AB6A187E16C9951C00384EED /* EmuControllerDelegate.mm in Sources */, + AB6A198516CAD66900384EED /* cocoa_GPU.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2785,7 +2815,6 @@ buildActionMask = 2147483647; files = ( AB73A9B31507C9F500A310C8 /* ConvertUTF.c in Sources */, - AB73A9B41507C9F500A310C8 /* AAFilter.cpp in Sources */, AB73A9B51507C9F500A310C8 /* addons.cpp in Sources */, AB73A9B61507C9F500A310C8 /* arm_instructions.cpp in Sources */, AB73A9B71507C9F500A310C8 /* armcpu.cpp in Sources */, @@ -2794,7 +2823,6 @@ AB73A9BA1507C9F500A310C8 /* cheatSystem.cpp in Sources */, AB73A9BB1507C9F500A310C8 /* common.cpp in Sources */, AB73A9BC1507C9F500A310C8 /* cp15.cpp in Sources */, - AB73A9BD1507C9F500A310C8 /* cpu_detect_x86_gcc.cpp in Sources */, AB73A9BE1507C9F500A310C8 /* crc.cpp in Sources */, AB73A9BF1507C9F500A310C8 /* datetime.cpp in Sources */, AB73A9C01507C9F500A310C8 /* debug.cpp in Sources */, @@ -2809,10 +2837,8 @@ AB73A9C91507C9F500A310C8 /* fatdir.cpp in Sources */, AB73A9CA1507C9F500A310C8 /* fatfile.cpp in Sources */, AB73A9CB1507C9F500A310C8 /* FIFO.cpp in Sources */, - AB73A9CC1507C9F500A310C8 /* FIFOSampleBuffer.cpp in Sources */, AB73A9CD1507C9F500A310C8 /* file_allocation_table.cpp in Sources */, AB73A9CE1507C9F500A310C8 /* filetime.cpp in Sources */, - AB73A9CF1507C9F500A310C8 /* FIRFilter.cpp in Sources */, AB73A9D01507C9F500A310C8 /* firmware.cpp in Sources */, AB73A9D11507C9F500A310C8 /* fs-linux.cpp in Sources */, AB73A9D21507C9F500A310C8 /* gfx3d.cpp in Sources */, @@ -2828,13 +2854,11 @@ AB73A9DC1507C9F500A310C8 /* md5.cpp in Sources */, AB73A9DD1507C9F500A310C8 /* metaspu.cpp in Sources */, AB73A9DE1507C9F500A310C8 /* MMU.cpp in Sources */, - AB73A9DF1507C9F500A310C8 /* mmx_optimized.cpp in Sources */, AB73A9E01507C9F500A310C8 /* movie.cpp in Sources */, AB73A9E11507C9F500A310C8 /* NDSSystem.cpp in Sources */, AB73A9E21507C9F500A310C8 /* partition.cpp in Sources */, AB73A9E31507C9F500A310C8 /* path.cpp in Sources */, AB73A9E41507C9F500A310C8 /* rasterize.cpp in Sources */, - AB73A9E51507C9F500A310C8 /* RateTransposer.cpp in Sources */, AB73A9E61507C9F500A310C8 /* readwrite.cpp in Sources */, AB73A9E71507C9F500A310C8 /* render3D.cpp in Sources */, AB73A9E81507C9F500A310C8 /* ROMReader.cpp in Sources */, @@ -2855,11 +2879,8 @@ AB73A9F71507C9F500A310C8 /* slot2_rumblepak.cpp in Sources */, AB73A9F81507C9F500A310C8 /* sndOSX.cpp in Sources */, AB73A9F91507C9F500A310C8 /* SndOut.cpp in Sources */, - AB73A9FA1507C9F500A310C8 /* SoundTouch.cpp in Sources */, AB73A9FB1507C9F500A310C8 /* SPU.cpp in Sources */, - AB73A9FC1507C9F500A310C8 /* sse_optimized.cpp in Sources */, AB73A9FD1507C9F500A310C8 /* task.cpp in Sources */, - AB73A9FE1507C9F500A310C8 /* TDStretch.cpp in Sources */, AB73A9FF1507C9F500A310C8 /* texcache.cpp in Sources */, AB73AA001507C9F500A310C8 /* thumb_instructions.cpp in Sources */, AB73AA011507C9F500A310C8 /* Timestretcher.cpp in Sources */, @@ -2870,7 +2891,6 @@ AB73AA061507C9F500A310C8 /* version.cpp in Sources */, AB73AA071507C9F500A310C8 /* vfat.cpp in Sources */, AB73AA081507C9F500A310C8 /* videofilter.cpp in Sources */, - AB73AA091507C9F500A310C8 /* WavFile.cpp in Sources */, AB73AA0A1507C9F500A310C8 /* wifi.cpp in Sources */, AB73AA0B1507C9F500A310C8 /* xstring.cpp in Sources */, AB73AA0C1507C9F500A310C8 /* main.m in Sources */, @@ -2932,6 +2952,19 @@ ABF50B2B169F5FDA0018C08D /* x86func.cpp in Sources */, ABF50B2C169F5FDA0018C08D /* x86operand.cpp in Sources */, ABF50B2D169F5FDA0018C08D /* x86util.cpp in Sources */, + AB279D5916A4E6DE00ECC692 /* AAFilter.cpp in Sources */, + AB279D5A16A4E6DE00ECC692 /* BPMDetect.cpp in Sources */, + AB279D5B16A4E6DE00ECC692 /* cpu_detect_x86.cpp in Sources */, + AB279D5C16A4E6DE00ECC692 /* FIFOSampleBuffer.cpp in Sources */, + AB279D5D16A4E6DE00ECC692 /* FIRFilter.cpp in Sources */, + AB279D5E16A4E6DE00ECC692 /* mmx_optimized.cpp in Sources */, + AB279D5F16A4E6DE00ECC692 /* PeakFinder.cpp in Sources */, + AB279D6016A4E6DE00ECC692 /* RateTransposer.cpp in Sources */, + AB279D6116A4E6DE00ECC692 /* SoundTouch.cpp in Sources */, + AB279D6216A4E6DE00ECC692 /* sse_optimized.cpp in Sources */, + AB279D6316A4E6DE00ECC692 /* TDStretch.cpp in Sources */, + AB6A187F16C9951C00384EED /* EmuControllerDelegate.mm in Sources */, + AB6A198616CAD66900384EED /* cocoa_GPU.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2940,7 +2973,6 @@ buildActionMask = 2147483647; files = ( ABAD0FBB15ACE7A00000EC47 /* ConvertUTF.c in Sources */, - ABAD0FBC15ACE7A00000EC47 /* AAFilter.cpp in Sources */, ABAD0FBD15ACE7A00000EC47 /* addons.cpp in Sources */, ABAD0FBE15ACE7A00000EC47 /* arm_instructions.cpp in Sources */, ABAD0FBF15ACE7A00000EC47 /* armcpu.cpp in Sources */, @@ -2949,7 +2981,6 @@ ABAD0FC215ACE7A00000EC47 /* cheatSystem.cpp in Sources */, ABAD0FC315ACE7A00000EC47 /* common.cpp in Sources */, ABAD0FC415ACE7A00000EC47 /* cp15.cpp in Sources */, - ABAD0FC515ACE7A00000EC47 /* cpu_detect_x86_gcc.cpp in Sources */, ABAD0FC615ACE7A00000EC47 /* crc.cpp in Sources */, ABAD0FC715ACE7A00000EC47 /* datetime.cpp in Sources */, ABAD0FC815ACE7A00000EC47 /* debug.cpp in Sources */, @@ -2964,10 +2995,8 @@ ABAD0FD115ACE7A00000EC47 /* fatdir.cpp in Sources */, ABAD0FD215ACE7A00000EC47 /* fatfile.cpp in Sources */, ABAD0FD315ACE7A00000EC47 /* FIFO.cpp in Sources */, - ABAD0FD415ACE7A00000EC47 /* FIFOSampleBuffer.cpp in Sources */, ABAD0FD515ACE7A00000EC47 /* file_allocation_table.cpp in Sources */, ABAD0FD615ACE7A00000EC47 /* filetime.cpp in Sources */, - ABAD0FD715ACE7A00000EC47 /* FIRFilter.cpp in Sources */, ABAD0FD815ACE7A00000EC47 /* firmware.cpp in Sources */, ABAD0FD915ACE7A00000EC47 /* fs-linux.cpp in Sources */, ABAD0FDA15ACE7A00000EC47 /* gfx3d.cpp in Sources */, @@ -2983,13 +3012,11 @@ ABAD0FE415ACE7A00000EC47 /* md5.cpp in Sources */, ABAD0FE515ACE7A00000EC47 /* metaspu.cpp in Sources */, ABAD0FE615ACE7A00000EC47 /* MMU.cpp in Sources */, - ABAD0FE715ACE7A00000EC47 /* mmx_optimized.cpp in Sources */, ABAD0FE815ACE7A00000EC47 /* movie.cpp in Sources */, ABAD0FE915ACE7A00000EC47 /* NDSSystem.cpp in Sources */, ABAD0FEA15ACE7A00000EC47 /* partition.cpp in Sources */, ABAD0FEB15ACE7A00000EC47 /* path.cpp in Sources */, ABAD0FEC15ACE7A00000EC47 /* rasterize.cpp in Sources */, - ABAD0FED15ACE7A00000EC47 /* RateTransposer.cpp in Sources */, ABAD0FEE15ACE7A00000EC47 /* readwrite.cpp in Sources */, ABAD0FEF15ACE7A00000EC47 /* render3D.cpp in Sources */, ABAD0FF015ACE7A00000EC47 /* ROMReader.cpp in Sources */, @@ -3010,11 +3037,8 @@ ABAD0FFF15ACE7A00000EC47 /* slot2_rumblepak.cpp in Sources */, ABAD100015ACE7A00000EC47 /* sndOSX.cpp in Sources */, ABAD100115ACE7A00000EC47 /* SndOut.cpp in Sources */, - ABAD100215ACE7A00000EC47 /* SoundTouch.cpp in Sources */, ABAD100315ACE7A00000EC47 /* SPU.cpp in Sources */, - ABAD100415ACE7A00000EC47 /* sse_optimized.cpp in Sources */, ABAD100515ACE7A00000EC47 /* task.cpp in Sources */, - ABAD100615ACE7A00000EC47 /* TDStretch.cpp in Sources */, ABAD100715ACE7A00000EC47 /* texcache.cpp in Sources */, ABAD100815ACE7A00000EC47 /* thumb_instructions.cpp in Sources */, ABAD100915ACE7A00000EC47 /* Timestretcher.cpp in Sources */, @@ -3025,7 +3049,6 @@ ABAD100E15ACE7A00000EC47 /* version.cpp in Sources */, ABAD100F15ACE7A00000EC47 /* vfat.cpp in Sources */, ABAD101015ACE7A00000EC47 /* videofilter.cpp in Sources */, - ABAD101115ACE7A00000EC47 /* WavFile.cpp in Sources */, ABAD101215ACE7A00000EC47 /* wifi.cpp in Sources */, ABAD101315ACE7A00000EC47 /* xstring.cpp in Sources */, ABAD101415ACE7A00000EC47 /* main.m in Sources */, @@ -3057,6 +3080,19 @@ ABAD102E15ACE7A00000EC47 /* coreaudiosound.cpp in Sources */, ABAD102F15ACE7A00000EC47 /* ringbuffer.cpp in Sources */, ABA03573169127C000817C69 /* troubleshootingWindowDelegate.mm in Sources */, + AB279D7A16A4E6DE00ECC692 /* AAFilter.cpp in Sources */, + AB279D7B16A4E6DE00ECC692 /* BPMDetect.cpp in Sources */, + AB279D7C16A4E6DE00ECC692 /* cpu_detect_x86.cpp in Sources */, + AB279D7D16A4E6DE00ECC692 /* FIFOSampleBuffer.cpp in Sources */, + AB279D7E16A4E6DE00ECC692 /* FIRFilter.cpp in Sources */, + AB279D7F16A4E6DE00ECC692 /* mmx_optimized.cpp in Sources */, + AB279D8016A4E6DE00ECC692 /* PeakFinder.cpp in Sources */, + AB279D8116A4E6DE00ECC692 /* RateTransposer.cpp in Sources */, + AB279D8216A4E6DE00ECC692 /* SoundTouch.cpp in Sources */, + AB279D8316A4E6DE00ECC692 /* sse_optimized.cpp in Sources */, + AB279D8416A4E6DE00ECC692 /* TDStretch.cpp in Sources */, + AB6A187D16C9951C00384EED /* EmuControllerDelegate.mm in Sources */, + AB6A198416CAD66900384EED /* cocoa_GPU.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/desmume/src/cocoa/DeSmuME (XCode 4).xcodeproj/project.pbxproj b/desmume/src/cocoa/DeSmuME (XCode 4).xcodeproj/project.pbxproj index 16905764e..d5cc669f5 100644 --- a/desmume/src/cocoa/DeSmuME (XCode 4).xcodeproj/project.pbxproj +++ b/desmume/src/cocoa/DeSmuME (XCode 4).xcodeproj/project.pbxproj @@ -70,6 +70,11 @@ AB350B6A1478A5B3007165AC /* cocoa_hid.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB350B691478A5B3007165AC /* cocoa_hid.mm */; }; AB350BA51478AC96007165AC /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB350BA41478AC96007165AC /* IOKit.framework */; }; AB350D3B147A1D93007165AC /* HID_usage_strings.plist in Resources */ = {isa = PBXBuildFile; fileRef = AB350D3A147A1D93007165AC /* HID_usage_strings.plist */; }; + AB3A655E16CC5421001F5D4A /* EmuControllerDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3A655D16CC5421001F5D4A /* EmuControllerDelegate.mm */; }; + AB3A655F16CC5421001F5D4A /* EmuControllerDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3A655D16CC5421001F5D4A /* EmuControllerDelegate.mm */; }; + AB3A656116CC5438001F5D4A /* cocoa_GPU.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3A656016CC5438001F5D4A /* cocoa_GPU.mm */; }; + AB3A656216CC5438001F5D4A /* cocoa_GPU.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3A656016CC5438001F5D4A /* cocoa_GPU.mm */; }; + AB3A656316CC5438001F5D4A /* cocoa_GPU.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3A656016CC5438001F5D4A /* cocoa_GPU.mm */; }; AB3ACB7214C2361100D7D192 /* appDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6714C2361100D7D192 /* appDelegate.mm */; }; AB3ACB7314C2361100D7D192 /* cheatWindowDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6914C2361100D7D192 /* cheatWindowDelegate.mm */; }; AB3ACB7414C2361100D7D192 /* displayView.mm in Sources */ = {isa = PBXBuildFile; fileRef = AB3ACB6B14C2361100D7D192 /* displayView.mm */; }; @@ -679,6 +684,10 @@ AB350B691478A5B3007165AC /* cocoa_hid.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_hid.mm; sourceTree = ""; }; AB350BA41478AC96007165AC /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; }; AB350D38147A1D8D007165AC /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = English; path = translations/English.lproj/HID_usage_strings.plist; sourceTree = ""; }; + AB3A655C16CC5416001F5D4A /* EmuControllerDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EmuControllerDelegate.h; sourceTree = ""; }; + AB3A655D16CC5421001F5D4A /* EmuControllerDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = EmuControllerDelegate.mm; sourceTree = ""; }; + AB3A656016CC5438001F5D4A /* cocoa_GPU.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = cocoa_GPU.mm; sourceTree = ""; }; + AB3A656416CC5442001F5D4A /* cocoa_GPU.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cocoa_GPU.h; sourceTree = ""; }; AB3ACB6614C2361100D7D192 /* appDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = appDelegate.h; sourceTree = ""; }; AB3ACB6714C2361100D7D192 /* appDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = appDelegate.mm; sourceTree = ""; }; AB3ACB6814C2361100D7D192 /* cheatWindowDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cheatWindowDelegate.h; sourceTree = ""; }; @@ -1106,6 +1115,7 @@ AB58F32B1364F44B0074C376 /* cocoa_file.h */, ABE7F53C13EE1C7900FD3A71 /* cocoa_firmware.h */, AB9971CE134EDA0800531BA7 /* cocoa_globals.h */, + AB3A656416CC5442001F5D4A /* cocoa_GPU.h */, AB350B681478A5B3007165AC /* cocoa_hid.h */, ABD103FF1346652500AF11D1 /* cocoa_input.h */, ABD9A46313DB99B300777194 /* cocoa_mic.h */, @@ -1120,6 +1130,7 @@ ABD104121346652500AF11D1 /* cocoa_core.mm */, AB58F32C1364F44B0074C376 /* cocoa_file.mm */, ABE7F53D13EE1C7900FD3A71 /* cocoa_firmware.mm */, + AB3A656016CC5438001F5D4A /* cocoa_GPU.mm */, AB350B691478A5B3007165AC /* cocoa_hid.mm */, ABD104111346652500AF11D1 /* cocoa_input.mm */, ABD9A46413DB99B300777194 /* cocoa_mic.mm */, @@ -1224,6 +1235,7 @@ AB3ACB6614C2361100D7D192 /* appDelegate.h */, AB3ACB6814C2361100D7D192 /* cheatWindowDelegate.h */, AB3ACB6A14C2361100D7D192 /* displayView.h */, + AB3A655C16CC5416001F5D4A /* EmuControllerDelegate.h */, AB3ACB6C14C2361100D7D192 /* emuWindowDelegate.h */, AB3ACB6E14C2361100D7D192 /* inputPrefsView.h */, AB3ACB7014C2361100D7D192 /* preferencesWindowDelegate.h */, @@ -1231,6 +1243,7 @@ AB3ACB6714C2361100D7D192 /* appDelegate.mm */, AB3ACB6914C2361100D7D192 /* cheatWindowDelegate.mm */, AB3ACB6B14C2361100D7D192 /* displayView.mm */, + AB3A655D16CC5421001F5D4A /* EmuControllerDelegate.mm */, AB3ACB6D14C2361100D7D192 /* emuWindowDelegate.mm */, AB3ACB6F14C2361100D7D192 /* inputPrefsView.mm */, AB3ACB7114C2361100D7D192 /* preferencesWindowDelegate.mm */, @@ -2225,6 +2238,8 @@ AB405694169F5DCC0016AC3E /* x86util.cpp in Sources */, AB23567416C2F6F400DA782E /* macosx_10_5_compat.cpp in Sources */, AB23567516C2FAD800DA782E /* OGLRender_3_2.cpp in Sources */, + AB3A655F16CC5421001F5D4A /* EmuControllerDelegate.mm in Sources */, + AB3A656216CC5438001F5D4A /* cocoa_GPU.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2381,6 +2396,8 @@ AB405690169F5DCC0016AC3E /* x86operand.cpp in Sources */, AB405693169F5DCC0016AC3E /* x86util.cpp in Sources */, AB26D87C16B5253D00A2305C /* OGLRender_3_2.cpp in Sources */, + AB3A655E16CC5421001F5D4A /* EmuControllerDelegate.mm in Sources */, + AB3A656116CC5438001F5D4A /* cocoa_GPU.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2525,6 +2542,7 @@ AB405692169F5DCC0016AC3E /* x86operand.cpp in Sources */, AB405695169F5DCC0016AC3E /* x86util.cpp in Sources */, AB68A0DD16B139BC00DE0546 /* OGLRender_3_2.cpp in Sources */, + AB3A656316CC5438001F5D4A /* cocoa_GPU.mm in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/desmume/src/cocoa/Info (Debug).plist b/desmume/src/cocoa/Info (Debug).plist index 4303f6ced..8e0e9af3f 100644 --- a/desmume/src/cocoa/Info (Debug).plist +++ b/desmume/src/cocoa/Info (Debug).plist @@ -250,7 +250,7 @@ LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} NSHumanReadableCopyright - Copyright ©2012 DeSmuME Team. All rights reserved. + Copyright ©2013 DeSmuME Team. All rights reserved. NSMainNibFile MainMenu NSPrincipalClass diff --git a/desmume/src/cocoa/Info.plist b/desmume/src/cocoa/Info.plist index b3a5509ae..13a8122c6 100644 --- a/desmume/src/cocoa/Info.plist +++ b/desmume/src/cocoa/Info.plist @@ -250,7 +250,7 @@ LSMinimumSystemVersion ${MACOSX_DEPLOYMENT_TARGET} NSHumanReadableCopyright - Copyright ©2012 DeSmuME Team. All rights reserved. + Copyright ©2013 DeSmuME Team. All rights reserved. NSMainNibFile MainMenu NSPrincipalClass diff --git a/desmume/src/cocoa/cocoa_GPU.h b/desmume/src/cocoa/cocoa_GPU.h new file mode 100644 index 000000000..43c99fa67 --- /dev/null +++ b/desmume/src/cocoa/cocoa_GPU.h @@ -0,0 +1,89 @@ +/* + Copyright (C) 2013 DeSmuME team + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the this software. If not, see . + */ + +#import +#include +#include + + +@interface CocoaDSGPU : NSObject +{ + UInt32 gpuStateFlags; + OSSpinLock spinlockGpuState; + + BOOL gpuStateMainGPU; + BOOL gpuStateMainBG0; + BOOL gpuStateMainBG1; + BOOL gpuStateMainBG2; + BOOL gpuStateMainBG3; + BOOL gpuStateMainOBJ; + BOOL gpuStateSubGPU; + BOOL gpuStateSubBG0; + BOOL gpuStateSubBG1; + BOOL gpuStateSubBG2; + BOOL gpuStateSubBG3; + BOOL gpuStateSubOBJ; + + BOOL isCPUCoreCountAuto; + + pthread_mutex_t *mutexProducer; +} + +@property (assign) UInt32 gpuStateFlags; +@property (assign) pthread_mutex_t *mutexProducer; + +@property (assign) NSInteger render3DRenderingEngine; +@property (assign) BOOL render3DHighPrecisionColorInterpolation; +@property (assign) BOOL render3DEdgeMarking; +@property (assign) BOOL render3DFog; +@property (assign) BOOL render3DTextures; +@property (assign) NSUInteger render3DDepthComparisonThreshold; +@property (assign) NSUInteger render3DThreads; +@property (assign) BOOL render3DLineHack; +@property (assign) BOOL render3DMultisample; + +- (BOOL) gpuStateByBit:(const UInt32)stateBit; +- (BOOL) isGPUTypeDisplayed:(const NSInteger)theGpuType; +- (void) hideGPUType:(const NSInteger)theGpuType; +- (void) showGPUType:(const NSInteger)theGpuType; + +@end + +#ifdef __cplusplus +extern "C" +{ +#endif + +void SetGPULayerState(const int gpuType, const unsigned int i, const bool state); +bool GetGPULayerState(const int gpuType, const unsigned int i); +void SetGPUDisplayState(const int gpuType, const bool state); +bool GetGPUDisplayState(const int gpuType); + +bool OSXOpenGLRendererInit(); +bool OSXOpenGLRendererBegin(); +void OSXOpenGLRendererEnd(); + +bool CreateOpenGLRenderer(); +void DestroyOpenGLRenderer(); +void RequestOpenGLRenderer_3_2(bool request_3_2); +void SetOpenGLRendererFunctions(bool (*initFunction)(), + bool (*beginOGLFunction)(), + void (*endOGLFunction)()); + +#ifdef __cplusplus +} +#endif diff --git a/desmume/src/cocoa/cocoa_GPU.mm b/desmume/src/cocoa/cocoa_GPU.mm new file mode 100644 index 000000000..161b2d6e0 --- /dev/null +++ b/desmume/src/cocoa/cocoa_GPU.mm @@ -0,0 +1,811 @@ +/* + Copyright (C) 2013 DeSmuME team + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the this software. If not, see . + */ + +#import "cocoa_GPU.h" +#import "cocoa_globals.h" +#import "cocoa_util.h" + +#include "../NDSSystem.h" +#include "../GPU.h" +#include "../rasterize.h" + +#ifdef MAC_OS_X_VERSION_10_7 +#include "../OGLRender_3_2.h" +#else +#include "../OGLRender.h" +#endif + +#include + +#undef BOOL + +GPU3DInterface *core3DList[] = { + &gpu3DNull, + &gpu3DRasterize, + &gpu3Dgl, + NULL +}; + +@implementation CocoaDSGPU + +@dynamic gpuStateFlags; +@synthesize mutexProducer; + +@dynamic render3DRenderingEngine; +@dynamic render3DHighPrecisionColorInterpolation; +@dynamic render3DEdgeMarking; +@dynamic render3DFog; +@dynamic render3DTextures; +@dynamic render3DDepthComparisonThreshold; +@dynamic render3DThreads; +@dynamic render3DLineHack; +@dynamic render3DMultisample; + + +- (id)init +{ + self = [super init]; + if (self == nil) + { + return self; + } + + spinlockGpuState = OS_SPINLOCK_INIT; + mutexProducer = NULL; + + gpuStateFlags = GPUSTATE_MAIN_GPU_MASK | + GPUSTATE_MAIN_BG0_MASK | + GPUSTATE_MAIN_BG1_MASK | + GPUSTATE_MAIN_BG2_MASK | + GPUSTATE_MAIN_BG3_MASK | + GPUSTATE_MAIN_OBJ_MASK | + GPUSTATE_SUB_GPU_MASK | + GPUSTATE_SUB_BG0_MASK | + GPUSTATE_SUB_BG1_MASK | + GPUSTATE_SUB_BG2_MASK | + GPUSTATE_SUB_BG3_MASK | + GPUSTATE_SUB_OBJ_MASK; + + gpuStateMainGPU = YES; + gpuStateMainBG0 = YES; + gpuStateMainBG1 = YES; + gpuStateMainBG2 = YES; + gpuStateMainBG3 = YES; + gpuStateMainOBJ = YES; + gpuStateSubGPU = YES; + gpuStateSubBG0 = YES; + gpuStateSubBG1 = YES; + gpuStateSubBG2 = YES; + gpuStateSubBG3 = YES; + gpuStateSubOBJ = YES; + + isCPUCoreCountAuto = NO; + + SetOpenGLRendererFunctions(&OSXOpenGLRendererInit, + &OSXOpenGLRendererBegin, + &OSXOpenGLRendererEnd); + + return self; +} + +- (void)dealloc +{ + DestroyOpenGLRenderer(); + + [super dealloc]; +} + +- (void) setGpuStateFlags:(UInt32)flags +{ + OSSpinLockLock(&spinlockGpuState); + gpuStateFlags = flags; + OSSpinLockUnlock(&spinlockGpuState); + + pthread_mutex_lock(self.mutexProducer); + + if (flags & GPUSTATE_MAIN_GPU_MASK) + { + SetGPUDisplayState(DS_GPU_TYPE_MAIN, true); + gpuStateMainGPU = YES; + } + else + { + SetGPUDisplayState(DS_GPU_TYPE_MAIN, false); + gpuStateMainGPU = NO; + } + + if (flags & GPUSTATE_MAIN_BG0_MASK) + { + SetGPULayerState(DS_GPU_TYPE_MAIN, 0, true); + gpuStateMainBG0 = YES; + } + else + { + SetGPULayerState(DS_GPU_TYPE_MAIN, 0, false); + gpuStateMainBG0 = NO; + } + + if (flags & GPUSTATE_MAIN_BG1_MASK) + { + SetGPULayerState(DS_GPU_TYPE_MAIN, 1, true); + gpuStateMainBG1 = YES; + } + else + { + SetGPULayerState(DS_GPU_TYPE_MAIN, 1, false); + gpuStateMainBG1 = NO; + } + + if (flags & GPUSTATE_MAIN_BG2_MASK) + { + SetGPULayerState(DS_GPU_TYPE_MAIN, 2, true); + gpuStateMainBG2 = YES; + } + else + { + SetGPULayerState(DS_GPU_TYPE_MAIN, 2, false); + gpuStateMainBG2 = NO; + } + + if (flags & GPUSTATE_MAIN_BG3_MASK) + { + SetGPULayerState(DS_GPU_TYPE_MAIN, 3, true); + gpuStateMainBG3 = YES; + } + else + { + SetGPULayerState(DS_GPU_TYPE_MAIN, 3, false); + gpuStateMainBG3 = NO; + } + + if (flags & GPUSTATE_MAIN_OBJ_MASK) + { + SetGPULayerState(DS_GPU_TYPE_MAIN, 4, true); + gpuStateMainOBJ = YES; + } + else + { + SetGPULayerState(DS_GPU_TYPE_MAIN, 4, false); + gpuStateMainOBJ = NO; + } + + if (flags & GPUSTATE_SUB_GPU_MASK) + { + SetGPUDisplayState(DS_GPU_TYPE_SUB, true); + gpuStateSubGPU = YES; + } + else + { + SetGPUDisplayState(DS_GPU_TYPE_SUB, false); + gpuStateSubGPU = NO; + } + + if (flags & GPUSTATE_SUB_BG0_MASK) + { + SetGPULayerState(DS_GPU_TYPE_SUB, 0, true); + gpuStateSubBG0 = YES; + } + else + { + SetGPULayerState(DS_GPU_TYPE_SUB, 0, false); + gpuStateSubBG0 = NO; + } + + if (flags & GPUSTATE_SUB_BG1_MASK) + { + SetGPULayerState(DS_GPU_TYPE_SUB, 1, true); + gpuStateSubBG1 = YES; + } + else + { + SetGPULayerState(DS_GPU_TYPE_SUB, 1, false); + gpuStateSubBG1 = NO; + } + + if (flags & GPUSTATE_SUB_BG2_MASK) + { + SetGPULayerState(DS_GPU_TYPE_SUB, 2, true); + gpuStateSubBG2 = YES; + } + else + { + SetGPULayerState(DS_GPU_TYPE_SUB, 2, false); + gpuStateSubBG2 = NO; + } + + if (flags & GPUSTATE_SUB_BG3_MASK) + { + SetGPULayerState(DS_GPU_TYPE_SUB, 3, true); + gpuStateSubBG3 = YES; + } + else + { + SetGPULayerState(DS_GPU_TYPE_SUB, 3, false); + gpuStateSubBG3 = NO; + } + + if (flags & GPUSTATE_SUB_OBJ_MASK) + { + SetGPULayerState(DS_GPU_TYPE_SUB, 4, true); + gpuStateSubOBJ = YES; + } + else + { + SetGPULayerState(DS_GPU_TYPE_SUB, 4, false); + gpuStateSubOBJ = NO; + } + + pthread_mutex_unlock(self.mutexProducer); +} + +- (UInt32) gpuStateFlags +{ + OSSpinLockLock(&spinlockGpuState); + const UInt32 flags = gpuStateFlags; + OSSpinLockUnlock(&spinlockGpuState); + + return flags; +} + +- (void) setRender3DRenderingEngine:(NSInteger)methodID +{ + pthread_mutex_lock(self.mutexProducer); + NDS_3D_ChangeCore(methodID); + pthread_mutex_unlock(self.mutexProducer); +} + +- (NSInteger) render3DRenderingEngine +{ + pthread_mutex_lock(self.mutexProducer); + const NSInteger methodID = (NSInteger)cur3DCore; + pthread_mutex_unlock(self.mutexProducer); + + return methodID; +} + +- (void) setRender3DHighPrecisionColorInterpolation:(BOOL)state +{ + pthread_mutex_lock(self.mutexProducer); + CommonSettings.GFX3D_HighResolutionInterpolateColor = state ? true : false; + pthread_mutex_unlock(self.mutexProducer); +} + +- (BOOL) render3DHighPrecisionColorInterpolation +{ + pthread_mutex_lock(self.mutexProducer); + const BOOL state = CommonSettings.GFX3D_HighResolutionInterpolateColor ? YES : NO; + pthread_mutex_unlock(self.mutexProducer); + + return state; +} + +- (void) setRender3DEdgeMarking:(BOOL)state +{ + pthread_mutex_lock(self.mutexProducer); + CommonSettings.GFX3D_EdgeMark = state ? true : false; + pthread_mutex_unlock(self.mutexProducer); +} + +- (BOOL) render3DEdgeMarking +{ + pthread_mutex_lock(self.mutexProducer); + const BOOL state = CommonSettings.GFX3D_EdgeMark ? YES : NO; + pthread_mutex_unlock(self.mutexProducer); + + return state; +} + +- (void) setRender3DFog:(BOOL)state +{ + pthread_mutex_lock(self.mutexProducer); + CommonSettings.GFX3D_Fog = state ? true : false; + pthread_mutex_unlock(self.mutexProducer); +} + +- (BOOL) render3DFog +{ + pthread_mutex_lock(self.mutexProducer); + const BOOL state = CommonSettings.GFX3D_Fog ? YES : NO; + pthread_mutex_unlock(self.mutexProducer); + + return state; +} + +- (void) setRender3DTextures:(BOOL)state +{ + pthread_mutex_lock(self.mutexProducer); + CommonSettings.GFX3D_Texture = state ? true : false; + pthread_mutex_unlock(self.mutexProducer); +} + +- (BOOL) render3DTextures +{ + pthread_mutex_lock(self.mutexProducer); + const BOOL state = CommonSettings.GFX3D_Texture ? YES : NO; + pthread_mutex_unlock(self.mutexProducer); + + return state; +} + +- (void) setRender3DDepthComparisonThreshold:(NSUInteger)threshold +{ + pthread_mutex_lock(self.mutexProducer); + CommonSettings.GFX3D_Zelda_Shadow_Depth_Hack = threshold; + pthread_mutex_unlock(self.mutexProducer); +} + +- (NSUInteger) render3DDepthComparisonThreshold +{ + pthread_mutex_lock(self.mutexProducer); + const NSUInteger threshold = (NSUInteger)CommonSettings.GFX3D_Zelda_Shadow_Depth_Hack; + pthread_mutex_unlock(self.mutexProducer); + + return threshold; +} + +- (void) setRender3DThreads:(NSUInteger)numberThreads +{ + NSUInteger numberCores = [[NSProcessInfo processInfo] activeProcessorCount]; + if (numberThreads == 0) + { + isCPUCoreCountAuto = YES; + + if (numberCores >= 8) + { + numberCores = 8; + } + else if (numberCores >= 4) + { + numberCores = 4; + } + else if (numberCores >= 2) + { + numberCores = 2; + } + else + { + numberCores = 1; + } + } + else + { + isCPUCoreCountAuto = NO; + numberCores = numberThreads; + } + + NSInteger renderingEngineID = [self render3DRenderingEngine]; + + pthread_mutex_lock(self.mutexProducer); + + CommonSettings.num_cores = numberCores; + if (renderingEngineID == CORE3DLIST_SWRASTERIZE) + { + NDS_3D_ChangeCore(CORE3DLIST_SWRASTERIZE); + } + else if (renderingEngineID == CORE3DLIST_OPENGL) + { + NDS_3D_ChangeCore(CORE3DLIST_OPENGL); + } + + pthread_mutex_unlock(self.mutexProducer); +} + +- (NSUInteger) render3DThreads +{ + pthread_mutex_lock(self.mutexProducer); + const NSUInteger numberThreads = isCPUCoreCountAuto ? 0 : (NSUInteger)CommonSettings.num_cores; + pthread_mutex_unlock(self.mutexProducer); + + return numberThreads; +} + +- (void) setRender3DLineHack:(BOOL)state +{ + pthread_mutex_lock(self.mutexProducer); + CommonSettings.GFX3D_LineHack = state ? true : false; + pthread_mutex_unlock(self.mutexProducer); +} + +- (BOOL) render3DLineHack +{ + pthread_mutex_lock(self.mutexProducer); + const BOOL state = CommonSettings.GFX3D_LineHack ? YES : NO; + pthread_mutex_unlock(self.mutexProducer); + + return state; +} + +- (void) setRender3DMultisample:(BOOL)state +{ + pthread_mutex_lock(self.mutexProducer); + CommonSettings.GFX3D_Renderer_Multisample = state ? true : false; + pthread_mutex_unlock(self.mutexProducer); +} + +- (BOOL) render3DMultisample +{ + pthread_mutex_lock(self.mutexProducer); + const BOOL state = CommonSettings.GFX3D_Renderer_Multisample ? YES : NO; + pthread_mutex_unlock(self.mutexProducer); + + return state; +} + +- (BOOL) gpuStateByBit:(const UInt32)stateBit +{ + return (self.gpuStateFlags & (1 << stateBit)) ? YES : NO; +} + +- (BOOL) isGPUTypeDisplayed:(const NSInteger)theGpuType +{ + BOOL result = NO; + const UInt32 flags = self.gpuStateFlags; + + switch (theGpuType) + { + case DS_GPU_TYPE_MAIN: + if (flags & GPUSTATE_MAIN_GPU_MASK) + { + result = YES; + } + break; + + case DS_GPU_TYPE_SUB: + if (flags & GPUSTATE_SUB_GPU_MASK) + { + result = YES; + } + break; + + case DS_GPU_TYPE_COMBO: + if (flags & (GPUSTATE_MAIN_GPU_MASK | GPUSTATE_SUB_GPU_MASK)) + { + result = YES; + } + break; + + default: + break; + } + + return result; +} + +- (void) hideGPUType:(const NSInteger)theGpuType +{ + UInt32 flags = self.gpuStateFlags; + + switch (theGpuType) + { + case DS_GPU_TYPE_MAIN: + flags &= ~GPUSTATE_MAIN_GPU_MASK; + break; + + case DS_GPU_TYPE_SUB: + flags &= ~GPUSTATE_SUB_GPU_MASK; + break; + + case DS_GPU_TYPE_COMBO: + flags &= ~GPUSTATE_MAIN_GPU_MASK; + flags &= ~GPUSTATE_SUB_GPU_MASK; + break; + + default: + break; + } + + self.gpuStateFlags = flags; +} + +- (void) showGPUType:(const NSInteger)theGpuType +{ + UInt32 flags = self.gpuStateFlags; + + switch (theGpuType) + { + case DS_GPU_TYPE_MAIN: + flags |= GPUSTATE_MAIN_GPU_MASK; + break; + + case DS_GPU_TYPE_SUB: + flags |= GPUSTATE_SUB_GPU_MASK; + break; + + case DS_GPU_TYPE_COMBO: + flags |= GPUSTATE_MAIN_GPU_MASK; + flags |= GPUSTATE_SUB_GPU_MASK; + break; + + default: + break; + } + + self.gpuStateFlags = flags; +} + +@end + +void SetGPULayerState(const int gpuType, const unsigned int i, const bool state) +{ + GPU *theGpu = NULL; + + // Check bounds on the layer index. + if(i > 4) + { + return; + } + + switch (gpuType) + { + case DS_GPU_TYPE_SUB: + theGpu = SubScreen.gpu; + break; + + case DS_GPU_TYPE_MAIN: + theGpu = MainScreen.gpu; + break; + + case DS_GPU_TYPE_COMBO: + SetGPULayerState(DS_GPU_TYPE_SUB, i, state); // Recursive call + theGpu = MainScreen.gpu; + break; + + default: + break; + } + + if (theGpu != NULL) + { + if (state) + { + GPU_addBack(theGpu, i); + } + else + { + GPU_remove(theGpu, i); + } + } +} + +bool GetGPULayerState(const int gpuType, const unsigned int i) +{ + bool result = false; + + // Check bounds on the layer index. + if(i > 4) + { + return result; + } + + switch (gpuType) + { + case DS_GPU_TYPE_SUB: + if (SubScreen.gpu != nil) + { + result = CommonSettings.dispLayers[SubScreen.gpu->core][i]; + } + break; + + case DS_GPU_TYPE_MAIN: + if (MainScreen.gpu != nil) + { + result = CommonSettings.dispLayers[MainScreen.gpu->core][i]; + } + break; + + case DS_GPU_TYPE_COMBO: + if (SubScreen.gpu != nil && MainScreen.gpu != nil) + { + result = (CommonSettings.dispLayers[SubScreen.gpu->core][i] && CommonSettings.dispLayers[MainScreen.gpu->core][i]); + } + break; + + default: + break; + } + + return result; +} + +void SetGPUDisplayState(const int gpuType, const bool state) +{ + switch (gpuType) + { + case DS_GPU_TYPE_SUB: + CommonSettings.showGpu.sub = state; + break; + + case DS_GPU_TYPE_MAIN: + CommonSettings.showGpu.main = state; + break; + + case DS_GPU_TYPE_COMBO: + CommonSettings.showGpu.sub = state; + CommonSettings.showGpu.main = state; + break; + + default: + break; + } +} + +bool GetGPUDisplayState(const int gpuType) +{ + bool result = false; + + switch (gpuType) + { + case DS_GPU_TYPE_SUB: + result = CommonSettings.showGpu.sub; + break; + + case DS_GPU_TYPE_MAIN: + result = CommonSettings.showGpu.main; + break; + + case DS_GPU_TYPE_COMBO: + result = (CommonSettings.showGpu.sub && CommonSettings.showGpu.main); + break; + + default: + break; + } + + return result; +} + +CGLContextObj OSXOpenGLRendererContext = NULL; +CGLPBufferObj OSXOpenGLRendererPBuffer = NULL; + +bool OSXOpenGLRendererInit() +{ + static bool isContextAlreadyCreated = false; + + if (!isContextAlreadyCreated) + { + isContextAlreadyCreated = CreateOpenGLRenderer(); + } + + return true; +} + +bool OSXOpenGLRendererBegin() +{ + CGLSetCurrentContext(OSXOpenGLRendererContext); + + return true; +} + +void OSXOpenGLRendererEnd() +{ + +} + +bool CreateOpenGLRenderer() +{ + bool result = false; + bool useContext_3_2 = false; + CGLPixelFormatObj cglPixFormat = NULL; + CGLContextObj newContext = NULL; + CGLPBufferObj newPBuffer = NULL; + GLint virtualScreenCount = 0; + + CGLPixelFormatAttribute attrs[] = { + kCGLPFAColorSize, (CGLPixelFormatAttribute)24, + kCGLPFAAlphaSize, (CGLPixelFormatAttribute)8, + kCGLPFADepthSize, (CGLPixelFormatAttribute)24, + kCGLPFAStencilSize, (CGLPixelFormatAttribute)8, + kCGLPFAAccelerated, + (CGLPixelFormatAttribute)0, (CGLPixelFormatAttribute)0, + (CGLPixelFormatAttribute)0 + }; + +#ifdef MAC_OS_X_VERSION_10_7 + // If we can support a 3.2 Core Profile context, then request that in our + // pixel format attributes. + useContext_3_2 = [CocoaDSUtil OSVersionCheckMajor:10 minor:7 revision:0] ? true : false; + if (useContext_3_2) + { + attrs[9] = kCGLPFAOpenGLProfile; + attrs[10] = (CGLPixelFormatAttribute)kCGLOGLPVersion_3_2_Core; + } +#endif + + CGLChoosePixelFormat(attrs, &cglPixFormat, &virtualScreenCount); + if (cglPixFormat == NULL) + { + // Remove the HW rendering requirement and try again. Note that this will + // result in SW rendering, which will cause a substantial speed hit. + attrs[8] = (CGLPixelFormatAttribute)0; + CGLChoosePixelFormat(attrs, &cglPixFormat, &virtualScreenCount); + if (cglPixFormat == NULL) + { + return result; + } + } + + CGLCreateContext(cglPixFormat, NULL, &newContext); + CGLReleasePixelFormat(cglPixFormat); + + // Create a PBuffer for legacy contexts since the availability of FBOs + // is not guaranteed. + if (!useContext_3_2) + { + CGLCreatePBuffer(GPU_DISPLAY_WIDTH, GPU_DISPLAY_HEIGHT, GL_TEXTURE_2D, GL_RGBA, 0, &newPBuffer); + + if (newPBuffer == NULL) + { + CGLReleaseContext(newContext); + return result; + } + else + { + GLint virtualScreenID = 0; + + CGLGetVirtualScreen(newContext, &virtualScreenID); + CGLSetPBuffer(newContext, newPBuffer, 0, 0, virtualScreenID); + } + } + + RequestOpenGLRenderer_3_2(useContext_3_2); + OSXOpenGLRendererContext = newContext; + OSXOpenGLRendererPBuffer = newPBuffer; + + result = true; + return result; +} + +void DestroyOpenGLRenderer() +{ + if (OSXOpenGLRendererContext == NULL) + { + return; + } + + CGLReleasePBuffer(OSXOpenGLRendererPBuffer); + CGLReleaseContext(OSXOpenGLRendererContext); + OSXOpenGLRendererContext = NULL; + OSXOpenGLRendererPBuffer = NULL; +} + +void RequestOpenGLRenderer_3_2(bool request_3_2) +{ +#ifdef OGLRENDER_3_2_H + if (request_3_2) + { + OGLLoadEntryPoints_3_2_Func = &OGLLoadEntryPoints_3_2; + OGLCreateRenderer_3_2_Func = &OGLCreateRenderer_3_2; + } + else + { + OGLLoadEntryPoints_3_2_Func = NULL; + OGLCreateRenderer_3_2_Func = NULL; + } +#else + OGLLoadEntryPoints_3_2_Func = NULL; + OGLCreateRenderer_3_2_Func = NULL; +#endif +} + +void SetOpenGLRendererFunctions(bool (*initFunction)(), + bool (*beginOGLFunction)(), + void (*endOGLFunction)()) +{ + oglrender_init = initFunction; + oglrender_beginOpenGL = beginOGLFunction; + oglrender_endOpenGL = endOGLFunction; +} diff --git a/desmume/src/cocoa/cocoa_cheat.h b/desmume/src/cocoa/cocoa_cheat.h index 530c77e7b..8ee228056 100644 --- a/desmume/src/cocoa/cocoa_cheat.h +++ b/desmume/src/cocoa/cocoa_cheat.h @@ -1,6 +1,6 @@ /* Copyright (C) 2011 Roger Manuel - Copyright (C) 2012 DeSmuME team + Copyright (C) 2011-2013 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,6 +18,7 @@ #import #include "../cheatSystem.h" +#undef BOOL @class CocoaDSCore; diff --git a/desmume/src/cocoa/cocoa_core.h b/desmume/src/cocoa/cocoa_core.h index b80f35270..5cb7d95cd 100644 --- a/desmume/src/cocoa/cocoa_core.h +++ b/desmume/src/cocoa/cocoa_core.h @@ -1,6 +1,6 @@ /* Copyright (C) 2011 Roger Manuel - Copyright (C) 2012 DeSmuME team + Copyright (C) 2011-2013 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,6 +24,7 @@ @class CocoaDSController; @class CocoaDSFirmware; +@class CocoaDSGPU; @class CocoaDSOutput; typedef struct @@ -45,6 +46,7 @@ typedef struct { CocoaDSController *cdsController; CocoaDSFirmware *cdsFirmware; + CocoaDSGPU *cdsGPU; NSMutableArray *cdsOutputList; pthread_t coreThread; @@ -77,7 +79,8 @@ typedef struct @property (retain) CocoaDSController *cdsController; @property (retain) CocoaDSFirmware *cdsFirmware; -@property (readonly) NSMutableArray *cdsOutputList; +@property (retain) CocoaDSGPU *cdsGPU; +@property (assign) NSMutableArray *cdsOutputList; @property (assign) BOOL masterExecute; @property (assign) BOOL isFrameSkipEnabled; diff --git a/desmume/src/cocoa/cocoa_core.mm b/desmume/src/cocoa/cocoa_core.mm index 17644a5bf..078fa89dc 100644 --- a/desmume/src/cocoa/cocoa_core.mm +++ b/desmume/src/cocoa/cocoa_core.mm @@ -1,6 +1,6 @@ /* Copyright (C) 2011 Roger Manuel - Copyright (C) 2012 DeSmuME team + Copyright (C) 2011-2013 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,10 +19,12 @@ #import "cocoa_core.h" #import "cocoa_input.h" #import "cocoa_firmware.h" +#import "cocoa_GPU.h" #import "cocoa_globals.h" #import "cocoa_output.h" #import "cocoa_rom.h" #import "cocoa_util.h" + #include #include @@ -38,6 +40,7 @@ volatile bool execute = true; @dynamic cdsController; @synthesize cdsFirmware; +@synthesize cdsGPU; @synthesize cdsOutputList; @dynamic masterExecute; @@ -77,6 +80,7 @@ static BOOL isCoreStarted = NO; cdsController = nil; cdsFirmware = nil; + cdsGPU = [[[[CocoaDSGPU alloc] init] autorelease] retain]; cdsOutputList = [[NSMutableArray alloc] initWithCapacity:32]; emulationFlags = EMULATION_ADVANCED_BUS_LEVEL_TIMING_MASK; @@ -120,6 +124,8 @@ static BOOL isCoreStarted = NO; pthread_cond_init(&threadParam.condThreadExecute, NULL); pthread_create(&coreThread, NULL, &RunCoreThread, &threadParam); + [cdsGPU setMutexProducer:mutexCoreExecute]; + return self; } @@ -155,6 +161,8 @@ static BOOL isCoreStarted = NO; self.cdsController = nil; self.cdsFirmware = nil; + self.cdsGPU = nil; + [self removeAllOutputs]; [cdsOutputList release]; @@ -201,30 +209,14 @@ static BOOL isCoreStarted = NO; - (void) setMasterExecute:(BOOL)theState { OSSpinLockLock(&spinlockMasterExecute); - - if (theState) - { - execute = true; - } - else - { - execute = false; - } - + execute = theState ? true : false; OSSpinLockUnlock(&spinlockMasterExecute); } - (BOOL) masterExecute { - BOOL theState = NO; - OSSpinLockLock(&spinlockMasterExecute); - - if (execute) - { - theState = YES; - } - + const BOOL theState = execute ? YES : NO; OSSpinLockUnlock(&spinlockMasterExecute); return theState; @@ -282,17 +274,10 @@ static BOOL isCoreStarted = NO; - (BOOL) isFrameSkipEnabled { - BOOL theState = NO; - pthread_mutex_lock(&threadParam.mutexThreadExecute); - bool cState = threadParam.isFrameSkipEnabled; + const BOOL theState = threadParam.isFrameSkipEnabled ? YES : NO; pthread_mutex_unlock(&threadParam.mutexThreadExecute); - if (cState) - { - theState = YES; - } - return theState; } @@ -307,7 +292,7 @@ static BOOL isCoreStarted = NO; - (CGFloat) speedScalar { OSSpinLockLock(&spinlockExecutionChange); - CGFloat scalar = speedScalar; + const CGFloat scalar = speedScalar; OSSpinLockUnlock(&spinlockExecutionChange); return scalar; @@ -324,7 +309,7 @@ static BOOL isCoreStarted = NO; - (BOOL) isSpeedLimitEnabled { OSSpinLockLock(&spinlockExecutionChange); - BOOL enabled = isSpeedLimitEnabled; + const BOOL enabled = isSpeedLimitEnabled; OSSpinLockUnlock(&spinlockExecutionChange); return enabled; @@ -333,30 +318,14 @@ static BOOL isCoreStarted = NO; - (void) setIsCheatingEnabled:(BOOL)theState { OSSpinLockLock(&spinlockCheatEnableFlag); - - if (theState) - { - CommonSettings.cheatsDisable = false; - } - else - { - CommonSettings.cheatsDisable = true; - } - + CommonSettings.cheatsDisable = theState ? false : true; OSSpinLockUnlock(&spinlockCheatEnableFlag); } - (BOOL) isCheatingEnabled { - BOOL theState = YES; - OSSpinLockLock(&spinlockCheatEnableFlag); - - if (CommonSettings.cheatsDisable) - { - theState = NO; - } - + BOOL theState = CommonSettings.cheatsDisable ? NO : YES; OSSpinLockUnlock(&spinlockCheatEnableFlag); return theState; @@ -475,7 +444,7 @@ static BOOL isCoreStarted = NO; - (NSUInteger) emulationFlags { OSSpinLockLock(&spinlockEmulationFlags); - NSUInteger theFlags = emulationFlags; + const NSUInteger theFlags = emulationFlags; OSSpinLockUnlock(&spinlockEmulationFlags); return theFlags; @@ -483,21 +452,19 @@ static BOOL isCoreStarted = NO; - (void) setCpuEmulationEngine:(NSInteger)engineID { + OSSpinLockLock(&spinlockCPUEmulationEngine); #if defined(__i386__) || defined(__x86_64__) - OSSpinLockLock(&spinlockCPUEmulationEngine); cpuEmulationEngine = engineID; - OSSpinLockUnlock(&spinlockCPUEmulationEngine); #else - OSSpinLockLock(&spinlockCPUEmulationEngine); cpuEmulationEngine = CPU_EMULATION_ENGINE_INTERPRETER; - OSSpinLockUnlock(&spinlockCPUEmulationEngine); #endif + OSSpinLockUnlock(&spinlockCPUEmulationEngine); } - (NSInteger) cpuEmulationEngine { OSSpinLockLock(&spinlockCPUEmulationEngine); - NSInteger engineID = cpuEmulationEngine; + const NSInteger engineID = cpuEmulationEngine; OSSpinLockUnlock(&spinlockCPUEmulationEngine); return engineID; @@ -524,7 +491,7 @@ static BOOL isCoreStarted = NO; - (NSInteger) coreState { pthread_mutex_lock(&threadParam.mutexThreadExecute); - NSInteger theState = threadParam.state; + const NSInteger theState = threadParam.state; pthread_mutex_unlock(&threadParam.mutexThreadExecute); return theState; @@ -654,16 +621,10 @@ static BOOL isCoreStarted = NO; ********************************************************************************************/ - (void) setDynaRec { - NSInteger engineID = [self cpuEmulationEngine]; - bool useDynaRec = false; - - if (engineID == CPU_EMULATION_ENGINE_DYNAMIC_RECOMPILER) - { - useDynaRec = true; - } + const NSInteger engineID = [self cpuEmulationEngine]; pthread_mutex_lock(&threadParam.mutexThreadExecute); - CommonSettings.use_jit = useDynaRec; + CommonSettings.use_jit = (engineID == CPU_EMULATION_ENGINE_DYNAMIC_RECOMPILER); pthread_mutex_unlock(&threadParam.mutexThreadExecute); } diff --git a/desmume/src/cocoa/cocoa_output.h b/desmume/src/cocoa/cocoa_output.h index aaf74374b..f7f272b20 100644 --- a/desmume/src/cocoa/cocoa_output.h +++ b/desmume/src/cocoa/cocoa_output.h @@ -1,6 +1,6 @@ /* Copyright (C) 2011 Roger Manuel - Copyright (C) 2013 DeSmuME team + Copyright (C) 2011-2013 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -144,62 +144,19 @@ typedef struct @interface CocoaDSDisplay : CocoaDSOutput { - UInt32 gpuStateFlags; id delegate; NSInteger displayMode; NSSize frameSize; - pthread_mutex_t *mutexRender3D; OSSpinLock spinlockDelegate; - OSSpinLock spinlockGpuState; OSSpinLock spinlockDisplayType; - OSSpinLock spinlockRender3DRenderingEngine; - OSSpinLock spinlockRender3DHighPrecisionColorInterpolation; - OSSpinLock spinlockRender3DEdgeMarking; - OSSpinLock spinlockRender3DFog; - OSSpinLock spinlockRender3DTextures; - OSSpinLock spinlockRender3DDepthComparisonThreshold; - OSSpinLock spinlockRender3DThreads; - OSSpinLock spinlockRender3DLineHack; - OSSpinLock spinlockRender3DMultisample; } -@property (assign) UInt32 gpuStateFlags; @property (retain) id delegate; @property (assign) NSInteger displayMode; @property (readonly) NSSize frameSize; -@property (readonly) pthread_mutex_t *mutexRender3D; -- (void) setRender3DRenderingEngine:(NSInteger)methodID; -- (NSInteger) render3DRenderingEngine; -- (void) setRender3DHighPrecisionColorInterpolation:(BOOL)state; -- (BOOL) render3DHighPrecisionColorInterpolation; -- (void) setRender3DEdgeMarking:(BOOL)state; -- (BOOL) render3DEdgeMarking; -- (void) setRender3DFog:(BOOL)state; -- (BOOL) render3DFog; -- (void) setRender3DTextures:(BOOL)state; -- (BOOL) render3DTextures; -- (void) setRender3DDepthComparisonThreshold:(NSUInteger)threshold; -- (NSUInteger) render3DDepthComparisonThreshold; -- (void) setRender3DThreads:(NSUInteger)numberThreads; -- (NSUInteger) render3DThreads; -- (void) setRender3DLineHack:(BOOL)state; -- (BOOL) render3DLineHack; -- (void) setRender3DMultisample:(BOOL)state; -- (BOOL) render3DMultisample; - -- (void) handleChangeGpuStateFlags:(NSData *)flagsData; - (void) handleChangeDisplayMode:(NSData *)displayModeData; -- (void) handleSetRender3DRenderingEngine:(NSData *)methodIdData; -- (void) handleSetRender3DHighPrecisionColorInterpolation:(NSData *)stateData; -- (void) handleSetRender3DEdgeMarking:(NSData *)stateData; -- (void) handleSetRender3DFog:(NSData *)stateData; -- (void) handleSetRender3DTextures:(NSData *)stateData; -- (void) handleSetRender3DDepthComparisonThreshold:(NSData *)thresholdData; -- (void) handleSetRender3DThreads:(NSData *)numberThreadsData; -- (void) handleSetRender3DLineHack:(NSData *)stateData; -- (void) handleSetRender3DMultisample:(NSData *)stateData; - (void) handleSetViewToBlack; - (void) handleSetViewToWhite; - (void) handleRequestScreenshot:(NSData *)fileURLStringData fileTypeData:(NSData *)fileTypeData; @@ -210,11 +167,6 @@ typedef struct - (NSImage *) image; - (NSBitmapImageRep *) bitmapImageRep; -- (BOOL) gpuStateByBit:(UInt32)stateBit; -- (BOOL) isGPUTypeDisplayed:(NSInteger)theGpuType; -- (void) hideGPUType:(NSInteger)theGpuType; -- (void) showGPUType:(NSInteger)theGpuType; - @end @interface CocoaDSDisplayVideo : CocoaDSDisplay @@ -240,29 +192,3 @@ typedef struct - (void) handleChangeVideoFilter:(NSData *)videoFilterTypeIdData; @end - -#ifdef __cplusplus -extern "C" -{ -#endif - -void HandleMessageEchoResponse(NSPortMessage *portMessage); -void SetGPULayerState(int gpuType, unsigned int i, bool state); -bool GetGPULayerState(int gpuType, unsigned int i); -void SetGPUDisplayState(int gpuType, bool state); -bool GetGPUDisplayState(int gpuType); - -bool OSXOpenGLRendererInit(); -bool OSXOpenGLRendererBegin(); -void OSXOpenGLRendererEnd(); - -bool CreateOpenGLRenderer(); -void DestroyOpenGLRenderer(); -void RequestOpenGLRenderer_3_2(bool request_3_2); -void SetOpenGLRendererFunctions(bool (*initFunction)(), - bool (*beginOGLFunction)(), - void (*endOGLFunction)()); - -#ifdef __cplusplus -} -#endif diff --git a/desmume/src/cocoa/cocoa_output.mm b/desmume/src/cocoa/cocoa_output.mm index 003f1f4a0..7476c883b 100644 --- a/desmume/src/cocoa/cocoa_output.mm +++ b/desmume/src/cocoa/cocoa_output.mm @@ -1,6 +1,6 @@ /* Copyright (C) 2011 Roger Manuel - Copyright (C) 2013 DeSmuME team + Copyright (C) 2011-2013 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -23,28 +23,13 @@ #include "sndOSX.h" #include "../NDSSystem.h" -#include "../GPU.h" -#include "../rasterize.h" #include "../SPU.h" #include "../metaspu/metaspu.h" -#ifdef MAC_OS_X_VERSION_10_7 -#include "../OGLRender_3_2.h" -#else -#include "../OGLRender.h" -#endif - #import -#include #undef BOOL -GPU3DInterface *core3DList[] = { - &gpu3DNull, - &gpu3DRasterize, - &gpu3Dgl, - NULL -}; @implementation CocoaDSOutput @@ -443,11 +428,10 @@ GPU3DInterface *core3DList[] = { @implementation CocoaDSDisplay -@synthesize gpuStateFlags; @dynamic delegate; @dynamic displayMode; @dynamic frameSize; -@synthesize mutexRender3D; + - (id)init { @@ -456,63 +440,16 @@ GPU3DInterface *core3DList[] = { { return self; } - - mutexRender3D = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t)); - pthread_mutex_init(mutexRender3D, NULL); - + spinlockDelegate = OS_SPINLOCK_INIT; - spinlockGpuState = OS_SPINLOCK_INIT; spinlockDisplayType = OS_SPINLOCK_INIT; - spinlockRender3DRenderingEngine = OS_SPINLOCK_INIT; - spinlockRender3DHighPrecisionColorInterpolation = OS_SPINLOCK_INIT; - spinlockRender3DEdgeMarking = OS_SPINLOCK_INIT; - spinlockRender3DFog = OS_SPINLOCK_INIT; - spinlockRender3DTextures = OS_SPINLOCK_INIT; - spinlockRender3DDepthComparisonThreshold = OS_SPINLOCK_INIT; - spinlockRender3DThreads = OS_SPINLOCK_INIT; - spinlockRender3DLineHack = OS_SPINLOCK_INIT; - spinlockRender3DMultisample = OS_SPINLOCK_INIT; delegate = nil; displayMode = DS_DISPLAY_TYPE_COMBO; frameSize = NSMakeSize((CGFloat)GPU_DISPLAY_WIDTH, (CGFloat)GPU_DISPLAY_HEIGHT * 2); - gpuStateFlags = GPUSTATE_MAIN_GPU_MASK | - GPUSTATE_MAIN_BG0_MASK | - GPUSTATE_MAIN_BG1_MASK | - GPUSTATE_MAIN_BG2_MASK | - GPUSTATE_MAIN_BG3_MASK | - GPUSTATE_MAIN_OBJ_MASK | - GPUSTATE_SUB_GPU_MASK | - GPUSTATE_SUB_BG0_MASK | - GPUSTATE_SUB_BG1_MASK | - GPUSTATE_SUB_BG2_MASK | - GPUSTATE_SUB_BG3_MASK | - GPUSTATE_SUB_OBJ_MASK; - - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateMainGPU"]; - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateMainBG0"]; - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateMainBG1"]; - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateMainBG2"]; - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateMainBG3"]; - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateMainOBJ"]; - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateSubGPU"]; - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateSubBG0"]; - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateSubBG1"]; - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateSubBG2"]; - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateSubBG3"]; - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateSubOBJ"]; [property setValue:[NSNumber numberWithInteger:displayMode] forKey:@"displayMode"]; [property setValue:NSSTRING_DISPLAYMODE_MAIN forKey:@"displayModeString"]; - [property setValue:[NSNumber numberWithInteger:CORE3DLIST_NULL] forKey:@"render3DRenderingEngine"]; - [property setValue:[NSNumber numberWithBool:YES] forKey:@"render3DHighPrecisionColorInterpolation"]; - [property setValue:[NSNumber numberWithBool:YES] forKey:@"render3DEdgeMarking"]; - [property setValue:[NSNumber numberWithBool:YES] forKey:@"render3DFog"]; - [property setValue:[NSNumber numberWithBool:YES] forKey:@"render3DTextures"]; - [property setValue:[NSNumber numberWithInteger:0] forKey:@"render3DDepthComparisonThreshold"]; - [property setValue:[NSNumber numberWithInteger:0] forKey:@"render3DThreads"]; - [property setValue:[NSNumber numberWithBool:YES] forKey:@"render3DLineHack"]; - [property setValue:[NSNumber numberWithBool:NO] forKey:@"render3DMultisample"]; return self; } @@ -520,10 +457,6 @@ GPU3DInterface *core3DList[] = { - (void)dealloc { self.delegate = nil; - - pthread_mutex_destroy(self.mutexRender3D); - free(self.mutexRender3D); - mutexRender3D = nil; [super dealloc]; } @@ -559,158 +492,6 @@ GPU3DInterface *core3DList[] = { return theDelegate; } -- (void) setGpuStateFlags:(UInt32)flags -{ - OSSpinLockLock(&spinlockGpuState); - gpuStateFlags = flags; - OSSpinLockUnlock(&spinlockGpuState); - - pthread_mutex_lock(self.mutexProducer); - - if (flags & GPUSTATE_MAIN_GPU_MASK) - { - SetGPUDisplayState(DS_GPU_TYPE_MAIN, true); - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateMainGPU"]; - } - else - { - SetGPUDisplayState(DS_GPU_TYPE_MAIN, false); - [property setValue:[NSNumber numberWithBool:NO] forKey:@"gpuStateMainGPU"]; - } - - if (flags & GPUSTATE_MAIN_BG0_MASK) - { - SetGPULayerState(DS_GPU_TYPE_MAIN, 0, true); - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateMainBG0"]; - } - else - { - SetGPULayerState(DS_GPU_TYPE_MAIN, 0, false); - [property setValue:[NSNumber numberWithBool:NO] forKey:@"gpuStateMainBG0"]; - } - - if (flags & GPUSTATE_MAIN_BG1_MASK) - { - SetGPULayerState(DS_GPU_TYPE_MAIN, 1, true); - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateMainBG1"]; - } - else - { - SetGPULayerState(DS_GPU_TYPE_MAIN, 1, false); - [property setValue:[NSNumber numberWithBool:NO] forKey:@"gpuStateMainBG1"]; - } - - if (flags & GPUSTATE_MAIN_BG2_MASK) - { - SetGPULayerState(DS_GPU_TYPE_MAIN, 2, true); - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateMainBG2"]; - } - else - { - SetGPULayerState(DS_GPU_TYPE_MAIN, 2, false); - [property setValue:[NSNumber numberWithBool:NO] forKey:@"gpuStateMainBG2"]; - } - - if (flags & GPUSTATE_MAIN_BG3_MASK) - { - SetGPULayerState(DS_GPU_TYPE_MAIN, 3, true); - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateMainBG3"]; - } - else - { - SetGPULayerState(DS_GPU_TYPE_MAIN, 3, false); - [property setValue:[NSNumber numberWithBool:NO] forKey:@"gpuStateMainBG3"]; - } - - if (flags & GPUSTATE_MAIN_OBJ_MASK) - { - SetGPULayerState(DS_GPU_TYPE_MAIN, 4, true); - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateMainOBJ"]; - } - else - { - SetGPULayerState(DS_GPU_TYPE_MAIN, 4, false); - [property setValue:[NSNumber numberWithBool:NO] forKey:@"gpuStateMainOBJ"]; - } - - if (flags & GPUSTATE_SUB_GPU_MASK) - { - SetGPUDisplayState(DS_GPU_TYPE_SUB, true); - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateSubGPU"]; - } - else - { - SetGPUDisplayState(DS_GPU_TYPE_SUB, false); - [property setValue:[NSNumber numberWithBool:NO] forKey:@"gpuStateSubGPU"]; - } - - if (flags & GPUSTATE_SUB_BG0_MASK) - { - SetGPULayerState(DS_GPU_TYPE_SUB, 0, true); - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateSubBG0"]; - } - else - { - SetGPULayerState(DS_GPU_TYPE_SUB, 0, false); - [property setValue:[NSNumber numberWithBool:NO] forKey:@"gpuStateSubBG0"]; - } - - if (flags & GPUSTATE_SUB_BG1_MASK) - { - SetGPULayerState(DS_GPU_TYPE_SUB, 1, true); - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateSubBG1"]; - } - else - { - SetGPULayerState(DS_GPU_TYPE_SUB, 1, false); - [property setValue:[NSNumber numberWithBool:NO] forKey:@"gpuStateSubBG1"]; - } - - if (flags & GPUSTATE_SUB_BG2_MASK) - { - SetGPULayerState(DS_GPU_TYPE_SUB, 2, true); - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateSubBG2"]; - } - else - { - SetGPULayerState(DS_GPU_TYPE_SUB, 2, false); - [property setValue:[NSNumber numberWithBool:NO] forKey:@"gpuStateSubBG2"]; - } - - if (flags & GPUSTATE_SUB_BG3_MASK) - { - SetGPULayerState(DS_GPU_TYPE_SUB, 3, true); - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateSubBG3"]; - } - else - { - SetGPULayerState(DS_GPU_TYPE_SUB, 3, false); - [property setValue:[NSNumber numberWithBool:NO] forKey:@"gpuStateSubBG3"]; - } - - if (flags & GPUSTATE_SUB_OBJ_MASK) - { - SetGPULayerState(DS_GPU_TYPE_SUB, 4, true); - [property setValue:[NSNumber numberWithBool:YES] forKey:@"gpuStateSubOBJ"]; - } - else - { - SetGPULayerState(DS_GPU_TYPE_SUB, 4, false); - [property setValue:[NSNumber numberWithBool:NO] forKey:@"gpuStateSubOBJ"]; - } - - pthread_mutex_unlock(self.mutexProducer); -} - -- (UInt32) gpuStateFlags -{ - OSSpinLockLock(&spinlockGpuState); - UInt32 flags = gpuStateFlags; - OSSpinLockUnlock(&spinlockGpuState); - - return flags; -} - - (void) setDisplayMode:(NSInteger)displayModeID { NSString *newDispString = nil; @@ -762,253 +543,6 @@ GPU3DInterface *core3DList[] = { return size; } -- (void) setRender3DRenderingEngine:(NSInteger)methodID -{ - OSSpinLockLock(&spinlockRender3DRenderingEngine); - [property setValue:[NSNumber numberWithInteger:methodID] forKey:@"render3DRenderingEngine"]; - OSSpinLockUnlock(&spinlockRender3DRenderingEngine); - - pthread_mutex_lock(self.mutexProducer); - NDS_3D_ChangeCore(methodID); - pthread_mutex_unlock(self.mutexProducer); -} - -- (NSInteger) render3DRenderingEngine -{ - OSSpinLockLock(&spinlockRender3DRenderingEngine); - NSInteger methodID = [(NSNumber *)[property valueForKey:@"render3DRenderingEngine"] integerValue]; - OSSpinLockUnlock(&spinlockRender3DRenderingEngine); - - return methodID; -} - -- (void) setRender3DHighPrecisionColorInterpolation:(BOOL)state -{ - OSSpinLockLock(&spinlockRender3DHighPrecisionColorInterpolation); - [property setValue:[NSNumber numberWithBool:state] forKey:@"render3DHighPrecisionColorInterpolation"]; - OSSpinLockUnlock(&spinlockRender3DHighPrecisionColorInterpolation); - - bool cState = false; - if (state) - { - cState = true; - } - - pthread_mutex_lock(self.mutexProducer); - CommonSettings.GFX3D_HighResolutionInterpolateColor = cState; - pthread_mutex_unlock(self.mutexProducer); -} - -- (BOOL) render3DHighPrecisionColorInterpolation -{ - OSSpinLockLock(&spinlockRender3DHighPrecisionColorInterpolation); - BOOL state = [(NSNumber *)[property valueForKey:@"render3DHighPrecisionColorInterpolation"] boolValue]; - OSSpinLockUnlock(&spinlockRender3DHighPrecisionColorInterpolation); - - return state; -} - -- (void) setRender3DEdgeMarking:(BOOL)state -{ - OSSpinLockLock(&spinlockRender3DEdgeMarking); - [property setValue:[NSNumber numberWithBool:state] forKey:@"render3DEdgeMarking"]; - OSSpinLockUnlock(&spinlockRender3DEdgeMarking); - - bool cState = false; - if (state) - { - cState = true; - } - - pthread_mutex_lock(self.mutexProducer); - CommonSettings.GFX3D_EdgeMark = cState; - pthread_mutex_unlock(self.mutexProducer); -} - -- (BOOL) render3DEdgeMarking -{ - OSSpinLockLock(&spinlockRender3DEdgeMarking); - BOOL state = [(NSNumber *)[property valueForKey:@"render3DEdgeMarking"] boolValue]; - OSSpinLockUnlock(&spinlockRender3DEdgeMarking); - - return state; -} - -- (void) setRender3DFog:(BOOL)state -{ - OSSpinLockLock(&spinlockRender3DFog); - [property setValue:[NSNumber numberWithBool:state] forKey:@"render3DFog"]; - OSSpinLockUnlock(&spinlockRender3DFog); - - bool cState = false; - if (state) - { - cState = true; - } - - pthread_mutex_lock(self.mutexProducer); - CommonSettings.GFX3D_Fog = cState; - pthread_mutex_unlock(self.mutexProducer); -} - -- (BOOL) render3DFog -{ - OSSpinLockLock(&spinlockRender3DFog); - BOOL state = [(NSNumber *)[property valueForKey:@"render3DFog"] boolValue]; - OSSpinLockUnlock(&spinlockRender3DFog); - - return state; -} - -- (void) setRender3DTextures:(BOOL)state -{ - OSSpinLockLock(&spinlockRender3DTextures); - [property setValue:[NSNumber numberWithBool:state] forKey:@"render3DTextures"]; - OSSpinLockUnlock(&spinlockRender3DTextures); - - bool cState = false; - if (state) - { - cState = true; - } - - pthread_mutex_lock(self.mutexProducer); - CommonSettings.GFX3D_Texture = cState; - pthread_mutex_unlock(self.mutexProducer); -} - -- (BOOL) render3DTextures -{ - OSSpinLockLock(&spinlockRender3DTextures); - BOOL state = [(NSNumber *)[property valueForKey:@"render3DTextures"] boolValue]; - OSSpinLockUnlock(&spinlockRender3DTextures); - - return state; -} - -- (void) setRender3DDepthComparisonThreshold:(NSUInteger)threshold -{ - OSSpinLockLock(&spinlockRender3DDepthComparisonThreshold); - [property setValue:[NSNumber numberWithInteger:threshold] forKey:@"render3DDepthComparisonThreshold"]; - OSSpinLockUnlock(&spinlockRender3DDepthComparisonThreshold); - - pthread_mutex_lock(self.mutexProducer); - CommonSettings.GFX3D_Zelda_Shadow_Depth_Hack = threshold; - pthread_mutex_unlock(self.mutexProducer); -} - -- (NSUInteger) render3DDepthComparisonThreshold -{ - OSSpinLockLock(&spinlockRender3DDepthComparisonThreshold); - NSUInteger threshold = [(NSNumber *)[property valueForKey:@"render3DDepthComparisonThreshold"] integerValue]; - OSSpinLockUnlock(&spinlockRender3DDepthComparisonThreshold); - - return threshold; -} - -- (void) setRender3DThreads:(NSUInteger)numberThreads -{ - OSSpinLockLock(&spinlockRender3DThreads); - [property setValue:[NSNumber numberWithInteger:numberThreads] forKey:@"render3DThreads"]; - OSSpinLockUnlock(&spinlockRender3DThreads); - - NSUInteger numberCores = [[NSProcessInfo processInfo] activeProcessorCount]; - if (numberThreads == 0) - { - if (numberCores >= 4) - { - numberCores = 4; - } - else if (numberCores >= 2) - { - numberCores = 2; - } - else - { - numberCores = 1; - } - } - else - { - numberCores = numberThreads; - } - - pthread_mutex_lock(self.mutexProducer); - - CommonSettings.num_cores = numberCores; - if ([self render3DRenderingEngine] == CORE3DLIST_SWRASTERIZE) - { - NDS_3D_ChangeCore(CORE3DLIST_SWRASTERIZE); - } - else if ([self render3DRenderingEngine] == CORE3DLIST_OPENGL) - { - NDS_3D_ChangeCore(CORE3DLIST_OPENGL); - } - - pthread_mutex_unlock(self.mutexProducer); -} - -- (NSUInteger) render3DThreads -{ - OSSpinLockLock(&spinlockRender3DThreads); - NSUInteger numberThreads = [(NSNumber *)[property valueForKey:@"render3DThreads"] integerValue]; - OSSpinLockUnlock(&spinlockRender3DThreads); - - return numberThreads; -} - -- (void) setRender3DLineHack:(BOOL)state -{ - OSSpinLockLock(&spinlockRender3DLineHack); - [property setValue:[NSNumber numberWithBool:state] forKey:@"render3DLineHack"]; - OSSpinLockUnlock(&spinlockRender3DLineHack); - - bool cState = false; - if (state) - { - cState = true; - } - - pthread_mutex_lock(self.mutexProducer); - CommonSettings.GFX3D_LineHack = cState; - pthread_mutex_unlock(self.mutexProducer); -} - -- (BOOL) render3DLineHack -{ - OSSpinLockLock(&spinlockRender3DLineHack); - BOOL state = [(NSNumber *)[property valueForKey:@"render3DLineHack"] boolValue]; - OSSpinLockUnlock(&spinlockRender3DLineHack); - - return state; -} - -- (void) setRender3DMultisample:(BOOL)state -{ - OSSpinLockLock(&spinlockRender3DMultisample); - [property setValue:[NSNumber numberWithBool:state] forKey:@"render3DMultisample"]; - OSSpinLockUnlock(&spinlockRender3DMultisample); - - bool cState = false; - if (state) - { - cState = true; - } - - pthread_mutex_lock(self.mutexProducer); - CommonSettings.GFX3D_Renderer_Multisample = cState; - pthread_mutex_unlock(self.mutexProducer); -} - -- (BOOL) render3DMultisample -{ - OSSpinLockLock(&spinlockRender3DMultisample); - BOOL state = [(NSNumber *)[property valueForKey:@"render3DMultisample"] boolValue]; - OSSpinLockUnlock(&spinlockRender3DMultisample); - - return state; -} - - (void) doCoreEmuFrame { NSData *gpuData = nil; @@ -1055,50 +589,10 @@ GPU3DInterface *core3DList[] = { [self handleEmuFrameProcessed:[messageComponents objectAtIndex:0] attributes:[messageComponents objectAtIndex:1]]; break; - case MESSAGE_SET_GPU_STATE_FLAGS: - [self handleChangeGpuStateFlags:[messageComponents objectAtIndex:0]]; - break; - case MESSAGE_CHANGE_DISPLAY_TYPE: [self handleChangeDisplayMode:[messageComponents objectAtIndex:0]]; break; - case MESSAGE_SET_RENDER3D_METHOD: - [self handleSetRender3DRenderingEngine:[messageComponents objectAtIndex:0]]; - break; - - case MESSAGE_SET_RENDER3D_HIGH_PRECISION_COLOR_INTERPOLATION: - [self handleSetRender3DHighPrecisionColorInterpolation:[messageComponents objectAtIndex:0]]; - break; - - case MESSAGE_SET_RENDER3D_EDGE_MARKING: - [self handleSetRender3DEdgeMarking:[messageComponents objectAtIndex:0]]; - break; - - case MESSAGE_SET_RENDER3D_FOG: - [self handleSetRender3DFog:[messageComponents objectAtIndex:0]]; - break; - - case MESSAGE_SET_RENDER3D_TEXTURES: - [self handleSetRender3DTextures:[messageComponents objectAtIndex:0]]; - break; - - case MESSAGE_SET_RENDER3D_DEPTH_COMPARISON_THRESHOLD: - [self handleSetRender3DDepthComparisonThreshold:[messageComponents objectAtIndex:0]]; - break; - - case MESSAGE_SET_RENDER3D_THREADS: - [self handleSetRender3DThreads:[messageComponents objectAtIndex:0]]; - break; - - case MESSAGE_SET_RENDER3D_LINE_HACK: - [self handleSetRender3DLineHack:[messageComponents objectAtIndex:0]]; - break; - - case MESSAGE_SET_RENDER3D_MULTISAMPLE: - [self handleSetRender3DMultisample:[messageComponents objectAtIndex:0]]; - break; - case MESSAGE_SET_VIEW_TO_BLACK: [self handleSetViewToBlack]; break; @@ -1126,13 +620,6 @@ GPU3DInterface *core3DList[] = { [super handleEmuFrameProcessed:mainData attributes:attributesData]; } -- (void) handleChangeGpuStateFlags:(NSData *)flagsData -{ - const NSInteger flags = *(NSInteger *)[flagsData bytes]; - self.gpuStateFlags = (UInt32)flags; - [self handleEmuFrameProcessed:self.frameData attributes:self.frameAttributesData]; -} - - (void) handleChangeDisplayMode:(NSData *)displayModeData { if (delegate == nil || ![delegate respondsToSelector:@selector(doDisplayModeChanged:)]) @@ -1145,60 +632,6 @@ GPU3DInterface *core3DList[] = { [delegate doDisplayModeChanged:displayModeID]; } -- (void) handleSetRender3DRenderingEngine:(NSData *)methodIdData -{ - const NSInteger methodID = *(NSInteger *)[methodIdData bytes]; - [self setRender3DRenderingEngine:methodID]; -} - -- (void) handleSetRender3DHighPrecisionColorInterpolation:(NSData *)stateData -{ - const BOOL theState = *(BOOL *)[stateData bytes]; - [self setRender3DHighPrecisionColorInterpolation:theState]; -} - -- (void) handleSetRender3DEdgeMarking:(NSData *)stateData -{ - const BOOL theState = *(BOOL *)[stateData bytes]; - [self setRender3DEdgeMarking:theState]; -} - -- (void) handleSetRender3DFog:(NSData *)stateData -{ - const BOOL theState = *(BOOL *)[stateData bytes]; - [self setRender3DFog:theState]; -} - -- (void) handleSetRender3DTextures:(NSData *)stateData -{ - const BOOL theState = *(BOOL *)[stateData bytes]; - [self setRender3DTextures:theState]; -} - -- (void) handleSetRender3DDepthComparisonThreshold:(NSData *)thresholdData -{ - const NSUInteger threshold = *(NSUInteger *)[thresholdData bytes]; - [self setRender3DDepthComparisonThreshold:threshold]; -} - -- (void) handleSetRender3DThreads:(NSData *)numberThreadsData -{ - const NSUInteger numberThreads = *(NSUInteger *)[numberThreadsData bytes]; - [self setRender3DThreads:numberThreads]; -} - -- (void) handleSetRender3DLineHack:(NSData *)stateData -{ - const BOOL theState = *(BOOL *)[stateData bytes]; - [self setRender3DLineHack:theState]; -} - -- (void) handleSetRender3DMultisample:(NSData *)stateData -{ - const BOOL theState = *(BOOL *)[stateData bytes]; - [self setRender3DMultisample:theState]; -} - - (void) handleSetViewToBlack { [self fillVideoFrameWithColor:0x8000]; @@ -1334,106 +767,6 @@ GPU3DInterface *core3DList[] = { return [imageRep autorelease]; } -- (BOOL) gpuStateByBit:(UInt32)stateBit -{ - BOOL result = NO; - UInt32 flags = self.gpuStateFlags; - - if (flags & (1 << stateBit)) - { - result = YES; - } - - return result; -} - -- (BOOL) isGPUTypeDisplayed:(NSInteger)theGpuType -{ - BOOL result = NO; - UInt32 flags = self.gpuStateFlags; - - switch (theGpuType) - { - case DS_GPU_TYPE_MAIN: - if (flags & GPUSTATE_MAIN_GPU_MASK) - { - result = YES; - } - break; - - case DS_GPU_TYPE_SUB: - if (flags & GPUSTATE_SUB_GPU_MASK) - { - result = YES; - } - break; - - case DS_GPU_TYPE_COMBO: - if (flags & (GPUSTATE_MAIN_GPU_MASK | GPUSTATE_SUB_GPU_MASK)) - { - result = YES; - } - break; - - default: - break; - } - - return result; -} - -- (void) hideGPUType:(NSInteger)theGpuType -{ - UInt32 flags = self.gpuStateFlags; - - switch (theGpuType) - { - case DS_GPU_TYPE_MAIN: - flags &= ~GPUSTATE_MAIN_GPU_MASK; - break; - - case DS_GPU_TYPE_SUB: - flags &= ~GPUSTATE_SUB_GPU_MASK; - break; - - case DS_GPU_TYPE_COMBO: - flags &= ~GPUSTATE_MAIN_GPU_MASK; - flags &= ~GPUSTATE_SUB_GPU_MASK; - break; - - default: - break; - } - - self.gpuStateFlags = flags; -} - -- (void) showGPUType:(NSInteger)theGpuType -{ - UInt32 flags = self.gpuStateFlags; - - switch (theGpuType) - { - case DS_GPU_TYPE_MAIN: - flags |= GPUSTATE_MAIN_GPU_MASK; - break; - - case DS_GPU_TYPE_SUB: - flags |= GPUSTATE_SUB_GPU_MASK; - break; - - case DS_GPU_TYPE_COMBO: - flags |= GPUSTATE_MAIN_GPU_MASK; - flags |= GPUSTATE_SUB_GPU_MASK; - break; - - default: - break; - } - - self.gpuStateFlags = flags; -} - @end @implementation CocoaDSDisplayVideo @@ -1466,17 +799,11 @@ GPU3DInterface *core3DList[] = { [property setValue:[NSNumber numberWithInteger:(NSInteger)VideoFilterTypeID_None] forKey:@"videoFilterType"]; [property setValue:[CocoaVideoFilter typeStringByID:VideoFilterTypeID_None] forKey:@"videoFilterTypeString"]; - SetOpenGLRendererFunctions(&OSXOpenGLRendererInit, - &OSXOpenGLRendererBegin, - &OSXOpenGLRendererEnd); - return self; } - (void)dealloc { - DestroyOpenGLRenderer(); - [vf release]; [super dealloc]; @@ -1723,284 +1050,3 @@ GPU3DInterface *core3DList[] = { } @end - -void HandleMessageEchoResponse(NSPortMessage *portMessage) -{ - NSPortMessage *echo = [[NSPortMessage alloc] initWithSendPort:[portMessage receivePort] receivePort:[portMessage sendPort] components:nil]; - [echo setMsgid:MESSAGE_CHECK_RESPONSE_ECHO]; - NSDate *sendDate = [[NSDate alloc] init]; - [echo sendBeforeDate:sendDate]; - [echo release]; - [sendDate release]; -} - -void SetGPULayerState(int gpuType, unsigned int i, bool state) -{ - GPU *theGpu = NULL; - - // Check bounds on the layer index. - if(i > 4) - { - return; - } - - switch (gpuType) - { - case DS_GPU_TYPE_MAIN: - theGpu = SubScreen.gpu; - break; - - case DS_GPU_TYPE_SUB: - theGpu = MainScreen.gpu; - break; - - case DS_GPU_TYPE_COMBO: - SetGPULayerState(DS_GPU_TYPE_SUB, i, state); // Recursive call - theGpu = MainScreen.gpu; - break; - - default: - break; - } - - if (theGpu != NULL) - { - if (state) - { - GPU_addBack(theGpu, i); - } - else - { - GPU_remove(theGpu, i); - } - } -} - -bool GetGPULayerState(int gpuType, unsigned int i) -{ - bool result = false; - - // Check bounds on the layer index. - if(i > 4) - { - return result; - } - - switch (gpuType) - { - case DS_GPU_TYPE_SUB: - if (SubScreen.gpu != nil) - { - result = CommonSettings.dispLayers[SubScreen.gpu->core][i]; - } - break; - - case DS_GPU_TYPE_MAIN: - if (MainScreen.gpu != nil) - { - result = CommonSettings.dispLayers[MainScreen.gpu->core][i]; - } - break; - - case DS_GPU_TYPE_COMBO: - if (SubScreen.gpu != nil && MainScreen.gpu != nil) - { - result = (CommonSettings.dispLayers[SubScreen.gpu->core][i] && CommonSettings.dispLayers[MainScreen.gpu->core][i]); - } - break; - - default: - break; - } - - return result; -} - -void SetGPUDisplayState(int gpuType, bool state) -{ - switch (gpuType) - { - case DS_GPU_TYPE_SUB: - CommonSettings.showGpu.sub = state; - break; - - case DS_GPU_TYPE_MAIN: - CommonSettings.showGpu.main = state; - break; - - case DS_GPU_TYPE_COMBO: - CommonSettings.showGpu.sub = state; - CommonSettings.showGpu.main = state; - break; - - default: - break; - } -} - -bool GetGPUDisplayState(int gpuType) -{ - bool result = false; - - switch (gpuType) - { - case DS_GPU_TYPE_SUB: - result = CommonSettings.showGpu.sub; - break; - - case DS_GPU_TYPE_MAIN: - result = CommonSettings.showGpu.main; - break; - - case DS_GPU_TYPE_COMBO: - result = (CommonSettings.showGpu.sub && CommonSettings.showGpu.main); - break; - - default: - break; - } - - return result; -} - -CGLContextObj OSXOpenGLRendererContext = NULL; -CGLPBufferObj OSXOpenGLRendererPBuffer = NULL; - -bool OSXOpenGLRendererInit() -{ - static bool isContextAlreadyCreated = false; - - if (!isContextAlreadyCreated) - { - isContextAlreadyCreated = CreateOpenGLRenderer(); - } - - return true; -} - -bool OSXOpenGLRendererBegin() -{ - CGLSetCurrentContext(OSXOpenGLRendererContext); - - return true; -} - -void OSXOpenGLRendererEnd() -{ - -} - -bool CreateOpenGLRenderer() -{ - bool result = false; - bool useContext_3_2 = false; - CGLPixelFormatObj cglPixFormat = NULL; - CGLContextObj newContext = NULL; - CGLPBufferObj newPBuffer = NULL; - GLint virtualScreenCount = 0; - - CGLPixelFormatAttribute attrs[] = { - kCGLPFAColorSize, (CGLPixelFormatAttribute)24, - kCGLPFAAlphaSize, (CGLPixelFormatAttribute)8, - kCGLPFADepthSize, (CGLPixelFormatAttribute)24, - kCGLPFAStencilSize, (CGLPixelFormatAttribute)8, - kCGLPFAAccelerated, - (CGLPixelFormatAttribute)0, (CGLPixelFormatAttribute)0, - (CGLPixelFormatAttribute)0 - }; - -#ifdef MAC_OS_X_VERSION_10_7 - // If we can support a 3.2 Core Profile context, then request that in our - // pixel format attributes. - useContext_3_2 = [CocoaDSUtil OSVersionCheckMajor:10 minor:7 revision:0] ? true : false; - if (useContext_3_2) - { - attrs[9] = kCGLPFAOpenGLProfile; - attrs[10] = (CGLPixelFormatAttribute)kCGLOGLPVersion_3_2_Core; - } -#endif - - CGLChoosePixelFormat(attrs, &cglPixFormat, &virtualScreenCount); - if (cglPixFormat == NULL) - { - // Remove the HW rendering requirement and try again. Note that this will - // result in SW rendering, which will cause a substantial speed hit. - attrs[8] = (CGLPixelFormatAttribute)0; - CGLChoosePixelFormat(attrs, &cglPixFormat, &virtualScreenCount); - if (cglPixFormat == NULL) - { - return result; - } - } - - CGLCreateContext(cglPixFormat, NULL, &newContext); - CGLReleasePixelFormat(cglPixFormat); - - // Create a PBuffer for legacy contexts since the availability of FBOs - // is not guaranteed. - if (!useContext_3_2) - { - CGLCreatePBuffer(GPU_DISPLAY_WIDTH, GPU_DISPLAY_HEIGHT, GL_TEXTURE_2D, GL_RGBA, 0, &newPBuffer); - - if (newPBuffer == NULL) - { - CGLReleaseContext(newContext); - return result; - } - else - { - GLint virtualScreenID = 0; - - CGLGetVirtualScreen(newContext, &virtualScreenID); - CGLSetPBuffer(newContext, newPBuffer, 0, 0, virtualScreenID); - } - } - - RequestOpenGLRenderer_3_2(useContext_3_2); - OSXOpenGLRendererContext = newContext; - OSXOpenGLRendererPBuffer = newPBuffer; - - result = true; - return result; -} - -void DestroyOpenGLRenderer() -{ - if (OSXOpenGLRendererContext == NULL) - { - return; - } - - CGLReleasePBuffer(OSXOpenGLRendererPBuffer); - CGLReleaseContext(OSXOpenGLRendererContext); - OSXOpenGLRendererContext = NULL; - OSXOpenGLRendererPBuffer = NULL; -} - -void RequestOpenGLRenderer_3_2(bool request_3_2) -{ -#ifdef OGLRENDER_3_2_H - if (request_3_2) - { - OGLLoadEntryPoints_3_2_Func = &OGLLoadEntryPoints_3_2; - OGLCreateRenderer_3_2_Func = &OGLCreateRenderer_3_2; - } - else - { - OGLLoadEntryPoints_3_2_Func = NULL; - OGLCreateRenderer_3_2_Func = NULL; - } -#else - OGLLoadEntryPoints_3_2_Func = NULL; - OGLCreateRenderer_3_2_Func = NULL; -#endif -} - -void SetOpenGLRendererFunctions(bool (*initFunction)(), - bool (*beginOGLFunction)(), - void (*endOGLFunction)()) -{ - oglrender_init = initFunction; - oglrender_beginOpenGL = beginOGLFunction; - oglrender_endOpenGL = endOGLFunction; -} diff --git a/desmume/src/cocoa/cocoa_rom.h b/desmume/src/cocoa/cocoa_rom.h index 62ea13dbf..df83141a6 100644 --- a/desmume/src/cocoa/cocoa_rom.h +++ b/desmume/src/cocoa/cocoa_rom.h @@ -1,6 +1,6 @@ /* Copyright (C) 2011 Roger Manuel - Copyright (C) 2012 DeSmuME team + Copyright (C) 2011-2013 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -29,7 +29,6 @@ NSMutableDictionary *header; NSMutableDictionary *bindings; NSURL *fileURL; - BOOL isDataLoaded; NSInteger saveType; NSMutableDictionary *xmlCurrentRom; diff --git a/desmume/src/cocoa/cocoa_rom.mm b/desmume/src/cocoa/cocoa_rom.mm index 94917aeb5..9c5327b86 100644 --- a/desmume/src/cocoa/cocoa_rom.mm +++ b/desmume/src/cocoa/cocoa_rom.mm @@ -1,6 +1,6 @@ /* Copyright (C) 2011 Roger Manuel - Copyright (C) 2012 DeSmuME team + Copyright (C) 2011-2013 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -22,6 +22,7 @@ #import "cocoa_util.h" #include "../NDSSystem.h" +#include "../MMU.h" #include "../mc.h" #undef BOOL @@ -31,7 +32,7 @@ @synthesize header; @synthesize bindings; @synthesize fileURL; -@synthesize isDataLoaded; +@dynamic isDataLoaded; @synthesize saveType; static NSMutableDictionary *saveTypeValues = nil; @@ -87,7 +88,6 @@ static NSMutableDictionary *saveTypeValues = nil; } fileURL = nil; - isDataLoaded = NO; saveType = saveTypeID; xmlCurrentRom = nil; @@ -104,10 +104,9 @@ static NSMutableDictionary *saveTypeValues = nil; - (void)dealloc { - if (isDataLoaded) + if ([self isDataLoaded]) { NDS_FreeROM(); - isDataLoaded = NO; } [xmlElementStack release]; @@ -119,6 +118,11 @@ static NSMutableDictionary *saveTypeValues = nil; [super dealloc]; } +- (BOOL) isDataLoaded +{ + return (MMU.CART_ROM != MMU.UNUSED_RAM); +} + - (void) initHeader { const NDS_header *ndsRomHeader = NDS_getROMHeader(); @@ -222,7 +226,6 @@ static NSMutableDictionary *saveTypeValues = nil; } fileURL = [theURL copy]; - isDataLoaded = YES; [self initHeader]; NSString *advscDBPath = [[NSUserDefaults standardUserDefaults] stringForKey:@"Advanscene_DatabasePath"]; diff --git a/desmume/src/cocoa/cocoa_videofilter.h b/desmume/src/cocoa/cocoa_videofilter.h index 147bc0e5f..29ce7a33b 100644 --- a/desmume/src/cocoa/cocoa_videofilter.h +++ b/desmume/src/cocoa/cocoa_videofilter.h @@ -1,6 +1,6 @@ /* Copyright (C) 2011 Roger Manuel - Copyright (C) 2013 DeSmuME team + Copyright (C) 2011-2013 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -18,6 +18,7 @@ #import #include "../filter/videofilter.h" +#undef BOOL @class NSImage; @class NSBitmapImageRep; diff --git a/desmume/src/cocoa/sndOSX.h b/desmume/src/cocoa/sndOSX.h index 31cfe1812..e2d707d88 100644 --- a/desmume/src/cocoa/sndOSX.h +++ b/desmume/src/cocoa/sndOSX.h @@ -1,6 +1,6 @@ /* Copyright (C) 2007 Jeff Bland - Copyright (C) 2007-2012 DeSmuME team + Copyright (C) 2007-2013 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,6 +21,7 @@ #include #include "../SPU.h" +#undef BOOL #define SNDCORE_OSX 58325 //hopefully this is unique number diff --git a/desmume/src/cocoa/translations/English.lproj/InfoPlist.strings b/desmume/src/cocoa/translations/English.lproj/InfoPlist.strings index fcd9e8e84..a93b49170 100644 Binary files a/desmume/src/cocoa/translations/English.lproj/InfoPlist.strings and b/desmume/src/cocoa/translations/English.lproj/InfoPlist.strings differ diff --git a/desmume/src/cocoa/translations/English.lproj/MainMenu.strings b/desmume/src/cocoa/translations/English.lproj/MainMenu.strings index 5559e8d3b..86234ad6c 100644 Binary files a/desmume/src/cocoa/translations/English.lproj/MainMenu.strings and b/desmume/src/cocoa/translations/English.lproj/MainMenu.strings differ diff --git a/desmume/src/cocoa/translations/English.lproj/MainMenu.xib b/desmume/src/cocoa/translations/English.lproj/MainMenu.xib index df72f9ec5..db9bc0878 100644 --- a/desmume/src/cocoa/translations/English.lproj/MainMenu.xib +++ b/desmume/src/cocoa/translations/English.lproj/MainMenu.xib @@ -1461,126 +1461,6 @@ _NSMainMenu - - Combo Display Layout - - 2147483647 - - - submenuAction: - - Combo Display Layout - - YES - - - Vertical - - 2147483647 - - - - - - Horizontal - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Main Screen First - - 2147483647 - - - - - - Touch Screen First - - 2147483647 - - - - - - - - Combo Display Separation - - 2147483647 - - - submenuAction: - - Combo Display Separation - - YES - - - 0.0% - - 2147483647 - - - - - - 2.6% - - 2147483647 - - - - - - 33.3% - - 2147483647 - - - - - - 46.9% - - 2147483647 - - - - - - YES - YES - - - 2147483647 - - - - - - Custom... - - 2147483647 - - - - - - Media @@ -1642,733 +1522,6 @@ - - - 12 - - YES - - - 274 - - YES - - - 268 - {{30, 17}, {126, 17}} - - YES - - 68288064 - 272630784 - Display Separation: - - LucidaGrande - 13 - 1044 - - - - 6 - System - controlColor - - 3 - MC42NjY2NjY2NjY3AA - - - - 6 - System - controlTextColor - - 3 - MAA - - - - - - - 268 - {{158, 11}, {126, 26}} - - YES - - -2076049856 - 2048 - - - 109199615 - 129 - - - 400 - 75 - - - 0.0% - - 2147483647 - 1 - - - _popUpItemAction: - - - YES - - OtherViews - - YES - - - - 2.6% - - 2147483647 - - - _popUpItemAction: - 260 - - - - - 33.3% - - 2147483647 - - - _popUpItemAction: - 3333 - - - - - 46.9% - - 2147483647 - - - _popUpItemAction: - 4688 - - - - - YES - YES - - - 2147483647 - - - _popUpItemAction: - - - - - Custom - - 2147483647 - - - _popUpItemAction: - - - - - - 1 - YES - YES - 2 - - - - - 268 - {{289, 14}, {96, 22}} - - YES - - -1804468671 - 272630784 - - - - - YES - - YES - allowsFloats - formatterBehavior - lenient - locale - maximum - minimum - negativeInfinitySymbol - nilSymbol - numberStyle - positiveInfinitySymbol - - - YES - - - - - - - - - -∞ - - - +∞ - - - #,##0% - #,##0% - - - - - - - - NaN - - YES - - YES - - - YES - - - - - - - 3 - YES - YES - YES - - . - , - YES - NO - YES - - - YES - - 6 - System - textBackgroundColor - - 3 - MQA - - - - 6 - System - textColor - - - - - - - 12 - - YES - - - 274 - - YES - - - 268 - {{18, 14}, {100, 38}} - - YES - 2 - 1 - - YES - - -2080244224 - 0 - Vertical - - - 1 - 1211912703 - 0 - - NSRadioButton - - - - 200 - 25 - - - 67239424 - 0 - Horizontal - - - 1211912703 - 0 - - 549453824 - {18, 18} - - YES - - YES - - - - TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw -IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ -29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 -dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA -AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG -AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ -0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ -7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ -5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ -3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD -AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns -AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ -6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ -/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ -///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl -YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA -AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD -AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu -AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAAAMAAAABABIAAAEB -AAMAAAABABIAAAECAAMAAAAEAAAFxgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES -AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS -AAMAAAABAAEAAAFTAAMAAAAEAAAFzodzAAcAAAwYAAAF1gAAAAAACAAIAAgACAABAAEAAQABAAAMGGFw -cGwCAAAAbW50clJHQiBYWVogB9YABAADABMALAASYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAA -AXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAMSbmRpbgAA -BOwAAAY+ZGVzYwAACywAAABkZHNjbQAAC5AAAAAubW1vZAAAC8AAAAAoY3BydAAAC+gAAAAtWFlaIAAA -AAAAAF1KAAA0kQAACCVYWVogAAAAAAAAdCAAALRgAAAjPVhZWiAAAAAAAAAlbAAAFyoAAKfDWFlaIAAA -AAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1 -cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAAD -AQAAAQACBAUGBwkKCw0ODxASExQWFxgaGxweHyAiIyQmJygpKywtLzAxMjM1Njc4OTs8PT5AQUJDREZH -SElKS0xOT1BRUlNUVVZXWFlaW1xdXl9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SF -hoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnZ6foKGio6SlpqanqKmqq6ytra6vsLGysrO0tba3uLi5uru8 -vL2+v8DBwcLDxMXGxsfIycrKy8zNzs7P0NHS0tPU1dbW19jZ2drb3Nzd3t/g4eLi4+Tl5ufo6enq6+zt -7u/w8fHy8/T19vf4+fr7/P3+/v8AAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR8gISIjJCUnKCkq -Ky0uLzAxMzQ1Njc4OTo7PD0/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaWltcXV5fYGFiY2RlZmdo -aWprbG1ub3BxcnN0dXZ3d3h5ent8fH1+f4CBgoKDhIWGh4iIiYqLjI2Oj5CRkpOUlJWWl5iZmpucnZ2e -n6ChoqOkpaamp6ipqqusra6vsLCxsrO0tba3uLm5uru8vb6/wMHCw8TFx8jJysvMzc7P0NDR0tPU1dbX -2Nna29ze3+Dh4uPk5ebn6err7O3u7/Hy8/T19vf5+vv8/f7/AAIDAwQFBgcICQoKCwwNDg8QERITFBUW -FxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODg5Ojs8PT4+P0BBQkNDREVGR0hJSUpLTE1O -Tk9QUVJSU1RVVVZXWFhZWltbXF1eXl9gYWFiY2RkZWZnZ2hpaWprbGxtbm5vcHFxcnNzdHV1dnd4eHl6 -ent8fH1+fn+AgYGCg4SEhYaHiImJiouMjY6Oj5CRkpOTlJWWl5iZmZqbnJ2en6ChoqOkpaanqKmqq6yt -rq+xsrO0tba3uLq7vL2+wMHDxMbHycrMzs/R0tTW19nb3d7g4uTm6Ors7vDy9Pb4+vz+/wAAbmRpbgAA -AAAAAAY2AACXGgAAVjoAAFPKAACJ3gAAJ8IAABaoAABQDQAAVDkAAiuFAAIZmQABeFEAAwEAAAIAAAAA -AAEABgANABcAIwAxAEAAUgBlAHsAkwCrAMUA4gD/AR8BPwFhAYUBqgHQAfgCIAJLAncCpQLSAwIDMwNl -A5gDzgQFBD0EdQSvBOsFKQVnBacF6AYqBm4GtQb8B0UHkgfkCDkIkAjnCT4JmAn0ClAKrQsLC2sLygwq -DIwM8Q1XDcAOKA6SDv4PbA/bEE0QxBE7EbQSMRKwEzITuRREFNAVYBXxFocXHhfAGGIZBBmsGlQa+RuU -HC4czh1yHhQeux9jIA0gvCFoIhkizyOJJEEk+SW6JnknOygFKMspkypiKzIsASzXLawuhy9gMD4xGzH8 -MtszvzSgNYY2cjdcOEw5OTorOxs8CD0EPfU+6z/nQOFB2ELUQ9VE00XcRttH5EjxSgBLCUwdTTFOUE9v -UI9Rt1LdVAVVNlZsV6VY4FohW21ct135X09goGH0Y0tkqGYFZ19oxGova5ptCG54b/BxbnLsdG119Xd/ -eQh6knwqfcV/W4D4gpSEO4Xih4CJKorYjIqOOY/jkZuTWJUOlsyYiZpSnB6d4Z+soX+jWqUvpxOo+6rj -rMuuwLC4sra0rra0uL+60LzfvwDBHcLdxLXGhchYyi7MCs3lz7rRmtOA1WPXR9kq2xPc/97s4M/iveSn -5o3obupT7ELuLPAM8fLz0PW396H5f/tZ/T3//wAAAAEAAwALABYAJQA3AE0AZQCBAJ8AwQDlAQsBNQFh -AZABwQH1AisCZAKfAtwDHANfA6MD6gQ0BH8EzQT1BR0FcAXEBhsGdAbPBy0HXAeMB+4IUgi4CSAJVAmK -CfYKZArVC0cLgQu8DDIMqw0mDaIOIQ6hDyQPqRAvELgQ/RFDEc8SXRLuE4AUFRSrFUMV3RZ5FxcXthhY -GPwZoRpIGvEbnBxJHPgdqB5bHw8fxSB9ITch8iKwJDAk8yW3Jn4nRigQKNwpqSp5K0osHCzxLccuoC95 -MFUxMzISMvMz1TS5NaA2hzdxOFw5STo4Oyg8Gj4DPvs/9EDuQepD6ETpRexG8Uf3SP9LFEwhTTBOQE9S -UGZSklOrVMVV4Vb/WB5ZP1phW4Vcq13SXvthUmJ/Y69k4GYSZ0dofGm0au1tZG6ib+FxInJlc6l073Y2 -d396FXtjfLJ+A39VgKmB/4NWhK+GCYjCiiGLgYzjjkePrJESknuT5Ja8mCuZm5sMnH+d9J9qoOGiWqPV -pVGmz6eOqE6pzqtRrNSuWq/gsWmy8rR+tgu5Kbq6vE294b93wQ7Cp8RBxd3He8kZyrrLisxbzf/Po9FK -0vHUm9ZF1/HZn9tO3Cbc/96x4GTiGePQ5YjnQegf6Pzquex27jbv9/G583z0X/VC9wj40Pqa/GX+Mf// -AAAAAQADAAsAJQA3AE0AZQCBAJ8AwQELATUBYQGQAcEB9QIrAmQCnwLcAxwDXwOjA+oENAR/BM0FHQVw -BcQGGwZ0Bs8HLQeMB+4IUgi4CSAJign2CmQK1QtHC7wMMgyrDSYNog4hDqEPJA+pEC8QuBFDEl0S7hOA -FBUUqxVDFnkXFxe2GFgY/BpIGvEbnBxJHPgdqB8PH8UgfSE3IfIjbyQwJPMltydGKBAo3Cp5K0osHC3H -LqAveTEzMhIy8zS5NaA2hzhcOUk6ODwaPQ4+Az/0QO5C6EPoROlG8Uf3SglLFEwhTkBPUlF7UpJUxVXh -Vv9ZP1phXKtd0mAlYVJjr2TgZhJofGm0au1tZG6ib+FxInJldO92Nnd/eMl6FXyyfgN/VYCpgf+Er4YJ -h2WIwoohi4GOR4+skRKSe5PklVCWvJgrmZubDJx/nfSfaqDholqj1aVRps+oTqnOq1Gs1K2Xrlqv4LFp -svK0frYLt5m5Kbnxurq8Tb3hv3fBDsHawqfEQcUPxd3He8hKyRnKusuKzFvN/87Rz6PQdtFK0vHTxtSb -1kXXG9fx2MjZn9tO3Cbc/93Y3rHfiuBk4hni9ePQ5KzliOZk50HoH+j86drqueuX7HbtVu427xbv9/DX -8bnymvN89F/1QvYl9wj37PjQ+bX6mvt//GX9S/4x//8AAGRlc2MAAAAAAAAACkNvbG9yIExDRAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAABIAAAAcAEMAbwBsAG8AcgAgAEwAQwBE -AABtbW9kAAAAAAAABhAAAJxOAAAAAL5zkQAAAAAAAAAAAAAAAAAAAAAAdGV4dAAAAABDb3B5cmlnaHQg -QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA - - - - - - 3 - MCAwAA - - - - 400 - 75 - - - {100, 18} - {4, 2} - 1151868928 - NSActionCell - - 67239424 - 0 - Radio - - 1211912703 - 0 - - 549453824 - {18, 18} - - YES - - YES - - - - TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw -IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ -29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 -dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA -AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG -AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ -0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ -7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ -5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ -3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD -AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns -AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ -6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ -/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ -///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl -YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA -AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD -AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu -AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQEAAAMAAAABABIAAAEB -AAMAAAABABIAAAECAAMAAAAEAAAFugEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES -AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS -AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA - - - - - - - - 400 - 75 - - - - - - - - {{1, 1}, {194, 62}} - - - - {{15, 44}, {196, 78}} - - {0, 0} - - 67239424 - 0 - LCD Orientation - - LucidaGrande - 11 - 3100 - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - - 12 - - YES - - - 274 - - YES - - - 268 - {{18, 14}, {150, 38}} - - YES - 2 - 1 - - YES - - -2080244224 - 0 - Main Screen First - - - 1 - 1211912703 - 0 - - - - 200 - 25 - - - 67239424 - 0 - Touch Screen First - - - 1211912703 - 0 - - 549453824 - {18, 18} - - YES - - YES - - - - TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw -IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ -29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 -dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA -AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG -AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ -0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ -7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ -5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ -3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD -AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns -AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ -6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ -/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ -///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl -YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA -AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD -AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu -AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgEAAAMAAAABABIAAAEB -AAMAAAABABIAAAECAAMAAAAEAAAFxgEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES -AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS -AAMAAAABAAEAAAFTAAMAAAAEAAAFzodzAAcAAAwYAAAF1gAAAAAACAAIAAgACAABAAEAAQABAAAMGGFw -cGwCAAAAbW50clJHQiBYWVogB9YABAADABMALAASYWNzcEFQUEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAPbWAAEAAAAA0y1hcHBsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAOclhZWgAAASwAAAAUZ1hZWgAAAUAAAAAUYlhZWgAAAVQAAAAUd3RwdAAAAWgAAAAUY2hhZAAA -AXwAAAAsclRSQwAAAagAAAAOZ1RSQwAAAbgAAAAOYlRSQwAAAcgAAAAOdmNndAAAAdgAAAMSbmRpbgAA -BOwAAAY+ZGVzYwAACywAAABkZHNjbQAAC5AAAAAubW1vZAAAC8AAAAAoY3BydAAAC+gAAAAtWFlaIAAA -AAAAAF1KAAA0kQAACCVYWVogAAAAAAAAdCAAALRgAAAjPVhZWiAAAAAAAAAlbAAAFyoAAKfDWFlaIAAA -AAAAAPNSAAEAAAABFs9zZjMyAAAAAAABDEIAAAXe///zJgAAB5IAAP2R///7ov///aMAAAPcAADAbGN1 -cnYAAAAAAAAAAQHNAABjdXJ2AAAAAAAAAAEBzQAAY3VydgAAAAAAAAABAc0AAHZjZ3QAAAAAAAAAAAAD -AQAAAQACBAUGBwkKCw0ODxASExQWFxgaGxweHyAiIyQmJygpKywtLzAxMjM1Njc4OTs8PT5AQUJDREZH -SElKS0xOT1BRUlNUVVZXWFlaW1xdXl9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fX5/gIGCg4SF -hoeIiYqLjI2Oj5CRkpOUlZaXmJmam5ydnZ6foKGio6SlpqanqKmqq6ytra6vsLGysrO0tba3uLi5uru8 -vL2+v8DBwcLDxMXGxsfIycrKy8zNzs7P0NHS0tPU1dbW19jZ2drb3Nzd3t/g4eLi4+Tl5ufo6enq6+zt -7u/w8fHy8/T19vf4+fr7/P3+/v8AAgMEBQYHCAkKCwwNDg8QERITFBUWFxgZGhscHR8gISIjJCUnKCkq -Ky0uLzAxMzQ1Njc4OTo7PD0/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaWltcXV5fYGFiY2RlZmdo -aWprbG1ub3BxcnN0dXZ3d3h5ent8fH1+f4CBgoKDhIWGh4iIiYqLjI2Oj5CRkpOUlJWWl5iZmpucnZ2e -n6ChoqOkpaamp6ipqqusra6vsLCxsrO0tba3uLm5uru8vb6/wMHCw8TFx8jJysvMzc7P0NDR0tPU1dbX -2Nna29ze3+Dh4uPk5ebn6err7O3u7/Hy8/T19vf5+vv8/f7/AAIDAwQFBgcICQoKCwwNDg8QERITFBUW -FxgZGhscHR4fICEiIyQlJicoKSorLC0uLzAxMjM0NTY3ODg5Ojs8PT4+P0BBQkNDREVGR0hJSUpLTE1O -Tk9QUVJSU1RVVVZXWFhZWltbXF1eXl9gYWFiY2RkZWZnZ2hpaWprbGxtbm5vcHFxcnNzdHV1dnd4eHl6 -ent8fH1+fn+AgYGCg4SEhYaHiImJiouMjY6Oj5CRkpOTlJWWl5iZmZqbnJ2en6ChoqOkpaanqKmqq6yt -rq+xsrO0tba3uLq7vL2+wMHDxMbHycrMzs/R0tTW19nb3d7g4uTm6Ors7vDy9Pb4+vz+/wAAbmRpbgAA -AAAAAAY2AACXGgAAVjoAAFPKAACJ3gAAJ8IAABaoAABQDQAAVDkAAiuFAAIZmQABeFEAAwEAAAIAAAAA -AAEABgANABcAIwAxAEAAUgBlAHsAkwCrAMUA4gD/AR8BPwFhAYUBqgHQAfgCIAJLAncCpQLSAwIDMwNl -A5gDzgQFBD0EdQSvBOsFKQVnBacF6AYqBm4GtQb8B0UHkgfkCDkIkAjnCT4JmAn0ClAKrQsLC2sLygwq -DIwM8Q1XDcAOKA6SDv4PbA/bEE0QxBE7EbQSMRKwEzITuRREFNAVYBXxFocXHhfAGGIZBBmsGlQa+RuU -HC4czh1yHhQeux9jIA0gvCFoIhkizyOJJEEk+SW6JnknOygFKMspkypiKzIsASzXLawuhy9gMD4xGzH8 -MtszvzSgNYY2cjdcOEw5OTorOxs8CD0EPfU+6z/nQOFB2ELUQ9VE00XcRttH5EjxSgBLCUwdTTFOUE9v -UI9Rt1LdVAVVNlZsV6VY4FohW21ct135X09goGH0Y0tkqGYFZ19oxGova5ptCG54b/BxbnLsdG119Xd/ -eQh6knwqfcV/W4D4gpSEO4Xih4CJKorYjIqOOY/jkZuTWJUOlsyYiZpSnB6d4Z+soX+jWqUvpxOo+6rj -rMuuwLC4sra0rra0uL+60LzfvwDBHcLdxLXGhchYyi7MCs3lz7rRmtOA1WPXR9kq2xPc/97s4M/iveSn -5o3obupT7ELuLPAM8fLz0PW396H5f/tZ/T3//wAAAAEAAwALABYAJQA3AE0AZQCBAJ8AwQDlAQsBNQFh -AZABwQH1AisCZAKfAtwDHANfA6MD6gQ0BH8EzQT1BR0FcAXEBhsGdAbPBy0HXAeMB+4IUgi4CSAJVAmK -CfYKZArVC0cLgQu8DDIMqw0mDaIOIQ6hDyQPqRAvELgQ/RFDEc8SXRLuE4AUFRSrFUMV3RZ5FxcXthhY -GPwZoRpIGvEbnBxJHPgdqB5bHw8fxSB9ITch8iKwJDAk8yW3Jn4nRigQKNwpqSp5K0osHCzxLccuoC95 -MFUxMzISMvMz1TS5NaA2hzdxOFw5STo4Oyg8Gj4DPvs/9EDuQepD6ETpRexG8Uf3SP9LFEwhTTBOQE9S -UGZSklOrVMVV4Vb/WB5ZP1phW4Vcq13SXvthUmJ/Y69k4GYSZ0dofGm0au1tZG6ib+FxInJlc6l073Y2 -d396FXtjfLJ+A39VgKmB/4NWhK+GCYjCiiGLgYzjjkePrJESknuT5Ja8mCuZm5sMnH+d9J9qoOGiWqPV -pVGmz6eOqE6pzqtRrNSuWq/gsWmy8rR+tgu5Kbq6vE294b93wQ7Cp8RBxd3He8kZyrrLisxbzf/Po9FK -0vHUm9ZF1/HZn9tO3Cbc/96x4GTiGePQ5YjnQegf6Pzquex27jbv9/G583z0X/VC9wj40Pqa/GX+Mf// -AAAAAQADAAsAJQA3AE0AZQCBAJ8AwQELATUBYQGQAcEB9QIrAmQCnwLcAxwDXwOjA+oENAR/BM0FHQVw -BcQGGwZ0Bs8HLQeMB+4IUgi4CSAJign2CmQK1QtHC7wMMgyrDSYNog4hDqEPJA+pEC8QuBFDEl0S7hOA -FBUUqxVDFnkXFxe2GFgY/BpIGvEbnBxJHPgdqB8PH8UgfSE3IfIjbyQwJPMltydGKBAo3Cp5K0osHC3H -LqAveTEzMhIy8zS5NaA2hzhcOUk6ODwaPQ4+Az/0QO5C6EPoROlG8Uf3SglLFEwhTkBPUlF7UpJUxVXh -Vv9ZP1phXKtd0mAlYVJjr2TgZhJofGm0au1tZG6ib+FxInJldO92Nnd/eMl6FXyyfgN/VYCpgf+Er4YJ -h2WIwoohi4GOR4+skRKSe5PklVCWvJgrmZubDJx/nfSfaqDholqj1aVRps+oTqnOq1Gs1K2Xrlqv4LFp -svK0frYLt5m5Kbnxurq8Tb3hv3fBDsHawqfEQcUPxd3He8hKyRnKusuKzFvN/87Rz6PQdtFK0vHTxtSb -1kXXG9fx2MjZn9tO3Cbc/93Y3rHfiuBk4hni9ePQ5KzliOZk50HoH+j86drqueuX7HbtVu427xbv9/DX -8bnymvN89F/1QvYl9wj37PjQ+bX6mvt//GX9S/4x//8AAGRlc2MAAAAAAAAACkNvbG9yIExDRAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAAAAAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAABIAAAAcAEMAbwBsAG8AcgAgAEwAQwBE -AABtbW9kAAAAAAAABhAAAJxOAAAAAL5zkQAAAAAAAAAAAAAAAAAAAAAAdGV4dAAAAABDb3B5cmlnaHQg -QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA - - - - - - - - 400 - 75 - - - {150, 18} - {4, 2} - 1151868928 - NSActionCell - - 67239424 - 0 - Radio - - 1211912703 - 0 - - 549453824 - {18, 18} - - YES - - YES - - - - TU0AKgAABRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAMAAAADAAAAAwAAAAAAAAAA -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAADwRERGLJycnySsrK/A1NTXw -IyMjyRwcHIsJCQk8AAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFFRUVdVBQUOCoqKj/ -29vb//n5+f/6+vr/2tra/6qqqv9UVFTgHx8fdQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUZGRl5 -dXV198PDw//8/Pz////////////////////////////U1NT/fHx89yUlJXkAAAAFAAAAAAAAAAAAAAAA -AAAAAxEREUZqamrmtbW1/+3t7f/+/v7//v7+//7+/v/9/f3//f39//39/f/39/f/xMTE/3d3d+YZGRlG -AAAAAwAAAAAAAAAAAAAACkJCQqGtra3/xsbG/+vr6//y8vL/9fX1//X19f/z8/P/9fX1//Ly8v/u7u7/ -0tLS/6+vr/9KSkqhAAAACgAAAAAAAAAAAAAAF3h4eN2/v7//z8/P/93d3f/q6ur/7+/v/+/v7//w8PD/ -7e3t/+3t7f/i4uL/zs7O/8XFxf98fHzdAAAAFwAAAAAAAAADAAAAJKSkpPjOzs7/2dnZ/+Dg4P/i4uL/ -5eXl/+bm5v/n5+f/5eXl/+Li4v/e3t7/2tra/9DQ0P+srKz4AAAAJAAAAAMAAAADAAAALrCwsPrW1tb/ -3t7e/+Tk5P/p6en/6+vr/+zs7P/p6en/6+vr/+fn5//k5OT/4ODg/9nZ2f+zs7P6AAAALgAAAAMAAAAD -AAAALp2dnezg4OD/5eXl/+rq6v/u7u7/8PDw//Dw8P/x8fH/8PDw/+7u7v/q6ur/5ubm/+Hh4f+ZmZns -AAAALgAAAAMAAAADAAAAJG5ubs/l5eX/6enp/+/v7//y8vL/9vb2//r6+v/5+fn/9/f3//b29v/x8fH/ -6+vr/+Tk5P9ra2vPAAAAJAAAAAMAAAAAAAAAFy4uLpPCwsL67Ozs//Pz8//5+fn//v7+//7+/v/+/v7/ -/v7+//v7+//19fX/8PDw/8LCwvosLCyTAAAAFwAAAAAAAAAAAAAACgAAAENfX1/S5OTk/vn5+f/+/v7/ -///////////////////////////8/Pz/5ubm/l9fX9IAAABDAAAACgAAAAAAAAAAAAAAAwAAABcAAABl -YmJi3NLS0v3////////////////////////////////V1dX9ZGRk3AAAAGUAAAAXAAAAAwAAAAAAAAAA -AAAAAAAAAAUAAAAfAAAAZTMzM8KAgIDwv7+//O3t7f/t7e3/v7+//ICAgPAzMzPCAAAAZQAAAB8AAAAF -AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAFwAAAEMAAAB3AAAAnwAAALMAAACzAAAAnwAAAHcAAABD -AAAAFwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAoAAAAXAAAAJAAAAC4AAAAu -AAAAJAAAABcAAAAKAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA -AAAAAwAAAAMAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADQEAAAMAAAABABIAAAEB -AAMAAAABABIAAAECAAMAAAAEAAAFugEDAAMAAAABAAEAAAEGAAMAAAABAAIAAAERAAQAAAABAAAACAES -AAMAAAABAAEAAAEVAAMAAAABAAQAAAEWAAMAAAABABIAAAEXAAQAAAABAAAFEAEcAAMAAAABAAEAAAFS -AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA - - - - - - - - 400 - 75 - - - - - - - - {{1, 1}, {194, 62}} - - - - {{218, 44}, {196, 78}} - - {0, 0} - - 67239424 - 0 - LCD Order - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - - - {{1, 1}, {429, 132}} - - - - {431, 148} - {0, 0} - - 67239424 - 0 - Combo Display Layout - - - - 3 - MCAwLjgwMDAwMDAxMTkAA - - - - 1 - 0 - 2 - NO - 12 @@ -2392,12 +1545,32 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 75628096 272635904 - + + LucidaGrande + 13 + 1044 + Set Input YES - - + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + + 6 + System + controlTextColor + + 3 + MAA + + @@ -3036,12 +2209,19 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 75628096 2048 - + + LucidaGrande + 11 + 3100 + 6 System headerColor - + + 3 + MQA + 6 @@ -3203,7 +2383,9 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA YES - + + + @@ -3224,7 +2406,15 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA NaN - + + YES + + YES + + + YES + + @@ -3308,7 +2498,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA NaN - + @@ -3652,7 +2842,12 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 0 Sound Input Device Settings - + + 6 + System + textBackgroundColor + + 3 MCAwLjgwMDAwMDAxMTkAA @@ -3693,7 +2888,9 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 4 1211912703 0 - + + NSRadioButton + 200 @@ -3799,7 +2996,10 @@ QXBwbGUgQ29tcHV0ZXIsIEluYy4sIDIwMDUAAAAAA - + + 3 + MCAwAA + 400 @@ -5120,7 +4320,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {1.79769e+308, 1.79769e+308} {256, 408} - + 256 YES @@ -5130,6 +4330,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{0, 24}, {256, 384}} + YES @@ -5143,6 +4344,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{2, 3}, {16, 16}} + 28938 100 @@ -5151,6 +4353,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 289 {{180, 3}, {56, 15}} + YES -2079981824 @@ -5184,6 +4387,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{160, 1}, {20, 20}} + YES 130560 @@ -5204,6 +4408,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 294 {{17, 5}, {137, 14}} + YES 68288064 @@ -5222,11 +4427,16 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {256, 408} + + {{0, 0}, {1920, 1178}} {256, 476} {1.79769e+308, 1.79769e+308} + + EmuControllerDelegate + EmuWindowDelegate @@ -7060,7 +6270,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 1 - + 256 YES @@ -7241,7 +6451,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA NaN - + @@ -7260,7 +6470,12 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA YES - + + 6 + System + textColor + + @@ -7965,6 +7180,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{10, 33}, {443, 355}} + Display Views @@ -8334,7 +7550,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 4 - + 256 YES @@ -8469,7 +7685,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 0 - + . ¤ @@ -8515,7 +7731,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA NaN - + 0 @@ -8908,21 +8124,20 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{10, 33}, {443, 355}} - 3D Rendering - + 0 YES YES YES - + @@ -9689,7 +8904,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA NaN - + @@ -11159,7 +10374,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {1.79769e+308, 1.79769e+308} {700, 250} - + 256 YES @@ -11168,6 +10383,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{17, 310}, {666, 34}} + YES 67239424 @@ -11188,6 +10404,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 292 {{362, 12}, {162, 32}} + 2 YES @@ -11209,6 +10426,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 292 {{200, 12}, {162, 32}} + YES 67239424 @@ -11229,6 +10447,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{17, 274}, {666, 28}} + YES 67239424 @@ -11245,6 +10464,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 292 {{18, 21}, {182, 18}} + YES 67239424 @@ -11267,6 +10487,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 292 {{524, 12}, {162, 32}} + 1 YES @@ -11298,12 +10519,14 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 256 {700, 195} + YES 256 {700, 17} + @@ -11311,6 +10534,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA -2147483392 {{544, 0}, {16, 17}} + YES @@ -11466,6 +10690,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{1, 17}, {700, 195}} + @@ -11476,6 +10701,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA -2147483392 {{544, 17}, {15, 180}} + _doScroller: 0.92307692307692313 @@ -11485,6 +10711,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA -2147483392 {{1, 197}, {598, 15}} + 1 _doScroller: @@ -11499,6 +10726,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{1, 0}, {700, 17}} + @@ -11508,6 +10736,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{-1, 53}, {702, 213}} + 562 @@ -11519,6 +10748,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {700, 364} + + {{0, 0}, {1920, 1178}} {700, 272} @@ -11741,7 +10972,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {1.79769e+308, 1.79769e+308} - + 256 YES @@ -11760,12 +10991,14 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 256 {270, 321} + YES 256 {270, 17} + @@ -11773,6 +11006,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA -2147483392 {{256, 0}, {16, 17}} + YES @@ -11882,6 +11116,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{1, 17}, {270, 321}} + @@ -11892,6 +11127,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA -2147483392 {{256, 17}, {15, 306}} + _doScroller: 0.99689440993788825 @@ -11901,6 +11137,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA -2147483392 {{1, 323}, {270, 15}} + 1 _doScroller: @@ -11915,6 +11152,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{1, 0}, {270, 17}} + @@ -11924,6 +11162,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{20, 49}, {272, 339}} + 562 @@ -11938,6 +11177,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{113, 12}, {185, 32}} + YES 67239424 @@ -11958,6 +11198,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{47, 19}, {28, 23}} + YES -2080244224 @@ -11979,6 +11220,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{20, 19}, {28, 23}} + YES -2080244224 @@ -12010,6 +11252,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{100, 372}, {209, 26}} + YES -2076049856 @@ -12074,6 +11317,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 301 {{2, 33}, {320, 290}} + NSView @@ -12081,6 +11325,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{16, 402}, {129, 18}} + YES 67239424 @@ -12103,6 +11348,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{15, 378}, {83, 17}} + YES 68288064 @@ -12123,6 +11369,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 12 {{14, 320}, {292, 5}} + {0, 0} 67239424 @@ -12145,6 +11392,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{103, 331}, {203, 39}} + YES -1805517311 @@ -12162,6 +11410,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{15, 353}, {83, 17}} + YES 68288064 @@ -12178,6 +11427,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{114, 6}, {96, 32}} + YES 67239424 @@ -12196,10 +11446,12 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{1, 1}, {324, 428}} + {{297, 16}, {326, 444}} + {0, 0} 67239424 @@ -12223,6 +11475,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{89, 446}, {70, 14}} + YES 68288064 @@ -12243,6 +11496,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{89, 421}, {69, 14}} + YES 68288064 @@ -12259,6 +11513,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{160, 421}, {135, 14}} + YES 70385217 @@ -12276,6 +11531,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{161, 446}, {134, 14}} + YES 70385217 @@ -12293,6 +11549,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{90, 394}, {190, 18}} + YES -2080244224 @@ -12327,6 +11584,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{20, 396}, {64, 64}} + YES 130560 @@ -12341,6 +11599,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {640, 480} + + {{0, 0}, {1920, 1178}} {1.79769e+308, 1.79769e+308} @@ -12689,7 +11949,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{1, 17}, {286, 176}} - 4 @@ -12722,7 +11981,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{1, 0}, {286, 17}} - 4 @@ -12731,7 +11989,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{20, 20}, {288, 194}} - 562 @@ -13118,7 +12375,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {1.79769e+308, 1.79769e+308} - + 268 YES @@ -13127,6 +12384,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{233, 54}, {80, 28}} + YES 67239424 @@ -13147,6 +12405,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{20, 59}, {210, 19}} + YES 343014976 @@ -13208,6 +12467,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{17, 86}, {294, 14}} + YES 67239424 @@ -13224,6 +12484,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{17, 100}, {294, 14}} + YES 67239424 @@ -13237,6 +12498,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {328, 134} + + NSView @@ -13574,7 +12837,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA NaN - + @@ -16158,14 +15421,14 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 279 2 - {{230, -19}, {284, 560}} + {{149, 108}, {284, 560}} -461896704 3D Rendering Settings NSPanel {1.79769e+308, 1.79769e+308} - + 256 YES @@ -16184,6 +15447,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{15, 77}, {206, 18}} + YES -2080244224 @@ -16206,6 +15470,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{15, 57}, {134, 18}} + YES -2080244224 @@ -16228,6 +15493,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{15, 37}, {80, 18}} + YES -2080244224 @@ -16250,6 +15516,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{185, 12}, {45, 19}} + YES -1804468671 @@ -16303,7 +15570,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA NaN - + @@ -16330,6 +15597,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{15, 14}, {165, 14}} + YES 68288064 @@ -16344,10 +15612,12 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{1, 1}, {248, 103}} + {{17, 241}, {250, 119}} + {0, 0} 67239424 @@ -16371,6 +15641,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{65, 18}, {154, 19}} + YES -2080244224 @@ -16401,6 +15672,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{18, 14}, {107, 58}} + YES 3 1 @@ -16605,10 +15877,12 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{1, 1}, {248, 82}} + {{17, 442}, {250, 98}} + {0, 0} 67239424 @@ -16642,6 +15916,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{18, 14}, {120, 98}} + YES 5 1 @@ -16906,10 +16181,12 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{1, 1}, {248, 122}} + {{17, 41}, {250, 138}} + {0, 0} 67239424 @@ -16943,6 +16220,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{15, 32}, {113, 18}} + YES -2080244224 @@ -16965,6 +16243,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{15, 12}, {108, 18}} + YES -2080244224 @@ -16985,10 +16264,12 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{1, 1}, {248, 58}} + {{17, 364}, {250, 74}} + {0, 0} 67239424 @@ -17022,6 +16303,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{16, 12}, {192, 18}} + YES 67239424 @@ -17042,10 +16324,12 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{1, 1}, {248, 38}} + {{17, 183}, {250, 54}} + {0, 0} 67239424 @@ -17066,6 +16350,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {284, 560} + + {{0, 0}, {1920, 1178}} {1.79769e+308, 1.79769e+308} @@ -17080,7 +16366,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {1.79769e+308, 1.79769e+308} - + 256 YES @@ -17099,6 +16385,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{18, 14}, {61, 58}} + YES 3 1 @@ -17303,10 +16590,12 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{1, 1}, {253, 82}} + {{16, 189}, {255, 98}} + {0, 0} 67239424 @@ -17340,6 +16629,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{18, 80}, {154, 38}} + YES 2 1 @@ -17533,6 +16823,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{53, 14}, {100, 58}} + YES 3 1 @@ -17737,10 +17028,12 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{1, 1}, {253, 128}} + {{16, 41}, {255, 144}} + {0, 0} 67239424 @@ -17774,6 +17067,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{15, 12}, {129, 18}} + YES -2080244224 @@ -17794,10 +17088,12 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{1, 1}, {253, 38}} + {{16, 291}, {255, 54}} + {0, 0} 67239424 @@ -17831,6 +17127,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{47, 13}, {136, 21}} + YES 67501824 @@ -17852,6 +17149,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{186, 17}, {52, 17}} + YES 68288064 @@ -17903,7 +17201,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA NaN - + @@ -17942,6 +17240,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{18, 14}, {20, 20}} + YES 130560 @@ -17957,10 +17256,12 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{1, 1}, {253, 44}} + {{16, 349}, {255, 60}} + {0, 0} 67239424 @@ -17984,6 +17285,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{66, 18}, {154, 19}} + YES -2080244224 @@ -18014,6 +17316,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{18, 14}, {116, 38}} + YES 2 1 @@ -18205,10 +17508,12 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{1, 1}, {253, 62}} + {{16, 413}, {255, 78}} + {0, 0} 67239424 @@ -18229,6 +17534,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {288, 511} + + {{0, 0}, {1920, 1178}} {1.79769e+308, 1.79769e+308} @@ -19260,7 +18567,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {1.79769e+308, 1.79769e+308} - + 256 YES @@ -19269,6 +18576,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{30, 43}, {411, 26}} + YES -2079981824 @@ -19290,6 +18598,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{17, 77}, {38, 17}} + YES 68288064 @@ -19306,6 +18615,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{412, 77}, {38, 17}} + YES 68288064 @@ -19322,6 +18632,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{97, 77}, {38, 17}} + YES 68288064 @@ -19338,6 +18649,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{176, 77}, {38, 17}} + YES 68288064 @@ -19354,6 +18666,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{254, 77}, {38, 17}} + YES 68288064 @@ -19370,6 +18683,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{335, 77}, {38, 17}} + YES 68288064 @@ -19386,6 +18700,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{32, 18}, {133, 19}} + 100 YES @@ -19407,6 +18722,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{260, 21}, {123, 17}} + YES 68288064 @@ -19423,6 +18739,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{385, 21}, {57, 17}} + YES 68288064 @@ -19476,7 +18793,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA NaN - + @@ -19503,6 +18820,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{158, 100}, {154, 18}} + YES -2080244224 @@ -19522,6 +18840,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {467, 135} + + {{0, 0}, {1920, 1178}} {1.79769e+308, 1.79769e+308} @@ -19536,7 +18856,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {1.79769e+308, 1.79769e+308} - + 256 YES @@ -19545,6 +18865,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{88, 119}, {32, 34}} + YES 67501824 @@ -19567,6 +18888,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{85, 161}, {38, 17}} + YES 68288064 @@ -19583,6 +18905,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{85, 94}, {39, 17}} + YES 68288064 @@ -19599,6 +18922,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{44, 127}, {39, 17}} + YES 68288064 @@ -19615,6 +18939,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{125, 127}, {38, 17}} + YES 68288064 @@ -19631,6 +18956,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{127, 69}, {57, 17}} + YES 68288064 @@ -19686,7 +19012,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA NaN - + @@ -19713,6 +19039,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{24, 69}, {101, 17}} + YES 68288064 @@ -19729,6 +19056,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{27, 42}, {154, 19}} + YES -2080244224 @@ -19749,6 +19077,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 268 {{27, 17}, {154, 19}} + YES -2080244224 @@ -19766,6 +19095,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {213, 198} + + {{0, 0}, {1440, 878}} {1.79769e+308, 1.79769e+308} @@ -21406,6 +20737,33 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA YES + + + YES + isWorking + isRomLoading + statusText + currentVolumeValue + currentVolumeIcon + isShowingSaveStateDialog + isShowingFileMigrationDialog + isUserInterfaceBlockingExecution + currentSaveStateURL + selectedRomSaveTypeID + currentRom + render3DRenderingEngine + render3DHighPrecisionColorInterpolation + render3DEdgeMarking + render3DFog + render3DTextures + render3DDepthComparisonThreshold + render3DThreads + render3DLineHack + render3DMultisample + + EmuControllerDelegate + + YES @@ -21720,14 +21078,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 718 - - - closeRom: - - - - 767 - makeKeyAndOrderFront: @@ -21776,22 +21126,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 1103 - - - openRom: - - - - 1107 - - - - openRom: - - - - 1237 - showGeneralView: @@ -22320,14 +21654,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 2456 - - - speedLimitDisable: - - - - 2481 - chooseFirmwareImage: @@ -22376,30 +21702,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 2624 - - - saveFileMigrationSheet - - - - 2904 - - - - closeMigrationSheet: - - - - 2905 - - - - closeMigrationSheet: - - - - 2906 - migrationWindow @@ -22871,166 +22173,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 3439 - - - toggleGPUState: - - - - 3441 - - - - toggleGPUState: - - - - 3442 - - - - toggleGPUState: - - - - 3443 - - - - toggleGPUState: - - - - 3446 - - - - toggleGPUState: - - - - 3447 - - - - toggleGPUState: - - - - 3449 - - - - toggleGPUState: - - - - 3450 - - - - toggleGPUState: - - - - 3451 - - - - toggleGPUState: - - - - 3452 - - - - toggleGPUState: - - - - 3453 - - - - toggleGPUState: - - - - 3454 - - - - toggleGPUState: - - - - 3455 - - - - closeMigrationSheet: - - - - 3466 - - - - closeMigrationSheet: - - - - 3467 - - - - saveStatePrecloseSheet - - - - 3470 - - - - closeMigrationSheet: - - - - 3473 - - - - resetCore: - - - - 3483 - - - - resetCore: - - - - 3484 - - - - executeCoreToggle: - - - - 3485 - - - - executeCoreToggle: - - - - 3486 - prefWindowController @@ -23311,14 +22453,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 3562 - - - romInfoPanelController - - - - 3577 - cdsDisplayController @@ -23495,14 +22629,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 3697 - - - firmwarePanelController - - - - 3699 - makeKeyAndOrderFront: @@ -23519,14 +22645,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 3796 - - - writeDefaults3DRenderingSettings: - - - - 3797 - value: values.Render3D_HighPrecisionColorInterpolation @@ -23607,62 +22725,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 3836 - - - change3DRenderEdgeMarking: - - - - 3871 - - - - change3DRenderFog: - - - - 3872 - - - - change3DRenderHighPrecisionColorInterpolation: - - - - 3873 - - - - change3DRenderMethod: - - - - 3874 - - - - change3DRenderMethod: - - - - 3875 - - - - change3DRenderTextures: - - - - 3876 - - - - delegate - - - - 3877 - selectedTag: values.Render3D_Threads @@ -23695,46 +22757,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 3902 - - - change3DRenderLineHack: - - - - 3904 - - - - change3DRenderThreads: - - - - 3905 - - - - change3DRenderThreads: - - - - 3906 - - - - change3DRenderThreads: - - - - 3907 - - - - change3DRenderThreads: - - - - 3908 - changeRotationRelative: @@ -23839,46 +22861,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 3923 - - - changeCoreSpeed: - - - - 3924 - - - - changeCoreSpeed: - - - - 3925 - - - - changeCoreSpeed: - - - - 3926 - - - - changeCoreSpeed: - - - - 3928 - - - - changeCoreSpeed: - - - - 3929 - changeDisplayMode: @@ -23951,110 +22933,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 3964 - - - cdsSoundController - - - - 3971 - - - - writeDefaultsSoundSettings: - - - - 3972 - - - - changeSpuAdvancedLogic: - - - - 3973 - - - - changeSpuInterpolationMode: - - - - 3974 - - - - changeSpuInterpolationMode: - - - - 3975 - - - - changeSpuInterpolationMode: - - - - 3976 - - - - changeSpuSyncMethod: - - - - 3977 - - - - changeSpuSyncMethod: - - - - 3978 - - - - changeSpuSyncMethod: - - - - 3979 - - - - changeSpuSyncMode: - - - - 3980 - - - - changeSpuSyncMode: - - - - 3981 - - - - changeVolume: - - - - 3985 - - - - changeVolume: - - - - 3987 - value: selection.Arm9BiosImageName @@ -24359,86 +23237,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 4151 - - - changeCoreEmuFlags: - - - - 4154 - - - - changeCoreEmuFlags: - - - - 4155 - - - - changeCoreEmuFlags: - - - - 4156 - - - - changeCoreEmuFlags: - - - - 4157 - - - - changeCoreEmuFlags: - - - - 4158 - - - - changeCoreEmuFlags: - - - - 4159 - - - - changeCoreEmuFlags: - - - - 4160 - - - - changeCoreEmuFlags: - - - - 4161 - - - - writeDefaultsEmulationSettings: - - - - 4162 - - - - cdsCoreController - - - - 4163 - makeKeyAndOrderFront: @@ -24455,14 +23253,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 4280 - - - changeFirmwareSettings: - - - - 4462 - writeDefaultsHUDSettings: @@ -24495,14 +23285,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 4468 - - - toggleAutoFrameSkip: - - - - 4475 - makeKeyAndOrderFront: @@ -24527,14 +23309,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 4648 - - - cheatsDisable: - - - - 4696 - window @@ -24663,22 +23437,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 4748 - - - cheatListController - - - - 4753 - - - - cheatWindowController - - - - 4754 - cheatListController @@ -24687,14 +23445,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 4755 - - - cheatWindowDelegate - - - - 4756 - parentWindow @@ -24927,14 +23677,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 5110 - - - cheatDatabaseController - - - - 5118 - cheatDatabaseController @@ -25087,14 +23829,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 5426 - - - delegate - - - - 5474 - value: selection.nickname @@ -25391,214 +24125,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 5499 - - - exportRomSave: - - - - 5500 - - - - importRomSave: - - - - 5501 - - - - openEmuSaveState: - - - - 5502 - - - - saveEmuSaveState: - - - - 5503 - - - - saveEmuSaveStateAs: - - - - 5504 - - - - revertEmuSaveState: - - - - 5505 - - - - changeRomSaveType: - - - - 5506 - - - - changeRomSaveType: - - - - 5507 - - - - changeRomSaveType: - - - - 5508 - - - - changeRomSaveType: - - - - 5509 - - - - changeRomSaveType: - - - - 5510 - - - - changeRomSaveType: - - - - 5511 - - - - changeRomSaveType: - - - - 5512 - - - - changeRomSaveType: - - - - 5513 - - - - changeRomSaveType: - - - - 5514 - - - - changeRomSaveType: - - - - 5515 - - - - changeRomSaveType: - - - - 5516 - - - - changeRomSaveType: - - - - 5517 - - - - changeRomSaveType: - - - - 5518 - - - - changeRomSaveType: - - - - 5519 - - - - changeAudioEngine: - - - - 5520 - - - - changeAudioEngine: - - - - 5521 - - - - value: selection.volume - - - - - - value: selection.volume - value - selection.volume - 2 - - - 5522 - - - - value: selection.volume - - - - - - value: selection.volume - value - selection.volume - 2 - - - 5524 - value: selection.volumeIconImage @@ -25615,89 +24141,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 5525 - - - value: selection.volumeIconImage - - - - - - value: selection.volumeIconImage - value - selection.volumeIconImage - 2 - - - 5526 - - - - value: selection.volumeIconImage - - - - - - value: selection.volumeIconImage - value - selection.volumeIconImage - 2 - - - 5527 - - - - value: selection.status - - - - - - value: selection.status - value - selection.status - - YES - - YES - NSAllowsEditingMultipleValuesSelection - NSRaisesForNotApplicableKeys - NSValidatesImmediately - - - YES - - - - - - 2 - - - 5528 - - - - animate: selection.isWorking - - - - - - animate: selection.isWorking - animate - selection.isWorking - - NSRaisesForNotApplicableKeys - - - 2 - - - 5529 - enabled: selection.isRomLoaded @@ -28541,69 +26984,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 5956 - - - selectExportRomSaveFormat: - - - - 5957 - - - - selectExportRomSaveFormat: - - - - 5958 - - - - exportRomSavePanelAccessoryView - - - - 5959 - - - - value: selection.volume - - - - - - value: selection.volume - value - selection.volume - - YES - - YES - NSAllowsEditingMultipleValuesSelection - NSRaisesForNotApplicableKeys - NSValidatesImmediately - - - YES - - - - - - 2 - - - 5962 - - - - selectExportRomSaveFormat: - - - - 5964 - value: selection.isSpeedLimitEnabled @@ -28717,54 +27097,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 5976 - - - selectedTag: values.DisplayViewCombo_MainScreenFirst - - - - - - selectedTag: values.DisplayViewCombo_MainScreenFirst - selectedTag - values.DisplayViewCombo_MainScreenFirst - 2 - - - 5977 - - - - selectedTag: values.DisplayViewCombo_Orientation - - - - - - selectedTag: values.DisplayViewCombo_Orientation - selectedTag - values.DisplayViewCombo_Orientation - 2 - - - 5978 - - - - value: values.DisplayViewCombo_Gap - - - - - - value: values.DisplayViewCombo_Gap - value - values.DisplayViewCombo_Gap - 2 - - - 5979 - hidden: selection.isShowingStatusBar @@ -29954,134 +28286,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 6109 - - - selectedTag: selection.render3DRenderingEngine - - - - - - selectedTag: selection.render3DRenderingEngine - selectedTag - selection.render3DRenderingEngine - 2 - - - 6111 - - - - value: selection.render3DLineHack - - - - - - value: selection.render3DLineHack - value - selection.render3DLineHack - 2 - - - 6112 - - - - value: selection.render3DHighPrecisionColorInterpolation - - - - - - value: selection.render3DHighPrecisionColorInterpolation - value - selection.render3DHighPrecisionColorInterpolation - 2 - - - 6113 - - - - value: selection.render3DEdgeMarking - - - - - - value: selection.render3DEdgeMarking - value - selection.render3DEdgeMarking - 2 - - - 6114 - - - - value: selection.render3DFog - - - - - - value: selection.render3DFog - value - selection.render3DFog - 2 - - - 6115 - - - - value: selection.render3DTextures - - - - - - value: selection.render3DTextures - value - selection.render3DTextures - 2 - - - 6116 - - - - value: selection.render3DDepthComparisonThreshold - - - - - - value: selection.render3DDepthComparisonThreshold - value - selection.render3DDepthComparisonThreshold - 2 - - - 6117 - - - - selectedTag: selection.render3DThreads - - - - - - selectedTag: selection.render3DThreads - selectedTag - selection.render3DThreads - 2 - - - 6118 - value: values.General_ExecuteROMOnLoad @@ -30398,14 +28602,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 6232 - - - change3DRenderMethod: - - - - 6235 - changeVideoFilter: @@ -30973,22 +29169,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 6616 - - - value: selection.render3DMultisample - - - - - - value: selection.render3DMultisample - value - selection.render3DMultisample - 2 - - - 6621 - value: values.Render3D_Multisample @@ -31005,14 +29185,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 6625 - - - change3DRenderMultisample: - - - - 6626 - value: values.Emulation_RigorousTiming @@ -31046,20 +29218,1078 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 6632 - - changeCoreEmuFlags: - - + + cdsCoreController + + - 6633 + 6655 + + + + cdsSoundController + + + + 6656 + + + + cheatDatabaseController + + + + 6657 + + + + cheatListController + + + + 6658 + + + + cheatWindowController + + + + 6659 + + + + cheatWindowDelegate + + + + 6660 + + + + exportRomSavePanelAccessoryView + + + + 6661 + + + + firmwarePanelController + + + + 6662 + + + + romInfoPanelController + + + + 6663 + + + + emuControlController + + + + 6664 - change3DRenderThreads: - - + changeAudioEngine: + + - 6636 + 6680 + + + + changeAudioEngine: + + + + 6681 + + + + changeSpuAdvancedLogic: + + + + 6682 + + + + changeSpuInterpolationMode: + + + + 6683 + + + + changeSpuInterpolationMode: + + + + 6684 + + + + changeSpuInterpolationMode: + + + + 6685 + + + + changeSpuSyncMethod: + + + + 6686 + + + + changeSpuSyncMethod: + + + + 6687 + + + + changeSpuSyncMethod: + + + + 6688 + + + + changeSpuSyncMode: + + + + 6689 + + + + changeSpuSyncMode: + + + + 6690 + + + + changeVolume: + + + + 6691 + + + + writeDefaults3DRenderingSettings: + + + + 6692 + + + + writeDefaultsEmulationSettings: + + + + 6693 + + + + writeDefaultsSoundSettings: + + + + 6694 + + + + changeRomSaveType: + + + + 6695 + + + + changeRomSaveType: + + + + 6696 + + + + changeRomSaveType: + + + + 6697 + + + + changeRomSaveType: + + + + 6698 + + + + changeRomSaveType: + + + + 6699 + + + + changeRomSaveType: + + + + 6700 + + + + changeRomSaveType: + + + + 6701 + + + + changeRomSaveType: + + + + 6702 + + + + changeRomSaveType: + + + + 6703 + + + + changeRomSaveType: + + + + 6704 + + + + changeRomSaveType: + + + + 6705 + + + + changeRomSaveType: + + + + 6706 + + + + changeRomSaveType: + + + + 6707 + + + + changeRomSaveType: + + + + 6708 + + + + closeRom: + + + + 6709 + + + + exportRomSave: + + + + 6710 + + + + importRomSave: + + + + 6711 + + + + openRom: + + + + 6712 + + + + revertEmuSaveState: + + + + 6713 + + + + saveEmuSaveState: + + + + 6714 + + + + saveEmuSaveStateAs: + + + + 6715 + + + + toggleAutoFrameSkip: + + + + 6716 + + + + speedLimitDisable: + + + + 6717 + + + + resetCore: + + + + 6718 + + + + executeCoreToggle: + + + + 6719 + + + + selectExportRomSaveFormat: + + + + 6720 + + + + selectExportRomSaveFormat: + + + + 6721 + + + + selectExportRomSaveFormat: + + + + 6722 + + + + changeCoreEmuFlags: + + + + 6723 + + + + changeCoreEmuFlags: + + + + 6724 + + + + changeCoreEmuFlags: + + + + 6725 + + + + changeCoreEmuFlags: + + + + 6726 + + + + changeCoreEmuFlags: + + + + 6727 + + + + changeCoreEmuFlags: + + + + 6728 + + + + changeCoreEmuFlags: + + + + 6729 + + + + changeCoreEmuFlags: + + + + 6730 + + + + changeCoreEmuFlags: + + + + 6731 + + + + toggleGPUState: + + + + 6732 + + + + toggleGPUState: + + + + 6733 + + + + toggleGPUState: + + + + 6734 + + + + toggleGPUState: + + + + 6735 + + + + toggleGPUState: + + + + 6736 + + + + toggleGPUState: + + + + 6737 + + + + toggleGPUState: + + + + 6738 + + + + toggleGPUState: + + + + 6739 + + + + toggleGPUState: + + + + 6740 + + + + toggleGPUState: + + + + 6741 + + + + toggleGPUState: + + + + 6742 + + + + toggleGPUState: + + + + 6743 + + + + openEmuSaveState: + + + + 6744 + + + + changeFirmwareSettings: + + + + 6745 + + + + cheatsDisable: + + + + 6746 + + + + changeCoreSpeed: + + + + 6747 + + + + changeCoreSpeed: + + + + 6748 + + + + changeCoreSpeed: + + + + 6749 + + + + changeCoreSpeed: + + + + 6750 + + + + changeCoreSpeed: + + + + 6752 + + + + changeVolume: + + + + 6753 + + + + resetCore: + + + + 6754 + + + + executeCoreToggle: + + + + 6755 + + + + openRom: + + + + 6756 + + + + value: selection.currentVolumeIcon + + + + + + value: selection.currentVolumeIcon + value + selection.currentVolumeIcon + 2 + + + 6758 + + + + value: selection.currentVolumeValue + + + + + + value: selection.currentVolumeValue + value + selection.currentVolumeValue + 2 + + + 6760 + + + + value: selection.statusText + + + + + + value: selection.statusText + value + selection.statusText + + YES + + YES + NSAllowsEditingMultipleValuesSelection + NSRaisesForNotApplicableKeys + NSValidatesImmediately + + + YES + + + + + + 2 + + + 6762 + + + + animate: selection.isWorking + + + + + + animate: selection.isWorking + animate + selection.isWorking + + NSRaisesForNotApplicableKeys + + + 2 + + + 6763 + + + + value: selection.currentVolumeValue + + + + + + value: selection.currentVolumeValue + value + selection.currentVolumeValue + 2 + + + 6765 + + + + value: selection.currentVolumeIcon + + + + + + value: selection.currentVolumeIcon + value + selection.currentVolumeIcon + 2 + + + 6767 + + + + value: selection.currentVolumeValue + + + + + + value: selection.currentVolumeValue + value + selection.currentVolumeValue + + YES + + YES + NSAllowsEditingMultipleValuesSelection + NSRaisesForNotApplicableKeys + NSValidatesImmediately + + + YES + + + + + + 2 + + + 6769 + + + + closeSheet: + + + + 6799 + + + + closeSheet: + + + + 6800 + + + + closeSheet: + + + + 6801 + + + + closeSheet: + + + + 6802 + + + + closeSheet: + + + + 6803 + + + + saveFileMigrationSheet + + + + 6804 + + + + saveStatePrecloseSheet + + + + 6805 + + + + emuControlController + + + + 6808 + + + + delegate + + + + 6809 + + + + selectedTag: selection.render3DRenderingEngine + + + + + + selectedTag: selection.render3DRenderingEngine + selectedTag + selection.render3DRenderingEngine + 2 + + + 6815 + + + + value: selection.render3DLineHack + + + + + + value: selection.render3DLineHack + value + selection.render3DLineHack + 2 + + + 6816 + + + + value: selection.render3DTextures + + + + + + value: selection.render3DTextures + value + selection.render3DTextures + 2 + + + 6817 + + + + value: selection.render3DHighPrecisionColorInterpolation + + + + + + value: selection.render3DHighPrecisionColorInterpolation + value + selection.render3DHighPrecisionColorInterpolation + 2 + + + 6818 + + + + value: selection.render3DEdgeMarking + + + + + + value: selection.render3DEdgeMarking + value + selection.render3DEdgeMarking + 2 + + + 6819 + + + + value: selection.render3DFog + + + + + + value: selection.render3DFog + value + selection.render3DFog + 2 + + + 6820 + + + + value: selection.render3DDepthComparisonThreshold + + + + + + value: selection.render3DDepthComparisonThreshold + value + selection.render3DDepthComparisonThreshold + 2 + + + 6821 + + + + value: selection.render3DMultisample + + + + + + value: selection.render3DMultisample + value + selection.render3DMultisample + 2 + + + 6822 + + + + selectedTag: selection.render3DThreads + + + + + + selectedTag: selection.render3DThreads + selectedTag + selection.render3DThreads + 2 + + + 6823 + + + + cdsSoundController + + + + 6824 + + + + romInfoPanelController + + + + 6825 + + + + content + + + + 6826 @@ -39434,288 +38664,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA - - 1537 - - - YES - - - - - - - - - - 5460 - - - YES - - - - - - 5461 - - - - - 5462 - - - YES - - - - - - 5463 - - - YES - - - - - - 5464 - - - YES - - - - - - - - - - - 5465 - - - - - 5466 - - - - - 5467 - - - - - 5468 - - - - - 5469 - - - - - 5470 - - - - - 5471 - - - YES - - - - - - 5472 - - - YES - - - - - - 5473 - - - - - 5476 - - - YES - - - - - - 5451 - - - YES - - - - - - - - 5454 - - - - - 5453 - - - - - 5452 - - - - - 5477 - - - YES - - - - - - 1591 - - - YES - - - - - - - - 1592 - - - - - 1593 - - - - - 1594 - - - - - 5428 - - - YES - - - - - - 5429 - - - YES - - - - - - - - - - 5430 - - - - - 5431 - - - - - 5432 - - - - - 5433 - - - - - 5434 - - - - - 5441 - - - YES - - - - - - 5442 - - - YES - - - - - - - - - - - 5449 - - - - - 5448 - - - - - 5447 - - - - - 5446 - - - - - 5445 - - - - - 5443 - - - 5648 @@ -42403,6 +41351,17 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA + + 6651 + + + + + 6652 + + + Emulation Control Controller + @@ -42627,9 +41586,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 1530.IBPluginDependency 1531.IBPluginDependency 1532.IBPluginDependency - 1537.IBEditorWindowLastContentRect - 1537.IBPluginDependency - 1537.IBViewBoundsToFrameTransform 1538.IBPluginDependency 1538.IBViewBoundsToFrameTransform 1539.IBPluginDependency @@ -42690,13 +41646,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 1581.IBPluginDependency 1584.IBEditorWindowLastContentRect 1584.IBPluginDependency - 1591.IBPluginDependency - 1591.IBViewBoundsToFrameTransform - 1592.IBAttributePlaceholdersKey - 1592.IBPluginDependency - 1593.IBAttributePlaceholdersKey - 1593.IBPluginDependency - 1594.IBPluginDependency 1615.IBAttributePlaceholdersKey 1615.IBPluginDependency 1615.IBViewBoundsToFrameTransform @@ -43905,55 +42854,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 5421.IBPluginDependency 5427.IBAttributePlaceholdersKey 5427.IBPluginDependency - 5428.IBPluginDependency - 5429.IBEditorWindowLastContentRect - 5429.IBPluginDependency - 5430.IBPluginDependency - 5431.IBPluginDependency - 5432.IBPluginDependency - 5433.IBPluginDependency - 5434.IBPluginDependency - 5441.IBPluginDependency - 5442.IBEditorWindowLastContentRect - 5442.IBPluginDependency - 5443.IBPluginDependency - 5445.IBPluginDependency - 5446.IBPluginDependency - 5447.IBPluginDependency - 5448.IBPluginDependency - 5449.IBPluginDependency 5450.IBPluginDependency 5450.IBViewBoundsToFrameTransform - 5451.IBPluginDependency - 5451.IBViewBoundsToFrameTransform - 5452.IBPluginDependency - 5453.IBPluginDependency - 5454.IBPluginDependency - 5460.IBPluginDependency - 5460.IBViewBoundsToFrameTransform - 5461.IBPluginDependency - 5462.IBPluginDependency - 5462.IBViewBoundsToFrameTransform - 5463.IBPluginDependency - 5464.IBEditorWindowLastContentRect - 5464.IBPluginDependency - 5465.IBPluginDependency - 5466.IBPluginDependency - 5467.IBPluginDependency - 5468.IBPluginDependency - 5469.IBPluginDependency - 5470.IBPluginDependency - 5471.IBAttributePlaceholdersKey - 5471.IBPluginDependency - 5471.IBViewBoundsToFrameTransform - 5472.IBPluginDependency - 5473.IBNumberFormatterBehaviorMetadataKey - 5473.IBNumberFormatterLocalizesFormatMetadataKey - 5473.IBPluginDependency - 5476.IBPluginDependency - 5476.IBViewBoundsToFrameTransform - 5477.IBPluginDependency - 5477.IBViewBoundsToFrameTransform 56.IBPluginDependency 56.ImportedFromIB2 5648.IBPluginDependency @@ -44528,6 +43430,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA 6634.IBAttributePlaceholdersKey 6634.IBPluginDependency 6635.IBAttributePlaceholdersKey + 6651.IBPluginDependency + 6652.IBPluginDependency 714.IBEditorWindowLastContentRect 714.IBPluginDependency 714.IBViewBoundsToFrameTransform @@ -44840,7 +43744,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA {{522, 812}, {146, 23}} com.apple.InterfaceBuilder.CocoaPlugin - {{1537, 853}, {117, 253}} + {{1228, 823}, {117, 253}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -45179,9 +44083,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{1085, 684}, {431, 148}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin AUGIAABBgAAAA @@ -45281,29 +44182,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin {{1000, 634}, {489, 425}} com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - P4AAAL+AAABDdgAAwzcAAA - - - ToolTip - - ToolTip - - If the display layout is vertical, the main screen will be arranged above the touch screen. If the display layout is horizontal, the main screen will be arranged left of the touch screen. - - - com.apple.InterfaceBuilder.CocoaPlugin - - ToolTip - - ToolTip - - If the display layout is vertical, the touch screen will be arranged above the main screen. If the display layout is horizontal, the touch screen will be arranged left of the main screen. [NOT YET IMPLEMENTED IN THIS VERSION] - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin InitialTabViewItem @@ -45749,7 +44627,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{1247, 663}, {156, 293}} + {{1287, 663}, {156, 293}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -45769,7 +44647,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{1278, 1063}, {194, 73}} + {{1025, 1063}, {194, 73}} com.apple.InterfaceBuilder.CocoaPlugin {{525, 802}, {197, 73}} @@ -45894,9 +44772,9 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{415, 538}, {700, 364}} + {{873, 105}, {700, 364}} com.apple.InterfaceBuilder.CocoaPlugin - {{415, 538}, {700, 364}} + {{873, 105}, {700, 364}} @@ -45953,9 +44831,9 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{540, 476}, {380, 200}} + {{829, 213}, {380, 200}} com.apple.InterfaceBuilder.CocoaPlugin - {{540, 476}, {380, 200}} + {{829, 213}, {380, 200}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -45992,7 +44870,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA P4AAAL+AAABBiAAAwswAAA - {{841, 1136}, {512, 20}} + {{645, 1136}, {512, 20}} com.apple.InterfaceBuilder.CocoaPlugin {74, 862} @@ -46007,7 +44885,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA P4AAAL+AAABBiAAAw6WAAA com.apple.InterfaceBuilder.CocoaPlugin - {{1115, 843}, {315, 293}} + {{919, 843}, {315, 293}} com.apple.InterfaceBuilder.CocoaPlugin {{475, 832}, {234, 43}} com.apple.InterfaceBuilder.CocoaPlugin @@ -46030,7 +44908,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{985, 983}, {151, 153}} + {{789, 983}, {151, 153}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -46046,9 +44924,9 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{344, 993}, {335, 163}} + {{1241, 208}, {335, 163}} com.apple.InterfaceBuilder.CocoaPlugin - {{344, 993}, {335, 163}} + {{1241, 208}, {335, 163}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -46145,17 +45023,17 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{1029, 702}, {256, 408}} + {{1343, 397}, {256, 408}} com.apple.InterfaceBuilder.CocoaPlugin - {{1029, 702}, {256, 408}} + {{1343, 397}, {256, 408}} {{33, 99}, {480, 360}} {3.40282e+38, 3.40282e+38} {256, 408} - {{941, 205}, {288, 511}} + {{1333, 146}, {288, 511}} com.apple.InterfaceBuilder.CocoaPlugin - {{941, 205}, {288, 511}} + {{1333, 146}, {288, 511}} com.apple.InterfaceBuilder.CocoaPlugin @@ -46293,7 +45171,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin - P4AAAL+AAABBcAAAwroAAA + P4AAAL+AAABBcAAAwpIAAA com.apple.InterfaceBuilder.CocoaPlugin @@ -46352,9 +45230,9 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA AUGIAABDIwAAA com.apple.InterfaceBuilder.CocoaPlugin - {{1296, 339}, {284, 560}} + {{1289, 580}, {284, 560}} com.apple.InterfaceBuilder.CocoaPlugin - {{1296, 339}, {284, 560}} + {{1289, 580}, {284, 560}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -46445,7 +45323,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin - P4AAAL+AAABBkAAAwqoAAA + P4AAAL+AAABBkAAAwowAAA ToolTip @@ -46638,7 +45516,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{1487, 1073}, {101, 63}} + {{1470, 1073}, {101, 63}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -46864,7 +45742,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA P4AAAL+AAABCHAAAwjQAAA com.apple.InterfaceBuilder.CocoaPlugin - {{1357, 426}, {260, 328}} + {{1310, 299}, {260, 328}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -47423,7 +46301,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA P4AAAL+AAABCMAAAw/gAAA com.apple.InterfaceBuilder.CocoaPlugin - {{1349, 1023}, {261, 113}} + {{1096, 1023}, {261, 113}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -47630,7 +46508,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{855, 900}, {64, 6}} + {{1009, 900}, {64, 6}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -47644,76 +46522,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{993, 983}, {178, 93}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - {{993, 963}, {118, 113}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin AUDAAABDbwAAA com.apple.InterfaceBuilder.CocoaPlugin - - P4AAAL+AAABCWAAAwy4AAA - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - P4AAAL+AAABBcAAAwegAAA - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - P4AAAL+AAABDDwAAwgAAAA - - com.apple.InterfaceBuilder.CocoaPlugin - {{1135, 301}, {119, 113}} - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - ToolTip - - ToolTip - - The default display separation for new DS combo display views. A custom separation may be entered here. (The value must be between 0% and 100%.) - - - com.apple.InterfaceBuilder.CocoaPlugin - - P4AAAL+AAABDiQAAwfgAAA - - com.apple.InterfaceBuilder.CocoaPlugin - - - com.apple.InterfaceBuilder.CocoaPlugin - com.apple.InterfaceBuilder.CocoaPlugin - - AUFwAABCUAAAA - - com.apple.InterfaceBuilder.CocoaPlugin - - AUNQAABCxAAAA - - com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -47914,7 +46726,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA P4AAAL+AAABC+gAAw44AAA - {{1029, 933}, {218, 203}} + {{833, 933}, {218, 203}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -48331,7 +47143,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{1040, 712}, {450, 35}} + {{1058, 810}, {450, 35}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -48344,7 +47156,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{1224, 680}, {232, 63}} + {{1242, 778}, {232, 63}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -48357,7 +47169,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{1222, 1053}, {278, 83}} + {{969, 1053}, {278, 83}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -48437,11 +47249,11 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{1487, 1033}, {123, 43}} + {{1234, 1033}, {123, 43}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{1430, 1013}, {178, 43}} + {{1234, 1013}, {178, 43}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -48709,7 +47521,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA AUMaAABC4AAAA - {{507, 779}, {616, 0}} + {{1047, 530}, {616, 0}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -48870,6 +47682,8 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA Renders 3D on eight separate threads by default. May improve 3D performance on multiprocessor machines, but greatly reduces performance on single processor machines. + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin {{1191, 651}, {328, 434}} com.apple.InterfaceBuilder.CocoaPlugin @@ -48886,7 +47700,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{1487, 1013}, {70, 103}} + {{1470, 1013}, {70, 103}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -48903,14 +47717,14 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin - {{1237, 473}, {204, 521}} + {{1383, 498}, {204, 521}} com.apple.InterfaceBuilder.CocoaPlugin - {{1237, 473}, {204, 521}} + {{1383, 498}, {204, 521}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{943, 833}, {262, 303}} + {{747, 833}, {262, 303}} com.apple.InterfaceBuilder.CocoaPlugin {{145, 474}, {199, 203}} @@ -49189,16 +48003,16 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{1247, 1043}, {118, 93}} + {{1051, 1043}, {118, 93}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{1089, 663}, {467, 135}} + {{1146, 464}, {467, 135}} com.apple.InterfaceBuilder.CocoaPlugin - {{1089, 663}, {467, 135}} + {{1146, 464}, {467, 135}} com.apple.InterfaceBuilder.CocoaPlugin @@ -49219,7 +48033,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA - 6650 + 6826 @@ -49305,8 +48119,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA boxMisc boxTitles cdsCoreController + cdsSoundController cheatListWindow cheatWindowController + emuControlController emuWindowController fileMigrationList inputPrefsView @@ -49317,6 +48133,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA prefGeneralView prefWindow prefWindowController + romInfoPanelController troubleshootingWindow @@ -49328,9 +48145,11 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA NSBox NSBox NSObjectController + NSObjectController NSWindow NSObjectController NSObjectController + NSObjectController NSArrayController InputPrefsView NSMenu @@ -49340,6 +48159,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA NSView NSWindow NSObjectController + NSObjectController NSWindow @@ -49354,8 +48174,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA boxMisc boxTitles cdsCoreController + cdsSoundController cheatListWindow cheatWindowController + emuControlController emuWindowController fileMigrationList inputPrefsView @@ -49366,6 +48188,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA prefGeneralView prefWindow prefWindowController + romInfoPanelController troubleshootingWindow @@ -49398,6 +48221,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA cdsCoreController NSObjectController + + cdsSoundController + NSObjectController + cheatListWindow NSWindow @@ -49406,6 +48233,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA cheatWindowController NSObjectController + + emuControlController + NSObjectController + emuWindowController NSObjectController @@ -49446,6 +48277,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA prefWindowController NSObjectController + + romInfoPanelController + NSObjectController + troubleshootingWindow NSWindow @@ -49733,7 +48568,7 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA - EmuWindowDelegate + EmuControllerDelegate NSObject YES @@ -49749,33 +48584,23 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA change3DRenderTextures: change3DRenderThreads: changeAudioEngine: - changeBilinearOutput: changeCoreEmuFlags: changeCoreSpeed: - changeDisplayMode: - changeDisplayOrder: - changeDisplayOrientation: changeFirmwareSettings: changeRomSaveType: - changeRotation: - changeRotationRelative: - changeScale: changeSpuAdvancedLogic: changeSpuInterpolationMode: changeSpuSyncMethod: changeSpuSyncMode: - changeVerticalSync: - changeVideoFilter: changeVolume: cheatsDisable: - closeMigrationSheet: closeRom: - copy: + closeSheet: executeCoreToggle: exportRomSave: - hudDisable: importRomSave: loadEmuSaveStateSlot: + newDisplayWindow: openEmuSaveState: openRom: resetCore: @@ -49783,20 +48608,13 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA saveEmuSaveState: saveEmuSaveStateAs: saveEmuSaveStateSlot: - saveScreenshotAs: selectExportRomSaveFormat: - selectScreenshotFileFormat: speedLimitDisable: toggleAutoFrameSkip: toggleGPUState: - toggleKeepMinDisplaySizeAtNormal: - toggleStatusBar: writeDefaults3DRenderingSettings: - writeDefaultsDisplayRotation: writeDefaultsEmulationSettings: - writeDefaultsHUDSettings: writeDefaultsSoundSettings: - writeDefaultsVideoOutputSettings: YES @@ -49841,23 +48659,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA id id id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id - id @@ -49874,33 +48675,23 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA change3DRenderTextures: change3DRenderThreads: changeAudioEngine: - changeBilinearOutput: changeCoreEmuFlags: changeCoreSpeed: - changeDisplayMode: - changeDisplayOrder: - changeDisplayOrientation: changeFirmwareSettings: changeRomSaveType: - changeRotation: - changeRotationRelative: - changeScale: changeSpuAdvancedLogic: changeSpuInterpolationMode: changeSpuSyncMethod: changeSpuSyncMode: - changeVerticalSync: - changeVideoFilter: changeVolume: cheatsDisable: - closeMigrationSheet: closeRom: - copy: + closeSheet: executeCoreToggle: exportRomSave: - hudDisable: importRomSave: loadEmuSaveStateSlot: + newDisplayWindow: openEmuSaveState: openRom: resetCore: @@ -49908,20 +48699,13 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA saveEmuSaveState: saveEmuSaveStateAs: saveEmuSaveStateSlot: - saveScreenshotAs: selectExportRomSaveFormat: - selectScreenshotFileFormat: speedLimitDisable: toggleAutoFrameSkip: toggleGPUState: - toggleKeepMinDisplaySizeAtNormal: - toggleStatusBar: writeDefaults3DRenderingSettings: - writeDefaultsDisplayRotation: writeDefaultsEmulationSettings: - writeDefaultsHUDSettings: writeDefaultsSoundSettings: - writeDefaultsVideoOutputSettings: YES @@ -49965,10 +48749,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA changeAudioEngine: id - - changeBilinearOutput: - id - changeCoreEmuFlags: id @@ -49977,18 +48757,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA changeCoreSpeed: id - - changeDisplayMode: - id - - - changeDisplayOrder: - id - - - changeDisplayOrientation: - id - changeFirmwareSettings: id @@ -49997,18 +48765,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA changeRomSaveType: id - - changeRotation: - id - - - changeRotationRelative: - id - - - changeScale: - id - changeSpuAdvancedLogic: id @@ -50025,14 +48781,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA changeSpuSyncMode: id - - changeVerticalSync: - id - - - changeVideoFilter: - id - changeVolume: id @@ -50041,16 +48789,12 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA cheatsDisable: id - - closeMigrationSheet: - id - closeRom: id - copy: + closeSheet: id @@ -50061,10 +48805,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA exportRomSave: id - - hudDisable: - id - importRomSave: id @@ -50073,6 +48813,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA loadEmuSaveStateSlot: id + + newDisplayWindow: + id + openEmuSaveState: id @@ -50101,18 +48845,10 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA saveEmuSaveStateSlot: id - - saveScreenshotAs: - id - selectExportRomSaveFormat: id - - selectScreenshotFileFormat: - id - speedLimitDisable: id @@ -50125,38 +48861,18 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA toggleGPUState: id - - toggleKeepMinDisplaySizeAtNormal: - id - - - toggleStatusBar: - id - writeDefaults3DRenderingSettings: id - - writeDefaultsDisplayRotation: - id - writeDefaultsEmulationSettings: id - - writeDefaultsHUDSettings: - id - writeDefaultsSoundSettings: id - - writeDefaultsVideoOutputSettings: - id - @@ -50164,38 +48880,28 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA YES cdsCoreController - cdsDisplayController cdsSoundController cheatDatabaseController cheatListController cheatWindowController cheatWindowDelegate - displayView - emuWindowController exportRomSavePanelAccessoryView firmwarePanelController romInfoPanelController saveFileMigrationSheet - saveScreenshotPanelAccessoryView saveStatePrecloseSheet - window YES NSObjectController NSObjectController - NSObjectController NSArrayController NSArrayController NSObjectController CheatWindowDelegate NSView NSObjectController - NSView NSObjectController - NSObjectController - NSWindow - NSView NSWindow NSWindow @@ -50205,21 +48911,16 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA YES cdsCoreController - cdsDisplayController cdsSoundController cheatDatabaseController cheatListController cheatWindowController cheatWindowDelegate - displayView - emuWindowController exportRomSavePanelAccessoryView firmwarePanelController romInfoPanelController saveFileMigrationSheet - saveScreenshotPanelAccessoryView saveStatePrecloseSheet - window YES @@ -50227,10 +48928,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA cdsCoreController NSObjectController - - cdsDisplayController - NSObjectController - cdsSoundController NSObjectController @@ -50251,14 +48948,6 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA cheatWindowDelegate CheatWindowDelegate - - displayView - NSView - - - emuWindowController - NSObjectController - exportRomSavePanelAccessoryView NSView @@ -50276,12 +48965,216 @@ AAMAAAABAAEAAAFTAAMAAAAEAAAFwgAAAAAACAAIAAgACAABAAEAAQABA NSWindow - saveScreenshotPanelAccessoryView + saveStatePrecloseSheet + NSWindow + + + + + IBProjectSource + userinterface/EmuControllerDelegate.h + + + + EmuWindowDelegate + NSObject + + YES + + YES + changeBilinearOutput: + changeDisplayMode: + changeDisplayOrder: + changeDisplayOrientation: + changeRotation: + changeRotationRelative: + changeScale: + changeVerticalSync: + changeVideoFilter: + copy: + hudDisable: + saveScreenshotAs: + selectScreenshotFileFormat: + toggleKeepMinDisplaySizeAtNormal: + toggleStatusBar: + writeDefaultsDisplayRotation: + writeDefaultsHUDSettings: + writeDefaultsVideoOutputSettings: + + + YES + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + id + + + + YES + + YES + changeBilinearOutput: + changeDisplayMode: + changeDisplayOrder: + changeDisplayOrientation: + changeRotation: + changeRotationRelative: + changeScale: + changeVerticalSync: + changeVideoFilter: + copy: + hudDisable: + saveScreenshotAs: + selectScreenshotFileFormat: + toggleKeepMinDisplaySizeAtNormal: + toggleStatusBar: + writeDefaultsDisplayRotation: + writeDefaultsHUDSettings: + writeDefaultsVideoOutputSettings: + + + YES + + changeBilinearOutput: + id + + + changeDisplayMode: + id + + + changeDisplayOrder: + id + + + changeDisplayOrientation: + id + + + changeRotation: + id + + + changeRotationRelative: + id + + + changeScale: + id + + + changeVerticalSync: + id + + + changeVideoFilter: + id + + + copy: + id + + + hudDisable: + id + + + saveScreenshotAs: + id + + + selectScreenshotFileFormat: + id + + + toggleKeepMinDisplaySizeAtNormal: + id + + + toggleStatusBar: + id + + + writeDefaultsDisplayRotation: + id + + + writeDefaultsHUDSettings: + id + + + writeDefaultsVideoOutputSettings: + id + + + + + YES + + YES + cdsDisplayController + displayView + emuControlController + emuWindowController + saveScreenshotPanelAccessoryView + window + + + YES + NSObjectController + NSView + NSObjectController + NSObjectController + NSView + NSWindow + + + + YES + + YES + cdsDisplayController + displayView + emuControlController + emuWindowController + saveScreenshotPanelAccessoryView + window + + + YES + + cdsDisplayController + NSObjectController + + + displayView NSView - saveStatePrecloseSheet - NSWindow + emuControlController + NSObjectController + + + emuWindowController + NSObjectController + + + saveScreenshotPanelAccessoryView + NSView window diff --git a/desmume/src/cocoa/userinterface/EmuControllerDelegate.h b/desmume/src/cocoa/userinterface/EmuControllerDelegate.h new file mode 100644 index 000000000..e4a3a24a8 --- /dev/null +++ b/desmume/src/cocoa/userinterface/EmuControllerDelegate.h @@ -0,0 +1,173 @@ +/* + Copyright (C) 2013 DeSmuME team + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the this software. If not, see . + */ + +#import + +@class CocoaDSRom; +@class CocoaDSFirmware; +@class CocoaDSSpeaker; +@class CocoaDSCheatManager; +@class CheatWindowDelegate; + + +@interface EmuControllerDelegate : NSObject +{ + CocoaDSRom *currentRom; + CocoaDSFirmware *cdsFirmware; + CocoaDSSpeaker *cdsSpeaker; + CocoaDSCheatManager *cdsCheats; + CocoaDSCheatManager *dummyCheatList; + + CheatWindowDelegate *cheatWindowDelegate; + NSObjectController *firmwarePanelController; + NSObjectController *romInfoPanelController; + NSObjectController *cdsCoreController; + NSObjectController *cdsSoundController; + NSObjectController *cheatWindowController; + NSArrayController *cheatListController; + NSArrayController *cheatDatabaseController; + + NSWindow *saveFileMigrationSheet; + NSWindow *saveStatePrecloseSheet; + NSView *exportRomSavePanelAccessoryView; + + BOOL isSaveStateEdited; + NSInteger selectedExportRomSaveID; + + BOOL isWorking; + BOOL isRomLoading; + NSString *statusText; + float currentVolumeValue; + NSImage *currentVolumeIcon; + BOOL isShowingSaveStateDialog; + BOOL isShowingFileMigrationDialog; + BOOL isUserInterfaceBlockingExecution; + NSURL *currentSaveStateURL; + NSInteger selectedRomSaveTypeID; + + NSImage *iconVolumeFull; + NSImage *iconVolumeTwoThird; + NSImage *iconVolumeOneThird; + NSImage *iconVolumeMute; + NSImage *iconExecute; + NSImage *iconPause; + NSImage *iconSpeedNormal; + NSImage *iconSpeedDouble; + + NSMutableArray *windowList; +} + +@property (assign) CocoaDSRom *currentRom; // Don't rely on autorelease since the emulator doesn't support concurrent unloading +@property (retain) CocoaDSFirmware *cdsFirmware; +@property (retain) CocoaDSSpeaker *cdsSpeaker; +@property (retain) CocoaDSCheatManager *cdsCheats; + +@property (readonly) IBOutlet CheatWindowDelegate *cheatWindowDelegate; +@property (readonly) IBOutlet NSObjectController *firmwarePanelController; +@property (readonly) IBOutlet NSObjectController *romInfoPanelController; +@property (readonly) IBOutlet NSObjectController *cdsCoreController; +@property (readonly) IBOutlet NSObjectController *cdsSoundController; +@property (readonly) IBOutlet NSObjectController *cheatWindowController; +@property (readonly) IBOutlet NSArrayController *cheatListController; +@property (readonly) IBOutlet NSArrayController *cheatDatabaseController; + +@property (readonly) IBOutlet NSWindow *saveFileMigrationSheet; +@property (readonly) IBOutlet NSWindow *saveStatePrecloseSheet; +@property (readonly) IBOutlet NSView *exportRomSavePanelAccessoryView; + +@property (assign) BOOL isWorking; +@property (assign) BOOL isRomLoading; +@property (assign) NSString *statusText; +@property (assign) float currentVolumeValue; +@property (retain) NSImage *currentVolumeIcon; +@property (assign) BOOL isShowingSaveStateDialog; +@property (assign) BOOL isShowingFileMigrationDialog; +@property (assign) BOOL isUserInterfaceBlockingExecution; +@property (retain) NSURL *currentSaveStateURL; +@property (assign) NSInteger selectedRomSaveTypeID; + +@property (assign) NSInteger render3DRenderingEngine; +@property (assign) BOOL render3DHighPrecisionColorInterpolation; +@property (assign) BOOL render3DEdgeMarking; +@property (assign) BOOL render3DFog; +@property (assign) BOOL render3DTextures; +@property (assign) NSInteger render3DDepthComparisonThreshold; +@property (assign) NSInteger render3DThreads; +@property (assign) BOOL render3DLineHack; +@property (assign) BOOL render3DMultisample; + +@property (readonly) NSMutableArray *windowList; + +// File Menu +- (IBAction) openRom:(id)sender; +- (IBAction) closeRom:(id)sender; +- (IBAction) openEmuSaveState:(id)sender; +- (IBAction) saveEmuSaveState:(id)sender; +- (IBAction) saveEmuSaveStateAs:(id)sender; +- (IBAction) revertEmuSaveState:(id)sender; +- (IBAction) loadEmuSaveStateSlot:(id)sender; +- (IBAction) saveEmuSaveStateSlot:(id)sender; +- (IBAction) importRomSave:(id)sender; +- (IBAction) exportRomSave:(id)sender; +- (IBAction) selectExportRomSaveFormat:(id)sender; + +// Emulation Menu +- (IBAction) speedLimitDisable:(id)sender; +- (IBAction) toggleAutoFrameSkip:(id)sender; +- (IBAction) cheatsDisable:(id)sender; +- (IBAction) executeCoreToggle:(id)sender; +- (IBAction) resetCore:(id)sender; +- (IBAction) changeRomSaveType:(id)sender; + +// Tools Menu +- (IBAction) toggleGPUState:(id)sender; + +// Window Menu +- (IBAction) newDisplayWindow:(id)sender; + +- (BOOL) handleLoadRom:(NSURL *)fileURL; +- (BOOL) handleUnloadRom:(NSInteger)reasonID romToLoad:(NSURL *)romURL; +- (BOOL) loadRom:(NSURL *)romURL; +- (void) loadRomDidFinish:(NSNotification *)aNotification; +- (BOOL) unloadRom; + +- (void) executeCore; +- (void) pauseCore; +- (void) restoreCoreState; + +- (IBAction) changeCoreSpeed:(id)sender; +- (IBAction) changeCoreEmuFlags:(id)sender; +- (IBAction) changeFirmwareSettings:(id)sender; +- (IBAction) changeVolume:(id)sender; +- (IBAction) changeAudioEngine:(id)sender; +- (IBAction) changeSpuAdvancedLogic:(id)sender; +- (IBAction) changeSpuInterpolationMode:(id)sender; +- (IBAction) changeSpuSyncMode:(id)sender; +- (IBAction) changeSpuSyncMethod:(id)sender; + +- (IBAction) closeSheet:(id)sender; +- (void) didEndFileMigrationSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo; +- (void) didEndSaveStateSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo; +- (void) didEndSaveStateSheetOpen:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo; +- (void) didEndSaveStateSheetTerminate:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo; + +- (void) setupUserDefaults; +- (IBAction) writeDefaults3DRenderingSettings:(id)sender; +- (IBAction) writeDefaultsEmulationSettings:(id)sender; +- (IBAction) writeDefaultsSoundSettings:(id)sender; + +@end diff --git a/desmume/src/cocoa/userinterface/EmuControllerDelegate.mm b/desmume/src/cocoa/userinterface/EmuControllerDelegate.mm new file mode 100644 index 000000000..1ea2932b0 --- /dev/null +++ b/desmume/src/cocoa/userinterface/EmuControllerDelegate.mm @@ -0,0 +1,1696 @@ +/* + Copyright (C) 2013 DeSmuME team + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 2 of the License, or + (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with the this software. If not, see . + */ + +#import "EmuControllerDelegate.h" +#import "emuWindowDelegate.h" +#import "displayView.h" +#import "cheatWindowDelegate.h" + +#import "cocoa_globals.h" +#import "cocoa_cheat.h" +#import "cocoa_core.h" +#import "cocoa_file.h" +#import "cocoa_firmware.h" +#import "cocoa_GPU.h" +#import "cocoa_output.h" +#import "cocoa_rom.h" + + +@implementation EmuControllerDelegate + +@synthesize currentRom; +@dynamic cdsFirmware; +@dynamic cdsSpeaker; +@synthesize cdsCheats; + +@synthesize cheatWindowDelegate; +@synthesize firmwarePanelController; +@synthesize romInfoPanelController; +@synthesize cdsCoreController; +@synthesize cdsSoundController; +@synthesize cheatWindowController; +@synthesize cheatListController; +@synthesize cheatDatabaseController; + +@synthesize saveFileMigrationSheet; +@synthesize saveStatePrecloseSheet; +@synthesize exportRomSavePanelAccessoryView; + +@synthesize isWorking; +@synthesize isRomLoading; +@synthesize statusText; +@dynamic currentVolumeValue; +@synthesize currentVolumeIcon; + +@synthesize isShowingSaveStateDialog; +@synthesize isShowingFileMigrationDialog; +@synthesize isUserInterfaceBlockingExecution; + +@synthesize currentSaveStateURL; +@synthesize selectedRomSaveTypeID; + +@dynamic render3DRenderingEngine; +@dynamic render3DHighPrecisionColorInterpolation; +@dynamic render3DEdgeMarking; +@dynamic render3DFog; +@dynamic render3DTextures; +@dynamic render3DDepthComparisonThreshold; +@dynamic render3DThreads; +@dynamic render3DLineHack; +@dynamic render3DMultisample; + +@synthesize windowList; + + +-(id)init +{ + self = [super init]; + if(self == nil) + { + return nil; + } + + windowList = [[NSMutableArray alloc] initWithCapacity:32]; + + currentRom = nil; + cdsFirmware = nil; + cdsSpeaker = nil; + dummyCheatList = nil; + + isSaveStateEdited = NO; + isShowingSaveStateDialog = NO; + isShowingFileMigrationDialog = NO; + isUserInterfaceBlockingExecution = NO; + + currentSaveStateURL = nil; + selectedExportRomSaveID = 0; + selectedRomSaveTypeID = ROMSAVETYPE_AUTOMATIC; + + iconExecute = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Execute_420x420" ofType:@"png"]]; + iconPause = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Pause_420x420" ofType:@"png"]]; + iconSpeedNormal = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Speed1x_420x420" ofType:@"png"]]; + iconSpeedDouble = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Speed2x_420x420" ofType:@"png"]]; + iconVolumeFull = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_VolumeFull_16x16" ofType:@"png"]]; + iconVolumeTwoThird = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_VolumeTwoThird_16x16" ofType:@"png"]]; + iconVolumeOneThird = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_VolumeOneThird_16x16" ofType:@"png"]]; + iconVolumeMute = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_VolumeMute_16x16" ofType:@"png"]]; + + isWorking = NO; + isRomLoading = NO; + statusText = NSSTRING_STATUS_READY; + currentVolumeValue = MAX_VOLUME; + currentVolumeIcon = [iconVolumeFull retain]; + + [[NSNotificationCenter defaultCenter] addObserver:self + selector:@selector(loadRomDidFinish:) + name:@"org.desmume.DeSmuME.loadRomDidFinish" + object:nil]; + + return self; +} + +- (void)dealloc +{ + [[NSNotificationCenter defaultCenter] removeObserver:self]; + + [iconExecute release]; + [iconPause release]; + [iconSpeedNormal release]; + [iconSpeedDouble release]; + [iconVolumeFull release]; + [iconVolumeTwoThird release]; + [iconVolumeOneThird release]; + [iconVolumeMute release]; + + [[self currentRom] release]; + [self setCurrentRom:nil]; + + [self setCdsCheats:nil]; + [self setCdsSpeaker:nil]; + + [self setIsWorking:NO]; + [self setStatusText:@""]; + [self setCurrentVolumeValue:0.0f]; + [self setCurrentVolumeIcon:nil]; + + [romInfoPanelController setContent:[CocoaDSRom romNotLoadedBindings]]; + + [windowList release]; + + [super dealloc]; +} + +- (void) setCdsFirmware:(CocoaDSFirmware *)theFirmware +{ + if (theFirmware == nil) + { + if (cdsFirmware != nil) + { + [cdsFirmware release]; + cdsFirmware = nil; + } + } + else + { + cdsFirmware = [theFirmware retain]; + } + + [firmwarePanelController setContent:cdsFirmware]; +} + +- (CocoaDSFirmware *) cdsFirmware +{ + return cdsFirmware; +} + +- (void) setCdsSpeaker:(CocoaDSSpeaker *)theSpeaker +{ + if (theSpeaker == nil) + { + if (cdsSpeaker != nil) + { + [cdsSpeaker release]; + cdsSpeaker = nil; + } + } + else + { + cdsSpeaker = [theSpeaker retain]; + } + + [cdsSoundController setContent:[cdsSpeaker property]]; +} + +- (CocoaDSSpeaker *) cdsSpeaker +{ + return cdsSpeaker; +} + +- (void) setCurrentVolumeValue:(float)vol +{ + currentVolumeValue = vol; + + // Update the icon. + NSImage *currentImage = [self currentVolumeIcon]; + NSImage *newImage = nil; + if (vol <= 0.0f) + { + newImage = iconVolumeMute; + } + else if (vol > 0.0f && vol <= VOLUME_THRESHOLD_LOW) + { + newImage = iconVolumeOneThird; + } + else if (vol > VOLUME_THRESHOLD_LOW && vol <= VOLUME_THRESHOLD_HIGH) + { + newImage = iconVolumeTwoThird; + } + else + { + newImage = iconVolumeFull; + } + + if (newImage != currentImage) + { + [self setCurrentVolumeIcon:newImage]; + } +} + +- (float) currentVolumeValue +{ + return currentVolumeValue; +} + +- (IBAction) openRom:(id)sender +{ + if ([self isRomLoading]) + { + return; + } + + NSURL *selectedFile = nil; + NSInteger buttonClicked = NSFileHandlingPanelCancelButton; + NSOpenPanel *panel = [NSOpenPanel openPanel]; + + [panel setCanChooseDirectories:NO]; + [panel setCanChooseFiles:YES]; + [panel setResolvesAliases:YES]; + [panel setAllowsMultipleSelection:NO]; + [panel setTitle:NSSTRING_TITLE_OPEN_ROM_PANEL]; + NSArray *fileTypes = [NSArray arrayWithObjects:@FILE_EXT_ROM_DS, @FILE_EXT_ROM_GBA, nil]; + + // The NSOpenPanel method -(NSInt)runModalForDirectory:file:types: + // is deprecated in Mac OS X v10.6. +#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5 + [panel setAllowedFileTypes:fileTypes]; + buttonClicked = [panel runModal]; +#else + buttonClicked = [panel runModalForDirectory:nil file:nil types:fileTypes]; +#endif + + if (buttonClicked == NSFileHandlingPanelOKButton) + { + selectedFile = [[panel URLs] lastObject]; + if(selectedFile == nil) + { + return; + } + } + else + { + return; + } + + [self handleLoadRom:selectedFile]; +} + +- (IBAction) closeRom:(id)sender +{ + [self handleUnloadRom:REASONFORCLOSE_NORMAL romToLoad:nil]; +} + +- (IBAction) openEmuSaveState:(id)sender +{ + BOOL result = NO; + NSURL *selectedFile = nil; + NSInteger buttonClicked = NSFileHandlingPanelCancelButton; + NSOpenPanel *panel = [NSOpenPanel openPanel]; + + [panel setCanChooseDirectories:NO]; + [panel setCanChooseFiles:YES]; + [panel setResolvesAliases:YES]; + [panel setAllowsMultipleSelection:NO]; + [panel setTitle:NSSTRING_TITLE_OPEN_STATE_FILE_PANEL]; + NSArray *fileTypes = [NSArray arrayWithObjects:@FILE_EXT_SAVE_STATE, nil]; + + // The NSOpenPanel method -(NSInt)runModalForDirectory:file:types: + // is deprecated in Mac OS X v10.6. +#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5 + [panel setAllowedFileTypes:fileTypes]; + buttonClicked = [panel runModal]; +#else + buttonClicked = [panel runModalForDirectory:nil file:nil types:fileTypes]; +#endif + + if (buttonClicked == NSFileHandlingPanelOKButton) + { + selectedFile = [[panel URLs] lastObject]; + if(selectedFile == nil) + { + return; + } + } + else + { + return; + } + + [self pauseCore]; + + result = [CocoaDSFile loadState:selectedFile]; + if (result == NO) + { + [self setStatusText:NSSTRING_STATUS_SAVESTATE_LOADING_FAILED]; + [self restoreCoreState]; + return; + } + + [self setCurrentSaveStateURL:selectedFile]; + [self restoreCoreState]; + [self setStatusText:NSSTRING_STATUS_SAVESTATE_LOADED]; + + isSaveStateEdited = YES; + for (NSWindow *theWindow in windowList) + { + [theWindow setDocumentEdited:isSaveStateEdited]; + } +} + +- (IBAction) saveEmuSaveState:(id)sender +{ + BOOL result = NO; + + if (isSaveStateEdited && [self currentSaveStateURL] != nil) + { + [self pauseCore]; + + result = [CocoaDSFile saveState:[self currentSaveStateURL]]; + if (result == NO) + { + [self setStatusText:NSSTRING_STATUS_SAVESTATE_SAVING_FAILED]; + return; + } + + isSaveStateEdited = YES; + for (NSWindow *theWindow in windowList) + { + [theWindow setDocumentEdited:isSaveStateEdited]; + } + + [self restoreCoreState]; + [self setStatusText:NSSTRING_STATUS_SAVESTATE_SAVED]; + } + else + { + [self saveEmuSaveStateAs:sender]; + } +} + +- (IBAction) saveEmuSaveStateAs:(id)sender +{ + BOOL result = NO; + NSInteger buttonClicked = NSFileHandlingPanelCancelButton; + NSSavePanel *panel = [NSSavePanel savePanel]; + + [panel setCanCreateDirectories:YES]; + [panel setTitle:NSSTRING_TITLE_SAVE_STATE_FILE_PANEL]; + + // The NSSavePanel method -(void)setRequiredFileType: + // is deprecated in Mac OS X v10.6. +#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5 + NSArray *fileTypes = [NSArray arrayWithObjects:@FILE_EXT_SAVE_STATE, nil]; + [panel setAllowedFileTypes:fileTypes]; +#else + [panel setRequiredFileType:@FILE_EXT_SAVE_STATE]; +#endif + + buttonClicked = [panel runModal]; + if(buttonClicked == NSOKButton) + { + [self pauseCore]; + + NSURL *saveFileURL = [panel URL]; + + result = [CocoaDSFile saveState:saveFileURL]; + if (result == NO) + { + [self setStatusText:NSSTRING_STATUS_SAVESTATE_SAVING_FAILED]; + return; + } + + [self setCurrentSaveStateURL:saveFileURL]; + [self restoreCoreState]; + [self setStatusText:NSSTRING_STATUS_SAVESTATE_SAVED]; + + isSaveStateEdited = YES; + for (NSWindow *theWindow in windowList) + { + [theWindow setDocumentEdited:isSaveStateEdited]; + } + } +} + +- (IBAction) revertEmuSaveState:(id)sender +{ + BOOL result = NO; + + if (isSaveStateEdited && [self currentSaveStateURL] != nil) + { + [self pauseCore]; + + result = [CocoaDSFile loadState:[self currentSaveStateURL]]; + if (result == NO) + { + [self setStatusText:NSSTRING_STATUS_SAVESTATE_REVERTING_FAILED]; + return; + } + + isSaveStateEdited = YES; + for (NSWindow *theWindow in windowList) + { + [theWindow setDocumentEdited:isSaveStateEdited]; + } + + [self restoreCoreState]; + [self setStatusText:NSSTRING_STATUS_SAVESTATE_REVERTED]; + } +} + +- (IBAction) loadEmuSaveStateSlot:(id)sender +{ + BOOL result = NO; + NSInteger i = [CocoaDSUtil getIBActionSenderTag:sender]; + + NSString *saveStatePath = [[CocoaDSFile saveStateURL] path]; + if (saveStatePath == nil) + { + // Should throw an error message here... + return; + } + + if (i < 0 || i > MAX_SAVESTATE_SLOTS) + { + return; + } + + NSURL *currentRomURL = [[self currentRom] fileURL]; + NSString *fileName = [CocoaDSFile saveSlotFileName:currentRomURL slotNumber:(NSUInteger)(i + 1)]; + if (fileName == nil) + { + return; + } + + [self pauseCore]; + + result = [CocoaDSFile loadState:[NSURL fileURLWithPath:[saveStatePath stringByAppendingPathComponent:fileName]]]; + if (result == NO) + { + [self setStatusText:NSSTRING_STATUS_SAVESTATE_LOADING_FAILED]; + } + + [self restoreCoreState]; + [self setStatusText:NSSTRING_STATUS_SAVESTATE_LOADED]; +} + +- (IBAction) saveEmuSaveStateSlot:(id)sender +{ + BOOL result = NO; + NSInteger i = [CocoaDSUtil getIBActionSenderTag:sender]; + + NSString *saveStatePath = [[CocoaDSFile saveStateURL] path]; + if (saveStatePath == nil) + { + [self setStatusText:NSSTRING_STATUS_CANNOT_GENERATE_SAVE_PATH]; + return; + } + + result = [CocoaDSFile createUserAppSupportDirectory:@"States"]; + if (result == NO) + { + [self setStatusText:NSSTRING_STATUS_CANNOT_CREATE_SAVE_DIRECTORY]; + return; + } + + if (i < 0 || i > MAX_SAVESTATE_SLOTS) + { + return; + } + + NSURL *currentRomURL = [[self currentRom] fileURL]; + NSString *fileName = [CocoaDSFile saveSlotFileName:currentRomURL slotNumber:(NSUInteger)(i + 1)]; + if (fileName == nil) + { + return; + } + + [self pauseCore]; + + result = [CocoaDSFile saveState:[NSURL fileURLWithPath:[saveStatePath stringByAppendingPathComponent:fileName]]]; + if (result == NO) + { + [self setStatusText:NSSTRING_STATUS_SAVESTATE_SAVING_FAILED]; + return; + } + + [self restoreCoreState]; + [self setStatusText:NSSTRING_STATUS_SAVESTATE_SAVED]; +} + +- (IBAction) importRomSave:(id)sender +{ + NSURL *selectedFile = nil; + NSInteger buttonClicked = NSFileHandlingPanelCancelButton; + NSOpenPanel *panel = [NSOpenPanel openPanel]; + + [panel setCanChooseDirectories:NO]; + [panel setCanChooseFiles:YES]; + [panel setResolvesAliases:YES]; + [panel setAllowsMultipleSelection:NO]; + [panel setTitle:NSSTRING_TITLE_IMPORT_ROM_SAVE_PANEL]; + NSArray *fileTypes = [NSArray arrayWithObjects:@FILE_EXT_ROM_SAVE_RAW, @FILE_EXT_ACTION_REPLAY_SAVE, nil]; + + // The NSOpenPanel method -(NSInt)runModalForDirectory:file:types: + // is deprecated in Mac OS X v10.6. +#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5 + [panel setAllowedFileTypes:fileTypes]; + buttonClicked = [panel runModal]; +#else + buttonClicked = [panel runModalForDirectory:nil file:nil types:fileTypes]; +#endif + + if (buttonClicked == NSFileHandlingPanelOKButton) + { + selectedFile = [[panel URLs] lastObject]; + if(selectedFile == nil) + { + return; + } + } + else + { + return; + } + + BOOL result = [CocoaDSFile importRomSave:selectedFile]; + if (!result) + { + [self setStatusText:NSSTRING_STATUS_ROM_SAVE_IMPORT_FAILED]; + return; + } + + [self setStatusText:NSSTRING_STATUS_ROM_SAVE_IMPORTED]; +} + +- (IBAction) exportRomSave:(id)sender +{ + [self pauseCore]; + + BOOL result = NO; + NSInteger buttonClicked; + NSSavePanel *panel = [NSSavePanel savePanel]; + [panel setTitle:NSSTRING_TITLE_EXPORT_ROM_SAVE_PANEL]; + [panel setCanCreateDirectories:YES]; + [panel setAccessoryView:exportRomSavePanelAccessoryView]; + + buttonClicked = [panel runModal]; + if(buttonClicked == NSOKButton) + { + NSURL *romSaveURL = [CocoaDSFile fileURLFromRomURL:[[self currentRom] fileURL] toKind:@"ROM Save"]; + if (romSaveURL != nil) + { + result = [CocoaDSFile exportRomSaveToURL:[panel URL] romSaveURL:romSaveURL fileType:selectedExportRomSaveID]; + if (result == NO) + { + [self setStatusText:NSSTRING_STATUS_ROM_SAVE_EXPORT_FAILED]; + return; + } + + [self setStatusText:NSSTRING_STATUS_ROM_SAVE_EXPORTED]; + } + } + + [self restoreCoreState]; +} + +- (IBAction) selectExportRomSaveFormat:(id)sender +{ + selectedExportRomSaveID = [CocoaDSUtil getIBActionSenderTag:sender]; +} + +- (IBAction) executeCoreToggle:(id)sender +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + + if ([cdsCore coreState] == CORESTATE_PAUSE) + { + if ([self currentRom] != nil) + { + [self executeCore]; + } + } + else + { + [self pauseCore]; + } +} + +- (IBAction) resetCore:(id)sender +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + + if ([self currentRom] != nil) + { + [self setStatusText:NSSTRING_STATUS_EMULATOR_RESETTING]; + [self setIsWorking:YES]; + + for (NSWindow *theWindow in windowList) + { + [theWindow displayIfNeeded]; + } + + [cdsCore reset]; + if ([cdsCore coreState] == CORESTATE_PAUSE) + { + for (NSWindow *theWindow in windowList) + { + [[(EmuWindowDelegate *)[theWindow delegate] dispViewDelegate] setViewToWhite]; + } + } + + [self setStatusText:NSSTRING_STATUS_EMULATOR_RESET]; + [self setIsWorking:NO]; + + for (NSWindow *theWindow in windowList) + { + [theWindow displayIfNeeded]; + } + } +} + +- (IBAction) speedLimitDisable:(id)sender +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + + if ([cdsCore isSpeedLimitEnabled]) + { + [cdsCore setIsSpeedLimitEnabled:NO]; + [self setStatusText:NSSTRING_STATUS_SPEED_LIMIT_DISABLED]; + } + else + { + [cdsCore setIsSpeedLimitEnabled:YES]; + [self setStatusText:NSSTRING_STATUS_SPEED_LIMIT_ENABLED]; + } +} + +- (IBAction) toggleAutoFrameSkip:(id)sender +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + + if ([cdsCore isFrameSkipEnabled]) + { + [cdsCore setIsFrameSkipEnabled:NO]; + [self setStatusText:NSSTRING_STATUS_AUTO_FRAME_SKIP_DISABLED]; + } + else + { + [cdsCore setIsFrameSkipEnabled:YES]; + [self setStatusText:NSSTRING_STATUS_AUTO_FRAME_SKIP_ENABLED]; + } +} + +- (IBAction) changeRomSaveType:(id)sender +{ + const NSInteger saveTypeID = [CocoaDSUtil getIBActionSenderTag:sender]; + [self setSelectedRomSaveTypeID:saveTypeID]; + + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [cdsCore changeRomSaveType:saveTypeID]; +} + +- (IBAction) cheatsDisable:(id)sender +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + + if ([cdsCore isCheatingEnabled]) + { + [cdsCore setIsCheatingEnabled:NO]; + [self setStatusText:NSSTRING_STATUS_CHEATS_DISABLED]; + } + else + { + [cdsCore setIsCheatingEnabled:YES]; + [self setStatusText:NSSTRING_STATUS_CHEATS_ENABLED]; + } +} + +- (IBAction) changeCoreSpeed:(id)sender +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + + [cdsCore setSpeedScalar:(CGFloat)[CocoaDSUtil getIBActionSenderTag:sender] / 100.0f]; +} + +- (IBAction) changeCoreEmuFlags:(id)sender +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + NSUInteger flags = [cdsCore emulationFlags]; + + NSInteger flagBit = [CocoaDSUtil getIBActionSenderTag:sender]; + if (flagBit < 0) + { + return; + } + + BOOL flagState = [CocoaDSUtil getIBActionSenderButtonStateBool:sender]; + if (flagState) + { + flags |= (1 << flagBit); + } + else + { + flags &= ~(1 << flagBit); + } + + [cdsCore setEmulationFlags:flags]; +} + +- (IBAction) changeFirmwareSettings:(id)sender +{ + // Force end of editing of any text fields. + [[(NSControl *)sender window] makeFirstResponder:nil]; + + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [[cdsCore cdsFirmware] update]; +} + +- (IBAction) changeVolume:(id)sender +{ + float vol = [self currentVolumeValue]; + [self setCurrentVolumeValue:vol]; + [self setStatusText:[NSString stringWithFormat:NSSTRING_STATUS_VOLUME, vol]]; + [CocoaDSUtil messageSendOneWayWithFloat:[cdsSpeaker receivePort] msgID:MESSAGE_SET_VOLUME floatValue:vol]; +} + +- (IBAction) changeAudioEngine:(id)sender +{ + [CocoaDSUtil messageSendOneWayWithInteger:[cdsSpeaker receivePort] msgID:MESSAGE_SET_AUDIO_PROCESS_METHOD integerValue:[CocoaDSUtil getIBActionSenderTag:sender]]; +} + +- (IBAction) changeSpuAdvancedLogic:(id)sender +{ + [CocoaDSUtil messageSendOneWayWithBool:[cdsSpeaker receivePort] msgID:MESSAGE_SET_SPU_ADVANCED_LOGIC boolValue:[CocoaDSUtil getIBActionSenderButtonStateBool:sender]]; +} + +- (IBAction) changeSpuInterpolationMode:(id)sender +{ + [CocoaDSUtil messageSendOneWayWithInteger:[cdsSpeaker receivePort] msgID:MESSAGE_SET_SPU_INTERPOLATION_MODE integerValue:[CocoaDSUtil getIBActionSenderTag:sender]]; +} + +- (IBAction) changeSpuSyncMode:(id)sender +{ + [CocoaDSUtil messageSendOneWayWithInteger:[cdsSpeaker receivePort] msgID:MESSAGE_SET_SPU_SYNC_MODE integerValue:[CocoaDSUtil getIBActionSenderTag:sender]]; +} + +- (IBAction) changeSpuSyncMethod:(id)sender +{ + [CocoaDSUtil messageSendOneWayWithInteger:[cdsSpeaker receivePort] msgID:MESSAGE_SET_SPU_SYNC_METHOD integerValue:[CocoaDSUtil getIBActionSenderTag:sender]]; +} + +- (void) setRender3DRenderingEngine:(NSInteger)engineID +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [cdsCore.cdsGPU setRender3DRenderingEngine:engineID]; +} + +- (NSInteger) render3DRenderingEngine +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + return [cdsCore.cdsGPU render3DRenderingEngine]; +} + +- (void) setRender3DHighPrecisionColorInterpolation:(BOOL)theState +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [cdsCore.cdsGPU setRender3DHighPrecisionColorInterpolation:theState]; +} + +- (BOOL) render3DHighPrecisionColorInterpolation +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + return [cdsCore.cdsGPU render3DHighPrecisionColorInterpolation]; +} + +- (void) setRender3DEdgeMarking:(BOOL)theState +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [cdsCore.cdsGPU setRender3DEdgeMarking:theState]; +} + +- (BOOL) render3DEdgeMarking +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + return [cdsCore.cdsGPU render3DEdgeMarking]; +} + +- (void) setRender3DFog:(BOOL)theState +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [cdsCore.cdsGPU setRender3DFog:theState]; +} + +- (BOOL) render3DFog +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + return [cdsCore.cdsGPU render3DFog]; +} + +- (void) setRender3DTextures:(BOOL)theState +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [cdsCore.cdsGPU setRender3DTextures:theState]; +} + +- (BOOL) render3DTextures +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + return [cdsCore.cdsGPU render3DTextures]; +} + +- (void) setRender3DDepthComparisonThreshold:(NSInteger)threshold +{ + if (threshold < 0) + { + return; + } + + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [cdsCore.cdsGPU setRender3DDepthComparisonThreshold:(NSUInteger)threshold]; +} + +- (NSInteger) render3DDepthComparisonThreshold +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + return [cdsCore.cdsGPU render3DDepthComparisonThreshold]; +} + +- (void) setRender3DThreads:(NSInteger)threadCount +{ + if (threadCount < 0) + { + return; + } + + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [cdsCore.cdsGPU setRender3DThreads:(NSUInteger)threadCount]; +} + +- (NSInteger) render3DThreads +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + return [cdsCore.cdsGPU render3DThreads]; +} + +- (void) setRender3DLineHack:(BOOL)theState +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [cdsCore.cdsGPU setRender3DLineHack:theState]; +} + +- (BOOL) render3DLineHack +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + return [cdsCore.cdsGPU render3DLineHack]; +} + +- (void) setRender3DMultisample:(BOOL)theState +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [cdsCore.cdsGPU setRender3DMultisample:theState]; +} + +- (BOOL) render3DMultisample +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + return [cdsCore.cdsGPU render3DMultisample]; +} + +- (IBAction) toggleGPUState:(id)sender +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + const NSInteger bitNumber = [CocoaDSUtil getIBActionSenderTag:sender]; + const UInt32 flagBit = [cdsCore.cdsGPU gpuStateFlags] ^ (1 << bitNumber); + + [cdsCore.cdsGPU setGpuStateFlags:flagBit]; +} + +- (IBAction) newDisplayWindow:(id)sender +{ + +} + +- (BOOL) handleLoadRom:(NSURL *)fileURL +{ + BOOL result = NO; + + if ([self isRomLoading]) + { + return result; + } + + if ([self currentRom] != nil) + { + BOOL closeResult = [self handleUnloadRom:REASONFORCLOSE_OPEN romToLoad:fileURL]; + if ([self isShowingSaveStateDialog]) + { + return result; + } + + if (![self isShowingFileMigrationDialog] && closeResult == NO) + { + return result; + } + } + + // Check for the v0.9.7 ROM Save File + if ([CocoaDSFile romSaveExistsWithRom:fileURL] && ![CocoaDSFile romSaveExists:fileURL]) + { + [fileURL retain]; + [self setIsUserInterfaceBlockingExecution:YES]; + [self setIsShowingFileMigrationDialog:YES]; + + [NSApp beginSheet:saveFileMigrationSheet + modalForWindow:(NSWindow *)[windowList objectAtIndex:0] + modalDelegate:self + didEndSelector:@selector(didEndFileMigrationSheet:returnCode:contextInfo:) + contextInfo:fileURL]; + } + else + { + result = [self loadRom:fileURL]; + } + + return result; +} + +- (BOOL) handleUnloadRom:(NSInteger)reasonID romToLoad:(NSURL *)romURL +{ + BOOL result = NO; + + if ([self isRomLoading] || [self currentRom] == nil) + { + return result; + } + + [self pauseCore]; + + if (isSaveStateEdited && [self currentSaveStateURL] != nil) + { + SEL endSheetSelector = @selector(didEndSaveStateSheet:returnCode:contextInfo:); + + switch (reasonID) + { + case REASONFORCLOSE_OPEN: + [romURL retain]; + endSheetSelector = @selector(didEndSaveStateSheetOpen:returnCode:contextInfo:); + break; + + case REASONFORCLOSE_TERMINATE: + endSheetSelector = @selector(didEndSaveStateSheetTerminate:returnCode:contextInfo:); + break; + + default: + break; + } + + [currentSaveStateURL retain]; + [self setIsUserInterfaceBlockingExecution:YES]; + [self setIsShowingSaveStateDialog:YES]; + + [NSApp beginSheet:saveStatePrecloseSheet + modalForWindow:(NSWindow *)[windowList objectAtIndex:0] + modalDelegate:self + didEndSelector:endSheetSelector + contextInfo:romURL]; + } + else + { + result = [self unloadRom]; + } + + return result; +} + +- (BOOL) loadRom:(NSURL *)romURL +{ + BOOL result = NO; + + if (romURL == nil) + { + return result; + } + + [self setStatusText:NSSTRING_STATUS_ROM_LOADING]; + [self setIsWorking:YES]; + + for (NSWindow *theWindow in windowList) + { + [theWindow displayIfNeeded]; + } + + // Need to pause the core before loading the ROM. + [self pauseCore]; + + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [cdsCore setDynaRec]; + + CocoaDSRom *newRom = [[CocoaDSRom alloc] init]; + if (newRom != nil) + { + [self setIsRomLoading:YES]; + [romURL retain]; + [newRom setSaveType:selectedRomSaveTypeID]; + [NSThread detachNewThreadSelector:@selector(loadDataOnThread:) toTarget:newRom withObject:romURL]; + [romURL release]; + } + + result = YES; + + return result; +} + +- (void) loadRomDidFinish:(NSNotification *)aNotification +{ + CocoaDSRom *theRom = [aNotification object]; + NSDictionary *userInfo = [aNotification userInfo]; + BOOL didLoad = [(NSNumber *)[userInfo valueForKey:@"DidLoad"] boolValue]; + + if (theRom == nil || ![theRom isDataLoaded] || !didLoad) + { + // If ROM loading fails, restore the core state, but only if a ROM is already loaded. + if([self currentRom] != nil) + { + [self restoreCoreState]; + } + + [self setStatusText:NSSTRING_STATUS_ROM_LOADING_FAILED]; + [self setIsWorking:NO]; + [self setIsRomLoading:NO]; + + return; + } + + // Set the core's ROM to our newly allocated ROM object. + [self setCurrentRom:theRom]; + [romInfoPanelController setContent:[theRom bindings]]; + + // If the ROM has an associated cheat file, load it now. + NSString *cheatsPath = [[CocoaDSFile fileURLFromRomURL:[theRom fileURL] toKind:@"Cheat"] path]; + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + CocoaDSCheatManager *newCheatList = [[[CocoaDSCheatManager alloc] initWithCore:cdsCore fileURL:[NSURL fileURLWithPath:cheatsPath]] autorelease]; + if (newCheatList != nil) + { + NSMutableDictionary *cheatWindowBindings = (NSMutableDictionary *)[cheatWindowController content]; + + [CocoaDSCheatManager setMasterCheatList:newCheatList]; + [cheatListController setContent:[newCheatList list]]; + [self setCdsCheats:newCheatList]; + [cheatWindowBindings setValue:newCheatList forKey:@"cheatList"]; + + NSString *filePath = [[NSUserDefaults standardUserDefaults] stringForKey:@"R4Cheat_DatabasePath"]; + if (filePath != nil) + { + NSURL *fileURL = [NSURL fileURLWithPath:filePath]; + NSInteger error = 0; + NSMutableArray *dbList = [[self cdsCheats] cheatListFromDatabase:fileURL errorCode:&error]; + if (dbList != nil) + { + [cheatDatabaseController setContent:dbList]; + + NSString *titleString = [[self cdsCheats] dbTitle]; + NSString *dateString = [[self cdsCheats] dbDate]; + + [cheatWindowBindings setValue:titleString forKey:@"cheatDBTitle"]; + [cheatWindowBindings setValue:dateString forKey:@"cheatDBDate"]; + [cheatWindowBindings setValue:[NSString stringWithFormat:@"%ld", (unsigned long)[dbList count]] forKey:@"cheatDBItemCount"]; + } + else + { + [cheatWindowBindings setValue:@"---" forKey:@"cheatDBItemCount"]; + + switch (error) + { + case CHEATEXPORT_ERROR_FILE_NOT_FOUND: + NSLog(@"R4 Cheat Database read failed! Could not load the database file!"); + [cheatWindowBindings setValue:@"Database not loaded." forKey:@"cheatDBTitle"]; + [cheatWindowBindings setValue:@"CANNOT LOAD FILE" forKey:@"cheatDBDate"]; + break; + + case CHEATEXPORT_ERROR_WRONG_FILE_FORMAT: + NSLog(@"R4 Cheat Database read failed! Wrong file format!"); + [cheatWindowBindings setValue:@"Database load error." forKey:@"cheatDBTitle"]; + [cheatWindowBindings setValue:@"FAILED TO LOAD FILE" forKey:@"cheatDBDate"]; + break; + + case CHEATEXPORT_ERROR_SERIAL_NOT_FOUND: + NSLog(@"R4 Cheat Database read failed! Could not find the serial number for this game in the database!"); + [cheatWindowBindings setValue:@"ROM not found in database." forKey:@"cheatDBTitle"]; + [cheatWindowBindings setValue:@"ROM not found." forKey:@"cheatDBDate"]; + break; + + case CHEATEXPORT_ERROR_EXPORT_FAILED: + NSLog(@"R4 Cheat Database read failed! Could not read the database file!"); + [cheatWindowBindings setValue:@"Database read error." forKey:@"cheatDBTitle"]; + [cheatWindowBindings setValue:@"CANNOT READ FILE" forKey:@"cheatDBDate"]; + break; + + default: + break; + } + } + } + + [cheatWindowDelegate setCdsCheats:newCheatList]; + [[cheatWindowDelegate cdsCheatSearch] setCdsCore:cdsCore]; + [cheatWindowDelegate setCheatSearchViewByStyle:CHEATSEARCH_SEARCHSTYLE_EXACT_VALUE]; + } + + // Add the last loaded ROM to the Recent ROMs list. + [[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:[theRom fileURL]]; + + // Update the UI to indicate that a ROM has indeed been loaded. + for (NSWindow *theWindow in windowList) + { + [theWindow setRepresentedURL:[theRom fileURL]]; + [[theWindow standardWindowButton:NSWindowDocumentIconButton] setImage:[theRom icon]]; + + NSString *newWindowTitle = [theRom internalName]; + [theWindow setTitle:newWindowTitle]; + [[(EmuWindowDelegate *)[theWindow delegate] dispViewDelegate] setViewToWhite]; + } + + [self setStatusText:NSSTRING_STATUS_ROM_LOADED]; + [self setIsWorking:NO]; + [self setIsRomLoading:NO]; + + for (NSWindow *theWindow in windowList) + { + [theWindow displayIfNeeded]; + } + + // After the ROM loading is complete, send an execute message to the Cocoa DS per + // user preferences. + if ([[NSUserDefaults standardUserDefaults] boolForKey:@"General_ExecuteROMOnLoad"]) + { + [self executeCore]; + } +} + +- (BOOL) unloadRom +{ + BOOL result = NO; + + [currentSaveStateURL release]; + currentSaveStateURL = nil; + + isSaveStateEdited = NO; + for (NSWindow *theWindow in windowList) + { + [theWindow setDocumentEdited:isSaveStateEdited]; + } + + // Save the ROM's cheat list before unloading. + [[self cdsCheats] save]; + + // Update the UI to indicate that the ROM has started the process of unloading. + [self setStatusText:NSSTRING_STATUS_ROM_UNLOADING]; + [romInfoPanelController setContent:[CocoaDSRom romNotLoadedBindings]]; + [cheatListController setContent:nil]; + [cheatWindowDelegate resetSearch:nil]; + [cheatWindowDelegate setCdsCheats:nil]; + [cheatDatabaseController setContent:nil]; + + NSMutableDictionary *cheatWindowBindings = (NSMutableDictionary *)[cheatWindowController content]; + [cheatWindowBindings setValue:@"No ROM loaded." forKey:@"cheatDBTitle"]; + [cheatWindowBindings setValue:@"No ROM loaded." forKey:@"cheatDBDate"]; + [cheatWindowBindings setValue:@"---" forKey:@"cheatDBItemCount"]; + [cheatWindowBindings setValue:nil forKey:@"cheatList"]; + + [self setIsWorking:YES]; + + for (NSWindow *theWindow in windowList) + { + [theWindow displayIfNeeded]; + } + + // Unload the ROM. + [[self currentRom] release]; + [self setCurrentRom:nil]; + + // Release the current cheat list and assign the empty list. + [self setCdsCheats:nil]; + if (dummyCheatList == nil) + { + dummyCheatList = [[CocoaDSCheatManager alloc] init]; + } + [CocoaDSCheatManager setMasterCheatList:dummyCheatList]; + + // Update the UI to indicate that the ROM has finished unloading. + for (NSWindow *theWindow in windowList) + { + [theWindow setRepresentedURL:nil]; + NSString *newWindowTitle = (NSString *)[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"]; + [theWindow setTitle:newWindowTitle]; + [[(EmuWindowDelegate *)[theWindow delegate] dispViewDelegate] setViewToBlack]; + } + + [self setStatusText:NSSTRING_STATUS_ROM_UNLOADED]; + [self setIsWorking:NO]; + + for (NSWindow *theWindow in windowList) + { + [theWindow displayIfNeeded]; + } + + result = YES; + + return result; +} + +- (void) executeCore +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [cdsCore setCoreState:CORESTATE_EXECUTE]; +} + +- (void) pauseCore +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [cdsCore setCoreState:CORESTATE_PAUSE]; +} + +- (void) restoreCoreState +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + [cdsCore restoreCoreState]; +} + +- (void) setupUserDefaults +{ + // Set the SPU settings per user preferences. + [self setCurrentVolumeValue:[[NSUserDefaults standardUserDefaults] floatForKey:@"Sound_Volume"]]; + [[self cdsSpeaker] setVolume:[[NSUserDefaults standardUserDefaults] floatForKey:@"Sound_Volume"]]; + [[self cdsSpeaker] setAudioOutputEngine:[[NSUserDefaults standardUserDefaults] integerForKey:@"Sound_AudioOutputEngine"]]; + [[self cdsSpeaker] setSpuAdvancedLogic:[[NSUserDefaults standardUserDefaults] boolForKey:@"SPU_AdvancedLogic"]]; + [[self cdsSpeaker] setSpuInterpolationMode:[[NSUserDefaults standardUserDefaults] integerForKey:@"SPU_InterpolationMode"]]; + [[self cdsSpeaker] setSpuSyncMode:[[NSUserDefaults standardUserDefaults] integerForKey:@"SPU_SyncMode"]]; + [[self cdsSpeaker] setSpuSyncMethod:[[NSUserDefaults standardUserDefaults] integerForKey:@"SPU_SyncMethod"]]; + + // Set the 3D rendering options per user preferences. + [self setRender3DThreads:(NSUInteger)[[NSUserDefaults standardUserDefaults] integerForKey:@"Render3D_Threads"]]; + [self setRender3DRenderingEngine:[[NSUserDefaults standardUserDefaults] integerForKey:@"Render3D_RenderingEngine"]]; + [self setRender3DHighPrecisionColorInterpolation:[[NSUserDefaults standardUserDefaults] boolForKey:@"Render3D_HighPrecisionColorInterpolation"]]; + [self setRender3DEdgeMarking:[[NSUserDefaults standardUserDefaults] boolForKey:@"Render3D_EdgeMarking"]]; + [self setRender3DFog:[[NSUserDefaults standardUserDefaults] boolForKey:@"Render3D_Fog"]]; + [self setRender3DTextures:[[NSUserDefaults standardUserDefaults] boolForKey:@"Render3D_Textures"]]; + [self setRender3DDepthComparisonThreshold:(NSUInteger)[[NSUserDefaults standardUserDefaults] integerForKey:@"Render3D_DepthComparisonThreshold"]]; + [self setRender3DLineHack:[[NSUserDefaults standardUserDefaults] boolForKey:@"Render3D_LineHack"]]; + [self setRender3DMultisample:[[NSUserDefaults standardUserDefaults] boolForKey:@"Render3D_Multisample"]]; +} + +- (IBAction) writeDefaults3DRenderingSettings:(id)sender +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + + // Force end of editing of any text fields. + [[(NSControl *)sender window] makeFirstResponder:nil]; + + [[NSUserDefaults standardUserDefaults] setInteger:[cdsCore.cdsGPU render3DRenderingEngine] forKey:@"Render3D_RenderingEngine"]; + [[NSUserDefaults standardUserDefaults] setBool:[cdsCore.cdsGPU render3DHighPrecisionColorInterpolation] forKey:@"Render3D_HighPrecisionColorInterpolation"]; + [[NSUserDefaults standardUserDefaults] setBool:[cdsCore.cdsGPU render3DEdgeMarking] forKey:@"Render3D_EdgeMarking"]; + [[NSUserDefaults standardUserDefaults] setBool:[cdsCore.cdsGPU render3DFog] forKey:@"Render3D_Fog"]; + [[NSUserDefaults standardUserDefaults] setBool:[cdsCore.cdsGPU render3DTextures] forKey:@"Render3D_Textures"]; + [[NSUserDefaults standardUserDefaults] setInteger:[cdsCore.cdsGPU render3DDepthComparisonThreshold] forKey:@"Render3D_DepthComparisonThreshold"]; + [[NSUserDefaults standardUserDefaults] setInteger:[cdsCore.cdsGPU render3DThreads] forKey:@"Render3D_Threads"]; + [[NSUserDefaults standardUserDefaults] setBool:[cdsCore.cdsGPU render3DLineHack] forKey:@"Render3D_LineHack"]; + [[NSUserDefaults standardUserDefaults] setBool:[cdsCore.cdsGPU render3DMultisample] forKey:@"Render3D_Multisample"]; +} + +- (IBAction) writeDefaultsEmulationSettings:(id)sender +{ + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + NSDictionary *firmwareDict = [(CocoaDSFirmware *)[firmwarePanelController content] dataDictionary]; + + // Force end of editing of any text fields. + [[(NSControl *)sender window] makeFirstResponder:nil]; + + [[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagAdvancedBusLevelTiming] forKey:@"Emulation_AdvancedBusLevelTiming"]; + [[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagRigorousTiming] forKey:@"Emulation_RigorousTiming"]; + [[NSUserDefaults standardUserDefaults] setInteger:[cdsCore cpuEmulationEngine] forKey:@"Emulation_CPUEmulationEngine"]; + [[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagUseExternalBios] forKey:@"Emulation_UseExternalBIOSImages"]; + [[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagEmulateBiosInterrupts] forKey:@"Emulation_BIOSEmulateSWI"]; + [[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagPatchDelayLoop] forKey:@"Emulation_BIOSPatchDelayLoopSWI"]; + [[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagUseExternalFirmware] forKey:@"Emulation_UseExternalFirmwareImage"]; + [[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagFirmwareBoot] forKey:@"Emulation_FirmwareBoot"]; + [[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagEmulateEnsata] forKey:@"Emulation_EmulateEnsata"]; + [[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagDebugConsole] forKey:@"Emulation_UseDebugConsole"]; + + [[NSUserDefaults standardUserDefaults] setObject:[firmwareDict valueForKey:@"Nickname"] forKey:@"FirmwareConfig_Nickname"]; + [[NSUserDefaults standardUserDefaults] setObject:[firmwareDict valueForKey:@"Message"] forKey:@"FirmwareConfig_Message"]; + [[NSUserDefaults standardUserDefaults] setObject:[firmwareDict valueForKey:@"FavoriteColor"] forKey:@"FirmwareConfig_FavoriteColor"]; + [[NSUserDefaults standardUserDefaults] setObject:[firmwareDict valueForKey:@"Birthday"] forKey:@"FirmwareConfig_Birthday"]; + [[NSUserDefaults standardUserDefaults] setObject:[firmwareDict valueForKey:@"Language"] forKey:@"FirmwareConfig_Language"]; +} + +- (IBAction) writeDefaultsSoundSettings:(id)sender +{ + NSMutableDictionary *speakerBindings = (NSMutableDictionary *)[cdsSoundController content]; + + [[NSUserDefaults standardUserDefaults] setFloat:[[speakerBindings valueForKey:@"volume"] floatValue] forKey:@"Sound_Volume"]; + [[NSUserDefaults standardUserDefaults] setInteger:[[speakerBindings valueForKey:@"audioOutputEngine"] integerValue] forKey:@"Sound_AudioOutputEngine"]; + [[NSUserDefaults standardUserDefaults] setBool:[[speakerBindings valueForKey:@"spuAdvancedLogic"] boolValue] forKey:@"SPU_AdvancedLogic"]; + [[NSUserDefaults standardUserDefaults] setInteger:[[speakerBindings valueForKey:@"spuInterpolationMode"] integerValue] forKey:@"SPU_InterpolationMode"]; + [[NSUserDefaults standardUserDefaults] setInteger:[[speakerBindings valueForKey:@"spuSyncMode"] integerValue] forKey:@"SPU_SyncMode"]; + [[NSUserDefaults standardUserDefaults] setInteger:[[speakerBindings valueForKey:@"spuSyncMethod"] integerValue] forKey:@"SPU_SyncMethod"]; +} + +- (IBAction) closeSheet:(id)sender +{ + NSWindow *sheet = [(NSControl *)sender window]; + NSInteger code = [(NSControl *)sender tag]; + + [NSApp endSheet:sheet returnCode:code]; +} + +- (void) didEndFileMigrationSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo +{ + NSURL *romURL = (NSURL *)contextInfo; + NSURL *romSaveURL = [CocoaDSFile romSaveURLFromRomURL:romURL]; + + [sheet orderOut:self]; + + switch (returnCode) + { + case NSOKButton: + [CocoaDSFile moveFileToCurrentDirectory:romSaveURL]; + break; + + default: + break; + } + + [self setIsUserInterfaceBlockingExecution:NO]; + [self setIsShowingFileMigrationDialog:NO]; + [self loadRom:romURL]; + + // We retained this when we initially put up the sheet, so we need to release it now. + [romURL release]; +} + +- (void) didEndSaveStateSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo +{ + BOOL result = NO; + + [sheet orderOut:self]; + + switch (returnCode) + { + case NSCancelButton: // Cancel + [self restoreCoreState]; + [self setIsUserInterfaceBlockingExecution:NO]; + [self setIsShowingSaveStateDialog:NO]; + return; + break; + + case COCOA_DIALOG_DEFAULT: // Save + result = [CocoaDSFile saveState:[self currentSaveStateURL]]; + if (result == NO) + { + // Throw an error here... + return; + } + break; + + case COCOA_DIALOG_OPTION: // Don't Save + break; + + default: + break; + } + + [self unloadRom]; + [self setIsUserInterfaceBlockingExecution:NO]; + [self setIsShowingSaveStateDialog:NO]; + + // We retained this when we initially put up the sheet, so we need to release it now. + [self setCurrentSaveStateURL:nil]; +} + +- (void) didEndSaveStateSheetOpen:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo +{ + [self didEndSaveStateSheet:sheet returnCode:returnCode contextInfo:contextInfo]; + + NSURL *romURL = (NSURL *)contextInfo; + [self handleLoadRom:romURL]; + [romURL release]; +} + +- (void) didEndSaveStateSheetTerminate:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo +{ + [self didEndSaveStateSheet:sheet returnCode:returnCode contextInfo:contextInfo]; + + if (returnCode == NSCancelButton) + { + [NSApp replyToApplicationShouldTerminate:NO]; + } + else + { + if ([self currentSaveStateURL] == nil) + { + [NSApp replyToApplicationShouldTerminate:YES]; + } + } +} + +- (BOOL)validateUserInterfaceItem:(id )theItem +{ + BOOL enable = YES; + SEL theAction = [theItem action]; + CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; + + if (theAction == @selector(importRomSave:) || + theAction == @selector(exportRomSave:)) + { + if ([self currentRom] == nil) + { + enable = NO; + } + } + else if (theAction == @selector(executeCoreToggle:)) + { + if ([self currentRom] == nil || + ![cdsCore masterExecute] || + [self isUserInterfaceBlockingExecution]) + { + enable = NO; + } + + if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) + { + if ([cdsCore coreState] == CORESTATE_PAUSE) + { + [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_EXECUTE_CONTROL]; + } + else + { + [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_PAUSE_CONTROL]; + } + } + else if ([(id)theItem isMemberOfClass:[NSToolbarItem class]]) + { + if ([cdsCore coreState] == CORESTATE_PAUSE) + { + [(NSToolbarItem*)theItem setLabel:NSSTRING_TITLE_EXECUTE_CONTROL]; + [(NSToolbarItem*)theItem setImage:iconExecute]; + } + else + { + [(NSToolbarItem*)theItem setLabel:NSSTRING_TITLE_PAUSE_CONTROL]; + [(NSToolbarItem*)theItem setImage:iconPause]; + } + } + } + else if (theAction == @selector(executeCore) || + theAction == @selector(pauseCore)) + { + if ([self currentRom] == nil || + ![cdsCore masterExecute] || + [self isShowingSaveStateDialog]) + { + enable = NO; + } + } + else if (theAction == @selector(resetCore:)) + { + if ([self currentRom] == nil || [self isUserInterfaceBlockingExecution]) + { + enable = NO; + } + } + else if (theAction == @selector(_openRecentDocument:)) + { + if ([self isShowingSaveStateDialog]) + { + enable = NO; + } + } + else if (theAction == @selector(openRom:)) + { + if ([self isRomLoading] || [self isShowingSaveStateDialog]) + { + enable = NO; + } + } + else if (theAction == @selector(closeRom:)) + { + if ([self currentRom] == nil || [self isRomLoading] || [self isShowingSaveStateDialog]) + { + enable = NO; + } + } + else if (theAction == @selector(loadEmuSaveStateSlot:)) + { + if ([self currentRom] == nil || [self isShowingSaveStateDialog]) + { + enable = NO; + } + else if (![CocoaDSFile saveStateExistsForSlot:[[self currentRom] fileURL] slotNumber:[theItem tag] + 1]) + { + enable = NO; + } + } + else if (theAction == @selector(saveEmuSaveStateSlot:)) + { + if ([self currentRom] == nil || [self isShowingSaveStateDialog]) + { + enable = NO; + } + + if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) + { + if ([CocoaDSFile saveStateExistsForSlot:[[self currentRom] fileURL] slotNumber:[theItem tag] + 1]) + { + [(NSMenuItem*)theItem setState:NSOnState]; + } + else + { + [(NSMenuItem*)theItem setState:NSOffState]; + } + } + } + else if (theAction == @selector(changeCoreSpeed:)) + { + NSInteger speedScalar = (NSInteger)([cdsCore speedScalar] * 100.0); + + if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) + { + if ([theItem tag] == -1) + { + if (speedScalar == (NSInteger)(SPEED_SCALAR_HALF * 100.0) || + speedScalar == (NSInteger)(SPEED_SCALAR_NORMAL * 100.0) || + speedScalar == (NSInteger)(SPEED_SCALAR_DOUBLE * 100.0)) + { + [(NSMenuItem*)theItem setState:NSOffState]; + } + else + { + [(NSMenuItem*)theItem setState:NSOnState]; + } + } + else if (speedScalar == [theItem tag]) + { + [(NSMenuItem*)theItem setState:NSOnState]; + } + else + { + [(NSMenuItem*)theItem setState:NSOffState]; + } + } + else if ([(id)theItem isMemberOfClass:[NSToolbarItem class]]) + { + if (speedScalar == (NSInteger)(SPEED_SCALAR_DOUBLE * 100.0)) + { + [(NSToolbarItem*)theItem setLabel:NSSTRING_TITLE_SPEED_1X]; + [(NSToolbarItem*)theItem setTag:100]; + [(NSToolbarItem*)theItem setImage:iconSpeedNormal]; + } + else + { + [(NSToolbarItem*)theItem setLabel:NSSTRING_TITLE_SPEED_2X]; + [(NSToolbarItem*)theItem setTag:200]; + [(NSToolbarItem*)theItem setImage:iconSpeedDouble]; + } + } + } + else if (theAction == @selector(speedLimitDisable:)) + { + if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) + { + if ([cdsCore isSpeedLimitEnabled]) + { + [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_DISABLE_SPEED_LIMIT]; + } + else + { + [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_ENABLE_SPEED_LIMIT]; + } + } + } + else if (theAction == @selector(toggleAutoFrameSkip:)) + { + if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) + { + if ([cdsCore isFrameSkipEnabled]) + { + [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_DISABLE_AUTO_FRAME_SKIP]; + } + else + { + [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_ENABLE_AUTO_FRAME_SKIP]; + } + } + } + else if (theAction == @selector(cheatsDisable:)) + { + if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) + { + if ([cdsCore isCheatingEnabled]) + { + [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_DISABLE_CHEATS]; + } + else + { + [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_ENABLE_CHEATS]; + } + } + } + else if (theAction == @selector(changeRomSaveType:)) + { + if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) + { + if ([self selectedRomSaveTypeID] == [theItem tag]) + { + [(NSMenuItem*)theItem setState:NSOnState]; + } + else + { + [(NSMenuItem*)theItem setState:NSOffState]; + } + } + } + else if (theAction == @selector(openEmuSaveState:) || + theAction == @selector(saveEmuSaveState:) || + theAction == @selector(saveEmuSaveStateAs:)) + { + if ([self currentRom] == nil || [self isShowingSaveStateDialog]) + { + enable = NO; + } + } + else if (theAction == @selector(revertEmuSaveState:)) + { + if ([self currentRom] == nil || + [self isShowingSaveStateDialog] || + [self currentSaveStateURL] == nil) + { + enable = NO; + } + } + else if (theAction == @selector(toggleGPUState:)) + { + if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) + { + if ([cdsCore.cdsGPU gpuStateByBit:[theItem tag]]) + { + [(NSMenuItem*)theItem setState:NSOnState]; + } + else + { + [(NSMenuItem*)theItem setState:NSOffState]; + } + } + } + + return enable; +} + +- (void)controlTextDidEndEditing:(NSNotification *)aNotification +{ + [self setRender3DDepthComparisonThreshold:[(NSNumber *)[aNotification object] integerValue]]; +} + +@end diff --git a/desmume/src/cocoa/userinterface/appDelegate.h b/desmume/src/cocoa/userinterface/appDelegate.h index 29c00ef35..670fe2309 100644 --- a/desmume/src/cocoa/userinterface/appDelegate.h +++ b/desmume/src/cocoa/userinterface/appDelegate.h @@ -1,6 +1,6 @@ /* Copyright (C) 2011 Roger Manuel - Copyright (C) 2012 DeSmuME team + Copyright (C) 2011-2013 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ @class InputPrefsView; @class CocoaHIDManager; +@class EmuControllerDelegate; #if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5 @@ -29,8 +30,12 @@ #endif { NSObject *dummyObject; + NSArrayController *fileMigrationList; NSObjectController *aboutWindowController; + NSObjectController *emuControlController; + NSObjectController *cdsSoundController; + NSObjectController *romInfoPanelController; NSObjectController *emuWindowController; NSObjectController *prefWindowController; NSObjectController *cheatWindowController; @@ -59,8 +64,12 @@ } @property (readonly) IBOutlet NSObject *dummyObject; + @property (readonly) IBOutlet NSArrayController *fileMigrationList; @property (readonly) IBOutlet NSObjectController *aboutWindowController; +@property (readonly) IBOutlet NSObjectController *emuControlController; +@property (readonly) IBOutlet NSObjectController *cdsSoundController; +@property (readonly) IBOutlet NSObjectController *romInfoPanelController; @property (readonly) IBOutlet NSObjectController *emuWindowController; @property (readonly) IBOutlet NSObjectController *prefWindowController; @property (readonly) IBOutlet NSObjectController *cheatWindowController; diff --git a/desmume/src/cocoa/userinterface/appDelegate.mm b/desmume/src/cocoa/userinterface/appDelegate.mm index 2b73b9e61..a1fee76ab 100644 --- a/desmume/src/cocoa/userinterface/appDelegate.mm +++ b/desmume/src/cocoa/userinterface/appDelegate.mm @@ -1,6 +1,6 @@ /* Copyright (C) 2011 Roger Manuel - Copyright (C) 2012 DeSmuME team + Copyright (C) 2011-2013 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,6 +17,7 @@ */ #import "appDelegate.h" +#import "EmuControllerDelegate.h" #import "emuWindowDelegate.h" #import "preferencesWindowDelegate.h" #import "troubleshootingWindowDelegate.h" @@ -31,6 +32,7 @@ #import "cocoa_hid.h" #import "cocoa_input.h" #import "cocoa_mic.h" +#import "cocoa_rom.h" #import "cocoa_util.h" @@ -48,6 +50,9 @@ @synthesize inputPrefsView; @synthesize fileMigrationList; @synthesize aboutWindowController; +@synthesize emuControlController; +@synthesize cdsSoundController; +@synthesize romInfoPanelController; @synthesize emuWindowController; @synthesize prefWindowController; @synthesize cdsCoreController; @@ -68,7 +73,7 @@ { BOOL result = NO; NSURL *fileURL = [NSURL fileURLWithPath:filename]; - EmuWindowDelegate *mainWindowDelegate = [mainWindow delegate]; + EmuControllerDelegate *emuControl = (EmuControllerDelegate *)[emuControlController content]; CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; if (cdsCore == nil) @@ -79,8 +84,8 @@ NSString *fileKind = [CocoaDSFile fileKindByURL:fileURL]; if ([fileKind isEqualToString:@"ROM"]) { - result = [mainWindowDelegate handleLoadRom:fileURL]; - if ([mainWindowDelegate isShowingSaveStateSheet] || [mainWindowDelegate isShowingFileMigrationSheet]) + result = [emuControl handleLoadRom:fileURL]; + if ([emuControl isShowingSaveStateDialog] || [emuControl isShowingFileMigrationDialog]) { // Just reply YES if a sheet is showing, even if the ROM hasn't actually been loaded yet. // This will prevent the error dialog from showing, which is the intended behavior in @@ -94,6 +99,7 @@ - (void)applicationWillFinishLaunching:(NSNotification *)notification { + EmuControllerDelegate *emuControl = (EmuControllerDelegate *)[emuControlController content]; EmuWindowDelegate *mainWindowDelegate = [mainWindow delegate]; PreferencesWindowDelegate *prefWindowDelegate = [prefWindow delegate]; CheatWindowDelegate *cheatWindowDelegate = (CheatWindowDelegate *)[cheatListWindow delegate]; @@ -113,6 +119,7 @@ return; } + [[emuControl windowList] addObject:mainWindow]; [CocoaDSFile setupAllFilePaths]; // Setup the About window. @@ -155,6 +162,8 @@ [self setRomInfoPanelBoxTitleColors]; // Set up all the object controllers according to our default windows. + [cdsSoundController setContent:nil]; + [romInfoPanelController setContent:[CocoaDSRom romNotLoadedBindings]]; [emuWindowController setContent:[mainWindowDelegate bindings]]; [prefWindowController setContent:[prefWindowDelegate bindings]]; [cheatWindowController setContent:[cheatWindowDelegate bindings]]; @@ -196,7 +205,7 @@ // Init the DS speakers. CocoaDSSpeaker *newSpeaker = [[[CocoaDSSpeaker alloc] init] autorelease]; [newCore addOutput:newSpeaker]; - [mainWindowDelegate setCdsSpeaker:newSpeaker]; + [emuControl setCdsSpeaker:newSpeaker]; // Start the core thread. [NSThread detachNewThreadSelector:@selector(runThread:) toTarget:newCore withObject:nil]; @@ -226,11 +235,12 @@ - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { + EmuControllerDelegate *emuControl = (EmuControllerDelegate *)[emuControlController content]; EmuWindowDelegate *mainWindowDelegate = [mainWindow delegate]; // Load a new ROM on launch per user preferences. BOOL loadROMOnLaunch = [[NSUserDefaults standardUserDefaults] boolForKey:@"General_AutoloadROMOnLaunch"]; - if (loadROMOnLaunch && ![mainWindowDelegate isRomLoaded]) + if (loadROMOnLaunch && [emuControl currentRom] == nil) { NSInteger autoloadRomOption = [[NSUserDefaults standardUserDefaults] integerForKey:@"General_AutoloadROMOption"]; NSURL *autoloadRomURL = nil; @@ -250,7 +260,7 @@ if (autoloadRomURL != nil) { - [mainWindowDelegate handleLoadRom:autoloadRomURL]; + [emuControl handleLoadRom:autoloadRomURL]; } } @@ -273,14 +283,14 @@ - (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { - EmuWindowDelegate *mainWindowDelegate = [mainWindow delegate]; + EmuControllerDelegate *emuControl = (EmuControllerDelegate *)[emuControlController content]; // If a file needs to be saved, give the user a chance to save it // before quitting. - BOOL didRomClose = [mainWindowDelegate handleUnloadRom:REASONFORCLOSE_TERMINATE romToLoad:nil]; + BOOL didRomClose = [emuControl handleUnloadRom:REASONFORCLOSE_TERMINATE romToLoad:nil]; if (!didRomClose) { - if ([mainWindowDelegate isShowingSaveStateSheet]) + if ([emuControl isShowingSaveStateDialog]) { return NSTerminateLater; } @@ -353,6 +363,7 @@ - (NSMenuItem *) addSlotMenuItem:(NSMenu *)menu slotNumber:(NSUInteger)slotNumber { + EmuControllerDelegate *emuControl = (EmuControllerDelegate *)[emuControlController content]; NSUInteger slotNumberKey = slotNumber; if (slotNumber == 10) @@ -364,13 +375,14 @@ action:nil keyEquivalent:[NSString stringWithFormat:@"%ld", (unsigned long)slotNumberKey]]; - [mItem setTarget:[mainWindow delegate]]; + [mItem setTarget:emuControl]; return mItem; } - (void) setupUserDefaults { + EmuControllerDelegate *emuControl = (EmuControllerDelegate *)[emuControlController content]; EmuWindowDelegate *mainWindowDelegate = [mainWindow delegate]; PreferencesWindowDelegate *prefWindowDelegate = [prefWindow delegate]; NSMutableDictionary *prefBindings = [prefWindowDelegate bindings]; @@ -447,6 +459,7 @@ CocoaDSFirmware *newFirmware = [[[CocoaDSFirmware alloc] initWithDictionary:newFWDict] autorelease]; [cdsCore setCdsFirmware:newFirmware]; [newFirmware update]; + [emuControl setCdsFirmware:newFirmware]; // Setup the ARM7 BIOS, ARM9 BIOS, and firmware image paths per user preferences. NSString *arm7BiosImagePath = [[NSUserDefaults standardUserDefaults] stringForKey:@"BIOS_ARM7ImagePath"]; @@ -532,6 +545,7 @@ [prefWindowDelegate updateVolumeIcon:nil]; [mainWindowDelegate setupUserDefaults]; + [emuControl setupUserDefaults]; } - (void) updateInputDisplayFields diff --git a/desmume/src/cocoa/userinterface/displayView.h b/desmume/src/cocoa/userinterface/displayView.h index 58f58ec05..dc51c87d0 100644 --- a/desmume/src/cocoa/userinterface/displayView.h +++ b/desmume/src/cocoa/userinterface/displayView.h @@ -1,6 +1,6 @@ /* Copyright (C) 2011 Roger Manuel - Copyright (C) 2013 DeSmuME team + Copyright (C) 2011-2013 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -82,7 +82,6 @@ enum OGLVertexAttributeID @property (retain) NSPort *sendPortInput; @property (retain) CocoaDSController *cdsController; @property (readonly) NSSize normalSize; -@property (assign) UInt32 gpuStateFlags; @property (assign) double scale; @property (assign) double rotation; @property (assign) BOOL useBilinearOutput; @@ -93,20 +92,10 @@ enum OGLVertexAttributeID @property (readonly) NSMutableDictionary *bindings; - (void) setVideoFilterType:(NSInteger)theType; -- (void) setRender3DRenderingEngine:(NSInteger)methodID; -- (void) setRender3DHighPrecisionColorInterpolation:(BOOL)state; -- (void) setRender3DEdgeMarking:(BOOL)state; -- (void) setRender3DFog:(BOOL)state; -- (void) setRender3DTextures:(BOOL)state; -- (void) setRender3DDepthComparisonThreshold:(NSUInteger)threshold; -- (void) setRender3DThreads:(NSUInteger)numberThreads; -- (void) setRender3DLineHack:(BOOL)state; -- (void) setRender3DMultisample:(BOOL)state; - (void) setViewToBlack; - (void) setViewToWhite; - (void) requestScreenshot:(NSURL *)fileURL fileType:(NSBitmapImageFileType)fileType; - (void) copyToPasteboard; -- (BOOL) gpuStateByBit:(UInt32)stateBit; - (NSPoint) dsPointFromEvent:(NSEvent *)theEvent; - (NSPoint) convertPointToDS:(NSPoint)clickLoc; - (BOOL) handleKeyPress:(NSEvent *)theEvent keyPressed:(BOOL)keyPressed; diff --git a/desmume/src/cocoa/userinterface/displayView.mm b/desmume/src/cocoa/userinterface/displayView.mm index 6329edc33..4fca9721f 100644 --- a/desmume/src/cocoa/userinterface/displayView.mm +++ b/desmume/src/cocoa/userinterface/displayView.mm @@ -1,6 +1,6 @@ /* Copyright (C) 2011 Roger Manuel - Copyright (C) 2013 DeSmuME team + Copyright (C) 2011-2013 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,7 +17,7 @@ */ #import "displayView.h" -#import "emuWindowDelegate.h" +#import "EmuControllerDelegate.h" #import "cocoa_input.h" #import "cocoa_globals.h" @@ -80,7 +80,6 @@ const char *fragmentProgram_100 = {"\ @synthesize isHudEnabled; @synthesize isHudEditingModeEnabled; @dynamic normalSize; -@dynamic gpuStateFlags; @dynamic scale; @dynamic rotation; @dynamic useBilinearOutput; @@ -123,20 +122,6 @@ const char *fragmentProgram_100 = {"\ isHudEnabled = NO; isHudEditingModeEnabled = NO; - UInt32 gpuStateFlags = GPUSTATE_MAIN_GPU_MASK | - GPUSTATE_MAIN_BG0_MASK | - GPUSTATE_MAIN_BG1_MASK | - GPUSTATE_MAIN_BG2_MASK | - GPUSTATE_MAIN_BG3_MASK | - GPUSTATE_MAIN_OBJ_MASK | - GPUSTATE_SUB_GPU_MASK | - GPUSTATE_SUB_BG0_MASK | - GPUSTATE_SUB_BG1_MASK | - GPUSTATE_SUB_BG2_MASK | - GPUSTATE_SUB_BG3_MASK | - GPUSTATE_SUB_OBJ_MASK; - - [bindings setValue:[NSNumber numberWithInt:gpuStateFlags] forKey:@"GpuStateFlags"]; [bindings setValue:[NSNumber numberWithDouble:1.0] forKey:@"scale"]; [bindings setValue:[NSNumber numberWithDouble:0.0] forKey:@"rotation"]; [bindings setValue:[NSNumber numberWithBool:YES] forKey:@"useBilinearOutput"]; @@ -145,15 +130,6 @@ const char *fragmentProgram_100 = {"\ [bindings setValue:@"Combo" forKey:@"displayModeString"]; [bindings setValue:[NSNumber numberWithInteger:VideoFilterTypeID_None] forKey:@"videoFilterType"]; [bindings setValue:[CocoaVideoFilter typeStringByID:VideoFilterTypeID_None] forKey:@"videoFilterTypeString"]; - [bindings setValue:[NSNumber numberWithInteger:CORE3DLIST_NULL] forKey:@"render3DRenderingEngine"]; - [bindings setValue:[NSNumber numberWithBool:YES] forKey:@"render3DHighPrecisionColorInterpolation"]; - [bindings setValue:[NSNumber numberWithBool:YES] forKey:@"render3DEdgeMarking"]; - [bindings setValue:[NSNumber numberWithBool:YES] forKey:@"render3DFog"]; - [bindings setValue:[NSNumber numberWithBool:YES] forKey:@"render3DTextures"]; - [bindings setValue:[NSNumber numberWithInteger:0] forKey:@"render3DDepthComparisonThreshold"]; - [bindings setValue:[NSNumber numberWithInteger:0] forKey:@"render3DThreads"]; - [bindings setValue:[NSNumber numberWithBool:YES] forKey:@"render3DLineHack"]; - [bindings setValue:[NSNumber numberWithBool:NO] forKey:@"render3DMultisample"]; return self; } @@ -176,24 +152,6 @@ const char *fragmentProgram_100 = {"\ return theSize; } -- (void) setGpuStateFlags:(UInt32)flags -{ - OSSpinLockLock(&spinlockGpuStateFlags); - [bindings setValue:[NSNumber numberWithInt:flags] forKey:@"GpuStateFlags"]; - OSSpinLockUnlock(&spinlockGpuStateFlags); - - [CocoaDSUtil messageSendOneWayWithInteger:self.sendPortDisplay msgID:MESSAGE_SET_GPU_STATE_FLAGS integerValue:flags]; -} - -- (UInt32) gpuStateFlags -{ - OSSpinLockLock(&spinlockGpuStateFlags); - UInt32 flags = [[bindings valueForKey:@"GpuStateFlags"] intValue]; - OSSpinLockUnlock(&spinlockGpuStateFlags); - - return flags; -} - - (void) setScale:(double)s { OSSpinLockLock(&spinlockScale); @@ -406,60 +364,6 @@ const char *fragmentProgram_100 = {"\ [CocoaDSUtil messageSendOneWayWithInteger:self.sendPortDisplay msgID:MESSAGE_CHANGE_VIDEO_FILTER integerValue:theType]; } -- (void) setRender3DRenderingEngine:(NSInteger)methodID -{ - [bindings setValue:[NSNumber numberWithInteger:methodID] forKey:@"render3DRenderingEngine"]; - [CocoaDSUtil messageSendOneWayWithInteger:self.sendPortDisplay msgID:MESSAGE_SET_RENDER3D_METHOD integerValue:methodID]; -} - -- (void) setRender3DHighPrecisionColorInterpolation:(BOOL)state -{ - [bindings setValue:[NSNumber numberWithBool:state] forKey:@"render3DHighPrecisionColorInterpolation"]; - [CocoaDSUtil messageSendOneWayWithBool:self.sendPortDisplay msgID:MESSAGE_SET_RENDER3D_HIGH_PRECISION_COLOR_INTERPOLATION boolValue:state]; -} - -- (void) setRender3DEdgeMarking:(BOOL)state -{ - [bindings setValue:[NSNumber numberWithBool:state] forKey:@"render3DEdgeMarking"]; - [CocoaDSUtil messageSendOneWayWithBool:self.sendPortDisplay msgID:MESSAGE_SET_RENDER3D_EDGE_MARKING boolValue:state]; -} - -- (void) setRender3DFog:(BOOL)state -{ - [bindings setValue:[NSNumber numberWithBool:state] forKey:@"render3DFog"]; - [CocoaDSUtil messageSendOneWayWithBool:self.sendPortDisplay msgID:MESSAGE_SET_RENDER3D_FOG boolValue:state]; -} - -- (void) setRender3DTextures:(BOOL)state -{ - [bindings setValue:[NSNumber numberWithBool:state] forKey:@"render3DTextures"]; - [CocoaDSUtil messageSendOneWayWithBool:self.sendPortDisplay msgID:MESSAGE_SET_RENDER3D_TEXTURES boolValue:state]; -} - -- (void) setRender3DDepthComparisonThreshold:(NSUInteger)threshold -{ - [bindings setValue:[NSNumber numberWithInteger:threshold] forKey:@"render3DDepthComparisonThreshold"]; - [CocoaDSUtil messageSendOneWayWithInteger:self.sendPortDisplay msgID:MESSAGE_SET_RENDER3D_DEPTH_COMPARISON_THRESHOLD integerValue:threshold]; -} - -- (void) setRender3DThreads:(NSUInteger)numberThreads -{ - [bindings setValue:[NSNumber numberWithInteger:numberThreads] forKey:@"render3DThreads"]; - [CocoaDSUtil messageSendOneWayWithInteger:self.sendPortDisplay msgID:MESSAGE_SET_RENDER3D_THREADS integerValue:numberThreads]; -} - -- (void) setRender3DLineHack:(BOOL)state -{ - [bindings setValue:[NSNumber numberWithBool:state] forKey:@"render3DLineHack"]; - [CocoaDSUtil messageSendOneWayWithBool:self.sendPortDisplay msgID:MESSAGE_SET_RENDER3D_LINE_HACK boolValue:state]; -} - -- (void) setRender3DMultisample:(BOOL)state -{ - [bindings setValue:[NSNumber numberWithBool:state] forKey:@"render3DMultisample"]; - [CocoaDSUtil messageSendOneWayWithBool:self.sendPortDisplay msgID:MESSAGE_SET_RENDER3D_MULTISAMPLE boolValue:state]; -} - - (void) setViewToBlack { [CocoaDSUtil messageSendOneWay:self.sendPortDisplay msgID:MESSAGE_SET_VIEW_TO_BLACK]; @@ -549,19 +453,6 @@ const char *fragmentProgram_100 = {"\ [CocoaDSUtil messageSendOneWay:self.sendPortDisplay msgID:MESSAGE_COPY_TO_PASTEBOARD]; } -- (BOOL) gpuStateByBit:(UInt32)stateBit -{ - BOOL result = NO; - UInt32 flags = [self gpuStateFlags]; - - if (flags & (1 << stateBit)) - { - result = YES; - } - - return result; -} - - (BOOL) handleKeyPress:(NSEvent *)theEvent keyPressed:(BOOL)keyPressed { BOOL isHandled = NO; @@ -581,9 +472,9 @@ const char *fragmentProgram_100 = {"\ [NSNumber numberWithBool:keyPressed], @"on", nil]; - if (keyPressed && [theEvent window] != nil && [[[theEvent window] delegate] respondsToSelector:@selector(setStatus:)]) + if (keyPressed && [theEvent window] != nil && [[[theEvent window] delegate] respondsToSelector:@selector(setStatusText:)]) { - [(EmuWindowDelegate *)[[theEvent window] delegate] setStatus:[NSString stringWithFormat:@"Keyboard:%i", [theEvent keyCode]]]; + [(EmuControllerDelegate *)[[theEvent window] delegate] setStatusText:[NSString stringWithFormat:@"Keyboard:%i", [theEvent keyCode]]]; } isHandled = [self.cdsController setStateWithInput:inputAttributes]; @@ -636,9 +527,9 @@ const char *fragmentProgram_100 = {"\ [NSNumber numberWithFloat:touchLoc.y], @"pointY", nil]; - if (buttonPressed && [theEvent window] != nil && [[[theEvent window] delegate] respondsToSelector:@selector(setStatus:)]) + if (buttonPressed && [theEvent window] != nil && [[[theEvent window] delegate] respondsToSelector:@selector(setStatusText:)]) { - [(EmuWindowDelegate *)[[theEvent window] delegate] setStatus:[NSString stringWithFormat:@"Mouse:%li X:%li Y:%li", (long)[theEvent buttonNumber], (long)(touchLoc.x), (long)(touchLoc.y)]]; + [(EmuControllerDelegate *)[[theEvent window] delegate] setStatusText:[NSString stringWithFormat:@"Mouse:%li X:%li Y:%li", (long)[theEvent buttonNumber], (long)(touchLoc.x), (long)(touchLoc.y)]]; } isHandled = [self.cdsController setStateWithInput:inputAttributes]; diff --git a/desmume/src/cocoa/userinterface/emuWindowDelegate.h b/desmume/src/cocoa/userinterface/emuWindowDelegate.h index 60766d985..601295a7f 100644 --- a/desmume/src/cocoa/userinterface/emuWindowDelegate.h +++ b/desmume/src/cocoa/userinterface/emuWindowDelegate.h @@ -1,6 +1,6 @@ /* Copyright (C) 2011 Roger Manuel - Copyright (C) 2012 DeSmuME team + Copyright (C) 2011-2013 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -19,11 +19,7 @@ #import @protocol DisplayViewDelegate; -@class CocoaDSRom; -@class CocoaDSSpeaker; -@class CocoaDSCheatManager; @class DisplayViewDelegate; -@class CheatWindowDelegate; #if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5 @@ -37,79 +33,33 @@ NSWindow *saveFileMigrationSheet; NSWindow *saveStatePrecloseSheet; NSView *displayView; - NSView *exportRomSavePanelAccessoryView; NSView *saveScreenshotPanelAccessoryView; - CocoaDSRom *currentRom; - CocoaDSSpeaker *cdsSpeaker; - CocoaDSCheatManager *cdsCheats; - CocoaDSCheatManager *dummyCheatList; DisplayViewDelegate *dispViewDelegate; - CheatWindowDelegate *cheatWindowDelegate; - NSObjectController *romInfoPanelController; - NSObjectController *firmwarePanelController; - NSObjectController *cdsCoreController; NSObjectController *cdsDisplayController; - NSObjectController *cdsSoundController; + NSObjectController *emuControlController; NSObjectController *emuWindowController; - NSObjectController *cheatWindowController; - NSArrayController *cheatListController; - NSArrayController *cheatDatabaseController; - NSImage *iconVolumeFull; - NSImage *iconVolumeTwoThird; - NSImage *iconVolumeOneThird; - NSImage *iconVolumeMute; - NSImage *iconExecute; - NSImage *iconPause; - NSImage *iconSpeedNormal; - NSImage *iconSpeedDouble; - - BOOL isRomLoading; - BOOL isSheetControllingExecution; - BOOL isShowingSaveStateSheet; - BOOL isShowingFileMigrationSheet; BOOL isShowingStatusBar; NSUInteger statusBarHeight; NSSize minDisplayViewSize; BOOL isMinSizeNormal; NSBitmapImageFileType screenshotFileFormat; - NSURL *currentEmuSaveStateURL; - NSInteger selectedExportRomSaveID; - NSInteger selectedRomSaveTypeID; - NSMutableDictionary *bindings; } @property (readonly) IBOutlet NSObject *dummyObject; @property (readonly) IBOutlet NSWindow *window; -@property (readonly) IBOutlet NSWindow *saveFileMigrationSheet; -@property (readonly) IBOutlet NSWindow *saveStatePrecloseSheet; @property (readonly) IBOutlet NSView *displayView; -@property (readonly) IBOutlet NSView *exportRomSavePanelAccessoryView; @property (readonly) IBOutlet NSView *saveScreenshotPanelAccessoryView; -@property (retain) CocoaDSRom *currentRom; -@property (retain) CocoaDSSpeaker *cdsSpeaker; -@property (retain) CocoaDSCheatManager *cdsCheats; @property (retain) DisplayViewDelegate *dispViewDelegate; -@property (readonly) IBOutlet CheatWindowDelegate *cheatWindowDelegate; -@property (readonly) IBOutlet NSObjectController *romInfoPanelController; -@property (readonly) IBOutlet NSObjectController *firmwarePanelController; -@property (readonly) IBOutlet NSObjectController *cdsCoreController; @property (readonly) IBOutlet NSObjectController *cdsDisplayController; -@property (readonly) IBOutlet NSObjectController *cdsSoundController; +@property (readonly) IBOutlet NSObjectController *emuControlController; @property (readonly) IBOutlet NSObjectController *emuWindowController; -@property (readonly) IBOutlet NSObjectController *cheatWindowController; -@property (readonly) IBOutlet NSArrayController *cheatListController; -@property (readonly) IBOutlet NSArrayController *cheatDatabaseController; -@property (assign) BOOL isSheetControllingExecution; -@property (assign) BOOL isShowingSaveStateSheet; -@property (assign) BOOL isShowingFileMigrationSheet; @property (assign) BOOL isMinSizeNormal; -@property (assign) NSInteger selectedRomSaveTypeID; @property (readonly) NSMutableDictionary *bindings; @@ -117,37 +67,10 @@ - (void) setContentRotation:(double)angleDegrees; - (double) resizeWithTransform:(NSSize)normalBounds scalar:(double)scalar rotation:(double)angleDegrees; - (double) maxContentScalar:(NSSize)contentBounds; -- (void) setVolume:(float)vol; -- (float) volume; -- (void) setIsRomLoaded:(BOOL)theState; -- (BOOL) isRomLoaded; -- (void) setStatus:(NSString *)theString; -- (NSString *) status; - -// File Menu -- (IBAction) openRom:(id)sender; -- (IBAction) closeRom:(id)sender; -- (IBAction) openEmuSaveState:(id)sender; -- (IBAction) saveEmuSaveState:(id)sender; -- (IBAction) saveEmuSaveStateAs:(id)sender; -- (IBAction) revertEmuSaveState:(id)sender; -- (IBAction) loadEmuSaveStateSlot:(id)sender; -- (IBAction) saveEmuSaveStateSlot:(id)sender; -- (IBAction) importRomSave:(id)sender; -- (IBAction) exportRomSave:(id)sender; -- (IBAction) selectExportRomSaveFormat:(id)sender; // Edit Menu - (IBAction) copy:(id)sender; -// Emulation Menu -- (IBAction) speedLimitDisable:(id)sender; -- (IBAction) toggleAutoFrameSkip:(id)sender; -- (IBAction) cheatsDisable:(id)sender; -- (IBAction) executeCoreToggle:(id)sender; -- (IBAction) resetCore:(id)sender; -- (IBAction) changeRomSaveType:(id)sender; - // View Menu - (IBAction) hudDisable:(id)sender; - (IBAction) toggleKeepMinDisplaySizeAtNormal:(id)sender; @@ -157,32 +80,7 @@ - (IBAction) selectScreenshotFileFormat:(id)sender; - (IBAction) saveScreenshotAs:(id)sender; - (void) saveScreenshotAsFinish:(NSNotification *)aNotification; -- (IBAction) toggleGPUState:(id)sender; -// Help Menu - - -// Window Elements - -- (BOOL) handleLoadRom:(NSURL *)fileURL; -- (BOOL) handleUnloadRom:(NSInteger)reasonID romToLoad:(NSURL *)romURL; -- (BOOL) loadRom:(NSURL *)romURL; -- (void) loadRomDidFinish:(NSNotification *)aNotification; -- (BOOL) unloadRom; - -- (void) executeCore; -- (void) pauseCore; -- (void) restoreCoreState; - -- (IBAction) changeCoreSpeed:(id)sender; -- (IBAction) changeCoreEmuFlags:(id)sender; -- (IBAction) changeFirmwareSettings:(id)sender; -- (IBAction) changeVolume:(id)sender; -- (IBAction) changeAudioEngine:(id)sender; -- (IBAction) changeSpuAdvancedLogic:(id)sender; -- (IBAction) changeSpuInterpolationMode:(id)sender; -- (IBAction) changeSpuSyncMode:(id)sender; -- (IBAction) changeSpuSyncMethod:(id)sender; - (IBAction) changeScale:(id)sender; - (IBAction) changeRotation:(id)sender; - (IBAction) changeRotationRelative:(id)sender; @@ -192,30 +90,12 @@ - (IBAction) changeDisplayOrientation:(id)sender; - (IBAction) changeDisplayOrder:(id)sender; - (IBAction) changeVideoFilter:(id)sender; -- (IBAction) change3DRenderMethod:(id)sender; -- (IBAction) change3DRenderHighPrecisionColorInterpolation:(id)sender; -- (IBAction) change3DRenderEdgeMarking:(id)sender; -- (IBAction) change3DRenderFog:(id)sender; -- (IBAction) change3DRenderTextures:(id)sender; -- (IBAction) change3DRenderDepthComparisonThreshold:(id)sender; -- (IBAction) change3DRenderThreads:(id)sender; -- (IBAction) change3DRenderLineHack:(id)sender; -- (IBAction) change3DRenderMultisample:(id)sender; - (void) setShowStatusBar:(BOOL)showStatusBar; -- (IBAction) closeMigrationSheet:(id)sender; -- (void) didEndFileMigrationSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo; -- (void) didEndSaveStateSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo; -- (void) didEndSaveStateSheetOpen:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo; -- (void) didEndSaveStateSheetTerminate:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo; - - (void) setupUserDefaults; - (IBAction) writeDefaultsDisplayRotation:(id)sender; - (IBAction) writeDefaultsHUDSettings:(id)sender; - (IBAction) writeDefaultsVideoOutputSettings:(id)sender; -- (IBAction) writeDefaults3DRenderingSettings:(id)sender; -- (IBAction) writeDefaultsEmulationSettings:(id)sender; -- (IBAction) writeDefaultsSoundSettings:(id)sender; @end diff --git a/desmume/src/cocoa/userinterface/emuWindowDelegate.mm b/desmume/src/cocoa/userinterface/emuWindowDelegate.mm index b67f01662..437dc9d14 100644 --- a/desmume/src/cocoa/userinterface/emuWindowDelegate.mm +++ b/desmume/src/cocoa/userinterface/emuWindowDelegate.mm @@ -1,6 +1,6 @@ /* Copyright (C) 2011 Roger Manuel - Copyright (C) 2013 DeSmuME team + Copyright (C) 2011-2013 DeSmuME team This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -17,16 +17,11 @@ */ #import "emuWindowDelegate.h" -#import "cheatWindowDelegate.h" +#import "EmuControllerDelegate.h" #import "displayView.h" #import "cocoa_globals.h" -#import "cocoa_core.h" -#import "cocoa_cheat.h" #import "cocoa_file.h" -#import "cocoa_firmware.h" -#import "cocoa_output.h" -#import "cocoa_rom.h" #import "cocoa_util.h" #undef BOOL @@ -36,32 +31,16 @@ @dynamic dummyObject; @synthesize window; -@synthesize saveFileMigrationSheet; -@synthesize saveStatePrecloseSheet; @synthesize displayView; -@synthesize exportRomSavePanelAccessoryView; @synthesize saveScreenshotPanelAccessoryView; -@synthesize currentRom; -@synthesize cdsSpeaker; -@synthesize cdsCheats; @synthesize dispViewDelegate; -@synthesize cheatWindowDelegate; -@synthesize romInfoPanelController; -@synthesize firmwarePanelController; -@synthesize cdsCoreController; -@synthesize cdsDisplayController; -@synthesize cdsSoundController; -@synthesize emuWindowController; -@synthesize cheatWindowController; -@synthesize cheatListController; -@synthesize cheatDatabaseController; -@synthesize isSheetControllingExecution; -@synthesize isShowingSaveStateSheet; -@synthesize isShowingFileMigrationSheet; +@synthesize cdsDisplayController; +@synthesize emuControlController; +@synthesize emuWindowController; + @dynamic isMinSizeNormal; -@synthesize selectedRomSaveTypeID; @synthesize bindings; @@ -81,43 +60,14 @@ return self; } - iconExecute = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Execute_420x420" ofType:@"png"]]; - iconPause = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Pause_420x420" ofType:@"png"]]; - iconSpeedNormal = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Speed1x_420x420" ofType:@"png"]]; - iconSpeedDouble = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_Speed2x_420x420" ofType:@"png"]]; - iconVolumeFull = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_VolumeFull_16x16" ofType:@"png"]]; - iconVolumeTwoThird = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_VolumeTwoThird_16x16" ofType:@"png"]]; - iconVolumeOneThird = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_VolumeOneThird_16x16" ofType:@"png"]]; - iconVolumeMute = [[NSImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Icon_VolumeMute_16x16" ofType:@"png"]]; - dispViewDelegate = nil; - currentRom = nil; - cdsSpeaker = nil; - dummyCheatList = nil; - isRomLoading = NO; - isSheetControllingExecution = NO; - isShowingSaveStateSheet = NO; - isShowingFileMigrationSheet = NO; isShowingStatusBar = YES; statusBarHeight = WINDOW_STATUS_BAR_HEIGHT; minDisplayViewSize = NSMakeSize(GPU_DISPLAY_WIDTH, GPU_DISPLAY_HEIGHT * 2); isMinSizeNormal = YES; screenshotFileFormat = NSTIFFFileType; - currentEmuSaveStateURL = nil; - selectedExportRomSaveID = 0; - selectedRomSaveTypeID = ROMSAVETYPE_AUTOMATIC; - [bindings setValue:[NSNumber numberWithBool:NO] forKey:@"isWorking"]; - [bindings setValue:[NSNumber numberWithBool:NO] forKey:@"isRomLoaded"]; [bindings setValue:[NSNumber numberWithBool:YES] forKey:@"isShowingStatusBar"]; - [bindings setValue:[NSNumber numberWithFloat:MAX_VOLUME] forKey:@"volume"]; - [bindings setObject:iconVolumeFull forKey:@"volumeIconImage"]; - [bindings setValue:NSSTRING_STATUS_READY forKey:@"status"]; - - [[NSNotificationCenter defaultCenter] addObserver:self - selector:@selector(loadRomDidFinish:) - name:@"org.desmume.DeSmuME.loadRomDidFinish" - object:nil]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(saveScreenshotAsFinish:) @@ -131,20 +81,8 @@ { [[NSNotificationCenter defaultCenter] removeObserver:self]; - [iconExecute release]; - [iconPause release]; - [iconSpeedNormal release]; - [iconSpeedDouble release]; - [iconVolumeFull release]; - [iconVolumeTwoThird release]; - [iconVolumeOneThird release]; - [iconVolumeMute release]; - [bindings release]; - [self setDispViewDelegate:nil]; - [self setCdsCheats:nil]; - [self setCdsSpeaker:nil]; - [self setCurrentRom:nil]; + [bindings release]; [super dealloc]; } @@ -231,61 +169,6 @@ return GetMaxScalarInBounds(contentBounds.width, contentBounds.height, visibleScreenBounds.width, visibleScreenBounds.height); } -- (void) setVolume:(float)vol -{ - [bindings setValue:[NSNumber numberWithFloat:vol] forKey:@"volume"]; - - // Update the icon. - NSImage *currentImage = [bindings valueForKey:@"volumeIconImage"]; - NSImage *newImage = nil; - if (vol <= 0.0f) - { - newImage = iconVolumeMute; - } - else if (vol > 0.0f && vol <= VOLUME_THRESHOLD_LOW) - { - newImage = iconVolumeOneThird; - } - else if (vol > VOLUME_THRESHOLD_LOW && vol <= VOLUME_THRESHOLD_HIGH) - { - newImage = iconVolumeTwoThird; - } - else - { - newImage = iconVolumeFull; - } - - if (newImage != currentImage) - { - [bindings setObject:newImage forKey:@"volumeIconImage"]; - } -} - -- (float) volume -{ - return [(NSNumber *)[bindings valueForKey:@"volume"] floatValue]; -} - -- (void) setIsRomLoaded:(BOOL)theState -{ - [bindings setValue:[NSNumber numberWithBool:theState] forKey:@"isRomLoaded"]; -} - -- (BOOL) isRomLoaded -{ - return [(NSNumber *)[bindings valueForKey:@"isRomLoaded"] boolValue]; -} - -- (void) setStatus:(NSString *)theString -{ - [bindings setValue:theString forKey:@"status"]; -} - -- (NSString *) status -{ - return (NSString *)[bindings valueForKey:@"status"]; -} - - (void) setIsMinSizeNormal:(BOOL)theState { isMinSizeNormal = theState; @@ -326,536 +209,11 @@ return isMinSizeNormal; } -- (IBAction) openRom:(id)sender -{ - if (isRomLoading) - { - return; - } - - NSURL *selectedFile = nil; - NSInteger buttonClicked = NSFileHandlingPanelCancelButton; - NSOpenPanel *panel = [NSOpenPanel openPanel]; - - [panel setCanChooseDirectories:NO]; - [panel setCanChooseFiles:YES]; - [panel setResolvesAliases:YES]; - [panel setAllowsMultipleSelection:NO]; - [panel setTitle:NSSTRING_TITLE_OPEN_ROM_PANEL]; - NSArray *fileTypes = [NSArray arrayWithObjects:@FILE_EXT_ROM_DS, @FILE_EXT_ROM_GBA, nil]; - - // The NSOpenPanel method -(NSInt)runModalForDirectory:file:types: - // is deprecated in Mac OS X v10.6. -#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5 - [panel setAllowedFileTypes:fileTypes]; - buttonClicked = [panel runModal]; -#else - buttonClicked = [panel runModalForDirectory:nil file:nil types:fileTypes]; -#endif - - if (buttonClicked == NSFileHandlingPanelOKButton) - { - selectedFile = [[panel URLs] lastObject]; - if(selectedFile == nil) - { - return; - } - } - else - { - return; - } - - [self handleLoadRom:selectedFile]; -} - -- (IBAction) closeRom:(id)sender -{ - [self handleUnloadRom:REASONFORCLOSE_NORMAL romToLoad:nil]; -} - -- (IBAction) openEmuSaveState:(id)sender -{ - BOOL result = NO; - NSURL *selectedFile = nil; - NSInteger buttonClicked = NSFileHandlingPanelCancelButton; - NSOpenPanel *panel = [NSOpenPanel openPanel]; - - [panel setCanChooseDirectories:NO]; - [panel setCanChooseFiles:YES]; - [panel setResolvesAliases:YES]; - [panel setAllowsMultipleSelection:NO]; - [panel setTitle:NSSTRING_TITLE_OPEN_STATE_FILE_PANEL]; - NSArray *fileTypes = [NSArray arrayWithObjects:@FILE_EXT_SAVE_STATE, nil]; - - // The NSOpenPanel method -(NSInt)runModalForDirectory:file:types: - // is deprecated in Mac OS X v10.6. -#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5 - [panel setAllowedFileTypes:fileTypes]; - buttonClicked = [panel runModal]; -#else - buttonClicked = [panel runModalForDirectory:nil file:nil types:fileTypes]; -#endif - - if (buttonClicked == NSFileHandlingPanelOKButton) - { - selectedFile = [[panel URLs] lastObject]; - if(selectedFile == nil) - { - return; - } - } - else - { - return; - } - - [self pauseCore]; - - result = [CocoaDSFile loadState:selectedFile]; - if (result == NO) - { - [self setStatus:NSSTRING_STATUS_SAVESTATE_LOADING_FAILED]; - [self restoreCoreState]; - return; - } - - currentEmuSaveStateURL = selectedFile; - [currentEmuSaveStateURL retain]; - [window setDocumentEdited:YES]; - - [self restoreCoreState]; - [self setStatus:NSSTRING_STATUS_SAVESTATE_LOADED]; -} - -- (IBAction) saveEmuSaveState:(id)sender -{ - BOOL result = NO; - - if ([window isDocumentEdited] && currentEmuSaveStateURL != nil) - { - [self pauseCore]; - - result = [CocoaDSFile saveState:currentEmuSaveStateURL]; - if (result == NO) - { - [self setStatus:NSSTRING_STATUS_SAVESTATE_SAVING_FAILED]; - return; - } - - [window setDocumentEdited:YES]; - - [self restoreCoreState]; - [self setStatus:NSSTRING_STATUS_SAVESTATE_SAVED]; - } - else - { - [self saveEmuSaveStateAs:sender]; - } -} - -- (IBAction) saveEmuSaveStateAs:(id)sender -{ - BOOL result = NO; - NSInteger buttonClicked = NSFileHandlingPanelCancelButton; - NSSavePanel *panel = [NSSavePanel savePanel]; - - [panel setCanCreateDirectories:YES]; - [panel setTitle:NSSTRING_TITLE_SAVE_STATE_FILE_PANEL]; - - // The NSSavePanel method -(void)setRequiredFileType: - // is deprecated in Mac OS X v10.6. -#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5 - NSArray *fileTypes = [NSArray arrayWithObjects:@FILE_EXT_SAVE_STATE, nil]; - [panel setAllowedFileTypes:fileTypes]; -#else - [panel setRequiredFileType:@FILE_EXT_SAVE_STATE]; -#endif - - buttonClicked = [panel runModal]; - if(buttonClicked == NSOKButton) - { - [self pauseCore]; - - NSURL *saveFileURL = [panel URL]; - - result = [CocoaDSFile saveState:saveFileURL]; - if (result == NO) - { - [self setStatus:NSSTRING_STATUS_SAVESTATE_SAVING_FAILED]; - return; - } - - currentEmuSaveStateURL = saveFileURL; - [currentEmuSaveStateURL retain]; - [window setDocumentEdited:YES]; - - [self restoreCoreState]; - [self setStatus:NSSTRING_STATUS_SAVESTATE_SAVED]; - } -} - -- (IBAction) revertEmuSaveState:(id)sender -{ - BOOL result = NO; - - if ([window isDocumentEdited] && currentEmuSaveStateURL != nil) - { - [self pauseCore]; - - result = [CocoaDSFile loadState:currentEmuSaveStateURL]; - if (result == NO) - { - [self setStatus:NSSTRING_STATUS_SAVESTATE_REVERTING_FAILED]; - return; - } - - [window setDocumentEdited:YES]; - - [self restoreCoreState]; - [self setStatus:NSSTRING_STATUS_SAVESTATE_REVERTED]; - } -} - -- (IBAction) loadEmuSaveStateSlot:(id)sender -{ - BOOL result = NO; - NSInteger i = [CocoaDSUtil getIBActionSenderTag:sender]; - - NSString *saveStatePath = [[CocoaDSFile saveStateURL] path]; - if (saveStatePath == nil) - { - // Should throw an error message here... - return; - } - - if (i < 0 || i > MAX_SAVESTATE_SLOTS) - { - return; - } - - NSURL *currentRomURL = [[self currentRom] fileURL]; - NSString *fileName = [CocoaDSFile saveSlotFileName:currentRomURL slotNumber:(NSUInteger)(i + 1)]; - if (fileName == nil) - { - return; - } - - [self pauseCore]; - - result = [CocoaDSFile loadState:[NSURL fileURLWithPath:[saveStatePath stringByAppendingPathComponent:fileName]]]; - if (result == NO) - { - [self setStatus:NSSTRING_STATUS_SAVESTATE_LOADING_FAILED]; - } - - [self restoreCoreState]; - [self setStatus:NSSTRING_STATUS_SAVESTATE_LOADED]; -} - -- (IBAction) saveEmuSaveStateSlot:(id)sender -{ - BOOL result = NO; - NSInteger i = [CocoaDSUtil getIBActionSenderTag:sender]; - - NSString *saveStatePath = [[CocoaDSFile saveStateURL] path]; - if (saveStatePath == nil) - { - [self setStatus:NSSTRING_STATUS_CANNOT_GENERATE_SAVE_PATH]; - return; - } - - result = [CocoaDSFile createUserAppSupportDirectory:@"States"]; - if (result == NO) - { - [self setStatus:NSSTRING_STATUS_CANNOT_CREATE_SAVE_DIRECTORY]; - return; - } - - if (i < 0 || i > MAX_SAVESTATE_SLOTS) - { - return; - } - - NSURL *currentRomURL = [[self currentRom] fileURL]; - NSString *fileName = [CocoaDSFile saveSlotFileName:currentRomURL slotNumber:(NSUInteger)(i + 1)]; - if (fileName == nil) - { - return; - } - - [self pauseCore]; - - result = [CocoaDSFile saveState:[NSURL fileURLWithPath:[saveStatePath stringByAppendingPathComponent:fileName]]]; - if (result == NO) - { - [self setStatus:NSSTRING_STATUS_SAVESTATE_SAVING_FAILED]; - return; - } - - [self restoreCoreState]; - [self setStatus:NSSTRING_STATUS_SAVESTATE_SAVED]; -} - -- (IBAction) importRomSave:(id)sender -{ - NSURL *selectedFile = nil; - NSInteger buttonClicked = NSFileHandlingPanelCancelButton; - NSOpenPanel *panel = [NSOpenPanel openPanel]; - - [panel setCanChooseDirectories:NO]; - [panel setCanChooseFiles:YES]; - [panel setResolvesAliases:YES]; - [panel setAllowsMultipleSelection:NO]; - [panel setTitle:NSSTRING_TITLE_IMPORT_ROM_SAVE_PANEL]; - NSArray *fileTypes = [NSArray arrayWithObjects:@FILE_EXT_ROM_SAVE_RAW, @FILE_EXT_ACTION_REPLAY_SAVE, nil]; - - // The NSOpenPanel method -(NSInt)runModalForDirectory:file:types: - // is deprecated in Mac OS X v10.6. -#if MAC_OS_X_VERSION_MAX_ALLOWED > MAC_OS_X_VERSION_10_5 - [panel setAllowedFileTypes:fileTypes]; - buttonClicked = [panel runModal]; -#else - buttonClicked = [panel runModalForDirectory:nil file:nil types:fileTypes]; -#endif - - if (buttonClicked == NSFileHandlingPanelOKButton) - { - selectedFile = [[panel URLs] lastObject]; - if(selectedFile == nil) - { - return; - } - } - else - { - return; - } - - BOOL result = [CocoaDSFile importRomSave:selectedFile]; - if (!result) - { - [self setStatus:NSSTRING_STATUS_ROM_SAVE_IMPORT_FAILED]; - return; - } - - [self setStatus:NSSTRING_STATUS_ROM_SAVE_IMPORTED]; -} - -- (IBAction) exportRomSave:(id)sender -{ - [self pauseCore]; - - BOOL result = NO; - NSInteger buttonClicked; - NSSavePanel *panel = [NSSavePanel savePanel]; - [panel setTitle:NSSTRING_TITLE_EXPORT_ROM_SAVE_PANEL]; - [panel setCanCreateDirectories:YES]; - [panel setAccessoryView:exportRomSavePanelAccessoryView]; - - //save it - buttonClicked = [panel runModal]; - if(buttonClicked == NSOKButton) - { - NSURL *romSaveURL = [CocoaDSFile fileURLFromRomURL:[[self currentRom] fileURL] toKind:@"ROM Save"]; - if (romSaveURL != nil) - { - result = [CocoaDSFile exportRomSaveToURL:[panel URL] romSaveURL:romSaveURL fileType:selectedExportRomSaveID]; - if (result == NO) - { - [self setStatus:NSSTRING_STATUS_ROM_SAVE_EXPORT_FAILED]; - return; - } - - [self setStatus:NSSTRING_STATUS_ROM_SAVE_EXPORTED]; - } - } - - [self restoreCoreState]; -} - -- (IBAction) selectExportRomSaveFormat:(id)sender -{ - selectedExportRomSaveID = [CocoaDSUtil getIBActionSenderTag:sender]; -} - - (IBAction)copy:(id)sender { [dispViewDelegate copyToPasteboard]; } -// Emulation Menu -- (IBAction) executeCoreToggle:(id)sender -{ - CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - - if ([cdsCore coreState] == CORESTATE_PAUSE) - { - if ([self isRomLoaded]) - { - [self executeCore]; - } - } - else - { - [self pauseCore]; - } -} - -- (IBAction) resetCore:(id)sender -{ - CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - - if ([self isRomLoaded]) - { - [self setStatus:NSSTRING_STATUS_EMULATOR_RESETTING]; - [bindings setValue:[NSNumber numberWithBool:YES] forKey:@"isWorking"]; - [window displayIfNeeded]; - - [cdsCore reset]; - if ([cdsCore coreState] == CORESTATE_PAUSE) - { - [[self dispViewDelegate] setViewToWhite]; - } - - [self setStatus:NSSTRING_STATUS_EMULATOR_RESET]; - [bindings setValue:[NSNumber numberWithBool:NO] forKey:@"isWorking"]; - [window displayIfNeeded]; - } -} - -- (IBAction) speedLimitDisable:(id)sender -{ - CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - - if ([cdsCore isSpeedLimitEnabled]) - { - [cdsCore setIsSpeedLimitEnabled:NO]; - [self setStatus:NSSTRING_STATUS_SPEED_LIMIT_DISABLED]; - } - else - { - [cdsCore setIsSpeedLimitEnabled:YES]; - [self setStatus:NSSTRING_STATUS_SPEED_LIMIT_ENABLED]; - } -} - -- (IBAction) toggleAutoFrameSkip:(id)sender -{ - CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - - if ([cdsCore isFrameSkipEnabled]) - { - [cdsCore setIsFrameSkipEnabled:NO]; - [self setStatus:NSSTRING_STATUS_AUTO_FRAME_SKIP_DISABLED]; - } - else - { - [cdsCore setIsFrameSkipEnabled:YES]; - [self setStatus:NSSTRING_STATUS_AUTO_FRAME_SKIP_ENABLED]; - } -} - -- (IBAction) changeRomSaveType:(id)sender -{ - NSInteger saveTypeID = [CocoaDSUtil getIBActionSenderTag:sender]; - [self setSelectedRomSaveTypeID:saveTypeID]; - - CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - [cdsCore changeRomSaveType:saveTypeID]; -} - -- (IBAction) cheatsDisable:(id)sender -{ - CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - - if ([cdsCore isCheatingEnabled]) - { - [cdsCore setIsCheatingEnabled:NO]; - [self setStatus:NSSTRING_STATUS_CHEATS_DISABLED]; - } - else - { - [cdsCore setIsCheatingEnabled:YES]; - [self setStatus:NSSTRING_STATUS_CHEATS_ENABLED]; - } -} - -// View Menu - -- (IBAction) changeCoreSpeed:(id)sender -{ - CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - - [cdsCore setSpeedScalar:(CGFloat)[CocoaDSUtil getIBActionSenderTag:sender] / 100.0f]; -} - -- (IBAction) changeCoreEmuFlags:(id)sender -{ - CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - NSUInteger flags = [cdsCore emulationFlags]; - - NSInteger flagBit = [CocoaDSUtil getIBActionSenderTag:sender]; - if (flagBit < 0) - { - return; - } - - BOOL flagState = [CocoaDSUtil getIBActionSenderButtonStateBool:sender]; - if (flagState) - { - flags |= (1 << flagBit); - } - else - { - flags &= ~(1 << flagBit); - } - - [cdsCore setEmulationFlags:flags]; -} - -- (IBAction) changeFirmwareSettings:(id)sender -{ - // Force end of editing of any text fields. - [[(NSControl *)sender window] makeFirstResponder:nil]; - - CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - [[cdsCore cdsFirmware] update]; -} - -- (IBAction) changeVolume:(id)sender -{ - float vol = [self volume]; - [self setVolume:vol]; - [self setStatus:[NSString stringWithFormat:NSSTRING_STATUS_VOLUME, vol]]; - [CocoaDSUtil messageSendOneWayWithFloat:[cdsSpeaker receivePort] msgID:MESSAGE_SET_VOLUME floatValue:vol]; -} - -- (IBAction) changeAudioEngine:(id)sender -{ - [CocoaDSUtil messageSendOneWayWithInteger:[cdsSpeaker receivePort] msgID:MESSAGE_SET_AUDIO_PROCESS_METHOD integerValue:[CocoaDSUtil getIBActionSenderTag:sender]]; -} - -- (IBAction) changeSpuAdvancedLogic:(id)sender -{ - [CocoaDSUtil messageSendOneWayWithBool:[cdsSpeaker receivePort] msgID:MESSAGE_SET_SPU_ADVANCED_LOGIC boolValue:[CocoaDSUtil getIBActionSenderButtonStateBool:sender]]; -} - -- (IBAction) changeSpuInterpolationMode:(id)sender -{ - [CocoaDSUtil messageSendOneWayWithInteger:[cdsSpeaker receivePort] msgID:MESSAGE_SET_SPU_INTERPOLATION_MODE integerValue:[CocoaDSUtil getIBActionSenderTag:sender]]; -} - -- (IBAction) changeSpuSyncMode:(id)sender -{ - [CocoaDSUtil messageSendOneWayWithInteger:[cdsSpeaker receivePort] msgID:MESSAGE_SET_SPU_SYNC_MODE integerValue:[CocoaDSUtil getIBActionSenderTag:sender]]; -} - -- (IBAction) changeSpuSyncMethod:(id)sender -{ - [CocoaDSUtil messageSendOneWayWithInteger:[cdsSpeaker receivePort] msgID:MESSAGE_SET_SPU_SYNC_METHOD integerValue:[CocoaDSUtil getIBActionSenderTag:sender]]; -} - - (IBAction) changeScale:(id)sender { [self setContentScalar:(double)[CocoaDSUtil getIBActionSenderTag:sender] / 100.0]; @@ -927,79 +285,19 @@ [dispViewDelegate setVideoFilterType:[CocoaDSUtil getIBActionSenderTag:sender]]; } -- (IBAction) change3DRenderMethod:(id)sender -{ - [dispViewDelegate setRender3DRenderingEngine:[CocoaDSUtil getIBActionSenderTag:sender]]; -} - -- (IBAction) change3DRenderHighPrecisionColorInterpolation:(id)sender -{ - [dispViewDelegate setRender3DHighPrecisionColorInterpolation:[CocoaDSUtil getIBActionSenderButtonStateBool:sender]]; -} - -- (IBAction) change3DRenderEdgeMarking:(id)sender -{ - [dispViewDelegate setRender3DEdgeMarking:[CocoaDSUtil getIBActionSenderButtonStateBool:sender]]; -} - -- (IBAction) change3DRenderFog:(id)sender -{ - [dispViewDelegate setRender3DFog:[CocoaDSUtil getIBActionSenderButtonStateBool:sender]]; -} - -- (IBAction) change3DRenderTextures:(id)sender -{ - [dispViewDelegate setRender3DTextures:[CocoaDSUtil getIBActionSenderButtonStateBool:sender]]; -} - -- (IBAction) change3DRenderDepthComparisonThreshold:(id)sender -{ - NSInteger threshold = 0; - - if ([sender respondsToSelector:@selector(integerValue)]) - { - threshold = [sender integerValue]; - if (threshold < 0) - { - return; - } - } - - [dispViewDelegate setRender3DDepthComparisonThreshold:(NSUInteger)threshold]; -} - -- (IBAction) change3DRenderThreads:(id)sender -{ - NSInteger numberThreads = [CocoaDSUtil getIBActionSenderTag:sender]; - if (numberThreads < 0) - { - return; - } - - [dispViewDelegate setRender3DThreads:(NSUInteger)numberThreads]; -} - -- (IBAction) change3DRenderLineHack:(id)sender -{ - [dispViewDelegate setRender3DLineHack:[CocoaDSUtil getIBActionSenderButtonStateBool:sender]]; -} - -- (IBAction) change3DRenderMultisample:(id)sender -{ - [dispViewDelegate setRender3DMultisample:[CocoaDSUtil getIBActionSenderButtonStateBool:sender]]; -} - - (IBAction) hudDisable:(id)sender { + EmuControllerDelegate *emuControl = (EmuControllerDelegate *)[emuControlController content]; + if ([dispViewDelegate isHudEnabled]) { [dispViewDelegate setIsHudEnabled:NO]; - [self setStatus:NSSTRING_STATUS_HUD_DISABLED]; + [emuControl setStatusText:NSSTRING_STATUS_HUD_DISABLED]; } else { [dispViewDelegate setIsHudEnabled:YES]; - [self setStatus:NSSTRING_STATUS_HUD_ENABLED]; + [emuControl setStatusText:NSSTRING_STATUS_HUD_ENABLED]; } } @@ -1093,7 +391,9 @@ - (IBAction) saveScreenshotAs:(id)sender { - [self pauseCore]; + EmuControllerDelegate *emuControl = (EmuControllerDelegate *)[emuControlController content]; + + [emuControl pauseCore]; NSInteger buttonClicked = NSFileHandlingPanelCancelButton; NSSavePanel *panel = [NSSavePanel savePanel]; @@ -1109,12 +409,13 @@ } else { - [self restoreCoreState]; + [emuControl restoreCoreState]; } } - (void) saveScreenshotAsFinish:(NSNotification *)aNotification { + EmuControllerDelegate *emuControl = (EmuControllerDelegate *)[emuControlController content]; NSURL *fileURL = (NSURL *)[[aNotification userInfo] valueForKey:@"fileURL"]; NSBitmapImageFileType fileType = (NSBitmapImageFileType)[(NSNumber *)[[aNotification userInfo] valueForKey:@"fileType"] integerValue]; NSImage *screenshotImage = (NSImage *)[[aNotification userInfo] valueForKey:@"screenshotImage"]; @@ -1125,567 +426,15 @@ [CocoaDSUtil quickDialogUsingTitle:NSSTRING_ERROR_TITLE_LEGACY message:NSSTRING_ERROR_SCREENSHOT_FAILED_LEGACY]; } - [self restoreCoreState]; -} - -- (IBAction) toggleGPUState:(id)sender -{ - NSInteger i = [CocoaDSUtil getIBActionSenderTag:sender]; - UInt32 flags = [dispViewDelegate gpuStateFlags]; - - flags ^= (1 << i); - - [dispViewDelegate setGpuStateFlags:flags]; -} - -- (BOOL) handleLoadRom:(NSURL *)fileURL -{ - BOOL result = NO; - - if (isRomLoading) - { - return result; - } - - if ([self isRomLoaded]) - { - BOOL closeResult = [self handleUnloadRom:REASONFORCLOSE_OPEN romToLoad:fileURL]; - if ([self isShowingSaveStateSheet]) - { - return result; - } - - if (![self isShowingSaveStateSheet] && closeResult == NO) - { - return result; - } - } - - // Check for the v0.9.7 ROM Save File - if ([CocoaDSFile romSaveExistsWithRom:fileURL] && ![CocoaDSFile romSaveExists:fileURL]) - { - SEL endSheetSelector = @selector(didEndFileMigrationSheet:returnCode:contextInfo:); - - [fileURL retain]; - [self setIsSheetControllingExecution:YES]; - [self setIsShowingFileMigrationSheet:YES]; - - [NSApp beginSheet:saveFileMigrationSheet - modalForWindow:window - modalDelegate:self - didEndSelector:endSheetSelector - contextInfo:fileURL]; - } - else - { - result = [self loadRom:fileURL]; - } - - return result; -} - -- (BOOL) handleUnloadRom:(NSInteger)reasonID romToLoad:(NSURL *)romURL -{ - BOOL result = NO; - - if (isRomLoading || ![self isRomLoaded]) - { - return result; - } - - [self pauseCore]; - - if ([window isDocumentEdited] && currentEmuSaveStateURL != nil) - { - SEL endSheetSelector = @selector(didEndSaveStateSheet:returnCode:contextInfo:); - - switch (reasonID) - { - case REASONFORCLOSE_OPEN: - [romURL retain]; - endSheetSelector = @selector(didEndSaveStateSheetOpen:returnCode:contextInfo:); - break; - - case REASONFORCLOSE_TERMINATE: - endSheetSelector = @selector(didEndSaveStateSheetTerminate:returnCode:contextInfo:); - break; - - default: - break; - } - - [currentEmuSaveStateURL retain]; - [self setIsSheetControllingExecution:YES]; - [self setIsShowingSaveStateSheet:YES]; - - [NSApp beginSheet:saveStatePrecloseSheet - modalForWindow:window - modalDelegate:self - didEndSelector:endSheetSelector - contextInfo:romURL]; - } - else - { - result = [self unloadRom]; - } - - return result; -} - -- (BOOL) loadRom:(NSURL *)romURL -{ - BOOL result = NO; - - if (romURL == nil) - { - return result; - } - - [self setStatus:NSSTRING_STATUS_ROM_LOADING]; - [bindings setValue:[NSNumber numberWithBool:YES] forKey:@"isWorking"]; - [window displayIfNeeded]; - - // Need to pause the core before loading the ROM. - [self pauseCore]; - - CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - [cdsCore setDynaRec]; - - CocoaDSRom *newRom = [[[CocoaDSRom alloc] init] autorelease]; - if (newRom != nil) - { - isRomLoading = YES; - [romURL retain]; - [newRom setSaveType:selectedRomSaveTypeID]; - [NSThread detachNewThreadSelector:@selector(loadDataOnThread:) toTarget:newRom withObject:romURL]; - [romURL release]; - } - - result = YES; - - return result; -} - -- (void) loadRomDidFinish:(NSNotification *)aNotification -{ - CocoaDSRom *theRom = [aNotification object]; - NSDictionary *userInfo = [aNotification userInfo]; - BOOL didLoad = [(NSNumber *)[userInfo valueForKey:@"DidLoad"] boolValue]; - - if (theRom == nil || ![theRom isDataLoaded] || !didLoad) - { - // If ROM loading fails, restore the core state, but only if a ROM is already loaded. - if([self isRomLoaded]) - { - [self restoreCoreState]; - } - - [self setStatus:NSSTRING_STATUS_ROM_LOADING_FAILED]; - [bindings setValue:[NSNumber numberWithBool:NO] forKey:@"isWorking"]; - - isRomLoading = NO; - return; - } - - // Set the core's ROM to our newly allocated ROM object. - [self setCurrentRom:theRom]; - [romInfoPanelController setContent:[theRom bindings]]; - - // If the ROM has an associated cheat file, load it now. - NSString *cheatsPath = [[CocoaDSFile fileURLFromRomURL:[theRom fileURL] toKind:@"Cheat"] path]; - CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - CocoaDSCheatManager *newCheatList = [[[CocoaDSCheatManager alloc] initWithCore:cdsCore fileURL:[NSURL fileURLWithPath:cheatsPath]] autorelease]; - if (newCheatList != nil) - { - NSMutableDictionary *cheatWindowBindings = (NSMutableDictionary *)[cheatWindowController content]; - - [CocoaDSCheatManager setMasterCheatList:newCheatList]; - [cheatListController setContent:[newCheatList list]]; - [self setCdsCheats:newCheatList]; - [cheatWindowBindings setValue:newCheatList forKey:@"cheatList"]; - - NSString *filePath = [[NSUserDefaults standardUserDefaults] stringForKey:@"R4Cheat_DatabasePath"]; - if (filePath != nil) - { - NSURL *fileURL = [NSURL fileURLWithPath:filePath]; - NSInteger error = 0; - NSMutableArray *dbList = [[self cdsCheats] cheatListFromDatabase:fileURL errorCode:&error]; - if (dbList != nil) - { - [cheatDatabaseController setContent:dbList]; - - NSString *titleString = [[self cdsCheats] dbTitle]; - NSString *dateString = [[self cdsCheats] dbDate]; - - [cheatWindowBindings setValue:titleString forKey:@"cheatDBTitle"]; - [cheatWindowBindings setValue:dateString forKey:@"cheatDBDate"]; - [cheatWindowBindings setValue:[NSString stringWithFormat:@"%ld", (unsigned long)[dbList count]] forKey:@"cheatDBItemCount"]; - } - else - { - [cheatWindowBindings setValue:@"---" forKey:@"cheatDBItemCount"]; - - switch (error) - { - case CHEATEXPORT_ERROR_FILE_NOT_FOUND: - NSLog(@"R4 Cheat Database read failed! Could not load the database file!"); - [cheatWindowBindings setValue:@"Database not loaded." forKey:@"cheatDBTitle"]; - [cheatWindowBindings setValue:@"CANNOT LOAD FILE" forKey:@"cheatDBDate"]; - break; - - case CHEATEXPORT_ERROR_WRONG_FILE_FORMAT: - NSLog(@"R4 Cheat Database read failed! Wrong file format!"); - [cheatWindowBindings setValue:@"Database load error." forKey:@"cheatDBTitle"]; - [cheatWindowBindings setValue:@"FAILED TO LOAD FILE" forKey:@"cheatDBDate"]; - break; - - case CHEATEXPORT_ERROR_SERIAL_NOT_FOUND: - NSLog(@"R4 Cheat Database read failed! Could not find the serial number for this game in the database!"); - [cheatWindowBindings setValue:@"ROM not found in database." forKey:@"cheatDBTitle"]; - [cheatWindowBindings setValue:@"ROM not found." forKey:@"cheatDBDate"]; - break; - - case CHEATEXPORT_ERROR_EXPORT_FAILED: - NSLog(@"R4 Cheat Database read failed! Could not read the database file!"); - [cheatWindowBindings setValue:@"Database read error." forKey:@"cheatDBTitle"]; - [cheatWindowBindings setValue:@"CANNOT READ FILE" forKey:@"cheatDBDate"]; - break; - - default: - break; - } - } - } - - [cheatWindowDelegate setCdsCheats:newCheatList]; - [[cheatWindowDelegate cdsCheatSearch] setCdsCore:cdsCore]; - [cheatWindowDelegate setCheatSearchViewByStyle:CHEATSEARCH_SEARCHSTYLE_EXACT_VALUE]; - } - - // Add the last loaded ROM to the Recent ROMs list. - [[NSDocumentController sharedDocumentController] noteNewRecentDocumentURL:[theRom fileURL]]; - - // Update the UI to indicate that a ROM has indeed been loaded. -#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4 - [window setRepresentedFilename:[[theRom fileURL] path]]; -#else - [window setRepresentedURL:[theRom fileURL]]; -#endif - [[window standardWindowButton:NSWindowDocumentIconButton] setImage:[theRom icon]]; - - NSString *newWindowTitle = [theRom internalName]; - [window setTitle:newWindowTitle]; - - [dispViewDelegate setViewToWhite]; - [self setStatus:NSSTRING_STATUS_ROM_LOADED]; - [bindings setValue:[NSNumber numberWithBool:NO] forKey:@"isWorking"]; - [self setIsRomLoaded:YES]; - [window displayIfNeeded]; - isRomLoading = NO; - - // After the ROM loading is complete, send an execute message to the Cocoa DS per - // user preferences. - if ([[NSUserDefaults standardUserDefaults] boolForKey:@"General_ExecuteROMOnLoad"]) - { - [self executeCore]; - } -} - -- (BOOL) unloadRom -{ - BOOL result = NO; - - [currentEmuSaveStateURL release]; - currentEmuSaveStateURL = nil; - [window setDocumentEdited:NO]; - - // Save the ROM's cheat list before unloading. - [[self cdsCheats] save]; - - // Update the UI to indicate that the ROM has started the process of unloading. - [self setStatus:NSSTRING_STATUS_ROM_UNLOADING]; - [romInfoPanelController setContent:[CocoaDSRom romNotLoadedBindings]]; - [cheatListController setContent:nil]; - [cheatWindowDelegate resetSearch:nil]; - [cheatWindowDelegate setCdsCheats:nil]; - [cheatDatabaseController setContent:nil]; - - NSMutableDictionary *cheatWindowBindings = (NSMutableDictionary *)[cheatWindowController content]; - [cheatWindowBindings setValue:@"No ROM loaded." forKey:@"cheatDBTitle"]; - [cheatWindowBindings setValue:@"No ROM loaded." forKey:@"cheatDBDate"]; - [cheatWindowBindings setValue:@"---" forKey:@"cheatDBItemCount"]; - [cheatWindowBindings setValue:nil forKey:@"cheatList"]; - - [bindings setValue:[NSNumber numberWithBool:YES] forKey:@"isWorking"]; - [window displayIfNeeded]; - - // Unload the ROM. - [self setCurrentRom:nil]; - - // Release the current cheat list and assign the empty list. - [self setCdsCheats:nil]; - if (dummyCheatList == nil) - { - dummyCheatList = [[CocoaDSCheatManager alloc] init]; - } - [CocoaDSCheatManager setMasterCheatList:dummyCheatList]; - - // Update the UI to indicate that the ROM has finished unloading. -#if MAC_OS_X_VERSION_MAX_ALLOWED <= MAC_OS_X_VERSION_10_4 - [window setRepresentedFilename:nil]; -#else - [window setRepresentedURL:nil]; -#endif - - NSString *newWindowTitle = (NSString *)[[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleName"]; - [window setTitle:newWindowTitle]; - - [dispViewDelegate setViewToBlack]; - [self setStatus:NSSTRING_STATUS_ROM_UNLOADED]; - [bindings setValue:[NSNumber numberWithBool:NO] forKey:@"isWorking"]; - [self setIsRomLoaded:NO]; - [window displayIfNeeded]; - - result = YES; - - return result; -} - -- (void) executeCore -{ - CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - [cdsCore setCoreState:CORESTATE_EXECUTE]; -} - -- (void) pauseCore -{ - CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - [cdsCore setCoreState:CORESTATE_PAUSE]; -} - -- (void) restoreCoreState -{ - CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - [cdsCore restoreCoreState]; + [emuControl restoreCoreState]; } - (BOOL)validateUserInterfaceItem:(id )theItem { BOOL enable = YES; SEL theAction = [theItem action]; - CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - if (theAction == @selector(importRomSave:) || - theAction == @selector(exportRomSave:)) - { - if (![self isRomLoaded]) - { - enable = NO; - } - } - else if (theAction == @selector(executeCoreToggle:)) - { - if (![self isRomLoaded] || - ![cdsCore masterExecute] || - [self isSheetControllingExecution]) - { - enable = NO; - } - - if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) - { - if ([cdsCore coreState] == CORESTATE_PAUSE) - { - [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_EXECUTE_CONTROL]; - } - else - { - [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_PAUSE_CONTROL]; - } - } - else if ([(id)theItem isMemberOfClass:[NSToolbarItem class]]) - { - if ([cdsCore coreState] == CORESTATE_PAUSE) - { - [(NSToolbarItem*)theItem setLabel:NSSTRING_TITLE_EXECUTE_CONTROL]; - [(NSToolbarItem*)theItem setImage:iconExecute]; - } - else - { - [(NSToolbarItem*)theItem setLabel:NSSTRING_TITLE_PAUSE_CONTROL]; - [(NSToolbarItem*)theItem setImage:iconPause]; - } - } - } - else if (theAction == @selector(executeCore) || - theAction == @selector(pauseCore)) - { - if (![self isRomLoaded] || - ![cdsCore masterExecute] || - [self isSheetControllingExecution]) - { - enable = NO; - } - } - else if (theAction == @selector(resetCore:)) - { - if (![self isRomLoaded] || [self isSheetControllingExecution]) - { - enable = NO; - } - } - else if (theAction == @selector(_openRecentDocument:)) - { - if ([self isShowingSaveStateSheet]) - { - enable = NO; - } - } - else if (theAction == @selector(openRom:)) - { - if (isRomLoading || [self isShowingSaveStateSheet]) - { - enable = NO; - } - } - else if (theAction == @selector(closeRom:)) - { - if (![self isRomLoaded] || isRomLoading || [self isShowingSaveStateSheet]) - { - enable = NO; - } - } - else if (theAction == @selector(loadEmuSaveStateSlot:)) - { - if (![self isRomLoaded] || [self isShowingSaveStateSheet]) - { - enable = NO; - } - else if (![CocoaDSFile saveStateExistsForSlot:[[self currentRom] fileURL] slotNumber:[theItem tag] + 1]) - { - enable = NO; - } - } - else if (theAction == @selector(saveEmuSaveStateSlot:)) - { - if (![self isRomLoaded] || [self isShowingSaveStateSheet]) - { - enable = NO; - } - - if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) - { - if ([CocoaDSFile saveStateExistsForSlot:[[self currentRom] fileURL] slotNumber:[theItem tag] + 1]) - { - [(NSMenuItem*)theItem setState:NSOnState]; - } - else - { - [(NSMenuItem*)theItem setState:NSOffState]; - } - } - } - else if (theAction == @selector(changeCoreSpeed:)) - { - NSInteger speedScalar = (NSInteger)([cdsCore speedScalar] * 100.0); - - if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) - { - if ([theItem tag] == -1) - { - if (speedScalar == (NSInteger)(SPEED_SCALAR_HALF * 100.0) || - speedScalar == (NSInteger)(SPEED_SCALAR_NORMAL * 100.0) || - speedScalar == (NSInteger)(SPEED_SCALAR_DOUBLE * 100.0)) - { - [(NSMenuItem*)theItem setState:NSOffState]; - } - else - { - [(NSMenuItem*)theItem setState:NSOnState]; - } - } - else if (speedScalar == [theItem tag]) - { - [(NSMenuItem*)theItem setState:NSOnState]; - } - else - { - [(NSMenuItem*)theItem setState:NSOffState]; - } - } - else if ([(id)theItem isMemberOfClass:[NSToolbarItem class]]) - { - if (speedScalar == (NSInteger)(SPEED_SCALAR_DOUBLE * 100.0)) - { - [(NSToolbarItem*)theItem setLabel:NSSTRING_TITLE_SPEED_1X]; - [(NSToolbarItem*)theItem setTag:100]; - [(NSToolbarItem*)theItem setImage:iconSpeedNormal]; - } - else - { - [(NSToolbarItem*)theItem setLabel:NSSTRING_TITLE_SPEED_2X]; - [(NSToolbarItem*)theItem setTag:200]; - [(NSToolbarItem*)theItem setImage:iconSpeedDouble]; - } - } - } - else if (theAction == @selector(speedLimitDisable:)) - { - if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) - { - if ([cdsCore isSpeedLimitEnabled]) - { - [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_DISABLE_SPEED_LIMIT]; - } - else - { - [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_ENABLE_SPEED_LIMIT]; - } - } - } - else if (theAction == @selector(toggleAutoFrameSkip:)) - { - if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) - { - if ([cdsCore isFrameSkipEnabled]) - { - [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_DISABLE_AUTO_FRAME_SKIP]; - } - else - { - [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_ENABLE_AUTO_FRAME_SKIP]; - } - } - } - else if (theAction == @selector(cheatsDisable:)) - { - if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) - { - if ([cdsCore isCheatingEnabled]) - { - [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_DISABLE_CHEATS]; - } - else - { - [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_ENABLE_CHEATS]; - } - } - } - else if (theAction == @selector(changeRomSaveType:)) - { - if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) - { - if ([self selectedRomSaveTypeID] == [theItem tag]) - { - [(NSMenuItem*)theItem setState:NSOnState]; - } - else - { - [(NSMenuItem*)theItem setState:NSOffState]; - } - } - } - else if (theAction == @selector(changeScale:)) + if (theAction == @selector(changeScale:)) { NSInteger viewScale = (NSInteger)([dispViewDelegate scale] * 100.0); @@ -1773,38 +522,6 @@ } } } - else if (theAction == @selector(openEmuSaveState:) || - theAction == @selector(saveEmuSaveState:) || - theAction == @selector(saveEmuSaveStateAs:)) - { - if (![self isRomLoaded] || [self isShowingSaveStateSheet]) - { - enable = NO; - } - } - else if (theAction == @selector(revertEmuSaveState:)) - { - if (![self isRomLoaded] || - [self isShowingSaveStateSheet] || - currentEmuSaveStateURL == nil) - { - enable = NO; - } - } - else if (theAction == @selector(toggleGPUState:)) - { - if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) - { - if ([dispViewDelegate gpuStateByBit:[theItem tag]]) - { - [(NSMenuItem*)theItem setState:NSOnState]; - } - else - { - [(NSMenuItem*)theItem setState:NSOffState]; - } - } - } else if (theAction == @selector(hudDisable:)) { if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) @@ -1853,21 +570,8 @@ - (void)windowDidBecomeMain:(NSNotification *)notification { - CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - - if ([self isRomLoaded]) - { - [romInfoPanelController setContent:[[self currentRom] bindings]]; - } - else - { - [romInfoPanelController setContent:[CocoaDSRom romNotLoadedBindings]]; - } - - [firmwarePanelController setContent:[cdsCore cdsFirmware]]; [emuWindowController setContent:[self bindings]]; [cdsDisplayController setContent:[dispViewDelegate bindings]]; - [cdsSoundController setContent:[cdsSpeaker property]]; } - (NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)frameSize @@ -1926,9 +630,10 @@ - (BOOL)windowShouldClose:(id)sender { BOOL shouldClose = YES; + EmuControllerDelegate *emuControl = (EmuControllerDelegate *)[emuControlController content]; // If no ROM is loaded, terminate the application. - if (![self isRomLoaded]) + if ([emuControl currentRom] == nil) { [NSApp terminate:sender]; } @@ -1936,113 +641,12 @@ else { shouldClose = NO; - [self closeRom:nil]; + [emuControl closeRom:nil]; } return shouldClose; } -- (IBAction) closeMigrationSheet:(id)sender -{ - NSWindow *sheet = [(NSControl *)sender window]; - NSInteger code = [(NSControl *)sender tag]; - - [NSApp endSheet:sheet returnCode:code]; -} - -- (void) didEndFileMigrationSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo -{ - NSURL *romURL = (NSURL *)contextInfo; - NSURL *romSaveURL = [CocoaDSFile romSaveURLFromRomURL:romURL]; - - [sheet orderOut:self]; - - switch (returnCode) - { - case NSOKButton: - [CocoaDSFile moveFileToCurrentDirectory:romSaveURL]; - break; - - default: - break; - } - - [self setIsSheetControllingExecution:NO]; - [self setIsShowingFileMigrationSheet:NO]; - - [self loadRom:romURL]; - - // We retained this when we initially put up the sheet, so we need to release it now. - [romURL release]; -} - -- (void) didEndSaveStateSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo -{ - BOOL result = NO; - - [sheet orderOut:self]; - - switch (returnCode) - { - case NSCancelButton: // Cancel - [self restoreCoreState]; - [self setIsSheetControllingExecution:NO]; - [self setIsShowingSaveStateSheet:NO]; - return; - break; - - case COCOA_DIALOG_DEFAULT: // Save - result = [CocoaDSFile saveState:currentEmuSaveStateURL]; - if (result == NO) - { - // Throw an error here... - return; - } - break; - - case COCOA_DIALOG_OPTION: // Don't Save - break; - - default: - break; - } - - [self unloadRom]; - - [self setIsSheetControllingExecution:NO]; - [self setIsShowingSaveStateSheet:NO]; - - // We retained this when we initially put up the sheet, so we need to release it now. - [currentEmuSaveStateURL release]; - currentEmuSaveStateURL = nil; -} - -- (void) didEndSaveStateSheetOpen:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo -{ - [self didEndSaveStateSheet:sheet returnCode:returnCode contextInfo:contextInfo]; - - NSURL *romURL = (NSURL *)contextInfo; - [self handleLoadRom:romURL]; - [romURL release]; -} - -- (void) didEndSaveStateSheetTerminate:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo -{ - [self didEndSaveStateSheet:sheet returnCode:returnCode contextInfo:contextInfo]; - - if (returnCode == NSCancelButton) - { - [NSApp replyToApplicationShouldTerminate:NO]; - } - else - { - if (currentEmuSaveStateURL == nil) - { - [NSApp replyToApplicationShouldTerminate:YES]; - } - } -} - - (void) setupUserDefaults { // Set the display window per user preferences. @@ -2057,30 +661,10 @@ [self setContentScalar:displayScalar]; [self setContentRotation:displayRotation]; - // Set the SPU settings per user preferences. - [self setVolume:[[NSUserDefaults standardUserDefaults] floatForKey:@"Sound_Volume"]]; - [[self cdsSpeaker] setVolume:[[NSUserDefaults standardUserDefaults] floatForKey:@"Sound_Volume"]]; - [[self cdsSpeaker] setAudioOutputEngine:[[NSUserDefaults standardUserDefaults] integerForKey:@"Sound_AudioOutputEngine"]]; - [[self cdsSpeaker] setSpuAdvancedLogic:[[NSUserDefaults standardUserDefaults] boolForKey:@"SPU_AdvancedLogic"]]; - [[self cdsSpeaker] setSpuInterpolationMode:[[NSUserDefaults standardUserDefaults] integerForKey:@"SPU_InterpolationMode"]]; - [[self cdsSpeaker] setSpuSyncMode:[[NSUserDefaults standardUserDefaults] integerForKey:@"SPU_SyncMode"]]; - [[self cdsSpeaker] setSpuSyncMethod:[[NSUserDefaults standardUserDefaults] integerForKey:@"SPU_SyncMethod"]]; - // Setup the window display view per user preferences. [[self dispViewDelegate] setVideoFilterType:[[NSUserDefaults standardUserDefaults] integerForKey:@"DisplayView_VideoFilter"]]; [[self dispViewDelegate] setUseBilinearOutput:[[NSUserDefaults standardUserDefaults] boolForKey:@"DisplayView_UseBilinearOutput"]]; [[self dispViewDelegate] setUseVerticalSync:[[NSUserDefaults standardUserDefaults] boolForKey:@"DisplayView_UseVerticalSync"]]; - - // Set the 3D rendering options per user preferences. - [[self dispViewDelegate] setRender3DThreads:(NSUInteger)[[NSUserDefaults standardUserDefaults] integerForKey:@"Render3D_Threads"]]; - [[self dispViewDelegate] setRender3DRenderingEngine:[[NSUserDefaults standardUserDefaults] integerForKey:@"Render3D_RenderingEngine"]]; - [[self dispViewDelegate] setRender3DHighPrecisionColorInterpolation:[[NSUserDefaults standardUserDefaults] boolForKey:@"Render3D_HighPrecisionColorInterpolation"]]; - [[self dispViewDelegate] setRender3DEdgeMarking:[[NSUserDefaults standardUserDefaults] boolForKey:@"Render3D_EdgeMarking"]]; - [[self dispViewDelegate] setRender3DFog:[[NSUserDefaults standardUserDefaults] boolForKey:@"Render3D_Fog"]]; - [[self dispViewDelegate] setRender3DTextures:[[NSUserDefaults standardUserDefaults] boolForKey:@"Render3D_Textures"]]; - [[self dispViewDelegate] setRender3DDepthComparisonThreshold:(NSUInteger)[[NSUserDefaults standardUserDefaults] integerForKey:@"Render3D_DepthComparisonThreshold"]]; - [[self dispViewDelegate] setRender3DLineHack:[[NSUserDefaults standardUserDefaults] boolForKey:@"Render3D_LineHack"]]; - [[self dispViewDelegate] setRender3DMultisample:[[NSUserDefaults standardUserDefaults] boolForKey:@"Render3D_Multisample"]]; } - (IBAction) writeDefaultsDisplayRotation:(id)sender @@ -2104,65 +688,4 @@ [[NSUserDefaults standardUserDefaults] setBool:[[dispViewBindings valueForKey:@"useVerticalSync"] boolValue] forKey:@"DisplayView_UseVerticalSync"]; } -- (IBAction) writeDefaults3DRenderingSettings:(id)sender -{ - NSMutableDictionary *dispViewBindings = (NSMutableDictionary *)[cdsDisplayController content]; - - // Force end of editing of any text fields. - [[(NSControl *)sender window] makeFirstResponder:nil]; - - [[NSUserDefaults standardUserDefaults] setInteger:[[dispViewBindings valueForKey:@"render3DRenderingEngine"] integerValue] forKey:@"Render3D_RenderingEngine"]; - [[NSUserDefaults standardUserDefaults] setBool:[[dispViewBindings valueForKey:@"render3DHighPrecisionColorInterpolation"] boolValue] forKey:@"Render3D_HighPrecisionColorInterpolation"]; - [[NSUserDefaults standardUserDefaults] setBool:[[dispViewBindings valueForKey:@"render3DEdgeMarking"] boolValue] forKey:@"Render3D_EdgeMarking"]; - [[NSUserDefaults standardUserDefaults] setBool:[[dispViewBindings valueForKey:@"render3DFog"] boolValue] forKey:@"Render3D_Fog"]; - [[NSUserDefaults standardUserDefaults] setBool:[[dispViewBindings valueForKey:@"render3DTextures"] boolValue] forKey:@"Render3D_Textures"]; - [[NSUserDefaults standardUserDefaults] setInteger:[[dispViewBindings valueForKey:@"render3DDepthComparisonThreshold"] integerValue] forKey:@"Render3D_DepthComparisonThreshold"]; - [[NSUserDefaults standardUserDefaults] setInteger:[[dispViewBindings valueForKey:@"render3DThreads"] integerValue] forKey:@"Render3D_Threads"]; - [[NSUserDefaults standardUserDefaults] setBool:[[dispViewBindings valueForKey:@"render3DLineHack"] boolValue] forKey:@"Render3D_LineHack"]; - [[NSUserDefaults standardUserDefaults] setBool:[[dispViewBindings valueForKey:@"render3DMultisample"] boolValue] forKey:@"Render3D_Multisample"]; -} - -- (IBAction) writeDefaultsEmulationSettings:(id)sender -{ - CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - NSDictionary *firmwareDict = [(CocoaDSFirmware *)[firmwarePanelController content] dataDictionary]; - - // Force end of editing of any text fields. - [[(NSControl *)sender window] makeFirstResponder:nil]; - - [[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagAdvancedBusLevelTiming] forKey:@"Emulation_AdvancedBusLevelTiming"]; - [[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagRigorousTiming] forKey:@"Emulation_RigorousTiming"]; - [[NSUserDefaults standardUserDefaults] setInteger:[cdsCore cpuEmulationEngine] forKey:@"Emulation_CPUEmulationEngine"]; - [[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagUseExternalBios] forKey:@"Emulation_UseExternalBIOSImages"]; - [[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagEmulateBiosInterrupts] forKey:@"Emulation_BIOSEmulateSWI"]; - [[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagPatchDelayLoop] forKey:@"Emulation_BIOSPatchDelayLoopSWI"]; - [[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagUseExternalFirmware] forKey:@"Emulation_UseExternalFirmwareImage"]; - [[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagFirmwareBoot] forKey:@"Emulation_FirmwareBoot"]; - [[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagEmulateEnsata] forKey:@"Emulation_EmulateEnsata"]; - [[NSUserDefaults standardUserDefaults] setBool:[cdsCore emuFlagDebugConsole] forKey:@"Emulation_UseDebugConsole"]; - - [[NSUserDefaults standardUserDefaults] setObject:[firmwareDict valueForKey:@"Nickname"] forKey:@"FirmwareConfig_Nickname"]; - [[NSUserDefaults standardUserDefaults] setObject:[firmwareDict valueForKey:@"Message"] forKey:@"FirmwareConfig_Message"]; - [[NSUserDefaults standardUserDefaults] setObject:[firmwareDict valueForKey:@"FavoriteColor"] forKey:@"FirmwareConfig_FavoriteColor"]; - [[NSUserDefaults standardUserDefaults] setObject:[firmwareDict valueForKey:@"Birthday"] forKey:@"FirmwareConfig_Birthday"]; - [[NSUserDefaults standardUserDefaults] setObject:[firmwareDict valueForKey:@"Language"] forKey:@"FirmwareConfig_Language"]; -} - -- (IBAction) writeDefaultsSoundSettings:(id)sender -{ - NSMutableDictionary *speakerBindings = (NSMutableDictionary *)[cdsSoundController content]; - - [[NSUserDefaults standardUserDefaults] setFloat:[[speakerBindings valueForKey:@"volume"] floatValue] forKey:@"Sound_Volume"]; - [[NSUserDefaults standardUserDefaults] setInteger:[[speakerBindings valueForKey:@"audioOutputEngine"] integerValue] forKey:@"Sound_AudioOutputEngine"]; - [[NSUserDefaults standardUserDefaults] setBool:[[speakerBindings valueForKey:@"spuAdvancedLogic"] boolValue] forKey:@"SPU_AdvancedLogic"]; - [[NSUserDefaults standardUserDefaults] setInteger:[[speakerBindings valueForKey:@"spuInterpolationMode"] integerValue] forKey:@"SPU_InterpolationMode"]; - [[NSUserDefaults standardUserDefaults] setInteger:[[speakerBindings valueForKey:@"spuSyncMode"] integerValue] forKey:@"SPU_SyncMode"]; - [[NSUserDefaults standardUserDefaults] setInteger:[[speakerBindings valueForKey:@"spuSyncMethod"] integerValue] forKey:@"SPU_SyncMethod"]; -} - -- (void)controlTextDidEndEditing:(NSNotification *)aNotification -{ - [self change3DRenderDepthComparisonThreshold:[aNotification object]]; -} - @end