diff options
| author | Aargh Rai <aargh.rai+git@gmail.com> | 2026-05-27 18:02:44 +0530 |
|---|---|---|
| committer | Aargh Rai <aargh.rai+git@gmail.com> | 2026-05-27 18:02:44 +0530 |
| commit | 2c2a70b69869f149c0407a62f1bf4c39899027a7 (patch) | |
| tree | 9c3d194c32e82039fe6e0da9fbaf2e86aeef0a59 /src/engine/bitboard.c | |
| parent | 58b2c8b6e2041e63c46b579eccc141d21801e985 (diff) | |
restructing
Diffstat (limited to 'src/engine/bitboard.c')
| -rw-r--r-- | src/engine/bitboard.c | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/engine/bitboard.c b/src/engine/bitboard.c new file mode 100644 index 0000000..4746020 --- /dev/null +++ b/src/engine/bitboard.c @@ -0,0 +1,75 @@ +#include "bitboard.h" +#include <stdio.h> +#include <inttypes.h> +#include <assert.h> + +position_t position_starting() { + return (position_t) { + .bitboards = { + 16ULL, + 8ULL, + 129ULL, + 36ULL, + 66ULL, + 65280ULL, + 1152921504606846976ULL, + 576460752303423488ULL, + 9295429630892703744ULL, + 2594073385365405696ULL, + 4755801206503243776ULL, + 71776119061217280ULL, + }, + .castling = + ((bitboard_t)1 << WHITE_SHORT_CASTLE) | + ((bitboard_t)1 << WHITE_LONG_CASTLE) | + ((bitboard_t)1 << BLACK_SHORT_CASTLE) | + ((bitboard_t)1 << BLACK_LONG_CASTLE), + .turn = WHITE_TURN, + .passantable_file = 0, + }; +} + +void assert_valid_position(position_t position) { + assert(position.castling <= + ( + ((bitboard_t)1 << WHITE_SHORT_CASTLE) | + ((bitboard_t)1 << WHITE_LONG_CASTLE) | + ((bitboard_t)1 << BLACK_SHORT_CASTLE) | + ((bitboard_t)1 << BLACK_LONG_CASTLE) + ) + ); + assert(position.turn == WHITE_TURN || position.turn == BLACK_TURN); + assert(position.passantable_file <= 8); + assert(position.bitboards[WHITE_KING] != 0); + assert(position.bitboards[BLACK_KING] != 0); +} + +bitboard_t whites(position_t position) { + return + position.bitboards[WHITE_KING] | + position.bitboards[WHITE_QUEEN] | + position.bitboards[WHITE_ROOK] | + position.bitboards[WHITE_BISHOP] | + position.bitboards[WHITE_KNIGHT] | + position.bitboards[WHITE_PAWN]; +} + +bitboard_t blacks(position_t position) { + return + position.bitboards[BLACK_KING] | + position.bitboards[BLACK_QUEEN] | + position.bitboards[BLACK_ROOK] | + position.bitboards[BLACK_BISHOP] | + position.bitboards[BLACK_KNIGHT] | + position.bitboards[BLACK_PAWN]; +} + +void print_bitboard(bitboard_t bitboard) { + printf("Bitboard(%" PRIu64 ")\n", bitboard); + for (int i = 7; i >= 0; i--) { + for (int j = 0; j < 8; j++) { + printf("%" PRIu64 "", (bitboard >> (8 * i + j)) & 1); + } + printf("\n"); + } +} |
