mirror of
https://github.com/ekeeke/Genesis-Plus-GX.git
synced 2024-12-27 03:31:49 +01:00
80 lines
2.8 KiB
C
80 lines
2.8 KiB
C
#ifndef _MACROS_H_
|
|
#define _MACROS_H_
|
|
|
|
#ifdef LSB_FIRST
|
|
|
|
#define READ_BYTE(BASE, ADDR) (BASE)[(ADDR)^1]
|
|
|
|
#define READ_WORD(BASE, ADDR) (((BASE)[ADDR]<<8) | (BASE)[(ADDR)+1])
|
|
|
|
#define READ_WORD_LONG(BASE, ADDR) (((BASE)[(ADDR)+1]<<24) | \
|
|
((BASE)[(ADDR)]<<16) | \
|
|
((BASE)[(ADDR)+3]<<8) | \
|
|
(BASE)[(ADDR)+2])
|
|
|
|
#define WRITE_BYTE(BASE, ADDR, VAL) (BASE)[(ADDR)^1] = (VAL)&0xff
|
|
|
|
#define WRITE_WORD(BASE, ADDR, VAL) (BASE)[ADDR] = ((VAL)>>8) & 0xff; \
|
|
(BASE)[(ADDR)+1] = (VAL)&0xff
|
|
|
|
#define WRITE_WORD_LONG(BASE, ADDR, VAL) (BASE)[(ADDR+1)] = ((VAL)>>24) & 0xff; \
|
|
(BASE)[(ADDR)] = ((VAL)>>16)&0xff; \
|
|
(BASE)[(ADDR+3)] = ((VAL)>>8)&0xff; \
|
|
(BASE)[(ADDR+2)] = (VAL)&0xff
|
|
|
|
#else
|
|
|
|
#define READ_BYTE(BASE, ADDR) (BASE)[ADDR]
|
|
#define READ_WORD(BASE, ADDR) *(uint16 *)((BASE) + (ADDR))
|
|
#define READ_WORD_LONG(BASE, ADDR) *(uint32 *)((BASE) + (ADDR))
|
|
#define WRITE_BYTE(BASE, ADDR, VAL) (BASE)[ADDR] = VAL & 0xff
|
|
#define WRITE_WORD(BASE, ADDR, VAL) *(uint16 *)((BASE) + (ADDR)) = VAL & 0xffff
|
|
#define WRITE_WORD_LONG(BASE, ADDR, VAL) *(uint32 *)((BASE) + (ADDR)) = VAL & 0xffffffff
|
|
#endif
|
|
|
|
/* C89 compatibility */
|
|
#ifndef M_PI
|
|
#define M_PI 3.14159265358979323846264338327f
|
|
#endif /* M_PI */
|
|
|
|
/* Set to your compiler's static inline keyword to enable it, or
|
|
* set it to blank to disable it.
|
|
* If you define INLINE in makefile or osd.h, it will override this value.
|
|
* NOTE: not enabling inline functions will SEVERELY slow down emulation.
|
|
*/
|
|
#ifndef INLINE
|
|
#define INLINE static __inline__
|
|
#endif /* INLINE */
|
|
|
|
/* Alignment macros for cross compiler compatibility */
|
|
#if defined(_MSC_VER)
|
|
#define ALIGNED_(x) __declspec(align(x))
|
|
#elif defined(__GNUC__)
|
|
#define ALIGNED_(x) __attribute__ ((aligned(x)))
|
|
#endif
|
|
|
|
/* Provide the compiler with branch prediction information */
|
|
#if defined(__GNUC__)
|
|
#define LIKELY(x) __builtin_expect(!!(x), 1)
|
|
#define UNLIKELY(x) __builtin_expect(!!(x), 0)
|
|
#else
|
|
#define LIKELY(x) x
|
|
#define UNLIKELY(x) x
|
|
#endif
|
|
|
|
/* Default CD image file access (read-only) functions */
|
|
/* If you need to override default stdio.h functions with custom filesystem API,
|
|
redefine following macros in platform specific include file (osd.h) or Makefile
|
|
*/
|
|
#ifndef cdStream
|
|
#define cdStream FILE
|
|
#define cdStreamOpen(fname) fopen(fname, "rb")
|
|
#define cdStreamClose fclose
|
|
#define cdStreamRead fread
|
|
#define cdStreamSeek fseek
|
|
#define cdStreamTell ftell
|
|
#define cdStreamGets fgets
|
|
#endif
|
|
|
|
#endif /* _MACROS_H_ */
|