Chess Engine
C++ chess engine with movegen, bitboards, and Arduino-friendly docs
Loading...
Searching...
No Matches
setup.cpp
Go to the documentation of this file.
1// setup.cpp
2
3#include "setup.h"
4#include <cstdio>
5#include <cstdlib>
7
8
9#define RAND_64 ( (U64)std::rand() | \
10 (U64)std::rand() << 15 | \
11 (U64)std::rand() << 30 | \
12 (U64)std::rand() << 45 | \
13 ((U64)std::rand() & 0xF) << 60 )
14
15// globals (unchanged)
18
21
25
28
31
35
37
38// ---- functions (same behavior, C++-style locals) ----
39
41 // zero file/rank masks
42 for (int i = 0; i < 8; ++i) {
43 fileBitMask[i] = 0ULL;
44 rankBitMask[i] = 0ULL;
45 }
46
47 // build file/rank masks
48 for (int r = RANK_8; r >= RANK_1; --r) {
49 for (int f = FILE_A; f <= FILE_H; ++f) {
50 const int sq = r * 8 + f;
51 fileBitMask[f] |= (1ULL << sq);
52 rankBitMask[r] |= (1ULL << sq);
53 }
54 }
55
56 // zero pawn structure masks
57 for (int sq = 0; sq < 64; ++sq) {
58 isolatedPawnMask[sq] = 0ULL;
59 whitePassedPawnMask[sq] = 0ULL;
60 blackPassedPawnMask[sq] = 0ULL;
61 }
62
63 for (int sq = 0; sq < 64; ++sq) {
64 // same-file forward/backward rays
65 for (int tsq = sq + 8; tsq < 64; tsq += 8) {
66 whitePassedPawnMask[sq] |= (1ULL << tsq);
67 }
68 for (int tsq = sq - 8; tsq >= 0; tsq -= 8) {
69 blackPassedPawnMask[sq] |= (1ULL << tsq);
70 }
71
72 const int file = fileIndex120[SQ120(sq)];
73
74 if (file > FILE_A) {
75 isolatedPawnMask[sq] |= fileBitMask[file - 1];
76
77 for (int tsq = sq + 7; tsq < 64; tsq += 8) {
78 whitePassedPawnMask[sq] |= (1ULL << tsq);
79 }
80 for (int tsq = sq - 9; tsq >= 0; tsq -= 8) {
81 blackPassedPawnMask[sq] |= (1ULL << tsq);
82 }
83 }
84
85 if (file < FILE_H) {
86 isolatedPawnMask[sq] |= fileBitMask[file + 1];
87
88 for (int tsq = sq + 9; tsq < 64; tsq += 8) {
89 whitePassedPawnMask[sq] |= (1ULL << tsq);
90 }
91 for (int tsq = sq - 7; tsq >= 0; tsq -= 8) {
92 blackPassedPawnMask[sq] |= (1ULL << tsq);
93 }
94 }
95 }
96}
97
99 // mark offboard
100 for (int i = 0; i < BRD_SQ_NUM; ++i) {
103 }
104
105 // fill valid squares
106 for (int r = RANK_1; r <= RANK_8; ++r) {
107 for (int f = FILE_A; f <= FILE_H; ++f) {
108 const int sq = FR2SQ(f, r);
109 fileIndex120[sq] = f;
110 rankIndex120[sq] = r;
111 }
112 }
113}
114
116 for (int p = 0; p < 13; ++p) {
117 for (int sq = 0; sq < 120; ++sq) {
118 zobristPieceKeys[p][sq] = RAND_64;
119 }
120 }
122
123 for (int i = 0; i < 16; ++i) {
125 }
126}
127
129 for (int i = 0; i < 64; ++i) {
130 setBitMask[i] = 0ULL;
131 clearBitMask[i] = 0ULL;
132 }
133 for (int i = 0; i < 64; ++i) {
134 setBitMask[i] = (1ULL << i);
136 }
137}
138
140 // sentinels
141 for (int i = 0; i < BRD_SQ_NUM; ++i) square120To64[i] = 65;
142 for (int i = 0; i < 64; ++i) square64To120[i] = 120;
143
144 int sq64 = 0;
145 for (int r = RANK_1; r <= RANK_8; ++r) {
146 for (int f = FILE_A; f <= FILE_H; ++f) {
147 const int sq120 = FR2SQ(f, r);
148 ASSERT(SqOnBoard(sq120));
149 square64To120[sq64] = sq120;
150 square120To64[sq120] = sq64;
151 ++sq64;
152 }
153 }
154}
155
158 initBitMasks();
162 InitMvvLva(); // from move_generator
163}
#define FR2SQ(f, r)
Definition defs.h:181
@ FILE_H
Definition defs.h:41
@ FILE_A
Definition defs.h:41
unsigned long long U64
Definition defs.h:26
#define BRD_SQ_NUM
Definition defs.h:29
#define SQ120(sq64)
Definition defs.h:183
@ RANK_8
Definition defs.h:42
@ RANK_1
Definition defs.h:42
#define ASSERT(n)
Definition defs.h:14
@ OFFBOARD
Definition defs.h:54
void InitMvvLva()
Initialize the MVV-LVA capture scoring table.
void InitFilesrankIndex120()
Initialize file and rank lookup arrays.
Definition setup.cpp:98
U64 clearBitMask[64]
Definition setup.cpp:20
U64 zobristSideKey
Zobrist hashing key for side to move.
Definition setup.cpp:23
U64 rankBitMask[8]
Definition setup.cpp:30
void initEvaluationMasks()
Initialize evaluation-related bitboard masks.
Definition setup.cpp:40
int square120To64[BRD_SQ_NUM]
Lookup table to convert 120-based board index to 64-based.
Definition setup.cpp:16
int rankIndex120[BRD_SQ_NUM]
Definition setup.cpp:27
U64 isolatedPawnMask[64]
Definition setup.cpp:34
S_OPTIONS engineOptions[1]
Engine options structure.
Definition setup.cpp:36
void initBitMasks()
Initialize bit masks for individual bitboard operations.
Definition setup.cpp:128
int square64To120[64]
Lookup table to convert 64-based board index to 120-based.
Definition setup.cpp:17
#define RAND_64
Definition setup.cpp:9
U64 fileBitMask[8]
Bitboard masks for each file and rank.
Definition setup.cpp:29
void initZobristKeys()
Initialize Zobrist hash keys.
Definition setup.cpp:115
U64 setBitMask[64]
Bit masks for setting and clearing individual bits on a bitboard.
Definition setup.cpp:19
U64 blackPassedPawnMask[64]
Bitboard masks for pawn structure evaluation.
Definition setup.cpp:32
U64 zobristCastleKeys[16]
Zobrist hashing keys for castling rights.
Definition setup.cpp:24
void initializeEngine()
Run all initialization routines.
Definition setup.cpp:156
int fileIndex120[BRD_SQ_NUM]
File and rank lookup tables for each square (120-based).
Definition setup.cpp:26
void initSquareIndexMaps()
Initialize lookup tables for 120->64 square indexing.
Definition setup.cpp:139
U64 zobristPieceKeys[13][120]
Zobrist hashing keys for each piece on each square.
Definition setup.cpp:22
U64 whitePassedPawnMask[64]
Definition setup.cpp:33
int SqOnBoard(const int sq)
Checks if a given square index refers to a valid on-board square.
Definition validate.cpp:29