apple2ix/src/glue.h

70 lines
2.0 KiB
C

/*
* Apple // emulator for *ix
*
* This software package is subject to the GNU General Public License
* version 3 or later (your choice) as published by the Free Software
* Foundation.
*
* Copyright 1994 Alexander Jean-Claude Bottema
* Copyright 1995 Stephen Lee
* Copyright 1997, 1998 Aaron Culliney
* Copyright 1998, 1999, 2000 Michael Deutschmann
* Copyright 2013-2015 Aaron Culliney
*
*/
#if defined(__ASSEMBLER__)
# error assembler-specific glue code should be in the arch-specific area
#endif
#define GLUE_BANK_READ(func,pointer) extern void func(void)
#define GLUE_BANK_MAYBEREAD(func,pointer) extern void func(void)
#define GLUE_BANK_WRITE(func,pointer) extern void func(void)
#define GLUE_BANK_MAYBEWRITE(func,pointer) extern void func(void)
#define GLUE_EXTERN_C_READ(func) extern uint8_t func(uint16_t)
#if VM_TRACING
#define GLUE_C_WRITE(func) \
extern void func(uint16_t, uint8_t); \
void c__##func(uint16_t ea, uint8_t b); \
void c_##func(uint16_t ea, uint8_t b) { \
c__##func(ea, b); \
extern FILE *test_vm_fp; \
if (test_vm_fp && !vm_trace_is_ignored(ea)) { \
fprintf(test_vm_fp, "%04X w:%02X %s\n", ea, b, __FUNCTION__); \
fflush(test_vm_fp); \
} \
} \
void c__##func(uint16_t ea, uint8_t b)
#define GLUE_C_READ(func) \
extern uint8_t func(uint16_t); \
uint8_t c__##func(uint16_t ea); \
uint8_t c_##func(uint16_t ea) { \
uint8_t b = c__##func(ea); \
extern FILE *test_vm_fp; \
if (test_vm_fp && !vm_trace_is_ignored(ea)) { \
fprintf(test_vm_fp, "%04X r:%02X %s\n", ea, b, __FUNCTION__); \
fflush(test_vm_fp); \
} \
return b; \
} \
uint8_t c__##func(uint16_t ea)
#else
#define GLUE_C_WRITE(func) \
extern void func(uint16_t, uint8_t); \
void c_##func(uint16_t ea, uint8_t b)
#define GLUE_C_READ(func) \
extern uint8_t func(uint16_t); \
uint8_t c_##func(uint16_t ea)
#endif
#define GLUE_C_READ_ALTZP(func, ...) GLUE_C_READ(func)