Dog is a chess program for the ESP32 (= 240MHz dualcore cpu with 320kB RAM), it also runs on linux/windows/android/macosx.
It is multithreaded, also on the ESP32 ("lazy smp" - note that due to limited RAM, the ESP32 only has a transposition table of 48 kB)!
The ESP32 code uses "ESP IDF" (no Arduino code) with FreeRTOS for threading.
As Dog "speaks" the UCI protocol, it can run under xboard (for the ESP32 you need to use the included wrapper (in app/wrapper.sh) because some software has timing related problems when talking to the ESP32) on Linux, Arena 3.5.1 on Windows and Linux and Banksia on MacOSX.
For all tests I use 8 + 0.08 time control.
Comparing Dog playing on an ESP32 versus on Dog my laptop (an "11th Gen Intel(R) Core(TM) i5-11400H @ 2.70GHz") (using Ordo) gives:
For a more statistical sound result it should play more games (see the 'error' column).
Dog on an ESP32 compared to other chess programs:
The elo-rating is anchored to TSCP 1.82 for which the rating was obtained from the CCRL ratinglist.
This is Dog versus Dorpsgek on my laptop:
Results of the strategic test suite":
Using this epd-set, how many checkmates are found?
Also see: on lichess.
> source code: https://github.com/folkertvanheusden/Dog/
> windows binary: Dog-windows-v3.0.zip - requires e.g. Arena or any other UCI compatible interface
> macos 14 (sonoma) binary: Dog-macosx14-v3.0-universal.zip (universal/fat binary running on x86 and m1-4 macs) - requires e.g. Banksia or any other UCI compatible chess board
> Android: the program can be retrieved from Google Play (this requires Chess for Android to be installed (or an other OEX compatible board program)).
Dog plays at lichess.org as MaxtheDog (running on a Raspberry Pi 5) and MaxtheDog-ESP32 (running on an ESP32).
This is a picture of the dog that triggered the development of this program. His name is Max.
Max is very strong, likes to chase cats and other dogs and is worlds' fastest eater.
This is an ESP32 running Dog. It has 3 LEDs that show if it is calculating ("thinking"), if there's an error or if it is pondering. The TTL-converter is for connecting a serial terminal to the device.
Dog can speak the UCI protocol but has a tui (text interface) as well:
The ESP32 is a better chess-player than the dog Max, but Max can run faster.
Here's a video of Dog playing via a Digital VT510 terminal.
Version 0.1 only has alpha/beta with aspiration windows
Version 0.2 has null move, lmr, PSQ in evaluation, quiescence-search, tt, lazy smp and mvv-lva
Version 0.3 has improved evaluation (copy/paste from Micah with some parts removed because of RAM-space issues), IID, sibling moves, futility pruning, an improved version of the killer heuristic
Version 0.4 pondering, removed lazy-smp due to issues
Version 0.5 lazy-smp is back and other fixes
Version 0.6 performance tweak for ESP32
Version 0.7 performance tweaks, LED effects, adjustable thread count (1 or 2)
Version 0.8 timing tweaks, pondering can be switched off, bug fixes
Version 0.9 butterfly tables
Version 2.0 Syzygy endgame tablebase support and lazy-smp fixes
Version 2.1 changing the number of threads could cause a segfault
Version 2.2 updated libchess (because of compile fail in gnu-c++ 14.2), fathom and tuning-segfault-fix
Version 2.4 has all kinds of improvements. Better, faster, stronger.
Version 2.5 threading fixes/tweaks and more
Version 2.6 can connect a TTL uart to pins 16+17 for access to the TUI as well
Version 2.7 first macosx release. this version has a 16 MB hashtable instead of 256 MB. Use "-H 256" to get back the original behaviour.
Version 2.8 minor speedups. mostly code-cleanups. macosx now has universal binaries (work both on intel and M1/etc macs).
Version 3.0 NNUE
For contact info, see this page.