void DSPCore_SetState(DSPCoreState new_state) { core_state = new_state; // kick the event, in case we are waiting if (new_state == DSPCORE_RUNNING) step_event.Set(); // Sleep(10); DSPHost_UpdateDebugger(); }
// Delegate to JIT or interpreter as appropriate. // Handle state changes and stepping. int DSPCore_RunCycles(int cycles) { if (dspjit) { if (g_dsp.external_interrupt_waiting) { DSPCore_CheckExternalInterrupt(); DSPCore_CheckExceptions(); DSPCore_SetExternalInterrupt(false); } cyclesLeft = cycles; DSPCompiledCode pExecAddr = (DSPCompiledCode)dspjit->enterDispatcher; pExecAddr(); if (g_dsp.reset_dspjit_codespace) dspjit->ClearIRAMandDSPJITCodespaceReset(); return cyclesLeft; } while (cycles > 0) { switch (core_state) { case DSPCORE_RUNNING: // Seems to slow things down #if defined(_DEBUG) || defined(DEBUGFAST) cycles = DSPInterpreter::RunCyclesDebug(cycles); #else cycles = DSPInterpreter::RunCycles(cycles); #endif break; case DSPCORE_STEPPING: step_event.Wait(); if (core_state != DSPCORE_STEPPING) continue; DSPInterpreter::Step(); cycles--; DSPHost_UpdateDebugger(); break; case DSPCORE_STOP: break; } } return cycles; }
u32 DSPHost_CodeLoaded(const u8 *ptr, int size) { u32 ector_crc = HashEctor(ptr, size); #if defined(_DEBUG) || defined(DEBUGFAST) DumpDSPCode(ptr, size, ector_crc); #endif DSPSymbols::Clear(); // Auto load text file - if none just disassemble. NOTICE_LOG(DSPLLE, "ector_crc: %08x", ector_crc); DSPSymbols::Clear(); bool success = false; switch (ector_crc) { case 0x86840740: success = DSPSymbols::ReadAnnotatedAssembly("../../docs/DSP/DSP_UC_Zelda.txt"); break; case 0x42f64ac4: success = DSPSymbols::ReadAnnotatedAssembly("../../docs/DSP/DSP_UC_Luigi.txt"); break; case 0x07f88145: success = DSPSymbols::ReadAnnotatedAssembly("../../docs/DSP/DSP_UC_AX_07F88145.txt"); break; case 0x3ad3b7ac: success = DSPSymbols::ReadAnnotatedAssembly("../../docs/DSP/DSP_UC_AX_3AD3B7AC.txt"); break; case 0x3daf59b9: success = DSPSymbols::ReadAnnotatedAssembly("../../docs/DSP/DSP_UC_AX_3DAF59B9.txt"); break; case 0x4e8a8b21: success = DSPSymbols::ReadAnnotatedAssembly("../../docs/DSP/DSP_UC_AX_4E8A8B21.txt"); break; case 0xe2136399: success = DSPSymbols::ReadAnnotatedAssembly("../../docs/DSP/DSP_UC_AX_E2136399.txt"); break; case 0xdd7e72d5: success = DSPSymbols::ReadAnnotatedAssembly("../../docs/DSP/DSP_UC_GBA.txt"); break; case 0x347112BA: success = DSPSymbols::ReadAnnotatedAssembly("../../docs/DSP/DSP_UC_AXWii.txt"); break; case 0xD643001F: success = DSPSymbols::ReadAnnotatedAssembly("../../docs/DSP/DSP_UC_SuperMarioGalaxy.txt"); break; default: success = false; break; } if (!success) { DSPSymbols::AutoDisassembly(0x0, 0x1000); } // Always add the ROM. DSPSymbols::AutoDisassembly(0x8000, 0x9000); DSPHost_UpdateDebugger(); return ector_crc; }