X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?p=pcsx_rearmed.git;a=blobdiff_plain;f=libpcsxcore%2Fpsxmem.c;h=ddcd05be45abcd2b52a2d70a6b70d63cec55ff1c;hp=f0a884191b3529ff6b72780e7db3c7ca7ee06b13;hb=b2058a5bead44a5b5ecaa903e9bbf3231477fde9;hpb=ffb0b9e0f051789f97f5efdcfab0b261e62688f9 diff --git a/libpcsxcore/psxmem.c b/libpcsxcore/psxmem.c index f0a88419..ddcd05be 100644 --- a/libpcsxcore/psxmem.c +++ b/libpcsxcore/psxmem.c @@ -60,6 +60,16 @@ u8 **psxMemRLUT = NULL; 0xbfc0_0000-0xbfc7_ffff BIOS Mirror (512K) Uncached */ +#if 1 +void *plat_mmap(unsigned long addr, size_t size, int need_exec, int is_fixed); +void plat_munmap(void *ptr, size_t size); +#else +#define plat_mmap(addr, size, need_exec, is_fixed) \ + mmap((void *)addr, size, PROT_WRITE | PROT_READ, \ + MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0) +#define plat_munmap munmap +#endif + int psxMemInit() { int i; @@ -68,18 +78,26 @@ int psxMemInit() { memset(psxMemRLUT, 0, 0x10000 * sizeof(void *)); memset(psxMemWLUT, 0, 0x10000 * sizeof(void *)); - psxM = mmap((void *)0x80000000, 0x00210000, - PROT_WRITE | PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + psxM = plat_mmap(0x80000000, 0x00210000, 0, 1); +#ifndef RAM_FIXED + if (psxM == MAP_FAILED) + psxM = mmap((void *)0x70000000, 0x00210000, + PROT_WRITE | PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0); +#endif + if (psxM == MAP_FAILED) { + SysMessage(_("mapping main RAM failed")); + return -1; + } psxP = &psxM[0x200000]; psxH = mmap((void *)0x1f800000, 0x00010000, - PROT_WRITE | PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); + PROT_WRITE | PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1, 0); - psxR = mmap((void *)0x9fc00000, 0x80000, + psxR = mmap((void *)0x1fc00000, 0x80000, PROT_WRITE | PROT_READ, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); if (psxMemRLUT == NULL || psxMemWLUT == NULL || - psxM != (void *)0x80000000 || psxR != (void *)0x9fc00000 || + psxR == MAP_FAILED || psxP == NULL || psxH != (void *)0x1f800000) { SysMessage(_("Error allocating memory!")); return -1; @@ -135,7 +153,8 @@ void psxMemReset() { } void psxMemShutdown() { - munmap(psxM, 0x00220000); + plat_munmap(psxM, 0x00210000); + munmap(psxH, 0x1f800000); munmap(psxR, 0x80000); free(psxMemRLUT);