package main SQUARE_BBS: [64]u64 = [64]u64{ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576, 2097152, 4194304, 8388608, 16777216, 33554432, 67108864, 134217728, 268435456, 536870912, 1073741824, 2147483648, 4294967296, 8589934592, 17179869184, 34359738368, 68719476736, 137438953472, 274877906944, 549755813888, 1099511627776, 2199023255552, 4398046511104, 8796093022208, 17592186044416, 35184372088832, 70368744177664, 140737488355328, 281474976710656, 562949953421312, 1125899906842624, 2251799813685248, 4503599627370496, 9007199254740992, 18014398509481984, 36028797018963968, 72057594037927936, 144115188075855872, 288230376151711744, 576460752303423488, 1152921504606846976, 2305843009213693952, 4611686018427387904, 9223372036854775808, }; ONE_U64:u64 : 1; BP_STARTING_POSITIONS:u64 : 65280; WP_STARTING_POSITIONS:u64 : 71776119061217280; BK_STARTING_POSITION:u64 : 16; WK_STARTING_POSITION:u64 : 1152921504606846976; BN_STARTING_POSITIONS:u64 : 66; WN_STARTING_POSITIONS: u64 : 4755801206503243776; WR_STARTING_POSITIONS: u64 : 9295429630892703744; BR_STARTING_POSITIONS: u64 : 129; BB_STARTING_POSITIONS: u64 : 36; WB_STARTING_POSITIONS: u64 : 2594073385365405696; WQ_STARTING_POSITION: u64 : 576460752303423488; BQ_STARTING_POSITION: u64 : 8; EMPTY_BITBOARD: u64 : 0; MAX_ULONG: u64 : 18446744073709551615; MAGIC: u64 : 0x03f79d71b4cb0a89; @(rodata) DEBRUIJN64: [64]int = [64]int{ 0, 47, 1, 56, 48, 27, 2, 60, 57, 49, 41, 37, 28, 16, 3, 61, 54, 58, 35, 52, 50, 42, 21, 44, 38, 32, 29, 23, 17, 11, 4, 62, 46, 55, 26, 59, 40, 36, 15, 53, 34, 51, 20, 43, 31, 22, 10, 45, 25, 39, 14, 33, 19, 30, 9, 24, 13, 18, 8, 12, 7, 6, 5, 63, }; BitscanForward :: proc(tempBitboard: u64) -> int { return (DEBRUIJN64[MAGIC*(tempBitboard~(tempBitboard-1))>>58]); } RANK_1_BITBOARD:u64: 18374686479671623680; RANK_2_BITBOARD:u64: 71776119061217280; RANK_3_BITBOARD:u64: 280375465082880; RANK_4_BITBOARD:u64: 1095216660480; RANK_5_BITBOARD:u64: 4278190080; RANK_6_BITBOARD:u64: 16711680; RANK_7_BITBOARD:u64: 65280; RANK_8_BITBOARD:u64: 255; FILE_A_BITBOARD:u64: 72340172838076673; FILE_B_BITBOARD:u64: 144680345676153346; FILE_C_BITBOARD:u64: 289360691352306692; FILE_D_BITBOARD:u64: 578721382704613384; FILE_E_BITBOARD:u64: 1157442765409226768; FILE_F_BITBOARD:u64: 2314885530818453536; FILE_G_BITBOARD:u64: 4629771061636907072; FILE_H_BITBOARD:u64: 9259542123273814144; @(rodata) SQ_CHAR_Y: [65]byte = [65]byte{ '8', '8', '8', '8', '8', '8', '8', '8', '7', '7', '7', '7', '7', '7', '7', '7', '6', '6', '6', '6', '6', '6', '6', '6', '5', '5', '5', '5', '5', '5', '5', '5', '4', '4', '4', '4', '4', '4', '4', '4', '3', '3', '3', '3', '3', '3', '3', '3', '2', '2', '2', '2', '2', '2', '2', '2', '1', '1', '1', '1', '1', '1', '1', '1', 'A', }; @(rodata) SQ_CHAR_X: [65]byte = [65]byte{ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'N', };