summaryrefslogtreecommitdiff
path: root/src/board.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/board.c')
-rwxr-xr-xsrc/board.c11
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