partially working menu
[fceu.git] / x6502.h
diff --git a/x6502.h b/x6502.h
index 9411108..83adca0 100644 (file)
--- a/x6502.h
+++ b/x6502.h
@@ -52,6 +52,8 @@ extern void FP_FASTAPASS(1) (*MapIRQHook)(int a);
 #define FCEU_IQDPCM     0x10
 #define FCEU_IQFCOUNT   0x20
 #define FCEU_IQTEMP     0x80
+// from 0.98.15
+#define FCEU_IQEXT2    0x02
 
 #if defined(DEBUG_ASM_6502)
 #define TriggerIRQ TriggerIRQ_d
@@ -63,6 +65,8 @@ extern void FP_FASTAPASS(1) (*MapIRQHook)(int a);
 #define X6502_AddCycles X6502_AddCycles_d
 #define X6502_IRQBegin X6502_IRQBegin_d
 #define X6502_IRQEnd X6502_IRQEnd_d
+#define X6502_Rebase X6502_Rebase_d
+#define X6502_GetCycleCount() g_cnt
 #define X6502_C
 #define X6502_A
 #define X6502_D
@@ -74,19 +78,23 @@ extern void FP_FASTAPASS(1) (*MapIRQHook)(int a);
 #define X6502_Reset X6502_Reset_a
 #define X6502_Power X6502_Power_a
 #define X6502_AddCycles X6502_AddCycles_a
-#define X6502_IRQBegin X6502_IRQBegin_a
-#define X6502_IRQEnd X6502_IRQEnd_a
+//#define X6502_IRQBegin X6502_IRQBegin_a
+//#define X6502_IRQEnd X6502_IRQEnd_a
+#define X6502_IRQBegin(w) nes_registers[4]|=w<<8
+#define X6502_IRQEnd(w) nes_registers[4]&=~(w<<8)
+#define X6502_Rebase X6502_Rebase_a
+#define X6502_GetCycleCount() ((int32)nes_registers[7]>>16)
 #define X6502_A
 
 #define X6502_Run(c) \
 { \
  int32 cycles = (c) << 4; /* *16 */ \
  if (PAL) cycles -= (c);  /* *15 */ \
- nes_registers[7]+=cycles; \
if (nes_registers[7] > 0) { \
  cycles = (int32)nes_registers[7]; \
+ nes_registers[7]+=cycles<<16; \
cycles=(int32)nes_registers[7]>>16; \
if (cycles > 0) { \
    X6502_Run_a(); \
-   cycles -= (int32)nes_registers[7]; \
+   cycles -= (int32)nes_registers[7]>>16; \
    asmcpu_update(cycles); \
  } \
 }
@@ -100,6 +108,8 @@ extern void FP_FASTAPASS(1) (*MapIRQHook)(int a);
 #define X6502_AddCycles X6502_AddCycles_c
 #define X6502_IRQBegin X6502_IRQBegin_c
 #define X6502_IRQEnd X6502_IRQEnd_c
+#define X6502_Rebase(...)
+#define X6502_GetCycleCount() X.count
 #define X6502_C
 
 #define X6502_Run(c) \
@@ -114,6 +124,7 @@ extern void FP_FASTAPASS(1) (*MapIRQHook)(int a);
 
 // c
 #ifdef X6502_C
+extern int32 g_cnt;
 void TriggerIRQ_c(void);
 void TriggerNMI_c(void);
 void TriggerNMINSF_c(void);
@@ -138,7 +149,7 @@ void X6502_Power_a(void);
 void X6502_AddCycles_a(int x);
 void X6502_IRQBegin_a(int w);
 void X6502_IRQEnd_a(int w);
-void X6502_rebase_a(void);
+void X6502_Rebase_a(void);
 #endif
 
 // debug
@@ -152,5 +163,6 @@ void X6502_Power_d(void);
 void X6502_AddCycles_d(int x);
 void X6502_IRQBegin_d(int w);
 void X6502_IRQEnd_d(int w);
+void X6502_Rebase_d(void);
 #endif