uint16 PC; /* I'll change this to uint32 later... */
/* I'll need to AND PC after increments to 0xFFFF */
/* when I do, though. Perhaps an IPC() macro? */
- uint8 A,X,Y,S,P,mooPI,PZ;
+ uint8 A,X,Y,S,P,mooPI;
uint8 DB; /* Data bus "cache" for reads from certain areas */
uint8 IRQlow; /* Simulated IRQ pin held low(or is it high?). */
uint8 jammed;
#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
#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
#define X6502_AddCycles X6502_AddCycles_a
#define X6502_IRQBegin X6502_IRQBegin_a
#define X6502_IRQEnd X6502_IRQEnd_a
+#define X6502_Rebase X6502_Rebase_a
+#define X6502_GetCycleCount() ((int32)nes_registers[7]>>16)
#define X6502_A
-extern uint32 nes_registers[0x10];
#define X6502_Run(c) \
{ \
int32 cycles = (c) << 4; /* *16 */ \
if (PAL) cycles -= (c); /* *15 */ \
- nes_registers[7]+=cycles; \
- if (nes_registers[7] > 0) X6502_Run_a(); \
+ nes_registers[7]+=cycles<<16; \
+ cycles=(int32)nes_registers[7]>>16; \
+ if (cycles > 0) { \
+ X6502_Run_a(); \
+ cycles -= (int32)nes_registers[7]>>16; \
+ asmcpu_update(cycles); \
+ } \
}
#else
+#define TriggerIRQ TriggerIRQ_c
+#define TriggerNMI TriggerNMI_c
+#define TriggerNMINSF TriggerNMINSF_c
+#define X6502_Reset X6502_Reset_c
+#define X6502_Power X6502_Power_c
+#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) \
{ \
int32 cycles = (c) << 4; /* *16 */ \
// c
#ifdef X6502_C
+extern int32 g_cnt;
void TriggerIRQ_c(void);
void TriggerNMI_c(void);
void TriggerNMINSF_c(void);
// asm
#ifdef X6502_A
+extern uint32 nes_registers[0x10];
+extern uint32 pc_base;
void TriggerIRQ_a(void);
void TriggerNMI_a(void);
void TriggerNMINSF_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);
#endif
// debug
void X6502_AddCycles_d(int x);
void X6502_IRQBegin_d(int w);
void X6502_IRQEnd_d(int w);
+void X6502_Rebase_d(void);
#endif