Older Version Newer Version

GerdIsenberg GerdIsenberg Nov 14, 2017

**[[Home]] * [[Board Representation]] * Bitboards**
|| [[image:BoardsMeeting.jpg width="282" height="303" link="http://www.chgs.umn.edu/museum/responses/bak/chess.html"]] ||~   || **Bitboards**,
also called bitsets or bitmaps, are among other things used to represent the [[Chessboard|board]] inside a chess program in a **piece centric** manner. Bitboards, are in essence, [[http://en.wikipedia.org/wiki/Finite_set|finite sets]] of up to [[http://en.wikipedia.org/wiki/64_%28number%29|64]] [[http://en.wikipedia.org/wiki/Element_%28mathematics%29|elements]] - all the [[Squares|squares]] of a [[Chessboard|chessboard]], one [[Bit|bit]] per square. Other board [[Games|games]] with greater board sizes may be use set-wise representations as well <ref>[[Reijer Grimbergen]] (**2007**). //Using Bitboards for [[Move Generation]] in [[Shogi]]//. [[ICGA Journal#30_1|ICGA Journal, Vol. 30, No. 1]], [[http://www2.teu.ac.jp/gamelab/RESEARCH/ICGAJournal2007.pdfICGAJournal2007.pdf|pdf]]</ref>, but classical chess has the advantage that one [[Quad Word|64-bit word]] or register covers the whole board. Even more bitboard friendly is [[Checkers]] with 32-bit bitboards and less [[Pieces#PieceTypeCoding|piece-types]] than chess <ref>[[http://www.3dkingdoms.com/checkers/bitboards.htm|Checker Bitboards Tutorial]] by [[Jonathan Kreuzer]]</ref> <ref>[[http://www.talkchess.com/forum/viewtopic.php?t=64487|Checkers Bitboard representation]] by Pranav Deshpande, [[CCC]], July 02, 2017</ref> . ||
|| [[Arts#Bak|Samuel Bak]] - Boards Meeting <ref>[[http://www.chgs.umn.edu/museum/responses/bak/chess.html|Chess in the Art of Samuel Bak]], [[http://www.chgs.umn.edu/|Center for Holocaust & Genocide Studies]], [[http://en.wikipedia.org/wiki/University_of_Minnesota|University of Minnesota]]</ref> ||~   ||^   ||
[[toc]]
=The Board of Sets= 
To [[Board Representation|represent the board]] we typically need one bitboard for each [[Pieces#PieceTypeCoding|piece-type]] and [[Color|color]] - likely encapsulated inside a class or structure, or as an [[Array|array]] of bitboards as part of a position object. A one-bit inside a bitboard implies the existence of a piece of this piece-type on a certain square - one to one associated by the bit-position.
* [[Square Mapping Considerations]]
* [[Bitboard Board-Definition|Standard Board-Definition]]

=Bitboard Basics= 
Of course bitboards are not only about the existence of pieces - it is a general purpose, **set-wise** data-structure fitting in one 64-bit register. For example, a bitboard can represent things like attack- and defend sets, move-target sets and so on.

==General Bitboard Techniques== 
The fundamental bitboard basics.
* [[General Setwise Operations]]
* [[Population Count]]
* [[BitScan]]
* [[Flipping Mirroring and Rotating]]
* [[Fill Algorithms]]
[[#Pattern]]
==Pattern and Attacks== 
This is basically about chess, how to calculate attack-sets and various pattern for [[Evaluation|evaluation]] and [[Move Generation|move generation]] purposes.
* [[Pawn Pattern and Properties]]
* [[Knight Pattern]]
* [[King Pattern]]
* [[Sliding Piece Attacks]] including [[Rotated Bitboards|rotated]] and [[Magic Bitboards|magic bitboards]]
* [[Square Attacked By]]
* [[X-ray Attacks (Bitboards)|X-ray Attacks]]
* [[Checks and Pinned Pieces (Bitboards)|Checks and Pinned Pieces]]
* [[Design Principles]]

==Move Generation Issues== 
Bitboard aspects on [[Move Generation|move generation]] and [[Static Exchange Evaluation|static exchange evaluation]] (SEE).
* [[Bitboard Serialization]]
* [[Pieces versus Directions]]
* [[DirGolem]]
* [[SEE - The Swap Algorithm]]
* [[Attack and Defend Maps]]

==Miscellaneous== 
* [[Backtracking#8QinBitboards|Backtracking - Eight Queens puzzle with Bitboards]]
* [[De Bruijn Sequence Generator]]
* [[Quad-Bitboards]]
* [[Traversing Subsets of a Set]]

[[#DefiningBitboards]]
==Defining Bitboards== 
//To be aware of their scalar 64-bit origin, we use so far a type defined unsigned integer U64 in our [[C]] or [[Cpp|C++]] source snippets, the scalar 64-bit long in [[Java]]. Feel free to define a distinct type or wrap U64 into classes for better abstraction and type-safety during compile time. The macro C64 will append a suffix to 64-bit constants as required by some compilers//:
[[code]]
typedef unsigned __int64 U64;    // for the old microsoft compilers
typedef unsigned long long  U64; // supported by MSC 13.00+ and C99
#define C64(constantU64) constantU64##ULL
[[code]]
[[#BitboardHistory]]
=Bitboard-History= 
The general approach of [[Mikhail R. Shura-Bura#Bitsets|bitsets]] was proposed by [[Mikhail R. Shura-Bura]] in 1952 <ref>[[http://en.wikipedia.org/wiki/Lazar_Lyusternik|Lazar A. Lyusternik]], [[http://www.mathnet.ru/php/person.phtml?personid=30351&option_lang=eng|Aleksandr A. Abramov]], [[http://en.wikipedia.org/wiki/Victor_Shestakov|Victor I. Shestakov]], [[Mikhail R. Shura-Bura]] (**1952**). //Programming for High-Speed Electronic Computers//. (Программирование для электронных счетных машин)</ref> <ref>[[Mathematician#Ershov|Andrey Ershov]], [[Mikhail R. Shura-Bura]] (**1980**). //[[http://ershov.iis.nsk.su/archive/eaindex.asp?lang=2&gid=910|The Early Development of Programming in the USSR]]//. in [[http://en.wikipedia.org/wiki/Nicholas_C._Metropolis|Nicholas C. Metropolis]] (ed.) //[[http://dl.acm.org/citation.cfm?id=578384|A History of Computing in the Twentieth Century]]//. [[http://en.wikipedia.org/wiki/Academic_Press|Academic Press]], [[http://ershov.iis.nsk.su/archive/eaimage.asp?did=28792&fileid=173670|preprint pp. 43]]</ref>. The bitboard method for holding a board game appears to have been invented also in 1952 by [[Christopher Strachey]] using White, Black and King bitboards in his checkers program for the [[Ferranti Mark 1]] <ref>On [[Bitboards]] for White, Black and Kings to [[Board Representation|represent the checkers board]], see [[Ferranti Mark 1#DavidLinkVideo|David Link Video]] at 1:04:02</ref>, and in the mid 1950's by [[Arthur Samuel]] in his checkers program as well. In computer chess, bitboards were first described by [[Georgy Adelson-Velsky]] et al. in 1967 <ref>[[http://groups.google.com/group/rec.games.chess/browse_frm/thread/0e3a93f45ff07d31#|Early Reference on Bit-Boards]] by [[Tony Warnock]] from [[Computer Chess Forums|rec.games.chess]], October 29, 1994</ref> , reprinted 1970 <ref>[[Georgy Adelson-Velsky]], [[Vladimir Arlazarov]], [[Alexander Bitman]], [[Alexander Zhivotovsky]] and [[Anatoly Uskov]] (**1970**). //[[http://iopscience.iop.org/0036-0279/25/2/R07|Programming a Computer to Play Chess]]//. [[http://iopscience.iop.org/0036-0279/25/2|Russian Mathematical Surveys, Vol. 25]], pp. 221-262.</ref> . Bitboards were used in [[Kaissa]] and in [[Chess (Program)|Chess]]. The invention and publication of [[Rotated Bitboards]] by [[Robert Hyatt]] <ref>[[Robert Hyatt]] (**1999**). //[[http://www.craftychess.com/hyatt/bitmaps.html|Rotated Bitmaps, a New Twist on an Old Idea]]//. [[ICGA Journal#22_4|ICCA Journal, Vol. 22, No. 4]]</ref> and [[Peter Gillgasch]] with [[Ernst A. Heinz]] in the 90s was another milestone in the history of bitboards. [[Steffan Westcott|Steffan Westcott's]] innovations, too expensive on 32-bit [[x86]] processors, should be revisited with [[x86-64]] and [[SIMD and SWAR Techniques|SIMD instructions]] in mind. With the advent of fast 64-bit multiplication along with faster [[Memory|memory]], [[Magic Bitboards]] as proposed by [[Lasse Hansen]] <ref>[[http://www.open-aurec.com/wbforum/viewtopic.php?t=5015|Fast(er) bitboard move generator]] by [[Lasse Hansen]], [[Computer Chess Forums|Winboard Forum]], June 14, [[Timeline#2006|2006]]</ref> and refined by [[Pradu Kannan]] <ref>[[http://www.open-aurec.com/wbforum/viewtopic.php?t=5441|List of magics for bitboard move generation]] by [[Pradu Kannan]], [[Computer Chess Forums|Winboard Forum]], August 23, [[Timeline#2006|2006]]</ref> have surpassed Rotated.

=Analysis= 
The use of bitboards has spawned numerous discussions about their costs and benefits. The major points to consider are:
* Bitboards can have a high information density.
* Single populated or even empty Bitboards have a low information density.
* Bitboards are weak in answering questions like what piece if any resides on square x. One reason to keep a redundant [[Mailbox|mailbox]] board representation with some additional [[Incremental Updates|update]] costs during [[Make Move|make]]/[[Unmake Move|unmake]].
* Bitboards can operate on all squares in parallel using bitwise instructions. This is one of the main arguments used by proponents of bitboards, because it allows for a flexibility in [[Evaluation|evaluation]].
* Bitboards are rather handicapped on 32 bit processors, as each bitwise computation must be split into two or more instructions <ref>[[http://www.stmintz.com/ccc/index.php?id=30562|Efficient Bitboard Implementation on 32-bit Architecture]] by [[Roberto Waldteufel]], [[CCC]], October 25, 1998</ref> . As most modern processors are now 64 bit, this point is somewhat diminished <ref>[[http://www.open-aurec.com/wbforum/viewtopic.php?f=4&t=6651|Speedup by bitboards]] by [[Onno Garms]], [[Computer Chess Forums|Winboard Forum]], July 13, 2007</ref> .
* Bitboards often rely on [[Bit-Twiddling|bit-twiddling]] and various optimization tricks and special instructions for certain hardware architectures, such as [[BitScan|bitscan]] and [[Population Count|population count]]. Optimal code requires machine dependent [[http://en.wikipedia.org/wiki/Header_file|header-files]] in [[C]]/[[Cpp|C++]]. Portable code is likely not optimal for all processors.
* Some operations on bitboards are less general, f.i. shifts. This requires additional code overhead.

=Publications= 
==1970 ...== 
* [[Georgy Adelson-Velsky]], [[Vladimir Arlazarov]], [[Alexander Bitman]], [[Alexander Zhivotovsky]] and [[Anatoly Uskov]] (**1970**). //[[http://iopscience.iop.org/0036-0279/25/2/R07|Programming a Computer to Play Chess]]//. [[http://iopscience.iop.org/0036-0279/25/2|Russian Mathematical Surveys, Vol. 25]], pp. 221-262.
* [[David Slate]] and [[Larry Atkin]] (**1977**). //CHESS 4.5 - The Northwestern University Chess Program.// [[Chess Skill in Man and Machine]], reprinted (**1988**) in [[Computer Chess Compendium]] » [[Chess (Program)|Chess]]
==1980 ...== 
* [[Zdenek Zdrahal|Zdenek Zdráhal]], [[Ivan Bratko]], [[Alen Shapiro]] (**1981**). //[[http://comjnl.oxfordjournals.org/content/24/3/263.abstract|Recognition of Complex Patterns Using Cellular Arrays]]//. [[http://comjnl.oxfordjournals.org/content/24/3.toc|The Computer Journal, Vol. 24, No. 3]], pp. 263-270
* [[Stuart Cracraft]] (**1984**). //Bitmap move generation in Chess//. [[ICGA Journal#7_3|ICCA Journal, Vol. 7, No. 3]]
* [[Burton Wendroff]] (**1985**). //Attack Detection and Move Generation on the X-MP/48.// [[ICGA Journal#8_2|ICCA Journal, Vol. 8, No. 2]]
* [[Arch D. Robison]], [[Brian J. Hafner]], [[Steven Skiena]] (**1989**). //[[http://comjnl.oxfordjournals.org/content/32/6/567.abstract|Eight Pieces Cannot Cover a Chess Board]]//. [[https://en.wikipedia.org/wiki/The_Computer_Journal|The Computer Journal]], Vol. 32, No. 6, [[http://comjnl.oxfordjournals.org/content/32/6/567.full.pdf|pdf]]
==1990 ...== 
* [[Ernst A. Heinz]] (**1997**). //[[http://people.csail.mit.edu/heinz/dt/node2.html|How DarkThought Plays Chess]].// [[ICGA Journal#20_3|ICCA Journal, Vol. 20, No. 3]] » [[DarkThought]]
* [[Robert Hyatt]] (**1999**). //[[http://www.craftychess.com/hyatt/bitmaps.html|Rotated Bitmaps, a New Twist on an Old Idea]]//. [[ICGA Journal#22_4|ICCA Journal, Vol. 22, No. 4]] » [[Rotated Bitboards]] <ref>[[http://www.stmintz.com/ccc/index.php?id=71880|Bitboard user's information request]] by [[Robert Hyatt]], [[CCC]], October 05, 1999</ref>
==2000 ...== 
* [[David Rasmussen]] (**2004**). //Parallel Chess Searching and Bitboards//. Master's thesis, [[http://www2.imm.dtu.dk/pubdb/views/edoc_download.php/3267/ps/imm3267.ps|ps]] » [[Parallel Search]]
* [[Borko Bošković]], [[Sašo Greiner]], [[Janez Brest]], [[Viljem Žumer]] (**2005**). //[[http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1491153|The Representation of Chess Game]]//. Proceedings of the 27th International Conference on Information Technology Interfaces
* [[Pablo San Segundo]], [[Ramón Galán]] (**2005**). //[[http://www.actapress.com/Abstract.aspx?paperId=18953|Bitboards: A New Approach]]//. [[http://www.informatik.uni-trier.de/~ley/db/conf/aia/aia2005.html#SegundoG05|AIA 2005]]
* [[Pablo San Segundo]], [[Ramón Galán]], [[Fernando Matía]], [[Diego Rodríguez-Losada]], [[Agustín Jiménez]] (**2006**). //[[http://dl.acm.org/citation.cfm?id=1191130|Efficient Search Using Bitboard Models]]//. [[http://www.informatik.uni-trier.de/~ley/db/conf/ictai/ictai2006.html#SegundoGMRJ06|ICTAI 2006]], [[http://www.intelligentcontrol.es/diego/publications/SanSegundo_Ictai06.pdf|pdf]]
* [[Fridel Fainshtein]] (**2006**). //An Orthodox k-Move Problem-Composer for Chess Directmates//. M.Sc. thesis, [[Bar-Ilan University]], [[http://www.problemschach.de/KMOVEComposer.pdf|pdf]], Appendix D - 64-bit Representation, pp. 105
* [[Fridel Fainshtein]], [[Yaakov HaCohen-Kerner]] (**2006**). //A Chess Composer of Two-Move Mate Problems//. [[ICGA Journal#29_1|ICGA Journal, Vol. 29, No. 1]], [[http://homedir.jct.ac.il/~kerner/pdf_docs/ICGA_computer_composer.pdf|pdf]], Appendix E: 64-bit representation, pp. 22
* [[Reijer Grimbergen]] (**2007**). //Using Bitboards for Move Generation in Shogi//. [[ICGA Journal#30_1|ICGA Journal, Vol. 30, No. 1]], [[http://www2.teu.ac.jp/gamelab/RESEARCH/ICGAJournal2007.pdf|pdf]] » [[Move Generation]], [[Shogi]]
* [[James Glenn]], [[http://www.cs.loyola.edu/~binkley/|David Binkley]] (**2008**) //An Investigation of Hierarchical Bit Vectors//. [[https://www.novapublishers.com/catalog/product_info.php?products_id=6555|New Topics in Theoretical Computer Science]], [[http://www.cs.loyola.edu/~binkley/papers/tcsrt08-hbit-vectors.pdf|pdf]]
* [[Shi-Jim Yen]], [[Jung-Kuei Yang]] (**2009**). //The Bitboard Design and Bitwise Computing in Connect Six//. [[Conferences#GPW|14th Game Programming Workshop]]
* [[Fritz Reul]] (**2009**). //New Architectures in Computer Chess//, Ph.D. Thesis, [[https://pure.uvt.nl/ws/files/1098572/Proefschrift_Fritz_Reul_170609.pdf|pdf]]
==2010 ...== 
* [[Stefano Carlini]] (**2010**). //Arimaa, a New Challenge for Artificial Intelligence//. M.Sc. thesis, [[http://en.wikipedia.org/wiki/University_of_Modena_and_Reggio_Emilia|University of Modena and Reggio Emilia]], [[http://arimaa.com/arimaa/papers/StefanoCarlini/Arimaa2.pdf|pdf]] » Chapter 4, Bitboards in [[Arimaa]]
* [[Shi-Jim Yen]], [[Jung-Kuei Yang]], [[Kuo-Yuan Kao]], [[Tai-Ning Yang]] (**2012**). //[[http://www.sciencedirect.com/science/article/pii/S0950705112001293|Bitboard Knowledge Base System and Elegant Search Architectures for Connect6]]//. [[https://www.journals.elsevier.com/knowledge-based-systems/|Knowledge-Based Systems]], Vol. 34 » [[Connect6]]
* [[Cameron Browne]], [[Stephen Tavener]] (**2013**). //[[http://www.aifactory.co.uk/newsletter/2012_02_fast_lane.htm|Life in the Fast Lane]]//. [[AI Factory]] » [[http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life|Conway's Game of Life]] within a [[Bitboards|Bitboard]]
* [[Cameron Browne]] (**2014**). //Bitboard Methods for Games//. [[ICGA Journal#37_2|ICGA Journal, Vol. 37, No. 2]]

=Forum Posts= 
==1994==
* [[https://groups.google.com/d/msg/rec.games.chess/vvl1nLv1MD8/oHVKdLXuiaUJ|bitboard move generation]] by [[Robert Hyatt]], [[Computer Chess Forums|rgc]], October 25, 1994
* [[https://groups.google.com/d/msg/rec.games.chess/106wKFeI8BA/zNuzu-2aMowJ|bitboard move generator]] by [[Joël Rivat]], [[Computer Chess Forums|rgc]], November 13, 1994
* [[https://groups.google.com/d/msg/rec.games.chess/M4CKCmqDNkI/TjVJEQY0GC0J|bitboard position evaluations]] by [[Robert Hyatt]], [[Computer Chess Forums|rgc]], November 17, 1994 » [[Evaluation]]
==1995 ...==
* [[http://groups.google.com/group/rec.games.chess.computer/browse_frm/thread/71f7b5ee3764f082|Chess programming using bitboards]] by [[Joël Rivat]], [[Computer Chess Forums|rgcc]], August 18, 1995
* [[http://groups.google.com/group/rec.games.chess.computer/browse_frm/thread/834fa3c273fafffe/cab7c12ea99e9a35|Bit Board Bonkers??]] by Dave, [[Computer Chess Forums|rec.games.chess.computer]], July 28, 1997
* [[http://www.stmintz.com/ccc/index.php?id=30562|Efficient Bitboard Implementation on 32-bit Architecture]] by [[Roberto Waldteufel]], [[CCC]], October 25, 1998
* [[http://www.stmintz.com/ccc/index.php?id=34506|Bitboard question]] by [[Werner Inmann]], [[CCC]], December 02, 1998
* [[http://www.stmintz.com/ccc/index.php?id=34852|Bitboards]] by [[Frank Phillips]], [[CCC]], December 05, 1998
* [[http://www.stmintz.com/ccc/index.php?id=48176|bitboards in java?]] by vitor, [[CCC]], April 06, 1999 » [[Java]]
* [[http://www.stmintz.com/ccc/index.php?id=53446|BitBoards]] by [[Frank Phillips]], [[CCC]], May 29, 1999
* [[http://www.stmintz.com/ccc/index.php?id=71880|Bitboard user's information request]] by [[Robert Hyatt]], [[CCC]], October 05, 1999 » [[Rotated Bitboards]] <ref>[[Robert Hyatt]] (**1999**). //[[http://www.craftychess.com/hyatt/bitmaps.html|Rotated Bitmaps, a New Twist on an Old Idea]]//. [[ICGA Journal#22_4|ICCA Journal, Vol. 22, No. 4]]</ref>
==2000 ...== 
* [[http://www.stmintz.com/ccc/index.php?id=313504|To bitboard or not to bitboard?]] by [[Tord Romstad]], [[CCC]], August 30, 2003
* [[http://www.stmintz.com/ccc/index.php?id=352040|How important are Bitboards?]] by [[Martin Schreiber]], [[CCC]], February 29, 2004
* [[http://www.open-aurec.com/wbforum/viewtopic.php?f=4&t=516|Two questions for bitboard experts]] by [[Tord Romstad]], [[Computer Chess Forums|Winboard Forum]], November 06, 2004 » [[Square Attacked By#InBetween|In Between]], [[Piece-Lists]]
==2005 ...== 
* [[http://www.open-aurec.com/wbforum/viewtopic.php?f=4&t=4521|Bitboard question]] by [[Tord Romstad]], [[Computer Chess Forums|Winboard Forum]], March 14, 2006
* [[http://www.talkchess.com/forum/viewtopic.php?t=13426|Speedup with bitboards on 64-bit CPUs]] by [[Tord Romstad]], [[CCC]], April 27, 2007
* [[http://www.open-aurec.com/wbforum/viewtopic.php?f=4&t=6651|Speedup by bitboards]] by [[Onno Garms]], [[Computer Chess Forums|Winboard Forum]], July 13, 2007
* [[http://www.talkchess.com/forum/viewtopic.php?t=17138|BitBoard representations of the board]] by [[Uri Blass]], [[CCC]], October 14, 2007
* [[http://www.talkchess.com/forum/viewtopic.php?t=25917|Bitboards / move generation on larger boards]] by [[Gregory Strong]], [[CCC]], January 09, 2009
* [[http://www.talkchess.com/forum/viewtopic.php?t=26527|Bitboard techniques in Xiangqi]] by [[Harm Geert Muller]], [[CCC]], February 12, 2009 » [[Chinese Chess]]
* [[http://www.talkchess.com/forum/viewtopic.php?t=28207|Bitboards using 2 DOUBLE's ?]] by [[Carey Bloodworth|Carey]], [[CCC]], June 02, 2009 » [[Double]]
==2010 ...== 
* [[http://www.talkchess.com/forum/viewtopic.php?t=42108|Bitboard implementation, how much time?]] by [[Ed Schroder|Ed Schröder]], [[CCC]], January 22, 2012
* [[http://macechess.blogspot.de/2013/04/64-bits-for-64-squares.html|64 bits for 64 squares ?]] by [[Thomas Petzke]], [[http://macechess.blogspot.de/|mACE Chess]], April 28, 2013 » [[Population Count]]
* [[http://www.talkchess.com/forum/viewtopic.php?t=54208|Bitboard Tricks for Large Chess Variants]] by [[Ed Trice]], [[CCC]], November 01, 2014
==2015 ...==
* [[http://www.talkchess.com/forum/viewtopic.php?t=56476|Bitboard database code samples]] by [[Steven Edwards]], [[CCC]], May 25, 2015 » [[Symbolic]]
* [[http://www.talkchess.com/forum/viewtopic.php?t=60007|M42 - A C++ library for Bitboard attack mask generation]] by [[Syed Fahad]], [[CCC]], April 30, 2016 <ref>[[https://sites.google.com/site/sydfhd/projects/m42|M42]] by [[Syed Fahad]]</ref>
* [[http://www.talkchess.com/forum/viewtopic.php?t=64487|Checkers Bitboard representation]] by Pranav Deshpande, [[CCC]], July 02, 2017 » [[Checkers]]
* [[http://www.talkchess.com/forum/viewtopic.php?t=65724|Bitboards and Java]] by [[Fred Hamilton]], [[CCC]], November 14, 2017 » [[Java]]

=Viewer & Calculator= 
* [[Bibob]]
* [[http://cinnamonchess.altervista.org/bitboard_calculator/Calc.html|Bitboard Calculator]] by [[Giuseppe Cannella]]
* [[http://www.chessprogramming.net/computerchess/free-chess-bitboard-viewer/|Free Chess Bitboard Viewer - Computer Chess Programming]] by [[Steve Maughan]]
* [[http://www.chess2u.com/t2159-new-free-tool-bitboards-helper|New free tool : Bitboards Helper]] by [[Julien Marcel]]

=External Links= 
* [[http://en.wikipedia.org/wiki/Bitboard|Bitboards from Wikipedia]]
* [[http://en.wikipedia.org/wiki/Bit_array|Bit-Array from Wikipedia]]
* [[http://en.wikipedia.org/wiki/Bitboard#History|Bitboard-History from Wikipedia]]
* [[http://www.craftychess.com/hyatt/boardrep.html|Chess board representations]] by [[Robert Hyatt]]
* [[http://webpages.charter.net/tlikens/bitmaps/bit_intro.html|Bitboards (aka bitmaps)]] by [[Tom Likens]]
* [[http://www.fzibi.com/cchess/bitboards.htm|An Introduction to BITBOARDS]] by [[Franck Zibi]]
* [[http://www.onjava.com/pub/a/onjava/2005/02/02/bitsets.html|Bitwise Optimization in Java: Bitfields, Bitboards, and Beyond]] by [[Glen Pepicelli]], 2005, [[http://en.wikipedia.org/wiki/O%27Reilly_Media|O'Reilly's]] [[http://onjava.com/|OnJava.com]] » [[Java]], [[Bit-Twiddling]]
* [[http://pages.cs.wisc.edu/~psilord/blog/data/chess-pages/index.html|Chess and Bitboards]] by [[http://pages.cs.wisc.edu/~psilord/|Peter Keller]]
* [[http://sanher.de/index.htm?lang=eng&url=bitfuncs|Bit functions for Delphi]] by [[Andreas Herrmann]] » [[Delphi]]
* [[http://labraj.uni-mb.si/en/Position_Representation|Position Representation - Computer Architecture and Languages Laboratory]], [[University of Maribor]]
* [[http://stackoverflow.com/questions/tagged/bitboard|Newest 'bitboard' Questions]] - [[http://en.wikipedia.org/wiki/Stack_Overflow|Stack Overflow]]

=References= 
<references />

**[[Board Representation|Up one level]]**