#include <stdlib.h>\r
#include <string.h>\r
\r
+#ifdef __GNUC__\r
+#pragma GCC diagnostic ignored "-Wunused-variable"\r
+#endif\r
+\r
#include "fame.h"\r
\r
\r
#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
#undef s32\r
#endif\r
\r
+#ifdef uptr\r
+#undef uptr\r
+#endif\r
+\r
#define u8 unsigned char\r
#define s8 signed char\r
#define u16 unsigned short\r
#define s16 signed short\r
#define u32 unsigned int\r
#define s32 signed int\r
+#define uptr unsigned long\r
\r
/*\r
typedef unsigned char u8;\r
#define M68K_PPL (m68kcontext.sr >> 8) & 7\r
\r
#define GET_PC \\r
- ((u32)PC - BasePC)\r
+ (u32)((uptr)PC - BasePC)\r
\r
\r
#ifdef FAMEC_CHECK_BRANCHES\r
#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 u32 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
u32 fm68k_get_pc(M68K_CONTEXT *context)\r
{\r
#ifdef FAMEC_NO_GOTOS\r
- return (context->execinfo & M68K_RUNNING)?(u32)PC-BasePC:context->pc;\r
+ return (context->execinfo & M68K_RUNNING)?(uptr)PC-BasePC:context->pc;\r
#else\r
return context->pc; // approximate PC in this mode\r
#endif\r
}\r
\r
\r
-static void setup_jumptable(void);\r
-\r
#ifdef FAMEC_NO_GOTOS\r
\r
#define OPCODE(N_OP) static void OP_##N_OP(void)\r
u32 Opcode;\r
s32 cycles_needed;\r
u16 *PC;\r
- u32 BasePC;\r
+ uptr BasePC;\r
u32 flag_C;\r
u32 flag_V;\r
u32 flag_NotZ;\r
u32 line;\r
m68kcontext.io_cycle_counter = cycles_needed;\r
cycles_needed = 0;\r
+ if (m68kcontext.io_cycle_counter <= 0) goto famec_End;\r
line=interrupt_chk__();\r
if (line>0)\r
{\r