diff options
Diffstat (limited to 'src/board.c')
| -rwxr-xr-x | src/board.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/board.c b/src/board.c index 814b045..9ed2f03 100755 --- a/src/board.c +++ b/src/board.c @@ -171,6 +171,7 @@ Return value: "bbPieces bitboard doesn't match piece list", "bbPawns bitboard doesn't match pawn list", "bbOccupied bitboard doesn't match piece list", + "bbOccupiedSide bitboard doesn't match piece list", }; ULONG u, v; COOR c; @@ -181,6 +182,7 @@ Return value: BITBOARD bbPieces[2][8]; BITBOARD bbPawns[2]; BITBOARD bbOccupied = 0; + BITBOARD bbOccupiedSide[2] = {0, 0}; ULONG uSigmaNonPawnCount[2] = {0, 0}; ULONG uWhiteSqBishopCount[2] = {0, 0}; UINT64 u64Computed; @@ -275,6 +277,7 @@ Return value: uPawnCount[u]++; bbPawns[u] |= COOR_TO_BB(c); bbOccupied |= COOR_TO_BB(c); + bbOccupiedSide[u] |= COOR_TO_BB(c); } } @@ -320,6 +323,7 @@ Return value: bbPieces[u][PIECE_TYPE(p)] |= COOR_TO_BB(c); } bbOccupied |= COOR_TO_BB(c); + bbOccupiedSide[u] |= COOR_TO_BB(c); uNonPawnMaterial[u] += PIECE_VALUE(p); if ((IS_BISHOP(p)) && (IS_WHITE_SQUARE_COOR(c))) @@ -404,6 +408,13 @@ Return value: goto end; } + if ((pos->bbOccupiedSide[WHITE] != bbOccupiedSide[WHITE]) || + (pos->bbOccupiedSide[BLACK] != bbOccupiedSide[BLACK])) + { + uReason = 24; + goto end; + } + // // Now walk the actual board and reduce the material counts we got // by walking the piece lists. If everything is ok then the |
