Page 1 of 2

IvanHoe 999953 beta

Posted: Sat Jul 17, 2010 1:06 pm
by kingliveson
999953 Changes seem good -- fixed a couple minor bugs. Significant change is introduction of magic bit-boards; unfortunately, it's a 2% speed hit. Will upload when ready.

Re: IvanHoe 999953 beta

Posted: Sat Jul 17, 2010 1:21 pm
by Vael Jean-Paul
Great..again a new compile..but what does these magic bit-boards do?

Re: IvanHoe 999953 beta

Posted: Sat Jul 17, 2010 2:53 pm
by kingliveson
Vael Jean-Paul wrote:Great..again a new compile..but what does these magic bit-boards do?
I like your optimism. Magic bit board: http://chessprogramming.wikispaces.com/Magic+Bitboards and http://en.wikipedia.org/wiki/Bitboard#Chess_bitboards.

But Understand the nature of beta software development and its frequent releases. If you think of Rybka, whenever significant changes are made, resources galore (including CCRL, a department of Rybka enterprise) are available for testing. Not so with IvanHoe which is more community based. We (you and I) are the testers -- we let the developers know when there are issues or features that need a second look. I would say they are quite generous to continue working on a regular basis to improve this amazing chess program. It has come a long way from its Ippolit beginnings.

Re: IvanHoe 999953 beta

Posted: Sat Jul 17, 2010 3:15 pm
by kingliveson
diff 999954 999953

Code: Select all

diff 999954/CHANGE_LOG 999953/CHANGE_LOG
85c85
<        Bug: Qrrf fails compress
---
>        RobboBuild Bug: Qrrf fails compress. Later: NNrb
86a87,90
> 999953 Fix 100 move (jarkkop)
>        RobboTriple for 6 pieces rewrite.....
>        preliminary ZUGZWANG_DETECT
>        MAGIC_BITBOARDS possible (no gainings?)
diff 999954/Makefile 999953/Makefile
5c5
< VERSION = 999954-Beta
---
> VERSION = 999953
59c59,60
<                     signals.c
---
>                     signals.c \
>                     magic_mult.c
157c158
< RobboBuild_OBJECTS = $(RobboBuild_SOURCES:.c=.o) arrays.o
---
> RobboBuild_OBJECTS = $(RobboBuild_SOURCES:.c=.o) arrays.o magic_mult.o
diff 999954/RobboLito.h 999953/RobboLito.h
13a14,18
> #if 1
> #define MAGIC_BITBOARDS TRUE
> #define ZUGZWANG_DETECT TRUE
> #endif
> 
371,373c376,379
< #define CheckRepetition \
<   CHECK_HALT(); \
<   if (POSITION->DYN->reversible >= 100) RETURN(0); \
---
> #define CheckRepetition(in_check) \
>   CHECK_HALT (); \
>   if (in_check && POSITION->DYN->reversible > 100) RETURN (0); \
>   if (!in_check && POSITION->DYN->reversible >= 100) RETURN (0); \
389c395
< typedef struct {  uint32 move; } typeMoveList;
---
> typedef struct { uint32 move; } typeMoveList;
444a451
> #ifndef MAGIC_BITBOARDS
445a453,455
> #else
>   uint64 OccupiedBW, _0, _1, _2;
> #endif
556a567,568
> /******************************/  /******************************/
> 
565a578,591
> #ifdef MAGIC_BITBOARDS
> typedef struct { uint64 mask, mult, shift; uint64* index; } type_MM;
> type_MM ROOK_MM[64], BISHOP_MM[64];
> uint64 MM_ORTHO[102400], MM_DIAG[5248];
> #define AttRocc(sq, OCC) ROOK_MM[sq].index\
>   [((OCC & ROOK_MM[sq].mask) * ROOK_MM[sq].mult) >> ROOK_MM[sq].shift]
> #define AttBocc(sq, OCC) BISHOP_MM[sq].index\
>   [((OCC & BISHOP_MM[sq].mask) * BISHOP_MM[sq].mult) >> BISHOP_MM[sq].shift]
> #define AttB(sq) AttBocc (sq, POSITION->OccupiedBW)
> #define AttR(sq) AttRocc (sq, POSITION->OccupiedBW)
> #define AttFile(sq) (AttR (sq) & FileArray[FILE (sq)])
> 
> #else
> 
574a601,608
> #define AttB(fr) (Att_a1h8(fr) | Att_h1a8(fr))
> #define AttR(fr) (AttRank(fr) | AttFile(fr))
> #endif
> 
> #define AttQ(fr) (AttR(fr) | AttB(fr))
> 
> /******************************/  /******************************/
> 
580,583d613
< 
< #define AttB(fr) (Att_a1h8(fr) | Att_h1a8(fr))
< #define AttR(fr) (AttRank(fr) | AttFile(fr))
< #define AttQ(fr) (AttR(fr) | AttB(fr))
diff 999954/RobboTotalBase.h 999953/RobboTotalBase.h
75c75
< void TripleBaseMake (typePOS*, int, int, int, char*);
---
> void TripleBaseMake (typePOS*, char*, char*);
diff 999954/RobboTriple.c 999953/RobboTriple.c
7d6
< #define V TRUE
9c8
< RobboTripleBase *TABLE_TRIPLE_BASES;
---
> RobboTripleBase* TABLE_TRIPLE_BASES;
82a82
> #define SAFER_FREE(x) if ((x)) free ((x))
89,90c89,90
<       free ((TABLE_TRIPLE_BASES + i)->ind);
<       free ((TABLE_TRIPLE_BASES + i)->data);
---
>       SAFER_FREE ((TABLE_TRIPLE_BASES + i)->ind);
>       SAFER_FREE ((TABLE_TRIPLE_BASES + i)->data);
diff 999954/RobboTripleBase.h 999953/RobboTripleBase.h
13c13
< RobboTripleBase *TABLE_TRIPLE_BASES;
---
> RobboTripleBase* TABLE_TRIPLE_BASES;
diff 999954/RobboTripleBuild.c 999953/RobboTripleBuild.c
34a35,36
> /**************************************************/
> 
45c47
<     r -= ( r % 32); r >>= 5; \
---
>     r -= (r % 32); r >>= 5; \
52c54
<   { int sq = w >> 2, king = w & 3; TH[sq] |= (MODO << ( 2 * king ) ); w++;   }
---
>   { int sq = w >> 2, king = w & 3; TH[sq] |= (MODO << ( 2 * king ) ); w++; }
56d57
< static int C[4], p;
245c246,602
< static void simmetria (char *C, char *SIM)
---
> /**************************************************/
> 
> #define wEnumB wEnumBL
> #define bEnumB bEnumBL
> 
> void TripleBaseMake (typePOS* POSITION, char* PEZZO, char* inome_file)
> {
>   int check = 0, u, MODO = vNON, mal = 0, TotalBase = 0, vc, v[4], w = 0;
>   int b, s, cattvi = 0, cattpa = 0, L[4];
>   int bK, wK, move, to, fr, pb = 0, c2 = 0, pr, pi, cp;
>   const short int *PILA;
>   char *TH, *E[4];
>   uint64 O, SIZE;
>   int rip = 0, p, C[4];
>   typeMoveList LIST[256], *list;
>   int i, j, k, rf, RF;
>   char nome_file[256];
> 
> #ifdef NOME_WINDOWS
>   nome_file[0] = 'K';
>   j = 0;
>   while (inome_file[j])
>     {
>       if (inome_file[j] <= 'Z')
> 	{
> 	  nome_file[2 * j + 1] = 'w';
> 	  nome_file[2 * j + 2] = inome_file[j] + 32;
> 	}
>       else
> 	{
> 	  nome_file[2 * j + 1] = 'b';
> 	  nome_file[2 * j + 2] = inome_file[j];
> 	}
>       j++;
>     }
>   nome_file[2 * j + 1] = 0;
> #else
>   strcpy(nome_file, inome_file);
> #endif
> 
>   printf ("TripleBaseMake %s\n", nome_file);
>   POSITION->wtm = TRUE;
>   p = 0;
>   PILA = RE_normale;
>   for (i = 0; i < 4; i++)
>     if (PEZZO[i] == wEnumP || PEZZO[i] == bEnumP || PEZZO[i] == BlockedPawn)
>       PILA = RE_pedone;
>   C[0] = C[1] = C[2] = C[3] = 0;
>   POSITION->DYN->reversible = 0;
>   POSITION->DYN->ep = POSITION->DYN->oo = 0;
>   for (i = 0; i < 4; i++)
>     {
>       E[i] = ENUMn;
>       if (!PEZZO[i])
> 	E[i] = ENUM0;
>       if (PEZZO[i] == wEnumP)
> 	E[i] = ENUM_BI_PED;
>       if (PEZZO[i] == bEnumP)
> 	E[i] = ENUM_NE_PED;
>       if (PEZZO[i] == BlockedPawn)
> 	E[i] = ENUM_BLOCKED;
>       if (PEZZO[i] == wEnumB || PEZZO[i] == bEnumB)
> 	E[i] = ENUM_ALF;
>     }
>   SIZE = 355100000 / 4;
>   TH = malloc (SIZE);
>   for (i = 0; i < SIZE; i++)
>     TH[i] = 0;
>   for (u = A1; u <= H8; u++)
>     POSITION->sq[u] = 0;
>   RF = (PILA == RE_pedone) ? 1806 : 462;
>   for (rf = 0; rf < RF; rf++)
>     {
>       if (PILA == RE_normale)
> 	{
> 	  wK = inverso_normale_re[rf] >> 6;
> 	  bK = inverso_normale_re[rf] & 63;
> 	}
>       if (PILA == RE_pedone)
> 	{
> 	  wK = inverso_pedone_re[rf] >> 6;
> 	  bK = inverso_pedone_re[rf] & 63;
> 	}
>       if (PEZZO[2] && (PILA[64 * wK + bK] & 15) == 0)
> 	printf ("%c%c %c%c %d %d\n", (wK & 7) + 'a', (wK / 8) + '1',
> 		(bK & 7) + 'a', (bK / 8) + '1', w, PILA[64 * wK + bK]);
>       for (L[0] = 0; (v[0] = E[0][L[0]]) != -1; L[0]++)
> 	for (L[1] = 0; (v[1] = E[1][L[1]]) != -1; L[1]++)
> 	  for (L[2] = 0; (v[2] = E[2][L[2]]) != -1; L[2]++)
> 	    for (L[3] = 0; (v[3] = E[3][L[3]]) != -1; L[3]++)
> 	      {
> 		if (PEZZO[1] && PEZZO[0] == PEZZO[1] && L[1] >= L[0])
> 		  continue;
> 		if (PEZZO[2] && PEZZO[1] == PEZZO[2] && L[2] >= L[1])
> 		  continue;
> 		if (PEZZO[3] && PEZZO[2] == PEZZO[3] && L[3] >= L[2])
> 		  continue;
> 		POSITION->wKsq = wK;
> 		POSITION->bKsq = bK;
> 		wBitboardK = SqSet[wK];
> 		bBitboardK = SqSet[bK];
> 		wBitboardQ = wBitboardR = wBitboardN = wBitboardBD =
> 		  wBitboardBL = wBitboardP = 0;
> 		bBitboardQ = bBitboardR = bBitboardN = bBitboardBD =
> 		  bBitboardBL = bBitboardP = 0;
> 		for (i = 0; i < 4; i++)
> 		  {
> 		    if (PEZZO[i] != BlockedPawn)
> 		      POSITION->bitboard[PEZZO[i]] |= SqSet[v[i]];
> 		    else
> 		      {
> 			POSITION->bitboard[wEnumP] |= SqSet[v[i]];
> 			POSITION->bitboard[bEnumP] |= SqSet[v[i] + 8];
> 		      }
> 		  }		
> 		wBitboardOcc = wBitboardP | wBitboardN |
> 		  wBitboardB | wBitboardR | wBitboardQ | wBitboardK;
> #ifndef MAGIC_BITBOARDS
> 		POSITION->OccupiedL90 = POSITION->OccupiedL45 =
> 		  POSITION->OccupiedR45 = 0;
> #endif
> 		bBitboardOcc = bBitboardP | bBitboardN |
> 		  bBitboardB | bBitboardR | bBitboardQ | bBitboardK;
> 		O = wBitboardOcc | bBitboardOcc;
> 		POSITION->OccupiedBW = O;
> 		for (i = 0; i < 4; i++)
> 		  {
> 		    if (PEZZO[i] && PEZZO[i] != BlockedPawn)
> 		      POSITION->sq[v[i]] = PEZZO[i];
> 		    if (PEZZO[i] == BlockedPawn)
> 		      {
> 			POSITION->sq[v[i]] = wEnumP;
> 			POSITION->sq[v[i] + 8] = bEnumP;
> 		      }
> 		    if (PEZZO[i] == wEnumB && SqSet[v[i]] & LIGHT)
> 		      POSITION->sq[v[i]] = wEnumBL;
> 		    if (PEZZO[i] == wEnumB && SqSet[v[i]] & DARK)
> 		      POSITION->sq[v[i]] = wEnumBD;
> 		    if (PEZZO[i] == bEnumB && SqSet[v[i]] & LIGHT)
> 		      POSITION->sq[v[i]] = bEnumBL;
> 		    if (PEZZO[i] == bEnumB && SqSet[v[i]] & DARK)
> 		      POSITION->sq[v[i]] = bEnumBD;
> 		  }
> 		POSITION->wtm = TRUE;
> 		POSITION->sq[POSITION->wKsq] = wEnumK;
> 		POSITION->sq[POSITION->bKsq] = bEnumK;
> #ifndef MAGIC_BITBOARDS
> 		while (O)
> 		  {
> 		    b = BSF (O);
> 		    POSITION->OccupiedL90 |= SqSet[Left90[b]];
> 		    POSITION->OccupiedL45 |= SqSet[Left45[b]];
> 		    POSITION->OccupiedR45 |= SqSet[Right45[b]];
> 		    BitClear (b, O);
> 		  }
> #endif
> 		POSITION->wtm = TRUE;
> 		Mobility (POSITION);
> #define IN_CHECK (wBitboardK & POSITION->DYN->bAtt)
> #ifdef ROBBO_SCACCO
> 		if (IN_CHECK && PEZZO[2]) /* safe with Z */
> 		  {
> 		    check++;
> 		    fis2 (TH, w, MODO);
> 		    goto LOOP;
> 		  }
> #endif
> 
> #define IS_ILLEGAL \
>   (POSITION->wtm ? \
>    (bBitboardK & POSITION->DYN->wAtt) : (wBitboardK & POSITION->DYN->bAtt) )
> #define BAD \
>   ( (PEZZO[1] && v[0] == v[1]) || (PEZZO[2] && v[0] == v[2]) || \
>     (PEZZO[3] && v[0] == v[3]) || (PEZZO[2] && v[1] == v[2]) || \
>     (PEZZO[3] && v[1] == v[3]) || (PEZZO[3] && v[2] == v[3]) || \
>     (v[0] == POSITION->wKsq) || (v[1] == POSITION->wKsq) || \
>     (v[2] == POSITION->wKsq) || (v[3] == POSITION->wKsq) || \
>     (v[0] == POSITION->bKsq) || (v[1] == POSITION->bKsq) || \
>     (v[2] == POSITION->bKsq) || (v[3] == POSITION->bKsq) || \
>     (PEZZO[0] == BlockedPawn && \
>      ((v[0] + 8) == v[1] || (v[0] + 8 == v[2]) || (v[0] + 8 == v[3]) \
>       || (v[0] + 8) == POSITION->wKsq || (v[0] + 8) == POSITION->bKsq)) || \
>     (PEZZO[1] == BlockedPawn && \
>      ((v[1] + 8) == v[0] || (v[1] + 8 == v[2]) || (v[1] + 8 == v[3]) \
>       || (v[1] + 8) == POSITION->wKsq || (v[1] + 8) == POSITION->bKsq)) || \
>     (PEZZO[2] == BlockedPawn && \
>      ((v[2] + 8) == v[0] || (v[2] + 8 == v[1]) || (v[2] + 8 == v[3]) \
>       || (v[2] + 8) == POSITION->wKsq || (v[2] + 8) == POSITION->bKsq)) || \
>     (PEZZO[3] == BlockedPawn && \
>      ((v[3] + 8) == v[0] || (v[3] + 8 == v[1]) || (v[3] + 8 == v[2]) \
>       || (v[3] + 8) == POSITION->wKsq || (v[3] + 8) == POSITION->bKsq)) \
>     || IS_ILLEGAL)
> 		if (BAD || !RobboTotalBaseScore (POSITION, &s) || s == dROTT)
> 		  {
> 		    mal++;
> 		    fis2 (TH, w, MODO);
> 		    goto LOOP;
> 		  }
> 		if (DISCO_PATTA (s) && MODO == ePAT)
> 		  {
> 		    C[2]++;
> 		    rip++;
> 		    fis2 (TH, w, MODO);
> 		    goto LOOP;
> 		  }
> 		if (DISCO_VITTORIA (s) && MODO == eVIT)
> 		  {
> 		    C[1]++;
> 		    rip++;
> 		    fis2 (TH, w, MODO);
> 		    goto LOOP;
> 		  }
> 		if (DISCO_PERDITA (s) && MODO == ePER)
> 		  {
> 		    C[3]++;
> 		    rip++;
> 		    fis2 (TH, w, MODO);
> 		    goto LOOP;
> 		  }
> 		list = GenCapturesTotal (POSITION, LIST);
> 		for (u = 0; u < list - LIST; u++)
> 		  {
> 		    move = LIST[u].move;
> 		    to = TO (move);
> 		    fr = FROM (move);
> 		    cp = POSITION->sq[to];
> 		    pr = MoveIsProm (move);
> 		    pi = POSITION->sq[fr];
> 		    POSITION->bitboard[cp] ^= SqSet[to];
> 		    POSITION->bitboard[pi] ^= SqSet[to] ^ SqSet[fr];
> 		    if (pi == wEnumK)
> 		      POSITION->wKsq = to;
> 		    wBitboardOcc ^= SqSet[to] ^ SqSet[fr];
> 		    if (cp)
> 		      bBitboardOcc ^= SqSet[to];
> 		    POSITION->OccupiedBW =  wBitboardOcc | bBitboardOcc;
> #ifndef MAGIC_BITBOARDS
> 		    POSITION->OccupiedL90 ^=  SqSet[Left90[fr]];
> 		    POSITION->OccupiedL45 ^= SqSet[Left45[fr]];
> 		    POSITION->OccupiedR45 ^= SqSet[Right45[fr]];
> 		    if (!cp)
> 		      {
> 			POSITION->OccupiedL90 ^= SqSet[Left90[to]];
> 			POSITION->OccupiedL45 ^= SqSet[Left45[to]];
> 			POSITION->OccupiedR45 ^= SqSet[Right45[to]];
> 		      }
> #endif
> 		    if (pr && ((move >> 12) & 7) == 7)
> 		      {
> 			wBitboardP ^= SqSet[to];
> 			wBitboardQ ^= SqSet[to];
> 		      }
> 		    POSITION->sq[to] = pi;
> 		    if (pr)
> 		      POSITION->sq[to] = wEnumQ;
> 		    POSITION->wtm = FALSE;
> 		    Mobility (POSITION);
> 		    if (!IS_ILLEGAL && RobboTotalBaseScore (POSITION, &vc))
> 		      pb++;
> 		    else
> 		      vc = 1000;
> 		    c2++;
> 		    POSITION->wtm = TRUE;
> 		    POSITION->bitboard[cp] ^= SqSet[to];
> 		    POSITION->bitboard[pi] ^= SqSet[fr];
> 		    if (pi == wEnumK)
> 		      POSITION->wKsq = fr;
> 		    POSITION->sq[fr] = pi;
> 		    POSITION->sq[to] = cp;
> 		    wBitboardOcc ^= SqSet[to] ^ SqSet[fr];
> 		    if (cp)
> 		      bBitboardOcc ^= SqSet[to];
> 		    POSITION->OccupiedBW = wBitboardOcc | bBitboardOcc;
> #ifndef MAGIC_BITBOARDS
> 		    POSITION->OccupiedL90 ^= SqSet[Left90[fr]];
> 		    POSITION->OccupiedL45 ^= SqSet[Left45[fr]];
> 		    POSITION->OccupiedR45 ^= SqSet[Right45[fr]];
> 		    if (!cp)
> 		      {
> 			POSITION->OccupiedL90 ^= SqSet[Left90[to]];
> 			POSITION->OccupiedL45 ^= SqSet[Left45[to]];
> 			POSITION->OccupiedR45 ^= SqSet[Right45[to]];
> 		      }
> #endif
> 		    if (pr && ((move >> 12) & 7) == 7)
> 		      {
> 			wBitboardP ^= SqSet[to];
> 			wBitboardQ ^= SqSet[to];
> 		      }
> 		    if (pr && ((move >> 12) & 7) == 4)
> 		      {
> 			wBitboardP ^= SqSet[to];
> 			wBitboardN ^= SqSet[to];
> 		      }
> 		    if (vc != 1000 && DISCO_PERDITA (vc))
> 		      {
> 			cattvi++;
> 			fis2 (TH, w, MODO);
> 			goto LOOP;
> 		      }
> 		    if (vc != 1000 && DISCO_PATTA (vc) && DISCO_PATTA (s)
> 			&& ott (TH, w - 1) != eVIT && ott (TH, w - 1) != vNON)
> 		      {
> 			cattpa++;
> 			fis2 (TH, w, MODO);
> 			goto LOOP;
> 		      }
> 		  }
> 		POSITION->wtm = TRUE;
> 		if (DISCO_PATTA (s))
> 		  {
> 		    C[2]++;
> 		    MODO = ePAT;
> 		  }
> 		if (DISCO_VITTORIA (s))
> 		  {
> 		    C[1]++;
> 		    MODO = eVIT;
> 		  }
> 		if (DISCO_PERDITA (s))
> 		  {
> 		    C[3]++;
> 		    MODO = ePER;
> 		  }
> 		fis2 (TH, w, MODO);
> 		TotalBase++;
> 	      LOOP:
> 		for (i = 0; i < 4; i++)
> 		  {
> 		    if (PEZZO[i])
> 		      POSITION->sq[v[i]] = 0;
> 		    if (PEZZO[i] == BlockedPawn)
> 		      POSITION->sq[v[i] + 8] = 0;
> 		  }
> 		POSITION->sq[POSITION->wKsq] = 0;
> 		POSITION->sq[POSITION->bKsq] = 0;
> 	      }
>     }
>   printf ("s%d 210:%d/%d/%d\nmal:%d sc:%d cat:%d/%d"
> 	  " rip:%d RTB:%d\ntot:%d/%d pb:%d/%d\n",
> 	  C[0], C[1], C[2], C[3], mal,
> 	  check, cattvi, cattpa, rip, TotalBase,
> 	  mal + check + cattvi + cattpa + rip + TotalBase, w, pb, c2);
>   i = 0;
>   while (ott (TH, i) == vNON)
>     i++;
>   s = ott (TH, i);
>   j = 0;
>   while (j <= i)
>     fis2 (TH, j, s);
>   rle (TH, w, nome_file, C);
>   free (TH);
> }
> 
> /**************************************************/
> 
> static void simmetria (char *C, char *SIM) /* Z base? */
263c620
<   char C[16], SIM[16], PEZb[4] = "QRBN", PEZn[4] = "qrbn", A[16];
---
>   char C[16], SIM[16], PEZb[8] = "QRBN", PEZn[8] = "qrbn", A[16];
358,360c715,717
<   POSITION->DYN_ROOT = malloc(MAXIMUM_PLY * sizeof(typeDYNAMIC));
<   POSITION->DYN = POSITION->DYN_ROOT;
<   TripleBaseMake (POSITION, PI[0], PI[1], PI[2], I);
---
>   POSITION->DYN_ROOT = malloc (MAXIMUM_PLY * sizeof(typeDYNAMIC));
>   POSITION->DYN = POSITION->DYN_ROOT + 1;
>   TripleBaseMake (POSITION, PI, I);
362,955d718
< }
< 
< #define wEnumB wEnumBL
< #define bEnumB bEnumBL
< 
< void
< TripleBaseMake
<  (typePOS *POSITION, int PEZZO1, int PEZZO2, int PEZZO3, char *inome_file)
< {
<   int check = 0, u, MODO = vNON, mal = 0, TotalBase = 0, vc, va1, va2, va3, w = 0;
<   int b, s, cattvi = 0, cattpa = 0;
<   int bK, wK, move, to, fr, pb = 0, c2 = 0, pr, pi, cp;
<   const short int *PILA;
<   char *TH, *E1, *E2, *E3;
<   uint64 O;
<   int rip = 0;
<   typeMoveList LIST[256], *list;
<   int i, j, k;
<   char nome_file[256];
< 
< #ifdef NOME_WINDOWS
<   nome_file[0] = 'K';
<   j = 0;
<   while (inome_file[j])
<     {
<       if (inome_file[j] <= 'Z')
< 	{
< 	  nome_file[2 * j + 1] = 'w';
< 	  nome_file[2 * j + 2] = inome_file[j] + 32;
< 	}
<       else
< 	{
< 	  nome_file[2 * j + 1] = 'b';
< 	  nome_file[2 * j + 2] = inome_file[j];
< 	}
<       j++;
<     }
<   nome_file[2 * j + 1] = 0;
< #else
<   strcpy(nome_file, inome_file);
< #endif
< 
<   printf ("RobboTriple_fare %s\n", nome_file);
<   POSITION->wtm = TRUE;
<   p = 0;
<   E1 = ENUMn;
<   E2 = ENUMn;
<   E3 = ENUMn;
<   PILA = RE_normale;
<   if (PEZZO1 == wEnumP || PEZZO1 == bEnumP || PEZZO1 == BlockedPawn)
<     PILA = RE_pedone;
<   if (PEZZO2 == wEnumP || PEZZO2 == bEnumP || PEZZO2 == BlockedPawn)
<     PILA = RE_pedone;
<   if (PEZZO3 == wEnumP || PEZZO3 == bEnumP || PEZZO3 == BlockedPawn)
<     PILA = RE_pedone;
<   C[0] = C[1] = C[2] = C[3] = 0;
<   POSITION->DYN->reversible = 0;
<   POSITION->DYN->ep = POSITION->DYN->oo = 0;
<   if (!PEZZO1)
<     E1 = ENUM0;
<   if (PEZZO1 == wEnumP)
<     E1 = ENUM_BI_PED;
<   if (PEZZO1 == bEnumP)
<     E1 = ENUM_NE_PED;
<   if (PEZZO1 == BlockedPawn)
<     E1 = ENUM_BLOCKED;
<   if (!PEZZO2)
<     E2 = ENUM0;
<   if (PEZZO2 == wEnumP)
<     E2 = ENUM_BI_PED;
<   if (PEZZO2 == bEnumP)
<     E2 = ENUM_NE_PED;
<   if (PEZZO2 == BlockedPawn)
<     E2 = ENUM_BLOCKED;
<   if (!PEZZO3)
<     E3 = ENUM0;
<   if (PEZZO3 == wEnumP)
<     E3 = ENUM_BI_PED;
<   if (PEZZO3 == bEnumP)
<     E3 = ENUM_NE_PED;
<   if (PEZZO3 == BlockedPawn)
<     E3 = ENUM_BLOCKED;
<   if (PEZZO1 == wEnumB || PEZZO1 == bEnumB)
<     E1 = ENUM_ALF;
<   if (PEZZO2 == wEnumB || PEZZO2 == bEnumB)
<     E2 = ENUM_ALF;
<   if (PEZZO3 == wEnumB || PEZZO3 == bEnumB)
<     E3 = ENUM_ALF;
<   TH = malloc (355100000 / 4);
<   for (i = 0; i < 355100000 / 4; i++)
<     TH[i] = 0;
<   for (u = A1; u <= H8; u++)
<     POSITION->sq[u] = 0;
<   int rf, RF = (PILA == RE_pedone) ? 1806 : 462;
<   for (rf = 0; rf < RF; rf++)
<     {
<       if (PILA == RE_normale)
< 	{
< 	  wK = inverso_normale_re[rf] >> 6;
< 	  bK = inverso_normale_re[rf] & 63;
< 	}
<       if (PILA == RE_pedone)
< 	{
< 	  wK = inverso_pedone_re[rf] >> 6;
< 	  bK = inverso_pedone_re[rf] & 63;
< 	}
<       if (PEZZO3 && (PILA[64 * wK + bK] & 15) == 0)
< 	printf ("%c%c %c%c %d %d\n", (wK & 7) + 'a', (wK / 8) + '1',
< 		(bK & 7) + 'a', (bK / 8) + '1', w, PILA[64 * wK + bK]);
<       for (i = 0; (va1 = E1[i]) != -1; i++)
< 	for (j = 0; (va2 = E2[j]) != -1; j++)
< 	  for (k = 0; (va3 = E3[k]) != -1; k++)
< 	    {
< 	      if (PEZZO1 == PEZZO2 && PEZZO1 && j >= i)
< 		continue;
< 	      if (PEZZO2 == PEZZO3 && PEZZO2 && k >= j)
< 		continue;
< 	      POSITION->wKsq = wK;
< 	      POSITION->bKsq = bK;
< 	      wBitboardK = SqSet[wK];
< 	      bBitboardK = SqSet[bK];
< 	      wBitboardQ = wBitboardR = wBitboardN = wBitboardBD =
< 		wBitboardBL = wBitboardP = 0;
< 	      bBitboardQ = bBitboardR = bBitboardN = bBitboardBD =
< 		bBitboardBL = bBitboardP = 0;
< 	      switch (PEZZO1)
< 		{
< 		case wEnumQ:
< 		  wBitboardQ |= SqSet[va1];
< 		  break;
< 		case wEnumR:
< 		  wBitboardR |= SqSet[va1];
< 		  break;
< 		case wEnumN:
< 		  wBitboardN |= SqSet[va1];
< 		  break;
< 		case wEnumP:
< 		  wBitboardP |= SqSet[va1];
< 		  break;
< 		case bEnumQ:
< 		  bBitboardQ |= SqSet[va1];
< 		  break;
< 		case bEnumP:
< 		  bBitboardP |= SqSet[va1];
< 		  break;
< 		case bEnumN:
< 		  bBitboardN |= SqSet[va1];
< 		  break;
< 		case bEnumR:
< 		  bBitboardR |= SqSet[va1];
< 		  break;
< 		case wEnumB:
< 		  if (SqSet[va1] & LIGHT)
< 		    wBitboardBL |= SqSet[va1];
< 		  else
< 		    wBitboardBD |= SqSet[va1];
< 		  break;
< 		case bEnumB:
< 		  if (SqSet[va1] & LIGHT)
< 		    bBitboardBL |= SqSet[va1];
< 		  else
< 		    bBitboardBD |= SqSet[va1];
< 		  break;
< 		case BlockedPawn:
< 		  wBitboardP |= SqSet[va1];
< 		  bBitboardP |= SqSet[va1 + 8];
< 		  break;
< 		}
< 	      switch (PEZZO2)
< 		{
< 		case wEnumQ:
< 		  wBitboardQ |= SqSet[va2];
< 		  break;
< 		case wEnumR:
< 		  wBitboardR |= SqSet[va2];
< 		  break;
< 		case wEnumN:
< 		  wBitboardN |= SqSet[va2];
< 		  break;
< 		case wEnumP:
< 		  wBitboardP |= SqSet[va2];
< 		  break;
< 		case bEnumQ:
< 		  bBitboardQ |= SqSet[va2];
< 		  break;
< 		case bEnumP:
< 		  bBitboardP |= SqSet[va2];
< 		  break;
< 		case bEnumN:
< 		  bBitboardN |= SqSet[va2];
< 		  break;
< 		case bEnumR:
< 		  bBitboardR |= SqSet[va2];
< 		  break;
< 		case wEnumB:
< 		  if (SqSet[va2] & LIGHT)
< 		    wBitboardBL |= SqSet[va2];
< 		  else
< 		    wBitboardBD |= SqSet[va2];
< 		  break;
< 		case bEnumB:
< 		  if (SqSet[va2] & LIGHT)
< 		    bBitboardBL |= SqSet[va2];
< 		  else
< 		    bBitboardBD |= SqSet[va2];
< 		  break;
< 		case BlockedPawn:
< 		  wBitboardP |= SqSet[va2];
< 		  bBitboardP |= SqSet[va2 + 8];
< 		  break;
< 		}
< 	      switch (PEZZO3)
< 		{
< 		case wEnumQ:
< 		  wBitboardQ |= SqSet[va3];
< 		  break;
< 		case wEnumR:
< 		  wBitboardR |= SqSet[va3];
< 		  break;
< 		case wEnumN:
< 		  wBitboardN |= SqSet[va3];
< 		  break;
< 		case wEnumP:
< 		  wBitboardP |= SqSet[va3];
< 		  break;
< 		case bEnumQ:
< 		  bBitboardQ |= SqSet[va3];
< 		  break;
< 		case bEnumP:
< 		  bBitboardP |= SqSet[va3];
< 		  break;
< 		case bEnumN:
< 		  bBitboardN |= SqSet[va3];
< 		  break;
< 		case bEnumR:
< 		  bBitboardR |= SqSet[va3];
< 		  break;
< 		case wEnumB:
< 		  if (SqSet[va3] & LIGHT)
< 		    wBitboardBL |= SqSet[va3];
< 		  else
< 		    wBitboardBD |= SqSet[va3];
< 		  break;
< 		case bEnumB:
< 		  if (SqSet[va3] & LIGHT)
< 		    bBitboardBL |= SqSet[va3];
< 		  else
< 		    bBitboardBD |= SqSet[va3];
< 		  break;
< 		case BlockedPawn:
< 		  wBitboardP |= SqSet[va3];
< 		  bBitboardP |= SqSet[va3 + 8];
< 		  break;
< 		}
< 
< 	      wBitboardOcc = wBitboardP | wBitboardN |
< 		wBitboardB | wBitboardR | wBitboardQ | wBitboardK;
< 	      POSITION->OccupiedL90 = POSITION->OccupiedL45 =
< 		POSITION->OccupiedR45 = 0;
< 	      bBitboardOcc = bBitboardP | bBitboardN |
< 		bBitboardB | bBitboardR | bBitboardQ | bBitboardK;
< 	      O = wBitboardOcc | bBitboardOcc;
< 	      POSITION->OccupiedBW = O;
< 	      if (PEZZO1)
< 		POSITION->sq[va1] = PEZZO1;
< 	      if (PEZZO2)
< 		POSITION->sq[va2] = PEZZO2;
< 	      if (PEZZO3)
< 		POSITION->sq[va3] = PEZZO3;
< 	      if (PEZZO1 == BlockedPawn)
< 		{
< 		  POSITION->sq[va1] = wEnumP;
< 		  POSITION->sq[va1 + 8] = bEnumP;
< 		}
< 	      if (PEZZO2 == BlockedPawn)
< 		{
< 		  POSITION->sq[va2] = wEnumP;
< 		  POSITION->sq[va2 + 8] = bEnumP;
< 		}
< 	      if (PEZZO3 == BlockedPawn)
< 		{
< 		  POSITION->sq[va3] = wEnumP;
< 		  POSITION->sq[va3 + 8] = bEnumP;
< 		}
< 	      if (PEZZO1 == wEnumB && SqSet[va1] & LIGHT)
< 		POSITION->sq[va1] = wEnumBL;
< 	      if (PEZZO1 == wEnumB && SqSet[va1] & DARK)
< 		POSITION->sq[va1] = wEnumBD;
< 	      if (PEZZO2 == wEnumB && SqSet[va2] & LIGHT)
< 		POSITION->sq[va2] = wEnumBL;
< 	      if (PEZZO2 == wEnumB && SqSet[va2] & DARK)
< 		POSITION->sq[va2] = wEnumBD;
< 	      if (PEZZO3 == wEnumB && SqSet[va3] & LIGHT)
< 		POSITION->sq[va3] = wEnumBL;
< 	      if (PEZZO3 == wEnumB && SqSet[va3] & DARK)
< 		POSITION->sq[va3] = wEnumBD;
< 	      if (PEZZO1 == bEnumB && SqSet[va1] & LIGHT)
< 		POSITION->sq[va1] = bEnumBL;
< 	      if (PEZZO1 == bEnumB && SqSet[va1] & DARK)
< 		POSITION->sq[va1] = bEnumBD;
< 	      if (PEZZO2 == bEnumB && SqSet[va2] & LIGHT)
< 		POSITION->sq[va2] = bEnumBL;
< 	      if (PEZZO2 == bEnumB && SqSet[va2] & DARK)
< 		POSITION->sq[va2] = bEnumBD;
< 	      if (PEZZO3 == bEnumB && SqSet[va3] & LIGHT)
< 		POSITION->sq[va3] = bEnumBL;
< 	      if (PEZZO3 == bEnumB && SqSet[va3] & DARK)
< 		POSITION->sq[va3] = bEnumBD;
< 	      POSITION->wtm = TRUE;
< 	      POSITION->sq[POSITION->wKsq] = wEnumK;
< 	      POSITION->sq[POSITION->bKsq] = bEnumK;
< 	      while (O)
< 		{
< 		  b = BSF (O);
< 		  POSITION->OccupiedL90 |= SqSet[Left90[b]];
< 		  POSITION->OccupiedL45 |= SqSet[Left45[b]];
< 		  POSITION->OccupiedR45 |= SqSet[Right45[b]];
< 		  BitClear (b, O);
< 		}
< 	      POSITION->wtm = TRUE;
< 	      Mobility (POSITION);
< #define IN_CHECK (wBitboardK & POSITION->DYN->bAtt)
< #ifdef ROBBO_SCACCO
< 	      if (IN_CHECK && PEZZO3) /* safe with Z */
< 		{
< 		  check++;
< 		  fis2 (TH, w, MODO);
< 		  goto LOOP;
< 		}
< #endif
< 
< #define IS_ILLEGAL \
<   (POSITION->wtm ? \
<    (bBitboardK & POSITION->DYN->wAtt) : (wBitboardK & POSITION->DYN->bAtt) )
< #define BAD \
<   ( (va1 == va2 && PEZZO1 != 0) || (va1 == va3 && PEZZO1 != 0) || \
<     (va2 == va3 && PEZZO2 != 0) || \
<     (PEZZO1 == BlockedPawn && \
<      (((va1 + 8) == va2 || (va1 + 8) == va3) || \
<       ((va1 + 8) == POSITION->wKsq || (va1 + 8) == POSITION->bKsq))) || \
<     (PEZZO2 == BlockedPawn && \
<      (((va2 + 8) == va1 || (va2 + 8) == va3) || \
<       ((va2 + 8) == POSITION->wKsq || (va2 + 8) == POSITION->bKsq))) || \
<     (PEZZO3 == BlockedPawn && \
<      (((va3 + 8) == va1 || (va3 + 8) == va2) || \
<       ((va3 + 8) == POSITION->wKsq || (va3 + 8) == POSITION->bKsq))) || \
<     (va1 == POSITION->wKsq) || (va2 == POSITION->wKsq) || \
<     (va3 == POSITION->wKsq) || (va1 == POSITION->bKsq) || \
<     (va2 == POSITION->bKsq) || (va3 == POSITION->bKsq) || IS_ILLEGAL)
< 	      if (BAD || !RobboTotalBaseScore (POSITION, &s) || s == dROTT)
< 		{
< 		  mal++;
< 		  fis2 (TH, w, MODO);
< 		  goto LOOP;
< 		}
< 	      if (DISCO_PATTA (s) && MODO == ePAT)
< 		{
< 		  C[2]++;
< 		  rip++;
< 		  fis2 (TH, w, MODO);
< 		  goto LOOP;
< 		}
< 	      if (DISCO_VITTORIA (s) && MODO == eVIT)
< 		{
< 		  C[1]++;
< 		  rip++;
< 		  fis2 (TH, w, MODO);
< 		  goto LOOP;
< 		}
< 	      if (DISCO_PERDITA (s) && MODO == ePER)
< 		{
< 		  C[3]++;
< 		  rip++;
< 		  fis2 (TH, w, MODO);
< 		  goto LOOP;
< 		}
< 	      list = GenCapturesTotal (POSITION, LIST);
< 	      for (u = 0; u < list - LIST; u++)
< 		{
< 		  move = LIST[u].move;
< 		  to = TO (move);
< 		  fr = FROM (move);
< 		  cp = POSITION->sq[to];
< 		  pr = MoveIsProm (move);
< 		  pi = POSITION->sq[fr];
< 		  switch (cp)
< 		    {
< 		    case bEnumN:
< 		      bBitboardN ^= SqSet[to];
< 		      break;
< 		    case bEnumR:
< 		      bBitboardR ^= SqSet[to];
< 		      break;
< 		    case bEnumBL:
< 		      bBitboardBL ^= SqSet[to];
< 		      break;
< 		    case bEnumBD:
< 		      bBitboardBD ^= SqSet[to];
< 		      break;
< 		    case bEnumP:
< 		      bBitboardP ^= SqSet[to];
< 		      break;
< 		    case bEnumQ:
< 		      bBitboardQ ^= SqSet[to];
< 		      break;
< 		    }
< 		  switch (pi)
< 		    {
< 		    case wEnumK:
< 		      POSITION->wKsq = to;
< 		      wBitboardK = SqSet[to];
< 		      break;
< 		    case wEnumR:
< 		      wBitboardR ^= SqSet[to] ^ SqSet[fr];
< 		      break;
< 		    case wEnumQ:
< 		      wBitboardQ ^= SqSet[to] ^ SqSet[fr];
< 		      break;
< 		    case wEnumBL:
< 		      wBitboardBL ^= SqSet[to] ^ SqSet[fr];
< 		      break;
< 		    case wEnumBD:
< 		      wBitboardBD ^= SqSet[to] ^ SqSet[fr];
< 		      break;
< 		    case wEnumN:
< 		      wBitboardN ^= SqSet[to] ^ SqSet[fr];
< 		      break;
< 		    case wEnumP:
< 		      wBitboardP ^= SqSet[to] ^ SqSet[fr];
< 		      break;
< 		    }
< 		  wBitboardOcc ^= SqSet[to] ^ SqSet[fr];
< 		  if (cp)
< 		    bBitboardOcc ^= SqSet[to];
< 		  POSITION->OccupiedBW =  wBitboardOcc | bBitboardOcc;
< 		  POSITION->OccupiedL90 ^=  SqSet[Left90[fr]];
< 		  POSITION->OccupiedL45 ^= SqSet[Left45[fr]];
< 		  POSITION->OccupiedR45 ^= SqSet[Right45[fr]];
< 		  if (!cp)
< 		    {
< 		      POSITION->OccupiedL90 ^= SqSet[Left90[to]];
< 		      POSITION->OccupiedL45 ^= SqSet[Left45[to]];
< 		      POSITION->OccupiedR45 ^= SqSet[Right45[to]];
< 		    }
< 		  if (pr && ((move >> 12) & 7) == 7)
< 		    {
< 		      wBitboardP ^= SqSet[to];
< 		      wBitboardQ ^= SqSet[to];
< 		    }
< 		  POSITION->sq[to] = pi;
< 		  if (pr)
< 		    POSITION->sq[to] = wEnumQ;
< 		  POSITION->wtm = FALSE;
< 		  Mobility (POSITION);
< 		  if (!IS_ILLEGAL && RobboTotalBaseScore (POSITION, &vc))
< 		    pb++;
< 		  else
< 		    vc = 1000;
< 		  c2++;
< 		  POSITION->wtm = TRUE;
< 		  switch (cp)
< 		    {
< 		    case bEnumN:
< 		      bBitboardN ^= SqSet[to];
< 		      break;
< 		    case bEnumR:
< 		      bBitboardR ^= SqSet[to];
< 		      break;
< 		    case bEnumBL:
< 		      bBitboardBL ^= SqSet[to];
< 		      break;
< 		    case bEnumBD:
< 		      bBitboardBD ^= SqSet[to];
< 		      break;
< 		    case bEnumP:
< 		      bBitboardP ^= SqSet[to];
< 		      break;
< 		    case bEnumQ:
< 		      bBitboardQ ^= SqSet[to];
< 		      break;
< 		    }
< 		  switch (pi)
< 		    {
< 		    case wEnumK:
< 		      POSITION->wKsq = fr;
< 		      wBitboardK = SqSet[fr];
< 		      break;
< 		    case wEnumR:
< 		      wBitboardR ^= SqSet[to] ^ SqSet[fr];
< 		      break;
< 		    case wEnumQ:
< 		      wBitboardQ ^= SqSet[to] ^ SqSet[fr];
< 		      break;
< 		    case wEnumBL:
< 		      wBitboardBL ^= SqSet[to] ^ SqSet[fr];
< 		      break;
< 		    case wEnumBD:
< 		      wBitboardBD ^= SqSet[to] ^ SqSet[fr];
< 		      break;
< 		    case wEnumN:
< 		      wBitboardN ^= SqSet[to] ^ SqSet[fr];
< 		      break;
< 		    case wEnumP:
< 		      wBitboardP ^= SqSet[to] ^ SqSet[fr];
< 		      break;
< 		    }
< 		  POSITION->sq[fr] = pi;
< 		  POSITION->sq[to] = cp;
< 		  wBitboardOcc ^= SqSet[to] ^ SqSet[fr];
< 		  if (cp)
< 		    bBitboardOcc ^= SqSet[to];
< 		  POSITION->OccupiedBW = wBitboardOcc | bBitboardOcc;
< 		  POSITION->OccupiedL90 ^= SqSet[Left90[fr]];
< 		  POSITION->OccupiedL45 ^= SqSet[Left45[fr]];
< 		  POSITION->OccupiedR45 ^= SqSet[Right45[fr]];
< 		  if (!cp)
< 		    {
< 		      POSITION->OccupiedL90 ^= SqSet[Left90[to]];
< 		      POSITION->OccupiedL45 ^= SqSet[Left45[to]];
< 		      POSITION->OccupiedR45 ^= SqSet[Right45[to]];
< 		    }
< 		  if (pr && ((move >> 12) & 7) == 7)
< 		    {
< 		      wBitboardP ^= SqSet[to];
< 		      wBitboardQ ^= SqSet[to];
< 		    }
< 		  if (pr && ((move >> 12) & 7) == 4)
< 		    {
< 		      wBitboardP ^= SqSet[to];
< 		      wBitboardN ^= SqSet[to];
< 		    }
< 		  if (vc != 1000 && DISCO_PERDITA (vc))
< 		    {
< 		      cattvi++;
< 		      fis2 (TH, w, MODO);
< 		      goto LOOP;
< 		    }
< 		  if (vc != 1000 && DISCO_PATTA (vc) && DISCO_PATTA (s)
< 		      && ott (TH, w - 1) != eVIT && ott (TH, w - 1) != vNON)
< 		    {
< 		      cattpa++;
< 		      fis2 (TH, w, MODO);
< 		      goto LOOP;
< 		    }
< 		}
< 	      POSITION->wtm = TRUE;
< 	      if (DISCO_PATTA (s))
< 		{
< 		  C[2]++;
< 		  MODO = ePAT;
< 		}
< 	      if (DISCO_VITTORIA (s))
< 		{
< 		  C[1]++;
< 		  MODO = eVIT;
< 		}
< 	      if (DISCO_PERDITA (s))
< 		{
< 		  C[3]++;
< 		  MODO = ePER;
< 		}
< 	      fis2 (TH, w, MODO);
< 	      TotalBase++;
< 	    LOOP:
< 	      if (PEZZO1)
< 		POSITION->sq[va1] = 0;
< 	      if (PEZZO1 == BlockedPawn)
< 		POSITION->sq[va1 + 8] = 0;
< 	      if (PEZZO2)
< 		POSITION->sq[va2] = 0;
< 	      if (PEZZO2 == BlockedPawn)
< 		POSITION->sq[va2 + 8] = 0;
< 	      if (PEZZO3)
< 		POSITION->sq[va3] = 0;
< 	      if (PEZZO3 == BlockedPawn)
< 		POSITION->sq[va3 + 8] = 0;
< 	      POSITION->sq[POSITION->wKsq] = 0;
< 	      POSITION->sq[POSITION->bKsq] = 0;
< 	    }
<     }
<   printf ("s%d 210:%d/%d/%d\nmal:%d sc:%d cat:%d/%d"
< 	  " rip:%d RTB:%d\ntot:%d/%d pb:%d/%d\n",
< 	  C[0], C[1], C[2], C[3], mal,
< 	  check, cattvi, cattpa, rip, TotalBase,
< 	  mal + check + cattvi + cattpa + rip + TotalBase, w, pb, c2);
<   i = 0;
<   while (ott (TH, i) == vNON)
<     i++;
<   s = ott (TH, i);
<   j = 0;
<   while (j <= i)
<     fis2 (TH, j, s);
<   rle (TH, w, nome_file, C);
<   free (TH);
diff 999954/RobboTripleValue.c 999953/RobboTripleValue.c
221d220
< #if 1
223d221
< #endif
238,240c236
< #if 1
<       POSITION->tbhits++;
< #endif
---
> 	  POSITION->tbhits++;
256c252
<    (wBitboardK & POSITION->DYN->bAtt) : (bBitboardK & POSITION->DYN->wAtt))
---
>    (wBitboardK & POSITION->DYN->bAtt) : (bBitboardK & POSITION->DYN->wAtt) )
diff 999954/RobboTriple_iniz.c 999953/RobboTriple_iniz.c
33a34
>   triple->data = triple->ind = NULL;
diff 999954/Robbo_build.c 999953/Robbo_build.c
940a941,946
> 	  sprintf (OTT, "%s/51", TOTAL_BASE_DIRECTORY);
> 	  GetTotalBase (OTT);
> 	  sprintf (OTT, "%s/42", TOTAL_BASE_DIRECTORY);
> 	  GetTotalBase (OTT);
> 	  sprintf (OTT, "%s/33", TOTAL_BASE_DIRECTORY);
> 	  GetTotalBase (OTT);
968a975,980
> 	  sprintf (OTT, "%s/51", TRIPLE_DIR);
> 	  GetTripleBase (OTT);
> 	  sprintf (OTT, "%s/42", TRIPLE_DIR);
> 	  GetTripleBase (OTT);
> 	  sprintf (OTT, "%s/33", TRIPLE_DIR);
> 	  GetTripleBase (OTT);
982c994
<       if (b == 1)
---
>       if (b <= 1)
diff 999954/Robbo_comp.c 999953/Robbo_comp.c
320,321c320,321
<   int min = 1024;
<   if (nb > 1024)
---
>   int min = 4096;
>   if (nb > 4096)
400c400
<   B = malloc (TOCCO + 1024);
---
>   B = malloc (TOCCO + 4096);
diff 999954/Robbo_glue.c 999953/Robbo_glue.c
47a48,53
>   sprintf (DIR, "%s/51", TOTAL_BASE_DIRECTORY);
>   GetTotalBase (DIR);
>   sprintf (DIR, "%s/42", TOTAL_BASE_DIRECTORY);
>   GetTotalBase (DIR);
>   sprintf (DIR, "%s/33", TOTAL_BASE_DIRECTORY);
>   GetTotalBase (DIR);
101a108,115
>   GetTripleBase (DIR);
>   sprintf (DIR, "%s/6", TRIPLE_DIR);
>   GetTripleBase (DIR);
>   sprintf (DIR, "%s/51", TRIPLE_DIR);
>   GetTripleBase (DIR);
>   sprintf (DIR, "%s/42", TRIPLE_DIR);
>   GetTripleBase (DIR);
>   sprintf (DIR, "%s/33", TRIPLE_DIR);
diff 999954/Robbo_mfa.c 999953/Robbo_mfa.c
18a19,22
> #ifdef MAGIC_BITBOARDS
> #define ClearOccupied(M, x) { POSITION->OccupiedBW &= M; }
> #define SetOccupied(M, x) { POSITION->OccupiedBW |= M; }
> #else
28a33
> #endif
diff 999954/Robbo_popolare.c 999953/Robbo_popolare.c
312,313c312,313
< 	    if (wK == s[0] || wK == s[1] || bK == s[0] || bK == s[1] ||
< 		wK == s[2] || bK == s[2] || wK == s[3] || bK == s[3]
---
> 	    if (wK == s[0] || wK == s[1] || bK == s[0] || bK == s[1]
> 		|| wK == s[2] || bK == s[2] || wK == s[3] || bK == s[3]
372a373
> #ifndef MAGIC_BITBOARDS
388a390
> #endif
diff 999954/SEE.c 999953/SEE.c
44,47d43
<   SlideIndex[Direction_h1a8] =
<     (POSITION->OccupiedL45 >> LineShift[Direction_h1a8][to]) & 077;
<   SlideIndex[Direction_a1h8] =
<     (POSITION->OccupiedR45 >> LineShift[Direction_a1h8][to]) & 077;
48a45
>   mask &= DIAG[to];
50,51c47
<   bit |= (LineMask[Direction_h1a8][to][SlideIndex[Direction_h1a8]] |
< 	  LineMask[Direction_a1h8][to][SlideIndex[Direction_a1h8]]) & mask;
---
>   bit |= AttB (to) & mask;
54,57d49
<   SlideIndex[Direction_horz] =
<     (POSITION->OccupiedBW >> LineShift[Direction_horz][to]) & 077;
<   SlideIndex[Direction_vert] =
<     (POSITION->OccupiedL90 >> LineShift[Direction_vert][to]) & 077;
58a51
>   mask &= ORTHO[to];
60,61c53
<   bit |= (LineMask[Direction_horz][to][SlideIndex[Direction_horz]] |
< 	  LineMask[Direction_vert][to][SlideIndex[Direction_vert]]) & mask;
---
>   bit |= AttR (to) & mask;
68,69c60,63
<   if (dir != BAD_DIRECTION)
<     bit |= LineMask[dir][fr][SlideIndex[dir]] & TableIndex[dir] & cbf;
---
>   if (dir == Direction_h1a8 || dir == Direction_a1h8)
>     bit |= AttB (fr) & TableIndex[dir] & cbf;
>   if (dir == Direction_horz || dir == Direction_vert)
>     bit |= AttR (fr) & TableIndex[dir] & cbf;
95,97c89
< 		  dir = LINE[fr][to];
< 		  mask = LineMask[dir][fr][SlideIndex[dir]] & cbf &
< 		         TableIndex[Direction_a1h8];
---
> 		  mask = AttB (fr) & cbf & TableIndex[Direction_a1h8];
107,109c99
< 		      dir = LINE[fr][to];
< 		      mask = LineMask[dir][fr][SlideIndex[dir]] & cbf &
< 			     TableIndex[Direction_horz];
---
> 		      mask = AttR (fr) & cbf & TableIndex[Direction_horz];
119,121c109,112
< 			  dir = LINE[fr][to];
< 			  mask = LineMask[dir][fr][SlideIndex[dir]] & cbf &
< 			         TableIndex[dir];
---
> 			  if (RANK (fr) == RANK (to) || FILE (fr) == FILE (to))
> 			    mask = AttR (fr) & cbf & TableIndex[Direction_horz];
> 			  else
> 			    mask = AttB (fr) & cbf & TableIndex[Direction_a1h8];
158,160c149
< 		  dir = LINE[fr][to];
< 		  mask = LineMask[dir][fr][SlideIndex[dir]] & cbf &
< 		         TableIndex[Direction_a1h8];
---
> 		  mask = AttB (fr) & cbf & TableIndex[Direction_a1h8];
170,172c159
< 		      dir = LINE[fr][to];
< 		      mask = LineMask[dir][fr][SlideIndex[dir]] & cbf &
< 			     TableIndex[Direction_horz];
---
> 		      mask = AttR (fr) & cbf & TableIndex[Direction_horz];
182,184c169,172
< 			  dir = LINE[fr][to];
< 			  mask = LineMask[dir][fr][SlideIndex[dir]] & cbf &
< 			         TableIndex[dir];
---
> 			  if (RANK (fr) == RANK (to) || FILE (fr) == FILE (to))
> 			    mask = AttR (fr) & cbf & TableIndex[Direction_horz];
> 			  else
> 			    mask = AttB (fr) & cbf & TableIndex[Direction_a1h8];
diff 999954/Zobrist_init.c 999953/Zobrist_init.c
29d28
<       printf ("HI %d\n", *w);
diff 999954/all_node.c 999953/all_node.c
44c44
<   CheckRepetition;
---
>   CheckRepetition (FALSE);
283c283
<   CheckRepetition;
---
>   CheckRepetition (TRUE);
386c386,388
<       if (IS_EXACT (POSITION->DYN->exact))
---
>       if (POS0->reversible == 100) /* HACK */
>         v = 0;
>       else if (IS_EXACT (POSITION->DYN->exact))
diff 999954/arrays.c 999953/arrays.c
109a110
> #ifndef MAGIC_BITBOARDS
119a121
> #endif
256a259
> #ifndef MAGIC_BITBOARDS
286a290
> #endif
373a378
> #ifndef MAGIC_BITBOARDS
463a469
> #endif
651a658,660
> #ifdef MAGIC_BITBOARDS
>   magic_mult_init ();
> #endif
diff 999954/arrays.h 999953/arrays.h
6c6,8
< uint64 AttN[64], AttK[64], AttPw[64], AttPb[64], LineMask[4][64][64];
---
> uint64 AttN[64], AttK[64], AttPw[64], AttPb[64];
> #ifndef MAGIC_BITBOARDS
> uint64 LineMask[4][64][64];
7a10
> #endif
66,67c69
< uint64
<  InFrontW[8], NotInFrontW[8], InFrontB[8], NotInFrontB[8], IsolatedFiles[8];
---
> uint64 InFrontW[8], NotInFrontW[8], InFrontB[8], NotInFrontB[8], IsolatedFiles[8];
79,80c81
< uint64
<  LEFT2[64], RIGHT2[64], LEFT1[64], RIGHT1[64], ADJACENT[64], LONG_DIAG[64];
---
> uint64 LEFT2[64], RIGHT2[64], LEFT1[64], RIGHT1[64], ADJACENT[64], LONG_DIAG[64];
diff 999954/cut_node.c 999953/cut_node.c
44c44
<   CheckRepetition;
---
>   CheckRepetition (FALSE);
330c330
<   CheckRepetition;
---
>   CheckRepetition (TRUE);
459c459,461
<       if (IS_EXACT (POSITION->DYN->exact))
---
>       if (POS0->reversible == 100) /* HACK */
> 	v = 0;
>       else if (IS_EXACT (POSITION->DYN->exact))
diff 999954/evaluation.c 999953/evaluation.c
355a356,358
> #ifdef ZUGZWANG_DETECT
>   boolean wzug = TRUE, bzug = TRUE;
> #endif
630a634,637
> #ifdef ZUGZWANG_DETECT
>       if (A & ~wBitboardOcc)
> 	wzug = FALSE;
> #endif
662a670,673
> #ifdef ZUGZWANG_DETECT
>       if (A & ~wBitboardOcc)
> 	wzug = FALSE;
> #endif
766a778,781
> #ifdef ZUGZWANG_DETECT
>       if (A & ~wBitboardOcc)
> 	wzug = FALSE;
> #endif
838a854,857
> #ifdef ZUGZWANG_DETECT
>       if (A & ~wBitboardOcc)
> 	wzug = FALSE;
> #endif
923a943,946
> #ifdef ZUGZWANG_DETECT
>       if (A & ~bBitboardOcc)
> 	bzug = FALSE;
> #endif
958a982,985
> #ifdef ZUGZWANG_DETECT
>       if (A & ~bBitboardOcc)
> 	bzug = FALSE;
> #endif
1062a1090,1093
> #ifdef ZUGZWANG_DETECT
>       if (A & ~bBitboardOcc)
> 	bzug = FALSE;
> #endif
1136a1168,1171
> #ifdef ZUGZWANG_DETECT
>       if (A & ~bBitboardOcc)
> 	bzug = FALSE;
> #endif
1511a1547,1552
> #ifdef ZUGZWANG_DETECT
>   if (wzug)
>     POSITION->DYN->flags &= ~2;
>   if (bzug)
>     POSITION->DYN->flags &= ~1;
> #endif
diff 999954/exclude_node.c 999953/exclude_node.c
46c46
<   CheckRepetition;
---
>   CheckRepetition (FALSE);
282c282
<   CheckRepetition;
---
>   CheckRepetition (TRUE);
388c388,390
<       if (IS_EXACT (POSITION->DYN->exact))
---
>       if (POS0->reversible == 100) /* HACK */
>         v = 0;
>       else if (IS_EXACT (POSITION->DYN->exact))
diff 999954/low_depth.c 999953/low_depth.c
43c43
<   CheckRepetition;
---
>   CheckRepetition (FALSE);
233c233
<   CheckRepetition;
---
>   CheckRepetition (TRUE);
331c331,333
<       if (IS_EXACT (POSITION->DYN->exact))
---
>       if (POS0->reversible == 100) /* HACK */
>         v = 0;
>       else if (IS_EXACT (POSITION->DYN->exact))
Only in 999953: magic_mult.c
diff 999954/make_move.c 999953/make_move.c
40a41
> #ifndef MAGIC_BITBOARDS
43a45
> #endif
54a57
> #ifndef MAGIC_BITBOARDS
57a61
> #endif
72a77
> #ifndef MAGIC_BITBOARDS
75a81
> #endif
86a93
> #ifndef MAGIC_BITBOARDS
89a97
> #endif
diff 999954/make_unmake.h 999953/make_unmake.h
40a41,44
> #ifdef MAGIC_BITBOARDS
> #define ClearOccupied(M, x) { POSITION->OccupiedBW &= M; }
> #define SetOccupied(M, x) { POSITION->OccupiedBW |= M; }
> #else
48a53
> #endif
diff 999954/mobility.c 999953/mobility.c
7a8,10
> #ifdef ZUGZWANG_DETECT
>   boolean wzug = TRUE, bzug = TRUE;
> #endif
25a29,32
> #ifdef ZUGZWANG_DETECT
>       if (A & ~wBitboardOcc)
> 	wzug = FALSE;
> #endif
33a41,44
> #ifdef ZUGZWANG_DETECT
>       if (A & ~wBitboardOcc)
> 	wzug = FALSE;
> #endif
48a60,63
> #ifdef ZUGZWANG_DETECT
>       if (A & ~wBitboardOcc)
> 	wzug = FALSE;
> #endif
65a81,84
> #ifdef ZUGZWANG_DETECT
>       if (A & ~wBitboardOcc)
> 	wzug = FALSE;
> #endif
87a107,110
> #ifdef ZUGZWANG_DETECT
>       if (A & ~bBitboardOcc)
> 	bzug = FALSE;
> #endif
95a119,122
> #ifdef ZUGZWANG_DETECT
>       if (A & ~bBitboardOcc)
> 	bzug = FALSE;
> #endif
110a138,141
> #ifdef ZUGZWANG_DETECT
>       if (A & ~bBitboardOcc)
> 	bzug = FALSE;
> #endif
127a159,162
> #ifdef ZUGZWANG_DETECT
>       if (A & ~bBitboardOcc)
> 	bzug = FALSE;
> #endif
161a197,202
> #ifdef ZUGZWANG_DETECT
>   if (wzug)
>     POSITION->DYN->flags &= ~2;
>   if (bzug)
>     POSITION->DYN->flags &= ~1;
> #endif
diff 999954/pv_node.c 999953/pv_node.c
60c60
<   CheckRepetition;
---
>   CheckRepetition (check);
317c317,319
<       if (IS_EXACT (POSITION->DYN->exact))
---
>       if (POS0->reversible == 100) /* HACK */
>         v = 0;
>       else if (IS_EXACT (POSITION->DYN->exact))
diff 999954/qsearch.c 999953/qsearch.c
36c36
<   CheckRepetition;
---
>   CheckRepetition (FALSE);
199c199
<   CheckRepetition;
---
>   CheckRepetition (TRUE);
298c298,300
<       if (IS_EXACT (POSITION->DYN->exact))
---
>       if (POS0->reversible == 100) /* HACK */
>         v = 0;
>       else if (IS_EXACT (POSITION->DYN->exact))
diff 999954/qsearch_pv.c 999953/qsearch_pv.c
37c37
<   CheckRepetition;
---
>   CheckRepetition (FALSE);
284c284
<   CheckRepetition;
---
>   CheckRepetition (TRUE);
374c374,376
<       if (IS_EXACT (POSITION->DYN->exact))
---
>       if (POS0->reversible == 100) /* HACK */
>         v = 0;
>       else if (IS_EXACT (POSITION->DYN->exact))
diff 999954/un_make_move.c 999953/un_make_move.c
12a13
> #ifndef MAGIC_BITBOARDS
15a17
> #endif
23a26
> #ifndef MAGIC_BITBOARDS
26a30
> #endif
38a43
> #ifndef MAGIC_BITBOARDS
41a47
> #endif
49a56
> #ifndef MAGIC_BITBOARDS
52a60
> #endif
diff 999954/utility.c 999953/utility.c
62a63
> #ifndef MAGIC_BITBOARDS
63a65
> #endif
108a111
> #ifndef MAGIC_BITBOARDS
116a120
> #endif

Re: IvanHoe 999953 beta

Posted: Sat Jul 17, 2010 10:58 pm
by kingliveson
IvanHoe 999953 beta builds for Linux/Windows are available: http://chess.cygnitec.com/engine

999953 is slower than 999954 that was re-uploaded. Currently running a 40/40 repeating tournament on very weak hardware, single core CPU with 999954 vs Rybka 4. Ponder off, 256 MB Hash, no EGTB, Rybka using recommended TC3.100.150, and IvanHoe is using default settings except Pawn Hash (set to 64 MB). Score is tied after 10 games. 40 more rounds to go.

If Mr. Martin T is interested, for his next long match tournament, it would be nice to see Rybka 4 vs IvanHoe 9.54b. Only thing IvanHoe needs is Pawn Hash set to 1/8th or 1/4th of Hash used -- everything else can remain default. 999954 beta is quite stable as is 999953.

[Event "MS, 40'/40+40'/40+40'"]
[Site "?"]
[Date "2010.07.16"]
[Round "1"]
[White "Rybka 4 w32"]
[Black "IvanHoe 9.54b w32"]
[Result "1/2-1/2"]
[ECO "A00"]
[Annotator "-0.30;-0.39"]
[PlyCount "88"]
[TimeControl "40/2400:40/2400:2400"]

{AMD Turion(tm) 64 Mobile Technology ML-37 W=17.1 plies; 38kN/s B=20.8 plies;
599kN/s} 1. h3 e5 2. c3 d5 3. d4 Nc6 4. Be3 Nf6 {Both last book move} 5. dxe5 {
-0.30/17 81} Nxe5 {-0.39/22 295} 6. Nd2 {-0.29/18 126} Ng6 {-0.39/21 27 (Bd6)}
7. Ngf3 {-0.29/16 108} c5 {-0.39/20 27 (Bd6)} 8. b4 {-0.21/14 71} cxb4 {-0.39/
19 13 (c4)} 9. cxb4 {-0.27/16 60} Bd6 {-0.39/19 22} 10. Bc5 {-0.26/16 37 (Bd4)}
O-O {-0.39/20 74} 11. e3 {-0.33/16 96} Bxc5 {-0.39/21 134} 12. bxc5 {-0.30/17
48} Qa5 {-0.41/21 138 (Be6)} 13. Bd3 {-0.33/16 55 (Be2)} Bd7 {-0.45/21 64} 14.
O-O {-0.37/16 77} Qxc5 {-0.48/20 16} 15. Qb3 {-0.44/15 42} b6 {-0.54/19 11} 16.
Qb2 {-0.42/15 36 (Rfc1)} Rac8 {-0.62/19 18 (Qd6)} 17. Ba6 {-0.36/17 63} Qc3 {
-0.47/21 189 (Rc6)} 18. Qb1 {-0.40/18 103} Rb8 {-0.44/22 56 (Rc6)} 19. a4 {-0.
28/18 68} Qa5 {-0.34/22 171} 20. Bb5 {-0.34/17 71} Rfc8 {-0.41/22 176} 21. Rd1
{-0.28/16 62} Qc3 {-0.35/21 238} 22. Nd4 {-0.31/16 86} Qc5 {-0.31/20 44} 23.
Bxd7 {-0.26/16 63} Nxd7 {-0.31/19 6} 24. a5 {-0.26/16 67 (Qb5)} b5 {-0.62/19
42 (Nge5)} 25. Rc1 {-0.32/16 96} Qf8 {-0.62/19 8} 26. Rxc8 {-0.15/16 56} Qxc8 {
-0.40/19 10} 27. Qb4 {-0.24/16 51} Nde5 {-0.34/20 46} 28. a6 {-0.30/15 47} Nc6
{-0.34/21 75} 29. Nxc6 {0.00/16 63} Qxc6 {-0.16/21 38} 30. Nb3 {0.00/17 68
(Nf3)} h6 {-0.13/20 60 (Qf6)} 31. Nd4 {0.00/18 55} Qc7 {-0.14/20 8} 32. Ra5 {
-0.01/18 56} Rb6 {-0.20/19 12} 33. Rxb5 {-0.08/18 33} Rxa6 {-0.19/20 12} 34.
Qb2 {-0.07/18 31} Ne7 {-0.04/19 13} 35. Rb8+ {-0.06/18 41 (g4)} Kh7 {-0.14/20
11} 36. Qb1+ {0.00/18 33} Ng6 {-0.17/21 49} 37. Rb7 {-0.08/18 85} Qc3 {-0.14/
21 27} 38. Rb2 {-0.08/18 59 (Nc2)} Qa3 {-0.13/23 88} 39. g4 {-0.08/17 78 (Rb5)}
Qa1 {-0.09/22 71 (Qe7)} 40. Kh2 {0.00/19 34 (Rb7)} Qxb1 {0.00/24 99} 41. Rxb1 {
0.00/22 81} Ne5 {0.00/24 22 (Ra2)} 42. Rb7 {0.00/21 92} Rf6 {0.00/23 24 (Kg6)}
43. Kg3 {0.00/20 108} a6 {0.00/23 26 (a5)} 44. h4 {0.00/20 85} Nc4 {0.00/23 29
Draw accepted} 1/2-1/2

[Event "MS, 40'/40+40'/40+40'"]
[Site "?"]
[Date "2010.07.16"]
[Round "2"]
[White "IvanHoe 9.54b w32"]
[Black "Rybka 4 w32"]
[Result "0-1"]
[ECO "A00"]
[Annotator "-0.32;-0.39"]
[PlyCount "146"]
[TimeControl "40/2400:40/2400:2400"]

{AMD Turion(tm) 64 Mobile Technology ML-37 W=20.7 plies; 625kN/s B=16.6
plies; 40kN/s} 1. h3 e5 2. c3 d5 3. d4 Nc6 4. Be3 Nf6 {Both last book move} 5.
Nf3 {-0.32/21 156} exd4 {-0.39/15 104 (e4)} 6. cxd4 {-0.20/19 33} Be7 {-0.31/
14 65 (Bd6)} 7. Bf4 {0.00/20 71 (g3)} Bf5 {-0.34/14 88 (0-0)} 8. Nc3 {0.00/21
135 (Nbd2)} O-O {-0.03/13 65 (Bd6)} 9. e3 {0.10/19 81} Bd6 {-0.01/14 48} 10.
Bxd6 {0.12/18 14} Qxd6 {0.01/16 41} 11. Bd3 {0.15/20 62 (Bb5)} Bxd3 {0.11/15
102} 12. Qxd3 {0.16/20 28} Nb4 {0.11/16 38 (Ne7)} 13. Qe2 {0.19/22 150} Nc6 {
0.23/16 68 (Rfe8)} 14. O-O {0.18/21 105} a6 {0.20/16 32 (Ne7)} 15. Rac1 {0.25/
19 26} Rfe8 {0.21/16 36} 16. Qc2 {0.25/21 342} h6 {0.23/16 71} 17. Rfd1 {0.25/
20 14} Rab8 {0.24/15 48} 18. Ne2 {0.26/20 17 (a3)} Rbc8 {0.24/15 60} 19. Ne1 {
0.24/19 59 (Nf4)} Ne7 {0.21/14 57} 20. Nd3 {0.23/19 41} c6 {0.18/14 33} 21. Ng3
{0.22/19 62 (Nc3)} a5 {0.13/14 73} 22. Qb3 {0.19/19 66 (Nf4)} Qc7 {0.12/16 113
(Rb8)} 23. Rc2 {0.20/21 88 (Re1)} Rb8 {0.10/15 108 (Rcd8)} 24. Nc5 {0.14/21 90}
Nc8 {0.10/15 66} 25. Nf5 {0.14/21 33} Ne7 {0.02/15 43} 26. Nxe7+ {0.15/21 122}
Rxe7 {0.03/17 63} 27. Qa4 {0.12/21 18 (Qa3)} Qd8 {0.04/16 63 (Ne4)} 28. Rdc1 {
0.10/20 74} Ra8 {0.00/17 169} 29. Qb3 {0.08/21 59 (b4)} Qc7 {0.00/18 64} 30.
Qa3 {0.05/21 121 (Rc3)} Qd8 {0.00/18 53 (Ne8)} 31. Rc3 {0.08/22 34 (Rd1)} Ne8 {
0.00/19 46} 32. Qb3 {0.08/21 8 (Qa4)} Nd6 {0.00/20 90 (Qc7)} 33. Qd1 {0.08/20
46 (R3c2)} Qc7 {0.00/16 46} 34. Rb3 {0.08/19 10 (b3)} Ree8 {0.00/17 49 (Ra7)}
35. Qf3 {0.11/21 42 (Qc2)} a4 {-0.08/18 104 (Re7)} 36. Rb4 {0.12/19 9 (Rbc3)}
a3 {-0.06/18 45} 37. b3 {0.12/19 7} b5 {-0.05/18 78 (Qa5)} 38. Qe2 {0.05/22 44
(Qg4)} Qe7 {-0.05/17 39 (Rac8)} 39. Nd3 {0.05/22 52 (Qe1)} Rac8 {-0.04/18 66}
40. Qd1 {0.05/23 74 (Rc2)} Qa7 {-0.04/17 27 (Ne4)} 41. Rc2 {0.04/24 248} Re7 {
-0.05/18 135 (Ne4)} 42. Qc1 {0.04/22 93} Rec7 {-0.05/19 42 (Qa6)} 43. Qe1 {0.
05/22 23 (g3)} Qa8 {-0.05/20 92 (Qb6)} 44. Nc5 {0.04/23 121} Re7 {-0.05/21 98}
45. Qc3 {0.04/25 135 (Qc1)} Qa5 {-0.05/20 101 (Qb8)} 46. Rc1 {0.00/25 459 (Qe1)
} Ree8 {-0.05/18 64 (Qb6)} 47. Kh1 {0.00/22 80 (Nd3)} Qd8 {-0.05/18 148 (f5)}
48. Qc2 {0.00/23 59 (Qd2)} Qe7 {-0.09/19 68 (Qa5)} 49. Qd2 {0.00/21 9} Ne4 {-0.
13/18 43} 50. Nxe4 {0.00/21 29 (Qe1)} Qxe4 {-0.16/18 52} 51. Rc5 {-0.08/22 54}
Ra8 {-0.28/18 72 (Qb1+)} 52. Qc1 {-0.22/23 49 (Rxc6)} Qe7 {-0.40/20 55} 53. Qc3
{-0.22/22 7} Qf6 {-0.45/21 63} 54. Kg1 {-0.22/22 9} Re6 {-0.50/20 48} 55. h4 {
-0.33/21 49 (Kf1)} Qd8 {-0.56/18 42 (Rae8)} 56. h5 {-0.70/23 208 (Qc1)} Qd6 {
-0.87/19 107} 57. g3 {-0.80/22 75} Rf6 {-1.09/17 42 (Rae8)} 58. Kg2 {-1.09/22
179 (Qc2)} Qd7 {-1.36/17 99 (Re8)} 59. Qc2 {-1.16/22 58} Re8 {-1.43/15 33} 60.
Qd1 {-1.16/22 22 (Rc3)} Rf5 {-1.95/15 59} 61. Qe2 {-1.16/21 5 (Kg1)} Re6 {-2.
30/15 95 (Re4)} 62. Kg1 {-1.39/20 61 (Kf1)} Ref6 {-2.81/15 36 (Re4)} 63. f4 {
-1.86/20 96} Re6 {-2.93/15 51 (Qe6)} 64. Kg2 {-2.54/17 66 (Kf2)} Qe7 {-3.23/14
39 (Re4)} 65. Kf2 {-2.91/16 21 (Qc2)} g6 {-4.81/14 56 (Re4)} 66. hxg6 {-4.10/
16 49} Rxf4+ {-5.48/15 29 (fxg6)} 67. gxf4 {-4.86/18 15} Qh4+ {-5.96/16 24} 68.
Kf1 {-5.77/20 32} Qh1+ {-5.96/17 54} 69. Kf2 {-6.41/21 24} Rxg6 {-5.96/17 53}
70. Qf1 {-6.49/20 18} Qh2+ {-5.96/17 53} 71. Ke1 {-6.61/20 13} Rg1 {-5.96/17 53
} 72. Rxc6 {-6.79/19 9 (Qxg1+)} Qh4+ {-5.96/14 94} 73. Ke2 {-6.90/20 7} Qg4+ {
-5.96/14 46} 0-1

[Event "MS, 40'/40+40'/40+40'"]
[Site "?"]
[Date "2010.07.17"]
[Round "3"]
[White "Rybka 4 w32"]
[Black "IvanHoe 9.54b w32"]
[Result "1/2-1/2"]
[ECO "A31"]
[Annotator "0.05;0.04"]
[PlyCount "151"]
[TimeControl "40/2400:40/2400:2400"]

{AMD Turion(tm) 64 Mobile Technology ML-37 W=21.1 plies; 40kN/s B=23.9 plies;
673kN/s} 1. d4 Nf6 2. c4 c5 3. Nf3 cxd4 4. Nxd4 e5 {Both last book move} 5. Nb5
{0.05/16 99} d6 {0.04/21 151} 6. Bg5 {0.08/17 104} Be6 {0.03/22 126} 7. Nd2 {
0.12/16 107 (Bxf6)} a6 {0.00/21 115} 8. Bxf6 {0.14/17 94} gxf6 {0.00/21 23} 9.
Nc3 {0.13/17 45} Nc6 {0.00/20 68 (h5)} 10. e3 {0.05/17 106 (e4)} f5 {-0.04/19
22} 11. Be2 {0.09/16 33} Bg7 {0.00/19 20} 12. O-O {0.05/16 108} O-O {0.00/19 26
} 13. Nd5 {0.00/15 152 (Nb3)} Ne7 {-0.04/19 81} 14. Qb3 {0.00/16 70 (Nb3)} b5 {
-0.03/20 107} 15. Rfd1 {0.00/15 34} Nxd5 {-0.09/20 51 (bxc4)} 16. cxd5 {0.00/
16 51} Bd7 {0.00/21 41} 17. Qb4 {0.00/17 50} Qf6 {0.00/20 18} 18. e4 {0.00/16
34} Rfc8 {0.00/20 92} 19. Rac1 {0.00/16 54 (Bd3)} Bh6 {-0.14/21 63} 20. exf5 {
0.00/17 43} Bxf5 {-0.14/20 14} 21. Rxc8+ {0.00/17 47 (Rc6)} Rxc8 {-0.17/21 17}
22. Ne4 {0.00/18 32} Qh4 {-0.19/21 17} 23. Bd3 {0.00/18 63} Bxe4 {-0.15/21 30
(Bd2)} 24. Qxe4 {0.00/20 65} Qxe4 {-0.17/23 33} 25. Bxe4 {0.00/22 68} Bc1 {-0.
15/23 13 (Kg7)} 26. b3 {0.00/22 70} Bb2 {-0.15/25 220 (h5)} 27. g3 {0.08/18 47}
Bd4 {-0.17/24 91} 28. Rd2 {0.08/21 67 (Kf1)} Rc1+ {-0.17/22 14 (Kg7)} 29. Kg2 {
0.00/22 60} Kg7 {-0.17/23 18} 30. Rc2 {0.00/22 47} Re1 {-0.17/23 16} 31. f3 {
0.00/22 70 (Bf5)} Bc5 {-0.26/25 85 (h5)} 32. h4 {-0.06/21 73 (Kh3)} h5 {-0.26/
25 98} 33. Kh3 {-0.06/21 48} Rf1 {-0.26/25 113 (Kf6)} 34. Kg2 {-0.06/22 60}
Rg1+ {-0.26/24 14 (Rd1)} 35. Kh3 {-0.06/21 49} Re1 {-0.26/24 20} 36. Kg2 {-0.
06/20 34 (g4)} Kf8 {-0.26/26 170 (Kf6)} 37. Kh3 {-0.06/19 55 (Rd2)} Ke7 {-0.26/
25 29} 38. Rg2 {-0.06/20 41 (g4)} Kf6 {-0.26/26 126} 39. Rh2 {-0.06/22 52 (Rc2)
} a5 {-0.26/25 30 (Bd4)} 40. Bd3 {-0.06/23 67} b4 {-0.26/25 38} 41. Rc2 {-0.06/
23 45 (Be4)} Rh1+ {-0.26/27 98} 42. Kg2 {-0.06/25 69} Rd1 {-0.26/28 41 (Rg1+)}
43. Be4 {-0.06/26 119} Rg1+ {-0.26/28 32 (Re1)} 44. Kh2 {-0.06/26 78 (Kh3)} Rf1
{-0.26/26 19 (Re1)} 45. Kg2 {-0.06/26 104 (Kh3)} Re1 {-0.26/27 20 (Rd1)} 46.
Kh3 {-0.06/25 123} Re3 {-0.26/27 24} 47. Kg2 {-0.06/25 73 (g4)} Kg7 {-0.26/27
94} 48. Rd2 {-0.06/25 119 (Rb2)} Kh6 {-0.26/27 86 (Re1)} 49. Rc2 {-0.06/24 57
(Bd3)} Re1 {-0.26/27 98} 50. Kh3 {-0.06/25 46 (Bf5)} Rh1+ {-0.26/25 13} 51. Kg2
{-0.06/26 50} Rg1+ {-0.26/26 24} 52. Kh3 {-0.06/26 61} Kg7 {-0.26/26 31} 53.
Kh2 {-0.06/25 62} Ra1 {-0.26/26 31 (Rf1)} 54. Re2 {-0.06/23 53 (Bd3)} Rf1 {-0.
26/25 98 (Bd4)} 55. Kg2 {-0.06/25 65} Rd1 {-0.26/26 25 (Rg1+)} 56. Kh2 {-0.06/
24 75 (Rc2)} Bd4 {-0.26/23 12 (Rc1)} 57. Kg2 {-0.06/24 56 (g4)} Rg1+ {-0.26/24
13 (Kf6)} 58. Kh3 {-0.06/25 62} Rc1 {-0.26/26 27 (Kf6)} 59. Rc2 {-0.06/25 59}
Rh1+ {-0.26/26 17} 60. Kg2 {-0.06/25 39} Re1 {-0.26/26 17 (Rg1+)} 61. Kh3 {-0.
06/24 69 (Bd3)} Bc5 {-0.26/24 14 (Ra1)} 62. Kg2 {-0.06/24 64 (Rg2)} Be3 {-0.26/
25 15 (Rd1)} 63. Kh3 {-0.06/24 63 (Bf5)} Bd4 {-0.26/24 44 (Rh1+)} 64. Rc6 {0.
00/19 58 (Kg2)} Bc5 {-0.24/24 88 (Rh1+)} 65. Ra6 {0.00/21 65} Rg1 {-0.31/24 25}
66. Kh2 {0.00/22 36} Rf1 {-0.29/25 27} 67. Rxa5 {0.00/22 34} f5 {-0.29/25 31}
68. Bxf5 {0.00/22 30} Rxf3 {-0.26/25 164} 69. Bb1 {0.00/22 43} Rf2+ {-0.19/25
147 (Re3)} 70. Kh3 {0.00/23 57} Re2 {-0.26/25 73} 71. Ra8 {0.00/22 53} Re1 {-0.
12/25 270 (e4)} 72. Bc2 {0.00/22 70 (Bd3)} Rh1+ {-0.04/25 107 (e4)} 73. Kg2 {
0.00/9 0} Re1 {0.00/25 21} 74. Kh3 {0.00/23 33} Rh1+ {0.00/26 98 (e4)} 75. Kg2
{0.00/28 0} Re1 {0.00/27 20} 76. Kh3 {0.00/24 41 Draw accepted} 1/2-1/2

[Event "MS, 40'/40+40'/40+40'"]
[Site "?"]
[Date "2010.07.17"]
[Round "4"]
[White "IvanHoe 9.54b w32"]
[Black "Rybka 4 w32"]
[Result "1/2-1/2"]
[ECO "A31"]
[Annotator "0.09;0.11"]
[PlyCount "52"]
[TimeControl "40/2400:40/2400:2400"]

{AMD Turion(tm) 64 Mobile Technology ML-37 W=20.3 plies; 537kN/s B=15.9
plies; 31kN/s} 1. d4 Nf6 2. c4 c5 3. Nf3 cxd4 4. Nxd4 e5 {Both last book move}
5. Nb5 {0.09/21 76} d6 {0.11/16 228} 6. Bg5 {0.04/20 64} Be6 {0.10/16 39} 7. e3
{0.04/19 27 (Nd2)} Qb6 {0.04/16 142} 8. Bxf6 {0.07/19 53} gxf6 {0.24/16 70} 9.
a4 {0.10/20 45 (Qd2)} Nc6 {0.13/15 102 (f5)} 10. a5 {0.09/19 40 (N1c3)} Qd8 {
0.31/16 147} 11. a6 {0.16/19 15 (Qa4)} bxa6 {0.03/15 57} 12. N5c3 {0.11/21 153
(Rxa6)} a5 {-0.06/16 80} 13. c5 {0.00/21 260 (Nd5)} a6 {-0.34/13 50 (dxc5)} 14.
Qa4 {0.00/21 93 (cxd6)} Bd7 {-0.18/16 120} 15. Bc4 {0.00/20 17} dxc5 {-0.18/15
82} 16. Qb3 {0.00/20 23 (0-0)} Be7 {-0.05/14 53 (Qe7)} 17. Bxf7+ {0.24/20 92}
Kf8 {-0.05/15 0} 18. Bc4 {0.21/20 78} Rb8 {-0.28/16 58 (Qe8)} 19. Qc2 {0.15/20
44} Nb4 {0.00/15 24} 20. Qe2 {0.15/20 10} Bf5 {0.00/16 23} 21. e4 {0.17/20 15}
Bg4 {0.00/16 27 (Be6)} 22. f3 {0.00/21 115 (Qxg4)} Be6 {0.00/16 70} 23. Bxe6 {
0.00/21 25} Nd3+ {0.00/17 64} 24. Kf1 {0.00/22 43} Nf4 {0.00/18 107} 25. Qxa6 {
0.00/21 32} Nxe6 {0.00/18 58} 26. Qxe6 {0.00/21 32} Qd3+ {0.00/18 58 Draw
accepted} 1/2-1/2

[Event "MS, 40'/40+40'/40+40'"]
[Site "?"]
[Date "2010.07.17"]
[Round "5"]
[White "Rybka 4 w32"]
[Black "IvanHoe 9.54b w32"]
[Result "1-0"]
[ECO "A40"]
[Annotator "0.51;0.31"]
[PlyCount "69"]
[TimeControl "40/2400:40/2400:2400"]

{AMD Turion(tm) 64 Mobile Technology ML-37 W=15.0 plies; 41kN/s B=18.8 plies;
571kN/s} 1. e4 c5 2. c4 g6 3. Nf3 Bg7 4. d4 Qb6 {Both last book move} 5. dxc5 {
0.51/17 176} Qxc5 {0.31/21 113 (Qb4+)} 6. Be2 {0.52/18 126} Nc6 {0.41/21 179}
7. O-O {0.52/18 136} d6 {0.40/21 91} 8. Qc2 {0.52/15 54 (h3)} Nf6 {0.31/21 75
(Ne5)} 9. Nc3 {0.57/16 69 (Be3)} O-O {0.26/21 157} 10. h3 {0.57/17 83 (Be3)}
Ne5 {0.32/20 98 (Nd7)} 11. Nxe5 {0.57/16 62 (b3)} Qxe5 {0.31/18 29} 12. Be3 {
0.51/16 56} Be6 {0.23/20 122 (Bd7)} 13. f4 {0.49/15 149 (Rad1)} Qa5 {0.23/20 34
} 14. Rac1 {0.49/15 67 (f5)} Rac8 {0.20/19 53} 15. b3 {0.51/15 64} Bd7 {0.28/
19 279} 16. a3 {0.48/13 32} Rfe8 {0.31/18 82 (Nh5)} 17. b4 {0.61/15 107} Qc7 {
0.34/19 36} 18. Qd3 {0.61/15 33} b6 {0.36/18 13} 19. f5 {0.60/14 26} Qb7 {0.44/
18 56 (Rf8)} 20. b5 {0.74/14 62 (Bd4)} e6 {0.50/17 67 (Rf8)} 21. fxg6 {0.84/15
47} fxg6 {1.13/19 126 (hxg6)} 22. Bg5 {1.19/15 108 (Bf4)} Rf8 {0.64/18 9} 23.
Rcd1 {1.27/14 23} Ne8 {0.58/18 9 (d5)} 24. Rxf8+ {1.35/15 89} Bxf8 {0.84/21 55}
25. Qf3 {1.43/16 55} Bg7 {1.28/21 187 (d5)} 26. Rf1 {1.65/16 80} Kh8 {1.73/20
139} 27. Qf7 {1.77/16 54} Bd4+ {1.97/18 103 (Rc7)} 28. Kh1 {2.59/16 50} Bg7 {
3.45/20 76} 29. Nd5 {2.71/17 86 (Qe7)} exd5 {3.32/17 56} 30. Bg4 {3.77/13 50}
Rb8 {3.84/15 21} 31. Bxd7 {5.45/15 36} h5 {5.04/16 19 (dxc4)} 32. exd5 {12.97/
12 46} Kh7 {9.02/17 31 (Ra8)} 33. Re1 {15.34/10 75 (Bxe8)} Qc7 {16.73/17 23
(a5)} 34. Re7 {#11/13 33 (Re6)} Qxd7 {19.99/16 17} 35. Rxd7 {#9/13 44} 1-0

[Event "MS, 40'/40+40'/40+40'"]
[Site "?"]
[Date "2010.07.17"]
[Round "6"]
[White "IvanHoe 9.54b w32"]
[Black "Rybka 4 w32"]
[Result "1-0"]
[ECO "A40"]
[Annotator "0.34;0.50"]
[PlyCount "85"]
[TimeControl "40/2400:40/2400:2400"]

{AMD Turion(tm) 64 Mobile Technology ML-37 W=19.0 plies; 651kN/s B=14.9
plies; 44kN/s} 1. e4 c5 2. c4 g6 3. Nf3 Bg7 4. d4 Qb6 {Both last book move} 5.
dxc5 {0.34/21 106} Qb4+ {0.50/15 79 (Qxc5)} 6. Nc3 {0.50/20 23 (Qd2)} Bxc3+ {
0.39/17 186} 7. bxc3 {0.44/20 14} Qxc3+ {0.39/18 96} 8. Bd2 {0.44/21 31} Qa3 {
0.47/18 69} 9. Rb1 {0.59/20 59} Qxc5 {0.47/17 45} 10. e5 {0.50/20 97} Qc7 {0.
49/16 43} 11. Bc3 {0.58/20 234} Nh6 {0.50/15 88 (Nc6)} 12. h4 {0.59/18 12 (Bd3)
} Nf5 {0.91/13 80 (Nc6)} 13. h5 {0.85/17 18} Rg8 {0.79/14 33 (Qc6)} 14. h6 {1.
03/19 57} Qc6 {0.96/15 71} 15. Bd3 {1.08/19 23} d5 {0.96/15 72} 16. g4 {1.08/
19 16 (Qe2)} dxc4 {1.24/14 78} 17. Bc2 {1.08/18 14} a6 {1.15/14 55 (b5)} 18.
Ba5 {1.25/19 78 (Qe2)} f6 {1.43/13 61} 19. gxf5 {1.25/18 16} Bxf5 {1.44/14 27}
20. Bxf5 {1.12/18 45 (exf6)} gxf5 {1.15/13 56} 21. exf6 {1.07/19 61} Nd7 {1.11/
14 68} 22. fxe7 {1.07/19 25} Rg4 {1.24/14 56} 23. Bc3 {1.25/18 88 (Rh5)} Nc5 {
0.95/14 49} 24. Kf1 {1.30/18 39} Nd3 {0.95/14 69} 25. Rh2 {1.29/17 18} Rc8 {1.
23/12 41} 26. Qe2 {1.66/18 112 (Nh4)} Qd7 {1.60/12 82 (Re4)} 27. Nd4 {2.77/18
71 (Ne5)} Qd6 {2.74/12 74 (b5)} 28. f3 {4.35/20 156} Rxd4 {4.07/14 69} 29. Bxd4
{4.53/20 90} Qd5 {4.07/16 110} 30. Qe3 {4.78/20 85} b5 {4.07/15 63} 31. Rg2 {
5.16/20 102} Rc6 {4.07/14 63} 32. Rg5 {5.48/20 158} f4 {4.87/13 24 (Qe6)} 33.
Rxd5 {5.58/18 16} fxe3 {5.42/16 66} 34. Bxe3 {5.87/19 116} Kxe7 {5.86/16 26}
35. Ke2 {5.61/21 119} Re6 {5.86/16 72} 36. Kd2 {5.62/20 10 (Rf5)} Rg6 {6.14/15
60 (Ne5)} 37. Rg1 {7.44/20 89} Rxg1 {6.40/16 28} 38. Bxg1 {7.86/18 24} Ke6 {6.
78/17 57} 39. Rg5 {8.31/18 38 (Rd8)} Ne5 {6.35/18 68} 40. Rg7 {8.82/18 94 (Ke3)
} Kf5 {8.02/13 31 (Nxf3+)} 41. Ke2 {10.47/19 145 (Kc3)} Kf6 {11.28/17 347 (c3)}
42. Rxh7 {11.02/17 26} Kg6 {11.28/18 58 (Ng6)} 43. Re7 {11.64/19 20} 1-0

[Event "MS, 40'/40+40'/40+40'"]
[Site "?"]
[Date "2010.07.17"]
[Round "7"]
[White "Rybka 4 w32"]
[Black "IvanHoe 9.54b w32"]
[Result "1-0"]
[ECO "B08"]
[Annotator "0.46;0.32"]
[PlyCount "109"]
[TimeControl "40/2400:40/2400:2400"]

{AMD Turion(tm) 64 Mobile Technology ML-37 W=18.1 plies; 48kN/s B=21.5 plies;
711kN/s} 1. d4 d6 2. e4 Nf6 3. Nc3 g6 4. Nf3 Bg7 {Both last book move} 5. Be2 {
0.46/15 88} O-O {0.32/21 181} 6. O-O {0.44/16 45} a6 {0.32/20 173 (e5)} 7. a4 {
0.45/14 80 (h3)} Nc6 {0.26/20 92} 8. Bf4 {0.41/14 58 (Be3)} Qd7 {0.22/19 63
(e6)} 9. d5 {0.54/15 137 (Be3)} Nb4 {0.44/17 26} 10. a5 {0.54/16 40} Rb8 {0.43/
19 79 (c6)} 11. Qd2 {0.61/14 76} Qd8 {0.52/19 76 (c6)} 12. h3 {0.66/15 152
(Rfd1)} c6 {0.58/20 215 (Bd7)} 13. Bg5 {0.73/15 99 (Be3)} c5 {0.66/17 17} 14.
Rfe1 {0.76/15 73 (Bxf6)} Bd7 {0.58/18 67} 15. Bc4 {0.94/14 41 (Bf4)} h6 {0.61/
17 13 (Nh5)} 16. Bxf6 {1.73/15 72 (Bf4)} exf6 {1.85/18 55} 17. Nd1 {1.73/16 65}
f5 {1.91/19 43} 18. c3 {1.75/16 39} fxe4 {1.89/19 19} 19. Rxe4 {1.87/16 66} b5
{1.87/20 20} 20. axb6 {1.89/16 27} Rxb6 {1.91/20 16} 21. cxb4 {1.89/17 67} Rxb4
{2.02/20 28} 22. Bd3 {2.00/17 64} Rxe4 {2.08/22 188 (a5)} 23. Bxe4 {2.01/16 69}
Bb5 {2.11/23 95 (Qb6)} 24. Bd3 {2.06/18 58} Qb6 {2.15/22 86 (Qc8)} 25. Bxb5 {
2.25/19 113 (Ne3)} axb5 {2.05/18 17} 26. Qa5 {2.26/20 59 (Qf4)} Qb7 {1.97/21 12
} 27. Qa6 {2.26/20 63} Qxd5 {2.05/22 15 (Qd7)} 28. Qxb5 {2.25/21 87} Ra8 {2.16/
22 29} 29. Rxa8+ {2.25/20 60} Qxa8 {2.21/22 24} 30. Qb6 {2.28/20 31} Bf8 {2.26/
22 65} 31. Ne3 {2.28/20 62} Qe4 {2.33/23 114} 32. Qb8 {2.39/19 33} Qb1+ {2.40/
23 124} 33. Kh2 {2.39/20 64} Qe4 {2.43/23 75} 34. Nd2 {2.42/20 64} Qe6 {2.43/
24 103} 35. Qb7 {2.47/20 63 (Kg1)} Qf6 {2.48/23 76} 36. Kg1 {2.58/19 62} Qe6 {
2.62/23 56 (Kg7)} 37. g4 {2.65/19 70 (Ndc4)} h5 {2.51/21 41 (Kg7)} 38. gxh5 {
3.06/16 32} gxh5 {2.73/19 24} 39. Qf3 {3.19/16 46 (Qg2+)} Bh6 {3.12/18 28} 40.
Ndc4 {3.39/15 29} Bxe3 {3.25/19 42 (Qg6+)} 41. Nxe3 {3.65/18 113} Qe5 {3.50/22
229 (Kf8)} 42. Nf5 {3.94/18 124} Qxb2 {3.64/22 126} 43. Nxd6 {4.18/18 43} Qg7+
{3.65/22 23} 44. Kh2 {4.30/19 47} Qg6 {3.84/23 46 (Qe5+)} 45. Qa8+ {4.57/19 140
} Kg7 {4.00/23 38 (Kh7)} 46. Qa1+ {4.69/19 160 (Qd5)} Kg8 {4.34/23 171} 47. Qe5
{4.78/20 32} Kh7 {4.50/23 152 (c4)} 48. Qxc5 {5.48/19 145 (Qd5)} Kg8 {4.90/23
85 (Kh8)} 49. Qe5 {6.09/20 60 (Qd5)} Kh7 {6.30/25 394} 50. Ne4 {6.64/20 59} h4
{6.45/25 123 (Kg8)} 51. Nd6 {6.95/20 49 (Qf4)} f6 {6.40/25 53 (Kg8)} 52. Qf5 {
16.33/23 44 (Qe7+)} Kg7 {16.37/28 187 (Qxf5)} 53. Qxg6+ {16.33/24 66} Kxg6 {16.
45/28 15} 54. Kg2 {16.64/25 29} Kg7 {16.55/29 46 (Kh5)} 55. Kf3 {#18/25 70
(Nf5+)} 1-0

[Event "MS, 40'/40+40'/40+40'"]
[Site "?"]
[Date "2010.07.17"]
[Round "8"]
[White "IvanHoe 9.54b w32"]
[Black "Rybka 4 w32"]
[Result "1/2-1/2"]
[ECO "B08"]
[Annotator "0.34;0.38"]
[PlyCount "82"]
[TimeControl "40/2400:40/2400:2400"]

{AMD Turion(tm) 64 Mobile Technology ML-37 W=21.5 plies; 654kN/s B=20.1
plies; 42kN/s} 1. d4 d6 2. e4 Nf6 3. Nc3 g6 4. Nf3 Bg7 {Both last book move} 5.
Be2 {0.34/21 183} O-O {0.38/16 82} 6. O-O {0.33/20 99} c5 {0.33/16 104} 7. dxc5
{0.28/18 13 (d5)} dxc5 {0.18/15 108} 8. Be3 {0.23/20 204 (h3)} b6 {0.14/15 119}
9. Qc1 {0.22/20 123 (h3)} Nc6 {0.05/15 92} 10. Rd1 {0.22/19 17} Qc7 {0.06/15 36
} 11. Nd5 {0.13/19 69} Qb7 {0.11/16 43} 12. Nxf6+ {0.20/20 74} exf6 {0.11/17 89
} 13. c3 {0.17/20 33} Be6 {0.11/16 33} 14. Qc2 {0.15/21 79} Rad8 {0.10/15 29}
15. Rxd8 {0.14/20 168 (Qa4)} Rxd8 {0.05/18 63} 16. Rd1 {0.12/20 11} Rxd1+ {0.
05/18 72} 17. Qxd1 {0.11/19 12} Qd7 {0.09/18 120 (Bf8)} 18. Qxd7 {0.18/20 14}
Bxd7 {0.04/18 62} 19. Bb5 {0.15/22 78 (Kf1)} Kf8 {0.08/19 45} 20. Nd2 {0.15/21
10 (Kf1)} Ke7 {0.03/19 121} 21. f4 {0.14/21 62 (Kf1)} Nd8 {0.00/19 52 (Kd6)}
22. Bxd7 {0.23/20 19} Kxd7 {0.18/20 42} 23. g4 {0.18/21 13 (Kf2)} Nc6 {0.07/20
55 (Ke6)} 24. Kf2 {0.12/23 72} f5 {0.00/21 37} 25. exf5 {0.08/24 146} gxf5 {0.
00/21 67} 26. g5 {0.08/24 13} Ke6 {0.08/20 28 (f6)} 27. h4 {0.22/22 33} f6 {0.
06/20 69} 28. Nf3 {0.12/24 99 (h5)} Kd5 {0.00/21 101} 29. Ke2 {0.11/24 92} fxg5
{0.00/21 43} 30. fxg5 {0.05/24 109} Be5 {0.00/21 32} 31. Nxe5 {0.05/23 58 (h5)}
Nxe5 {0.00/22 55} 32. Bf4 {0.02/24 60} Ng6 {0.00/23 53} 33. Bb8 {0.03/24 101}
Nxh4 {0.00/24 30} 34. Bxa7 {0.03/24 93} b5 {0.00/25 40} 35. b3 {0.02/23 68
(Ke3)} c4 {0.00/24 98 (Ng6)} 36. Ke3 {0.03/18 7} Ng6 {0.00/24 49 (cxb3)} 37.
Bb8 {0.00/22 37 (Kf3)} Kc5 {0.00/25 72 (cxb3)} 38. Bh2 {0.00/23 42 (Bg3)} Kd5 {
0.00/26 66 (cxb3)} 39. Bg3 {0.00/23 34} Kc5 {0.00/26 44 (cxb3)} 40. Bb8 {0.00/
23 39} Kd5 {0.00/27 70} 41. Bh2 {0.00/23 33 (Bg3)} Kc5 {0.00/27 91 (cxb3) Draw
accepted} 1/2-1/2

[Event "MS, 40'/40+40'/40+40'"]
[Site "?"]
[Date "2010.07.17"]
[Round "9"]
[White "Rybka 4 w32"]
[Black "IvanHoe 9.54b w32"]
[Result "0-1"]
[ECO "B12"]
[Annotator "0.39;0.25"]
[PlyCount "212"]
[TimeControl "40/2400:40/2400:2400"]

{AMD Turion(tm) 64 Mobile Technology ML-37 W=17.0 plies; 45kN/s B=21.1 plies;
665kN/s} 1. e4 c6 2. d4 d5 3. e5 Bf5 4. Nf3 e6 {Both last book move} 5. Be2 {
0.39/16 75} Ne7 {0.25/20 139 (Nd7)} 6. Nc3 {0.45/16 274 (0-0)} Nd7 {0.18/20 130
} 7. O-O {0.28/15 141} Bg6 {0.15/19 59 (Bg4)} 8. a4 {0.31/13 61 (h3)} a6 {-0.
04/19 65 (c5)} 9. b4 {0.24/15 89} Nf5 {-0.04/20 50} 10. Rb1 {0.10/15 66} a5 {
-0.12/20 32} 11. bxa5 {0.07/15 35} Qxa5 {-0.13/20 21} 12. Rb3 {0.03/15 46} Bh5
{-0.13/19 52} 13. h3 {0.02/15 30} Bxf3 {0.00/18 16} 14. Bxf3 {0.00/16 42} Qa7 {
-0.11/21 142} 15. Be3 {0.01/15 43} Be7 {-0.09/21 139 (Nxe3)} 16. Qd3 {-0.01/15
85 (Be2)} O-O {-0.22/18 85 (Nxe3)} 17. Rfb1 {-0.08/12 45 (Kh2)} b6 {-0.25/20 90
} 18. Bf4 {-0.07/14 25 (Bg4)} Nh4 {-0.30/20 51} 19. Be2 {-0.11/14 39} Qb7 {-0.
32/20 106 (c5)} 20. g3 {-0.07/15 62 (Qd2)} Ng6 {-0.73/19 82 (c5)} 21. Qd2 {-0.
46/13 52} c5 {-0.79/19 26 (Nxf4)} 22. Be3 {-0.62/14 81} cxd4 {-0.65/18 17} 23.
Bxd4 {-0.57/16 67} Ngxe5 {-0.73/18 13} 24. Qe3 {-0.67/15 98} Nc6 {-0.77/19 10
(Bf6)} 25. Bxb6 {-0.73/14 49} Qc8 {-0.83/19 23} 26. Bd4 {-0.78/14 74 (Qd2)}
Nxd4 {-0.97/21 84} 27. Qxd4 {-0.79/15 63} Nc5 {-0.97/21 17 (Bf6)} 28. Rb5 {-0.
75/14 51} Qc7 {-0.97/21 96 (Rd8)} 29. Kg2 {-0.81/13 81 (Qe3)} Rfc8 {-1.16/21
189} 30. Bf3 {-0.96/14 40 (Bg4)} h6 {-1.12/20 74 (Qd8)} 31. Qg4 {-0.94/14 69}
Rd8 {-1.03/19 89 (Qd8)} 32. Rd1 {-0.93/12 48 (Qh5)} Ra7 {-1.10/19 76 (Re8)} 33.
Rb4 {-1.07/14 43} Qa5 {-1.23/18 9} 34. Nb5 {-1.07/15 42} Ra6 {-1.38/18 19} 35.
c3 {-1.08/15 31 (Rbb1)} Nxa4 {-1.25/18 12} 36. Rb3 {-1.06/16 30} Nc5 {-1.24/19
15} 37. Rbb1 {-1.09/17 67} Qa2 {-1.28/20 100} 38. Qf4 {-1.13/16 60} Rc8 {-1.30/
20 85 (Bf6)} 39. Qe3 {-1.16/16 86 (Nd4)} Bg5 {-1.26/20 73} 40. Qe1 {-1.21/16 33
} Rb6 {-1.14/20 110} 41. Rb4 {-1.20/15 97 (h4)} Rcb8 {-1.46/21 101 (Nb3)} 42.
Nd4 {-1.42/16 138} Bf6 {-1.46/20 21} 43. Nc6 {-1.42/16 48} R8b7 {-1.56/20 48}
44. Ne5 {-1.53/17 188 (Qe3)} Rxb4 {-1.67/21 71 (Bxe5)} 45. cxb4 {-1.42/18 86}
Bxe5 {-1.69/21 30} 46. bxc5 {-1.42/19 111} Rb2 {-1.69/22 38} 47. Qe3 {-1.42/19
81} Rc2 {-1.69/21 15} 48. Rd3 {-1.43/18 63} Bf6 {-1.65/21 17} 49. Bd1 {-1.42/
18 28} Bg5 {-1.69/22 21 (d4)} 50. Qf3 {-1.43/18 56} Rxc5 {-1.76/22 50} 51. Ra3
{-1.43/19 71} Qc4 {-1.76/23 32} 52. Be2 {-1.45/18 26} Qc2 {-1.75/22 116} 53.
Bd3 {-1.50/17 58} Qc1 {-1.75/22 23} 54. Rb3 {-1.50/17 26} Rc7 {-1.76/21 33
(Rc8)} 55. Qg4 {-1.50/17 88 (Rb8+)} Rc8 {-1.82/22 85} 56. Qa4 {-1.50/17 28} Qc7
{-1.79/21 19 (Bf6)} 57. Qa6 {-1.49/17 42} Qd8 {-1.80/21 19} 58. Qa7 {-1.52/16
52} Be7 {-1.86/20 39} 59. Rb7 {-1.55/16 47 (Ba6)} Bc5 {-2.04/23 111} 60. Qa1 {
-1.60/18 37 (Qa4)} Rb8 {-2.04/23 60} 61. Bh7+ {-1.60/18 38} Kf8 {-2.04/23 118}
62. Rxb8 {-1.60/20 61} Qxb8 {-2.04/23 20} 63. Qa5 {-1.64/19 39} Bb4 {-2.04/22
14 (Qc8)} 64. Qa1 {-1.71/19 66} Qb6 {-2.08/22 126} 65. Bd3 {-1.72/18 34 (Qb2)}
Kg8 {-2.10/23 132} 66. Qa8+ {-1.72/17 40 (h4)} Bf8 {-2.11/21 14} 67. Qa4 {-1.
72/20 51 (Qa1)} g6 {-2.13/22 88} 68. Bb5 {-1.73/19 36 (h4)} Be7 {-2.18/22 88
(Bc5)} 69. Qa8+ {-1.73/20 147 (h4)} Kg7 {-2.18/22 12} 70. Be8 {-1.76/20 34} h5
{-2.18/21 13 (Bc5)} 71. Qc6 {-1.75/18 53 (h4)} Qd4 {-2.19/23 66 (Qb2)} 72. Qa4
{-1.75/20 54} Bb4 {-2.19/23 36} 73. Qb3 {-1.75/20 38 (h4)} Kf8 {-2.19/24 98}
74. Bd7 {-1.74/20 62} Bc3 {-2.19/23 75 (Bd6)} 75. Qa4 {-1.75/19 62} Qc5 {-2.19/
23 29} 76. Qc6 {-1.78/18 40} Qb4 {-2.19/24 38} 77. Qa4 {-1.78/19 28} Qe7 {-2.
19/24 149 (Qd6)} 78. Bc6 {-1.78/19 38 (h4)} Qd6 {-2.22/21 23 (Qc5)} 79. Qa8+ {
-1.78/18 47 (Bb5)} Kg7 {-2.30/22 23} 80. Be8 {-1.78/20 37 (h4)} h4 {-2.54/24
233 (Qe7)} 81. Qa7 {-1.96/18 91 (Qb7)} Qf8 {-2.59/22 24} 82. Qa4 {-2.01/19 91}
hxg3 {-2.60/22 29} 83. fxg3 {-2.15/19 86} Bf6 {-2.61/22 38 (Be5)} 84. h4 {-2.
13/19 73} Qc5 {-2.60/21 30 (Be5)} 85. Qb3 {-2.13/19 75} Qd4 {-2.79/22 100 (Qc1)
} 86. Qc2 {-2.13/21 295} Qe3 {-2.79/22 29 (Qg4)} 87. Bb5 {-2.27/20 69 (Qd1)}
Bd4 {-2.91/23 80} 88. Qe2 {-2.42/20 91 (Kh3)} Qg1+ {-2.84/20 21} 89. Kh3 {-2.
42/21 73} Qh1+ {-2.87/21 24} 90. Qh2 {-2.50/21 61} Qc1 {-2.95/22 29} 91. Qg2 {
-2.50/21 67} Qc8 {-2.95/21 17 (Qc5)} 92. Kh2 {-2.47/17 58} Qc5 {-2.96/21 24}
93. Ba4 {-2.40/18 31 (Qf1)} Be5 {-3.07/23 107 (Qb4)} 94. Kh3 {-2.37/19 108} Qc3
{-3.07/22 14 (Qe3)} 95. Bd1 {-2.81/18 81} Qe1 {-3.07/22 19} 96. Bc2 {-2.81/18
52} Bb8 {-3.36/22 74 (Bc7)} 97. Bd3 {-2.81/16 38} e5 {-3.81/21 90 (Qe3)} 98.
Bb5 {-3.12/16 43} Qc3 {-3.73/20 26} 99. h5 {-3.13/17 37 (Qf2)} e4 {-3.80/20 20}
100. hxg6 {-3.13/17 44} fxg6 {-3.80/20 27} 101. Ba6 {-3.39/17 63} Qe5 {-5.61/
21 111 (Be5)} 102. Kh2 {-3.36/16 38 (Qf2)} Qh5+ {-14.68/23 220 (Qd6)} 103. Qh3
{-3.11/15 32} Qxh3+ {-14.87/24 199 (Kf6)} 104. Kxh3 {-10.79/20 59} Kf6 {-14.87/
24 34} 105. Be2 {-10.79/17 14 (Kg2)} d4 {-14.87/22 17} 106. Bf1 {-10.79/22 33}
d3 {-14.87/22 28} 0-1

[Event "MS, 40'/40+40'/40+40'"]
[Site "?"]
[Date "2010.07.17"]
[Round "10"]
[White "IvanHoe 9.54b w32"]
[Black "Rybka 4 w32"]
[Result "1-0"]
[ECO "B12"]
[Annotator "0.28;0.36"]
[PlyCount "103"]
[TimeControl "40/2400:40/2400:2400"]

{AMD Turion(tm) 64 Mobile Technology ML-37 W=21.3 plies; 694kN/s B=16.8
plies; 39kN/s} 1. e4 c6 2. d4 d5 3. e5 Bf5 4. Nf3 e6 {Both last book move} 5.
Be2 {0.28/20 183} c5 {0.36/16 414} 6. Be3 {0.28/19 32 (0-0)} cxd4 {0.28/14 69}
7. Nxd4 {0.30/19 35} Ne7 {0.28/15 48} 8. Nd2 {0.29/20 124 (f4)} Nbc6 {0.30/17
120} 9. N2f3 {0.30/19 50} Be4 {0.30/16 79} 10. O-O {0.22/18 79 (c3)} Bxf3 {0.
33/16 136 (Qd7)} 11. Nxf3 {0.26/20 131} a6 {0.32/16 300 (Qc7)} 12. c4 {0.44/20
84 (c3)} dxc4 {0.38/15 125} 13. Bxc4 {0.34/19 21} Qxd1 {0.41/16 30} 14. Rfxd1 {
0.26/19 16} h6 {0.41/16 73 (g6)} 15. Bd3 {0.32/20 67} g5 {0.41/15 36} 16. Be4 {
0.32/20 21} Bg7 {0.38/15 21} 17. h3 {0.27/19 14} Ng6 {0.35/14 23 (Nxe5)} 18.
Rac1 {0.26/20 84 (Bxg6)} Ngxe5 {0.21/15 40} 19. Nxe5 {0.22/19 22} Bxe5 {0.26/
17 25} 20. Rxc6 {0.22/21 84 (Rc5)} bxc6 {0.06/19 34} 21. Bxc6+ {0.22/22 22} Ke7
{0.06/20 45} 22. Bc5+ {0.22/23 24 (Bxa8)} Kf6 {0.09/20 80} 23. Bxa8 {0.29/24
124} Rxa8 {0.11/21 42} 24. b4 {0.22/24 72} Rc8 {0.16/20 155 (a5)} 25. Kf1 {0.
30/23 101} a5 {0.16/19 34} 26. a3 {0.30/22 32} Kg6 {0.16/16 14 (Bb2)} 27. Ke2 {
0.38/20 13} Bb2 {0.21/17 21} 28. Be3 {0.43/21 94 (Rd3)} a4 {0.41/17 89} 29. Rd3
{0.48/20 41} Rb8 {0.41/17 16 (Bc1)} 30. Ba7 {0.57/22 68 (Bd4)} Rb7 {0.29/17 31}
31. Bd4 {0.48/21 18} Bc1 {0.26/17 32} 32. Ba1 {0.48/21 13 (Be3)} Rc7 {0.43/17
23} 33. Be5 {0.55/23 114 (g3)} Rc4 {0.34/18 25} 34. Bd6 {0.51/22 23} Rc6 {0.34/
18 49} 35. Bc5 {0.60/22 35} Rc7 {0.43/18 34 (Rc8)} 36. Rc3 {1.08/24 93 (g3)}
Bb2 {0.32/15 41} 37. Rc2 {1.08/24 23} Bd4 {1.12/15 30} 38. Kd3 {1.27/23 62}
Bxc5 {1.26/16 14} 39. Rxc5 {1.58/22 98} Rd7+ {1.41/16 19} 40. Kc2 {1.57/22 137
(Ke2)} Kf6 {1.16/14 11} 41. b5 {1.88/22 225} Ke7 {1.63/16 114 (e5)} 42. Kc3 {
2.05/20 156} f6 {1.98/15 51 (Kd8)} 43. Rc4 {2.24/18 24 (g3)} e5 {2.70/14 70
(f5)} 44. b6 {2.93/22 173 (Rxa4)} Rb7 {3.61/15 121} 45. Rc6 {3.06/22 87} Kd7 {
3.58/17 133} 46. Rxf6 {3.13/22 26} Kc8 {3.98/19 57} 47. Rxh6 {3.14/22 38 (Kb4)}
Rf7 {3.64/19 152} 48. Kb4 {3.85/23 83} Rxf2 {5.50/16 43 (Kb7)} 49. Kb5 {4.69/
23 54} e4 {6.60/18 40 (Kb7)} 50. Ka6 {6.82/23 62 (Rh8+)} Rf8 {9.63/20 107} 51.
Rh7 {7.41/23 45} Kb8 {9.93/22 36} 52. Rb7+ {7.97/23 40 (Re7)} 1-0

Re: IvanHoe 999953 beta

Posted: Sat Jul 17, 2010 11:37 pm
by John Doe
kingliveson wrote:Only thing IvanHoe needs is Pawn Hash set to 1/8th or 1/4th of Hash used -- everything else can remain default. 999954 beta is quite stable as is 999953.
Hi! What do you mean by this?
If I'm using 1024 mb hash so I need pawn hash setyp as 256 or 128?

Re: IvanHoe 999953 beta

Posted: Sun Jul 18, 2010 1:01 am
by kingliveson
John Doe wrote:
kingliveson wrote:Only thing IvanHoe needs is Pawn Hash set to 1/8th or 1/4th of Hash used -- everything else can remain default. 999954 beta is quite stable as is 999953.
Hi! What do you mean by this?
If I'm using 1024 mb hash so I need pawn hash setyp as 256 or 128?
Hello Mr. Doe, yes Pawn Hash needs to be adjusted relative to Hash. The Pawn Hash gets quite a hit during search (eval) so setting it too low causes nps to decrease. You can't go wrong with 1/8th. Just like Hash, must be power of 2.

Re: IvanHoe 999953 beta

Posted: Sun Jul 18, 2010 4:31 pm
by sirabc
Ivanhoe 9.53b x32 default doesn't run on older pcs because popcnt is turned on---when I run the exe in a dos window, it reports popcnt enable.

Re: IvanHoe 999953 beta

Posted: Sun Jul 18, 2010 5:20 pm
by kingliveson
sirabc wrote:Ivanhoe 9.53b x32 default doesn't run on older pcs because popcnt is turned on---when I run the exe in a dos window, it reports popcnt enable.
Actually, I no longer have IvanHoe 9.53b w32 source code. I was careless, but am definitely keeping the source for the next build though. Inside joke. :lol:


Thanks for noting, fixed file has been re-uploaded.

Re: IvanHoe 999953 beta

Posted: Sun Jul 18, 2010 7:05 pm
by sirabc
kingliveson wrote: Actually, I no longer have IvanHoe 9.53b w32 source code. I was careless, but am definitely keeping the source for the next build though. Inside joke. :lol:
Can't you decompile it and make it even stronger? :lol:

Works fine. Thanks.