From 82183d4c0d9cd64007504a53e333c7cb7d745f88 Mon Sep 17 00:00:00 2001 From: Paul Cercueil Date: Tue, 25 Jul 2023 19:58:44 +0200 Subject: [PATCH] lightrec: Alloc code buffer with standard memory map Provide Lightrec with a code buffer even when using a non-custom memory map, as some platforms (NGC, Wii) cannot emit code outside a provided code buffer. Signed-off-by: Paul Cercueil --- libpcsxcore/lightrec/mem.c | 2 -- libpcsxcore/lightrec/mem_wiiu.c | 2 -- libpcsxcore/lightrec/plugin.c | 15 ++++++++++++++- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/libpcsxcore/lightrec/mem.c b/libpcsxcore/lightrec/mem.c index c0186da1..2c764701 100644 --- a/libpcsxcore/lightrec/mem.c +++ b/libpcsxcore/lightrec/mem.c @@ -31,8 +31,6 @@ #define MFD_HUGETLB 0x0004 #endif -void *code_buffer; - static const uintptr_t supported_io_bases[] = { 0x0, 0x10000000, diff --git a/libpcsxcore/lightrec/mem_wiiu.c b/libpcsxcore/lightrec/mem_wiiu.c index a9c1c4fe..f62b8b33 100644 --- a/libpcsxcore/lightrec/mem_wiiu.c +++ b/libpcsxcore/lightrec/mem_wiiu.c @@ -14,8 +14,6 @@ #include "mem.h" -void* code_buffer; - static void* wiiu_mmap(uint32_t requested_va, size_t length, void* backing_mem) { if (length < OS_PAGE_SIZE) length = OS_PAGE_SIZE; diff --git a/libpcsxcore/lightrec/plugin.c b/libpcsxcore/lightrec/plugin.c index 16770a70..8d96c0a3 100644 --- a/libpcsxcore/lightrec/plugin.c +++ b/libpcsxcore/lightrec/plugin.c @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -50,6 +51,8 @@ psxRegisters psxRegs; Rcnt rcnts[4]; +void* code_buffer; + static struct lightrec_state *lightrec_state; static char *name = "retroarch.exe"; @@ -432,13 +435,20 @@ 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) { + code_buffer = malloc(CODE_BUFFER_SIZE); + if (!code_buffer) + return -ENOMEM; + } + 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 +570,9 @@ static void lightrec_plugin_apply_config() static void lightrec_plugin_shutdown(void) { lightrec_destroy(lightrec_state); + + if (!LIGHTREC_CUSTOM_MAP) + free(code_buffer); } static void lightrec_plugin_reset(void) -- 2.39.5