+/*
+ * Return the board bitmap setting locations on or above row y.
+ */
+static inline uint_fast32_t board_above(int y)
+{
+ return ( 0x20ul << 5*y ) - 1;
+}
+
+/*
+ * Return the board bitmap setting locations on or below row y.
+ */
+static inline uint_fast32_t board_below(int y)
+{
+ return ~( 1ul << 5*y ) + 1;
+}
+
+/*
+ * Return the board bitmap setting locations on or left of column x.
+ */
+static inline uint_fast32_t board_left(int x)
+{
+ uint_fast32_t val = board_column(x);
+
+ return val | (val - 0x108421);
+}
+
+/*
+ * Return the board bitmap setting locations on or right of column x.
+ */
+static inline uint_fast32_t board_right(int x)
+{
+ uint_fast32_t val = board_column(x);
+
+ return ~val + 0x108421;
+}
+
+/*
+ * Return the board bitmap setting the rectangle of locations that are:
+ *
+ * - on or right of column x1, and
+ * - on or left of column x2, and
+ * - on or below row y1, and
+ * - on or above row y2.
+ *
+ * It must be the case that x2 >= x1 and y2 >= y1.
+ */
+static inline uint_fast32_t board_rect(int x1, int y1, int x2, int y2)
+{
+ return (board_left(x2-x1) << x1) & (board_above(y2-y1) << 5*y1);
+}
+
+/*
+ * Extract the tile colour from a specific position of one of the
+ * arrays of tile bitmaps. The position is a bit index. So for
+ * example, game the tile at a given (x, y) position can be extracted
+ * by board_tile(board.game, 5*y+x).
+ */
+#define board_tile(planes, bit) (((0[planes]<<0) >> (bit)) & 1) \
+ | (((1[planes]<<1) >> (bit)) & 2) \
+ | (((2[planes]<<2) >> (bit)) & 4)
+