Subversion Repositories Games.Chess Giants

Rev

Rev 108 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
33 pmbaty 1
#include "chess.h"
2
/* *INDENT-OFF* */#if !defined(INLINEASM)
154 pmbaty 3
unsigned char msb[65536];
33 pmbaty 4
unsigned char lsb[65536];
5
#endif
6
unsigned char msb_8bit[256];
7
unsigned char lsb_8bit[256];
8
unsigned char pop_cnt_8bit[256];
9
uint64_t mask_pawn_connected[2][64];
10
uint64_t mask_pawn_isolated[64];
11
uint64_t mask_passed[2][64];
12
uint64_t mask_pattacks[2][64];
13
uint64_t pawn_race[2][2][64];
14
BOOK_POSITION book_buffer[BOOK_CLUSTER_SIZE];
15
BOOK_POSITION book_buffer_char[BOOK_CLUSTER_SIZE];
16
const int OOsqs[2][3] =  {{E8, F8, G8}, {E1, F1, G1}};
17
const int OOOsqs[2][3] = {{E8, D8, C8}, {E1, D1, C1}};
18
const int OOfrom[2] = {E8, E1};
19
const int OOto[2] =   {G8, G1};
20
const int OOOto[2] =  {C8, C1};
21
#define VERSION      "25.2"
22
char version[8] = {VERSION};
23
PLAYING_MODE mode = normal_mode;
24
int batch_mode = 0;                  /* no asynch reads */
25
int swindle_mode = 1;                /* try to swindle */
26
int call_flag = 0;
27
int crafty_rating = 2500;
28
int opponent_rating = 2500;
29
int last_search_value = 0;
30
int FP_margin[16] = {  0, 100, 150, 200,  250,  300,  400,  500,
108 pmbaty 31
                     600, 700, 800, 900, 1000, 1100, 1200, 1300 };
33 pmbaty 32
int FP_depth = 7;
33
int LMP[16];
34
int LMP_depth = 16;
35
int LMP_base = 3;
36
double LMP_scale = 1.9;
37
int pgn_suggested_percent = 0;
38
char pgn_event[128] = {"?"};
39
char pgn_site[128] = {"?"};
40
char pgn_date[128] = {"????.??.??"};
41
char pgn_round[128] = {"?"};
42
char pgn_white[128] = {"unknown"};
108 pmbaty 43
char pgn_white_elo[128] = {""};
33 pmbaty 44
char pgn_black[128] = {"Crafty " VERSION};
45
char pgn_black_elo[128] = {""};
46
char pgn_result[128] = {"*"};
47
char *B_list[128];
48
char *AK_list[128];
49
char *GM_list[128];
50
char *IM_list[128];
108 pmbaty 51
char *SP_list[128];
52
char *SP_opening_filename[128];
33 pmbaty 53
char *SP_personality_filename[128];
108 pmbaty 54
int output_format = 0;
55
#if defined(SYZYGY)
56
int EGTBlimit = 0;
57
int EGTB_use = 0;
58
int EGTB_draw = 0;
59
int EGTB_depth = 0;
60
size_t EGTB_cache_size = 4096 * 4096;
61
void *EGTB_cache = (void *) 0;
62
int EGTB_setup = 0;
63
#endif
64
int xboard = 0;
65
int xboard_done = 0;
66
int pong = 0;
67
int early_exit = 99;
68
char book_path[128] = {BOOKDIR};
69
char log_path[128] = {LOGDIR};
70
char tb_path[128] = {TBDIR};
71
char rc_path[128] = {RCDIR};
72
int initialized = 0;
73
int kibitz = 0;
74
int post = 0;
75
int log_id = 1;
76
int game_wtm = 1;
77
int last_opponent_move = 0;
78
int check_depth = 1;                  /* extend checks one ply                */
79
int null_depth = 3;                   /* R=3 + (next line)                    */
80
int null_divisor = 6;                 /* R = null_depth + depth / 6           */
81
int LMR_rdepth = 1;                   /* leave 1 full ply after reductions    */
82
int LMR_min= 1;                       /* minimum reduction 1 ply              */
83
int LMR_max= 15;                      /* maximum reduction 15 plies           */
84
double LMR_db = 1.8;                  /* depth is 1.8x as important as        */
85
double LMR_mb = 1.0;                  /* moves searched in the formula.       */
86
double LMR_s = 2.0;                   /* smaller numbers increase reductions. */
87
uint8_t LMR[32][64];
88
int rep_index;
89
int search_depth = 0;
90
uint64_t search_nodes = 0;
91
uint64_t temp_search_nodes = 0;
92
int search_move = 0;
93
int predicted = 0;
94
int time_used = 0;
95
int time_used_opponent = 0;
96
int analyze_mode = 0;
97
int annotate_mode = 0;
98
int input_status = 0;
99
int resign = 9;
100
int resign_counter = 0;
101
int resign_count = 5;
102
int draw_counter = 0;
103
int draw_count = 5;
104
int draw_offer_pending = 0;
105
int draw_offered = 0;
106
int offer_draws = 1;
107
int dynamic_draw_score = 1;
108
int adaptive_hash = 0;
109
size_t adaptive_hash_min = 0;
110
size_t adaptive_hash_max = 0;
111
size_t adaptive_hashp_min = 0;
112
size_t adaptive_hashp_max = 0;
113
int time_limit = 100;
114
int force = 0;
115
char initial_position[80] = {""};
116
char ponder_text[512] = {""};
117
char book_hint[512] = {""};
118
int over = 0;
119
int usage_level = 0;
120
char audible_alarm = 0x07;
121
char speech = 0;
122
int book_accept_mask = ~03;
123
int book_reject_mask = 3;
124
int book_random = 1;
125
float book_weight_learn = 1.0;
126
float book_weight_freq = 1.0;
127
float book_weight_eval = 0.1;
128
int book_search_trigger = 20;
129
int learn = 1;
130
int learning = 100;
131
int learn_value = 0;
132
int abort_search;      /*  1 = abort / print stats, 2 = abort no print stats */
133
int iteration;
134
int root_wtm = 1;
135
int last_root_value;
136
ROOT_MOVE root_moves[256];
137
int n_root_moves;
138
int difficulty;
139
int absolute_time_limit;
140
int search_time_limit;
141
int burp;
142
int quit = 0;
143
unsigned opponent_start_time, opponent_end_time;
144
unsigned program_start_time, program_end_time;
145
unsigned start_time, end_time;
146
TREE *block[MAX_BLOCKS + 1];
147
THREAD thread[CPUS];
148
#if (CPUS > 1)
149
lock_t lock_smp, lock_io;
150
#if defined(UNIX)
151
  pthread_attr_t attributes;
152
#endif
153
#endif
154
unsigned int hardware_processors;
155
unsigned int smp_max_threads = 0;
156
unsigned int smp_split_group = 8;       /* max threads per group              */
157
unsigned int smp_split_at_root = 1;     /* enable split at root               */
158
unsigned int smp_min_split_depth = 5;   /* don't split within 5 plies of tips */
159
unsigned int smp_gratuitous_depth = 10; /* gratuitous splits if depth > 10    */
160
unsigned int smp_gratuitous_limit = 6;  /* max gratuitous splits / thread     */
161
int smp_nice = 1;                       /* terminate idle threads             */
162
int smp_affinity = 0;                   /* anything >= 0 is enabled           */
163
int smp_affinity_increment = 1;         /* if physical cores are zero - N-1
164
                                           use 1, if physical cores are even
165
                                           numbers and hyperthreaded cores are
166
                                           odd use 2.  For IBM POWER 8 use 8  */
167
int smp_numa = 0;                       /* disables NUMA mode by default      */
168
                                        /* enable if you really have NUMA     */
169
/*
170
      This is the autotune configuration section.  Each line represents one
171
      smp search parameter that can be tuned.  The first three values are the
172
      min, max and increment that autotune will use for this paramenter.  The
173
      fourth parameter is a string autotune will display to explain what it is
174
      currently tuning.  The fifth parameter is the command used to change this
175
      parameter (this is added to the .craftyrc/crafty.rc file after tuning is
176
      completed.  The last parameter is a pointer to the variable that must be
177
      changed to adjust the parameter while running the autotune tests.
178
*/
179
int autotune_params = 4;
180
struct autotune tune[16] = {
181
  { 4, 20, 4, "max thread group", "smpgroup", &smp_split_group},
182
  { 4,  8, 1, "min split depth", "smpmin", &smp_min_split_depth},
183
  {10, 16, 2, "min gratuitous split depth", "smpgsd", &smp_gratuitous_depth},
184
  { 1,  8, 2, "gratuitous split limit", "smpgsl", &smp_gratuitous_limit},
185
};
186
unsigned parallel_splits;
187
unsigned parallel_splits_wasted;
188
unsigned parallel_aborts;
189
unsigned parallel_joins;
190
unsigned busy_percent = 0;
191
uint64_t game_max_blocks = 0;
192
volatile int smp_split = 0;
193
volatile int smp_threads = 0;
194
volatile int initialized_threads = 0;
195
int crafty_is_white = 0;
196
unsigned nodes_between_time_checks = 1000000;
197
unsigned nodes_per_second = 1000000;
198
int next_time_check = 100000;
199
int transposition_age = 0;
200
int thinking = 0;
201
int pondering = 0;
202
int puzzling = 0;
203
int booking = 0;
204
/************************************************************
205
 *                                                          *
206
 *    1 -> display move/time/results/etc.                   *
207
 *    2 -> display PV.                                      *
208
 *    4 -> display fail high / fail low moves               *
209
 *    8 -> display search statistics.                       *
210
 *   16 -> display root moves as they are searched.         *
211
 *   32 -> display general informational messages.          *
212
 *   64 -> display ply-1 move list / flags after each       *
213
 *           iteration.                                     *
214
 *  128 -> display root moves and scores before search      *
215
 *           begins.                                        *
216
 * 2048 -> error messages (can not be disabled).            *
217
 *                                                          *
218
 ************************************************************
219
 */
220
int display_options = 1 | 2 | 8 | 16 | 32 | 2048;
221
unsigned noise_level = 100;
222
int noise_block = 0;
223
int tc_moves = 60;
224
int tc_time = 180000;
225
int tc_time_remaining[2] = {180000, 180000};
226
int tc_moves_remaining[2] = {60, 60};
227
int tc_secondary_moves = 30;
228
int tc_secondary_time = 90000;
229
int tc_increment = 0;
230
int tc_sudden_death = 0;
231
int tc_safety_margin = 0;
232
int draw_score[2] = {0, 0};
233
char kibitz_text[4096];
234
int kibitz_depth;
235
int move_number = 1;
236
int moves_out_of_book = 0;
237
int first_nonbook_factor = 0;
238
int first_nonbook_span = 0;
239
#if defined(SKILL)
240
int skill = 100;
241
#endif
242
int show_book = 0;
243
int book_selection_width = 5;
244
int ponder = 1;
245
int trace_level = 0;
246
/*  for the following 6 lines, each pair should have */
247
/*  the same numeric value (the size value).         */
248
size_t hash_table_size = 1ull << 20;
249
uint64_t hash_mask = ((1ull << 20) - 1) & ~3;
250
size_t hash_path_size = 1ull << 16;
251
uint64_t hash_path_mask = ((1ull << 16) - 1) & ~15;
252
size_t pawn_hash_table_size = 1ull << 18;
253
uint64_t pawn_hash_mask = (1ull << 18) - 1;
254
uint64_t mask_clear_entry = 0xff9ffffffffe0000ull;
255
int abs_draw_score = 0;
256
int accept_draws = 1;
257
const char translate[13] =
258
    {'k', 'q', 'r', 'b', 'n', 'p', 0, 'P', 'N', 'B', 'R', 'Q', 'K'};
259
const uint64_t magic_bishop[64] = {
260
  0x0002020202020200ull, 0x0002020202020000ull, 0x0004010202000000ull,
261
  0x0004040080000000ull, 0x0001104000000000ull, 0x0000821040000000ull,
262
  0x0000410410400000ull, 0x0000104104104000ull, 0x0000040404040400ull,
263
  0x0000020202020200ull, 0x0000040102020000ull, 0x0000040400800000ull,
264
  0x0000011040000000ull, 0x0000008210400000ull, 0x0000004104104000ull,
265
  0x0000002082082000ull, 0x0004000808080800ull, 0x0002000404040400ull,
266
  0x0001000202020200ull, 0x0000800802004000ull, 0x0000800400A00000ull,
267
  0x0000200100884000ull, 0x0000400082082000ull, 0x0000200041041000ull,
268
  0x0002080010101000ull, 0x0001040008080800ull, 0x0000208004010400ull,
269
  0x0000404004010200ull, 0x0000840000802000ull, 0x0000404002011000ull,
270
  0x0000808001041000ull, 0x0000404000820800ull, 0x0001041000202000ull,
271
  0x0000820800101000ull, 0x0000104400080800ull, 0x0000020080080080ull,
272
  0x0000404040040100ull, 0x0000808100020100ull, 0x0001010100020800ull,
273
  0x0000808080010400ull, 0x0000820820004000ull, 0x0000410410002000ull,
274
  0x0000082088001000ull, 0x0000002011000800ull, 0x0000080100400400ull,
275
  0x0001010101000200ull, 0x0002020202000400ull, 0x0001010101000200ull,
276
  0x0000410410400000ull, 0x0000208208200000ull, 0x0000002084100000ull,
277
  0x0000000020880000ull, 0x0000001002020000ull, 0x0000040408020000ull,
278
  0x0004040404040000ull, 0x0002020202020000ull, 0x0000104104104000ull,
279
  0x0000002082082000ull, 0x0000000020841000ull, 0x0000000000208800ull,
280
  0x0000000010020200ull, 0x0000000404080200ull, 0x0000040404040400ull,
281
  0x0002020202020200ull
282
};
283
const uint64_t magic_bishop_mask[64] = {
284
  0x0040201008040200ull, 0x0000402010080400ull, 0x0000004020100A00ull,
285
  0x0000000040221400ull, 0x0000000002442800ull, 0x0000000204085000ull,
286
  0x0000020408102000ull, 0x0002040810204000ull, 0x0020100804020000ull,
287
  0x0040201008040000ull, 0x00004020100A0000ull, 0x0000004022140000ull,
288
  0x0000000244280000ull, 0x0000020408500000ull, 0x0002040810200000ull,
289
  0x0004081020400000ull, 0x0010080402000200ull, 0x0020100804000400ull,
290
  0x004020100A000A00ull, 0x0000402214001400ull, 0x0000024428002800ull,
291
  0x0002040850005000ull, 0x0004081020002000ull, 0x0008102040004000ull,
292
  0x0008040200020400ull, 0x0010080400040800ull, 0x0020100A000A1000ull,
293
  0x0040221400142200ull, 0x0002442800284400ull, 0x0004085000500800ull,
294
  0x0008102000201000ull, 0x0010204000402000ull, 0x0004020002040800ull,
295
  0x0008040004081000ull, 0x00100A000A102000ull, 0x0022140014224000ull,
296
  0x0044280028440200ull, 0x0008500050080400ull, 0x0010200020100800ull,
297
  0x0020400040201000ull, 0x0002000204081000ull, 0x0004000408102000ull,
298
  0x000A000A10204000ull, 0x0014001422400000ull, 0x0028002844020000ull,
299
  0x0050005008040200ull, 0x0020002010080400ull, 0x0040004020100800ull,
300
  0x0000020408102000ull, 0x0000040810204000ull, 0x00000A1020400000ull,
301
  0x0000142240000000ull, 0x0000284402000000ull, 0x0000500804020000ull,
302
  0x0000201008040200ull, 0x0000402010080400ull, 0x0002040810204000ull,
303
  0x0004081020400000ull, 0x000A102040000000ull, 0x0014224000000000ull,
304
  0x0028440200000000ull, 0x0050080402000000ull, 0x0020100804020000ull,
305
  0x0040201008040200ull
306
};
307
const unsigned magic_bishop_shift[64] = {
308
  58, 59, 59, 59, 59, 59, 59, 58,
309
  59, 59, 59, 59, 59, 59, 59, 59,
310
  59, 59, 57, 57, 57, 57, 59, 59,
311
  59, 59, 57, 55, 55, 57, 59, 59,
312
  59, 59, 57, 55, 55, 57, 59, 59,
313
  59, 59, 57, 57, 57, 57, 59, 59,
314
  59, 59, 59, 59, 59, 59, 59, 59,
315
  58, 59, 59, 59, 59, 59, 59, 58
316
};
317
uint64_t magic_bishop_table[5248];
318
uint64_t *magic_bishop_indices[64] = {
319
  magic_bishop_table + 4992, magic_bishop_table + 2624,
320
  magic_bishop_table + 256, magic_bishop_table + 896,
321
  magic_bishop_table + 1280, magic_bishop_table + 1664,
322
  magic_bishop_table + 4800, magic_bishop_table + 5120,
323
  magic_bishop_table + 2560, magic_bishop_table + 2656,
324
  magic_bishop_table + 288, magic_bishop_table + 928,
325
  magic_bishop_table + 1312, magic_bishop_table + 1696,
326
  magic_bishop_table + 4832, magic_bishop_table + 4928,
327
  magic_bishop_table + 0, magic_bishop_table + 128,
328
  magic_bishop_table + 320, magic_bishop_table + 960,
329
  magic_bishop_table + 1344, magic_bishop_table + 1728,
330
  magic_bishop_table + 2304, magic_bishop_table + 2432,
331
  magic_bishop_table + 32, magic_bishop_table + 160,
332
  magic_bishop_table + 448, magic_bishop_table + 2752,
333
  magic_bishop_table + 3776, magic_bishop_table + 1856,
334
  magic_bishop_table + 2336, magic_bishop_table + 2464,
335
  magic_bishop_table + 64, magic_bishop_table + 192,
336
  magic_bishop_table + 576, magic_bishop_table + 3264,
337
  magic_bishop_table + 4288, magic_bishop_table + 1984,
338
  magic_bishop_table + 2368, magic_bishop_table + 2496,
339
  magic_bishop_table + 96, magic_bishop_table + 224,
340
  magic_bishop_table + 704, magic_bishop_table + 1088,
341
  magic_bishop_table + 1472, magic_bishop_table + 2112,
342
  magic_bishop_table + 2400, magic_bishop_table + 2528,
343
  magic_bishop_table + 2592, magic_bishop_table + 2688,
344
  magic_bishop_table + 832, magic_bishop_table + 1216,
345
  magic_bishop_table + 1600, magic_bishop_table + 2240,
346
  magic_bishop_table + 4864, magic_bishop_table + 4960,
347
  magic_bishop_table + 5056, magic_bishop_table + 2720,
348
  magic_bishop_table + 864, magic_bishop_table + 1248,
349
  magic_bishop_table + 1632, magic_bishop_table + 2272,
350
  magic_bishop_table + 4896, magic_bishop_table + 5184
351
};
352
int16_t magic_bishop_mobility_table[5248];
353
int16_t *magic_bishop_mobility_indices[64] = {
354
  magic_bishop_mobility_table + 4992, magic_bishop_mobility_table + 2624,
355
  magic_bishop_mobility_table + 256, magic_bishop_mobility_table + 896,
356
  magic_bishop_mobility_table + 1280, magic_bishop_mobility_table + 1664,
357
  magic_bishop_mobility_table + 4800, magic_bishop_mobility_table + 5120,
358
  magic_bishop_mobility_table + 2560, magic_bishop_mobility_table + 2656,
359
  magic_bishop_mobility_table + 288, magic_bishop_mobility_table + 928,
360
  magic_bishop_mobility_table + 1312, magic_bishop_mobility_table + 1696,
361
  magic_bishop_mobility_table + 4832, magic_bishop_mobility_table + 4928,
362
  magic_bishop_mobility_table + 0, magic_bishop_mobility_table + 128,
33 pmbaty 363
  magic_bishop_mobility_table + 320, magic_bishop_mobility_table + 960,
108 pmbaty 364
  magic_bishop_mobility_table + 1344, magic_bishop_mobility_table + 1728,
365
  magic_bishop_mobility_table + 2304, magic_bishop_mobility_table + 2432,
366
  magic_bishop_mobility_table + 32, magic_bishop_mobility_table + 160,
33 pmbaty 367
  magic_bishop_mobility_table + 448, magic_bishop_mobility_table + 2752,
108 pmbaty 368
  magic_bishop_mobility_table + 3776, magic_bishop_mobility_table + 1856,
33 pmbaty 369
  magic_bishop_mobility_table + 2336, magic_bishop_mobility_table + 2464,
370
  magic_bishop_mobility_table + 64, magic_bishop_mobility_table + 192,
371
  magic_bishop_mobility_table + 576, magic_bishop_mobility_table + 3264,
372
  magic_bishop_mobility_table + 4288, magic_bishop_mobility_table + 1984,
373
  magic_bishop_mobility_table + 2368, magic_bishop_mobility_table + 2496,
374
  magic_bishop_mobility_table + 96, magic_bishop_mobility_table + 224,
375
  magic_bishop_mobility_table + 704, magic_bishop_mobility_table + 1088,
376
  magic_bishop_mobility_table + 1472, magic_bishop_mobility_table + 2112,
377
  magic_bishop_mobility_table + 2400, magic_bishop_mobility_table + 2528,
378
  magic_bishop_mobility_table + 2592, magic_bishop_mobility_table + 2688,
379
  magic_bishop_mobility_table + 832, magic_bishop_mobility_table + 1216,
380
  magic_bishop_mobility_table + 1600, magic_bishop_mobility_table + 2240,
381
  magic_bishop_mobility_table + 4864, magic_bishop_mobility_table + 4960,
382
  magic_bishop_mobility_table + 5056, magic_bishop_mobility_table + 2720,
383
  magic_bishop_mobility_table + 864, magic_bishop_mobility_table + 1248,
384
  magic_bishop_mobility_table + 1632, magic_bishop_mobility_table + 2272,
385
  magic_bishop_mobility_table + 4896, magic_bishop_mobility_table + 5184
386
};
387
uint64_t magic_rook_table[102400];
388
uint64_t *magic_rook_indices[64] = {
389
  magic_rook_table + 86016, magic_rook_table + 73728,
390
  magic_rook_table + 36864, magic_rook_table + 43008,
391
  magic_rook_table + 47104, magic_rook_table + 51200,
392
  magic_rook_table + 77824, magic_rook_table + 94208,
393
  magic_rook_table + 69632, magic_rook_table + 32768,
394
  magic_rook_table + 38912, magic_rook_table + 10240,
395
  magic_rook_table + 14336, magic_rook_table + 53248,
396
  magic_rook_table + 57344, magic_rook_table + 81920,
397
  magic_rook_table + 24576, magic_rook_table + 33792,
398
  magic_rook_table + 6144, magic_rook_table + 11264,
399
  magic_rook_table + 15360, magic_rook_table + 18432,
400
  magic_rook_table + 58368, magic_rook_table + 61440,
401
  magic_rook_table + 26624, magic_rook_table + 4096,
108 pmbaty 402
  magic_rook_table + 7168, magic_rook_table + 0,
403
  magic_rook_table + 2048, magic_rook_table + 19456,
404
  magic_rook_table + 22528, magic_rook_table + 63488,
405
  magic_rook_table + 28672, magic_rook_table + 5120,
406
  magic_rook_table + 8192, magic_rook_table + 1024,
407
  magic_rook_table + 3072, magic_rook_table + 20480,
408
  magic_rook_table + 23552, magic_rook_table + 65536,
409
  magic_rook_table + 30720, magic_rook_table + 34816,
410
  magic_rook_table + 9216, magic_rook_table + 12288,
411
  magic_rook_table + 16384, magic_rook_table + 21504,
412
  magic_rook_table + 59392, magic_rook_table + 67584,
413
  magic_rook_table + 71680, magic_rook_table + 35840,
414
  magic_rook_table + 39936, magic_rook_table + 13312,
415
  magic_rook_table + 17408, magic_rook_table + 54272,
33 pmbaty 416
  magic_rook_table + 60416, magic_rook_table + 83968,
417
  magic_rook_table + 90112, magic_rook_table + 75776,
418
  magic_rook_table + 40960, magic_rook_table + 45056,
419
  magic_rook_table + 49152, magic_rook_table + 55296,
420
  magic_rook_table + 79872, magic_rook_table + 98304
421
};
422
int16_t magic_rook_mobility_table[102400];
423
int16_t *magic_rook_mobility_indices[64] = {
424
  magic_rook_mobility_table + 86016, magic_rook_mobility_table + 73728,
425
  magic_rook_mobility_table + 36864, magic_rook_mobility_table + 43008,
426
  magic_rook_mobility_table + 47104, magic_rook_mobility_table + 51200,
427
  magic_rook_mobility_table + 77824, magic_rook_mobility_table + 94208,
428
  magic_rook_mobility_table + 69632, magic_rook_mobility_table + 32768,
429
  magic_rook_mobility_table + 38912, magic_rook_mobility_table + 10240,
430
  magic_rook_mobility_table + 14336, magic_rook_mobility_table + 53248,
431
  magic_rook_mobility_table + 57344, magic_rook_mobility_table + 81920,
432
  magic_rook_mobility_table + 24576, magic_rook_mobility_table + 33792,
108 pmbaty 433
  magic_rook_mobility_table + 6144, magic_rook_mobility_table + 11264,
33 pmbaty 434
  magic_rook_mobility_table + 15360, magic_rook_mobility_table + 18432,
435
  magic_rook_mobility_table + 58368, magic_rook_mobility_table + 61440,
108 pmbaty 436
  magic_rook_mobility_table + 26624, magic_rook_mobility_table + 4096,
33 pmbaty 437
  magic_rook_mobility_table + 7168, magic_rook_mobility_table + 0,
438
  magic_rook_mobility_table + 2048, magic_rook_mobility_table + 19456,
439
  magic_rook_mobility_table + 22528, magic_rook_mobility_table + 63488,
108 pmbaty 440
  magic_rook_mobility_table + 28672, magic_rook_mobility_table + 5120,
441
  magic_rook_mobility_table + 8192, magic_rook_mobility_table + 1024,
442
  magic_rook_mobility_table + 3072, magic_rook_mobility_table + 20480,
443
  magic_rook_mobility_table + 23552, magic_rook_mobility_table + 65536,
444
  magic_rook_mobility_table + 30720, magic_rook_mobility_table + 34816,
154 pmbaty 445
  magic_rook_mobility_table + 9216, magic_rook_mobility_table + 12288,
108 pmbaty 446
  magic_rook_mobility_table + 16384, magic_rook_mobility_table + 21504,
33 pmbaty 447
  magic_rook_mobility_table + 59392, magic_rook_mobility_table + 67584,
108 pmbaty 448
  magic_rook_mobility_table + 71680, magic_rook_mobility_table + 35840,
449
  magic_rook_mobility_table + 39936, magic_rook_mobility_table + 13312,
33 pmbaty 450
  magic_rook_mobility_table + 17408, magic_rook_mobility_table + 54272,
451
  magic_rook_mobility_table + 60416, magic_rook_mobility_table + 83968,
452
  magic_rook_mobility_table + 90112, magic_rook_mobility_table + 75776,
453
  magic_rook_mobility_table + 40960, magic_rook_mobility_table + 45056,
154 pmbaty 454
  magic_rook_mobility_table + 49152, magic_rook_mobility_table + 55296,
455
  magic_rook_mobility_table + 79872, magic_rook_mobility_table + 98304
456
};
457
const uint64_t magic_rook[64] = {
458
  0x0080001020400080ull, 0x0040001000200040ull, 0x0080081000200080ull,
459
  0x0080040800100080ull, 0x0080020400080080ull, 0x0080010200040080ull,
460
  0x0080008001000200ull, 0x0080002040800100ull, 0x0000800020400080ull,
33 pmbaty 461
  0x0000400020005000ull, 0x0000801000200080ull, 0x0000800800100080ull,
108 pmbaty 462
  0x0000800400080080ull, 0x0000800200040080ull, 0x0000800100020080ull,
463
  0x0000800040800100ull, 0x0000208000400080ull, 0x0000404000201000ull,
464
  0x0000808010002000ull, 0x0000808008001000ull, 0x0000808004000800ull,
465
  0x0000808002000400ull, 0x0000010100020004ull, 0x0000020000408104ull,
466
  0x0000208080004000ull, 0x0000200040005000ull, 0x0000100080200080ull,
467
  0x0000080080100080ull, 0x0000040080080080ull, 0x0000020080040080ull,
468
  0x0000010080800200ull, 0x0000800080004100ull, 0x0000204000800080ull,
469
  0x0000200040401000ull, 0x0000100080802000ull, 0x0000080080801000ull,
470
  0x0000040080800800ull, 0x0000020080800400ull, 0x0000020001010004ull,
33 pmbaty 471
  0x0000800040800100ull, 0x0000204000808000ull, 0x0000200040008080ull,
472
  0x0000100020008080ull, 0x0000080010008080ull, 0x0000040008008080ull,
473
  0x0000020004008080ull, 0x0000010002008080ull, 0x0000004081020004ull,
474
  0x0000204000800080ull, 0x0000200040008080ull, 0x0000100020008080ull,
475
  0x0000080010008080ull, 0x0000040008008080ull, 0x0000020004008080ull,
476
  0x0000800100020080ull, 0x0000800041000080ull, 0x00FFFCDDFCED714Aull,
477
  0x007FFCDDFCED714Aull, 0x003FFFCDFFD88096ull, 0x0000040810002101ull,
478
  0x0001000204080011ull, 0x0001000204000801ull, 0x0001000082000401ull,
154 pmbaty 479
  0x0001FFFAABFAD1A2ull
33 pmbaty 480
};
481
const uint64_t magic_rook_mask[64] = {
482
  0x000101010101017Eull, 0x000202020202027Cull, 0x000404040404047Aull,
154 pmbaty 483
  0x0008080808080876ull, 0x001010101010106Eull, 0x002020202020205Eull,
33 pmbaty 484
  0x004040404040403Eull, 0x008080808080807Eull, 0x0001010101017E00ull,
485
  0x0002020202027C00ull, 0x0004040404047A00ull, 0x0008080808087600ull,
486
  0x0010101010106E00ull, 0x0020202020205E00ull, 0x0040404040403E00ull,
487
  0x0080808080807E00ull, 0x00010101017E0100ull, 0x00020202027C0200ull,
488
  0x00040404047A0400ull, 0x0008080808760800ull, 0x00101010106E1000ull,
108 pmbaty 489
  0x00202020205E2000ull, 0x00404040403E4000ull, 0x00808080807E8000ull,
33 pmbaty 490
  0x000101017E010100ull, 0x000202027C020200ull, 0x000404047A040400ull,
491
  0x0008080876080800ull, 0x001010106E101000ull, 0x002020205E202000ull,
108 pmbaty 492
  0x004040403E404000ull, 0x008080807E808000ull, 0x0001017E01010100ull,
493
  0x0002027C02020200ull, 0x0004047A04040400ull, 0x0008087608080800ull,
494
  0x0010106E10101000ull, 0x0020205E20202000ull, 0x0040403E40404000ull,
495
  0x0080807E80808000ull, 0x00017E0101010100ull, 0x00027C0202020200ull,
33 pmbaty 496
  0x00047A0404040400ull, 0x0008760808080800ull, 0x00106E1010101000ull,
497
  0x00205E2020202000ull, 0x00403E4040404000ull, 0x00807E8080808000ull,
498
  0x007E010101010100ull, 0x007C020202020200ull, 0x007A040404040400ull,
154 pmbaty 499
  0x0076080808080800ull, 0x006E101010101000ull, 0x005E202020202000ull,
33 pmbaty 500
  0x003E404040404000ull, 0x007E808080808000ull, 0x7E01010101010100ull,
501
  0x7C02020202020200ull, 0x7A04040404040400ull, 0x7608080808080800ull,
108 pmbaty 502
  0x6E10101010101000ull, 0x5E20202020202000ull, 0x3E40404040404000ull,
503
  0x7E80808080808000ull
504
};
505
const unsigned magic_rook_shift[64] = {
506
  52, 53, 53, 53, 53, 53, 53, 52,
507
  53, 54, 54, 54, 54, 54, 54, 53,
508
  53, 54, 54, 54, 54, 54, 54, 53,
509
  53, 54, 54, 54, 54, 54, 54, 53,
510
  53, 54, 54, 54, 54, 54, 54, 53,
511
  53, 54, 54, 54, 54, 54, 54, 53,
512
  53, 54, 54, 54, 54, 54, 54, 53,
33 pmbaty 513
  53, 54, 54, 53, 53, 53, 53, 53
108 pmbaty 514
};
515
const uint64_t mobility_mask_b[4] = {
33 pmbaty 516
  0xFF818181818181FFull, 0x007E424242427E00ull,
517
  0x00003C24243C0000ull, 0x0000001818000000ull
518
};
519
const uint64_t mobility_mask_r[4] = {
520
  0x8181818181818181ull, 0x4242424242424242ull,
521
  0x2424242424242424ull, 0x1818181818181818ull
522
};
523
/*
524
  values use to deal with white/black independently
525
 */
526
const int rankflip[2][8] = {
527
  {RANK8, RANK7, RANK6, RANK5, RANK4, RANK3, RANK2, RANK1},
528
  {RANK1, RANK2, RANK3, RANK4, RANK5, RANK6, RANK7, RANK8}
529
};
530
const int sqflip[2][64] = {
108 pmbaty 531
 {A8, B8, C8, D8, E8, F8, G8, H8,
33 pmbaty 532
  A7, B7, C7, D7, E7, F7, G7, H7,
533
  A6, B6, C6, D6, E6, F6, G6, H6,
534
  A5, B5, C5, D5, E5, F5, G5, H5,
535
  A4, B4, C4, D4, E4, F4, G4, H4,   /* black */
536
  A3, B3, C3, D3, E3, F3, G3, H3,
537
  A2, B2, C2, D2, E2, F2, G2, H2,
538
  A1, B1, C1, D1, E1, F1, G1, H1},
108 pmbaty 539
540
 {A1, B1, C1, D1, E1, F1, G1, H1,
541
  A2, B2, C2, D2, E2, F2, G2, H2,
33 pmbaty 542
  A3, B3, C3, D3, E3, F3, G3, H3,
543
  A4, B4, C4, D4, E4, F4, G4, H4,
544
  A5, B5, C5, D5, E5, F5, G5, H5,   /* white */
545
  A6, B6, C6, D6, E6, F6, G6, H6,
546
  A7, B7, C7, D7, E7, F7, G7, H7,
547
  A8, B8, C8, D8, E8, F8, G8, H8}
548
};
549
const int rank1[2] = {RANK8, RANK1};
550
const int rank2[2] = {RANK7, RANK2};
154 pmbaty 551
const int rank3[2] = {RANK6, RANK3};
33 pmbaty 552
const int rank4[2] = {RANK5, RANK4};
553
const int rank5[2] = {RANK4, RANK5};
554
const int rank6[2] = {RANK3, RANK6};
555
const int rank7[2] = {RANK2, RANK7};
556
const int rank8[2] = {RANK1, RANK8};
108 pmbaty 557
const int epdir[2] = {8, -8};
558
const int csq[2] = {C8, C1};
33 pmbaty 559
const int dsq[2] = {D8, D1};
560
const int esq[2] = {E8, E1};
561
const int fsq[2] = {F8, F1};
562
const int gsq[2] = {G8, G1};
563
uint64_t distance_ring[64][8];
564
const int sign[2] = {-1, 1};
565
const int epsq[2] = {+8, -8};
566
const int rook_A[2] = {A8, A1};
108 pmbaty 567
const int rook_D[2] = {D8, D1};
568
const int rook_F[2] = {F8, F1};
569
const int rook_G[2] = {G8, G1};
33 pmbaty 570
const int rook_H[2] = {H8, H1};
571
const int pawnadv1[2] = {+8, -8};
572
const int pawnadv2[2] = {+16, -16};
108 pmbaty 573
const int capleft[2] = {+9, -7};
33 pmbaty 574
const int capright[2] = {+7, -9};
575
const char empty_sqs[9] = {0, '1', '2', '3', '4', '5', '6', '7', '8'};
576
const int pcval[7] = {0, 100, 300, 300, 500, 900, 9900};
577
const int p_vals[7] = {0, 1, 3, 3, 5, 9, 99};
154 pmbaty 578
const int MVV_LVA[7][7] = {
108 pmbaty 579
    {0,  5<<21,  4<<21,  4<<21,  3<<21,  2<<21,  1<<21},
580
    {0, 10<<21,  9<<21,  9<<21,  8<<21,  7<<21,  6<<21},
581
    {0, 15<<21, 14<<21, 14<<21, 13<<21, 12<<21, 11<<21},
582
    {0, 15<<21, 14<<21, 14<<21, 13<<21, 12<<21, 11<<21},
583
    {0, 20<<21, 19<<21, 19<<21, 18<<21, 17<<21, 16<<21},
584
    {0, 25<<21, 24<<21, 24<<21, 23<<21, 22<<21, 21<<21},
154 pmbaty 585
    {0, 30<<21, 29<<21, 29<<21, 28<<21, 27<<21, 26<<21}};
108 pmbaty 586
const int pieces[2][7] = {
154 pmbaty 587
  {0, -1, -2, -3, -4, -5, -6},
588
  {0, +1, +2, +3, +4, +5, +6}
589
};
590
const int lower_n = 16;
108 pmbaty 591
const int lower_b = 10;
592
const int mobility_score_n[4] = {1, 2, 3, 4};
593
const int mobility_score_b[4] = {1, 2, 3, 4};
594
const int mobility_score_r[4] = {1, 2, 3, 4};
595
const int mob_curve_r[48] = {
596
  -27,-23,-21,-19,-15,-10, -9, -8,
597
   -7, -6, -5, -4, -3, -2, -1,  0,
598
    1,  2,  3,  4,  5,  6,  7,  8,
599
    9, 10, 11, 12, 13, 14, 15, 16,
600
   17, 18, 19, 20, 21, 22, 23, 24,
601
   25, 26, 27, 28, 29, 30, 31, 32
602
};
603
int piece_values[2][7] = {
604
  {0, -PAWN_VALUE, -KNIGHT_VALUE, -BISHOP_VALUE,
605
      -ROOK_VALUE, -QUEEN_VALUE,    -KING_VALUE},
606
  {0,  PAWN_VALUE,  KNIGHT_VALUE,  BISHOP_VALUE,
607
       ROOK_VALUE,  QUEEN_VALUE,     KING_VALUE}
608
};
609
/*
610
   First term is a character string explaining what the eval
611
   term is used for.
612
613
  Second term is the "type" of the value.
614
     0 = heading entry (no values, just a category name to display).
615
     1 = scalar value.
33 pmbaty 616
     2 = array[mg]
617
     3 = floating point value
618
619
   Third term is the "size" of the scoring term, where 0 is a
108 pmbaty 620
     scalar value, otherwise it is the actual number of elements in
621
     an array of values.
33 pmbaty 622
623
   Fourth term is a pointer to the data value(s).
624
*/
625
struct personality_term personality_packet[256] = {
626
  {"search options                          ", 0, 0, NULL},        /*  0 */
627
  {"check extension                         ", 1, 0, &check_depth},
108 pmbaty 628
  {"null-move reduction                     ", 1, 0, &null_depth},
629
  {"null-move adaptive divisor              ", 1, 0, &null_divisor},
630
  {"LMR min distance to frontier            ", 1, 0, &LMR_rdepth},
631
  {"LMR min reduction                       ", 1, 0, &LMR_min},
632
  {"LMR max reduction                       ", 1, 0, &LMR_max},
633
  {"LMR formula depth bias                  ", 3, 0, &LMR_db},
634
  {"LMR formula moves searched bias         ", 3, 0, &LMR_mb},
635
  {"LMR scale factor                        ", 3, 0, &LMR_s},
636
  {"search options (continued)              ", 0, 0, NULL},        /* 10 */
637
  {NULL, 0, 0, NULL},
638
};
639
/* *INDENT-ON* */
640
 
641