psxmem: remove hard requirement for a mapping
authornotaz <notasas@gmail.com>
Sat, 6 Dec 2014 16:26:16 +0000 (18:26 +0200)
committernotaz <notasas@gmail.com>
Sat, 6 Dec 2014 16:26:16 +0000 (18:26 +0200)
not all platforms have 1f800000 free
not all mmap implementations use the addr hint..

libpcsxcore/new_dynarec/assem_arm.c
libpcsxcore/psxmem.c

index 45edd65..9ee832e 100644 (file)
@@ -3999,10 +3999,16 @@ static int emit_fastpath_cmp_jump(int i,int addr,int *addr_reg_override)
     type=0;
   }
   else if(type==MTYPE_1F80) { // scratchpad
     type=0;
   }
   else if(type==MTYPE_1F80) { // scratchpad
-    emit_addimm(addr,-0x1f800000,HOST_TEMPREG);
-    emit_cmpimm(HOST_TEMPREG,0x1000);
-    jaddr=(int)out;
-    emit_jc(0);
+    if (psxH == (void *)0x1f800000) {
+      emit_addimm(addr,-0x1f800000,HOST_TEMPREG);
+      emit_cmpimm(HOST_TEMPREG,0x1000);
+      jaddr=(int)out;
+      emit_jc(0);
+    }
+    else {
+      // do usual RAM check, jump will go to the right handler
+      type=0;
+    }
   }
 #endif
 
   }
 #endif
 
index 2ca5dd5..7001744 100644 (file)
@@ -150,11 +150,11 @@ int psxMemInit() {
        }
 
        psxP = &psxM[0x200000];
        }
 
        psxP = &psxM[0x200000];
-       psxH = psxMap(0x1f800000, 0x10000, 1, MAP_TAG_OTHER);
+       psxH = psxMap(0x1f800000, 0x10000, 0, MAP_TAG_OTHER);
        psxR = psxMap(0x1fc00000, 0x80000, 0, MAP_TAG_OTHER);
 
        if (psxMemRLUT == NULL || psxMemWLUT == NULL || 
        psxR = psxMap(0x1fc00000, 0x80000, 0, MAP_TAG_OTHER);
 
        if (psxMemRLUT == NULL || psxMemWLUT == NULL || 
-               psxR == NULL || psxP == NULL || psxH != (void *)0x1f800000) {
+           psxR == NULL || psxP == NULL || psxH == NULL) {
                SysMessage(_("Error allocating memory!"));
                psxMemShutdown();
                return -1;
                SysMessage(_("Error allocating memory!"));
                psxMemShutdown();
                return -1;