@@ -27,22 +27,22 @@ static void ClearPiece(const int sq, S_BOARD *pos) {
27
27
28
28
ASSERT (SqOnBoard (sq ));
29
29
ASSERT (CheckBoard (pos ));
30
-
30
+
31
31
int pce = pos -> pieces [sq ];
32
-
32
+
33
33
ASSERT (PieceValid (pce ));
34
-
34
+
35
35
int col = PieceCol [pce ];
36
36
int index = 0 ;
37
37
int t_pceNum = -1 ;
38
-
38
+
39
39
ASSERT (SideValid (col ));
40
-
40
+
41
41
HASH_PCE (pce ,sq );
42
-
42
+
43
43
pos -> pieces [sq ] = EMPTY ;
44
44
pos -> material [col ] -= PieceVal [pce ];
45
-
45
+
46
46
if (PieceBig [pce ]) {
47
47
pos -> bigPce [col ]-- ;
48
48
if (PieceMaj [pce ]) {
@@ -54,34 +54,34 @@ static void ClearPiece(const int sq, S_BOARD *pos) {
54
54
CLRBIT (pos -> pawns [col ],SQ64 (sq ));
55
55
CLRBIT (pos -> pawns [BOTH ],SQ64 (sq ));
56
56
}
57
-
57
+
58
58
for (index = 0 ; index < pos -> pceNum [pce ]; ++ index ) {
59
59
if (pos -> pList [pce ][index ] == sq ) {
60
60
t_pceNum = index ;
61
61
break ;
62
62
}
63
63
}
64
-
64
+
65
65
ASSERT (t_pceNum != -1 );
66
66
ASSERT (t_pceNum >=0 && t_pceNum < 10 );
67
-
68
- pos -> pceNum [pce ]-- ;
69
-
67
+
68
+ pos -> pceNum [pce ]-- ;
69
+
70
70
pos -> pList [pce ][t_pceNum ] = pos -> pList [pce ][pos -> pceNum [pce ]];
71
-
71
+
72
72
}
73
73
74
74
75
75
static void AddPiece (const int sq , S_BOARD * pos , const int pce ) {
76
76
77
77
ASSERT (PieceValid (pce ));
78
78
ASSERT (SqOnBoard (sq ));
79
-
79
+
80
80
int col = PieceCol [pce ];
81
81
ASSERT (SideValid (col ));
82
82
83
83
HASH_PCE (pce ,sq );
84
-
84
+
85
85
pos -> pieces [sq ] = pce ;
86
86
87
87
if (PieceBig [pce ]) {
@@ -95,40 +95,40 @@ static void AddPiece(const int sq, S_BOARD *pos, const int pce) {
95
95
SETBIT (pos -> pawns [col ],SQ64 (sq ));
96
96
SETBIT (pos -> pawns [BOTH ],SQ64 (sq ));
97
97
}
98
-
98
+
99
99
pos -> material [col ] += PieceVal [pce ];
100
100
pos -> pList [pce ][pos -> pceNum [pce ]++ ] = sq ;
101
-
101
+
102
102
}
103
103
104
104
static void MovePiece (const int from , const int to , S_BOARD * pos ) {
105
105
106
106
ASSERT (SqOnBoard (from ));
107
107
ASSERT (SqOnBoard (to ));
108
-
108
+
109
109
int index = 0 ;
110
- int pce = pos -> pieces [from ];
110
+ int pce = pos -> pieces [from ];
111
111
int col = PieceCol [pce ];
112
112
ASSERT (SideValid (col ));
113
113
ASSERT (PieceValid (pce ));
114
-
114
+
115
115
#ifdef DEBUG
116
116
int t_PieceNum = FALSE;
117
117
#endif
118
118
119
119
HASH_PCE (pce ,from );
120
120
pos -> pieces [from ] = EMPTY ;
121
-
121
+
122
122
HASH_PCE (pce ,to );
123
123
pos -> pieces [to ] = pce ;
124
-
124
+
125
125
if (!PieceBig [pce ]) {
126
126
CLRBIT (pos -> pawns [col ],SQ64 (from ));
127
127
CLRBIT (pos -> pawns [BOTH ],SQ64 (from ));
128
128
SETBIT (pos -> pawns [col ],SQ64 (to ));
129
- SETBIT (pos -> pawns [BOTH ],SQ64 (to ));
130
- }
131
-
129
+ SETBIT (pos -> pawns [BOTH ],SQ64 (to ));
130
+ }
131
+
132
132
for (index = 0 ; index < pos -> pceNum [pce ]; ++ index ) {
133
133
if (pos -> pList [pce ][index ] == from ) {
134
134
pos -> pList [pce ][index ] = to ;
@@ -144,20 +144,20 @@ static void MovePiece(const int from, const int to, S_BOARD *pos) {
144
144
int MakeMove (S_BOARD * pos , int move ) {
145
145
146
146
ASSERT (CheckBoard (pos ));
147
-
147
+
148
148
int from = FROMSQ (move );
149
149
int to = TOSQ (move );
150
150
int side = pos -> side ;
151
-
151
+
152
152
ASSERT (SqOnBoard (from ));
153
153
ASSERT (SqOnBoard (to ));
154
154
ASSERT (SideValid (side ));
155
155
ASSERT (PieceValid (pos -> pieces [from ]));
156
156
ASSERT (pos -> hisPly >= 0 && pos -> hisPly < MAXGAMEMOVES );
157
157
ASSERT (pos -> ply >= 0 && pos -> ply < MAXDEPTH );
158
-
158
+
159
159
pos -> history [pos -> hisPly ].posKey = pos -> posKey ;
160
-
160
+
161
161
if (move & MFLAGEP ) {
162
162
if (side == WHITE ) {
163
163
ClearPiece (to - 10 ,pos );
@@ -180,11 +180,11 @@ int MakeMove(S_BOARD *pos, int move) {
180
180
break ;
181
181
default : ASSERT (FALSE); break ;
182
182
}
183
- }
184
-
183
+ }
184
+
185
185
if (pos -> enPas != NO_SQ ) HASH_EP ;
186
186
HASH_CA ;
187
-
187
+
188
188
pos -> history [pos -> hisPly ].move = move ;
189
189
pos -> history [pos -> hisPly ].fiftyMove = pos -> fiftyMove ;
190
190
pos -> history [pos -> hisPly ].enPas = pos -> enPas ;
@@ -195,22 +195,22 @@ int MakeMove(S_BOARD *pos, int move) {
195
195
pos -> enPas = NO_SQ ;
196
196
197
197
HASH_CA ;
198
-
198
+
199
199
int captured = CAPTURED (move );
200
200
pos -> fiftyMove ++ ;
201
-
201
+
202
202
if (captured != EMPTY ) {
203
203
ASSERT (PieceValid (captured ));
204
204
ClearPiece (to , pos );
205
205
pos -> fiftyMove = 0 ;
206
206
}
207
-
207
+
208
208
pos -> hisPly ++ ;
209
209
pos -> ply ++ ;
210
-
210
+
211
211
ASSERT (pos -> hisPly >= 0 && pos -> hisPly < MAXGAMEMOVES );
212
212
ASSERT (pos -> ply >= 0 && pos -> ply < MAXDEPTH );
213
-
213
+
214
214
if (PiecePawn [pos -> pieces [from ]]) {
215
215
pos -> fiftyMove = 0 ;
216
216
if (move & MFLAGPS ) {
@@ -224,52 +224,52 @@ int MakeMove(S_BOARD *pos, int move) {
224
224
HASH_EP ;
225
225
}
226
226
}
227
-
227
+
228
228
MovePiece (from , to , pos );
229
-
229
+
230
230
int prPce = PROMOTED (move );
231
231
if (prPce != EMPTY ) {
232
232
ASSERT (PieceValid (prPce ) && !PiecePawn [prPce ]);
233
233
ClearPiece (to , pos );
234
234
AddPiece (to , pos , prPce );
235
235
}
236
-
236
+
237
237
if (PieceKing [pos -> pieces [to ]]) {
238
238
pos -> KingSq [pos -> side ] = to ;
239
239
}
240
-
240
+
241
241
pos -> side ^= 1 ;
242
242
HASH_SIDE ;
243
243
244
244
ASSERT (CheckBoard (pos ));
245
-
246
-
245
+
246
+
247
247
if (SqAttacked (pos -> KingSq [side ],pos -> side ,pos )) {
248
248
TakeMove (pos );
249
249
return FALSE;
250
250
}
251
-
251
+
252
252
return TRUE;
253
-
253
+
254
254
}
255
255
256
256
void TakeMove (S_BOARD * pos ) {
257
-
257
+
258
258
ASSERT (CheckBoard (pos ));
259
-
259
+
260
260
pos -> hisPly -- ;
261
261
pos -> ply -- ;
262
-
262
+
263
263
ASSERT (pos -> hisPly >= 0 && pos -> hisPly < MAXGAMEMOVES );
264
264
ASSERT (pos -> ply >= 0 && pos -> ply < MAXDEPTH );
265
-
265
+
266
266
int move = pos -> history [pos -> hisPly ].move ;
267
267
int from = FROMSQ (move );
268
- int to = TOSQ (move );
269
-
268
+ int to = TOSQ (move );
269
+
270
270
ASSERT (SqOnBoard (from ));
271
271
ASSERT (SqOnBoard (to ));
272
-
272
+
273
273
if (pos -> enPas != NO_SQ ) HASH_EP ;
274
274
HASH_CA ;
275
275
@@ -282,7 +282,7 @@ void TakeMove(S_BOARD *pos) {
282
282
283
283
pos -> side ^= 1 ;
284
284
HASH_SIDE ;
285
-
285
+
286
286
if (MFLAGEP & move ) {
287
287
if (pos -> side == WHITE ) {
288
288
AddPiece (to - 10 , pos , bP );
@@ -298,25 +298,25 @@ void TakeMove(S_BOARD *pos) {
298
298
default : ASSERT (FALSE); break ;
299
299
}
300
300
}
301
-
301
+
302
302
MovePiece (to , from , pos );
303
-
303
+
304
304
if (PieceKing [pos -> pieces [from ]]) {
305
305
pos -> KingSq [pos -> side ] = from ;
306
306
}
307
-
307
+
308
308
int captured = CAPTURED (move );
309
309
if (captured != EMPTY ) {
310
310
ASSERT (PieceValid (captured ));
311
311
AddPiece (to , pos , captured );
312
312
}
313
-
313
+
314
314
if (PROMOTED (move ) != EMPTY ) {
315
315
ASSERT (PieceValid (PROMOTED (move )) && !PiecePawn [PROMOTED (move )]);
316
316
ClearPiece (from , pos );
317
317
AddPiece (from , pos , (PieceCol [PROMOTED (move )] == WHITE ? wP : bP ));
318
318
}
319
-
319
+
320
320
ASSERT (CheckBoard (pos ));
321
321
322
322
}
@@ -341,7 +341,7 @@ void MakeNullMove(S_BOARD *pos) {
341
341
pos -> side ^= 1 ;
342
342
pos -> hisPly ++ ;
343
343
HASH_SIDE ;
344
-
344
+
345
345
ASSERT (CheckBoard (pos ));
346
346
ASSERT (pos -> hisPly >= 0 && pos -> hisPly < MAXGAMEMOVES );
347
347
ASSERT (pos -> ply >= 0 && pos -> ply < MAXDEPTH );
@@ -364,21 +364,8 @@ void TakeNullMove(S_BOARD *pos) {
364
364
if (pos -> enPas != NO_SQ ) HASH_EP ;
365
365
pos -> side ^= 1 ;
366
366
HASH_SIDE ;
367
-
367
+
368
368
ASSERT (CheckBoard (pos ));
369
369
ASSERT (pos -> hisPly >= 0 && pos -> hisPly < MAXGAMEMOVES );
370
370
ASSERT (pos -> ply >= 0 && pos -> ply < MAXDEPTH );
371
371
}
372
-
373
-
374
-
375
-
376
-
377
-
378
-
379
-
380
-
381
-
382
-
383
-
384
-
0 commit comments