Chess Engine
C++ chess engine with movegen, bitboards, and Arduino-friendly docs
Loading...
Searching...
No Matches
defs.h
Go to the documentation of this file.
1
#pragma once
2
3
#include "stdlib.h"
4
#include "stdio.h"
5
6
#include "
board/board_data.h
"
7
8
9
// #define DEBUG
10
11
#define MAX_HASH 1024
12
13
#ifndef DEBUG
14
#define ASSERT(n)
15
#else
16
#define ASSERT(n) \
17
if(!(n)) { \
18
printf("%s - Failed",#n); \
19
printf("On %s ",__DATE__); \
20
printf("At %s ",__TIME__); \
21
printf("In File %s ",__FILE__);
22
printf(
"At Line %d\n"
,__LINE__); \
23
exit(1);}
24
#endif
25
26
typedef
unsigned
long
long
U64
;
27
28
#define NAME "Vice 1.1"
29
#define BRD_SQ_NUM 120
30
31
#define MAXGAMEMOVES 2048
32
#define MAXPOSITIONMOVES 256
33
#define MAXDEPTH 64
34
35
#define START_FEN "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"
36
37
#define INF_SCORE 30000
38
#define ISMATE (INF_SCORE - MAXDEPTH)
39
40
enum
{
EMPTY
,
wP
,
wN
,
wB
,
wR
,
wQ
,
wK
,
bP
,
bN
,
bB
,
bR
,
bQ
,
bK
};
41
enum
{
FILE_A
,
FILE_B
,
FILE_C
,
FILE_D
,
FILE_E
,
FILE_F
,
FILE_G
,
FILE_H
,
FILE_NONE
};
42
enum
{
RANK_1
,
RANK_2
,
RANK_3
,
RANK_4
,
RANK_5
,
RANK_6
,
RANK_7
,
RANK_8
,
RANK_NONE
};
43
44
enum
{
WHITE
,
BLACK
,
BOTH
};
45
enum
{
UCIMODE
,
XBOARDMODE
,
CONSOLEMODE
};
46
enum
{
47
A1
= 21,
B1
,
C1
,
D1
,
E1
,
F1
,
G1
,
H1
,
48
A2
= 31,
B2
,
C2
,
D2
,
E2
,
F2
,
G2
,
H2
,
49
A3
= 41,
B3
,
C3
,
D3
,
E3
,
F3
,
G3
,
H3
,
50
A4
= 51,
B4
,
C4
,
D4
,
E4
,
F4
,
G4
,
H4
,
51
A5
= 61,
B5
,
C5
,
D5
,
E5
,
F5
,
G5
,
H5
,
52
A6
= 71,
B6
,
C6
,
D6
,
E6
,
F6
,
G6
,
H6
,
53
A7
= 81,
B7
,
C7
,
D7
,
E7
,
F7
,
G7
,
H7
,
54
A8
= 91,
B8
,
C8
,
D8
,
E8
,
F8
,
G8
,
H8
,
NO_SQ
,
OFFBOARD
55
};
56
57
enum
{
FALSE
,
TRUE
};
58
59
enum
{
WKCA
= 1,
WQCA
= 2,
BKCA
= 4,
BQCA
= 8 };
60
61
typedef
struct
{
62
int
move
;
63
int
score
;
64
}
S_MOVE
;
65
66
typedef
struct
{
67
S_MOVE
moves
[
MAXPOSITIONMOVES
];
68
int
count
;
69
}
S_MOVELIST
;
70
71
enum
{
HFNONE
,
HFALPHA
,
HFBETA
,
HFEXACT
};
72
73
typedef
struct
{
74
U64
posKey
;
75
int
move
;
76
int
score
;
77
int
depth
;
78
int
flags
;
79
}
S_HASHENTRY
;
80
81
typedef
struct
{
82
S_HASHENTRY
*
pTable
;
83
int
numEntries
;
84
int
newWrite
;
85
int
overWrite
;
86
int
hit
;
87
int
cut
;
88
}
S_HASHTABLE
;
89
90
typedef
struct
{
91
92
int
move
;
93
int
castlePerm
;
94
int
enPas
;
95
int
fiftyMove
;
96
U64
posKey
;
97
98
}
S_UNDO
;
99
100
typedef
struct
{
101
102
int
pieces
[
BRD_SQ_NUM
];
103
U64
pawns
[3];
104
105
int
KingSq
[2];
106
107
int
side
;
108
int
enPas
;
109
int
fiftyMove
;
110
111
int
ply
;
112
int
hisPly
;
113
114
int
castlePerm
;
115
116
U64
posKey
;
117
118
int
pceNum
[13];
119
int
bigPce
[2];
120
int
majPce
[2];
121
int
minPce
[2];
122
int
material
[2];
123
124
S_UNDO
history
[
MAXGAMEMOVES
];
125
126
// piece list
127
int
pList
[13][10];
128
129
S_HASHTABLE
HashTable
[1];
130
int
PvArray
[
MAXDEPTH
];
131
132
int
searchHistory
[13][
BRD_SQ_NUM
];
133
int
searchKillers
[2][
MAXDEPTH
];
134
135
}
S_BOARD
;
136
137
typedef
struct
{
138
139
int
starttime
;
140
int
stoptime
;
141
int
depth
;
142
int
timeset
;
143
int
movestogo
;
144
145
long
nodes
;
146
147
int
quit
;
148
int
stopped
;
149
150
float
fh
;
151
float
fhf
;
152
int
nullCut
;
153
154
int
GAME_MODE
;
155
int
POST_THINKING
;
156
157
}
S_SEARCHINFO
;
158
159
typedef
struct
{
160
int
UseBook
;
161
}
S_OPTIONS
;
162
163
164
#define FROMSQ(m) ((m) & 0x7F)
165
#define TOSQ(m) (((m)>>7) & 0x7F)
166
#define CAPTURED(m) (((m)>>14) & 0xF)
167
#define PROMOTED(m) (((m)>>20) & 0xF)
168
169
#define MFLAGEP 0x40000
170
#define MFLAGPS 0x80000
171
#define MFLAGCA 0x1000000
172
173
#define MFLAGCAP 0x7C000
174
#define MFLAGPROM 0xF00000
175
176
#define NOMOVE 0
177
178
179
/* MACROS */
180
181
#define FR2SQ(f,r) ( (21 + (f) ) + ( (r) * 10 ) )
182
#define SQ64(sq120) (square120To64[(sq120)])
183
#define SQ120(sq64) (square64To120[(sq64)])
184
#define CLRBIT(bb,sq) ((bb) &= clearBitMask[(sq)])
185
#define SETBIT(bb,sq) ((bb) |= setBitMask[(sq)])
186
187
#define IsBQ(p) (isBishopQueen[(p)])
188
#define IsRQ(p) (isRookQueen[(p)])
189
#define IsKn(p) (isKnight[(p)])
190
#define IsKi(p) (isKing[(p)])
191
192
#define MIRROR64(sq) (Mirror64[(sq)])
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
board_data.h
MAXDEPTH
#define MAXDEPTH
Definition
defs.h:33
FILE_H
@ FILE_H
Definition
defs.h:41
FILE_D
@ FILE_D
Definition
defs.h:41
FILE_E
@ FILE_E
Definition
defs.h:41
FILE_C
@ FILE_C
Definition
defs.h:41
FILE_NONE
@ FILE_NONE
Definition
defs.h:41
FILE_A
@ FILE_A
Definition
defs.h:41
FILE_G
@ FILE_G
Definition
defs.h:41
FILE_F
@ FILE_F
Definition
defs.h:41
FILE_B
@ FILE_B
Definition
defs.h:41
U64
unsigned long long U64
Definition
defs.h:26
bQ
@ bQ
Definition
defs.h:40
wN
@ wN
Definition
defs.h:40
EMPTY
@ EMPTY
Definition
defs.h:40
bN
@ bN
Definition
defs.h:40
wR
@ wR
Definition
defs.h:40
bP
@ bP
Definition
defs.h:40
bR
@ bR
Definition
defs.h:40
bB
@ bB
Definition
defs.h:40
wB
@ wB
Definition
defs.h:40
bK
@ bK
Definition
defs.h:40
wP
@ wP
Definition
defs.h:40
wK
@ wK
Definition
defs.h:40
wQ
@ wQ
Definition
defs.h:40
WHITE
@ WHITE
Definition
defs.h:44
BOTH
@ BOTH
Definition
defs.h:44
BLACK
@ BLACK
Definition
defs.h:44
HFNONE
@ HFNONE
Definition
defs.h:71
HFBETA
@ HFBETA
Definition
defs.h:71
HFEXACT
@ HFEXACT
Definition
defs.h:71
HFALPHA
@ HFALPHA
Definition
defs.h:71
MAXPOSITIONMOVES
#define MAXPOSITIONMOVES
Definition
defs.h:32
MAXGAMEMOVES
#define MAXGAMEMOVES
Definition
defs.h:31
BRD_SQ_NUM
#define BRD_SQ_NUM
Definition
defs.h:29
WQCA
@ WQCA
Definition
defs.h:59
BQCA
@ BQCA
Definition
defs.h:59
WKCA
@ WKCA
Definition
defs.h:59
BKCA
@ BKCA
Definition
defs.h:59
RANK_8
@ RANK_8
Definition
defs.h:42
RANK_1
@ RANK_1
Definition
defs.h:42
RANK_NONE
@ RANK_NONE
Definition
defs.h:42
RANK_7
@ RANK_7
Definition
defs.h:42
RANK_6
@ RANK_6
Definition
defs.h:42
RANK_5
@ RANK_5
Definition
defs.h:42
RANK_3
@ RANK_3
Definition
defs.h:42
RANK_4
@ RANK_4
Definition
defs.h:42
RANK_2
@ RANK_2
Definition
defs.h:42
CONSOLEMODE
@ CONSOLEMODE
Definition
defs.h:45
UCIMODE
@ UCIMODE
Definition
defs.h:45
XBOARDMODE
@ XBOARDMODE
Definition
defs.h:45
B3
@ B3
Definition
defs.h:49
D7
@ D7
Definition
defs.h:53
B6
@ B6
Definition
defs.h:52
F3
@ F3
Definition
defs.h:49
D4
@ D4
Definition
defs.h:50
E8
@ E8
Definition
defs.h:54
E4
@ E4
Definition
defs.h:50
E6
@ E6
Definition
defs.h:52
C4
@ C4
Definition
defs.h:50
A6
@ A6
Definition
defs.h:52
F5
@ F5
Definition
defs.h:51
C5
@ C5
Definition
defs.h:51
D1
@ D1
Definition
defs.h:47
H4
@ H4
Definition
defs.h:50
G5
@ G5
Definition
defs.h:51
B8
@ B8
Definition
defs.h:54
E7
@ E7
Definition
defs.h:53
E3
@ E3
Definition
defs.h:49
A2
@ A2
Definition
defs.h:48
A3
@ A3
Definition
defs.h:49
C7
@ C7
Definition
defs.h:53
H5
@ H5
Definition
defs.h:51
B7
@ B7
Definition
defs.h:53
F1
@ F1
Definition
defs.h:47
C2
@ C2
Definition
defs.h:48
C8
@ C8
Definition
defs.h:54
G6
@ G6
Definition
defs.h:52
E5
@ E5
Definition
defs.h:51
B4
@ B4
Definition
defs.h:50
F7
@ F7
Definition
defs.h:53
A1
@ A1
Definition
defs.h:47
A7
@ A7
Definition
defs.h:53
H1
@ H1
Definition
defs.h:47
D2
@ D2
Definition
defs.h:48
NO_SQ
@ NO_SQ
Definition
defs.h:54
F4
@ F4
Definition
defs.h:50
G3
@ G3
Definition
defs.h:49
B2
@ B2
Definition
defs.h:48
D5
@ D5
Definition
defs.h:51
OFFBOARD
@ OFFBOARD
Definition
defs.h:54
G8
@ G8
Definition
defs.h:54
F6
@ F6
Definition
defs.h:52
F2
@ F2
Definition
defs.h:48
H6
@ H6
Definition
defs.h:52
A5
@ A5
Definition
defs.h:51
G1
@ G1
Definition
defs.h:47
E1
@ E1
Definition
defs.h:47
H7
@ H7
Definition
defs.h:53
H3
@ H3
Definition
defs.h:49
D6
@ D6
Definition
defs.h:52
H2
@ H2
Definition
defs.h:48
F8
@ F8
Definition
defs.h:54
E2
@ E2
Definition
defs.h:48
B1
@ B1
Definition
defs.h:47
A4
@ A4
Definition
defs.h:50
C3
@ C3
Definition
defs.h:49
H8
@ H8
Definition
defs.h:54
D3
@ D3
Definition
defs.h:49
C6
@ C6
Definition
defs.h:52
G7
@ G7
Definition
defs.h:53
C1
@ C1
Definition
defs.h:47
D8
@ D8
Definition
defs.h:54
G2
@ G2
Definition
defs.h:48
G4
@ G4
Definition
defs.h:50
B5
@ B5
Definition
defs.h:51
A8
@ A8
Definition
defs.h:54
FALSE
@ FALSE
Definition
defs.h:57
TRUE
@ TRUE
Definition
defs.h:57
S_BOARD
Definition
defs.h:100
S_BOARD::pList
int pList[13][10]
Definition
defs.h:127
S_BOARD::HashTable
S_HASHTABLE HashTable[1]
Definition
defs.h:129
S_BOARD::pieces
int pieces[BRD_SQ_NUM]
Definition
defs.h:102
S_BOARD::castlePerm
int castlePerm
Definition
defs.h:114
S_BOARD::pceNum
int pceNum[13]
Definition
defs.h:118
S_BOARD::majPce
int majPce[2]
Definition
defs.h:120
S_BOARD::enPas
int enPas
Definition
defs.h:108
S_BOARD::pawns
U64 pawns[3]
Definition
defs.h:103
S_BOARD::KingSq
int KingSq[2]
Definition
defs.h:105
S_BOARD::fiftyMove
int fiftyMove
Definition
defs.h:109
S_BOARD::bigPce
int bigPce[2]
Definition
defs.h:119
S_BOARD::posKey
U64 posKey
Definition
defs.h:116
S_BOARD::side
int side
Definition
defs.h:107
S_BOARD::hisPly
int hisPly
Definition
defs.h:112
S_BOARD::searchKillers
int searchKillers[2][MAXDEPTH]
Definition
defs.h:133
S_BOARD::ply
int ply
Definition
defs.h:111
S_BOARD::searchHistory
int searchHistory[13][BRD_SQ_NUM]
Definition
defs.h:132
S_BOARD::material
int material[2]
Definition
defs.h:122
S_BOARD::minPce
int minPce[2]
Definition
defs.h:121
S_BOARD::PvArray
int PvArray[MAXDEPTH]
Definition
defs.h:130
S_BOARD::history
S_UNDO history[MAXGAMEMOVES]
Definition
defs.h:124
S_HASHENTRY
Definition
defs.h:73
S_HASHENTRY::move
int move
Definition
defs.h:75
S_HASHENTRY::score
int score
Definition
defs.h:76
S_HASHENTRY::posKey
U64 posKey
Definition
defs.h:74
S_HASHENTRY::flags
int flags
Definition
defs.h:78
S_HASHENTRY::depth
int depth
Definition
defs.h:77
S_HASHTABLE
Definition
defs.h:81
S_HASHTABLE::hit
int hit
Definition
defs.h:86
S_HASHTABLE::newWrite
int newWrite
Definition
defs.h:84
S_HASHTABLE::overWrite
int overWrite
Definition
defs.h:85
S_HASHTABLE::pTable
S_HASHENTRY * pTable
Definition
defs.h:82
S_HASHTABLE::numEntries
int numEntries
Definition
defs.h:83
S_HASHTABLE::cut
int cut
Definition
defs.h:87
S_MOVE
Definition
defs.h:61
S_MOVE::score
int score
Definition
defs.h:63
S_MOVE::move
int move
Definition
defs.h:62
S_MOVELIST
Definition
defs.h:66
S_MOVELIST::count
int count
Definition
defs.h:68
S_MOVELIST::moves
S_MOVE moves[MAXPOSITIONMOVES]
Definition
defs.h:67
S_OPTIONS
Definition
defs.h:159
S_OPTIONS::UseBook
int UseBook
Definition
defs.h:160
S_SEARCHINFO
Definition
defs.h:137
S_SEARCHINFO::nullCut
int nullCut
Definition
defs.h:152
S_SEARCHINFO::POST_THINKING
int POST_THINKING
Definition
defs.h:155
S_SEARCHINFO::timeset
int timeset
Definition
defs.h:142
S_SEARCHINFO::movestogo
int movestogo
Definition
defs.h:143
S_SEARCHINFO::nodes
long nodes
Definition
defs.h:145
S_SEARCHINFO::stoptime
int stoptime
Definition
defs.h:140
S_SEARCHINFO::GAME_MODE
int GAME_MODE
Definition
defs.h:154
S_SEARCHINFO::depth
int depth
Definition
defs.h:141
S_SEARCHINFO::quit
int quit
Definition
defs.h:147
S_SEARCHINFO::fhf
float fhf
Definition
defs.h:151
S_SEARCHINFO::starttime
int starttime
Definition
defs.h:139
S_SEARCHINFO::stopped
int stopped
Definition
defs.h:148
S_SEARCHINFO::fh
float fh
Definition
defs.h:150
S_UNDO
Definition
defs.h:90
S_UNDO::posKey
U64 posKey
Definition
defs.h:96
S_UNDO::enPas
int enPas
Definition
defs.h:94
S_UNDO::castlePerm
int castlePerm
Definition
defs.h:93
S_UNDO::move
int move
Definition
defs.h:92
S_UNDO::fiftyMove
int fiftyMove
Definition
defs.h:95
defs.h
Generated by
1.14.0