Cocoa Port: Give user feedback for when the emulation gets halted internally.
- Also be more consistent when recovering from an internal emulation halt. - Also apply enabling the external BIOS, external firmware and firmware boot settings at load/reset time instead of at frame time.
This commit is contained in:
parent
1c59441697
commit
830dd0d78c
|
@ -1490,7 +1490,7 @@ void FASTCALL MMU_writeToSPIData(u16 val)
|
|||
{
|
||||
printf("SYSTEM POWERED OFF VIA ARM7 SPI POWER DEVICE\n");
|
||||
printf("Did your main() return?\n");
|
||||
emu_halt();
|
||||
emu_halt(EMUHALT_REASON_SYSTEM_POWERED_OFF, NDSErrorTag_None);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -84,6 +84,7 @@ std::string InputDisplayString;
|
|||
|
||||
static BOOL LidClosed = FALSE;
|
||||
static u8 countLid = 0;
|
||||
static NDSError _lastNDSError;
|
||||
|
||||
GameInfo gameInfo;
|
||||
NDSSystem nds;
|
||||
|
@ -2663,6 +2664,10 @@ void NDS_Reset()
|
|||
|
||||
//this needs to happen last, pretty much, since it establishes the correct scheduling state based on all of the above initialization
|
||||
initSchedule();
|
||||
|
||||
_lastNDSError.code = NDSError_NoError;
|
||||
_lastNDSError.tag = NDSErrorTag_None;
|
||||
NDS_CurrentCPUInfoToNDSError(_lastNDSError);
|
||||
}
|
||||
|
||||
static std::string MakeInputDisplayString(u16 pad, const std::string* Buttons, int count) {
|
||||
|
@ -3019,12 +3024,59 @@ void NDS_swapScreen()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
void emu_halt()
|
||||
NDSError NDS_GetLastError()
|
||||
{
|
||||
//printf("halting emu: ARM9 PC=%08X/%08X, ARM7 PC=%08X/%08X\n", NDS_ARM9.R[15], NDS_ARM9.instruct_adr, NDS_ARM7.R[15], NDS_ARM7.instruct_adr);
|
||||
execute = false;
|
||||
return _lastNDSError;
|
||||
}
|
||||
|
||||
static void NDS_CurrentCPUInfoToNDSError(NDSError &ndsError)
|
||||
{
|
||||
ndsError.programCounterARM9 = NDS_ARM9.R[15];
|
||||
ndsError.instructionARM9 = NDS_ARM9.instruction;
|
||||
ndsError.instructionAddrARM9 = NDS_ARM9.instruct_adr;
|
||||
ndsError.programCounterARM7 = NDS_ARM7.R[15];
|
||||
ndsError.instructionARM7 = NDS_ARM7.instruction;
|
||||
ndsError.instructionAddrARM7 = NDS_ARM7.instruct_adr;
|
||||
}
|
||||
|
||||
void emu_halt(EmuHaltReasonCode reasonCode, NDSErrorTag errorTag)
|
||||
{
|
||||
switch (reasonCode)
|
||||
{
|
||||
case EMUHALT_REASON_USER_REQUESTED_HALT:
|
||||
_lastNDSError.code = NDSError_NoError;
|
||||
_lastNDSError.tag = NDSErrorTag_None;
|
||||
break;
|
||||
|
||||
case EMUHALT_REASON_SYSTEM_POWERED_OFF:
|
||||
_lastNDSError.code = NDSError_SystemPoweredOff;
|
||||
_lastNDSError.tag = NDSErrorTag_None;
|
||||
break;
|
||||
|
||||
case EMUHALT_REASON_JIT_UNMAPPED_ADDRESS_EXCEPTION:
|
||||
_lastNDSError.code = NDSError_JITUnmappedAddressException;
|
||||
_lastNDSError.tag = errorTag;
|
||||
break;
|
||||
|
||||
case EMUHALT_REASON_ARM_RESERVED_0X14_EXCEPTION:
|
||||
case EMUHALT_REASON_ARM_UNDEFINED_INSTRUCTION_EXCEPTION:
|
||||
_lastNDSError.code = NDSError_ARMUndefinedInstructionException;
|
||||
_lastNDSError.tag = errorTag;
|
||||
break;
|
||||
|
||||
case EMUHALT_REASON_UNKNOWN:
|
||||
default:
|
||||
_lastNDSError.code = NDSError_UnknownError;
|
||||
_lastNDSError.tag = errorTag;
|
||||
break;
|
||||
}
|
||||
|
||||
NDS_CurrentCPUInfoToNDSError(_lastNDSError);
|
||||
|
||||
GPU->ForceFrameStop();
|
||||
execute = false;
|
||||
|
||||
//printf("halting emu: ARM9 PC=%08X/%08X, ARM7 PC=%08X/%08X\n", NDS_ARM9.R[15], NDS_ARM9.instruct_adr, NDS_ARM7.R[15], NDS_ARM7.instruct_adr);
|
||||
|
||||
#ifdef LOG_ARM9
|
||||
if (fp_dis9)
|
||||
|
|
|
@ -82,6 +82,52 @@ enum
|
|||
ROM_DSGBA
|
||||
};
|
||||
|
||||
enum EmuHaltReasonCode
|
||||
{
|
||||
EMUHALT_REASON_USER_REQUESTED_HALT = 0,
|
||||
|
||||
EMUHALT_REASON_SYSTEM_POWERED_OFF = 1000,
|
||||
|
||||
EMUHALT_REASON_JIT_UNMAPPED_ADDRESS_EXCEPTION = 2000,
|
||||
EMUHALT_REASON_ARM_RESERVED_0X14_EXCEPTION,
|
||||
EMUHALT_REASON_ARM_UNDEFINED_INSTRUCTION_EXCEPTION,
|
||||
|
||||
EMUHALT_REASON_UNKNOWN = 10000
|
||||
};
|
||||
|
||||
enum NDSErrorCode
|
||||
{
|
||||
NDSError_NoError = 0,
|
||||
|
||||
NDSError_SystemPoweredOff = 1000,
|
||||
|
||||
NDSError_JITUnmappedAddressException = 2000,
|
||||
NDSError_ARMUndefinedInstructionException,
|
||||
|
||||
NDSError_UnknownError = 10000
|
||||
};
|
||||
|
||||
enum NDSErrorTag
|
||||
{
|
||||
NDSErrorTag_None = 0,
|
||||
NDSErrorTag_ARM9 = 1,
|
||||
NDSErrorTag_ARM7 = 2,
|
||||
NDSErrorTag_BothCPUs = 3,
|
||||
};
|
||||
|
||||
struct NDSError
|
||||
{
|
||||
NDSErrorCode code;
|
||||
NDSErrorTag tag;
|
||||
u32 programCounterARM9;
|
||||
u32 instructionARM9;
|
||||
u32 instructionAddrARM9;
|
||||
u32 programCounterARM7;
|
||||
u32 instructionARM7;
|
||||
u32 instructionAddrARM7;
|
||||
};
|
||||
typedef struct NDSError NDSError;
|
||||
|
||||
//#define LOG_ARM9
|
||||
//#define LOG_ARM7
|
||||
|
||||
|
@ -143,7 +189,9 @@ struct NDS_header
|
|||
#include "PACKED_END.h"
|
||||
|
||||
extern void debug();
|
||||
void emu_halt();
|
||||
NDSError NDS_GetLastError();
|
||||
static void NDS_CurrentCPUInfoToNDSError(NDSError &ndsError);
|
||||
void emu_halt(EmuHaltReasonCode reasonCode, NDSErrorTag errorTag);
|
||||
|
||||
extern u64 nds_timer;
|
||||
void NDS_Reschedule();
|
||||
|
|
|
@ -498,7 +498,7 @@ void armcpu_exception(armcpu_t *cpu, u32 number)
|
|||
case EXCEPTION_SWI: cpumode = SVC; break;
|
||||
case EXCEPTION_PREFETCH_ABORT: cpumode = ABT; break;
|
||||
case EXCEPTION_DATA_ABORT: cpumode = ABT; break;
|
||||
case EXCEPTION_RESERVED_0x14: emu_halt(); break;
|
||||
case EXCEPTION_RESERVED_0x14: emu_halt(EMUHALT_REASON_ARM_RESERVED_0X14_EXCEPTION, (cpu->proc_ID == ARMCPU_ARM9) ? NDSErrorTag_ARM9 : NDSErrorTag_ARM7); break;
|
||||
case EXCEPTION_IRQ: cpumode = IRQ; break;
|
||||
case EXCEPTION_FAST_IRQ: cpumode = FIQ; break;
|
||||
}
|
||||
|
@ -576,7 +576,7 @@ u32 TRAPUNDEF(armcpu_t* cpu)
|
|||
}
|
||||
else
|
||||
{
|
||||
emu_halt();
|
||||
emu_halt(EMUHALT_REASON_ARM_UNDEFINED_INSTRUCTION_EXCEPTION, (cpu->proc_ID == ARMCPU_ARM9) ? NDSErrorTag_ARM9 : NDSErrorTag_ARM7);
|
||||
return 4;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -379,20 +379,20 @@ void ClientExecutionControl::SetEnableGameSpecificHacks(bool enable)
|
|||
|
||||
bool ClientExecutionControl::GetEnableExternalBIOS()
|
||||
{
|
||||
pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec);
|
||||
pthread_mutex_lock(&this->_mutexSettingsPendingOnReset);
|
||||
const bool enable = this->_settingsPending.enableExternalBIOS;
|
||||
pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec);
|
||||
pthread_mutex_unlock(&this->_mutexSettingsPendingOnReset);
|
||||
|
||||
return enable;
|
||||
}
|
||||
|
||||
void ClientExecutionControl::SetEnableExternalBIOS(bool enable)
|
||||
{
|
||||
pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec);
|
||||
pthread_mutex_lock(&this->_mutexSettingsPendingOnReset);
|
||||
this->_settingsPending.enableExternalBIOS = enable;
|
||||
|
||||
this->_newSettingsPendingOnNDSExec = true;
|
||||
pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec);
|
||||
this->_newSettingsPendingOnReset = true;
|
||||
pthread_mutex_unlock(&this->_mutexSettingsPendingOnReset);
|
||||
}
|
||||
|
||||
bool ClientExecutionControl::GetEnableBIOSInterrupts()
|
||||
|
@ -433,38 +433,38 @@ void ClientExecutionControl::SetEnableBIOSPatchDelayLoop(bool enable)
|
|||
|
||||
bool ClientExecutionControl::GetEnableExternalFirmware()
|
||||
{
|
||||
pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec);
|
||||
pthread_mutex_lock(&this->_mutexSettingsPendingOnReset);
|
||||
const bool enable = this->_settingsPending.enableExternalFirmware;
|
||||
pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec);
|
||||
pthread_mutex_unlock(&this->_mutexSettingsPendingOnReset);
|
||||
|
||||
return enable;
|
||||
}
|
||||
|
||||
void ClientExecutionControl::SetEnableExternalFirmware(bool enable)
|
||||
{
|
||||
pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec);
|
||||
pthread_mutex_lock(&this->_mutexSettingsPendingOnReset);
|
||||
this->_settingsPending.enableExternalFirmware = enable;
|
||||
|
||||
this->_newSettingsPendingOnNDSExec = true;
|
||||
pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec);
|
||||
this->_newSettingsPendingOnReset = true;
|
||||
pthread_mutex_unlock(&this->_mutexSettingsPendingOnReset);
|
||||
}
|
||||
|
||||
bool ClientExecutionControl::GetEnableFirmwareBoot()
|
||||
{
|
||||
pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec);
|
||||
pthread_mutex_lock(&this->_mutexSettingsPendingOnReset);
|
||||
const bool enable = this->_settingsPending.enableFirmwareBoot;
|
||||
pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec);
|
||||
pthread_mutex_unlock(&this->_mutexSettingsPendingOnReset);
|
||||
|
||||
return enable;
|
||||
}
|
||||
|
||||
void ClientExecutionControl::SetEnableFirmwareBoot(bool enable)
|
||||
{
|
||||
pthread_mutex_lock(&this->_mutexSettingsPendingOnNDSExec);
|
||||
pthread_mutex_lock(&this->_mutexSettingsPendingOnReset);
|
||||
this->_settingsPending.enableFirmwareBoot = enable;
|
||||
|
||||
this->_newSettingsPendingOnNDSExec = true;
|
||||
pthread_mutex_unlock(&this->_mutexSettingsPendingOnNDSExec);
|
||||
this->_newSettingsPendingOnReset = true;
|
||||
pthread_mutex_unlock(&this->_mutexSettingsPendingOnReset);
|
||||
}
|
||||
|
||||
bool ClientExecutionControl::GetEnableDebugConsole()
|
||||
|
@ -710,6 +710,10 @@ void ClientExecutionControl::ApplySettingsOnReset()
|
|||
this->_settingsApplied.filePathFirmware = this->_settingsPending.filePathFirmware;
|
||||
this->_settingsApplied.filePathSlot1R4 = this->_settingsPending.filePathSlot1R4;
|
||||
|
||||
this->_settingsApplied.enableExternalBIOS = this->_settingsPending.enableExternalBIOS;
|
||||
this->_settingsApplied.enableExternalFirmware = this->_settingsPending.enableExternalFirmware;
|
||||
this->_settingsApplied.enableFirmwareBoot = this->_settingsPending.enableFirmwareBoot;
|
||||
|
||||
this->_settingsApplied.cpuEmulationEngineName = this->_settingsPending.cpuEmulationEngineName;
|
||||
this->_settingsApplied.slot1DeviceName = this->_settingsPending.slot1DeviceName;
|
||||
this->_ndsFrameInfo.cpuEmulationEngineName = this->_settingsApplied.cpuEmulationEngineName;
|
||||
|
@ -726,6 +730,10 @@ void ClientExecutionControl::ApplySettingsOnReset()
|
|||
|
||||
CommonSettings.use_jit = (this->_settingsApplied.cpuEngineID == CPUEmulationEngineID_DynamicRecompiler);
|
||||
CommonSettings.jit_max_block_size = this->_settingsApplied.JITMaxBlockSize;
|
||||
CommonSettings.UseExtBIOS = this->_settingsApplied.enableExternalBIOS;
|
||||
CommonSettings.UseExtFirmware = this->_settingsApplied.enableExternalFirmware;
|
||||
CommonSettings.UseExtFirmwareSettings = this->_settingsApplied.enableExternalFirmware;
|
||||
CommonSettings.BootFromFirmware = this->_settingsApplied.enableFirmwareBoot;
|
||||
|
||||
if (this->_settingsApplied.filePathARM9BIOS.length() == 0)
|
||||
{
|
||||
|
@ -842,11 +850,8 @@ void ClientExecutionControl::ApplySettingsOnNDSExec()
|
|||
this->_settingsApplied.enableAdvancedBusLevelTiming = this->_settingsPending.enableAdvancedBusLevelTiming;
|
||||
this->_settingsApplied.enableRigorous3DRenderingTiming = this->_settingsPending.enableRigorous3DRenderingTiming;
|
||||
this->_settingsApplied.enableGameSpecificHacks = this->_settingsPending.enableGameSpecificHacks;
|
||||
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;
|
||||
|
||||
|
@ -862,12 +867,8 @@ void ClientExecutionControl::ApplySettingsOnNDSExec()
|
|||
|
||||
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;
|
||||
|
||||
|
|
|
@ -1422,6 +1422,11 @@
|
|||
ABAE30BD1869484F00C92F4F /* Image_Piano.png in Resources */ = {isa = PBXBuildFile; fileRef = ABAE30BA1869484F00C92F4F /* Image_Piano.png */; };
|
||||
ABAE30BE1869484F00C92F4F /* Image_Piano.png in Resources */ = {isa = PBXBuildFile; fileRef = ABAE30BA1869484F00C92F4F /* Image_Piano.png */; };
|
||||
ABAE30BF1869484F00C92F4F /* Image_Piano.png in Resources */ = {isa = PBXBuildFile; fileRef = ABAE30BA1869484F00C92F4F /* Image_Piano.png */; };
|
||||
ABAFD2751F7110E4007705BD /* gdbstub.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF171345ACA900AF11D1 /* gdbstub.cpp */; };
|
||||
ABAFD2761F7110E4007705BD /* gdbstub.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF171345ACA900AF11D1 /* gdbstub.cpp */; };
|
||||
ABAFD2771F7110E5007705BD /* gdbstub.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF171345ACA900AF11D1 /* gdbstub.cpp */; };
|
||||
ABAFD2781F7110E5007705BD /* gdbstub.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF171345ACA900AF11D1 /* gdbstub.cpp */; };
|
||||
ABAFD2791F7110E6007705BD /* gdbstub.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABD1FF171345ACA900AF11D1 /* gdbstub.cpp */; };
|
||||
ABB6AD5D173A3F2B00EC2E8D /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABB6AD5C173A3F2B00EC2E8D /* Carbon.framework */; };
|
||||
ABB9212117CEB4110049D4C5 /* slot1comp_protocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB9212017CEB4110049D4C5 /* slot1comp_protocol.cpp */; };
|
||||
ABB9212217CEB4110049D4C5 /* slot1comp_protocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = ABB9212017CEB4110049D4C5 /* slot1comp_protocol.cpp */; };
|
||||
|
@ -4611,6 +4616,7 @@
|
|||
ABD4F2741F54A51000D75A1F /* ClientExecutionControl.cpp in Sources */,
|
||||
ABC04DA41F67A20500EA6ED7 /* ClientInputHandler.cpp in Sources */,
|
||||
ABC04DCB1F67A2AC00EA6ED7 /* macosx_10_5_compat.cpp in Sources */,
|
||||
ABAFD2791F7110E6007705BD /* gdbstub.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -4798,6 +4804,7 @@
|
|||
ABD4F2751F54A51000D75A1F /* ClientExecutionControl.cpp in Sources */,
|
||||
ABC04DA51F67A20500EA6ED7 /* ClientInputHandler.cpp in Sources */,
|
||||
ABC04DCC1F67A2AC00EA6ED7 /* macosx_10_5_compat.cpp in Sources */,
|
||||
ABAFD2781F7110E5007705BD /* gdbstub.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -5015,6 +5022,7 @@
|
|||
ABD4F2731F54A51000D75A1F /* ClientExecutionControl.cpp in Sources */,
|
||||
ABC04DA31F67A20500EA6ED7 /* ClientInputHandler.cpp in Sources */,
|
||||
ABC04DCA1F67A2AC00EA6ED7 /* macosx_10_5_compat.cpp in Sources */,
|
||||
ABAFD2751F7110E4007705BD /* gdbstub.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -5232,6 +5240,7 @@
|
|||
ABD4F2771F54A51000D75A1F /* ClientExecutionControl.cpp in Sources */,
|
||||
ABC04DA71F67A20500EA6ED7 /* ClientInputHandler.cpp in Sources */,
|
||||
ABC04DCE1F67A2AC00EA6ED7 /* macosx_10_5_compat.cpp in Sources */,
|
||||
ABAFD2761F7110E4007705BD /* gdbstub.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -5419,6 +5428,7 @@
|
|||
ABD4F2761F54A51000D75A1F /* ClientExecutionControl.cpp in Sources */,
|
||||
ABC04DA61F67A20500EA6ED7 /* ClientInputHandler.cpp in Sources */,
|
||||
ABC04DCD1F67A2AC00EA6ED7 /* macosx_10_5_compat.cpp in Sources */,
|
||||
ABAFD2771F7110E5007705BD /* gdbstub.cpp in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
|
@ -5625,6 +5635,7 @@
|
|||
GCC_PREPROCESSOR_DEFINITIONS = (
|
||||
_DEBUG,
|
||||
"DEBUG=1",
|
||||
GDB_STUB,
|
||||
);
|
||||
GCC_STRICT_ALIASING = YES;
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||
|
|
|
@ -22,6 +22,9 @@
|
|||
#include <string>
|
||||
#import "cocoa_util.h"
|
||||
|
||||
#include "../../NDSSystem.h"
|
||||
#undef BOOL
|
||||
|
||||
|
||||
class ClientExecutionControl;
|
||||
@class CocoaDSCore;
|
||||
|
@ -68,6 +71,7 @@ typedef struct
|
|||
NSString *slot1StatusText;
|
||||
NSString *frameStatus;
|
||||
NSString *executionSpeedStatus;
|
||||
NSString *errorStatus;
|
||||
|
||||
OSSpinLock spinlockCdsController;
|
||||
OSSpinLock spinlockMasterExecute;
|
||||
|
@ -115,6 +119,7 @@ typedef struct
|
|||
@property (assign) NSString *slot1StatusText;
|
||||
@property (assign) NSString *frameStatus;
|
||||
@property (assign) NSString *executionSpeedStatus;
|
||||
@property (retain) NSString *errorStatus;
|
||||
|
||||
@property (copy) NSURL *arm9ImageURL;
|
||||
@property (copy) NSURL *arm7ImageURL;
|
||||
|
@ -146,6 +151,8 @@ typedef struct
|
|||
- (BOOL) startReplayRecording:(NSURL *)fileURL sramURL:(NSURL *)sramURL;
|
||||
- (void) stopReplay;
|
||||
|
||||
- (void) postNDSError:(const NDSError &)ndsError;
|
||||
|
||||
@end
|
||||
|
||||
static void* RunCoreThread(void *arg);
|
||||
|
|
|
@ -118,6 +118,7 @@ volatile bool execute = true;
|
|||
@synthesize slot1StatusText;
|
||||
@synthesize frameStatus;
|
||||
@synthesize executionSpeedStatus;
|
||||
@synthesize errorStatus;
|
||||
|
||||
@dynamic arm9ImageURL;
|
||||
@dynamic arm7ImageURL;
|
||||
|
@ -207,6 +208,7 @@ volatile bool execute = true;
|
|||
|
||||
frameStatus = @"---";
|
||||
executionSpeedStatus = @"1.00x";
|
||||
errorStatus = @"";
|
||||
|
||||
return self;
|
||||
}
|
||||
|
@ -221,6 +223,7 @@ volatile bool execute = true;
|
|||
[self setCdsFirmware:nil];
|
||||
[self setCdsGPU:nil];
|
||||
[self setCdsOutputList:nil];
|
||||
[self setErrorStatus:nil];
|
||||
|
||||
pthread_cancel(coreThread);
|
||||
pthread_join(coreThread, NULL);
|
||||
|
@ -242,14 +245,23 @@ volatile bool execute = true;
|
|||
- (void) setMasterExecute:(BOOL)theState
|
||||
{
|
||||
OSSpinLockLock(&spinlockMasterExecute);
|
||||
execute = theState ? true : false;
|
||||
|
||||
if (theState)
|
||||
{
|
||||
execute = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
emu_halt(EMUHALT_REASON_UNKNOWN, NDSErrorTag_BothCPUs);
|
||||
}
|
||||
|
||||
OSSpinLockUnlock(&spinlockMasterExecute);
|
||||
}
|
||||
|
||||
- (BOOL) masterExecute
|
||||
{
|
||||
OSSpinLockLock(&spinlockMasterExecute);
|
||||
const BOOL theState = execute ? YES : NO;
|
||||
const BOOL theState = (execute) ? YES : NO;
|
||||
OSSpinLockUnlock(&spinlockMasterExecute);
|
||||
|
||||
return theState;
|
||||
|
@ -855,8 +867,8 @@ volatile bool execute = true;
|
|||
pthread_mutex_unlock(&threadParam.mutexThreadExecute);
|
||||
|
||||
[self updateSlot1DeviceStatus];
|
||||
[self restoreCoreState];
|
||||
[self setMasterExecute:YES];
|
||||
[self restoreCoreState];
|
||||
[[self cdsController] reset];
|
||||
[[self cdsController] updateMicLevel];
|
||||
}
|
||||
|
@ -988,6 +1000,111 @@ volatile bool execute = true;
|
|||
FCEUI_StopMovie();
|
||||
}
|
||||
|
||||
- (void) postNDSError:(const NDSError &)ndsError
|
||||
{
|
||||
NSString *newErrorString = nil;
|
||||
|
||||
switch (ndsError.code)
|
||||
{
|
||||
case NDSError_NoError:
|
||||
// Do nothing if there is no error.
|
||||
return;
|
||||
|
||||
case NDSError_SystemPoweredOff:
|
||||
newErrorString = @"The system powered off using the ARM7 SPI device.";
|
||||
break;
|
||||
|
||||
case NDSError_JITUnmappedAddressException:
|
||||
{
|
||||
if (ndsError.tag == NDSErrorTag_ARM9)
|
||||
{
|
||||
newErrorString = [NSString stringWithFormat:
|
||||
@"JIT UNMAPPED ADDRESS EXCEPTION - ARM9:\n\
|
||||
\tARM9 Program Counter: 0x%08X\n\
|
||||
\tARM9 Instruction: 0x%08X\n\
|
||||
\tARM9 Instruction Address: 0x%08X",
|
||||
ndsError.programCounterARM9, ndsError.instructionARM9, ndsError.instructionAddrARM9];
|
||||
}
|
||||
else if (ndsError.tag == NDSErrorTag_ARM7)
|
||||
{
|
||||
newErrorString = [NSString stringWithFormat:
|
||||
@"JIT UNMAPPED ADDRESS EXCEPTION - ARM7:\n\
|
||||
\tARM7 Program Counter: 0x%08X\n\
|
||||
\tARM7 Instruction: 0x%08X\n\
|
||||
\tARM7 Instruction Address: 0x%08X",
|
||||
ndsError.programCounterARM7, ndsError.instructionARM7, ndsError.instructionAddrARM7];
|
||||
}
|
||||
else
|
||||
{
|
||||
newErrorString = [NSString stringWithFormat:
|
||||
@"JIT UNMAPPED ADDRESS EXCEPTION - UNKNOWN CPU:\n\
|
||||
\tARM9 Program Counter: 0x%08X\n\
|
||||
\tARM9 Instruction: 0x%08X\n\
|
||||
\tARM9 Instruction Address: 0x%08X\n\
|
||||
\tARM7 Program Counter: 0x%08X\n\
|
||||
\tARM7 Instruction: 0x%08X\n\
|
||||
\tARM7 Instruction Address: 0x%08X",
|
||||
ndsError.programCounterARM9, ndsError.instructionARM9, ndsError.instructionAddrARM9,
|
||||
ndsError.programCounterARM7, ndsError.instructionARM7, ndsError.instructionAddrARM7];
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case NDSError_ARMUndefinedInstructionException:
|
||||
{
|
||||
if (ndsError.tag == NDSErrorTag_ARM9)
|
||||
{
|
||||
newErrorString = [NSString stringWithFormat:
|
||||
@"ARM9 UNDEFINED INSTRUCTION EXCEPTION:\n\
|
||||
\tARM9 Program Counter: 0x%08X\n\
|
||||
\tARM9 Instruction: 0x%08X\n\
|
||||
\tARM9 Instruction Address: 0x%08X",
|
||||
ndsError.programCounterARM9, ndsError.instructionARM9, ndsError.instructionAddrARM9];
|
||||
}
|
||||
else if (ndsError.tag == NDSErrorTag_ARM7)
|
||||
{
|
||||
newErrorString = [NSString stringWithFormat:
|
||||
@"ARM7 UNDEFINED INSTRUCTION EXCEPTION:\n\
|
||||
\tARM7 Program Counter: 0x%08X\n\
|
||||
\tARM7 Instruction: 0x%08X\n\
|
||||
\tARM7 Instruction Address: 0x%08X",
|
||||
ndsError.programCounterARM7, ndsError.instructionARM7, ndsError.instructionAddrARM7];
|
||||
}
|
||||
else
|
||||
{
|
||||
newErrorString = [NSString stringWithFormat:
|
||||
@"UNKNOWN ARM CPU UNDEFINED INSTRUCTION EXCEPTION:\n\
|
||||
\tARM9 Program Counter: 0x%08X\n\
|
||||
\tARM9 Instruction: 0x%08X\n\
|
||||
\tARM9 Instruction Address: 0x%08X\n\
|
||||
\tARM7 Program Counter: 0x%08X\n\
|
||||
\tARM7 Instruction: 0x%08X\n\
|
||||
\tARM7 Instruction Address: 0x%08X",
|
||||
ndsError.programCounterARM9, ndsError.instructionARM9, ndsError.instructionAddrARM9,
|
||||
ndsError.programCounterARM7, ndsError.instructionARM7, ndsError.instructionAddrARM7];
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case NDSError_UnknownError:
|
||||
default:
|
||||
newErrorString = [NSString stringWithFormat:
|
||||
@"UNKNOWN ERROR:\n\
|
||||
\tARM9 Program Counter: 0x%08X\n\
|
||||
\tARM9 Instruction: 0x%08X\n\
|
||||
\tARM9 Instruction Address: 0x%08X\n\
|
||||
\tARM7 Program Counter: 0x%08X\n\
|
||||
\tARM7 Instruction: 0x%08X\n\
|
||||
\tARM7 Instruction Address: 0x%08X",
|
||||
ndsError.programCounterARM9, ndsError.instructionARM9, ndsError.instructionAddrARM9,
|
||||
ndsError.programCounterARM7, ndsError.instructionARM7, ndsError.instructionAddrARM7];
|
||||
break;
|
||||
}
|
||||
|
||||
[self setErrorStatus:newErrorString];
|
||||
[[NSNotificationCenter defaultCenter] postNotificationOnMainThreadName:@"org.desmume.DeSmuME.handleNDSError" object:self userInfo:nil];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
static void* RunCoreThread(void *arg)
|
||||
|
@ -1039,9 +1156,10 @@ static void* RunCoreThread(void *arg)
|
|||
// Check if an internal execution error occurred that halted the emulation.
|
||||
if (!execute)
|
||||
{
|
||||
NDSError ndsError = NDS_GetLastError();
|
||||
pthread_mutex_unlock(¶m->mutexThreadExecute);
|
||||
// TODO: Message the core that emulation halted.
|
||||
NSLog(@"The emulator halted during execution. Was it an internal error that caused this?");
|
||||
|
||||
[cdsCore postNDSError:ndsError];
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
Binary file not shown.
|
@ -12,6 +12,7 @@
|
|||
</object>
|
||||
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<integer value="10522"/>
|
||||
</object>
|
||||
<object class="NSArray" key="IBDocument.PluginDependencies">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
|
@ -1944,6 +1945,14 @@
|
|||
<reference key="NSOnImage" ref="396634170"/>
|
||||
<reference key="NSMixedImage" ref="678976864"/>
|
||||
</object>
|
||||
<object class="NSMenuItem" id="1030632434">
|
||||
<reference key="NSMenu" ref="664980152"/>
|
||||
<string key="NSTitle">Show GDB Stub Control...</string>
|
||||
<string key="NSKeyEquiv"/>
|
||||
<int key="NSMnemonicLoc">2147483647</int>
|
||||
<reference key="NSOnImage" ref="396634170"/>
|
||||
<reference key="NSMixedImage" ref="678976864"/>
|
||||
</object>
|
||||
<object class="NSMenuItem" id="306737379">
|
||||
<reference key="NSMenu" ref="664980152"/>
|
||||
<bool key="NSIsDisabled">YES</bool>
|
||||
|
@ -1954,9 +1963,9 @@
|
|||
<reference key="NSOnImage" ref="396634170"/>
|
||||
<reference key="NSMixedImage" ref="678976864"/>
|
||||
</object>
|
||||
<object class="NSMenuItem" id="1030632434">
|
||||
<object class="NSMenuItem" id="469346871">
|
||||
<reference key="NSMenu" ref="664980152"/>
|
||||
<string key="NSTitle">Show GDB Stub Control...</string>
|
||||
<string key="NSTitle">Disable Metal (requires app restart)</string>
|
||||
<string key="NSKeyEquiv"/>
|
||||
<int key="NSMnemonicLoc">2147483647</int>
|
||||
<reference key="NSOnImage" ref="396634170"/>
|
||||
|
@ -1972,9 +1981,9 @@
|
|||
<reference key="NSOnImage" ref="396634170"/>
|
||||
<reference key="NSMixedImage" ref="678976864"/>
|
||||
</object>
|
||||
<object class="NSMenuItem" id="469346871">
|
||||
<object class="NSMenuItem" id="329110847">
|
||||
<reference key="NSMenu" ref="664980152"/>
|
||||
<string key="NSTitle">Disable Metal (requires app restart)</string>
|
||||
<string key="NSTitle">Simulate Emulation Crash</string>
|
||||
<string key="NSKeyEquiv"/>
|
||||
<int key="NSMnemonicLoc">2147483647</int>
|
||||
<reference key="NSOnImage" ref="396634170"/>
|
||||
|
@ -13636,7 +13645,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<string key="NSWindowContentMaxSize">{1.7976931348623157e+308, 1.7976931348623157e+308}</string>
|
||||
<string key="NSWindowContentMinSize">{700, 250}</string>
|
||||
<object class="NSView" key="NSWindowView" id="731532737">
|
||||
<nil key="NSNextResponder"/>
|
||||
<reference key="NSNextResponder"/>
|
||||
<int key="NSvFlags">256</int>
|
||||
<object class="NSMutableArray" key="NSSubviews">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
|
@ -13645,6 +13654,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{17, 351}, {666, 34}}</string>
|
||||
<reference key="NSSuperview" ref="731532737"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="497889808">
|
||||
<int key="NSCellFlags">67108864</int>
|
||||
|
@ -13663,6 +13673,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{17, 351}, {666, 34}}</string>
|
||||
<reference key="NSSuperview" ref="731532737"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="986675852">
|
||||
<int key="NSCellFlags">67108864</int>
|
||||
|
@ -13681,6 +13692,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<int key="NSvFlags">289</int>
|
||||
<string key="NSFrame">{{362, 12}, {162, 32}}</string>
|
||||
<reference key="NSSuperview" ref="731532737"/>
|
||||
<reference key="NSWindow"/>
|
||||
<int key="NSTag">2</int>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="932208535">
|
||||
|
@ -13703,6 +13715,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<int key="NSvFlags">289</int>
|
||||
<string key="NSFrame">{{200, 12}, {162, 32}}</string>
|
||||
<reference key="NSSuperview" ref="731532737"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="921528960">
|
||||
<int key="NSCellFlags">67108864</int>
|
||||
|
@ -13724,6 +13737,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{17, 315}, {666, 28}}</string>
|
||||
<reference key="NSSuperview" ref="731532737"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="389737972">
|
||||
<int key="NSCellFlags">67108864</int>
|
||||
|
@ -13742,6 +13756,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{17, 315}, {666, 28}}</string>
|
||||
<reference key="NSSuperview" ref="731532737"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="824504973">
|
||||
<int key="NSCellFlags">67108864</int>
|
||||
|
@ -13760,6 +13775,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<int key="NSvFlags">292</int>
|
||||
<string key="NSFrame">{{18, 21}, {182, 18}}</string>
|
||||
<reference key="NSSuperview" ref="731532737"/>
|
||||
<reference key="NSWindow"/>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="548786511">
|
||||
<int key="NSCellFlags">67108864</int>
|
||||
|
@ -13783,6 +13799,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<int key="NSvFlags">289</int>
|
||||
<string key="NSFrame">{{524, 12}, {162, 32}}</string>
|
||||
<reference key="NSSuperview" ref="731532737"/>
|
||||
<reference key="NSWindow"/>
|
||||
<int key="NSTag">1</int>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="283691405">
|
||||
|
@ -13815,6 +13832,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<int key="NSvFlags">256</int>
|
||||
<string key="NSFrameSize">{700, 229}</string>
|
||||
<reference key="NSSuperview" ref="850501943"/>
|
||||
<reference key="NSWindow"/>
|
||||
<string key="NSReuseIdentifierKey">_NS:1718</string>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
||||
|
@ -13824,14 +13842,14 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<int key="NSvFlags">256</int>
|
||||
<string key="NSFrameSize">{700, 17}</string>
|
||||
<reference key="NSSuperview" ref="968198718"/>
|
||||
<reference key="NSWindow"/>
|
||||
<string key="NSReuseIdentifierKey">_NS:1720</string>
|
||||
<reference key="NSTableView" ref="796694466"/>
|
||||
</object>
|
||||
<object class="_NSCornerView" key="NSCornerView" id="917215464">
|
||||
<reference key="NSNextResponder" ref="266193397"/>
|
||||
<object class="_NSCornerView" key="NSCornerView">
|
||||
<nil key="NSNextResponder"/>
|
||||
<int key="NSvFlags">-2147483392</int>
|
||||
<string key="NSFrame">{{224, 0}, {16, 17}}</string>
|
||||
<reference key="NSSuperview" ref="266193397"/>
|
||||
<string key="NSReuseIdentifierKey">_NS:1724</string>
|
||||
</object>
|
||||
<object class="NSMutableArray" key="NSTableColumns">
|
||||
|
@ -13944,6 +13962,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
</object>
|
||||
<string key="NSFrame">{{1, 17}, {700, 229}}</string>
|
||||
<reference key="NSSuperview" ref="266193397"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="796694466"/>
|
||||
<string key="NSReuseIdentifierKey">_NS:1716</string>
|
||||
<reference key="NSDocView" ref="796694466"/>
|
||||
|
@ -13955,6 +13974,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<int key="NSvFlags">-2147483392</int>
|
||||
<string key="NSFrame">{{224, 17}, {15, 102}}</string>
|
||||
<reference key="NSSuperview" ref="266193397"/>
|
||||
<reference key="NSWindow"/>
|
||||
<string key="NSReuseIdentifierKey">_NS:1741</string>
|
||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
||||
<reference key="NSTarget" ref="266193397"/>
|
||||
|
@ -13966,6 +13986,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<int key="NSvFlags">-2147483392</int>
|
||||
<string key="NSFrame">{{1, 197}, {700, 15}}</string>
|
||||
<reference key="NSSuperview" ref="266193397"/>
|
||||
<reference key="NSWindow"/>
|
||||
<string key="NSReuseIdentifierKey">_NS:1743</string>
|
||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
||||
<int key="NSsFlags">1</int>
|
||||
|
@ -13982,14 +14003,15 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
</object>
|
||||
<string key="NSFrame">{{1, 0}, {700, 17}}</string>
|
||||
<reference key="NSSuperview" ref="266193397"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="650104671"/>
|
||||
<string key="NSReuseIdentifierKey">_NS:1721</string>
|
||||
<reference key="NSDocView" ref="650104671"/>
|
||||
</object>
|
||||
<reference ref="917215464"/>
|
||||
</object>
|
||||
<string key="NSFrame">{{-1, 60}, {702, 247}}</string>
|
||||
<reference key="NSSuperview" ref="731532737"/>
|
||||
<reference key="NSWindow"/>
|
||||
<reference key="NSNextKeyView" ref="850501943"/>
|
||||
<string key="NSReuseIdentifierKey">_NS:1714</string>
|
||||
<int key="NSsFlags">133682</int>
|
||||
|
@ -14004,6 +14026,8 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{700, 405}</string>
|
||||
<reference key="NSSuperview"/>
|
||||
<reference key="NSWindow"/>
|
||||
</object>
|
||||
<string key="NSScreenRect">{{0, 0}, {1920, 1177}}</string>
|
||||
<string key="NSMinSize">{700, 272}</string>
|
||||
|
@ -14237,6 +14261,125 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<string key="NSMaxSize">{1.7976931348623157e+308, 1.7976931348623157e+308}</string>
|
||||
<bool key="NSWindowIsRestorable">YES</bool>
|
||||
</object>
|
||||
<object class="NSWindowTemplate" id="292515803">
|
||||
<int key="NSWindowStyleMask">1</int>
|
||||
<int key="NSWindowBacking">2</int>
|
||||
<string key="NSWindowRect">{{157, 347}, {400, 114}}</string>
|
||||
<int key="NSWTFlags">1685586944</int>
|
||||
<string key="NSWindowTitle">NDS Error</string>
|
||||
<string key="NSWindowClass">NSWindow</string>
|
||||
<nil key="NSViewClass"/>
|
||||
<nil key="NSUserInterfaceItemIdentifier"/>
|
||||
<object class="NSView" key="NSWindowView" id="13172379">
|
||||
<reference key="NSNextResponder"/>
|
||||
<int key="NSvFlags">256</int>
|
||||
<object class="NSMutableArray" key="NSSubviews">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<object class="NSTextField" id="487161905">
|
||||
<reference key="NSNextResponder" ref="13172379"/>
|
||||
<int key="NSvFlags">268</int>
|
||||
<string key="NSFrame">{{17, 77}, {366, 17}}</string>
|
||||
<reference key="NSSuperview" ref="13172379"/>
|
||||
<string key="NSReuseIdentifierKey">_NS:3939</string>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="194008675">
|
||||
<int key="NSCellFlags">67108864</int>
|
||||
<int key="NSCellFlags2">272891904</int>
|
||||
<string key="NSContents">The emulation has halted due to an internal issue.</string>
|
||||
<object class="NSFont" key="NSSupport">
|
||||
<string key="NSName">LucidaGrande-Bold</string>
|
||||
<double key="NSSize">13</double>
|
||||
<int key="NSfFlags">16</int>
|
||||
</object>
|
||||
<string key="NSCellIdentifier">_NS:3939</string>
|
||||
<reference key="NSControlView" ref="487161905"/>
|
||||
<reference key="NSBackgroundColor" ref="266180242"/>
|
||||
<reference key="NSTextColor" ref="1045249657"/>
|
||||
</object>
|
||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
||||
<int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
|
||||
</object>
|
||||
<object class="NSButton" id="570766076">
|
||||
<reference key="NSNextResponder" ref="13172379"/>
|
||||
<int key="NSvFlags">289</int>
|
||||
<string key="NSFrame">{{290, 12}, {96, 32}}</string>
|
||||
<reference key="NSSuperview" ref="13172379"/>
|
||||
<string key="NSReuseIdentifierKey">_NS:610</string>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="774886600">
|
||||
<int key="NSCellFlags">67108864</int>
|
||||
<int key="NSCellFlags2">134217728</int>
|
||||
<string key="NSContents">Stop</string>
|
||||
<reference key="NSSupport" ref="462791774"/>
|
||||
<string key="NSCellIdentifier">_NS:610</string>
|
||||
<reference key="NSControlView" ref="570766076"/>
|
||||
<int key="NSButtonFlags">-2038284288</int>
|
||||
<int key="NSButtonFlags2">129</int>
|
||||
<string key="NSAlternateContents"/>
|
||||
<string type="base64-UTF8" key="NSKeyEquivalent">DQ</string>
|
||||
<int key="NSPeriodicDelay">200</int>
|
||||
<int key="NSPeriodicInterval">25</int>
|
||||
</object>
|
||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
||||
</object>
|
||||
<object class="NSButton" id="1020353354">
|
||||
<reference key="NSNextResponder" ref="13172379"/>
|
||||
<int key="NSvFlags">289</int>
|
||||
<string key="NSFrame">{{194, 12}, {96, 32}}</string>
|
||||
<reference key="NSSuperview" ref="13172379"/>
|
||||
<string key="NSReuseIdentifierKey">_NS:610</string>
|
||||
<int key="NSTag">2</int>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSButtonCell" key="NSCell" id="278466473">
|
||||
<int key="NSCellFlags">67108864</int>
|
||||
<int key="NSCellFlags2">134217728</int>
|
||||
<string key="NSContents">Reset</string>
|
||||
<reference key="NSSupport" ref="462791774"/>
|
||||
<string key="NSCellIdentifier">_NS:610</string>
|
||||
<reference key="NSControlView" ref="1020353354"/>
|
||||
<int key="NSButtonFlags">-2038284288</int>
|
||||
<int key="NSButtonFlags2">129</int>
|
||||
<string key="NSAlternateContents"/>
|
||||
<string key="NSKeyEquivalent"/>
|
||||
<int key="NSPeriodicDelay">200</int>
|
||||
<int key="NSPeriodicInterval">25</int>
|
||||
</object>
|
||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
||||
</object>
|
||||
<object class="NSTextField" id="987846881">
|
||||
<reference key="NSNextResponder" ref="13172379"/>
|
||||
<int key="NSvFlags">292</int>
|
||||
<string key="NSFrame">{{17, 53}, {366, 16}}</string>
|
||||
<reference key="NSSuperview" ref="13172379"/>
|
||||
<string key="NSReuseIdentifierKey">_NS:3939</string>
|
||||
<bool key="NSEnabled">YES</bool>
|
||||
<object class="NSTextFieldCell" key="NSCell" id="510036545">
|
||||
<int key="NSCellFlags">69206017</int>
|
||||
<int key="NSCellFlags2">272760832</int>
|
||||
<string key="NSContents"/>
|
||||
<object class="NSFont" key="NSSupport" id="197589044">
|
||||
<string key="NSName">Monaco</string>
|
||||
<double key="NSSize">11</double>
|
||||
<int key="NSfFlags">16</int>
|
||||
</object>
|
||||
<string key="NSPlaceholderString">error string</string>
|
||||
<string key="NSCellIdentifier">_NS:3939</string>
|
||||
<reference key="NSControlView" ref="987846881"/>
|
||||
<reference key="NSBackgroundColor" ref="266180242"/>
|
||||
<reference key="NSTextColor" ref="1045249657"/>
|
||||
</object>
|
||||
<bool key="NSAllowsLogicalLayoutDirection">NO</bool>
|
||||
<int key="NSTextFieldAlignmentRectInsetsVersion">1</int>
|
||||
</object>
|
||||
</object>
|
||||
<string key="NSFrameSize">{400, 114}</string>
|
||||
<reference key="NSSuperview"/>
|
||||
<string key="NSReuseIdentifierKey">_NS:122</string>
|
||||
</object>
|
||||
<string key="NSScreenRect">{{0, 0}, {1440, 878}}</string>
|
||||
<string key="NSMaxSize">{1.7976931348623157e+308, 1.7976931348623157e+308}</string>
|
||||
<bool key="NSWindowIsRestorable">NO</bool>
|
||||
</object>
|
||||
<object class="NSWindowTemplate" id="217226210">
|
||||
<int key="NSWindowStyleMask">7</int>
|
||||
<int key="NSWindowBacking">2</int>
|
||||
|
@ -15131,11 +15274,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<int key="NSCellFlags">69206081</int>
|
||||
<int key="NSCellFlags2">137216</int>
|
||||
<string key="NSContents">Text Cell</string>
|
||||
<object class="NSFont" key="NSSupport" id="197589044">
|
||||
<string key="NSName">Monaco</string>
|
||||
<double key="NSSize">11</double>
|
||||
<int key="NSfFlags">16</int>
|
||||
</object>
|
||||
<reference key="NSSupport" ref="197589044"/>
|
||||
<reference key="NSControlView" ref="1001428622"/>
|
||||
<reference key="NSBackgroundColor" ref="856317944"/>
|
||||
<reference key="NSTextColor" ref="1045249657"/>
|
||||
|
@ -30838,6 +30977,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<string>frameJumpBehavior</string>
|
||||
<string>frameJumpNumberFramesForward</string>
|
||||
<string>frameJumpToFrameIndex</string>
|
||||
<string>errorStatus</string>
|
||||
</object>
|
||||
<string key="NSObjectClassName">CocoaDSCore</string>
|
||||
<object class="_NSManagedProxy" key="_NSManagedProxy"/>
|
||||
|
@ -44538,6 +44678,82 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
</object>
|
||||
<int key="connectionID">10520</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBOutletConnection" key="connection">
|
||||
<string key="label">ndsErrorSheet</string>
|
||||
<reference key="source" ref="231770064"/>
|
||||
<reference key="destination" ref="292515803"/>
|
||||
</object>
|
||||
<int key="connectionID">10532</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">closeSheet:</string>
|
||||
<reference key="source" ref="231770064"/>
|
||||
<reference key="destination" ref="570766076"/>
|
||||
</object>
|
||||
<int key="connectionID">10533</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">closeSheet:</string>
|
||||
<reference key="source" ref="231770064"/>
|
||||
<reference key="destination" ref="1020353354"/>
|
||||
</object>
|
||||
<int key="connectionID">10534</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBBindingConnection" key="connection">
|
||||
<string key="label">value: selection.errorStatus</string>
|
||||
<reference key="source" ref="987846881"/>
|
||||
<reference key="destination" ref="582168938"/>
|
||||
<object class="NSNibBindingConnector" key="connector">
|
||||
<reference key="NSSource" ref="987846881"/>
|
||||
<reference key="NSDestination" ref="582168938"/>
|
||||
<string key="NSLabel">value: selection.errorStatus</string>
|
||||
<string key="NSBinding">value</string>
|
||||
<string key="NSKeyPath">selection.errorStatus</string>
|
||||
<int key="NSNibBindingConnectorVersion">2</int>
|
||||
</object>
|
||||
</object>
|
||||
<int key="connectionID">10535</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBOutletConnection" key="connection">
|
||||
<string key="label">ndsErrorStatusTextField</string>
|
||||
<reference key="source" ref="231770064"/>
|
||||
<reference key="destination" ref="987846881"/>
|
||||
</object>
|
||||
<int key="connectionID">10536</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBActionConnection" key="connection">
|
||||
<string key="label">simulateEmulationCrash:</string>
|
||||
<reference key="source" ref="231770064"/>
|
||||
<reference key="destination" ref="329110847"/>
|
||||
</object>
|
||||
<int key="connectionID">10537</int>
|
||||
</object>
|
||||
<object class="IBConnectionRecord">
|
||||
<object class="IBBindingConnection" key="connection">
|
||||
<string key="label">hidden: isDeveloperPlusBuild</string>
|
||||
<reference key="source" ref="329110847"/>
|
||||
<reference key="destination" ref="976324537"/>
|
||||
<object class="NSNibBindingConnector" key="connector">
|
||||
<reference key="NSSource" ref="329110847"/>
|
||||
<reference key="NSDestination" ref="976324537"/>
|
||||
<string key="NSLabel">hidden: isDeveloperPlusBuild</string>
|
||||
<string key="NSBinding">hidden</string>
|
||||
<string key="NSKeyPath">isDeveloperPlusBuild</string>
|
||||
<object class="NSDictionary" key="NSOptions">
|
||||
<string key="NS.key.0">NSValueTransformerName</string>
|
||||
<string key="NS.object.0">NSNegateBoolean</string>
|
||||
</object>
|
||||
<int key="NSNibBindingConnectorVersion">2</int>
|
||||
</object>
|
||||
</object>
|
||||
<int key="connectionID">10539</int>
|
||||
</object>
|
||||
</object>
|
||||
<object class="IBMutableOrderedSet" key="objectRecords">
|
||||
<object class="NSArray" key="orderedObjects">
|
||||
|
@ -46043,9 +46259,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<reference ref="217330860"/>
|
||||
<reference ref="406886317"/>
|
||||
<reference ref="306737379"/>
|
||||
<reference ref="628276370"/>
|
||||
<reference ref="1030632434"/>
|
||||
<reference ref="469346871"/>
|
||||
<reference ref="628276370"/>
|
||||
<reference ref="329110847"/>
|
||||
</object>
|
||||
<reference key="parent" ref="963830043"/>
|
||||
</object>
|
||||
|
@ -56727,6 +56944,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<reference ref="731532737"/>
|
||||
</object>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">Window (Game Data Migration Assistant)</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">9706</int>
|
||||
|
@ -60510,6 +60728,89 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<reference key="object" ref="213745199"/>
|
||||
<reference key="parent" ref="728665305"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">10521</int>
|
||||
<reference key="object" ref="329110847"/>
|
||||
<reference key="parent" ref="664980152"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">10522</int>
|
||||
<reference key="object" ref="292515803"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="13172379"/>
|
||||
</object>
|
||||
<reference key="parent" ref="0"/>
|
||||
<string key="objectName">Window (NDS Error)</string>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">10523</int>
|
||||
<reference key="object" ref="13172379"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="487161905"/>
|
||||
<reference ref="987846881"/>
|
||||
<reference ref="570766076"/>
|
||||
<reference ref="1020353354"/>
|
||||
</object>
|
||||
<reference key="parent" ref="292515803"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">10524</int>
|
||||
<reference key="object" ref="487161905"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="194008675"/>
|
||||
</object>
|
||||
<reference key="parent" ref="13172379"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">10525</int>
|
||||
<reference key="object" ref="194008675"/>
|
||||
<reference key="parent" ref="487161905"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">10526</int>
|
||||
<reference key="object" ref="570766076"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="774886600"/>
|
||||
</object>
|
||||
<reference key="parent" ref="13172379"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">10527</int>
|
||||
<reference key="object" ref="774886600"/>
|
||||
<reference key="parent" ref="570766076"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">10528</int>
|
||||
<reference key="object" ref="1020353354"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="278466473"/>
|
||||
</object>
|
||||
<reference key="parent" ref="13172379"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">10529</int>
|
||||
<reference key="object" ref="278466473"/>
|
||||
<reference key="parent" ref="1020353354"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">10530</int>
|
||||
<reference key="object" ref="987846881"/>
|
||||
<object class="NSMutableArray" key="children">
|
||||
<bool key="EncodedWithXMLCoder">YES</bool>
|
||||
<reference ref="510036545"/>
|
||||
</object>
|
||||
<reference key="parent" ref="13172379"/>
|
||||
</object>
|
||||
<object class="IBObjectRecord">
|
||||
<int key="objectID">10531</int>
|
||||
<reference key="object" ref="510036545"/>
|
||||
<reference key="parent" ref="987846881"/>
|
||||
</object>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="flattenedProperties">
|
||||
|
@ -60886,6 +61187,23 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<string>10505.IBPluginDependency</string>
|
||||
<string>10508.IBPluginDependency</string>
|
||||
<string>10509.IBPluginDependency</string>
|
||||
<string>10521.IBPluginDependency</string>
|
||||
<string>10522.IBEditorWindowLastContentRect</string>
|
||||
<string>10522.IBPluginDependency</string>
|
||||
<string>10522.IBWindowTemplateEditedContentRect</string>
|
||||
<string>10522.NSWindowTemplate.visibleAtLaunch</string>
|
||||
<string>10523.IBPluginDependency</string>
|
||||
<string>10524.IBPluginDependency</string>
|
||||
<string>10524.IBViewBoundsToFrameTransform</string>
|
||||
<string>10525.IBPluginDependency</string>
|
||||
<string>10526.IBPluginDependency</string>
|
||||
<string>10526.IBViewBoundsToFrameTransform</string>
|
||||
<string>10527.IBPluginDependency</string>
|
||||
<string>10528.IBPluginDependency</string>
|
||||
<string>10528.IBViewBoundsToFrameTransform</string>
|
||||
<string>10529.IBPluginDependency</string>
|
||||
<string>10530.IBPluginDependency</string>
|
||||
<string>10531.IBPluginDependency</string>
|
||||
<string>1113.IBPluginDependency</string>
|
||||
<string>1114.IBPluginDependency</string>
|
||||
<string>1115.IBPluginDependency</string>
|
||||
|
@ -61210,6 +61528,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<string>3211.IBPluginDependency</string>
|
||||
<string>3213.IBPluginDependency</string>
|
||||
<string>3214.IBPluginDependency</string>
|
||||
<string>3456.IBEditorWindowLastContentRect</string>
|
||||
<string>3456.IBPluginDependency</string>
|
||||
<string>3456.IBWindowTemplateEditedContentRect</string>
|
||||
<string>3456.NSWindowTemplate.visibleAtLaunch</string>
|
||||
|
@ -63066,6 +63385,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<string>968.IBPluginDependency</string>
|
||||
<string>969.IBPluginDependency</string>
|
||||
<string>970.IBPluginDependency</string>
|
||||
<string>9705.IBEditorWindowLastContentRect</string>
|
||||
<string>9705.IBPluginDependency</string>
|
||||
<string>9705.IBWindowTemplateEditedContentRect</string>
|
||||
<string>9705.NSWindowTemplate.visibleAtLaunch</string>
|
||||
|
@ -63879,6 +64199,29 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>{{617, 513}, {400, 114}}</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>{{617, 513}, {400, 114}}</string>
|
||||
<boolean value="NO"/>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<object class="NSAffineTransform">
|
||||
<bytes key="NSTransformStruct">P4AAAL+AAABBiAAAw3gAAA</bytes>
|
||||
</object>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<object class="NSAffineTransform">
|
||||
<bytes key="NSTransformStruct">P4AAAL+AAABDXQAAwpwAAA</bytes>
|
||||
</object>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<object class="NSAffineTransform">
|
||||
<bytes key="NSTransformStruct">P4AAAL+AAABDGAAAww4AAA</bytes>
|
||||
</object>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
|
@ -64369,7 +64712,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>{{380, 836}, {512, 20}}</string>
|
||||
<string>{{463, 836}, {512, 20}}</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
|
@ -64398,8 +64741,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>{{741, 693}, {335, 163}}</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>{{1241, 208}, {335, 163}}</string>
|
||||
<string>{{741, 693}, {335, 163}}</string>
|
||||
<boolean value="NO"/>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
|
@ -65509,7 +65853,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>{{598, 723}, {292, 113}}</string>
|
||||
<string>{{787, 703}, {292, 133}}</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<reference ref="0"/>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
|
@ -67105,8 +67449,9 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>{{0, 429}, {700, 405}}</string>
|
||||
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
|
||||
<string>{{189, 422}, {700, 405}}</string>
|
||||
<string>{{0, 429}, {700, 405}}</string>
|
||||
<boolean value="NO"/>
|
||||
<boolean value="YES"/>
|
||||
<string>{700, 250}</string>
|
||||
|
@ -67290,7 +67635,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
</object>
|
||||
</object>
|
||||
<nil key="sourceID"/>
|
||||
<int key="maxID">10520</int>
|
||||
<int key="maxID">10539</int>
|
||||
</object>
|
||||
<object class="IBClassDescriber" key="IBDocument.Classes">
|
||||
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
|
||||
|
@ -68186,6 +68531,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<string>saveEmuSaveStateAs:</string>
|
||||
<string>saveEmuSaveStateSlot:</string>
|
||||
<string>setVerticalSyncForNonLayerBackedViews:</string>
|
||||
<string>simulateEmulationCrash:</string>
|
||||
<string>slot1Eject:</string>
|
||||
<string>stopReplay:</string>
|
||||
<string>toggleAllDisplays:</string>
|
||||
|
@ -68254,6 +68600,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<string>id</string>
|
||||
<string>id</string>
|
||||
<string>id</string>
|
||||
<string>id</string>
|
||||
</object>
|
||||
</object>
|
||||
<object class="NSMutableDictionary" key="actionInfosByName">
|
||||
|
@ -68297,6 +68644,7 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<string>saveEmuSaveStateAs:</string>
|
||||
<string>saveEmuSaveStateSlot:</string>
|
||||
<string>setVerticalSyncForNonLayerBackedViews:</string>
|
||||
<string>simulateEmulationCrash:</string>
|
||||
<string>slot1Eject:</string>
|
||||
<string>stopReplay:</string>
|
||||
<string>toggleAllDisplays:</string>
|
||||
|
@ -68462,6 +68810,10 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<string key="name">setVerticalSyncForNonLayerBackedViews:</string>
|
||||
<string key="candidateClassName">id</string>
|
||||
</object>
|
||||
<object class="IBActionInfo">
|
||||
<string key="name">simulateEmulationCrash:</string>
|
||||
<string key="candidateClassName">id</string>
|
||||
</object>
|
||||
<object class="IBActionInfo">
|
||||
<string key="name">slot1Eject:</string>
|
||||
<string key="candidateClassName">id</string>
|
||||
|
@ -68537,6 +68889,8 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<string>exportRomSavePanelAccessoryView</string>
|
||||
<string>firmwarePanelController</string>
|
||||
<string>inputManager</string>
|
||||
<string>ndsErrorSheet</string>
|
||||
<string>ndsErrorStatusTextField</string>
|
||||
<string>romInfoPanelController</string>
|
||||
<string>saveFileMigrationSheet</string>
|
||||
<string>saveStatePrecloseSheet</string>
|
||||
|
@ -68558,6 +68912,8 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<string>NSView</string>
|
||||
<string>NSObjectController</string>
|
||||
<string>InputManager</string>
|
||||
<string>NSWindow</string>
|
||||
<string>NSTextField</string>
|
||||
<string>NSObjectController</string>
|
||||
<string>NSWindow</string>
|
||||
<string>NSWindow</string>
|
||||
|
@ -68582,6 +68938,8 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<string>exportRomSavePanelAccessoryView</string>
|
||||
<string>firmwarePanelController</string>
|
||||
<string>inputManager</string>
|
||||
<string>ndsErrorSheet</string>
|
||||
<string>ndsErrorStatusTextField</string>
|
||||
<string>romInfoPanelController</string>
|
||||
<string>saveFileMigrationSheet</string>
|
||||
<string>saveStatePrecloseSheet</string>
|
||||
|
@ -68642,6 +69000,14 @@ y7bMNcy1zTXNtc42zrbPN8+40DnQutE80b7SP9LB00TTxtRJ1MvVTtXR1lXW2Ndc1+DYZNjo2WzZ8dp2
|
|||
<string key="name">inputManager</string>
|
||||
<string key="candidateClassName">InputManager</string>
|
||||
</object>
|
||||
<object class="IBToOneOutletInfo">
|
||||
<string key="name">ndsErrorSheet</string>
|
||||
<string key="candidateClassName">NSWindow</string>
|
||||
</object>
|
||||
<object class="IBToOneOutletInfo">
|
||||
<string key="name">ndsErrorStatusTextField</string>
|
||||
<string key="candidateClassName">NSTextField</string>
|
||||
</object>
|
||||
<object class="IBToOneOutletInfo">
|
||||
<string key="name">romInfoPanelController</string>
|
||||
<string key="candidateClassName">NSObjectController</string>
|
||||
|
|
|
@ -61,6 +61,8 @@ class AudioSampleBlockGenerator;
|
|||
NSWindow *slot1ManagerWindow;
|
||||
NSWindow *saveFileMigrationSheet;
|
||||
NSWindow *saveStatePrecloseSheet;
|
||||
NSWindow *ndsErrorSheet;
|
||||
NSTextField *ndsErrorStatusTextField;
|
||||
NSView *exportRomSavePanelAccessoryView;
|
||||
|
||||
BOOL isSaveStateEdited;
|
||||
|
@ -74,6 +76,7 @@ class AudioSampleBlockGenerator;
|
|||
BOOL isShowingSaveStateDialog;
|
||||
BOOL isShowingFileMigrationDialog;
|
||||
BOOL isUserInterfaceBlockingExecution;
|
||||
BOOL _isNDSErrorSheetAlreadyShown;
|
||||
NSURL *currentSaveStateURL;
|
||||
NSInteger selectedExportRomSaveID;
|
||||
NSInteger selectedRomSaveTypeID;
|
||||
|
@ -130,6 +133,8 @@ class AudioSampleBlockGenerator;
|
|||
@property (readonly) IBOutlet NSWindow *slot1ManagerWindow;
|
||||
@property (readonly) IBOutlet NSWindow *saveFileMigrationSheet;
|
||||
@property (readonly) IBOutlet NSWindow *saveStatePrecloseSheet;
|
||||
@property (readonly) IBOutlet NSWindow *ndsErrorSheet;
|
||||
@property (readonly) IBOutlet NSTextField *ndsErrorStatusTextField;
|
||||
@property (readonly) IBOutlet NSView *exportRomSavePanelAccessoryView;
|
||||
|
||||
@property (readonly) NSImage *iconExecute;
|
||||
|
@ -213,6 +218,7 @@ class AudioSampleBlockGenerator;
|
|||
// Misc IBActions
|
||||
- (IBAction) chooseSlot1R4Directory:(id)sender;
|
||||
- (IBAction) slot1Eject:(id)sender;
|
||||
- (IBAction) simulateEmulationCrash:(id)sender;
|
||||
|
||||
- (IBAction) writeDefaults3DRenderingSettings:(id)sender;
|
||||
- (IBAction) writeDefaultsEmulationSettings:(id)sender;
|
||||
|
|
|
@ -59,6 +59,8 @@
|
|||
@synthesize slot1ManagerWindow;
|
||||
@synthesize saveFileMigrationSheet;
|
||||
@synthesize saveStatePrecloseSheet;
|
||||
@synthesize ndsErrorSheet;
|
||||
@synthesize ndsErrorStatusTextField;
|
||||
@synthesize exportRomSavePanelAccessoryView;
|
||||
|
||||
@synthesize iconExecute;
|
||||
|
@ -116,6 +118,7 @@
|
|||
isShowingSaveStateDialog = NO;
|
||||
isShowingFileMigrationDialog = NO;
|
||||
isUserInterfaceBlockingExecution = NO;
|
||||
_isNDSErrorSheetAlreadyShown = NO;
|
||||
|
||||
currentSaveStateURL = nil;
|
||||
selectedRomSaveTypeID = ROMSAVETYPE_AUTOMATIC;
|
||||
|
@ -155,6 +158,11 @@
|
|||
name:@"org.desmume.DeSmuME.loadRomDidFinish"
|
||||
object:nil];
|
||||
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(handleNDSError:)
|
||||
name:@"org.desmume.DeSmuME.handleNDSError"
|
||||
object:nil];
|
||||
|
||||
return self;
|
||||
}
|
||||
|
||||
|
@ -900,6 +908,12 @@
|
|||
[cdsCore slot1Eject];
|
||||
}
|
||||
|
||||
- (IBAction) simulateEmulationCrash:(id)sender
|
||||
{
|
||||
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
|
||||
[cdsCore setMasterExecute:NO];
|
||||
}
|
||||
|
||||
- (IBAction) writeDefaults3DRenderingSettings:(id)sender
|
||||
{
|
||||
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
|
||||
|
@ -1814,6 +1828,9 @@
|
|||
[[windowController window] displayIfNeeded];
|
||||
}
|
||||
|
||||
[cdsCore execControl]->ApplySettingsOnReset();
|
||||
[cdsCore setMasterExecute:YES];
|
||||
|
||||
// After the ROM loading is complete, send an execute message to the Cocoa DS per
|
||||
// user preferences.
|
||||
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"General_ExecuteROMOnLoad"])
|
||||
|
@ -1901,6 +1918,50 @@
|
|||
return result;
|
||||
}
|
||||
|
||||
- (void) handleNDSError:(NSNotification *)aNotification
|
||||
{
|
||||
[self setIsUserInterfaceBlockingExecution:YES];
|
||||
|
||||
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
|
||||
NSString *ndsErrorString = [cdsCore errorStatus];
|
||||
const char *ndsErrorCString = [ndsErrorString cStringUsingEncoding:NSUTF8StringEncoding];
|
||||
size_t lineCount = 1;
|
||||
|
||||
for (size_t i = 0; i < [ndsErrorString length]; i++)
|
||||
{
|
||||
if (ndsErrorCString[i] == '\n')
|
||||
{
|
||||
lineCount++;
|
||||
}
|
||||
}
|
||||
|
||||
NSRect newSheetFrameRect = [ndsErrorSheet frame];
|
||||
newSheetFrameRect.size.height = 98.0f + (16.0f * lineCount);
|
||||
|
||||
// For some reason, when the sheet is shown for the very first time,
|
||||
// the sheet doesn't drop down as low as it should. However, upon
|
||||
// subsequent showings, the sheet drops down to the intended distance.
|
||||
// To compensate for this difference, the first sheet showing will
|
||||
// have a little added height to it.
|
||||
if (!_isNDSErrorSheetAlreadyShown)
|
||||
{
|
||||
_isNDSErrorSheetAlreadyShown = YES;
|
||||
newSheetFrameRect.size.height += 22.0f;
|
||||
}
|
||||
|
||||
[ndsErrorSheet setFrame:newSheetFrameRect display:NO];
|
||||
|
||||
NSRect newTextFieldRect = [ndsErrorStatusTextField frame];
|
||||
newTextFieldRect.size.height = 16.0f * lineCount;
|
||||
[ndsErrorStatusTextField setFrame:newTextFieldRect];
|
||||
|
||||
[NSApp beginSheet:ndsErrorSheet
|
||||
modalForWindow:(NSWindow *)[[windowList objectAtIndex:0] window]
|
||||
modalDelegate:self
|
||||
didEndSelector:@selector(didEndErrorSheet:returnCode:contextInfo:)
|
||||
contextInfo:nil];
|
||||
}
|
||||
|
||||
- (void) addOutputToCore:(CocoaDSOutput *)theOutput
|
||||
{
|
||||
CocoaDSCore *cdsCore = (CocoaDSCore *)[cdsCoreController content];
|
||||
|
@ -2097,6 +2158,23 @@
|
|||
[cdsCore setSlot1R4URL:selectedDirURL];
|
||||
}
|
||||
|
||||
- (void) didEndErrorSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo
|
||||
{
|
||||
[sheet orderOut:self];
|
||||
[self setIsUserInterfaceBlockingExecution:NO];
|
||||
|
||||
switch (returnCode)
|
||||
{
|
||||
case COCOA_DIALOG_OPTION: // Reset
|
||||
[self reset:self];
|
||||
break;
|
||||
|
||||
case NSCancelButton: // Stop
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
- (void) updateAllWindowTitles
|
||||
{
|
||||
if ([windowList count] < 1)
|
||||
|
|
|
@ -2599,7 +2599,7 @@ public:
|
|||
|
||||
static void DoQuit()
|
||||
{
|
||||
emu_halt();
|
||||
emu_halt(EMUHALT_REASON_USER_REQUESTED_HALT, NDSErrorTag_None);
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
|
|
|
@ -2326,7 +2326,7 @@ static void StepRunLoop_Throttle(bool allowSleep = true, int forceFrameSkip = -1
|
|||
if (frameAdvance && allowSleep)
|
||||
{
|
||||
frameAdvance = false;
|
||||
emu_halt();
|
||||
emu_halt(EMUHALT_REASON_USER_REQUESTED_HALT, NDSErrorTag_None);
|
||||
SPU_Pause(1);
|
||||
}
|
||||
if(execute && emu_paused && !frameAdvance)
|
||||
|
@ -2386,7 +2386,7 @@ bool NDS_Pause(bool showMsg)
|
|||
{
|
||||
if(paused) return false;
|
||||
|
||||
emu_halt();
|
||||
emu_halt(EMUHALT_REASON_USER_REQUESTED_HALT, NDSErrorTag_None);
|
||||
paused = TRUE;
|
||||
SPU_Pause(1);
|
||||
while (!paused) {}
|
||||
|
@ -2620,7 +2620,7 @@ void MenuDeinit()
|
|||
static void ExitRunLoop()
|
||||
{
|
||||
finished = TRUE;
|
||||
emu_halt();
|
||||
emu_halt(EMUHALT_REASON_USER_REQUESTED_HALT, NDSErrorTag_None);
|
||||
}
|
||||
|
||||
class WinWifiHandler : public WifiHandler
|
||||
|
|
Loading…
Reference in New Issue