famec: make reentrant
authornotaz <notasas@gmail.com>
Sun, 25 Aug 2013 23:18:37 +0000 (02:18 +0300)
committernotaz <notasas@gmail.com>
Tue, 27 Aug 2013 22:07:26 +0000 (01:07 +0300)
cpu/fame/fame.h
cpu/fame/famec.c

index f05acc7..d534924 100644 (file)
@@ -122,6 +122,20 @@ typedef struct
        unsigned short execinfo;\r
        // PD extension\r
        int            io_cycle_counter; // cycles left\r
+\r
+       unsigned int   Opcode;\r
+       signed int     cycles_needed;\r
+       unsigned short *PC;\r
+       unsigned long  BasePC;\r
+       unsigned int   flag_C;\r
+       unsigned int   flag_V;\r
+       unsigned int   flag_NotZ;\r
+       unsigned int   flag_N;\r
+       unsigned int   flag_X;\r
+       unsigned int   flag_T;\r
+       unsigned int   flag_S;\r
+       unsigned int   flag_I;\r
+\r
        unsigned long  Fetch[M68K_FETCHBANK1];\r
 } M68K_CONTEXT;\r
 \r
index 1aba794..6891526 100644 (file)
@@ -24,7 +24,7 @@
 #define FAMEC_CHECK_BRANCHES\r
 #define FAMEC_EXTRA_INLINE\r
 // #define FAMEC_DEBUG\r
-#define FAMEC_NO_GOTOS\r
+// #define FAMEC_NO_GOTOS\r
 #define FAMEC_ADR_BITS  24\r
 // #define FAMEC_FETCHBITS 8\r
 #define FAMEC_DATABITS  8\r
@@ -528,22 +528,20 @@ M68K_CONTEXT *g_m68kcontext;
 #define m68kcontext (*g_m68kcontext)\r
 \r
 #ifdef FAMEC_NO_GOTOS\r
-static u32 Opcode;\r
-static s32 cycles_needed;\r
-static u16 *PC;\r
-static uptr BasePC;\r
-static u32 flag_C;\r
-static u32 flag_V;\r
-static u32 flag_NotZ;\r
-static u32 flag_N;\r
-static u32 flag_X;\r
+#define Opcode m68kcontext.Opcode\r
+#define cycles_needed m68kcontext.cycles_needed\r
+#define PC m68kcontext.PC\r
+#define BasePC m68kcontext.BasePC\r
+#define flag_C m68kcontext.flag_C\r
+#define flag_V m68kcontext.flag_V\r
+#define flag_NotZ m68kcontext.flag_NotZ\r
+#define flag_N m68kcontext.flag_N\r
+#define flag_X m68kcontext.flag_X\r
 #endif\r
 \r
-#ifdef FAMEC_EMULATE_TRACE\r
-static u32 flag_T;\r
-#endif\r
-static u32 flag_S;\r
-static u32 flag_I;\r
+#define flag_T m68kcontext.flag_T\r
+#define flag_S m68kcontext.flag_S\r
+#define flag_I m68kcontext.flag_I\r
 \r
 static u32 initialised = 0;\r
 \r