From Chessprogramming wiki
Jump to: navigation, search

Home * Engines * BBC

BBC, (Bit Board Chess)
a didactic bitboard chess engine by Maksim Korzh alias Code Monkey King, written in C. BBC is subject of a YouTube video tutorial started in summer 2020 [1], actually work in progress. The open source engine is further published on GitHub [2], and will be compliant to the UCI protocol. While the series offers a nice introduction in chess engine programming and bitboard techniques, the advanced approach of Magic Bitboards to determine sliding piece attacks with all its lengthy initialization topics might be hard to understand and deterrent for the intended novice target group. The linewise approaches of First Rank Attacks to introduce occupancy lookups, followed by Kindergarten Bitboards - as intermediate step towards magics bitboards - seem didactically more appropriate. Anyway, a valuable video series covering various aspects of computer chess programming. BBC 1.0 was released on September 24, 2020 [3], BBC 1.3 on October 21, 2020, utilizing Stockfish's NNUE evaluation via Daniel Shawul's Scorpio NNUE egbbdll probing library [4].

See also

Forum Posts

Re: How to scale stockfish NNUE score? by Daniel Shawul, CCC, October 17, 2020

External Links




Bitboard CHESS ENGINE in C

  1. Intro » Bitboards
  2. Creating comfortable conditions for development
  3. Generating pre-calculated PAWN ATTACK tables » Pawn Attacks (Bitboards)
  4. Generating pre-calculated KNIGHT ATTACK table » Knight Attacks
  5. Generating pre-calculated KING ATTACK tables » King Attacks
  6. Masking relevant bishop occupancy bits to form a key for MAGIC BITBOARDS » Magic Bitboards
  7. Masking relevant ROOK OCCUPANCY BITS to form a key for MAGIC BITBOARDS
  8. Generating SLIDER PIECES ATTACKS on the fly for MAGIC BITBOARD purposes » Sliding Piece Attacks
  9. Implementing BIT COUNT routine (Brian Kernighan's way) » Population Count - Brian Kernighan's way
  10. Getting least significant 1st BIT INDEX » Index of LS1B by Popcount
  11. Populating OCCUPANCY sets to multiply them later by MAGIC NUMBERS
  12. Generating relevant OCCUPANCY BIT COUNT lookup tables for sliding pieces
  13. Implementing pseudo RANDOM NUMBER generator using XORSHIFT32 algorithm » Pseudorandom Number Generator
  14. Generating MAGIC NUMBER candidates » Looking for Magics
  15. Generating MAGIC NUMBERS via brute force trial and error method
  16. Initializing SLIDER PIECES attack tables using PLAIN MAGIC BITBOARDS » Plain Magic Bitboards
  17. Defining BITBOARDS, OCCUPANCIES and helper variables » Bitboard Board-Definition
  18. Printing CHESS BOARD position and game state variables » Chess Position
  19. Parsing FEN string to initialize BITBOARDS, OCUUPANCIES & board state » Forsyth-Edwards Notation
  20. Getting QUEEN ATTACKS by looking up bishop & rook attack tables
  21. Implementing routine to find out whether SQUARE IS ATTACKED » Square Attacked By
  22. Writing GENERATE MOVES function skeleton »Move Generation
  23. Generating QUIET PAWN moves » Pawn Pushes (Bitboards)
  24. Generating PAWN CAPTURE moves » Pawn Captures
  25. Generating CASTLING MOVES » Castling
  26. Generating SLIDER & LEAPER piece MOVES by attack tables lookup
  27. Binary formatting of MOVE ITEMS » Encoding Moves
  28. Encoding & decoding MOVE ITEMS
  29. Implementing MOVE LIST + ADD MOVE, PRINT MOVE, PRINT MOVE LIST functions » Move List
  30. Populating MOVE LIST with newly GENERATED MOVES
  31. Preserving & restoring BOARD STATE aka COPY/MAKE approach » Copy-Make
  32. Implementing MAKE MOVE function (moving pieces) » Make Move
  33. Implementing MAKE MOVE function (handling captures) » Captures
  34. Implementing MAKE MOVE function (handling pawn promotions) » Promotions
  35. Implementing MAKE MOVE function (handling enpassant moves) » En passant
  36. Implementing MAKE MOVE function (handling double pawn pushes) » Double Pawn Push
  37. Implementing MAKE MOVE function (handling castling moves) » Castling
  38. Implementing MAKE MOVE function (updating castling rights) » Castling Rights
  39. Implementing MAKE MOVE function (updating occupancy bitboards) » Occupancy
  40. Implementing MAKE MOVE function (checking whether the king is in check) » Check
  41. Writing a cross-platform function for GETTING TIME IN MILLISECONDS
  42. Writing PERFT DRIVER function » Perft
  43. Writing PERFT TEST function
  44. Connecting to the GUI (parse move string) » GUI, UCI
  45. Connecting to the GUI (parse "position" command)
  46. Connecting to the GUI (parse "go" command)
  47. Connecting to the GUI (main loop) + BONUS (TSCP vs BBC blitz game) » TSCP
  48. Implementing RUDIMENTARY EVALUATION (material score) » Evaluation, Material
  49. Implementing RUDIMENTARY EVALUATION (positional piece scores)
  50. Writing NEGAMAX ALPHA BETA skeleton » Negamax, Alpha-Beta
  51. Detecting CHECKMATE and STALEMATE » Checkmate, Stalemate
  52. Implementing QUIESCENCE SEARCH » Quiescence Search
  53. Defining MVV LVA (Most Valuable Victim - Least Valuable Attacker) table » MVV/LVA
  54. Writing SCORE MOVE function » Move Ordering
  55. Writing SORT MOVES function
  56. Applying MOVE ORDERING to sort captures » Captures
  57. Sorting KILLER & HISTORY moves » Killer Heuristic, History Heuristic
  58. Collecting PV (Principle Variation) from the search » Principal Variation
  59. Implementing ITERATIVE DEEPENING » Iterative Deepening
  60. Sorting PV moves + some BONUS TALK at the end
  61. Implementing PVS (Principle Variation Search) » Principal Variation Search
  62. Applying LMR (Late Move Reduction) » Late Move Reductions
  63. Applying NULL MOVE PRUNING » Null Move Pruning
  64. Adjusting ASPIRATION WINDOW during iterative deepening » Aspiration Windows
  65. BUG ALERT!!! Fixing PVS duplication bug
  66. Handling TIME CONTROLS (forked from VICE by BluefeverSoftware) » Vice
  67. Zobrist HASHING (initialize random keys) » Zobrist Hashing
  68. Zobrist HASHING (generate hash key)
  69. Zobrist HASHING (hash keys incremental updates) » Incremental Updates
  70. Implementing HASH TABLE aka transposition table (define & initialize) » Transposition Table [5]
  71. Implementing HASH TABLE aka transposition table (read/write hash entry)
  72. Implementing HASH TABLE aka transposition table (connecting to search)
  73. BUG ALERT! Fixing lack of enpassant & side hashing on null move
  74. More search BUG FIXES &CLEANUPS
  75. Handling MATING SCORES in HASH TABLE aka transposition table » Mate Scores
  76. Sending MATING SCORES to GUI + some cleanups & adjustments
  77. Detecting THREE FOLD REPETITIONS » Repetitions
  78. Final (hopefully!) SEARCH BUG FIXES
  79. Improving EVALUATION (setting file & rank masks) » Evaluation, Pawn Pattern and Properties
  80. Improving EVALUATION (initializing isolated & passed pawn masks) » Isolated Pawns (Bitboards), Passed Pawns (Bitboards)
  81. Improving EVALUATION (double & isolated penalties, passed pawns bonus)
  82. Improving EVALUATION (open & semi open file scoring) » Pawns and Files (Bitboards), Open File
  83. Improving EVALUATION (mobility and king safety) » Mobility, King Safety
  84. BBC 1.0 - RELEASE
  85. Improving BBC chess engine: TAPERED EVALUATION (getting game phase scores) » Tapered Eval, PeSTO
  86. Improving BBC chess engine: TAPERED EVALUATION (interpolating scores) + BONUS: BBC vs VICE match! » Vice



  2. Install dependencies, CREATE WEB APP & render the CHESS BOARD
  3. Connecting engine back-end & MAKING IT PLAY!
  4. Printing game status, FEN & PGN
  5. Adding GAME CONTROL buttons
  6. Adding MOVE STATS
  7. Fixing layout & setting position from FEN string on button click
  8. Adding MOVE TIME & FIXED DEPTH controls
  9. Implementing DOWNLOAD PGN feature
  11. final adjustments and DEPLOY at


Embedding Stockfish NNUE to ANY CHESS ENGINE

  1. Intro & demo » Stockfish NNUE, Scorpio NNUE
  2. Compiling existing ENGINE with NNUE library
  3. Extracting PIECES & SQUARES for direct NNUE probing
  4. Incorporating NNUE SCORES into EVALUATION function
  5. bug fixes & experiments
  6. WINDOWS compatibility added
  7. Switching to pure NNUE evaluation + important BUG FIX


Up one Level