Tuesday, April 24, 2012

Polyglot for Android

There was an interesting discussion on the TalkChess forum whether a chess GUI running on the Dalvik Virtual Machine could merely support a single protocol, and use an adapter, like Polyglot, to support other protocols. Even though Chess for Android already supports both UCI and XBoard/WinBoard, I was intrigued by the question, and decided to give it a try. First, I compiled the polyglot sources for ARM-based Android devices (I had to make a few source changes to make that work). Then I edited a polyglot.ini file pointing to my own UCI engine bikjump1.8 compiled for ARM:

[Polyglot]
EngineCommand=bikjump1.8
EngineName=BikJumpAsXBoard
EngineDir=/data/local/tmp/
[Engine]


And gave it a try directly from the command line:

$ ./polyglot_for_android
PolyGlot 1.4.67b by Fabien Letouzey.
new
st 1
post
go
1 -1 0 1 h4
1 +0 0 3 h3
1 +2 0 6 g3
1 +12 0 20 Nh3
1 +17 0 22 Nf3
2 +0 0 46 Nf3 Nf6
3 +17 0 148 Nf3 Nf6 Nc3
4 +0 1 772 Nf3 Nf6 Nc3 Nc6
5 +2 2 1691 Nf3 Nf6 Nc3 Nc6 g3
6 +0 5 3120 Nf3 Nf6 Nc3 Nc6 g3 g6
7 +5 8 6163 Nf3 Nf6 Nc3 Nc6 g3 g6 Bg2
8 +0 14 13282 Nf3 Nf6 Nc3 Nc6 g3 g6 Bg2 Bg7
9 +5 49 57243 Nf3 Nc6 Nc3 Nh6 Nd5 Nf5 b3 g6 Bb2
9 +5 49 81920 Nf3 Nc6 Nc3 Nh6 Nd5 Nf5 b3 g6 Bb2
move g1f3


So far, so good! I then tried the same approach in Chess for Android. After installing the polyglot_for_android binary, polyglot.ini file and of course bikjump1.8, I could start polyglot_for_android as XBoard engine, but under water talking to the UCI engine bikjump1.8. So, in principle, one could simply implement one protocol in the GUI, and rely on the adapter to support the other protocol.