X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libpcsxcore%2Flightrec%2Fplugin.c;h=72201c16f11b35b7749404c9fd5866a701bf00ce;hb=0e720fb13f7933930608b62854ea8f4a9d97c934;hp=16770a707da3757f0ae381faf16e5f345fee2a30;hpb=323bb280df855a9ab8474018f1f5e4de65c398b2;p=pcsx_rearmed.git diff --git a/libpcsxcore/lightrec/plugin.c b/libpcsxcore/lightrec/plugin.c index 16770a70..72201c16 100644 --- a/libpcsxcore/lightrec/plugin.c +++ b/libpcsxcore/lightrec/plugin.c @@ -1,10 +1,15 @@ #include +#include #include #include #include #include #include +#if P_HAVE_MMAP +#include +#endif + #include "../cdrom.h" #include "../gpu.h" #include "../gte.h" @@ -50,6 +55,8 @@ psxRegisters psxRegs; Rcnt rcnts[4]; +void* code_buffer; + static struct lightrec_state *lightrec_state; static char *name = "retroarch.exe"; @@ -432,13 +439,28 @@ static int lightrec_plugin_init(void) lightrec_map[PSX_MAP_HW_REGISTERS].address = psxH + 0x1000; lightrec_map[PSX_MAP_PARALLEL_PORT].address = psxP; + if (!LIGHTREC_CUSTOM_MAP) { +#if P_HAVE_MMAP + code_buffer = mmap(0, CODE_BUFFER_SIZE, + PROT_EXEC | PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + if (code_buffer == MAP_FAILED) + return -ENOMEM; +#else + code_buffer = malloc(CODE_BUFFER_SIZE); + if (!code_buffer) + return -ENOMEM; +#endif + } + 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_map[PSX_MAP_CODE_BUFFER].address = code_buffer; + use_lightrec_interpreter = !!getenv("LIGHTREC_INTERPRETER"); lightrec_state = lightrec_init(name, @@ -560,6 +582,14 @@ static void lightrec_plugin_apply_config() static void lightrec_plugin_shutdown(void) { lightrec_destroy(lightrec_state); + + if (!LIGHTREC_CUSTOM_MAP) { +#if P_HAVE_MMAP + munmap(code_buffer, CODE_BUFFER_SIZE); +#else + free(code_buffer); +#endif + } } static void lightrec_plugin_reset(void)