From 1e9b179bf49af529b079d474c125d8fc7267f190 Mon Sep 17 00:00:00 2001 From: rogerman Date: Mon, 28 Aug 2017 17:30:19 -0700 Subject: [PATCH] Cocoa Port: Begin refactoring some of the emulation execution loop code to be less port-dependent. - Also clean up some UI code with switching app preferences views when running OS X Leopard. --- .../frontend/cocoa/ClientExecutionControl.cpp | 432 +++++++++++ .../frontend/cocoa/ClientExecutionControl.h | 166 ++++ .../project.pbxproj | 12 + .../project.pbxproj | 14 + desmume/src/frontend/cocoa/cocoa_core.h | 12 +- desmume/src/frontend/cocoa/cocoa_core.mm | 380 ++++----- desmume/src/frontend/cocoa/cocoa_globals.h | 69 -- .../translations/English.lproj/MainMenu.xib | 731 +++++++++++++----- .../userinterface/DisplayWindowController.mm | 4 +- .../userinterface/EmuControllerDelegate.h | 1 - .../userinterface/EmuControllerDelegate.mm | 62 +- .../userinterface/Slot2WindowDelegate.mm | 2 +- .../cocoa/userinterface/appDelegate.mm | 61 +- .../userinterface/preferencesWindowDelegate.h | 11 + .../preferencesWindowDelegate.mm | 18 +- .../troubleshootingWindowDelegate.mm | 2 +- 16 files changed, 1409 insertions(+), 568 deletions(-) create mode 100644 desmume/src/frontend/cocoa/ClientExecutionControl.cpp create mode 100644 desmume/src/frontend/cocoa/ClientExecutionControl.h diff --git a/desmume/src/frontend/cocoa/ClientExecutionControl.cpp b/desmume/src/frontend/cocoa/ClientExecutionControl.cpp new file mode 100644 index 000000000..fca191e45 --- /dev/null +++ b/desmume/src/frontend/cocoa/ClientExecutionControl.cpp @@ -0,0 +1,432 @@ +/* + Copyright (C) 2017 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 . + */ + +#include "NDSSystem.h" + +#include "ClientExecutionControl.h" + + +ClientExecutionControl::ClientExecutionControl() +{ + _settingsPending.cpuEngineID = CPUEmulationEngineID_Interpreter; + _settingsPending.JITMaxBlockSize = 12; + + _settingsPending.enableAdvancedBusLevelTiming = true; + _settingsPending.enableRigorous3DRenderingTiming = false; + _settingsPending.enableExternalBIOS = false; + _settingsPending.enableBIOSInterrupts = false; + _settingsPending.enableBIOSPatchDelayLoop = false; + _settingsPending.enableExternalFirmware = false; + _settingsPending.enableFirmwareBoot = false; + _settingsPending.enableDebugConsole = false; + _settingsPending.enableEnsataEmulation = false; + + _settingsPending.executionSpeed = 1.0f; + + _settingsPending.enableFrameSkip = true; + _settingsPending.framesToSkip = 0; + _settingsPending.frameJumpTarget = 0; + + _settingsPending.execBehavior = ExecutionBehavior_Pause; + _settingsPending.jumpBehavior = FrameJumpBehavior_Forward; + + pthread_mutex_init(&_mutexSettingsPendingOnReset, NULL); + pthread_mutex_init(&_mutexSettingsApplyOnReset, NULL); + pthread_mutex_init(&_mutexSettingsPendingOnExecutionLoopStart, NULL); + pthread_mutex_init(&_mutexSettingsApplyOnExecutionLoopStart, NULL); + pthread_mutex_init(&_mutexSettingsPendingOnNDSExec, NULL); + pthread_mutex_init(&_mutexSettingsApplyOnNDSExec, NULL); +} + +ClientExecutionControl::~ClientExecutionControl() +{ + pthread_mutex_destroy(&this->_mutexSettingsPendingOnReset); + pthread_mutex_destroy(&this->_mutexSettingsApplyOnReset); + pthread_mutex_destroy(&this->_mutexSettingsPendingOnExecutionLoopStart); + pthread_mutex_destroy(&this->_mutexSettingsApplyOnExecutionLoopStart); + pthread_mutex_destroy(&this->_mutexSettingsPendingOnNDSExec); + pthread_mutex_destroy(&this->_mutexSettingsApplyOnNDSExec); +} + +CPUEmulationEngineID ClientExecutionControl::GetCPUEmulationEngineID() +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnReset); + const CPUEmulationEngineID engineID = this->_settingsPending.cpuEngineID; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnReset); + + return engineID; +} + +void ClientExecutionControl::SetCPUEmulationEngineID(CPUEmulationEngineID engineID) +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnReset); + this->_settingsPending.cpuEngineID = engineID; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnReset); +} + +uint8_t ClientExecutionControl::GetJITMaxBlockSize() +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnReset); + const uint8_t blockSize = this->_settingsPending.JITMaxBlockSize; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnReset); + + return blockSize; +} + +void ClientExecutionControl::SetJITMaxBlockSize(uint8_t blockSize) +{ + if (blockSize == 0) + { + blockSize = 1; + } + else if (blockSize > 100) + { + blockSize = 100; + } + + pthread_mutex_lock(&this->_mutexSettingsPendingOnReset); + this->_settingsPending.JITMaxBlockSize = blockSize; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnReset); +} + +bool ClientExecutionControl::GetEnableAdvancedBusLevelTiming() +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec); + const bool enable = this->_settingsPending.enableAdvancedBusLevelTiming; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec); + + return enable; +} + +void ClientExecutionControl::SetEnableAdvancedBusLevelTiming(bool enable) +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec); + this->_settingsPending.enableAdvancedBusLevelTiming = enable; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec); +} + +bool ClientExecutionControl::GetEnableRigorous3DRenderingTiming() +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec); + const bool enable = this->_settingsPending.enableRigorous3DRenderingTiming; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec); + + return enable; +} + +void ClientExecutionControl::SetEnableRigorous3DRenderingTiming(bool enable) +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec); + this->_settingsPending.enableRigorous3DRenderingTiming = enable; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec); +} + +bool ClientExecutionControl::GetEnableExternalBIOS() +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec); + const bool enable = this->_settingsPending.enableExternalBIOS; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec); + + return enable; +} + +void ClientExecutionControl::SetEnableExternalBIOS(bool enable) +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec); + this->_settingsPending.enableExternalBIOS = enable; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec); +} + +bool ClientExecutionControl::GetEnableBIOSInterrupts() +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec); + const bool enable = this->_settingsPending.enableBIOSInterrupts; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec); + + return enable; +} + +void ClientExecutionControl::SetEnableBIOSInterrupts(bool enable) +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec); + this->_settingsPending.enableBIOSInterrupts = enable; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec); +} + +bool ClientExecutionControl::GetEnableBIOSPatchDelayLoop() +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec); + const bool enable = this->_settingsPending.enableBIOSPatchDelayLoop; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec); + + return enable; +} + +void ClientExecutionControl::SetEnableBIOSPatchDelayLoop(bool enable) +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec); + this->_settingsPending.enableBIOSPatchDelayLoop = enable; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec); +} + +bool ClientExecutionControl::GetEnableExternalFirmware() +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec); + const bool enable = this->_settingsPending.enableExternalFirmware; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec); + + return enable; +} + +void ClientExecutionControl::SetEnableExternalFirmware(bool enable) +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec); + this->_settingsPending.enableExternalFirmware = enable; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec); +} + +bool ClientExecutionControl::GetEnableFirmwareBoot() +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec); + const bool enable = this->_settingsPending.enableFirmwareBoot; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec); + + return enable; +} + +void ClientExecutionControl::SetEnableFirmwareBoot(bool enable) +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec); + this->_settingsPending.enableFirmwareBoot = enable; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec); +} + +bool ClientExecutionControl::GetEnableDebugConsole() +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec); + const bool enable = this->_settingsPending.enableDebugConsole; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec); + + return enable; +} + +void ClientExecutionControl::SetEnableDebugConsole(bool enable) +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec); + this->_settingsPending.enableDebugConsole = enable; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec); +} + +bool ClientExecutionControl::GetEnableEnsataEmulation() +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec); + const bool enable = this->_settingsPending.enableEnsataEmulation; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec); + + return enable; +} + +void ClientExecutionControl::SetEnableEnsataEmulation(bool enable) +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec); + this->_settingsPending.enableEnsataEmulation = enable; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec); +} + +bool ClientExecutionControl::GetEnableSpeedLimiter() +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnExecutionLoopStart); + const bool enable = this->_settingsPending.enableSpeedLimiter; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnExecutionLoopStart); + + return enable; +} + +void ClientExecutionControl::SetEnableSpeedLimiter(bool enable) +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnExecutionLoopStart); + this->_settingsPending.enableSpeedLimiter = enable; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnExecutionLoopStart); +} + +float ClientExecutionControl::GetExecutionSpeed() +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnExecutionLoopStart); + const float speedScalar = this->_settingsPending.executionSpeed; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnExecutionLoopStart); + + return speedScalar; +} + +void ClientExecutionControl::SetExecutionSpeed(float speedScalar) +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnExecutionLoopStart); + this->_settingsPending.executionSpeed = speedScalar; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnExecutionLoopStart); +} + +bool ClientExecutionControl::GetEnableFrameSkip() +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnExecutionLoopStart); + const bool enable = this->_settingsPending.enableFrameSkip; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnExecutionLoopStart); + + return enable; +} + +void ClientExecutionControl::SetEnableFrameSkip(bool enable) +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnExecutionLoopStart); + + if (this->_settingsPending.enableFrameSkip != enable) + { + this->_settingsPending.enableFrameSkip = enable; + this->_settingsPending.framesToSkip = 0; + } + + pthread_mutex_unlock(&this->_mutexSettingsPendingOnExecutionLoopStart); +} + +uint8_t ClientExecutionControl::GetFramesToSkip() +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnExecutionLoopStart); + const uint8_t numFramesToSkip = this->_settingsPending.framesToSkip; + pthread_mutex_unlock(&this->_mutexSettingsPendingOnExecutionLoopStart); + + return numFramesToSkip; +} + +uint64_t ClientExecutionControl::GetFrameJumpTarget() +{ + return this->_settingsPending.frameJumpTarget; +} + +void ClientExecutionControl::SetFrameJumpTarget(uint64_t newJumpTarget) +{ + this->_settingsPending.frameJumpTarget = newJumpTarget; +} + +ExecutionBehavior ClientExecutionControl::GetExecutionBehavior() +{ + return this->_settingsPending.execBehavior; +} + +void ClientExecutionControl::SetExecutionBehavior(ExecutionBehavior newBehavior) +{ + this->_settingsPending.execBehavior = newBehavior; +} + +FrameJumpBehavior ClientExecutionControl::GetFrameJumpBehavior() +{ + return this->_settingsPending.jumpBehavior; +} + +void ClientExecutionControl::SetFrameJumpBehavior(FrameJumpBehavior newBehavior) +{ + this->_settingsPending.jumpBehavior = newBehavior; +} + +void ClientExecutionControl::FlushSettingsOnReset() +{ + pthread_mutex_lock(&this->_mutexSettingsPendingOnReset); + + CommonSettings.use_jit = (this->_settingsPending.cpuEngineID == CPUEmulationEngineID_DynamicRecompiler); + CommonSettings.jit_max_block_size = this->_settingsPending.JITMaxBlockSize; + + pthread_mutex_unlock(&this->_mutexSettingsPendingOnReset); +} + +void ClientExecutionControl::FlushSettingsOnExecutionLoopStart() +{ + pthread_mutex_lock(&this->_mutexSettingsApplyOnExecutionLoopStart); + + pthread_mutex_lock(&this->_mutexSettingsPendingOnExecutionLoopStart); + + const bool didFrameSkipSettingChange = (this->_settingsPending.enableFrameSkip != this->_settingsApplied.enableFrameSkip); + if (didFrameSkipSettingChange) + { + this->_settingsApplied.enableFrameSkip = this->_settingsPending.enableFrameSkip; + this->_settingsApplied.framesToSkip = this->_settingsPending.framesToSkip; + } + + const float speedScalar = (this->_settingsPending.executionSpeed > SPEED_SCALAR_MIN) ? this->_settingsPending.executionSpeed : SPEED_SCALAR_MIN; + const bool didExecutionSpeedChange = (speedScalar != this->_settingsApplied.executionSpeed) || (this->_settingsPending.enableSpeedLimiter != this->_settingsApplied.enableSpeedLimiter); + if (didExecutionSpeedChange) + { + this->_settingsApplied.enableSpeedLimiter = this->_settingsPending.enableSpeedLimiter; + this->_settingsApplied.executionSpeed = speedScalar; + } + + pthread_mutex_unlock(&this->_mutexSettingsPendingOnExecutionLoopStart); + + if (didFrameSkipSettingChange) + { + NDS_OmitFrameSkip(2); + } + + if (didExecutionSpeedChange) + { + if (this->_settingsApplied.enableSpeedLimiter) + { + this->_settingsApplied.timeBudget = this->GetFrameAbsoluteTime(1.0f/speedScalar); + } + else + { + this->_settingsApplied.timeBudget = 0; + } + } + + pthread_mutex_unlock(&this->_mutexSettingsApplyOnExecutionLoopStart); +} + +void ClientExecutionControl::FlushSettingsOnNDSExec() +{ + pthread_mutex_lock(&this->_mutexSettingsApplyOnNDSExec); + + pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec); + + this->_settingsApplied.enableAdvancedBusLevelTiming = this->_settingsPending.enableAdvancedBusLevelTiming; + this->_settingsApplied.enableRigorous3DRenderingTiming = this->_settingsPending.enableRigorous3DRenderingTiming; + this->_settingsApplied.enableExternalBIOS = this->_settingsPending.enableExternalBIOS; + this->_settingsApplied.enableBIOSInterrupts = this->_settingsPending.enableBIOSInterrupts; + this->_settingsApplied.enableBIOSPatchDelayLoop = this->_settingsPending.enableBIOSPatchDelayLoop; + this->_settingsApplied.enableExternalFirmware = this->_settingsPending.enableExternalFirmware; + this->_settingsApplied.enableFirmwareBoot = this->_settingsPending.enableFirmwareBoot; + this->_settingsApplied.enableDebugConsole = this->_settingsPending.enableDebugConsole; + this->_settingsApplied.enableEnsataEmulation = this->_settingsPending.enableEnsataEmulation; + + pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec); + + CommonSettings.advanced_timing = this->_settingsApplied.enableAdvancedBusLevelTiming; + CommonSettings.rigorous_timing = this->_settingsApplied.enableRigorous3DRenderingTiming; + CommonSettings.UseExtBIOS = this->_settingsApplied.enableExternalBIOS; + CommonSettings.SWIFromBIOS = this->_settingsApplied.enableBIOSInterrupts; + CommonSettings.PatchSWI3 = this->_settingsApplied.enableBIOSPatchDelayLoop; + CommonSettings.UseExtFirmware = this->_settingsApplied.enableExternalFirmware; + CommonSettings.UseExtFirmwareSettings = this->_settingsApplied.enableExternalFirmware; + CommonSettings.BootFromFirmware = this->_settingsApplied.enableFirmwareBoot; + CommonSettings.DebugConsole = this->_settingsApplied.enableDebugConsole; + CommonSettings.EnsataEmulation = this->_settingsApplied.enableEnsataEmulation; + + pthread_mutex_unlock(&this->_mutexSettingsApplyOnNDSExec); +} + +uint64_t ClientExecutionControl::GetFrameAbsoluteTime(double frameTimeScalar) +{ + // Do nothing. This is implementation dependent; + return 1.0; +} diff --git a/desmume/src/frontend/cocoa/ClientExecutionControl.h b/desmume/src/frontend/cocoa/ClientExecutionControl.h new file mode 100644 index 000000000..dc28225a1 --- /dev/null +++ b/desmume/src/frontend/cocoa/ClientExecutionControl.h @@ -0,0 +1,166 @@ +/* + Copyright (C) 2017 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 . + */ + +#ifndef _CLIENT_EXECUTION_CONTROL_H_ +#define _CLIENT_EXECUTION_CONTROL_H_ + +#include + +#define SPEED_SCALAR_QUARTER 0.25 // Speed scalar for quarter execution speed. +#define SPEED_SCALAR_HALF 0.5 // Speed scalar for half execution speed. +#define SPEED_SCALAR_THREE_QUARTER 0.75 // Speed scalar for three quarters execution speed. +#define SPEED_SCALAR_NORMAL 1.0 // Speed scalar for normal execution speed. +#define SPEED_SCALAR_DOUBLE 2.0 // Speed scalar for double execution speed. +#define SPEED_SCALAR_MIN 0.005 // Lower limit for the speed multiplier. + +#define DS_FRAMES_PER_SECOND 59.8261 // Number of DS frames per second. +#define DS_SECONDS_PER_FRAME (1.0 / DS_FRAMES_PER_SECOND) // The length of time in seconds that, ideally, a frame should be processed within. + +#define FRAME_SKIP_AGGRESSIVENESS 9.0 // Must be a value between 0.0 (inclusive) and positive infinity. + // This value acts as a scalar multiple of the frame skip. +#define FRAME_SKIP_BIAS 0.1 // May be any real number. This value acts as a vector addition to the frame skip. +#define MAX_FRAME_SKIP (DS_FRAMES_PER_SECOND / 2.98) + +enum ExecutionBehavior +{ + ExecutionBehavior_Pause = 0, + ExecutionBehavior_Run, + ExecutionBehavior_FrameAdvance, + ExecutionBehavior_FrameJump +}; + +enum FrameJumpBehavior +{ + FrameJumpBehavior_Forward = 0, + FrameJumpBehavior_ToFrame = 1, + FrameJumpBehavior_NextMarker = 2 +}; + +enum CPUEmulationEngineID +{ + CPUEmulationEngineID_Interpreter = 0, + CPUEmulationEngineID_DynamicRecompiler = 1 +}; + +typedef struct ClientExecutionControlSettings +{ + CPUEmulationEngineID cpuEngineID; + uint8_t JITMaxBlockSize; + + bool enableAdvancedBusLevelTiming; + bool enableRigorous3DRenderingTiming; + bool enableExternalBIOS; + bool enableBIOSInterrupts; + bool enableBIOSPatchDelayLoop; + bool enableExternalFirmware; + bool enableFirmwareBoot; + bool enableDebugConsole; + bool enableEnsataEmulation; + + bool enableSpeedLimiter; + float executionSpeed; + uint64_t timeBudget; + + bool enableFrameSkip; + uint8_t framesToSkip; + uint64_t frameJumpTarget; + + ExecutionBehavior execBehavior; + FrameJumpBehavior jumpBehavior; + +} ClientExecutionControlSettings; + +class ClientExecutionControl +{ +private: + ClientExecutionControlSettings _settingsPending; + ClientExecutionControlSettings _settingsApplied; + + pthread_mutex_t _mutexSettingsPendingOnReset; + pthread_mutex_t _mutexSettingsApplyOnReset; + + pthread_mutex_t _mutexSettingsPendingOnExecutionLoopStart; + pthread_mutex_t _mutexSettingsApplyOnExecutionLoopStart; + + pthread_mutex_t _mutexSettingsPendingOnNDSExec; + pthread_mutex_t _mutexSettingsApplyOnNDSExec; + +public: + ClientExecutionControl(); + ~ClientExecutionControl(); + + CPUEmulationEngineID GetCPUEmulationEngineID(); + void SetCPUEmulationEngineID(CPUEmulationEngineID engineID); + + uint8_t GetJITMaxBlockSize(); + void SetJITMaxBlockSize(uint8_t blockSize); + + bool GetEnableAdvancedBusLevelTiming(); + void SetEnableAdvancedBusLevelTiming(bool enable); + + bool GetEnableRigorous3DRenderingTiming(); + void SetEnableRigorous3DRenderingTiming(bool enable); + + bool GetEnableExternalBIOS(); + void SetEnableExternalBIOS(bool enable); + + bool GetEnableBIOSInterrupts(); + void SetEnableBIOSInterrupts(bool enable); + + bool GetEnableBIOSPatchDelayLoop(); + void SetEnableBIOSPatchDelayLoop(bool enable); + + bool GetEnableExternalFirmware(); + void SetEnableExternalFirmware(bool enable); + + bool GetEnableFirmwareBoot(); + void SetEnableFirmwareBoot(bool enable); + + bool GetEnableDebugConsole(); + void SetEnableDebugConsole(bool enable); + + bool GetEnableEnsataEmulation(); + void SetEnableEnsataEmulation(bool enable); + + bool GetEnableSpeedLimiter(); + void SetEnableSpeedLimiter(bool enable); + + float GetExecutionSpeed(); + void SetExecutionSpeed(float speedScalar); + + bool GetEnableFrameSkip(); + void SetEnableFrameSkip(bool enable); + + uint8_t GetFramesToSkip(); + + uint64_t GetFrameJumpTarget(); + void SetFrameJumpTarget(uint64_t newJumpTarget); + + ExecutionBehavior GetExecutionBehavior(); + void SetExecutionBehavior(ExecutionBehavior newBehavior); + + FrameJumpBehavior GetFrameJumpBehavior(); + void SetFrameJumpBehavior(FrameJumpBehavior newBehavior); + + void FlushSettingsOnReset(); + void FlushSettingsOnExecutionLoopStart(); + void FlushSettingsOnNDSExec(); + + virtual uint64_t GetFrameAbsoluteTime(double frameTimeScalar); +}; + +#endif // _CLIENT_EXECUTION_CONTROL_H_ diff --git a/desmume/src/frontend/cocoa/DeSmuME (Latest).xcodeproj/project.pbxproj b/desmume/src/frontend/cocoa/DeSmuME (Latest).xcodeproj/project.pbxproj index 1ad41a247..c47e358d1 100644 --- a/desmume/src/frontend/cocoa/DeSmuME (Latest).xcodeproj/project.pbxproj +++ b/desmume/src/frontend/cocoa/DeSmuME (Latest).xcodeproj/project.pbxproj @@ -895,6 +895,10 @@ ABB0FBDA1A9FD0260060C55A /* Icon_MicrophoneGray_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB0FBD81A9FD0260060C55A /* Icon_MicrophoneGray_256x256.png */; }; ABB0FBDB1A9FD0260060C55A /* Icon_MicrophoneGray_256x256.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB0FBD81A9FD0260060C55A /* Icon_MicrophoneGray_256x256.png */; }; ABB1C9451F4D6B340004844F /* macosx_10_5_compat.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AB23567216C2F6F400DA782E /* macosx_10_5_compat.cpp */; }; + ABB1C9481F5281AE0004844F /* ClientExecutionControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB1C9461F5281AE0004844F /* ClientExecutionControl.cpp */; }; + ABB1C9491F5281AE0004844F /* ClientExecutionControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB1C9461F5281AE0004844F /* ClientExecutionControl.cpp */; }; + ABB1C94A1F5281AE0004844F /* ClientExecutionControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB1C9461F5281AE0004844F /* ClientExecutionControl.cpp */; }; + ABB1C94B1F5281AE0004844F /* ClientExecutionControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB1C9461F5281AE0004844F /* ClientExecutionControl.cpp */; }; ABB24F6D1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB24F6B1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp */; }; ABB24F6E1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB24F6B1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp */; }; ABB24F6F1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB24F6B1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp */; }; @@ -1564,6 +1568,8 @@ ABB0FBCA1A9EED350060C55A /* Icon_MicrophoneGreen_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneGreen_256x256.png; path = images/Icon_MicrophoneGreen_256x256.png; sourceTree = ""; }; ABB0FBCB1A9EED350060C55A /* Icon_MicrophoneRed_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneRed_256x256.png; path = images/Icon_MicrophoneRed_256x256.png; sourceTree = ""; }; ABB0FBD81A9FD0260060C55A /* Icon_MicrophoneGray_256x256.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_MicrophoneGray_256x256.png; path = images/Icon_MicrophoneGray_256x256.png; sourceTree = ""; }; + ABB1C9461F5281AE0004844F /* ClientExecutionControl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ClientExecutionControl.cpp; sourceTree = ""; }; + ABB1C9471F5281AE0004844F /* ClientExecutionControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClientExecutionControl.h; sourceTree = ""; }; ABB24F6B1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OGLDisplayOutput_3_2.cpp; sourceTree = ""; }; ABB24F6C1A81EE92006C1108 /* OGLDisplayOutput_3_2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OGLDisplayOutput_3_2.h; sourceTree = ""; }; ABB3C63B1501BB8300E0C22E /* DeSmuME_Prefix_OpenEmu.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DeSmuME_Prefix_OpenEmu.pch; sourceTree = ""; }; @@ -1993,6 +1999,7 @@ AB82445A1704AE9A00B8EE20 /* utilities.c */, ABD10AE51715FCDD00B5729D /* audiosamplegenerator.cpp */, ABAD07DA1E19CAA6007867CA /* ClientDisplayView.cpp */, + ABB1C9461F5281AE0004844F /* ClientExecutionControl.cpp */, AB1B9E5F1501A78000464647 /* coreaudiosound.cpp */, AB23567216C2F6F400DA782E /* macosx_10_5_compat.cpp */, ABD10AE61715FCDD00B5729D /* mic_ext.cpp */, @@ -2002,6 +2009,7 @@ ABD104141346652500AF11D1 /* sndOSX.cpp */, ABD10AE31715FCDD00B5729D /* audiosamplegenerator.h */, ABAD07DB1E19CAA6007867CA /* ClientDisplayView.h */, + ABB1C9471F5281AE0004844F /* ClientExecutionControl.h */, ABA6574914511EC90077E5E9 /* cocoa_cheat.h */, ABD103FE1346652500AF11D1 /* cocoa_core.h */, AB58F32B1364F44B0074C376 /* cocoa_file.h */, @@ -3825,6 +3833,7 @@ ABD1FEF51345AC8400AF11D1 /* ROMReader.cpp in Sources */, ABD1FEF61345AC8400AF11D1 /* rtc.cpp in Sources */, ABD1FEF71345AC8400AF11D1 /* saves.cpp in Sources */, + ABB1C94A1F5281AE0004844F /* ClientExecutionControl.cpp in Sources */, ABD1FEF81345AC8400AF11D1 /* slot1.cpp in Sources */, ABD1FF0B1345AC9C00AF11D1 /* slot1_none.cpp in Sources */, ABD1FF0C1345AC9C00AF11D1 /* slot1_r4.cpp in Sources */, @@ -4044,6 +4053,7 @@ AB796D1A15CDCBA200C59155 /* MMU.cpp in Sources */, ABB24F6D1A81EE92006C1108 /* OGLDisplayOutput_3_2.cpp in Sources */, AB796D1B15CDCBA200C59155 /* mmx_optimized.cpp in Sources */, + ABB1C9481F5281AE0004844F /* ClientExecutionControl.cpp in Sources */, AB2ABA3F1C9F9CFA00173B15 /* rsemaphore.c in Sources */, AB796D1C15CDCBA200C59155 /* movie.cpp in Sources */, AB9038B817C5ED2200F410BD /* slot1comp_rom.cpp in Sources */, @@ -4208,6 +4218,7 @@ ABFEA8361BB4EC1100B08C25 /* ftmm.c in Sources */, ABFEA81E1BB4EC1000B08C25 /* ftfstype.c in Sources */, ABA731601BB51E7000B26147 /* pshinter.c in Sources */, + ABB1C9491F5281AE0004844F /* ClientExecutionControl.cpp in Sources */, AB301BE01D9C8BCD00246A93 /* deposterize.cpp in Sources */, ABFEA8211BB4EC1000B08C25 /* ftgasp.c in Sources */, ABFEA83C1BB4EC1100B08C25 /* ftotval.c in Sources */, @@ -4447,6 +4458,7 @@ ABB3C6851501C04F00E0C22E /* bilinear.cpp in Sources */, ABB3C6861501C04F00E0C22E /* epx.cpp in Sources */, ABB3C6871501C04F00E0C22E /* hq2x.cpp in Sources */, + ABB1C94B1F5281AE0004844F /* ClientExecutionControl.cpp in Sources */, ABB3C6881501C04F00E0C22E /* hq4x.cpp in Sources */, ABB3C6891501C04F00E0C22E /* lq2x.cpp in Sources */, ABB3C68A1501C04F00E0C22E /* scanline.cpp in Sources */, diff --git a/desmume/src/frontend/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj b/desmume/src/frontend/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj index 1ef8c5b79..3835c92eb 100644 --- a/desmume/src/frontend/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj +++ b/desmume/src/frontend/cocoa/DeSmuME (XCode 3).xcodeproj/project.pbxproj @@ -1468,6 +1468,11 @@ ABD21B641DE9010B001D2DFA /* features_cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = ABD21B611DE9010B001D2DFA /* features_cpu.c */; }; ABD21B651DE9010B001D2DFA /* features_cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = ABD21B611DE9010B001D2DFA /* features_cpu.c */; }; ABD21B661DE9010B001D2DFA /* features_cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = ABD21B611DE9010B001D2DFA /* features_cpu.c */; }; + ABD4F2731F54A51000D75A1F /* ClientExecutionControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD4F2711F54A51000D75A1F /* ClientExecutionControl.cpp */; }; + ABD4F2741F54A51000D75A1F /* ClientExecutionControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD4F2711F54A51000D75A1F /* ClientExecutionControl.cpp */; }; + ABD4F2751F54A51000D75A1F /* ClientExecutionControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD4F2711F54A51000D75A1F /* ClientExecutionControl.cpp */; }; + ABD4F2761F54A51000D75A1F /* ClientExecutionControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD4F2711F54A51000D75A1F /* ClientExecutionControl.cpp */; }; + ABD4F2771F54A51000D75A1F /* ClientExecutionControl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD4F2711F54A51000D75A1F /* ClientExecutionControl.cpp */; }; ABD597BC187CD95A00069403 /* Image_GuitarGrip.png in Resources */ = {isa = PBXBuildFile; fileRef = ABD597BB187CD95A00069403 /* Image_GuitarGrip.png */; }; ABD597BD187CD95A00069403 /* Image_GuitarGrip.png in Resources */ = {isa = PBXBuildFile; fileRef = ABD597BB187CD95A00069403 /* Image_GuitarGrip.png */; }; ABD597BE187CD95A00069403 /* Image_GuitarGrip.png in Resources */ = {isa = PBXBuildFile; fileRef = ABD597BB187CD95A00069403 /* Image_GuitarGrip.png */; }; @@ -2159,6 +2164,8 @@ ABD21B591DE900D3001D2DFA /* Database.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Database.h; sourceTree = ""; }; ABD21B5A1DE900D3001D2DFA /* Database.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Database.cpp; sourceTree = ""; }; ABD21B611DE9010B001D2DFA /* features_cpu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = features_cpu.c; sourceTree = ""; }; + ABD4F2711F54A51000D75A1F /* ClientExecutionControl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ClientExecutionControl.cpp; sourceTree = ""; }; + ABD4F2721F54A51000D75A1F /* ClientExecutionControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ClientExecutionControl.h; sourceTree = ""; }; ABD597BB187CD95A00069403 /* Image_GuitarGrip.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Image_GuitarGrip.png; path = images/Image_GuitarGrip.png; sourceTree = ""; }; ABD59813187D417900069403 /* Icon_GuitarGrip_Button_Blue_512x512.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_GuitarGrip_Button_Blue_512x512.png; path = images/Icon_GuitarGrip_Button_Blue_512x512.png; sourceTree = ""; }; ABD59814187D417900069403 /* Icon_GuitarGrip_Button_Green_512x512.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; name = Icon_GuitarGrip_Button_Green_512x512.png; path = images/Icon_GuitarGrip_Button_Green_512x512.png; sourceTree = ""; }; @@ -2378,6 +2385,7 @@ AB2F56EF1704C86900E28885 /* utilities.c */, AB2145221714DFF4006DDB0F /* audiosamplegenerator.cpp */, AB0F13911E1B7C320075684F /* ClientDisplayView.cpp */, + ABD4F2711F54A51000D75A1F /* ClientExecutionControl.cpp */, ABD0A5341501AA5A0074A094 /* coreaudiosound.cpp */, ABD9A46413DB99B300777194 /* mic_ext.cpp */, ABECB51318A460910052D52A /* OGLDisplayOutput.cpp */, @@ -2385,6 +2393,7 @@ ABD104141346652500AF11D1 /* sndOSX.cpp */, AB2145211714DFF4006DDB0F /* audiosamplegenerator.h */, AB0F13901E1B7C320075684F /* ClientDisplayView.h */, + ABD4F2721F54A51000D75A1F /* ClientExecutionControl.h */, ABA6574914511EC90077E5E9 /* cocoa_cheat.h */, ABD103FE1346652500AF11D1 /* cocoa_core.h */, AB58F32B1364F44B0074C376 /* cocoa_file.h */, @@ -4571,6 +4580,7 @@ AB0F13931E1B7C320075684F /* ClientDisplayView.cpp in Sources */, AB3E69111E231E9900D4CC75 /* MacOGLDisplayView.mm in Sources */, AB3E69841E25FBBF00D4CC75 /* DisplayViewCALayer.mm in Sources */, + ABD4F2741F54A51000D75A1F /* ClientExecutionControl.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4755,6 +4765,7 @@ AB0F13941E1B7C320075684F /* ClientDisplayView.cpp in Sources */, AB3E69121E231E9900D4CC75 /* MacOGLDisplayView.mm in Sources */, AB3E69851E25FBBF00D4CC75 /* DisplayViewCALayer.mm in Sources */, + ABD4F2751F54A51000D75A1F /* ClientExecutionControl.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -4969,6 +4980,7 @@ AB0F13921E1B7C320075684F /* ClientDisplayView.cpp in Sources */, AB3E69101E231E9900D4CC75 /* MacOGLDisplayView.mm in Sources */, AB3E69831E25FBBF00D4CC75 /* DisplayViewCALayer.mm in Sources */, + ABD4F2731F54A51000D75A1F /* ClientExecutionControl.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5183,6 +5195,7 @@ AB0F13961E1B7C320075684F /* ClientDisplayView.cpp in Sources */, AB3E69141E231E9900D4CC75 /* MacOGLDisplayView.mm in Sources */, AB3E69871E25FBBF00D4CC75 /* DisplayViewCALayer.mm in Sources */, + ABD4F2771F54A51000D75A1F /* ClientExecutionControl.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -5367,6 +5380,7 @@ AB0F13951E1B7C320075684F /* ClientDisplayView.cpp in Sources */, AB3E69131E231E9900D4CC75 /* MacOGLDisplayView.mm in Sources */, AB3E69861E25FBBF00D4CC75 /* DisplayViewCALayer.mm in Sources */, + ABD4F2761F54A51000D75A1F /* ClientExecutionControl.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/desmume/src/frontend/cocoa/cocoa_core.h b/desmume/src/frontend/cocoa/cocoa_core.h index a68d5c2da..6c24c9073 100644 --- a/desmume/src/frontend/cocoa/cocoa_core.h +++ b/desmume/src/frontend/cocoa/cocoa_core.h @@ -21,6 +21,7 @@ #include #include #import "cocoa_util.h" +#include "ClientExecutionControl.h" @class CocoaDSCore; @@ -34,10 +35,10 @@ typedef void *gdbstub_handle_t; typedef struct { CocoaDSCore *cdsCore; - int state; + ExecutionBehavior behavior; bool isFrameSkipEnabled; - NSUInteger frameJumpTarget; - int framesToSkip; + uint64_t frameJumpTarget; + uint8_t framesToSkip; uint64_t timeBudgetMachAbsTime; pthread_mutex_t mutexOutputList; pthread_mutex_t mutexThreadExecute; @@ -72,7 +73,6 @@ typedef struct volatile gdbstub_handle_t gdbStubHandleARM9; volatile gdbstub_handle_t gdbStubHandleARM7; - NSUInteger emulationFlags; BOOL emuFlagAdvancedBusLevelTiming; BOOL emuFlagRigorousTiming; BOOL emuFlagUseExternalBios; @@ -118,7 +118,6 @@ typedef struct @property (assign) NSUInteger gdbStubPortARM9; @property (assign) NSUInteger gdbStubPortARM7; -@property (assign) NSUInteger emulationFlags; @property (assign) BOOL emuFlagAdvancedBusLevelTiming; @property (assign) BOOL emuFlagRigorousTiming; @property (assign) BOOL emuFlagUseGameSpecificHacks; @@ -144,7 +143,6 @@ typedef struct @property (readonly) pthread_rwlock_t *rwlockCoreExecute; - (BOOL) ejectCardFlag; -- (void) setEjectCardFlag; - (void) slot1Eject; - (void) changeRomSaveType:(NSInteger)saveTypeID; @@ -173,5 +171,5 @@ typedef struct @end static void* RunCoreThread(void *arg); -static int CalculateFrameSkip(uint64_t timeBudgetMachAbsTime, uint64_t frameStartMachAbsTime); +static uint8_t CalculateFrameSkip(uint64_t timeBudgetMachAbsTime, uint64_t frameStartMachAbsTime); uint64_t GetFrameAbsoluteTime(const double frameTimeScalar); diff --git a/desmume/src/frontend/cocoa/cocoa_core.mm b/desmume/src/frontend/cocoa/cocoa_core.mm index 65ff00e77..0963e160a 100644 --- a/desmume/src/frontend/cocoa/cocoa_core.mm +++ b/desmume/src/frontend/cocoa/cocoa_core.mm @@ -25,6 +25,8 @@ #import "cocoa_rom.h" #import "cocoa_util.h" +#include "ClientExecutionControl.h" + #include #include @@ -95,17 +97,16 @@ volatile bool execute = true; @synthesize gdbStubPortARM9; @synthesize gdbStubPortARM7; -@dynamic emulationFlags; -@synthesize emuFlagAdvancedBusLevelTiming; -@synthesize emuFlagRigorousTiming; +@dynamic emuFlagAdvancedBusLevelTiming; +@dynamic emuFlagRigorousTiming; @dynamic emuFlagUseGameSpecificHacks; -@synthesize emuFlagUseExternalBios; -@synthesize emuFlagEmulateBiosInterrupts; -@synthesize emuFlagPatchDelayLoop; -@synthesize emuFlagUseExternalFirmware; -@synthesize emuFlagFirmwareBoot; -@synthesize emuFlagDebugConsole; -@synthesize emuFlagEmulateEnsata; +@dynamic emuFlagUseExternalBios; +@dynamic emuFlagEmulateBiosInterrupts; +@dynamic emuFlagPatchDelayLoop; +@dynamic emuFlagUseExternalFirmware; +@dynamic emuFlagFirmwareBoot; +@dynamic emuFlagDebugConsole; +@dynamic emuFlagEmulateEnsata; @dynamic cpuEmulationEngine; @dynamic maxJITBlockSize; @synthesize slot1DeviceType; @@ -153,7 +154,6 @@ volatile bool execute = true; cdsGPU = [[[[CocoaDSGPU alloc] init] autorelease] retain]; cdsOutputList = [[[[NSMutableArray alloc] initWithCapacity:32] autorelease] retain]; - emulationFlags = EMULATION_ADVANCED_BUS_LEVEL_TIMING_MASK; emuFlagAdvancedBusLevelTiming = YES; emuFlagRigorousTiming = NO; emuFlagUseExternalBios = NO; @@ -176,13 +176,13 @@ volatile bool execute = true; isSpeedLimitEnabled = YES; speedScalar = SPEED_SCALAR_NORMAL; - prevCoreState = CORESTATE_PAUSE; + prevCoreState = ExecutionBehavior_Pause; slot1R4URL = nil; _slot1R4Path = ""; threadParam.cdsCore = self; - threadParam.state = CORESTATE_PAUSE; + threadParam.behavior = ExecutionBehavior_Pause; threadParam.isFrameSkipEnabled = true; threadParam.framesToSkip = 0; threadParam.frameJumpTarget = 0; @@ -232,7 +232,7 @@ volatile bool execute = true; - (void)dealloc { - [self setCoreState:CORESTATE_PAUSE]; + [self setCoreState:ExecutionBehavior_Pause]; [self removeAllOutputs]; @@ -475,125 +475,36 @@ volatile bool execute = true; return isInDebugTrap; } -- (void) setEmulationFlags:(NSUInteger)theFlags +- (void) setEmuFlagAdvancedBusLevelTiming:(BOOL)enable { - OSSpinLockLock(&spinlockEmulationFlags); - emulationFlags = theFlags; - OSSpinLockUnlock(&spinlockEmulationFlags); - pthread_rwlock_wrlock(&threadParam.rwlockCoreExecute); - - if (theFlags & EMULATION_ADVANCED_BUS_LEVEL_TIMING_MASK) - { - self.emuFlagAdvancedBusLevelTiming = YES; - CommonSettings.advanced_timing = true; - } - else - { - self.emuFlagAdvancedBusLevelTiming = NO; - CommonSettings.advanced_timing = false; - } - - if (theFlags & EMULATION_RIGOROUS_TIMING_MASK) - { - self.emuFlagRigorousTiming = YES; - CommonSettings.rigorous_timing = true; - } - else - { - self.emuFlagRigorousTiming = NO; - CommonSettings.rigorous_timing = false; - } - - if (theFlags & EMULATION_ENSATA_MASK) - { - self.emuFlagEmulateEnsata = YES; - CommonSettings.EnsataEmulation = true; - } - else - { - self.emuFlagEmulateEnsata = NO; - CommonSettings.EnsataEmulation = false; - } - - if (theFlags & EMULATION_USE_EXTERNAL_BIOS_MASK) - { - self.emuFlagUseExternalBios = YES; - CommonSettings.UseExtBIOS = true; - } - else - { - self.emuFlagUseExternalBios = NO; - CommonSettings.UseExtBIOS = false; - } - - if (theFlags & EMULATION_BIOS_SWI_MASK) - { - self.emuFlagEmulateBiosInterrupts = YES; - CommonSettings.SWIFromBIOS = true; - } - else - { - self.emuFlagEmulateBiosInterrupts = NO; - CommonSettings.SWIFromBIOS = false; - } - - if (theFlags & EMULATION_PATCH_DELAY_LOOP_MASK) - { - self.emuFlagPatchDelayLoop = YES; - CommonSettings.PatchSWI3 = true; - } - else - { - self.emuFlagPatchDelayLoop = NO; - CommonSettings.PatchSWI3 = false; - } - - if (theFlags & EMULATION_USE_EXTERNAL_FIRMWARE_MASK) - { - self.emuFlagUseExternalFirmware = YES; - CommonSettings.UseExtFirmware = true; - CommonSettings.UseExtFirmwareSettings = true; - } - else - { - self.emuFlagUseExternalFirmware = NO; - CommonSettings.UseExtFirmware = false; - CommonSettings.UseExtFirmwareSettings = false; - } - - if (theFlags & EMULATION_BOOT_FROM_FIRMWARE_MASK) - { - self.emuFlagFirmwareBoot = YES; - CommonSettings.BootFromFirmware = true; - } - else - { - self.emuFlagFirmwareBoot = NO; - CommonSettings.BootFromFirmware = false; - } - - if (theFlags & EMULATION_DEBUG_CONSOLE_MASK) - { - self.emuFlagDebugConsole = YES; - CommonSettings.DebugConsole = true; - } - else - { - self.emuFlagDebugConsole = NO; - CommonSettings.DebugConsole = false; - } - + CommonSettings.advanced_timing = (enable) ? true : false; pthread_rwlock_unlock(&threadParam.rwlockCoreExecute); } -- (NSUInteger) emulationFlags +- (BOOL) emuFlagAdvancedBusLevelTiming { - OSSpinLockLock(&spinlockEmulationFlags); - const NSUInteger theFlags = emulationFlags; - OSSpinLockUnlock(&spinlockEmulationFlags); + pthread_rwlock_rdlock(&threadParam.rwlockCoreExecute); + const BOOL enable = (CommonSettings.advanced_timing) ? YES : NO; + pthread_rwlock_unlock(&threadParam.rwlockCoreExecute); - return theFlags; + return enable; +} + +- (void) setEmuFlagRigorousTiming:(BOOL)enable +{ + pthread_rwlock_wrlock(&threadParam.rwlockCoreExecute); + CommonSettings.rigorous_timing = (enable) ? true : false; + pthread_rwlock_unlock(&threadParam.rwlockCoreExecute); +} + +- (BOOL) emuFlagRigorousTiming +{ + pthread_rwlock_rdlock(&threadParam.rwlockCoreExecute); + const BOOL enable = (CommonSettings.rigorous_timing) ? YES : NO; + pthread_rwlock_unlock(&threadParam.rwlockCoreExecute); + + return enable; } - (void) setEmuFlagUseGameSpecificHacks:(BOOL)useTiming @@ -613,13 +524,126 @@ volatile bool execute = true; return useTiming; } +- (void) setEmuFlagUseExternalBios:(BOOL)enable +{ + pthread_rwlock_wrlock(&threadParam.rwlockCoreExecute); + CommonSettings.UseExtBIOS = (enable) ? true : false; + pthread_rwlock_unlock(&threadParam.rwlockCoreExecute); +} + +- (BOOL) emuFlagUseExternalBios +{ + pthread_rwlock_rdlock(&threadParam.rwlockCoreExecute); + const BOOL enable = (CommonSettings.UseExtBIOS) ? YES : NO; + pthread_rwlock_unlock(&threadParam.rwlockCoreExecute); + + return enable; +} + +- (void) setEmuFlagEmulateBiosInterrupts:(BOOL)enable +{ + pthread_rwlock_wrlock(&threadParam.rwlockCoreExecute); + CommonSettings.SWIFromBIOS = (enable) ? true : false; + pthread_rwlock_unlock(&threadParam.rwlockCoreExecute); +} + +- (BOOL) emuFlagEmulateBiosInterrupts +{ + pthread_rwlock_rdlock(&threadParam.rwlockCoreExecute); + const BOOL enable = (CommonSettings.SWIFromBIOS) ? YES : NO; + pthread_rwlock_unlock(&threadParam.rwlockCoreExecute); + + return enable; +} + +- (void) setEmuFlagPatchDelayLoop:(BOOL)enable +{ + pthread_rwlock_wrlock(&threadParam.rwlockCoreExecute); + CommonSettings.PatchSWI3 = (enable) ? true : false; + pthread_rwlock_unlock(&threadParam.rwlockCoreExecute); +} + +- (BOOL) emuFlagPatchDelayLoop +{ + pthread_rwlock_rdlock(&threadParam.rwlockCoreExecute); + const BOOL enable = (CommonSettings.PatchSWI3) ? YES : NO; + pthread_rwlock_unlock(&threadParam.rwlockCoreExecute); + + return enable; +} + +- (void) setEmuFlagUseExternalFirmware:(BOOL)enable +{ + pthread_rwlock_wrlock(&threadParam.rwlockCoreExecute); + CommonSettings.UseExtFirmware = (enable) ? true : false; + CommonSettings.UseExtFirmwareSettings = CommonSettings.UseExtFirmware; + pthread_rwlock_unlock(&threadParam.rwlockCoreExecute); +} + +- (BOOL) emuFlagUseExternalFirmware +{ + pthread_rwlock_rdlock(&threadParam.rwlockCoreExecute); + const BOOL enable = (CommonSettings.UseExtFirmware) ? YES : NO; + pthread_rwlock_unlock(&threadParam.rwlockCoreExecute); + + return enable; +} + +- (void) setEmuFlagFirmwareBoot:(BOOL)enable +{ + pthread_rwlock_wrlock(&threadParam.rwlockCoreExecute); + CommonSettings.BootFromFirmware = (enable) ? true : false; + pthread_rwlock_unlock(&threadParam.rwlockCoreExecute); +} + +- (BOOL) emuFlagFirmwareBoot +{ + pthread_rwlock_rdlock(&threadParam.rwlockCoreExecute); + const BOOL enable = (CommonSettings.BootFromFirmware) ? YES : NO; + pthread_rwlock_unlock(&threadParam.rwlockCoreExecute); + + return enable; +} + +- (void) setEmuFlagDebugConsole:(BOOL)enable +{ + pthread_rwlock_wrlock(&threadParam.rwlockCoreExecute); + CommonSettings.DebugConsole = (enable) ? true : false; + pthread_rwlock_unlock(&threadParam.rwlockCoreExecute); +} + +- (BOOL) emuFlagDebugConsole +{ + pthread_rwlock_rdlock(&threadParam.rwlockCoreExecute); + const BOOL enable = (CommonSettings.DebugConsole) ? YES : NO; + pthread_rwlock_unlock(&threadParam.rwlockCoreExecute); + + return enable; +} + +- (void) setEmuFlagEmulateEnsata:(BOOL)enable +{ + pthread_rwlock_wrlock(&threadParam.rwlockCoreExecute); + CommonSettings.EnsataEmulation = (enable) ? true : false; + pthread_rwlock_unlock(&threadParam.rwlockCoreExecute); +} + +- (BOOL) emuFlagEmulateEnsata +{ + pthread_rwlock_rdlock(&threadParam.rwlockCoreExecute); + const BOOL enable = (CommonSettings.EnsataEmulation) ? YES : NO; + pthread_rwlock_unlock(&threadParam.rwlockCoreExecute); + + return enable; +} + - (void) setCpuEmulationEngine:(NSInteger)engineID { OSSpinLockLock(&spinlockCPUEmulationEngine); #if defined(__i386__) || defined(__x86_64__) cpuEmulationEngine = engineID; #else - cpuEmulationEngine = CPU_EMULATION_ENGINE_INTERPRETER; + cpuEmulationEngine = CPUEmulationEngine_Interpreter; #endif OSSpinLockUnlock(&spinlockCPUEmulationEngine); } @@ -653,18 +677,18 @@ volatile bool execute = true; { pthread_mutex_lock(&threadParam.mutexThreadExecute); - if (threadParam.state == CORESTATE_EXECUTE || threadParam.state == CORESTATE_PAUSE) + if (threadParam.behavior == ExecutionBehavior_Run || threadParam.behavior == ExecutionBehavior_Pause) { - prevCoreState = threadParam.state; + prevCoreState = threadParam.behavior; } - threadParam.state = coreState; + threadParam.behavior = (ExecutionBehavior)coreState; threadParam.framesToSkip = 0; NDS_OmitFrameSkip(2); - switch (coreState) + switch ((ExecutionBehavior)coreState) { - case CORESTATE_PAUSE: + case ExecutionBehavior_Pause: { for (CocoaDSOutput *cdsOutput in cdsOutputList) { @@ -677,7 +701,7 @@ volatile bool execute = true; break; } - case CORESTATE_FRAMEADVANCE: + case ExecutionBehavior_FrameAdvance: { for (CocoaDSOutput *cdsOutput in cdsOutputList) { @@ -690,7 +714,7 @@ volatile bool execute = true; break; } - case CORESTATE_EXECUTE: + case ExecutionBehavior_Run: { for (CocoaDSOutput *cdsOutput in cdsOutputList) { @@ -714,7 +738,7 @@ volatile bool execute = true; break; } - case CORESTATE_FRAMEJUMP: + case ExecutionBehavior_FrameJump: { for (CocoaDSOutput *cdsOutput in cdsOutputList) { @@ -737,14 +761,14 @@ volatile bool execute = true; pthread_cond_signal(&threadParam.condThreadExecute); pthread_mutex_unlock(&threadParam.mutexThreadExecute); - [[self cdsGPU] respondToPauseState:(coreState == CORESTATE_PAUSE)]; - [[self cdsController] setHardwareMicPause:!(coreState == CORESTATE_EXECUTE)]; + [[self cdsGPU] respondToPauseState:(coreState == ExecutionBehavior_Pause)]; + [[self cdsController] setHardwareMicPause:(coreState != ExecutionBehavior_Run)]; } - (NSInteger) coreState { pthread_mutex_lock(&threadParam.mutexThreadExecute); - const NSInteger theState = threadParam.state; + const NSInteger theState = threadParam.behavior; pthread_mutex_unlock(&threadParam.mutexThreadExecute); return theState; @@ -806,26 +830,10 @@ volatile bool execute = true; return &threadParam.rwlockCoreExecute; } -- (void) setEjectCardFlag -{ - if (nds.cardEjected) - { - self.emulationFlags = self.emulationFlags | EMULATION_CARD_EJECT_MASK; - return; - } - - self.emulationFlags = self.emulationFlags & ~EMULATION_CARD_EJECT_MASK; -} - - (BOOL) ejectCardFlag { - [self setEjectCardFlag]; - if (nds.cardEjected) - { - return YES; - } - - return NO; + const BOOL isEjected = (nds.cardEjected) ? YES : NO; + return isEjected; } - (void) slot1Eject @@ -888,7 +896,7 @@ volatile bool execute = true; const NSInteger engineID = [self cpuEmulationEngine]; pthread_mutex_lock(&threadParam.mutexThreadExecute); - CommonSettings.use_jit = (engineID == CPU_EMULATION_ENGINE_DYNAMIC_RECOMPILER); + CommonSettings.use_jit = (engineID == CPUEmulationEngineID_DynamicRecompiler); pthread_mutex_unlock(&threadParam.mutexThreadExecute); } @@ -943,7 +951,7 @@ volatile bool execute = true; - (void) reset { - [self setCoreState:CORESTATE_PAUSE]; + [self setCoreState:ExecutionBehavior_Pause]; [self applyDynaRec]; [self applySlot1Device]; @@ -1006,7 +1014,7 @@ volatile bool execute = true; pthread_mutex_unlock(&threadParam.mutexThreadExecute); - [self setCoreState:CORESTATE_FRAMEJUMP]; + [self setCoreState:ExecutionBehavior_FrameJump]; } - (void) frameJump:(NSUInteger)relativeFrameNum @@ -1051,11 +1059,11 @@ volatile bool execute = true; switch ([self cpuEmulationEngine]) { - case CPU_EMULATION_ENGINE_INTERPRETER: + case CPUEmulationEngineID_Interpreter: theString = @"Interpreter"; break; - case CPU_EMULATION_ENGINE_DYNAMIC_RECOMPILER: + case CPUEmulationEngineID_DynamicRecompiler: theString = @"Dynamic Recompiler"; break; @@ -1166,7 +1174,7 @@ static void* RunCoreThread(void *arg) pthread_mutex_lock(¶m->mutexThreadExecute); timeBudget = param->timeBudgetMachAbsTime; - while (!(param->state != CORESTATE_PAUSE && execute)) + while (!(param->behavior != ExecutionBehavior_Pause && execute)) { pthread_cond_wait(¶m->condThreadExecute, ¶m->mutexThreadExecute); startTime = mach_absolute_time(); @@ -1174,7 +1182,7 @@ static void* RunCoreThread(void *arg) } CocoaDSController *cdsController = [cdsCore cdsController]; - if (param->state != CORESTATE_FRAMEJUMP) + if (param->behavior != ExecutionBehavior_FrameJump) { [cdsController flush]; } @@ -1210,15 +1218,15 @@ static void* RunCoreThread(void *arg) pthread_mutex_lock(¶m->mutexOutputList); - switch (param->state) + switch (param->behavior) { - case CORESTATE_EXECUTE: - case CORESTATE_FRAMEADVANCE: - case CORESTATE_FRAMEJUMP: + case ExecutionBehavior_Run: + case ExecutionBehavior_FrameAdvance: + case ExecutionBehavior_FrameJump: { for (CocoaDSOutput *cdsOutput in cdsOutputList) { - if (![cdsOutput isKindOfClass:[CocoaDSDisplay class]] || param->framesToSkip <= 0) + if (![cdsOutput isKindOfClass:[CocoaDSDisplay class]] || param->framesToSkip == 0) { [cdsOutput doCoreEmuFrame]; } @@ -1232,9 +1240,9 @@ static void* RunCoreThread(void *arg) pthread_mutex_unlock(¶m->mutexOutputList); - switch (param->state) + switch (param->behavior) { - case CORESTATE_EXECUTE: + case ExecutionBehavior_Run: { // Determine the number of frames to skip based on how much time "debt" // we owe on timeBudget. @@ -1253,7 +1261,7 @@ static void* RunCoreThread(void *arg) break; } - case CORESTATE_FRAMEJUMP: + case ExecutionBehavior_FrameJump: { if (param->framesToSkip > 0) { @@ -1262,7 +1270,7 @@ static void* RunCoreThread(void *arg) } else { - param->framesToSkip = (int)((DS_FRAMES_PER_SECOND * 1.0) + 0.85); + param->framesToSkip = (uint8_t)((DS_FRAMES_PER_SECOND * 1.0) + 0.85); } break; } @@ -1273,13 +1281,13 @@ static void* RunCoreThread(void *arg) pthread_mutex_unlock(¶m->mutexThreadExecute); - // If we doing a frame advance, switch back to pause state immediately + // If we're doing a frame advance, switch back to pause state immediately // after we're done with the frame. - if (param->state == CORESTATE_FRAMEADVANCE) + if (param->behavior == ExecutionBehavior_FrameAdvance) { - [cdsCore setCoreState:CORESTATE_PAUSE]; + [cdsCore setCoreState:ExecutionBehavior_Pause]; } - else if (param->state == CORESTATE_FRAMEJUMP) + else if (param->behavior == ExecutionBehavior_FrameJump) { if (frameNum == (param->frameJumpTarget - 1)) { @@ -1302,27 +1310,27 @@ static void* RunCoreThread(void *arg) return NULL; } -static int CalculateFrameSkip(uint64_t timeBudgetMachAbsTime, uint64_t frameStartMachAbsTime) +static uint8_t CalculateFrameSkip(uint64_t timeBudgetMachAbsTime, uint64_t frameStartMachAbsTime) { static const double skipCurve[10] = {0.60, 0.58, 0.55, 0.51, 0.46, 0.40, 0.30, 0.20, 0.10, 0.00}; static const double unskipCurve[10] = {0.75, 0.70, 0.65, 0.60, 0.50, 0.40, 0.30, 0.20, 0.10, 0.00}; static size_t skipStep = 0; static size_t unskipStep = 0; - static int lastSetFrameSkip = 0; + static uint64_t lastSetFrameSkip = 0; // Calculate the time remaining. const uint64_t elapsed = mach_absolute_time() - frameStartMachAbsTime; - int framesToSkip = 0; + uint64_t framesToSkip = 0; if (elapsed > timeBudgetMachAbsTime) { if (timeBudgetMachAbsTime > 0) { - framesToSkip = (int)( (((double)(elapsed - timeBudgetMachAbsTime) * FRAME_SKIP_AGGRESSIVENESS) / (double)timeBudgetMachAbsTime) + FRAME_SKIP_BIAS ); + framesToSkip = (uint64_t)( (((double)(elapsed - timeBudgetMachAbsTime) * FRAME_SKIP_AGGRESSIVENESS) / (double)timeBudgetMachAbsTime) + FRAME_SKIP_BIAS ); if (framesToSkip > lastSetFrameSkip) { - framesToSkip -= (int)((double)(framesToSkip - lastSetFrameSkip) * skipCurve[skipStep]); + framesToSkip -= (uint64_t)((double)(framesToSkip - lastSetFrameSkip) * skipCurve[skipStep]); if (skipStep < 9) { skipStep++; @@ -1330,7 +1338,7 @@ static int CalculateFrameSkip(uint64_t timeBudgetMachAbsTime, uint64_t frameStar } else { - framesToSkip += (int)((double)(lastSetFrameSkip - framesToSkip) * skipCurve[skipStep]); + framesToSkip += (uint64_t)((double)(lastSetFrameSkip - framesToSkip) * skipCurve[skipStep]); if (skipStep > 0) { skipStep--; @@ -1340,14 +1348,14 @@ static int CalculateFrameSkip(uint64_t timeBudgetMachAbsTime, uint64_t frameStar else { static const double frameRate100x = (double)FRAME_SKIP_AGGRESSIVENESS / (double)GetFrameAbsoluteTime(1.0/100.0); - framesToSkip = (int)((double)elapsed * frameRate100x); + framesToSkip = (uint64_t)((double)elapsed * frameRate100x); } unskipStep = 0; } else { - framesToSkip = (int)((double)lastSetFrameSkip * unskipCurve[unskipStep]); + framesToSkip = (uint64_t)((double)lastSetFrameSkip * unskipCurve[unskipStep]); if (unskipStep < 9) { unskipStep++; @@ -1357,7 +1365,7 @@ static int CalculateFrameSkip(uint64_t timeBudgetMachAbsTime, uint64_t frameStar } // Bound the frame skip. - static const int kMaxFrameSkip = (int)MAX_FRAME_SKIP; + static const uint64_t kMaxFrameSkip = (uint64_t)MAX_FRAME_SKIP; if (framesToSkip > kMaxFrameSkip) { framesToSkip = kMaxFrameSkip; @@ -1365,7 +1373,7 @@ static int CalculateFrameSkip(uint64_t timeBudgetMachAbsTime, uint64_t frameStar lastSetFrameSkip = framesToSkip; - return framesToSkip; + return (uint8_t)framesToSkip; } uint64_t GetFrameAbsoluteTime(const double frameTimeScalar) diff --git a/desmume/src/frontend/cocoa/cocoa_globals.h b/desmume/src/frontend/cocoa/cocoa_globals.h index 6cc78f70b..d1e757f4e 100644 --- a/desmume/src/frontend/cocoa/cocoa_globals.h +++ b/desmume/src/frontend/cocoa/cocoa_globals.h @@ -187,21 +187,6 @@ #define WINDOW_STATUS_BAR_HEIGHT 24 // Height of an emulation window status bar in pixels. -#define SPEED_SCALAR_QUARTER 0.25 // Speed scalar for quarter execution speed. -#define SPEED_SCALAR_HALF 0.5 // Speed scalar for half execution speed. -#define SPEED_SCALAR_THREE_QUARTER 0.75 // Speed scalar for three quarters execution speed. -#define SPEED_SCALAR_NORMAL 1.0 // Speed scalar for normal execution speed. -#define SPEED_SCALAR_DOUBLE 2.0 // Speed scalar for double execution speed. -#define SPEED_SCALAR_MIN 0.005 // Lower limit for the speed multiplier. - -#define DS_FRAMES_PER_SECOND 59.8261 // Number of DS frames per second. -#define DS_SECONDS_PER_FRAME (1.0 / DS_FRAMES_PER_SECOND) // The length of time in seconds that, ideally, a frame should be processed within. - -#define FRAME_SKIP_AGGRESSIVENESS 9.0 // Must be a value between 0.0 (inclusive) and positive infinity. - // This value acts as a scalar multiple of the frame skip. -#define FRAME_SKIP_BIAS 0.1 // May be any real number. This value acts as a vector addition to the frame skip. -#define MAX_FRAME_SKIP (DS_FRAMES_PER_SECOND / 3.0) - //#define SPU_SAMPLE_RATE (44100.0 * DS_FRAMES_PER_SECOND / 60.0) // Samples per second #define SPU_SAMPLE_RATE 44100.0 // Samples per second #define SPU_SAMPLE_RESOLUTION 16 // Bits per sample; must be a multiple of 8 @@ -274,42 +259,6 @@ enum ROMSAVETYPE_AUTOMATIC = 0 }; -enum -{ - EMULATION_ENSATA_BIT = 0, - EMULATION_ADVANCED_BUS_LEVEL_TIMING_BIT = 1, - EMULATION_USE_EXTERNAL_BIOS_BIT = 2, - EMULATION_BIOS_SWI_BIT = 3, - EMULATION_PATCH_DELAY_LOOP_BIT = 4, - EMULATION_USE_EXTERNAL_FIRMWARE_BIT = 5, - EMULATION_BOOT_FROM_FIRMWARE_BIT = 6, - EMULATION_SLEEP_BIT = 7, - EMULATION_CARD_EJECT_BIT = 8, - EMULATION_DEBUG_CONSOLE_BIT = 9, - EMULATION_RIGOROUS_TIMING_BIT = 10 -}; - -enum -{ - EMULATION_ENSATA_MASK = 1 << EMULATION_ENSATA_BIT, - EMULATION_ADVANCED_BUS_LEVEL_TIMING_MASK = 1 << EMULATION_ADVANCED_BUS_LEVEL_TIMING_BIT, - EMULATION_USE_EXTERNAL_BIOS_MASK = 1 << EMULATION_USE_EXTERNAL_BIOS_BIT, - EMULATION_BIOS_SWI_MASK = 1 << EMULATION_BIOS_SWI_BIT, - EMULATION_PATCH_DELAY_LOOP_MASK = 1 << EMULATION_PATCH_DELAY_LOOP_BIT, - EMULATION_USE_EXTERNAL_FIRMWARE_MASK = 1 << EMULATION_USE_EXTERNAL_FIRMWARE_BIT, - EMULATION_BOOT_FROM_FIRMWARE_MASK = 1 << EMULATION_BOOT_FROM_FIRMWARE_BIT, - EMULATION_SLEEP_MASK = 1 << EMULATION_SLEEP_BIT, - EMULATION_CARD_EJECT_MASK = 1 << EMULATION_CARD_EJECT_BIT, - EMULATION_DEBUG_CONSOLE_MASK = 1 << EMULATION_DEBUG_CONSOLE_BIT, - EMULATION_RIGOROUS_TIMING_MASK = 1 << EMULATION_RIGOROUS_TIMING_BIT -}; - -enum -{ - CPU_EMULATION_ENGINE_INTERPRETER = 0, - CPU_EMULATION_ENGINE_DYNAMIC_RECOMPILER = 1 -}; - enum { GPUSTATE_MAIN_GPU_BIT = 0, @@ -438,17 +387,6 @@ enum VIDEO_SOURCE_EMULATOR = 1 }; -/* - COCOA DS CORE STATES - */ -enum -{ - CORESTATE_PAUSE = 0, - CORESTATE_EXECUTE, - CORESTATE_FRAMEADVANCE, - CORESTATE_FRAMEJUMP -}; - /* DESMUME 3D RENDERER TYPES */ @@ -472,13 +410,6 @@ enum MICMODE_SINE_WAVE }; -enum -{ - FRAMEJUMP_TYPE_FORWARD = 0, - FRAMEJUMP_TYPE_TOFRAME = 1, - FRAMEJUMP_TYPE_NEXTMARKER = 2 -}; - enum { PADDLE_CONTROL_RELATIVE = 0, diff --git a/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.xib b/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.xib index aae19472c..58a1fdd6b 100644 --- a/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.xib +++ b/desmume/src/frontend/cocoa/translations/English.lproj/MainMenu.xib @@ -3048,7 +3048,7 @@ - + YES @@ -3064,9 +3064,11 @@ {1.7976931348623157e+308, 1.7976931348623157e+308} - + 256 {400, 100} + + {{0, 0}, {1920, 1177}} {1.7976931348623157e+308, 1.7976931348623157e+308} @@ -3074,7 +3076,7 @@ YES - + 268 YES @@ -3093,6 +3095,7 @@ 268 {{175, 50}, {199, 21}} + YES 613417024 @@ -3112,6 +3115,7 @@ 268 {{376, 43}, {96, 32}} + YES 67108864 @@ -3133,6 +3137,7 @@ 268 {{15, 53}, {155, 17}} + YES 68157504 @@ -3151,6 +3156,7 @@ 268 {{15, 14}, {454, 28}} + YES 69206017 @@ -3168,10 +3174,12 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA {{1, 1}, {484, 81}} + {{17, 16}, {486, 97}} + {0, 0} 67108864 @@ -3212,6 +3220,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{148, 14}, {226, 21}} + YES 613417024 @@ -3231,6 +3240,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{376, 7}, {96, 32}} + YES 67108864 @@ -3252,6 +3262,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{15, 17}, {128, 17}} + YES 68157504 @@ -3268,10 +3279,12 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA {{1, 1}, {484, 45}} + {{17, 117}, {486, 61}} + {0, 0} 67108864 @@ -3302,6 +3315,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{63, 12}, {371, 18}} + YES 67108864 @@ -3330,6 +3344,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{114, 33}, {270, 32}} + YES 67108864 @@ -3349,10 +3364,12 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA {{1, 1}, {484, 75}} + {{17, 182}, {486, 91}} + {0, 0} 67108864 @@ -3383,6 +3400,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{16, 40}, {366, 18}} + YES -2080374784 @@ -3406,6 +3424,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{16, 84}, {247, 18}} + YES -2080374784 @@ -3429,6 +3448,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{273, 10}, {196, 26}} + YES -2076180416 @@ -3524,6 +3544,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{15, 16}, {256, 17}} + _NS:4068 YES @@ -3544,6 +3565,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{16, 62}, {216, 18}} + _NS:682 YES @@ -3567,10 +3589,12 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA {{1, 1}, {484, 109}} + {{17, 277}, {486, 125}} + {0, 0} 67108864 @@ -3588,10 +3612,12 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA {520, 422} + + NSView - + 268 YES @@ -3600,6 +3626,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{96, 463}, {97, 17}} + YES 68157504 @@ -3618,6 +3645,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{195, 457}, {265, 26}} + YES -2076180416 @@ -3678,6 +3706,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{462, 457}, {116, 26}} + YES -2076180416 @@ -3821,6 +3850,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA256 {640, 394} + YES NO YES @@ -3829,13 +3859,13 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA256 {640, 17} + - - + + -2147483392 {{584, 0}, {16, 17}} - YES @@ -4026,6 +4056,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA {{1, 17}, {640, 394}} + @@ -4040,6 +4071,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA {{1, 0}, {640, 17}} + @@ -4048,6 +4080,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA-2147483392 {{584, 17}, {15, 102}} + NO _doScroller: @@ -4058,16 +4091,17 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA-2147483392 {{1, 420}, {624, 15}} + NO 1 _doScroller: 0.99843505477308292 - {{-1, 37}, {642, 412}} + 133682 @@ -4083,6 +4117,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA {{197, 12}, {247, 17}} + YES 605028416 @@ -4102,10 +4137,12 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA {640, 495} + + InputPrefsView - + 268 YES @@ -4121,6 +4158,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA {{13, 10}, {463, 396}} + YES @@ -4145,6 +4183,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{72, 43}, {84, 17}} + YES @@ -4164,6 +4203,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{44, 16}, {112, 17}} + YES @@ -4183,6 +4223,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{158, 37}, {126, 26}} + YES @@ -4276,6 +4317,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA {{289, 14}, {72, 22}} + YES @@ -4369,6 +4411,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{63, 69}, {93, 17}} + YES @@ -4388,6 +4431,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{158, 63}, {126, 26}} + YES @@ -4457,6 +4501,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{158, 11}, {126, 26}} + YES @@ -4559,11 +4604,13 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA {{1, 1}, {429, 97}} + {{6, 232}, {431, 113}} + {0, 0} @@ -4595,6 +4642,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{15, 16}, {126, 17}} + YES @@ -4614,6 +4662,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{339, 14}, {72, 22}} + YES -1804599231 @@ -4697,6 +4746,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{144, 10}, {189, 26}} + YES @@ -4720,6 +4770,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{305, 36}, {38, 11}} + YES @@ -4743,6 +4794,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{263, 36}, {38, 11}} + YES @@ -4762,6 +4814,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{220, 36}, {38, 11}} + YES @@ -4781,6 +4834,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{178, 36}, {38, 11}} + YES @@ -4800,6 +4854,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{137, 36}, {38, 11}} + YES @@ -4819,6 +4874,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{181, 82}, {175, 26}} + _NS:791 YES @@ -4909,6 +4965,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{181, 56}, {175, 26}} + _NS:791 YES @@ -4966,6 +5023,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{64, 88}, {115, 17}} + _NS:4068 YES @@ -4986,6 +5044,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{64, 62}, {114, 17}} + _NS:4068 YES @@ -5004,10 +5063,12 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA {{1, 1}, {429, 116}} + {{6, 5}, {431, 132}} + {0, 0} @@ -5039,6 +5100,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{223, 36}, {175, 26}} + _NS:791 YES @@ -5119,6 +5181,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{31, 42}, {190, 17}} + _NS:4068 YES @@ -5139,6 +5202,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{223, 10}, {175, 26}} + _NS:791 YES @@ -5219,6 +5283,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{32, 16}, {190, 17}} + _NS:4068 YES @@ -5237,11 +5302,13 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA {{1, 1}, {429, 71}} + _NS:21 {{6, 141}, {431, 87}} + _NS:18 {0, 0} @@ -5264,6 +5331,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA {{10, 33}, {443, 350}} + Display Views @@ -6056,11 +6124,13 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA {489, 420} + + NSView - + 268 YES @@ -6069,6 +6139,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{163, 329}, {220, 26}} + YES @@ -6128,6 +6199,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{17, 335}, {144, 17}} + YES @@ -6157,6 +6229,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{16, 12}, {153, 18}} + YES @@ -6179,11 +6252,13 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA {{1, 1}, {364, 38}} + {{17, 209}, {366, 54}} + {0, 0} @@ -6215,6 +6290,7 @@ L3d3dy5hZHZhbnNjZW5lLmNvbS9vZmZsaW5lL2RhdGFzL0FEVkFOc0NFbmVfUlRvb2xEUy56aXA268 {{18, 15}, {180, 46}} + YES NO @@ -6465,6 +6541,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{145, 10}, {204, 26}} + YES -2076180416 @@ -6532,11 +6609,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {364, 71}} + {{17, 16}, {366, 87}} + {0, 0} @@ -6568,6 +6647,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{18, 14}, {328, 58}} + YES NO @@ -6827,11 +6907,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {364, 82}} + {{17, 107}, {366, 98}} + {0, 0} @@ -6863,6 +6945,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{40, 13}, {246, 21}} + YES @@ -6886,6 +6969,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{287, 17}, {62, 17}} + YES @@ -6986,6 +7070,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{18, 16}, {16, 16}} + YES @@ -7006,11 +7091,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {364, 44}} + {{17, 267}, {366, 60}} + {0, 0} @@ -7029,11 +7116,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {400, 373} + + NSView - + 268 YES @@ -7049,6 +7138,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{13, 10}, {528, 441}} + YES @@ -7073,6 +7163,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{16, 52}, {198, 18}} + YES @@ -7097,6 +7188,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{16, 32}, {217, 18}} + YES @@ -7121,6 +7213,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{16, 12}, {183, 18}} + _NS:682 YES @@ -7144,11 +7237,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {494, 78}} + {{6, 301}, {496, 94}} + {0, 0} @@ -7180,6 +7275,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{18, 14}, {165, 38}} + YES NO @@ -7427,6 +7523,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{242, 15}, {73, 17}} + YES @@ -7446,6 +7543,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{320, 13}, {50, 22}} + YES @@ -7524,6 +7622,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{371, 10}, {19, 27}} + YES @@ -7542,11 +7641,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {494, 62}} + {{6, 219}, {496, 78}} + {0, 0} @@ -7578,6 +7679,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{95, 14}, {66, 17}} + _NS:526 {251, 750} @@ -7600,6 +7702,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{164, 12}, {176, 26}} + _NS:9 YES @@ -7625,6 +7728,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{343, 14}, {52, 17}} + _NS:526 {251, 750} YES @@ -7698,6 +7802,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{161, 36}, {26, 14}} + _NS:526 {251, 750} @@ -7720,6 +7825,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{239, 36}, {26, 14}} + _NS:526 {251, 750} @@ -7742,6 +7848,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{314, 36}, {31, 14}} + _NS:526 {251, 750} @@ -7762,12 +7869,14 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {494, 60}} + _NS:11 {{6, 139}, {496, 76}} + _NS:9 {0, 0} @@ -7800,6 +7909,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{16, 12}, {462, 18}} + YES @@ -7822,11 +7932,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {494, 38}} + {{6, 81}, {496, 54}} + {0, 0} @@ -7858,6 +7970,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{16, 32}, {146, 18}} + YES @@ -7882,6 +7995,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{16, 12}, {118, 18}} + YES 67108864 @@ -7903,11 +8017,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {494, 58}} + {{6, 3}, {496, 74}} + {0, 0} @@ -7927,6 +8043,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{10, 33}, {508, 395}} + General Settings @@ -9199,6 +9316,8 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {554, 465} + + NSView @@ -14179,7 +14298,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 CheatWindowDelegate - + 256 YES @@ -14188,6 +14307,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 292 {{17, 4}, {294, 14}} + YES 68157504 @@ -14210,6 +14330,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 1292 {{214, 220}, {16, 16}} + 28938 100 @@ -14218,6 +14339,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{133, 369}, {136, 22}} + YES -2076180416 @@ -14274,6 +14396,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{45, 374}, {86, 14}} + YES 68157504 @@ -14292,6 +14415,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{45, 398}, {86, 14}} + YES 68157504 @@ -14310,6 +14434,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{133, 393}, {136, 22}} + YES -2076180416 @@ -14367,6 +14492,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{0, 237}, {328, 134}} + NSView @@ -14374,6 +14500,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{233, 213}, {80, 28}} + YES 67108864 @@ -14395,6 +14522,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{59, 222}, {150, 14}} + YES 68157504 @@ -14414,6 +14542,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{17, 222}, {45, 14}} + YES 68157504 @@ -14442,6 +14571,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 256 {286, 176} + YES NO YES @@ -14450,13 +14580,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 256 {286, 17} + - - + + -2147483392 {{224, 0}, {16, 17}} - YES @@ -14537,6 +14667,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 17}, {286, 176}} + @@ -14551,6 +14682,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 0}, {286, 17}} + @@ -14559,6 +14691,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 -2147483392 {{224, 17}, {15, 102}} + NO _doScroller: @@ -14569,16 +14702,17 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 -2147483392 {{1, 294}, {338, 15}} + NO 1 _doScroller: 0.93888888888888888 - {{20, 20}, {288, 194}} + 133682 @@ -14592,6 +14726,8 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {328, 434} + + NSView @@ -20097,7 +20233,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {1.7976931348623157e+308, 1.7976931348623157e+308} - + 256 YES @@ -20106,6 +20242,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{0, 230}, {32, 32}} + _NS:2530 YES @@ -20133,6 +20270,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{32, 230}, {32, 32}} + _NS:2530 YES @@ -20160,6 +20298,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{64, 230}, {32, 32}} + _NS:2530 YES @@ -20187,6 +20326,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{222, 230}, {32, 32}} + _NS:2530 YES @@ -20214,6 +20354,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{96, 230}, {32, 32}} + _NS:2530 YES @@ -20254,6 +20395,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{176, 53}, {64, 19}} + _NS:817 YES @@ -20333,6 +20475,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{176, 33}, {64, 19}} + _NS:817 YES @@ -20402,6 +20545,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{18, 14}, {150, 58}} + _NS:736 YES NO @@ -20694,11 +20838,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {258, 82}} + _NS:21 {{-3, 124}, {260, 98}} + _NS:18 {0, 0} @@ -20730,6 +20876,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{18, 30}, {222, 16}} + YES -2080112384 @@ -20752,6 +20899,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{219, 45}, {28, 11}} + YES 68157504 @@ -20770,6 +20918,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{52, 45}, {28, 11}} + YES 68157504 @@ -20788,6 +20937,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{94, 45}, {28, 11}} + YES 68157504 @@ -20806,6 +20956,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{136, 45}, {28, 11}} + YES 68157504 @@ -20824,6 +20975,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{178, 45}, {28, 11}} + YES 68157504 @@ -20842,6 +20994,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{150, 62}, {90, 17}} + 100 YES @@ -20864,6 +21017,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{15, 14}, {133, 14}} + YES 68157504 @@ -20882,6 +21036,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{150, 14}, {93, 14}} + YES 68157504 @@ -20900,6 +21055,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{15, 62}, {98, 18}} + YES -2080374784 @@ -20923,6 +21079,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{9, 45}, {28, 11}} + YES 68157504 @@ -20939,11 +21096,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {258, 88}} + _NS:21 {{-3, 16}, {260, 104}} + _NS:18 {0, 0} @@ -20965,6 +21124,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{4, 4}, {45, 14}} + _NS:4068 YES @@ -20985,6 +21145,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{51, 4}, {186, 14}} + _NS:4068 YES @@ -21003,6 +21164,8 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {254, 262} + + _NS:103 {{0, 0}, {1920, 1177}} @@ -22344,7 +22507,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {1.7976931348623157e+308, 1.7976931348623157e+308} - + 256 YES @@ -22363,6 +22526,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{15, 77}, {206, 18}} + YES -2080374784 @@ -22386,6 +22550,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{15, 15}, {109, 14}} + YES 68157504 @@ -22404,6 +22569,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{15, 57}, {115, 18}} + YES -2080374784 @@ -22427,6 +22593,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{15, 37}, {195, 18}} + YES -2080374784 @@ -22450,6 +22617,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{126, 10}, {96, 22}} + _NS:791 YES @@ -22572,10 +22740,12 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {237, 102}} + {{17, 109}, {239, 118}} + {0, 0} 67108864 @@ -22596,6 +22766,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{56, 8}, {162, 19}} + YES -2080374784 @@ -22627,6 +22798,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{18, 14}, {107, 58}} + YES NO 3 @@ -22885,10 +23057,12 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {237, 82}} + {{17, 424}, {239, 98}} + {0, 0} 67108864 @@ -22919,6 +23093,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{15, 52}, {108, 18}} + YES -2080374784 @@ -22942,6 +23117,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{15, 32}, {135, 18}} + YES -2080374784 @@ -22965,6 +23141,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{15, 12}, {82, 18}} + YES -2080374784 @@ -22988,6 +23165,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{32, 148}, {113, 14}} + _NS:526 {251, 750} YES @@ -23009,6 +23187,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{150, 146}, {48, 19}} + _NS:9 YES @@ -23086,6 +23265,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{203, 142}, {19, 27}} + _NS:1592 YES @@ -23105,6 +23285,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{15, 72}, {137, 18}} + YES 67108864 @@ -23128,6 +23309,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{6, 96}, {139, 14}} + YES 68157504 @@ -23146,6 +23328,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{203, 89}, {19, 27}} + YES 67895328 @@ -23165,6 +23348,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{163, 96}, {38, 14}} + _NS:4068 YES @@ -23241,6 +23425,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{41, 122}, {104, 14}} + _NS:4068 YES @@ -23261,6 +23446,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{147, 117}, {75, 22}} + _NS:791 YES @@ -23329,10 +23515,12 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {237, 173}} + {{17, 231}, {239, 189}} + {0, 0} 67108864 @@ -23363,6 +23551,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{16, 32}, {192, 18}} + YES 67108864 @@ -23386,6 +23575,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{16, 12}, {114, 18}} + YES 67108864 @@ -23407,10 +23597,12 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {237, 58}} + {{17, 31}, {239, 74}} + {0, 0} 67108864 @@ -23428,6 +23620,8 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {273, 542} + + {{0, 0}, {1920, 1177}} {1.7976931348623157e+308, 1.7976931348623157e+308} @@ -23445,7 +23639,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {1.7976931348623157e+308, 1.7976931348623157e+308} - + 256 YES @@ -23454,6 +23648,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{17, 46}, {56, 14}} + _NS:526 {251, 750} @@ -23476,6 +23671,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{46, 18}, {162, 19}} + YES -2080374784 @@ -23501,6 +23697,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{76, 43}, {110, 26}} + _NS:9 YES @@ -23526,6 +23723,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{190, 46}, {46, 14}} + _NS:526 {251, 750} YES @@ -23599,6 +23797,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{73, 68}, {26, 11}} + _NS:526 {251, 750} @@ -23621,6 +23820,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{118, 68}, {26, 11}} + _NS:526 {251, 750} @@ -23643,6 +23843,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{163, 68}, {26, 11}} + _NS:526 {251, 750} @@ -23662,6 +23863,8 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {253, 89} + + _NS:21 @@ -23681,7 +23884,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {1.7976931348623157e+308, 1.7976931348623157e+308} - + 256 YES @@ -23702,7 +23905,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{11, 105}, {48, 48}} - _NS:9 {251, 251} @@ -23728,7 +23930,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{60, 111}, {252, 18}} - _NS:9 YES @@ -23749,7 +23950,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{120, 14}, {150, 19}} - _NS:610 YES @@ -23773,7 +23973,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{58, 134}, {150, 14}} - _NS:526 {251, 750} @@ -23806,7 +24005,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{16, 92}, {110, 14}} - _NS:526 {251, 750} @@ -23829,7 +24027,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{16, 75}, {110, 14}} - _NS:526 {251, 750} @@ -23852,7 +24049,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{16, 58}, {110, 14}} - _NS:526 {251, 750} @@ -23875,7 +24071,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{130, 92}, {205, 14}} - _NS:526 {251, 750} @@ -23899,7 +24094,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{130, 75}, {205, 14}} - _NS:526 {251, 750} @@ -23923,7 +24117,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{130, 58}, {205, 14}} - _NS:526 {251, 750} @@ -23947,7 +24140,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{65, 23}, {205, 27}} - _NS:9 YES @@ -23973,7 +24165,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{67, 14}, {26, 11}} - _NS:526 {251, 750} @@ -23996,7 +24187,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{112, 14}, {33, 11}} - _NS:526 {251, 750} @@ -24019,7 +24209,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{156, 14}, {33, 11}} - _NS:526 {251, 750} @@ -24042,7 +24231,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{204, 14}, {33, 11}} - _NS:526 {251, 750} @@ -24065,7 +24253,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{248, 14}, {41, 11}} - _NS:526 {251, 750} @@ -24088,7 +24275,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{25, 33}, {37, 17}} - _NS:526 {251, 750} @@ -24111,7 +24297,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{264, 33}, {72, 17}} - YES @@ -24191,14 +24376,12 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {354, 116}} - _NS:11 {{17, 157}, {356, 132}} - _NS:9 {0, 0} @@ -24221,7 +24404,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{318, 111}, {59, 20}} - _NS:682 YES @@ -24248,8 +24430,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 12 {{11, 94}, {367, 5}} - - _NS:9 {0, 0} @@ -24270,7 +24450,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{17, 32.42578125}, {356, 56}} - _NS:3939 YES @@ -24288,8 +24467,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {390, 309} - - _NS:21 @@ -25695,7 +25872,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 15 2 - {{64, 144}, {330, 768}} + {{64, 394}, {330, 518}} 1685585920 ROM Info RomInfoPanel @@ -25704,7 +25881,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {330, 811} {330, 88} - + 256 YES @@ -25733,6 +25910,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 10 {{0, 40}, {321, 5}} + _NS:2429 {0, 0} @@ -25753,6 +25931,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{8, 27}, {13, 13}} + _NS:4078 YES @@ -25776,6 +25955,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{23, 26}, {206, 14}} + _NS:4068 YES @@ -25796,6 +25976,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{192, 8}, {112, 14}} + YES 70254657 @@ -25815,6 +25996,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{4, 8}, {186, 14}} + YES 68157504 @@ -25831,6 +26013,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{0, -2}, {321, 44}} + _NS:1109 RomInfoPanelSectionView @@ -25844,6 +26027,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 10 {{0, 92}, {322, 5}} + _NS:2429 {0, 0} @@ -25864,6 +26048,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{8, 78}, {13, 13}} + _NS:4078 YES @@ -25887,6 +26072,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{23, 77}, {206, 14}} + _NS:4068 YES @@ -25907,6 +26093,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{192, 9}, {112, 14}} + YES 70254657 @@ -25926,6 +26113,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{4, 9}, {186, 14}} + YES 68157504 @@ -25944,6 +26132,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{192, 25}, {112, 14}} + YES 70254657 @@ -25963,6 +26152,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{4, 25}, {186, 14}} + YES 68157504 @@ -25981,6 +26171,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{192, 41}, {112, 14}} + YES 70254657 @@ -26000,6 +26191,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{4, 41}, {186, 14}} + YES 68157504 @@ -26018,6 +26210,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{192, 57}, {112, 14}} + YES 70254657 @@ -26037,6 +26230,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{4, 57}, {186, 14}} + YES 68157504 @@ -26053,6 +26247,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{0, 42}, {321, 95}} + _NS:1109 RomInfoPanelSectionView @@ -26066,6 +26261,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 10 {{0, 155}, {322, 5}} + _NS:2429 {0, 0} @@ -26086,6 +26282,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{8, 141}, {13, 13}} + _NS:4078 YES @@ -26109,6 +26306,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{23, 140}, {206, 14}} + _NS:4068 YES @@ -26129,6 +26327,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{192, 10}, {112, 14}} + YES 70254657 @@ -26148,6 +26347,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{192, 26}, {112, 14}} + YES 70254657 @@ -26167,6 +26367,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{192, 42}, {112, 14}} + YES 70254657 @@ -26186,6 +26387,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{192, 58}, {112, 14}} + YES 70254657 @@ -26205,6 +26407,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{192, 74}, {112, 14}} + YES 70254657 @@ -26224,6 +26427,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{192, 90}, {112, 14}} + YES 70254657 @@ -26243,6 +26447,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{192, 106}, {112, 14}} + YES 70254657 @@ -26262,6 +26467,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{192, 122}, {112, 14}} + YES 70254657 @@ -26281,6 +26487,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{4, 10}, {186, 14}} + YES 68157504 @@ -26299,6 +26506,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{4, 26}, {186, 14}} + YES 68157504 @@ -26317,6 +26525,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{4, 42}, {186, 14}} + YES 68157504 @@ -26335,6 +26544,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{4, 58}, {186, 14}} + YES 68157504 @@ -26353,6 +26563,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{4, 74}, {186, 14}} + YES 68157504 @@ -26371,6 +26582,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{4, 90}, {186, 14}} + YES 68157504 @@ -26389,6 +26601,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{4, 106}, {186, 14}} + YES 68157504 @@ -26407,6 +26620,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{4, 122}, {186, 14}} + YES 68157504 @@ -26423,6 +26637,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{0, 137}, {321, 158}} + _NS:1109 RomInfoPanelSectionView @@ -26436,6 +26651,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 10 {{0, 91}, {321, 5}} + _NS:2429 {0, 0} @@ -26456,6 +26672,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{8, 77}, {13, 13}} + _NS:4078 YES @@ -26479,6 +26696,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{23, 76}, {206, 14}} + _NS:4068 YES @@ -26499,6 +26717,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{95, 9}, {166, 14}} + YES 70254657 @@ -26518,6 +26737,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{-3, 9}, {96, 14}} + YES 68157504 @@ -26536,6 +26756,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{95, 25}, {166, 14}} + YES 70254657 @@ -26555,6 +26776,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{-3, 25}, {96, 14}} + YES 68157504 @@ -26573,6 +26795,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{95, 57}, {166, 14}} + YES 70254657 @@ -26592,6 +26815,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{-3, 57}, {96, 14}} + YES 68157504 @@ -26610,6 +26834,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{95, 41}, {166, 14}} + YES 70254657 @@ -26629,6 +26854,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{-3, 41}, {96, 14}} + YES 68157504 @@ -26645,6 +26871,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{0, 627}, {321, 94}} + _NS:1109 RomInfoPanelSectionView @@ -26658,6 +26885,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{8, 315}, {13, 13}} + _NS:4078 YES @@ -26681,6 +26909,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{23, 314}, {206, 14}} + _NS:4068 YES @@ -26701,6 +26930,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 10 {{-3, 329}, {321, 5}} + _NS:2429 {0, 0} @@ -26721,6 +26951,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{95, 18}, {214, 42}} + YES 69206017 @@ -26740,6 +26971,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{95, 68}, {214, 42}} + YES 69206017 @@ -26759,6 +26991,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{95, 118}, {214, 42}} + YES 69206017 @@ -26778,6 +27011,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{95, 168}, {214, 42}} + YES 69206017 @@ -26797,6 +27031,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{95, 218}, {214, 42}} + YES 69206017 @@ -26816,6 +27051,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{95, 268}, {214, 42}} + YES 69206017 @@ -26835,6 +27071,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{-3, 18}, {96, 42}} + YES 67108864 @@ -26853,6 +27090,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{-3, 68}, {96, 42}} + YES 67108864 @@ -26871,6 +27109,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{-3, 118}, {96, 42}} + YES 67108864 @@ -26889,6 +27128,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{-3, 168}, {96, 42}} + YES 67108864 @@ -26907,6 +27147,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{-3, 218}, {96, 42}} + YES 67108864 @@ -26925,6 +27166,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{-3, 268}, {96, 42}} + YES 67108864 @@ -26941,6 +27183,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{0, 295}, {321, 332}} + _NS:1109 RomInfoPanelSectionView @@ -26949,6 +27192,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{165, 727}, {152, 42}} + YES 69206017 @@ -26968,6 +27212,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{165, 771}, {152, 14}} + YES 70254657 @@ -26987,6 +27232,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{165, 787}, {152, 14}} + YES 70254657 @@ -27006,6 +27252,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{77, 755}, {86, 14}} + YES 68157504 @@ -27024,6 +27271,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{78, 771}, {86, 14}} + YES 68157504 @@ -27042,6 +27290,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{78, 787}, {86, 14}} + YES 68157504 @@ -27072,6 +27321,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{9, 735}, {64, 64}} + YES 134217728 @@ -27088,11 +27338,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{0, -43}, {319, 810}} + RomInfoContentView {{1, 1}, {330, 767}} + _NS:353 @@ -27104,6 +27356,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 256 {{315, 1}, {16, 767}} + _NS:359 YES NO @@ -27116,6 +27369,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 -2147483392 {{-100, -100}, {295, 15}} + _NS:363 NO 1 @@ -27124,8 +27378,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 0.94551282051282048 - {{-1, -1}, {332, 769}} + {{-1, -251}, {332, 769}} + _NS:351 133202 @@ -27138,7 +27393,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 1 - {330, 768} + {330, 518} + + {{0, 0}, {1920, 1177}} {330, 110} @@ -28571,7 +28828,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 YES - + 268 YES @@ -28580,6 +28837,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 1292 {{364, 339}, {32, 32}} + 28682 100 @@ -28588,6 +28846,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 265 {{396, 343}, {168, 28}} + YES 69206017 @@ -28618,6 +28877,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{364, 341}, {30, 30}} + YES 134217728 @@ -28667,8 +28927,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 public.url - {523, 202} + {538, 202} + @@ -28685,7 +28946,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 - 523 + 538 1 @@ -28727,12 +28988,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 1 6 - {525, 10000000} + {538, 10000000} - {{1, 1}, {523, 202}} + {{1, 1}, {538, 202}} + @@ -28742,8 +29004,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 256 - {{524, 1}, {15, 202}} + {{523, 1}, {16, 202}} + NO _doScroller: @@ -28754,6 +29017,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 -2147483392 {{-100, -100}, {87, 18}} + NO 1 @@ -28764,6 +29028,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{20, 61}, {540, 204}} + 133138 @@ -28778,6 +29043,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 288 {{125, 16}, {438, 28}} + YES 67108864 @@ -28796,6 +29062,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 34 {{12, 50}, {556, 5}} + {0, 0} 67108864 @@ -28815,6 +29082,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 269 {{17, 273}, {546, 28}} + YES 67108864 @@ -28833,6 +29101,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 269 {{17, 309}, {546, 17}} + YES 68157504 @@ -28851,6 +29120,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 10 {{12, 332}, {556, 5}} + {0, 0} 67108864 @@ -28870,6 +29140,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 269 {{17, 489}, {546, 42}} + YES 67108864 @@ -28888,6 +29159,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 269 {{17, 539}, {546, 17}} + YES 68157504 @@ -28906,6 +29178,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 10 {{12, 478}, {556, 5}} + {0, 0} 67108864 @@ -28925,6 +29198,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 269 {{17, 455}, {546, 17}} + YES 68157504 @@ -28943,6 +29217,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 269 {{17, 405}, {546, 42}} + YES 67108864 @@ -28961,6 +29236,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{17, 347}, {84, 17}} + YES 68157504 @@ -28979,6 +29255,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{17, 377}, {84, 17}} + YES 68157504 @@ -28997,6 +29274,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{106, 345}, {250, 22}} + YES -1804599231 @@ -29016,6 +29294,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{106, 375}, {250, 22}} + YES -1804599231 @@ -29035,6 +29314,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 265 {{358, 370}, {209, 32}} + YES 67108864 @@ -29056,6 +29336,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 288 {{14, 12}, {112, 32}} + YES 67108864 @@ -29074,10 +29355,12 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {580, 567} + + NSView - + 268 YES @@ -29086,6 +29369,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 1292 {{363, 339}, {32, 32}} + 28682 100 @@ -29094,6 +29378,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 265 {{396, 343}, {168, 28}} + YES 69206017 @@ -29124,6 +29409,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{364, 341}, {30, 30}} + YES 134217728 @@ -29173,8 +29459,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 public.url - {524, 80} + {539, 80} + @@ -29191,7 +29478,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 - 524 + 539 1 @@ -29233,12 +29520,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 1 6 - {531, 10000000} + {539, 10000000} - {{1, 1}, {524, 80}} + {{1, 1}, {539, 80}} + @@ -29248,8 +29536,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 256 - {{525, 1}, {15, 80}} + {{524, 1}, {16, 80}} + NO _doScroller: @@ -29260,6 +29549,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 -2147483392 {{-100, -100}, {87, 18}} + NO 1 @@ -29270,6 +29560,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{20, 61}, {541, 82}} + 133138 @@ -29315,8 +29606,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 public.url - {523, 80} + {538, 80} + @@ -29333,7 +29625,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 - 523 + 538 1 @@ -29375,12 +29667,13 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 1 6 - {523, 10000000} + {538, 10000000} - {{1, 1}, {523, 80}} + {{1, 1}, {538, 80}} + @@ -29390,8 +29683,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 256 - {{524, 1}, {15, 80}} + {{523, 1}, {16, 80}} + NO _doScroller: @@ -29402,6 +29696,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 -2147483392 {{-100, -100}, {87, 18}} + NO 1 @@ -29412,6 +29707,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{20, 167}, {540, 82}} + 133138 @@ -29426,6 +29722,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 288 {{125, 16}, {438, 28}} + YES 67108864 @@ -29444,6 +29741,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 34 {{12, 50}, {556, 5}} + {0, 0} 67108864 @@ -29463,6 +29761,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 256 {{17, 145}, {206, 14}} + YES 68157504 @@ -29481,6 +29780,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 256 {{17, 251}, {206, 14}} + YES 68157504 @@ -29499,6 +29799,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 269 {{17, 273}, {546, 28}} + YES 67108864 @@ -29517,6 +29818,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 269 {{17, 309}, {546, 17}} + YES 68157504 @@ -29535,6 +29837,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 10 {{12, 332}, {556, 5}} + {0, 0} 67108864 @@ -29554,6 +29857,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 269 {{17, 489}, {546, 42}} + YES 67108864 @@ -29572,6 +29876,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 269 {{17, 539}, {546, 17}} + YES 68157504 @@ -29590,6 +29895,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 10 {{12, 478}, {556, 5}} + {0, 0} 67108864 @@ -29609,6 +29915,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 269 {{17, 455}, {546, 17}} + YES 68157504 @@ -29627,6 +29934,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 269 {{17, 405}, {546, 42}} + YES 67108864 @@ -29645,6 +29953,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{17, 347}, {83, 17}} + YES 68157504 @@ -29663,6 +29972,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{17, 377}, {83, 17}} + YES 68157504 @@ -29681,6 +29991,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{105, 345}, {250, 22}} + YES -1804599231 @@ -29700,6 +30011,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 266 {{105, 375}, {250, 22}} + YES -1804599231 @@ -29719,6 +30031,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 265 {{358, 370}, {209, 32}} + YES 67108864 @@ -29740,6 +30053,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 288 {{14, 12}, {112, 32}} + YES 67108864 @@ -29758,10 +30072,12 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {580, 567} + + NSView - + 268 YES @@ -29770,6 +30086,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{342, 55}, {224, 32}} + YES 67108864 @@ -29791,6 +30108,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{17, 52}, {326, 42}} + YES 67108864 @@ -29809,6 +30127,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{342, 12}, {224, 32}} + YES 67108864 @@ -29830,6 +30149,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 268 {{14, 12}, {112, 32}} + YES 67108864 @@ -29861,6 +30181,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 2322 {538, 443} + @@ -29881,7 +30202,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 1 - 100665601 + 2305 0 @@ -29925,6 +30246,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{1, 1}, {538, 443}} + @@ -29936,6 +30258,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 256 {{523, 1}, {16, 443}} + NO _doScroller: @@ -29947,6 +30270,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 -2147483392 {{-100, -100}, {87, 18}} + NO 1 @@ -29957,6 +30281,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {{20, 102}, {540, 445}} + 133138 @@ -29968,6 +30293,8 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {580, 567} + + NSView @@ -35136,78 +35463,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 6716 - - - changeCoreEmuFlags: - - - - 6723 - - - - changeCoreEmuFlags: - - - - 6724 - - - - changeCoreEmuFlags: - - - - 6725 - - - - changeCoreEmuFlags: - - - - 6726 - - - - changeCoreEmuFlags: - - - - 6727 - - - - changeCoreEmuFlags: - - - - 6728 - - - - changeCoreEmuFlags: - - - - 6729 - - - - changeCoreEmuFlags: - - - - 6730 - - - - changeCoreEmuFlags: - - - - 6731 - openEmuSaveState: @@ -43308,6 +43563,46 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 10385 + + + toolbarItemGeneral + + + + 10392 + + + + toolbarItemInput + + + + 10393 + + + + toolbarItemSound + + + + 10394 + + + + toolbarItemDisplay + + + + 10395 + + + + toolbarItemEmulation + + + + 10396 + @@ -57440,7 +57735,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 - Stylus Settings + Panel (Stylus Settings) 10037 @@ -59331,13 +59626,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 1650.IBPluginDependency 1651.IBPluginDependency 1679.IBPluginDependency - 1679.designableToolbarItemIdentifier 1679.toolbarItem.selectable 1680.IBPluginDependency - 1680.designableToolbarItemIdentifier 1680.toolbarItem.selectable 1681.IBPluginDependency - 1681.designableToolbarItemIdentifier 1681.toolbarItem.selectable 1682.IBPluginDependency 1721.IBPluginDependency @@ -59372,7 +59664,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 2154.IBViewBoundsToFrameTransform 2155.IBPluginDependency 2246.IBPluginDependency - 2246.designableToolbarItemIdentifier 2246.toolbarItem.selectable 2248.IBEditorWindowLastContentRect 2248.IBPersistedLastKnownCanvasPosition @@ -59417,7 +59708,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 2339.IBPersistedLastKnownCanvasPosition 2339.IBPluginDependency 2340.IBPluginDependency - 2340.designableToolbarItemIdentifier 2340.toolbarItem.selectable 2341.IBPluginDependency 2341.IBViewBoundsToFrameTransform @@ -60263,10 +60553,12 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 6234.IBAttributePlaceholdersKey 6234.IBPluginDependency 6238.IBPluginDependency + 627.IBEditorWindowLastContentRect 627.IBPluginDependency 627.IBWindowTemplateEditedContentRect 627.NSWindowTemplate.visibleAtLaunch 628.IBPluginDependency + 629.IBEditorWindowLastContentRect 629.IBPluginDependency 6295.IBPluginDependency 6295.IBWindowTemplateEditedContentRect @@ -60278,6 +60570,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 6296.IBPluginDependency 634.IBPluginDependency 635.IBPluginDependency + 6352.IBEditorWindowLastContentRect 6352.IBPluginDependency 6353.IBPluginDependency 6354.IBPluginDependency @@ -60308,6 +60601,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 6385.IBPluginDependency 6386.IBPluginDependency 6387.IBPluginDependency + 6388.IBEditorWindowLastContentRect 6388.IBPluginDependency 6389.IBPluginDependency 6390.IBPluginDependency @@ -60342,6 +60636,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 6427.IBPluginDependency 6428.IBPluginDependency 6429.IBPluginDependency + 6430.IBEditorWindowLastContentRect 6430.IBPluginDependency 6431.IBPluginDependency 6432.IBPluginDependency @@ -60396,6 +60691,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 6998.IBPluginDependency 6999.IBPluginDependency 7002.IBPluginDependency + 7014.IBEditorWindowLastContentRect 7014.IBPluginDependency 7128.IBPluginDependency 7129.IBPluginDependency @@ -60409,6 +60705,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 7137.IBPluginDependency 7138.IBPluginDependency 7139.IBPluginDependency + 714.IBEditorWindowLastContentRect 714.IBPluginDependency 7140.IBPluginDependency 7141.IBPluginDependency @@ -62252,13 +62549,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - Input com.apple.InterfaceBuilder.CocoaPlugin - General com.apple.InterfaceBuilder.CocoaPlugin - Display com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -62295,7 +62589,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - Sound {{329, 472}, {400, 373}} {668, 408.5} @@ -62377,12 +62670,11 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin - {{600, 233}, {554, 465}} + {{574, 233}, {554, 465}} {686, 460.5} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - Emulation com.apple.InterfaceBuilder.CocoaPlugin @@ -62861,10 +63153,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{329, 161}, {273, 542}} + {{748, 206}, {273, 542}} {193.5, 488.5} com.apple.InterfaceBuilder.CocoaPlugin - {{329, 161}, {273, 542}} + {{748, 206}, {273, 542}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -63154,9 +63446,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{797, 329}, {286, 533}} + {{67, 329}, {286, 533}} com.apple.InterfaceBuilder.CocoaPlugin - {{797, 329}, {286, 533}} + {{67, 329}, {286, 533}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -63446,7 +63738,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{329, 521}, {320, 290}} + {{282, 566}, {320, 290}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -63687,9 +63979,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin - {{329, 361}, {550, 450}} + {{466, 358}, {550, 450}} com.apple.InterfaceBuilder.CocoaPlugin - {{329, 361}, {550, 450}} + {{466, 358}, {550, 450}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -63829,10 +64121,12 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + {{642, 700}, {400, 100}} com.apple.InterfaceBuilder.CocoaPlugin - {{210, 648}, {400, 100}} + {{642, 700}, {400, 100}} com.apple.InterfaceBuilder.CocoaPlugin + {{534, 800}, {616, 0}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin {{42, 506}, {580, 592}} @@ -63844,6 +64138,38 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + {{84, 175}, {580, 567}} + 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 + 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 + 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 + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{549, 289}, {580, 567}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -63878,36 +64204,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 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 - 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 - 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 - 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 - com.apple.InterfaceBuilder.CocoaPlugin + {{105, 152}, {580, 567}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -64005,6 +64302,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + {{42, 293}, {640, 495}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -64018,6 +64316,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin + {{21, 377}, {328, 434}} com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin com.apple.InterfaceBuilder.CocoaPlugin @@ -64852,9 +65151,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 YES - {{329, 88}, {330, 768}} + {{727, 257}, {330, 518}} com.apple.InterfaceBuilder.CocoaPlugin - {{329, 88}, {330, 768}} + {{727, 257}, {330, 518}} @@ -65516,7 +65815,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 - 10391 + 10396 @@ -66390,7 +66689,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 autoholdClear: autoholdSet: changeAudioEngine: - changeCoreEmuFlags: changeCoreSpeed: changeFirmwareSettings: changeHardwareMicGain: @@ -66493,7 +66791,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 id id id - id @@ -66503,7 +66800,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 autoholdClear: autoholdSet: changeAudioEngine: - changeCoreEmuFlags: changeCoreSpeed: changeFirmwareSettings: changeHardwareMicGain: @@ -66567,10 +66863,6 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 changeAudioEngine: id - - changeCoreEmuFlags: - id - changeCoreSpeed: id @@ -67504,6 +67796,11 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 previewView spuSyncMethodMenu toolbar + toolbarItemDisplay + toolbarItemEmulation + toolbarItemGeneral + toolbarItemInput + toolbarItemSound viewDisplay viewEmulation viewGeneral @@ -67525,6 +67822,11 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 DisplayPreviewView NSPopUpButton NSToolbar + NSToolbarItem + NSToolbarItem + NSToolbarItem + NSToolbarItem + NSToolbarItem NSView NSView NSView @@ -67549,6 +67851,11 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 previewView spuSyncMethodMenu toolbar + toolbarItemDisplay + toolbarItemEmulation + toolbarItemGeneral + toolbarItemInput + toolbarItemSound viewDisplay viewEmulation viewGeneral @@ -67606,6 +67913,26 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 toolbar NSToolbar + + toolbarItemDisplay + NSToolbarItem + + + toolbarItemEmulation + NSToolbarItem + + + toolbarItemGeneral + NSToolbarItem + + + toolbarItemInput + NSToolbarItem + + + toolbarItemSound + NSToolbarItem + viewDisplay NSView @@ -69033,7 +69360,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2 {515, 457} {14, 14} {8, 8} - {128, 128} + {512, 512} {11, 11} {10, 3} {32, 32} diff --git a/desmume/src/frontend/cocoa/userinterface/DisplayWindowController.mm b/desmume/src/frontend/cocoa/userinterface/DisplayWindowController.mm index c9c8237da..6b257f7f4 100644 --- a/desmume/src/frontend/cocoa/userinterface/DisplayWindowController.mm +++ b/desmume/src/frontend/cocoa/userinterface/DisplayWindowController.mm @@ -1586,7 +1586,7 @@ static std::unordered_map _screenMap; // enable = NO; } - if ([emuControl executionState] == CORESTATE_PAUSE) + if ([emuControl executionState] == ExecutionBehavior_Pause) { [theItem setLabel:NSSTRING_TITLE_EXECUTE_CONTROL]; [theItem setImage:[emuControl iconExecute]]; @@ -1602,7 +1602,7 @@ static std::unordered_map _screenMap; // if (![emuControl masterExecuteFlag] || [emuControl currentRom] == nil || [emuControl isUserInterfaceBlockingExecution] || - [emuControl executionState] != CORESTATE_PAUSE) + [emuControl executionState] != ExecutionBehavior_Pause) { enable = NO; } diff --git a/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.h b/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.h index 29c2dd00b..742144723 100644 --- a/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.h +++ b/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.h @@ -215,7 +215,6 @@ class AudioSampleBlockGenerator; - (IBAction) setVerticalSyncForNonLayerBackedViews:(id)sender; - (IBAction) changeCoreSpeed:(id)sender; -- (IBAction) changeCoreEmuFlags:(id)sender; - (IBAction) changeFirmwareSettings:(id)sender; - (IBAction) changeHardwareMicGain:(id)sender; - (IBAction) changeHardwareMicMute:(id)sender; diff --git a/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.mm b/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.mm index 40082e879..857bc7301 100644 --- a/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.mm +++ b/desmume/src/frontend/cocoa/userinterface/EmuControllerDelegate.mm @@ -129,7 +129,7 @@ currentSaveStateURL = nil; selectedRomSaveTypeID = ROMSAVETYPE_AUTOMATIC; selectedExportRomSaveID = 0; - frameJumpType = FRAMEJUMP_TYPE_FORWARD; + frameJumpType = FrameJumpBehavior_Forward; frameJumpFramesForward = 60; frameJumpToFrame = 0; @@ -815,30 +815,6 @@ [self setVerticalSyncForNonLayerBackedViews:sender]; } -- (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. @@ -859,7 +835,7 @@ const BOOL muteState = [CocoaDSUtil getIBActionSenderButtonStateBool:sender]; CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; [[cdsCore cdsController] setHardwareMicMute:muteState]; - [[cdsCore cdsController] setHardwareMicPause:([cdsCore coreState] != CORESTATE_EXECUTE)]; + [[cdsCore cdsController] setHardwareMicPause:([cdsCore coreState] != ExecutionBehavior_Run)]; [self updateMicStatusIcon]; } @@ -1426,7 +1402,7 @@ CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - if ([cdsCore coreState] == CORESTATE_PAUSE) + if ([cdsCore coreState] == ExecutionBehavior_Pause) { [self executeCore]; } @@ -1469,12 +1445,12 @@ CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - if (cmdAttr.input.state == INPUT_ATTRIBUTE_STATE_OFF || [cdsCore coreState] != CORESTATE_PAUSE || [self currentRom] == nil) + if (cmdAttr.input.state == INPUT_ATTRIBUTE_STATE_OFF || [cdsCore coreState] != ExecutionBehavior_Pause || [self currentRom] == nil) { return; } - [cdsCore setCoreState:CORESTATE_FRAMEADVANCE]; + [cdsCore setCoreState:ExecutionBehavior_FrameAdvance]; } - (void) cmdFrameJump:(NSValue *)cmdAttrValue @@ -1493,17 +1469,17 @@ switch ([self frameJumpType]) { - case FRAMEJUMP_TYPE_FORWARD: + case FrameJumpBehavior_Forward: jumpFrames = [self frameJumpFramesForward]; [cdsCore frameJump:jumpFrames]; break; - case FRAMEJUMP_TYPE_TOFRAME: + case FrameJumpBehavior_ToFrame: jumpFrames = [self frameJumpToFrame]; [cdsCore frameJumpTo:jumpFrames]; break; - case FRAMEJUMP_TYPE_NEXTMARKER: + case FrameJumpBehavior_NextMarker: // TODO: Support when replay markers are implemented. break; @@ -1964,14 +1940,14 @@ - (void) executeCore { CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - [cdsCore setCoreState:CORESTATE_EXECUTE]; + [cdsCore setCoreState:ExecutionBehavior_Run]; [self updateMicStatusIcon]; } - (void) pauseCore { CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; - [cdsCore setCoreState:CORESTATE_PAUSE]; + [cdsCore setCoreState:ExecutionBehavior_Pause]; [self updateMicStatusIcon]; } @@ -2269,23 +2245,23 @@ if ([(id)theItem isMemberOfClass:[NSMenuItem class]]) { - if ([cdsCore coreState] == CORESTATE_PAUSE) + if ([cdsCore coreState] == ExecutionBehavior_Pause) { [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_EXECUTE_CONTROL]; } - else if ([cdsCore coreState] == CORESTATE_EXECUTE) + else if ([cdsCore coreState] == ExecutionBehavior_Run) { [(NSMenuItem*)theItem setTitle:NSSTRING_TITLE_PAUSE_CONTROL]; } } else if ([(id)theItem isMemberOfClass:[NSToolbarItem class]]) { - if ([cdsCore coreState] == CORESTATE_PAUSE) + if ([cdsCore coreState] == ExecutionBehavior_Pause) { [(NSToolbarItem*)theItem setLabel:NSSTRING_TITLE_EXECUTE_CONTROL]; [(NSToolbarItem*)theItem setImage:iconExecute]; } - else if ([cdsCore coreState] == CORESTATE_EXECUTE) + else if ([cdsCore coreState] == ExecutionBehavior_Run) { [(NSToolbarItem*)theItem setLabel:NSSTRING_TITLE_PAUSE_CONTROL]; [(NSToolbarItem*)theItem setImage:iconPause]; @@ -2294,12 +2270,12 @@ } else if (theAction == @selector(frameAdvance:)) { - if ([cdsCore coreState] != CORESTATE_PAUSE) + if ([cdsCore coreState] != ExecutionBehavior_Pause) { enable = NO; } - if ([cdsCore coreState] != CORESTATE_PAUSE || + if ([cdsCore coreState] != ExecutionBehavior_Pause || ![cdsCore masterExecute] || [self currentRom] == nil || [self isShowingSaveStateDialog]) @@ -2318,8 +2294,8 @@ } else if (theAction == @selector(coreExecute:)) { - if ([cdsCore coreState] == CORESTATE_EXECUTE || - [cdsCore coreState] == CORESTATE_FRAMEADVANCE || + if ([cdsCore coreState] == ExecutionBehavior_Run || + [cdsCore coreState] == ExecutionBehavior_FrameAdvance || ![cdsCore masterExecute] || [self currentRom] == nil || [self isShowingSaveStateDialog]) @@ -2329,7 +2305,7 @@ } else if (theAction == @selector(corePause:)) { - if ([cdsCore coreState] == CORESTATE_PAUSE || + if ([cdsCore coreState] == ExecutionBehavior_Pause || ![cdsCore masterExecute] || [self currentRom] == nil || [self isShowingSaveStateDialog]) diff --git a/desmume/src/frontend/cocoa/userinterface/Slot2WindowDelegate.mm b/desmume/src/frontend/cocoa/userinterface/Slot2WindowDelegate.mm index e9c98fef2..cc33127ba 100644 --- a/desmume/src/frontend/cocoa/userinterface/Slot2WindowDelegate.mm +++ b/desmume/src/frontend/cocoa/userinterface/Slot2WindowDelegate.mm @@ -145,7 +145,7 @@ - (IBAction) showInputPreferences:(id)sender { - [[prefWindowDelegate toolbar] setSelectedItemIdentifier:@"Input"]; + [[prefWindowDelegate toolbar] setSelectedItemIdentifier:[[prefWindowDelegate toolbarItemInput] itemIdentifier]]; [prefWindowDelegate changePrefView:sender]; [[prefWindowDelegate window] makeKeyAndOrderFront:sender]; } diff --git a/desmume/src/frontend/cocoa/userinterface/appDelegate.mm b/desmume/src/frontend/cocoa/userinterface/appDelegate.mm index 7aeb745e7..e50c3d39b 100644 --- a/desmume/src/frontend/cocoa/userinterface/appDelegate.mm +++ b/desmume/src/frontend/cocoa/userinterface/appDelegate.mm @@ -170,7 +170,7 @@ [aboutWindowController setContent:aboutWindowProperties]; // Set the preferences window to the general view by default. - [[prefWindowDelegate toolbar] setSelectedItemIdentifier:@"General"]; + [[prefWindowDelegate toolbar] setSelectedItemIdentifier:[[prefWindowDelegate toolbarItemGeneral] itemIdentifier]]; [prefWindowDelegate changePrefView:self]; // Setup the slot menu items. We set this up manually instead of through Interface @@ -446,59 +446,20 @@ CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content]; // Set the emulation flags. - NSUInteger emuFlags = 0; - - if ([[NSUserDefaults standardUserDefaults] boolForKey:@"Emulation_AdvancedBusLevelTiming"]) - { - emuFlags |= EMULATION_ADVANCED_BUS_LEVEL_TIMING_MASK; - } - - if ([[NSUserDefaults standardUserDefaults] boolForKey:@"Emulation_RigorousTiming"]) - { - emuFlags |= EMULATION_RIGOROUS_TIMING_MASK; - } - - if ([[NSUserDefaults standardUserDefaults] boolForKey:@"Emulation_UseExternalBIOSImages"]) - { - emuFlags |= EMULATION_USE_EXTERNAL_BIOS_MASK; - } - - if ([[NSUserDefaults standardUserDefaults] boolForKey:@"Emulation_BIOSEmulateSWI"]) - { - emuFlags |= EMULATION_BIOS_SWI_MASK; - } - - if ([[NSUserDefaults standardUserDefaults] boolForKey:@"Emulation_BIOSPatchDelayLoopSWI"]) - { - emuFlags |= EMULATION_PATCH_DELAY_LOOP_MASK; - } - - if ([[NSUserDefaults standardUserDefaults] boolForKey:@"Emulation_UseExternalFirmwareImage"]) - { - emuFlags |= EMULATION_USE_EXTERNAL_FIRMWARE_MASK; - } - - if ([[NSUserDefaults standardUserDefaults] boolForKey:@"Emulation_FirmwareBoot"]) - { - emuFlags |= EMULATION_BOOT_FROM_FIRMWARE_MASK; - } - - if ([[NSUserDefaults standardUserDefaults] boolForKey:@"Emulation_EmulateEnsata"]) - { - emuFlags |= EMULATION_ENSATA_MASK; - } - - if ([[NSUserDefaults standardUserDefaults] boolForKey:@"Emulation_UseDebugConsole"]) - { - emuFlags |= EMULATION_DEBUG_CONSOLE_MASK; - } - - [cdsCore setEmulationFlags:emuFlags]; + [cdsCore setEmuFlagAdvancedBusLevelTiming:[[NSUserDefaults standardUserDefaults] boolForKey:@"Emulation_AdvancedBusLevelTiming"]]; + [cdsCore setEmuFlagRigorousTiming:[[NSUserDefaults standardUserDefaults] boolForKey:@"Emulation_RigorousTiming"]]; + [cdsCore setEmuFlagUseExternalBios:[[NSUserDefaults standardUserDefaults] boolForKey:@"Emulation_UseExternalBIOSImages"]]; + [cdsCore setEmuFlagEmulateBiosInterrupts:[[NSUserDefaults standardUserDefaults] boolForKey:@"Emulation_BIOSEmulateSWI"]]; + [cdsCore setEmuFlagPatchDelayLoop:[[NSUserDefaults standardUserDefaults] boolForKey:@"Emulation_BIOSPatchDelayLoopSWI"]]; + [cdsCore setEmuFlagUseExternalFirmware:[[NSUserDefaults standardUserDefaults] boolForKey:@"Emulation_UseExternalFirmwareImage"]]; + [cdsCore setEmuFlagFirmwareBoot:[[NSUserDefaults standardUserDefaults] boolForKey:@"Emulation_FirmwareBoot"]]; + [cdsCore setEmuFlagEmulateEnsata:[[NSUserDefaults standardUserDefaults] boolForKey:@"Emulation_EmulateEnsata"]]; + [cdsCore setEmuFlagDebugConsole:[[NSUserDefaults standardUserDefaults] boolForKey:@"Emulation_UseDebugConsole"]]; // If we're not running on Intel, force the CPU emulation engine to use the interpreter engine. if (!isAppRunningOnIntel) { - [[NSUserDefaults standardUserDefaults] setInteger:CPU_EMULATION_ENGINE_INTERPRETER forKey:@"Emulation_CPUEmulationEngine"]; + [[NSUserDefaults standardUserDefaults] setInteger:CPUEmulationEngineID_Interpreter forKey:@"Emulation_CPUEmulationEngine"]; } // Set the CPU emulation engine per user preferences. diff --git a/desmume/src/frontend/cocoa/userinterface/preferencesWindowDelegate.h b/desmume/src/frontend/cocoa/userinterface/preferencesWindowDelegate.h index a45bc6f3b..9efbcad36 100644 --- a/desmume/src/frontend/cocoa/userinterface/preferencesWindowDelegate.h +++ b/desmume/src/frontend/cocoa/userinterface/preferencesWindowDelegate.h @@ -57,6 +57,12 @@ class OGLImage; NSObjectController *cheatWindowController; NSArrayController *cheatDatabaseController; + NSToolbarItem *toolbarItemGeneral; + NSToolbarItem *toolbarItemInput; + NSToolbarItem *toolbarItemDisplay; + NSToolbarItem *toolbarItemSound; + NSToolbarItem *toolbarItemEmulation; + NSView *viewGeneral; InputPrefsView *viewInput; NSView *viewDisplay; @@ -88,6 +94,11 @@ class OGLImage; @property (readonly) IBOutlet NSObjectController *prefWindowController; @property (readonly) IBOutlet NSObjectController *cheatWindowController; @property (readonly) IBOutlet NSArrayController *cheatDatabaseController; +@property (readonly) IBOutlet NSToolbarItem *toolbarItemGeneral; +@property (readonly) IBOutlet NSToolbarItem *toolbarItemInput; +@property (readonly) IBOutlet NSToolbarItem *toolbarItemDisplay; +@property (readonly) IBOutlet NSToolbarItem *toolbarItemSound; +@property (readonly) IBOutlet NSToolbarItem *toolbarItemEmulation; @property (readonly) IBOutlet NSView *viewGeneral; @property (readonly) IBOutlet InputPrefsView *viewInput; @property (readonly) IBOutlet NSView *viewDisplay; diff --git a/desmume/src/frontend/cocoa/userinterface/preferencesWindowDelegate.mm b/desmume/src/frontend/cocoa/userinterface/preferencesWindowDelegate.mm index 03442e728..5e86118f1 100644 --- a/desmume/src/frontend/cocoa/userinterface/preferencesWindowDelegate.mm +++ b/desmume/src/frontend/cocoa/userinterface/preferencesWindowDelegate.mm @@ -286,6 +286,12 @@ @synthesize cheatWindowController; @synthesize cheatDatabaseController; +@synthesize toolbarItemGeneral; +@synthesize toolbarItemInput; +@synthesize toolbarItemDisplay; +@synthesize toolbarItemSound; +@synthesize toolbarItemEmulation; + @synthesize viewGeneral; @synthesize viewInput; @synthesize viewDisplay; @@ -347,11 +353,11 @@ { // Associates NSView objects to their respective toolbar identifiers. prefViewDict = [[NSDictionary alloc] initWithObjectsAndKeys: - viewGeneral, @"General", - viewInput, @"Input", - viewDisplay, @"Display", - viewSound, @"Sound", - viewEmulation, @"Emulation", + viewGeneral, [toolbarItemGeneral itemIdentifier], + viewInput, [toolbarItemInput itemIdentifier], + viewDisplay, [toolbarItemDisplay itemIdentifier], + viewSound, [toolbarItemSound itemIdentifier], + viewEmulation, [toolbarItemEmulation itemIdentifier], nil]; } @@ -361,7 +367,7 @@ { [self switchContentView:theView]; - if ([toolbarItemIdentifier isEqualToString:@"Input"]) + if ([toolbarItemIdentifier isEqualToString:[toolbarItemDisplay itemIdentifier]]) { [window makeFirstResponder:theView]; } diff --git a/desmume/src/frontend/cocoa/userinterface/troubleshootingWindowDelegate.mm b/desmume/src/frontend/cocoa/userinterface/troubleshootingWindowDelegate.mm index cb6da0a63..003476f2d 100644 --- a/desmume/src/frontend/cocoa/userinterface/troubleshootingWindowDelegate.mm +++ b/desmume/src/frontend/cocoa/userinterface/troubleshootingWindowDelegate.mm @@ -113,7 +113,7 @@ finalFormTextStr = [[finalFormTextStr stringByAppendingString:@"\nSLOT-2 Device Type: "] stringByAppendingString:[cdsCore slot2DeviceTypeString]]; finalFormTextStr = [[finalFormTextStr stringByAppendingString:@"\nAdvanced Bus-Level Timing: "] stringByAppendingString:([cdsCore emuFlagAdvancedBusLevelTiming] ? @"YES" : @"NO")]; finalFormTextStr = [[finalFormTextStr stringByAppendingString:@"\nRigorous 3D Rendering Timing: "] stringByAppendingString:([cdsCore emuFlagRigorousTiming] ? @"YES" : @"NO")]; - finalFormTextStr = [[finalFormTextStr stringByAppendingString:@"\nCPU Emulation Engine: "] stringByAppendingString:([cdsCore cpuEmulationEngine] == CPU_EMULATION_ENGINE_DYNAMIC_RECOMPILER ? [NSString stringWithFormat:@"%@ (BlockSize=%li)", [cdsCore cpuEmulationEngineString], (long)[cdsCore maxJITBlockSize]] : [cdsCore cpuEmulationEngineString])]; + finalFormTextStr = [[finalFormTextStr stringByAppendingString:@"\nCPU Emulation Engine: "] stringByAppendingString:([cdsCore cpuEmulationEngine] == CPUEmulationEngineID_DynamicRecompiler ? [NSString stringWithFormat:@"%@ (BlockSize=%li)", [cdsCore cpuEmulationEngineString], (long)[cdsCore maxJITBlockSize]] : [cdsCore cpuEmulationEngineString])]; finalFormTextStr = [[finalFormTextStr stringByAppendingString:@"\nExternal BIOS: "] stringByAppendingString:([cdsCore emuFlagUseExternalBios] ? @"YES" : @"NO")]; finalFormTextStr = [[finalFormTextStr stringByAppendingString:@"\nExternal Firmware: "] stringByAppendingString:([cdsCore emuFlagUseExternalFirmware] ? @"YES" : @"NO")]; finalFormTextStr = [[finalFormTextStr stringByAppendingString:@"\nGPU - Scaling Factor: "] stringByAppendingString:[NSString stringWithFormat:@"%ldx", (unsigned long)[[cdsCore cdsGPU] gpuScale]]];