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];
        }
      }
    }
  }
}