|
1 | 1 | /* OliThink5 (c) Oliver Brausch 06.Jun.2021, ob112@web.de, http://brausch.org */ |
2 | | -#define VER "5.9.8" |
| 2 | +#define VER "5.9.8a" |
3 | 3 | #include <stdio.h> |
4 | 4 | #include <string.h> |
5 | 5 | #ifdef _WIN64 |
@@ -44,14 +44,14 @@ const int fval[] = {0, 0, 2, 0, 0, 3, 5, 9}; |
44 | 44 | #define _CAP(x) ((x) << 19) |
45 | 45 | #define PREMOVE(f, p) ((f) | _ONMV(c) | _PIECE(p)) |
46 | 46 |
|
47 | | -#define RATT1(f) rays[((f) << 7) | key000(BOARD, f)] |
48 | | -#define RATT2(f) rays[((f) << 7) | key090(BOARD, f) | 0x2000] |
49 | | -#define BATT3(f) rays[((f) << 7) | key045(BOARD, f) | 0x4000] |
50 | | -#define BATT4(f) rays[((f) << 7) | key135(BOARD, f) | 0x6000] |
51 | | -#define RXRAY1(f) rays[((f) << 7) | key000(BOARD, f) | 0x8000] |
52 | | -#define RXRAY2(f) rays[((f) << 7) | key090(BOARD, f) | 0xA000] |
53 | | -#define BXRAY3(f) rays[((f) << 7) | key045(BOARD, f) | 0xC000] |
54 | | -#define BXRAY4(f) rays[((f) << 7) | key135(BOARD, f) | 0xE000] |
| 47 | +#define RATT1(f) rays[((f) << 6) | key000(BOARD, f)] |
| 48 | +#define RATT2(f) rays[((f) << 6) | key090(BOARD, f) | 0x1000] |
| 49 | +#define BATT3(f) rays[((f) << 6) | key045(BOARD, f) | 0x2000] |
| 50 | +#define BATT4(f) rays[((f) << 6) | key135(BOARD, f) | 0x3000] |
| 51 | +#define RXRAY1(f) rays[((f) << 6) | key000(BOARD, f) | 0x4000] |
| 52 | +#define RXRAY2(f) rays[((f) << 6) | key090(BOARD, f) | 0x5000] |
| 53 | +#define BXRAY3(f) rays[((f) << 6) | key045(BOARD, f) | 0x6000] |
| 54 | +#define BXRAY4(f) rays[((f) << 6) | key135(BOARD, f) | 0x7000] |
55 | 55 |
|
56 | 56 | #define RMOVE1(f) (RATT1(f) & ~BOARD) |
57 | 57 | #define RMOVE2(f) (RATT2(f) & ~BOARD) |
@@ -99,7 +99,7 @@ int wstack[0x400]; |
99 | 99 |
|
100 | 100 | static u64 BIT[64]; |
101 | 101 | static u64 hashxor[4096]; |
102 | | -static u64 rays[0x10000]; |
| 102 | +static u64 rays[0x8000]; |
103 | 103 | static u64 pmoves[128]; |
104 | 104 | static u64 pcaps[384]; |
105 | 105 | static u64 nmoves[64]; |
@@ -305,8 +305,8 @@ void _init_rays(u64* ray, u64 (*rayFunc) (int, u64, int), int (*key)(u64, int)) |
305 | 305 | u64 occ = (*rayFunc)(f, board, 2); |
306 | 306 | u64 xray = (*rayFunc)(f, board, 3); |
307 | 307 | int index = (*key)(board, f); |
308 | | - ray[(f << 7) + index] = occ | move; |
309 | | - ray[(f << 7) + index + 0x8000] = xray; |
| 308 | + ray[(f << 6) + index] = occ | move; |
| 309 | + ray[(f << 6) + index + 0x4000] = xray; |
310 | 310 | } |
311 | 311 | } |
312 | 312 | } |
@@ -396,18 +396,18 @@ int identPiece(int f) { |
396 | 396 | } |
397 | 397 |
|
398 | 398 | int key000(u64 b, int f) { |
399 | | - return (int) ((b >> (f & 56)) & 0x7E); |
| 399 | + return (int) ((b >> ((f & 56) + 1)) & 0x3F); |
400 | 400 | } |
401 | 401 |
|
402 | 402 | int key090(u64 b, int f) { |
403 | 403 | u64 _b = (b >> (f&7)) & 0x0101010101010101LL; |
404 | 404 | _b = _b * 0x0080402010080400LL; |
405 | | - return (int)(_b >> 57); |
| 405 | + return (int)(_b >> 58); |
406 | 406 | } |
407 | 407 |
|
408 | 408 | int keyDiag(u64 _b) { |
409 | 409 | _b = _b * 0x0202020202020202LL; |
410 | | - return (int)(_b >> 57); |
| 410 | + return (int)(_b >> 58); |
411 | 411 | } |
412 | 412 |
|
413 | 413 | u64 bmask135[64], bmask45[64]; |
@@ -1412,9 +1412,9 @@ int main(int argc, char **argv) { |
1412 | 1412 | crevoke[56] ^= BIT[9]; |
1413 | 1413 |
|
1414 | 1414 | _init_rays(rays, _rook0, key000); |
1415 | | - _init_rays(rays + 0x2000, _rook90, key090); |
1416 | | - _init_rays(rays + 0x4000, _bishop45, key045); |
1417 | | - _init_rays(rays + 0x6000, _bishop135, key135); |
| 1415 | + _init_rays(rays + 0x1000, _rook90, key090); |
| 1416 | + _init_rays(rays + 0x2000, _bishop45, key045); |
| 1417 | + _init_rays(rays + 0x3000, _bishop135, key135); |
1418 | 1418 | _init_shorts(nmoves, _knight); |
1419 | 1419 | _init_shorts(kmoves, _king); |
1420 | 1420 | _init_pawns(pmoves, pcaps, pawnfree, pawnfile, pawnhelp, 0); |
|
0 commit comments