Adding this to the bottom of InitializeBSS() ...
Code: Select all
for (sq = 0; sq < 64; sq++) {
for (i = 0; i < 128; i++) {
for (j = 0; j < 128; j++) {
if (!(i & j)) {
bss[sq][i | j][0] = bss[sq][i][0] & bss[sq][j][3];
bss[sq][i | j][1] = bss[sq][i][1] & bss[sq][j][4];
bss[sq][i | j][2] = bss[sq][i][2] & bss[sq][j][5];
}
}
}
}
The complete function.
Code: Select all
void InitializeBSS() {
u08 sq, sqr, i, j, k, l;
s08 x, dx, y, dy;
u64 b, bb;
for (sq = 0; sq < 64; sq++) {
y = sq >> 3;
x = sq & 7;
for (i = 0; i < 128; i++) {
if (i ^ 1) {
j = i >> 1;
for (k = 8, l = 0; k <= 48; k += 8, l++) {
bb = 0;
b = (u64)i << k;
for (dx = +1, dy = +1; x + dx < +8 && y + dy < +8; dx++, dy++) {
sqr = (((y + dy) << 3) + x + dx);
bb |= one << sqr;
if ((one << sqr) & b) break;
}
for (dx = -1, dy = +1; x + dx > -1 && y + dy < +8; dx--, dy++) {
sqr = (((y + dy) << 3) + x + dx);
bb |= one << sqr;
if ((one << sqr) & b) break;
}
for (dx = +1, dy = -1; x + dx < +8 && y + dy > -1; dx++, dy--) {
sqr = (((y + dy) << 3) + x + dx);
bb |= one << sqr;
if ((one << sqr) & b) break;
}
for (dx = -1, dy = -1; x + dx > -1 && y + dy > -1; dx--, dy--) {
sqr = (((y + dy) << 3) + x + dx);
bb |= one << sqr;
if ((one << sqr) & b) break;
}
bss[sq][j][l] = bb;
}
}
}
}
for (sq = 0; sq < 64; sq++) {
for (i = 0; i < 128; i++) {
for (j = 0; j < 128; j++) {
if (!(i & j)) {
bss[sq][i | j][0] = bss[sq][i][0] & bss[sq][j][3];
bss[sq][i | j][1] = bss[sq][i][1] & bss[sq][j][4];
bss[sq][i | j][2] = bss[sq][i][2] & bss[sq][j][5];
}
}
}
}
}