-/* FIXME: are these typedefs right for m68hc11-gcc? */
-typedef unsigned char u8;
-typedef signed char s8;
-typedef unsigned short u16;
-typedef signed short s16;
-typedef unsigned long u32;
-typedef signed long s32;
-typedef u8 bool;
-typedef u16 addr_t;
+/* addresses of these set at link time
+ * to add more addresses, define them here with buffered_addr_h, in helpers.c
+ * with buffered_addr, and also in LDFLAGS in the Makefile
+ */
+#define buffered_addr(a) \
+ extern volatile u8* _##a; \
+ u8 a; \
+ extern inline void set_##a(u8 b) { a = *_##a = b; } \
+ extern inline void bset_##a(const u8 m) { bset(&a, m); *_##a = a; } \
+ extern inline void bclr_##a(const u8 m) { bclr(&a, m); *_##a = a; }