Esempio n. 1
0
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();
}
Esempio n. 2
0
// 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;
}
Esempio n. 3
0
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;
}