This repository contains a fork of GNU Go v3.8.
I’m currently reading Surreal Numbers by Knuth and hope to continue with On Games and Numbers by Conway. Applying these numbers to analysis of Go, just as Conway did, would provide an engaging example as I learn to exploit my Xeon Phi coprocessors. Hence, this fork of GNU Go to fiddle with.
Successfully builds and executes on FreeBSD 12 and Debian 10.
Additional display modes verified in st
, xterm
and on a Tektronix 4107
terminal.
I find myself less distracted when playing from a serial terminal. I also
rarely finish a game in one session. Thus, my selection of GNU Go as a base
upon which to tinker was in part driven by its --mode ascii
CLI interface.
This allows me to run a game inside screen
, (re-)attaching to it either from
a real serial terminal or from a terminal emulator on a modern computer.
When playing in ASCII mode, I found all my mental effort expended simply
attempting to read the board position. Adding some color cleared the fog. In
order to maintain compatibility with screen
and my terminal, this addition of
color uses only ANSI escape codes to set the background, printing an ASCII
space character to create a block of color. This mode may be selected via the
--mode ansi
option. The screenshot below shows ASCII mode on the left and
ANSI mode on the right, both boards depicting the same game.
In support of serial terminals like my Tektronix 4107 which only support
era-appropriate ANSI escape codes, an additional --mode strictansi
option was
created.
The ANSI mode mentioned above was cloned to create a two-player mode with the
same terminal-compatible ANSI-color UI. Both players must reside on the same
computer and have permission to create FIFOs under /tmp/
with mknod()
.
The first player to launch Go plays as black and the second player to launch plays as white.
All communication in the client is strictly synchronous. Thus, commands to save or analyze the game may only occur during your turn. Outside your turn, your client will only display the following message, accepting no other input until a move is received from your opponent.
Waiting to receive move from other player...
When a game terminates, each player is provided an opportunity to save an SGF file for later analysis. Continuing a multiplayer game from SGF is not currently supported.
The GNU Go engine is written in plain old C, all reasonably organized and readable. Combined with how inherently parallel most Go analysis appears to be, this forms an ideal test case as I bring all the Xeon Phi development tools online and learn to write parallel C code which fully exploits them.
The original GNU README
, including full build instructions, may be found
under the filename GNU_README
. On most platforms, to simply build and then
execute directly from within the build directory, run the following commands.
./configure
make
./interface/gnugo