diff --git a/src/eval.c b/src/eval.c index 8836b66..8711958 100644 --- a/src/eval.c +++ b/src/eval.c @@ -98,7 +98,7 @@ int main(int ac, char**av) pos_t *pos; eval_t res; - debug_init(5, stderr); + debug_init(5, stderr, true); piece_pool_init(); moves_pool_init(); diff --git a/src/fen.c b/src/fen.c index a7b4fd0..2a719c2 100644 --- a/src/fen.c +++ b/src/fen.c @@ -179,7 +179,7 @@ int main(int ac, char**av) { pos_t *pos; - debug_init(5, stderr); + debug_init(5, stderr, true); piece_pool_init(); pos_pool_init(); pos = pos_get(); diff --git a/src/move.c b/src/move.c index 0b16334..a1d294f 100644 --- a/src/move.c +++ b/src/move.c @@ -73,18 +73,19 @@ void moves_pool_stats() * M_PR_NCAPT: print move if non capture * M_PR_NUM: print also move number * M_PR_LONG: print long notation + * M_PR_NL: print a newline after move * * @return: 0 if nothing printed, 1 otherwise */ int move_print(int movenum, move_t *move, move_flags_t flags) { - if (flags & M_PR_CAPT && !(move->flags & M_CAPTURE)) { + if ((flags & M_PR_CAPT) && !(move->flags & M_CAPTURE)) { # ifdef DEBUG_MOVE log_i(9, "skipping capture & %#04x\n", move->flags); # endif return 0; } - if (flags & M_PR_NCAPT && move->flags & M_CAPTURE) { + if ((flags & M_PR_NCAPT) && (move->flags & M_CAPTURE)) { # ifdef DEBUG_MOVE log_i(9, "skipping !capture & %#04x\n", move->flags); # endif @@ -119,6 +120,8 @@ int move_print(int movenum, move_t *move, move_flags_t flags) end: printf(" "); } + if (flags & M_PR_NL) + printf("\n"); return 1; } @@ -660,9 +663,10 @@ void moves_gen_all(pos_t *pos) { moves_gen(pos, OPPONENT(pos->turn), false, false); moves_gen(pos, pos->turn, true, true); - moves_gen_king_moves(pos, OPPONENT(pos->turn), true); + moves_gen_king_moves(pos, OPPONENT(pos->turn), false); } + /** * move_do() - execute move in a duplicated position. * @pos: &pos_t struct on which move will be applied @@ -672,13 +676,12 @@ void moves_gen_all(pos_t *pos) pos_t *move_do(pos_t *pos, move_t *move) { # ifdef DEBUG_MOVE - log_f(3, "++++++++++"); - move_print(0, move, 0); - log(3, "\n"); + printf("++++++++++ "); + move_print(0, move, M_PR_NL | M_PR_LONG | M_PR_NUM); # endif pos_t *new = pos_dup(pos); - piece_t piece = move->piece; + piece_t piece = PIECE(move->piece), newpiece = piece, captured = move->capture; int color = COLOR(piece); square_t from = move->from, to = move->to; @@ -692,7 +695,7 @@ pos_t *move_do(pos_t *pos, move_t *move) piece_del(&new->board[to].s_piece->list); new->board[to].piece = 0; new->occupied[OPPONENT(color)] ^= SQ88_2_BB(to); - new->bb[OPPONENT(color)][PIECETOBB(piece)] ^= SQ88_2_BB(to); + new->bb[OPPONENT(color)][PIECETOBB(captured)] ^= SQ88_2_BB(to); } else { uchar ep_file = F88(pos->en_passant); square_t ep_grab = color == WHITE ? SQ88(ep_file, 4): SQ88(ep_file, 3); @@ -700,7 +703,7 @@ pos_t *move_do(pos_t *pos, move_t *move) piece_del(&new->board[ep_grab].s_piece->list); new->board[ep_grab].piece = 0; new->occupied[OPPONENT(color)] ^= SQ88_2_BB(ep_grab); - new->bb[OPPONENT(color)][PIECETOBB(piece)] ^= SQ88_2_BB(ep_grab); + new->bb[OPPONENT(color)][BB_PAWN] ^= SQ88_2_BB(ep_grab); } } else if (move->flags & M_CASTLE_Q) { @@ -729,21 +732,25 @@ pos_t *move_do(pos_t *pos, move_t *move) new->board[rook_from].s_piece = NULL; } + new->board[to] = new->board[from]; + /* fix dest square */ + new->board[to].s_piece->square = to; if (move->flags & M_PROMOTION) { - log(2, "promotion to %s\n", P_SYM(move->piece)); + log(2, "promotion to %s\n", P_SYM(move->promotion)); + printf("newpiece=%#x p=%#x\n", move->promotion, PIECE(move->promotion)); + newpiece = PIECE(move->promotion); new->board[to].piece = move->promotion; - new->board[to].s_piece->square = to; new->board[to].s_piece->piece = move->promotion; - } else { - new->board[to] = new->board[from]; - /* fix dest square */ - new->board[to].s_piece->square = to; } /* replace old occupied bitboard by new one */ new->occupied[color] ^= SQ88_2_BB(from); new->occupied[color] |= SQ88_2_BB(to); new->bb[color][PIECETOBB(piece)] ^= SQ88_2_BB(from); - new->bb[color][PIECETOBB(piece)] |= SQ88_2_BB(to); + new->bb[color][PIECETOBB(newpiece)] |= SQ88_2_BB(to); + if (move->flags & M_PROMOTION) { + printf("color=%d bbpiece=%d\n", color, PIECETOBB(newpiece)); + bitboard_print(new->bb[color][PIECETOBB(newpiece)]); + } /* always make "from" square empty */ new->board[from].piece = 0; @@ -765,7 +772,7 @@ int main(int ac, char**av) { pos_t *pos; - debug_init(5, stderr); + debug_init(5, stderr, true); piece_pool_init(); moves_pool_init(); pos_pool_init(); diff --git a/src/move.h b/src/move.h index 14ac6a5..dc3cbb5 100644 --- a/src/move.h +++ b/src/move.h @@ -35,6 +35,7 @@ typedef unsigned char move_flags_t; #define M_PR_CAPT 0x01 #define M_PR_NCAPT 0x02 #define M_PR_NUM 0x04 +#define M_PR_NL 0x08 #define M_PR_SEPARATE 0x40 /* separate captures */ #define M_PR_LONG 0x80 @@ -44,6 +45,7 @@ typedef struct move_s { piece_t capture; /* captured piece */ piece_t promotion; /* promoted piece */ move_flags_t flags; + eval_t negamax; struct list_head list; /* next move */ } move_t; @@ -65,4 +67,4 @@ void moves_gen_all(pos_t *pos); pos_t *move_do(pos_t *pos, move_t *move); void move_undo(pos_t *pos, move_t *move); -#endif /* MODE_H */ +#endif /* MOVE_H */ diff --git a/src/piece.c b/src/piece.c index 139e458..96f2722 100644 --- a/src/piece.c +++ b/src/piece.c @@ -122,7 +122,7 @@ int main(int ac, char**av) { pos_t *pos; printf("zobi\n");fflush(stdout); - debug_init(6, stderr); + debug_init(6, stderr, true); log_f(5, "kfsjdhg\n"); pos_pool_init(); pos = pos_get();