diff --git a/Frameworks/lazyusf2/lazyusf2/main/main.c b/Frameworks/lazyusf2/lazyusf2/main/main.c index 7dd5d2956..6b5379baa 100644 --- a/Frameworks/lazyusf2/lazyusf2/main/main.c +++ b/Frameworks/lazyusf2/lazyusf2/main/main.c @@ -187,6 +187,15 @@ m64p_error main_start(usf_state_t * state) state->enable_hle_audio = 0; } + // Assume it's a proper rip + if (state->enablecompare && state->enableFIFOfull) + { + state->g_delay_si = 1; + state->g_delay_ai = 1; + state->g_delay_pi = 1; + state->g_delay_dp = 1; + } + return M64ERR_SUCCESS; } diff --git a/Frameworks/lazyusf2/lazyusf2/rsp_hle/plugin.c b/Frameworks/lazyusf2/lazyusf2/rsp_hle/plugin.c index 0f767d5b9..72b5f49ca 100644 --- a/Frameworks/lazyusf2/lazyusf2/rsp_hle/plugin.c +++ b/Frameworks/lazyusf2/lazyusf2/rsp_hle/plugin.c @@ -32,6 +32,8 @@ #include "hle.h" +extern void rsp_lle_run_task(usf_state_t * state); + /* Global functions needed by HLE core */ void HleVerboseMessage(void* user_defined, const char *message, ...) { @@ -123,5 +125,6 @@ void HleShowCFB(void* user_defined) int HleForwardTask(void* user_defined) { - /* disabled */ + rsp_lle_run_task((usf_state_t *)user_defined); + return 0; } diff --git a/Frameworks/lazyusf2/lazyusf2/rsp_lle/execute.h b/Frameworks/lazyusf2/lazyusf2/rsp_lle/execute.h index fc5f022c6..7c28b8f08 100644 --- a/Frameworks/lazyusf2/lazyusf2/rsp_lle/execute.h +++ b/Frameworks/lazyusf2/lazyusf2/rsp_lle/execute.h @@ -121,7 +121,7 @@ EX: if (state->g_sp.regs[SP_STATUS_REG] & 0x00000040) { /* SP_STATUS_INTR_BREAK */ state->g_r4300.mi.regs[MI_INTR_REG] |= 0x00000001; - //check_interupt(state); + check_interupt(state); } CONTINUE case 040: /* ADD */ @@ -482,7 +482,7 @@ BRANCH: if (state->g_sp.regs[SP_STATUS_REG] & 0x00000002) /* normal exit, from executing BREAK */ return; else if (state->g_r4300.mi.regs[MI_INTR_REG] & 0x00000001) /* interrupt set by MTC0 to break */ - /*check_interupt(state)*/; + check_interupt(state); else if (CFG_WAIT_FOR_CPU_HOST != 0) /* plugin system hack to re-sync */ {} else if (state->g_sp.regs[SP_SEMAPHORE_REG] != 0x00000000) /* semaphore lock fixes */ diff --git a/Frameworks/lazyusf2/lazyusf2/rsp_lle/rsp.c b/Frameworks/lazyusf2/lazyusf2/rsp_lle/rsp.c index c03ff7947..fbc63a155 100644 --- a/Frameworks/lazyusf2/lazyusf2/rsp_lle/rsp.c +++ b/Frameworks/lazyusf2/lazyusf2/rsp_lle/rsp.c @@ -59,6 +59,11 @@ void real_run_rsp(usf_state_t * state, uint32_t cycles) run_task(state); } +void rsp_lle_run_task(usf_state_t * state) +{ + run_task(state); +} + int32_t init_rsp_lle(usf_state_t * state) { state->CR[0x0] = &state->g_sp.regs[SP_MEM_ADDR_REG]; @@ -105,5 +110,7 @@ int32_t init_rsp_lle(usf_state_t * state) &state->g_dp.dpc_regs[DPC_TMEM_REG], state); + state->hle.hle_gfx = 1; + return 0; } diff --git a/Frameworks/lazyusf2/lazyusf2/rsp_lle/rsp.h b/Frameworks/lazyusf2/lazyusf2/rsp_lle/rsp.h index 0422ee3d9..2aa79db58 100644 --- a/Frameworks/lazyusf2/lazyusf2/rsp_lle/rsp.h +++ b/Frameworks/lazyusf2/lazyusf2/rsp_lle/rsp.h @@ -82,6 +82,8 @@ int32_t init_rsp_lle(usf_state_t * state); NOINLINE static void run_task(usf_state_t * state); #include "execute.h" +void rsp_lle_run_task(usf_state_t * state); + #ifdef SP_EXECUTE_LOG #include "matrix.h"