optimizations, fixes, hacks, psp, ...
[picodrive.git] / cpu / fame / famec.c
index 6b147b2..e8753e4 100644 (file)
@@ -16,8 +16,8 @@
 \r
 // Options //\r
 #define FAMEC_ROLL_INLINE\r
-#define FAMEC_EMULATE_TRACE\r
-#define FAMEC_CHECK_BRANCHES\r
+//#define FAMEC_EMULATE_TRACE\r
+//#define FAMEC_CHECK_BRANCHES\r
 #define FAMEC_EXTRA_INLINE\r
 // #define FAMEC_DEBUG\r
 //#define FAMEC_NO_GOTOS\r
@@ -280,11 +280,18 @@ typedef signed int        s32;
        ((u32)PC - BasePC)\r
 \r
 \r
+#ifdef FAMEC_CHECK_BRANCHES\r
+#define FORCE_ALIGNMENT(pc)\r
+#else\r
+#define FORCE_ALIGNMENT(pc) pc&=~1;\r
+#endif\r
+\r
 #ifndef FAMEC_32BIT_PC\r
 \r
 #define SET_PC(A)               \\r
 { \\r
     u32 pc = A; \\r
+    FORCE_ALIGNMENT(pc); \\r
     BasePC = m68kcontext.Fetch[(pc >> M68K_FETCHSFT) & M68K_FETCHMASK];    \\r
     PC = (u16*)((pc & M68K_ADR_MASK) + BasePC);        \\r
 }\r
@@ -294,6 +301,7 @@ typedef signed int  s32;
 #define SET_PC(A)               \\r
 { \\r
     u32 pc = A; \\r
+    FORCE_ALIGNMENT(pc); \\r
     BasePC = m68kcontext.Fetch[(pc >> M68K_FETCHSFT) & M68K_FETCHMASK];    \\r
     BasePC -= pc & 0xFF000000;    \\r
     PC = (u16*)(pc + BasePC); \\r
@@ -734,7 +742,9 @@ static FAMEC_EXTRA_INLINE u32 execute_exception(s32 vect, u32 oldPC, u32 oldSR)
 #ifndef FAMEC_32BIT_PC\r
        newPC&=M68K_ADR_MASK\r
 #endif\r
+#ifdef FAMEC_CHECK_BRANCHES\r
        newPC&=~1; // don't crash on games with bad vector tables\r
+#endif\r
 \r
        // SET_PC(newPC)\r
 \r
@@ -948,6 +958,7 @@ famec_End:
 #ifdef PICODRIVE_HACK\r
 dualcore_mode:\r
 \r
+       while (1)\r
        {\r
                extern int SekCycleAim, SekCycleCnt, SekCycleAimS68k, SekCycleCntS68k;\r
                #define PS_STEP_M68K ((488<<16)/20) // ~24\r
@@ -989,7 +1000,6 @@ dualcore_mode:
                        }\r
                        cycles = m68kcontext.io_cycle_counter = 0;\r
                }\r
-               goto dualcore_mode;\r
        }\r
 #endif\r
 \r