Chess in a Few Bytes
I am showing my age by mentioning that my introduction to computing was a ZX81, a home computer produced by a UK developer (Sinclair Research) which had a whopping 1KB of RAM. The 1KB is not a typographical error, the home computer really shipped with a mere 1KB of onboard memory. But this memory limitation did not prevent enthusiasts producing a huge variety of software. In fact the machine sparked a generation of programming wizards who were forced to get to grips with its workings. The machine was upgradable with a 16KB RAM pack which offered so many more coding possibilities. But the unexpanded 1KB machine still inspired programmers to release remarkable software.
My favourite ZX81 games were Flight Simulation, 3D Monster Maze, Galaxians, and above all 1K ZX Chess. Only the latter was written for the unexpanded ZX81. In fact, David Horne’s 1K ZX Chess was coded in a mere 672 bytes of RAM. However, the game managed to implement most chess rules, and offer a computer opponent. While some important rules were omitted (castling, pawn promotion, and en passant capture), it was still amazing to be able to play against artificial intelligence. The game took up a fair chunk of my misspent youth.
1K ZX Chess remained the smallest implementation of chess on any computer for 33 years until the record was broken by BootChess this year, and subsequently by Toledo AtomChess. These three games do not implement all of the chess rules, so for completeness I have included my favourite small implementation of chess that implements a complete set of chess rules.
Linux has a good range of extremely strong chess engines such as Stockfish, Critter, Togo II, Crafty, GNU Chess, and Komodo. The chess engines featured in this article offer no match to a good chess engine, but they show how much can be achieved with a minuscule codebase.
Toledo Atomchess
You may have seen a considerable amount of press coverage about BootChess, a chess program written in 487 bytes of code, smashing the record of the then smallest chess program, 1K ZX Chess. Óscar Toledo Gutiérrez took up the mantle and decided to code an even more compact chess game. Toledo Atomchess is a mere 481 bytes of x86 assembly code which fits in a boot sector. The engine plays a reasonable game of chess given the limitations of its incredibly small codebase.
Features include:
- Basic chess movements
- ASCII text representation of chess board
- Moves are entered in algebraic form
- Search depth of 3-ply
Obviously, to fit the chess of game into 481 bytes, the author had to make some sacrifices. These limitations include:
- No promotion of pawns
- No castling
- No en passant
- No move validation
The author has also written chess programs in C, JavaScript and Java; each are very small implementations of chess.
- Website: nanochess.org/chess6.html
- Developer: Óscar Toledo Gutiérrez
- License: Free for non-commercial use
- Version Number: –
BootChess
BootChess is an extremely small computer implementation of chess. The game is crammed into a mere 487 bytes and runs on Windows, Mac OS X and Linux operating systems. The board and pieces of BootChess are represented by text alone, with P representing pawns, Q used for the queens and full stops entered for empty squares.
Features include:
- Graphic text representation of chess board and use input
- Bootsector sized (512 bytes) with a playable chess game
- x86 bios hardware only bootstrap (no software dependencies)
- All main legal moves including double square pawn start
- Pawn promotion to queen (contrary to 1k ZX Chess)
- CPU artificial intelligence called taxiMax > minMax half-ply
- Hard-coded Spanish white pieces opening
Again, there are some important limitations. Omissions include:
- Under-promotion
- En passant pawn capture
- No castling
- 3-repetition rule
- 50 move draw rule
- No opening or closing books
- One or more minMax/negaMax full plies for artificial intelligence
- Website: www.pouet.net/prod.php?which=64962
- Developer: Olivier “Baudsurfer/RSi” Poudade
- License: WTFPL v2
- Version Number: .02
Micro-Max
Micro-Max is a 133-line chess source which is written in C
The author has implemented a (hash) transposition table, the engine checks the legality of the input moves, and full FIDE rules except for for under-promotions.
Features include:
- Recursive negamax search
- Quiescence search with recaptures
- Recapture extensions
- Iterative deepening
- Best-move-first ‘sorting’
- Hash table storing score and best move
- Full FIDE rules (except under promotion) and move-legality checking
There is also a stripped-down 1433-character version, but allowing you to play under-promotions for full FIDE-rule compliance.
- Website: home.hccnet.nl/h.g.muller/max-src2.html
- Developer: Harm Geert Muller
- License: The MIT License
- Version Number: 3.2
Chesslin beats all three by half the size (https://chessprogramming.wikispaces.com/ChessLin) :
ChessLin,
likely the smallest computer implementation of a none FIDE compliant chess variant written by Olivier Poudade in x86 Assembly as sizecoding exercise, consisting of only 256 bytes [1]. Double pawn push and therefor en passant, promotions and castling are not implemented. It plays like a fish as AI is reduced to a half-ply, it also has no endgame detection – and takes about a hundred seconds to play. ChessLin also only works on Microsoft Windows XP SP3. Like minimalist Edlin line editor, it focuses on a single console line to enter moves [2].
See also
BootChess
External Links
Chesslin by Red Sector Inc :: pouët.net
Chesslin : 256-byte Chess program : tinycode
Spring 2016 – 2600 Magazine – The Hacker Quarterly
2 – Chesslin Baudsurfer – Article with source code