/* cast operation for register references */
#define REGVAL(x) (*(unsigned char *)(x))
/* create bit mask for one bit on/off */
#define BITON_MASK(bitnum) (1 << (bitnum))
#define BITOFF_MASK(bitnum) (~(1 << (bitnum)))
/* use given mask to set/clear bits in given byte */
#define SET_BITS(byte,mask) REGVAL(byte) |= (mask)
#define CLR_BITS(byte,mask) REGVAL(byte) &= (mask)
/* set/clear given bit number in byte */
#define BIT_SET(byte,bitnum) REGVAL(byte) |= (BITON_MASK(bitnum))
#define BIT_CLR(byte, bitnum) REGVAL(byte) &= (BITOFF_MASK(bitnum))