private static void handleMoveType3(PGNMove move, String strippedMove, byte color, byte[][] board)
          throws PGNParseException {
    byte piece = WHITE_PAWN;
    int fromhPos = getChessATOI(strippedMove.charAt(1));
    int tohPos = getChessATOI(strippedMove.charAt(2));
    int tovPos = strippedMove.charAt(3) - '1';
    int fromvPos = -1;

    if (strippedMove.charAt(0) == PAWN.charAt(0)) {
      piece = (byte) (BLACK_PAWN * color);
      fromvPos = getPawnvPos(fromhPos, tovPos, piece, board);
    } else if (strippedMove.charAt(0) == KNIGHT.charAt(0)) {
      piece = (byte) (BLACK_KNIGHT * color);
      fromvPos = getSingleMovePiecevPos(tohPos, tovPos, fromhPos, piece, board, KNIGHT_SEARCH_PATH);
    } else if (strippedMove.charAt(0) == BISHOP.charAt(0)) {
      piece = (byte) (BLACK_BISHOP * color);
      fromvPos = getMultiMovePiecevPos(tohPos, tovPos, fromhPos, piece, board, BISHOP_SEARCH_PATH);
    } else if (strippedMove.charAt(0) == ROOK.charAt(0)) {
      piece = (byte) (BLACK_ROOK * color);
      fromvPos = getMultiMovePiecevPos(tohPos, tovPos, fromhPos, piece, board, ROOK_SEARCH_PATH);
    } else if (strippedMove.charAt(0) == QUEEN.charAt(0)) {
      piece = (byte) (BLACK_QUEEN * color);
      fromvPos = getMultiMovePiecevPos(tohPos, tovPos, fromhPos, piece, board,
              QUEEN_KING_SEARCH_PATH);
    } else if (strippedMove.charAt(0) == KING.charAt(0)) {
      piece = (byte) (BLACK_KING * color);
      fromvPos = getSingleMovePiecevPos(tohPos, tovPos, fromhPos, piece, board,
              QUEEN_KING_SEARCH_PATH);
    }

    if (fromvPos == -1 || fromhPos == -1) {
      throw new PGNParseException(move.getFullMove());
    }

    move.setFromSquare(getChessCoords(fromhPos, fromvPos));
    move.setToSquare(getChessCoords(tohPos, tovPos));
    if (move.isCaptured()) {
      move.setCapturedPiece(PIECES[board[tohPos][tovPos] * -color]);
    }
  }