X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=libpcsxcore%2Fnew_dynarec%2Femu_if.c;h=22db5d118480955096706b57042017aefb88ebbc;hb=HEAD;hp=06612dbf9a4cf88314081b3ee9e003fea7ca7839;hpb=90f98e7cf5ed4fdabf6b6ff16d6886fef9dc7bbc;p=pcsx_rearmed.git diff --git a/libpcsxcore/new_dynarec/emu_if.c b/libpcsxcore/new_dynarec/emu_if.c index 06612dbf..6c1b48c5 100644 --- a/libpcsxcore/new_dynarec/emu_if.c +++ b/libpcsxcore/new_dynarec/emu_if.c @@ -9,9 +9,10 @@ #include "emu_if.h" #include "pcsxmem.h" -#include "events.h" #include "../psxhle.h" #include "../psxinterpreter.h" +#include "../psxcounters.h" +#include "../psxevents.h" #include "../r3000a.h" #include "../gte_arm.h" #include "../gte_neon.h" @@ -40,19 +41,6 @@ void pcsx_mtc0_ds(u32 reg, u32 val) MTC0(&psxRegs, reg, val); } -static void new_dyna_restore(void) -{ - int i; - for (i = 0; i < PSXINT_COUNT; i++) - event_cycles[i] = psxRegs.intCycle[i].sCycle + psxRegs.intCycle[i].cycle; - - event_cycles[PSXINT_RCNT] = psxNextsCounter + psxNextCounter; - psxRegs.interrupt |= 1 << PSXINT_RCNT; - psxRegs.interrupt &= (1 << PSXINT_COUNT) - 1; - - new_dyna_pcsx_mem_load_state(); -} - void new_dyna_freeze(void *f, int mode) { const char header_save[8] = "ariblks"; @@ -71,7 +59,7 @@ void new_dyna_freeze(void *f, int mode) SaveFuncs.write(f, addrs, size); } else { - new_dyna_restore(); + new_dyna_pcsx_mem_load_state(); bytes = SaveFuncs.read(f, header, sizeof(header)); if (bytes != sizeof(header) || strcmp(header, header_save)) { @@ -240,7 +228,7 @@ static void ari64_reset() { new_dyna_pcsx_mem_reset(); new_dynarec_invalidate_all_pages(); - new_dyna_restore(); + new_dyna_pcsx_mem_load_state(); pending_exception = 1; } @@ -248,8 +236,6 @@ static void ari64_reset() // (HLE softcall exit and BIOS fastboot end) static void ari64_execute_until() { - schedule_timeslice(); - evprintf("ari64_execute %08x, %u->%u (%d)\n", psxRegs.pc, psxRegs.cycle, next_interupt, next_interupt - psxRegs.cycle); @@ -262,6 +248,7 @@ static void ari64_execute_until() static void ari64_execute() { while (!stop) { + schedule_timeslice(); ari64_execute_until(); evprintf("drc left @%08x\n", psxRegs.pc); } @@ -272,6 +259,7 @@ static void ari64_execute_block(enum blockExecCaller caller) if (caller == EXEC_CALLER_BOOT) stop++; + next_interupt = psxRegs.cycle + 1; ari64_execute_until(); if (caller == EXEC_CALLER_BOOT) @@ -297,7 +285,8 @@ static void ari64_notify(enum R3000Anote note, void *data) { case R3000ACPU_NOTIFY_BEFORE_SAVE: break; case R3000ACPU_NOTIFY_AFTER_LOAD: - ari64_reset(); + if (data == NULL) + ari64_reset(); psxInt.Notify(note, data); break; }