/* Macros turn opcode tables into code */ #define F8(F) F##8 #define F16(F) F##16 #define EF(F) 0, F16(F), F16(F) #define NF(F) 0, F, F #define NF8(F) 0, F8(F), F8(F) #define NF16(F) 0, F16(F), F16(F) #define MF(F) (CheckEmulation() || CheckMemory()), F8(F), F16(F) #define XF(F) (CheckEmulation() || CheckIndex()), F8(F), F16(F) #define C (Carry) #define Z (Zero) #define V (Overflow) #define NZ (Negative | Zero) #define NZC (Negative | Zero | Carry) #define NZV (Negative | Zero | Overflow) #define NZCV (Negative | Zero | Carry | Overflow) switch(opcode = *pc++) { #include "opdef.h" default: \ printf("Invalid opcode : 0x%X\n", opcode); \ }