Tyrell 1.01

Feb 6 2011

- Added Endgame bitbase (Thanks to Daniel Shawul) acesss. Just update the path
in the config file (Tyrell.cfg). The last back-slash is needed (exemple.:c:\)

- speedup the search a little. (one ply)

- Added modbility in the eval.

====================================================================================

Tyrell 1.00

Internal Chessboard.

Tyrell makes use of a 1-dimensional array of 64 elements to represent 
the Chessboard. The index-square mapping follows the western world 
convention: left to right, top to bottom.


    |     -- columns --      |
rows| 0  1  2  3  4  5  6  7 |
----|------------------------|      
 0  | 00 01 02 03 04 05 06 07| 8
 1  | 08 09 10 11 12 13 14 15| 7
 2  | 16 17 18 19 20 21 22 23| 6
 3  | 24 25 26 27 28 29 30 31| 5
 4  | 32 33 34 35 36 37 38 39| 4
 5  | 40 41 42 43 44 45 46 47| 3
 6  | 48 49 50 51 52 53 54 55| 2
 7  | 56 57 58 59 60 61 62 63| 1
------------------------------
      A  B  C  D  E  F  G  H


The move-generator makes use of two large tables. For each individual square
of the Chessboard, eight (8) indexes are recorded that represent the eight 
squares that can be reached in one move depending on the direction: 
North, North-East, East, South-East, South, South-West, West, North-West.
One table represents the movement of the Knight and the other, the movement
of the King.

Example of the table indexing:
 
+---+---+---+
| 7 | 0 | 1 |
+---+---+---+
| 6 | X | 2 |
+---+---+---+
| 5 | 4 | 3 |
+---+---+---+

Directions:

0 = North
1 = North-East
2 = East
3 = South-East
4 = South
5 = South-West
6 = West
7 = North-West

Example: inside square (King's table)

+---+---+---+
|a3 |b3 |c3 |
+---+---+---+
|a2 |b2 |c2 |
+---+---+---+
|a1 |b1 |c1 |
+---+---+---+

Table values for the "b2" square:

0 = b3
1 = c3
2 = c2
3 = c1
4 = b1
5 = a1
6 = a2
7 = a3

Example: border square (King's table)

+---+---+---+
|-1 |a2 |b2 |
+---+---+---+
|-1 |a1 |b1 |
+---+---+---+
|-1 |-1 |-1 |
+---+---+---+

Table values for the "a1" square:

0 = a2
1 = b2
2 = c1
3 = -1
4 = -1
5 = -1
6 = -1
7 = -1

Most Chess programmers, at this point, should have an understanding of the 
system described above and could build a movegenerator easily from it. The 
main idea is that, with this system, a piece can move from a square to 
another square provided that it exits in a specific direction.

Piece lists.

Tyrell uses two small 6x8 tables to record the locations of the pieces
on the Chessboard. Index 0 records the number of piece of a specific type 
that are still on the board. The other indexes record the locations of the 
individual pieces.


The rest of it.

Tyrell is no different than the many chess programs out there: Alpha-Beta 
search, Q-Search, transposition table, evaluation function, etc... It is 
written in C++ using classes as containers for data and functions. No OOP. 
A lot of time is spent into coding, testing, and debugging. Tyrell is not 
a strong engine though. Go figure.

Protocol.

Tyrell is a console application that can communicate with GUIs that implement 
the UCI protocol and/or the Winboard protocol. But pondering is implemented 
under the UCI protocol only. There is a small configuration file (included) 
that should be in the same directory (or folder) as the executable. The user 
can specify the location of the Tyrell's opening database and the size in 
Mbytes of the transpoition table using "Tyrell.cfg".

Final notes.

Tyrell v1.00 is an improved version of the chess program which is part of 
the ChessMaude GUI. Tyrell v1.00 can be loaded in ChessMaude either as UCI 
engine or a Winboard engine.


Marcel Normand Blais (or Normand M. Blais)

Jan 02 2011

(blais_normand_dot_msn_dot_com)

**** Please, do not send donation. Help your local community instead. ****


