#ifndef BITBOARD_H #define BITBOARD_H #include "ints.h" typedef u64 bitboard_t; enum { WHITE_KING, WHITE_QUEEN, WHITE_ROOK, WHITE_BISHOP, WHITE_KNIGHT, WHITE_PAWN, BLACK_KING, BLACK_QUEEN, BLACK_ROOK, BLACK_BISHOP, BLACK_KNIGHT, BLACK_PAWN, PIECE_TYPE_COUNT, }; enum { WHITE_SHORT_CASTLE, WHITE_LONG_CASTLE, BLACK_SHORT_CASTLE, BLACK_LONG_CASTLE, }; enum { WHITE_TURN, BLACK_TURN, }; #define BITMASK_RANK_A 255ULL #define BITMASK_RANK_B 65280ULL #define BITMASK_RANK_C 16711680ULL #define BITMASK_RANK_D 4278190080ULL #define BITMASK_RANK_E 1095216660480ULL #define BITMASK_RANK_F 280375465082880ULL #define BITMASK_RANK_G 71776119061217280ULL #define BITMASK_RANK_H 18374686479671623680ULL #define BITMASK_COLM_1 72340172838076673ULL #define BITMASK_COLM_2 144680345676153346ULL #define BITMASK_COLM_3 289360691352306692ULL #define BITMASK_COLM_4 578721382704613384ULL #define BITMASK_COLM_5 1157442765409226768ULL #define BITMASK_COLM_6 2314885530818453536ULL #define BITMASK_COLM_7 4629771061636907072ULL #define BITMASK_COLM_8 9259542123273814144ULL typedef struct { bitboard_t bitboards[PIECE_TYPE_COUNT]; u8 castling; u8 turn; u8 passantable_column; } position_t; position_t position_starting(); void assert_valid_position(position_t position); bitboard_t whites(position_t position); bitboard_t blacks(position_t position); void print_bitboard(bitboard_t bitboard); #endif // !BITBOARD_H