X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=libpcsxcore%2Flightrec%2Fplugin.c;h=ff7435281a7fabfa3d201326f18e9ca4db1459ca;hb=6e3946143f2a94de0ab8e8ba77bad7675b8dc13b;hp=8d96c0a3e4260968c3b5ab1c8a17f8c9be42512c;hpb=bbda82f029ab0a9bbc91cb411d2cb56745d45510;p=pcsx_rearmed.git diff --git a/libpcsxcore/lightrec/plugin.c b/libpcsxcore/lightrec/plugin.c index 8d96c0a3..ff743528 100644 --- a/libpcsxcore/lightrec/plugin.c +++ b/libpcsxcore/lightrec/plugin.c @@ -6,6 +6,10 @@ #include #include +#if P_HAVE_MMAP +#include +#endif + #include "../cdrom.h" #include "../gpu.h" #include "../gte.h" @@ -287,7 +291,7 @@ static struct lightrec_mem_map lightrec_map[] = { [PSX_MAP_HW_REGISTERS] = { /* Hardware registers */ .pc = 0x1f801000, - .length = 0x2000, + .length = 0x8000, .ops = &hw_regs_ops, }, [PSX_MAP_CACHE_CONTROL] = { @@ -313,6 +317,15 @@ static struct lightrec_mem_map lightrec_map[] = { .length = 0x200000, .mirror_of = &lightrec_map[PSX_MAP_KERNEL_USER_RAM], }, + + /* Mirror of the parallel port. Only used by the PS2/PS3 BIOS */ + [PSX_MAP_PPORT_MIRROR] = { + .pc = 0x1fa00000, + .length = 0x10000, + .mirror_of = &lightrec_map[PSX_MAP_PARALLEL_PORT], + }, + + /* Code buffer */ [PSX_MAP_CODE_BUFFER] = { .length = CODE_BUFFER_SIZE, }, @@ -436,9 +449,17 @@ static int lightrec_plugin_init(void) 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) { @@ -571,8 +592,13 @@ static void lightrec_plugin_shutdown(void) { lightrec_destroy(lightrec_state); - if (!LIGHTREC_CUSTOM_MAP) + 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)