X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libpcsxcore%2Flightrec%2Fplugin.c;h=8d96c0a3e4260968c3b5ab1c8a17f8c9be42512c;hb=bbda82f029ab0a9bbc91cb411d2cb56745d45510;hp=ec991105ac4015b8bdd72818258f8862331f7076;hpb=c174cf6a6d5d5cc92ba9b67ceb155365630aa16d;p=pcsx_rearmed.git diff --git a/libpcsxcore/lightrec/plugin.c b/libpcsxcore/lightrec/plugin.c index ec991105..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"; @@ -399,10 +402,29 @@ static bool lightrec_can_hw_direct(u32 kaddr, bool is_write, u8 size) } } +#if defined(HW_DOL) || defined(HW_RVL) +static void lightrec_code_inv(void *ptr, uint32_t len) +{ + extern void DCFlushRange(void *ptr, u32 len); + extern void ICInvalidateRange(void *ptr, u32 len); + + DCFlushRange(ptr, len); + ICInvalidateRange(ptr, len); +} +#elif defined(HW_WUP) +static void lightrec_code_inv(void *ptr, uint32_t len) +{ + wiiu_clear_cache(ptr, (void *)((uintptr_t)ptr + len)); +} +#endif + static const struct lightrec_ops lightrec_ops = { .cop2_op = cop2_op, .enable_ram = lightrec_enable_ram, .hw_direct = lightrec_can_hw_direct, +#if defined(HW_DOL) || defined(HW_RVL) || defined(HW_WUP) + .code_inv = lightrec_code_inv, +#endif }; static int lightrec_plugin_init(void) @@ -413,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, @@ -541,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)