X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libpcsxcore%2Flightrec%2Fplugin.c;h=bd3ee222581747a35446e44cfc8fe4302cbc3d61;hb=cdfa353653a8dec134873b2e4b38a7ebf98fc0ef;hp=13c11e346cd4e67cc338b12f40f770f395fab169;hpb=ba3814c189d3bd2332b66fb6c633a7d028e618fe;p=pcsx_rearmed.git diff --git a/libpcsxcore/lightrec/plugin.c b/libpcsxcore/lightrec/plugin.c index 13c11e34..bd3ee222 100644 --- a/libpcsxcore/lightrec/plugin.c +++ b/libpcsxcore/lightrec/plugin.c @@ -54,7 +54,6 @@ static char *name = "retroarch.exe"; static bool use_lightrec_interpreter; static bool use_pcsx_interpreter; static bool booting; -static u32 lightrec_begin_cycles; enum my_cp2_opcodes { OP_CP2_RTPS = 0x01, @@ -126,9 +125,11 @@ static void cop2_op(struct lightrec_state *state, u32 func) static bool has_interrupt(void) { + struct lightrec_registers *regs = lightrec_get_registers(lightrec_state); + return ((psxHu32(0x1070) & psxHu32(0x1074)) && - (psxRegs.CP0.n.Status & 0x401) == 0x401) || - (psxRegs.CP0.n.Status & psxRegs.CP0.n.Cause & 0x0300); + (regs->cp0[12] & 0x401) == 0x401) || + (regs->cp0[12] & regs->cp0[13] & 0x0300); } static void lightrec_restore_state(struct lightrec_state *state) @@ -343,7 +344,7 @@ static bool lightrec_can_hw_direct(u32 kaddr, bool is_write, u8 size) case 0x1f801074: return !is_write; default: - return is_write || kaddr < 0x1f801c00 || kaddr >= 0x1f801e00; + return kaddr < 0x1f801c00 || kaddr >= 0x1f801e00; } default: switch (kaddr) { @@ -390,20 +391,17 @@ static int lightrec_plugin_init(void) lightrec_map[PSX_MAP_KERNEL_USER_RAM].address = psxM; lightrec_map[PSX_MAP_BIOS].address = psxR; lightrec_map[PSX_MAP_SCRATCH_PAD].address = psxH; + lightrec_map[PSX_MAP_HW_REGISTERS].address = psxH + 0x1000; lightrec_map[PSX_MAP_PARALLEL_PORT].address = psxP; if (LIGHTREC_CUSTOM_MAP) { lightrec_map[PSX_MAP_MIRROR1].address = psxM + 0x200000; lightrec_map[PSX_MAP_MIRROR2].address = psxM + 0x400000; lightrec_map[PSX_MAP_MIRROR3].address = psxM + 0x600000; - lightrec_map[PSX_MAP_HW_REGISTERS].address = psxH + 0x1000; lightrec_map[PSX_MAP_CODE_BUFFER].address = code_buffer; } use_lightrec_interpreter = !!getenv("LIGHTREC_INTERPRETER"); - if (getenv("LIGHTREC_BEGIN_CYCLES")) - lightrec_begin_cycles = (unsigned int) strtol( - getenv("LIGHTREC_BEGIN_CYCLES"), NULL, 0); lightrec_state = lightrec_init(name, lightrec_map, ARRAY_SIZE(lightrec_map),