X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=platform%2Flibretro.c;h=d54309787120609632e3961983e463656a781920;hb=51e4662411c4aa87085c30a1709ded83b8ee17dd;hp=d46cc4a2c180320ae324c128eb11728902d8e683;hpb=86b38dc46d93354418faf5aecd430f8661adb4b3;p=picodrive.git diff --git a/platform/libretro.c b/platform/libretro.c index d46cc4a..d543097 100644 --- a/platform/libretro.c +++ b/platform/libretro.c @@ -10,7 +10,11 @@ #include #include #include +#ifndef _WIN32 #include +#else +#include +#endif #include #ifdef __MACH__ #include @@ -66,27 +70,65 @@ void cache_flush_d_inval_i(void *start, void *end) #endif } -void *plat_mmap(unsigned long addr, size_t size, int need_exec, int is_fixed) +#ifdef _WIN32 +void* mmap(void *desired_addr, + size_t len, + int mmap_prot, + int mmap_flags, + HANDLE fd, + size_t off) { - int flags = MAP_PRIVATE | MAP_ANONYMOUS; - void *req, *ret; - - req = (void *)addr; - ret = mmap(req, size, PROT_READ | PROT_WRITE, flags, -1, 0); - if (ret == MAP_FAILED) { - lprintf("mmap(%08lx, %zd) failed: %d\n", addr, size, errno); - return NULL; - } - - if (addr != 0 && ret != (void *)addr) { - lprintf("warning: wanted to map @%08lx, got %p\n", - addr, ret); + return malloc(len); +} - if (is_fixed) { - munmap(ret, size); - return NULL; - } - } +void munmap( + void *base_addr, + size_t len +) +{ + free(base_addr); +} +#define MAP_FAILED 0 +#define PROT_READ 0 +#define PROT_WRITE 0 +#define MAP_PRIVATE 0 +#define MAP_ANONYMOUS 0 +#endif +void *plat_mmap(unsigned long addr, size_t size, int need_exec, int is_fixed) +{ +#ifndef _WIN32 + int flags = 0; + void *ret = mmap((void*)addr,size,PROT_READ | PROT_WRITE, flags, -1, 0); + if (addr != 0 && ret != (void *)addr) { + lprintf("warning: wanted to map @%08lx, got %p\n", + addr, ret); + + if (is_fixed) { + munmap(ret, size); + return NULL; + } + } +#else + int flags = MAP_PRIVATE | MAP_ANONYMOUS; + void *req, *ret; + + req = (void *)addr; + ret = mmap(req, size, PROT_READ | PROT_WRITE, flags, -1, 0); + if (ret == MAP_FAILED) { + lprintf("mmap(%08lx, %zd) failed: %d\n", addr, size, errno); + return NULL; + } + + if (addr != 0 && ret != (void *)addr) { + lprintf("warning: wanted to map @%08lx, got %p\n", + addr, ret); + + if (is_fixed) { + munmap(ret, size); + return NULL; + } + } +#endif return ret; } @@ -132,10 +174,15 @@ void plat_munmap(void *ptr, size_t size) int plat_mem_set_exec(void *ptr, size_t size) { - int ret = mprotect(ptr, size, PROT_READ | PROT_WRITE | PROT_EXEC); - if (ret != 0) - lprintf("mprotect(%p, %zd) failed: %d\n", ptr, size, errno); - +#ifdef _WIN32 + int ret = VirtualProtect(ptr,size,PAGE_EXECUTE_READWRITE,0); + if (ret == 0) + lprintf("mprotect(%p, %zd) failed: %d\n", ptr, size, 0); +#else + int ret = mprotect(ptr, size, PROT_READ | PROT_WRITE | PROT_EXEC); + if (ret != 0) + lprintf("mprotect(%p, %zd) failed: %d\n", ptr, size, errno); +#endif return ret; }