psp bugfixes, refactoring, stuff
[picodrive.git] / cpu / fame / famec.c
index 3dcb8b1..76965fa 100644 (file)
@@ -26,6 +26,7 @@
 #define FAMEC_ADR_BITS  24\r
 // #define FAMEC_FETCHBITS 8\r
 #define FAMEC_DATABITS  8\r
+#define FAMEC_32BIT_PC\r
 \r
 #define USE_CYCLONE_TIMING\r
 #define USE_CYCLONE_TIMING_DIV\r
@@ -289,15 +290,22 @@ static u32 flag_I;
 #define GET_PC                  \\r
        (u32)PC - BasePC;\r
 \r
+\r
+#ifndef FAMEC_32BIT_PC\r
+\r
 #define SET_PC(A)               \\r
     BasePC = g_m68kcontext->Fetch[((A) >> M68K_FETCHSFT) & M68K_FETCHMASK];    \\r
    /*  BasePC -= (A) & 0xFF000000; */   \\r
     PC = (u16*)(((A) & M68K_ADR_MASK) + BasePC);\r
 \r
-#define SET_PC_BASE(P,B,A)               \\r
-    (B) = g_m68kcontext->Fetch[((A) >> M68K_FETCHSFT) & M68K_FETCHMASK];    \\r
-   /* (B) -= (A) & 0xFF000000; */ \\r
-    (P) = (u16*)(((A) & M68K_ADR_MASK) + (B));\r
+#else\r
+\r
+#define SET_PC(A)               \\r
+    BasePC = g_m68kcontext->Fetch[((A) >> M68K_FETCHSFT) & M68K_FETCHMASK];    \\r
+    BasePC -= (A) & 0xFF000000;    \\r
+    PC = (u16*)((A) + BasePC);\r
+\r
+#endif\r
 \r
 \r
 #define PRE_IO                  \\r
@@ -717,7 +725,10 @@ static FAMEC_EXTRA_INLINE void execute_exception(s32 vect)
                /* adjust SR */\r
                flag_S = M68K_SR_S;\r
 \r
-               newPC&=M68K_ADR_MASK&~1; // don't crash on games with bad vector tables\r
+#ifndef FAMEC_32BIT_PC\r
+               newPC&=M68K_ADR_MASK\r
+#endif\r
+               newPC&=~1; // don't crash on games with bad vector tables\r
 \r
                SET_PC(newPC)\r
 \r