diff -r 2aed5418e142 -r 6008840b859e src/rules/pawn.c --- a/src/rules/pawn.c Sat Mar 29 14:46:33 2014 +0100 +++ b/src/rules/pawn.c Sat Mar 29 16:53:58 2014 +0100 @@ -32,6 +32,22 @@ _Bool pawn_chkrules(Board board, Move *move) { int8_t d = ((move->piece & COLOR_MASK) == WHITE ? -1 : 1); + + if (move->torow == (d < 0 ? 7 : 0)) { + if (move->promotion) { + uint8_t promopiece = move->promotion & PIECE_MASK; + if (!promopiece || promopiece == PAWN || promopiece == KING) { + return FALSE; + } + } else { + return FALSE; + } + } else { + if (move->promotion) { + return FALSE; + } + } + if (move->capture) { if (move->fromrow == move->torow + d && ( move->fromfile == move->tofile + 1 ||