X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libpcsxcore%2Flightrec%2Fplugin.c;h=b347bb63731ec9f6d2ede9bbec6a94729dc7a278;hb=70939d49a6625d10c64306451cfb1f64557e780e;hp=d042fc4fb24fc33b20a5a6592e89a8a94a6954dd;hpb=46a38bdab1a4d9f578a368705a9e3e144fd81189;p=pcsx_rearmed.git diff --git a/libpcsxcore/lightrec/plugin.c b/libpcsxcore/lightrec/plugin.c index d042fc4f..b347bb63 100644 --- a/libpcsxcore/lightrec/plugin.c +++ b/libpcsxcore/lightrec/plugin.c @@ -15,6 +15,9 @@ #include "../frontend/main.h" +#include "mem.h" +#include "plugin.h" + #if (defined(__arm__) || defined(__aarch64__)) && !defined(ALLOW_LIGHTREC_ON_ARM) #error "Lightrec should not be used on ARM (please specify DYNAREC=ari64 to make)" #endif @@ -289,6 +292,9 @@ static struct lightrec_mem_map lightrec_map[] = { .length = 0x200000, .mirror_of = &lightrec_map[PSX_MAP_KERNEL_USER_RAM], }, + [PSX_MAP_CODE_BUFFER] = { + .length = CODE_BUFFER_SIZE, + }, }; static void lightrec_enable_ram(struct lightrec_state *state, bool enable) @@ -311,6 +317,13 @@ static int lightrec_plugin_init(void) lightrec_map[PSX_MAP_SCRATCH_PAD].address = psxH; 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_CODE_BUFFER].address = code_buffer; + } + lightrec_debug = !!getenv("LIGHTREC_DEBUG"); lightrec_very_debug = !!getenv("LIGHTREC_VERY_DEBUG"); use_lightrec_interpreter = !!getenv("LIGHTREC_INTERPRETER"); @@ -554,6 +567,28 @@ static void lightrec_plugin_reset(void) booting = true; } +void lightrec_plugin_prepare_load_state(void) +{ + struct lightrec_registers *regs; + + regs = lightrec_get_registers(lightrec_state); + memcpy(regs->cp2d, &psxRegs.CP2, sizeof(regs->cp2d) + sizeof(regs->cp2c)); + memcpy(regs->cp0, &psxRegs.CP0, sizeof(regs->cp0)); + memcpy(regs->gpr, &psxRegs.GPR, sizeof(regs->gpr)); + + lightrec_invalidate_all(lightrec_state); +} + +void lightrec_plugin_prepare_save_state(void) +{ + struct lightrec_registers *regs; + + regs = lightrec_get_registers(lightrec_state); + memcpy(&psxRegs.CP2, regs->cp2d, sizeof(regs->cp2d) + sizeof(regs->cp2c)); + memcpy(&psxRegs.CP0, regs->cp0, sizeof(regs->cp0)); + memcpy(&psxRegs.GPR, regs->gpr, sizeof(regs->gpr)); +} + R3000Acpu psxRec = { lightrec_plugin_init,