void takeBack() {
    //Step 1:  Reset sides.
	side ^= 1;
	xside ^= 1;
	//Step 2:  Using our history values, reset the piece, color an board states.
	--hply;
	Project2_Move_Thompson m = histDat[hply].m;
	castle = histDat[hply].castle;
	ep = histDat[hply].ep;
	fifty = histDat[hply].fifty;
	color[(int)m.from] = side;
	if ((m.bits & 32) != 0)
            piece[(int)m.from] = PAWN;
	else
            piece[(int)m.from] = piece[(int)m.to];
	//Was it a capture?
	if (histDat[hply].capture == EMPTY) {
            color[(int)m.to] = EMPTY;
            piece[(int)m.to] = EMPTY;
	}
	else {
            color[(int)m.to] = xside;
            piece[(int)m.to] = histDat[hply].capture;
	}
	
	//Check for our special moves.
	if ((m.bits & 2) != 0) {
            int from, to;

            switch(m.to) {
                case 62:
                    from = F1;
                    to = H1;
                    break;
                case 58:
                    from = D1;
                    to = A1;
                    break;
                case 6:
                    from = F8;
                    to = H8;
                    break;
                case 2:
                    from = D8;
                    to = A8;
                    break;
                default:  /* shouldn't get here */
                    from = -1;
                    to = -1;
                    break;
            }
            color[to] = side;
            piece[to] = ROOK;
            color[from] = EMPTY;
            piece[from] = EMPTY;
	}
	if ((m.bits & 4) != 0) {
            if (side == LIGHT) {
                color[m.to + 8] = xside;
                piece[m.to + 8] = PAWN;
            }
            else {
                color[m.to - 8] = xside;
                piece[m.to - 8] = PAWN;
            }
	}
    }