Updated lazyusf2
parent
3f55ef085a
commit
d4c971f9d2
|
@ -305,8 +305,6 @@ void translate_event_queue(usf_state_t * state, unsigned int base)
|
|||
}
|
||||
add_interupt_event_count(state, COMPARE_INT, state->g_cp0_regs[CP0_COMPARE_REG]);
|
||||
add_interupt_event_count(state, SPECIAL_INT, 0);
|
||||
|
||||
r4300_reset_checkpoint(state, base);
|
||||
}
|
||||
|
||||
int save_eventqueue_infos(usf_state_t * state, char *buf)
|
||||
|
@ -505,8 +503,6 @@ static void nmi_int_handler(usf_state_t * state)
|
|||
|
||||
void osal_fastcall gen_interupt(usf_state_t * state)
|
||||
{
|
||||
r4300_checkpoint(state);
|
||||
|
||||
if (state->stop == 1)
|
||||
{
|
||||
state->g_gs_vi_counter = 0; // debug
|
||||
|
|
|
@ -738,8 +738,5 @@ void pure_interpreter(usf_state_t * state)
|
|||
state->PC = &state->interp_PC;
|
||||
|
||||
while (!state->stop)
|
||||
{
|
||||
r4300_checkpoint(state);
|
||||
InterpretOpcode(state);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -272,31 +272,8 @@ void r4300_begin(usf_state_t * state)
|
|||
}
|
||||
}
|
||||
|
||||
void r4300_reset_checkpoint(usf_state_t * state, unsigned int new_cp0_count)
|
||||
{
|
||||
unsigned int diff = state->g_cp0_regs[CP0_COUNT_REG] - state->g_timer_checkpoint;
|
||||
state->g_timer_checkpoint = new_cp0_count - diff;
|
||||
}
|
||||
|
||||
void r4300_checkpoint(usf_state_t * state)
|
||||
{
|
||||
if (state->g_cp0_regs[CP0_COUNT_REG] - state->g_timer_checkpoint >= state->count_per_op * 20000000)
|
||||
{
|
||||
if (state->last_sample_buffer_count == state->sample_buffer_count)
|
||||
{
|
||||
DebugMessage(state, 1, "Emulator appears to be stuck!");
|
||||
return;
|
||||
}
|
||||
state->last_sample_buffer_count = state->sample_buffer_count;
|
||||
state->g_timer_checkpoint = state->g_cp0_regs[CP0_COUNT_REG];
|
||||
}
|
||||
}
|
||||
|
||||
void r4300_execute(usf_state_t * state)
|
||||
{
|
||||
state->g_timer_checkpoint = state->g_cp0_regs[CP0_COUNT_REG];
|
||||
state->last_sample_buffer_count = state->sample_buffer_count;
|
||||
|
||||
if (state->r4300emu == CORE_PURE_INTERPRETER)
|
||||
{
|
||||
pure_interpreter(state);
|
||||
|
@ -319,10 +296,7 @@ void r4300_execute(usf_state_t * state)
|
|||
return;
|
||||
|
||||
while (!state->stop)
|
||||
{
|
||||
r4300_checkpoint(state);
|
||||
state->PC->ops(state);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -36,9 +36,6 @@ void r4300_begin(usf_state_t *);
|
|||
void r4300_execute(usf_state_t *);
|
||||
void r4300_end(usf_state_t *);
|
||||
|
||||
void r4300_reset_checkpoint(usf_state_t *, unsigned int new_cp0_count);
|
||||
void r4300_checkpoint(usf_state_t *);
|
||||
|
||||
/* Jump to the given address. This works for all r4300 emulator, but is slower.
|
||||
* Use this for common code which can be executed from any r4300 emulator. */
|
||||
void generic_jump_to(usf_state_t *, unsigned int address);
|
||||
|
|
|
@ -631,10 +631,10 @@ void gentest_idle(usf_state_t * state)
|
|||
|
||||
mov_reg32_m32(state, reg, (unsigned int *)(&state->next_interupt));
|
||||
sub_reg32_m32(state, reg, (unsigned int *)(&state->g_cp0_regs[CP0_COUNT_REG]));
|
||||
cmp_reg32_imm8(state, reg, 5);
|
||||
jbe_rj(state, 18);
|
||||
cmp_reg32_imm8(state, reg, 3);
|
||||
jbe_rj(state, 12);
|
||||
|
||||
sub_reg32_imm32(state, reg, 2); // 6
|
||||
//sub_reg32_imm32(state, reg, 2); // 6
|
||||
and_reg32_imm32(state, reg, 0xFFFFFFFC); // 6
|
||||
add_m32_reg32(state, (unsigned int *)(&state->g_cp0_regs[CP0_COUNT_REG]), reg); // 6
|
||||
|
||||
|
|
Loading…
Reference in New Issue