From 6262a97203a4820952f37efa412043f1653e68ab Mon Sep 17 00:00:00 2001 From: Chris Moeller Date: Tue, 3 Mar 2015 23:39:38 -0800 Subject: [PATCH] Updated lazyusf2, now supports Turok: Dinosaur Hunter and Turok 2: Seeds of Evil, possibly others --- Frameworks/lazyusf/lazyusf/main/main.c | 1 + Frameworks/lazyusf/lazyusf/r4300/tlb.c | 5 +++-- Frameworks/lazyusf/lazyusf/usf/usf_internal.h | 3 +++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/Frameworks/lazyusf/lazyusf/main/main.c b/Frameworks/lazyusf/lazyusf/main/main.c index 14c13ed6b..1739dc271 100644 --- a/Frameworks/lazyusf/lazyusf/main/main.c +++ b/Frameworks/lazyusf/lazyusf/main/main.c @@ -144,6 +144,7 @@ m64p_error main_start(usf_state_t * state) state->no_compiled_jump = 0; //state->g_delay_si = 1; state->g_delay_sp = 1; + state->g_disable_tlb_write_exception = 1; disable_extra_mem = RDRAMSize == 0x400000; state->count_per_op = COUNT_PER_OP_DEFAULT; if (state->count_per_op <= 0) diff --git a/Frameworks/lazyusf/lazyusf/r4300/tlb.c b/Frameworks/lazyusf/lazyusf/r4300/tlb.c index ce43b1a83..ed0144168 100644 --- a/Frameworks/lazyusf/lazyusf/r4300/tlb.c +++ b/Frameworks/lazyusf/lazyusf/r4300/tlb.c @@ -90,6 +90,8 @@ unsigned int virtual_to_physical_address(usf_state_t * state, unsigned int addre { if (state->tlb_LUT_w[addresse>>12]) return (state->tlb_LUT_w[addresse>>12]&0xFFFFF000)|(addresse&0xFFF); + else if (state->g_disable_tlb_write_exception) + return 0; } else { @@ -104,6 +106,5 @@ unsigned int virtual_to_physical_address(usf_state_t * state, unsigned int addre #endif TLB_refill_exception(state,addresse,w); //return 0x80000000; - //return 0x00000000; - return state->PC->addr; + return 0x00000000; } diff --git a/Frameworks/lazyusf/lazyusf/usf/usf_internal.h b/Frameworks/lazyusf/lazyusf/usf/usf_internal.h index 1678baf57..6aa2889cb 100644 --- a/Frameworks/lazyusf/lazyusf/usf/usf_internal.h +++ b/Frameworks/lazyusf/lazyusf/usf/usf_internal.h @@ -302,6 +302,9 @@ struct usf_state int g_delay_sp/* = 0*/; int g_delay_dp/* = 0*/; + // XXX enable this for some USF sets, safe to enable always + int g_disable_tlb_write_exception; + int g_gs_vi_counter/* = 0*/; unsigned int g_timer_checkpoint;