- assert(piece_on(kto) == king_of_color(us));
- assert(piece_on(rto) == rook_of_color(us));
-
- // Remove pieces from destination squares
- clear_bit(&(byColorBB[us]), kto);
- clear_bit(&(byTypeBB[KING]), kto);
- clear_bit(&(byTypeBB[0]), kto); // HACK: byTypeBB[0] == occupied squares
- clear_bit(&(byColorBB[us]), rto);
- clear_bit(&(byTypeBB[ROOK]), rto);
- clear_bit(&(byTypeBB[0]), rto); // HACK: byTypeBB[0] == occupied squares
-
- // Put pieces on source squares
- set_bit(&(byColorBB[us]), kfrom);
- set_bit(&(byTypeBB[KING]), kfrom);
- set_bit(&(byTypeBB[0]), kfrom); // HACK: byTypeBB[0] == occupied squares
- set_bit(&(byColorBB[us]), rfrom);
- set_bit(&(byTypeBB[ROOK]), rfrom);
- set_bit(&(byTypeBB[0]), rfrom); // HACK: byTypeBB[0] == occupied squares
+ assert(piece_on(kto) == piece_of_color_and_type(us, KING));
+ assert(piece_on(rto) == piece_of_color_and_type(us, ROOK));
+
+ // Put the pieces back at the source square
+ Bitboard kmove_bb = make_move_bb(kto, kfrom);
+ do_move_bb(&(byColorBB[us]), kmove_bb);
+ do_move_bb(&(byTypeBB[KING]), kmove_bb);
+ do_move_bb(&(byTypeBB[0]), kmove_bb); // HACK: byTypeBB[0] == occupied squares
+
+ Bitboard rmove_bb = make_move_bb(rto, rfrom);
+ do_move_bb(&(byColorBB[us]), rmove_bb);
+ do_move_bb(&(byTypeBB[ROOK]), rmove_bb);
+ do_move_bb(&(byTypeBB[0]), rmove_bb); // HACK: byTypeBB[0] == occupied squares