+#define SETBE16(a, r, v) \
+ { (a)[(r + 0)] = (uint8_t)((v) >> 8); \
+ (a)[(r + 1)] = (uint8_t)((v) & 0xFF); }
+
+#define SETBE32(a, r, v) \
+ { (a)[(r + 0)] = (uint8_t)((v) >> 24); \
+ (a)[(r + 1)] = (uint8_t)(((v) >> 16) & 0xFF); \
+ (a)[(r + 2)] = (uint8_t)(((v) >> 8) & 0xFF); \
+ (a)[(r + 3)] = (uint8_t)((v) & 0xFF); }
+
+#define SETBE64(a, r, v) \
+ { (a)[(r + 0)] = (uint8_t)((v) >> 56); \
+ (a)[(r + 1)] = (uint8_t)(((v) >> 48) & 0xFF); \
+ (a)[(r + 2)] = (uint8_t)(((v) >> 40) & 0xFF); \
+ (a)[(r + 3)] = (uint8_t)(((v) >> 32) & 0xFF); \
+ (a)[(r + 4)] = (uint8_t)(((v) >> 24) & 0xFF); \
+ (a)[(r + 5)] = (uint8_t)(((v) >> 16) & 0xFF); \
+ (a)[(r + 6)] = (uint8_t)(((v) >> 8) & 0xFF); \
+ (a)[(r + 7)] = (uint8_t)((v) & 0xFF); }
+
+// In 6502 mode, turns out we need this:
+#define SETLE16(a, r, v) \
+ { (a)[(r + 0)] = (uint8_t)((v) & 0xFF); \
+ (a)[(r + 1)] = (uint8_t)((v) >> 8); }
+
+// Byteswap crap
+#define BYTESWAP16(x) ((((x) & 0x00FF) << 8) | (((x) & 0xFF00) >> 8))
+#define BYTESWAP32(x) ((((x) & 0x000000FF) << 24) | (((x) & 0x0000FF00) << 8) | (((x) & 0x00FF0000) >> 8) | (((x) & 0xFF000000) >> 24))
+#define BYTESWAP64(x) (BYTESWAP32(x>>32)|BYTESWAP32((x&0xffffffff)<<32))
+#define WORDSWAP32(x) ((((x) & 0x0000FFFF) << 16) | (((x) & 0xFFFF0000) >> 16))
+
+//
+// Non-target specific stuff
+//
+#include <inttypes.h>
+#include "symbol.h"
+
+#define BYTE uint8_t
+#define WORD uint16_t
+#define LONG uint32_t