Ultra chess



Door Folkert van Heusden (mail@vanheusden.com).






Lang geleden hadden een goede vriend en ik beiden een MSX computer, een Philips VG8020. Dat was een 8-bit "homecomputer" met 64KB ram die draaide op een Z80 op nog net geen 4MHz.

Die vriend speelde een heel aardig potje schaak en had op zijn MSX dan ook het programma Ultrachess van Aackosoft (een Nederlands bedrijf).

UltraChess (van 1985) is vermoedelijk een port van Spectrum Chess II (uit 1982). Beiden zijn geschreven door A.C. Thornton (mogelijk dezelfde Thornton die Arctic Computing mede opzette, het bedrijf dat het Spectrum programma (ook zo'n 8-bitter, met een Z80 ook weer) uit bracht) waarbij bij de MSX versie de graphics gemaakt zijn door B. Kokx.

E.e.a. werd op een audio-cassette (het data transport medium van die tijd) geleverd.

Bij het opstarten kon je de kleur, de tijd en of je een analyse wilde doen kiezen.

In het hoofdscherm was een bord te zien met stukken en een zettenlijst. Dat was 't. Stukken die werden geslagen "vielen" van het bord af, onderaan het scherm uit.

Er lijkt een klein openingboek in te zitten van hooguit 2 of 3 plies (na 2 a 3 zetten is de denktijd plots veel langer).

In die tijd werden er nog boeken op papier uitgebracht met daarin tips en truuks. Bijvoorbeeld "het grote msx peeks pokes en truuks boek" waarin het volgende stond:

Ik heb een aantal jaar als softwareontwikkelaar voor Aackosoft gewerkt en ontwikkelde een grote verscheidenheid aan programma’s. Van applicaties zoals een tekstverwerker en database als ook vele tools en diverse spellen. Door de eigenaren van Aackosoft (Paul van Aacken en Guurt Kok) werd er voor het aantrekken van ontwikkelaars en het inkopen van spellen met name ook gekeken naar de Engelse markt. Een groep van zes ontwikkelaars bestaande uit een twee Engelse, drie Nederlandse en een Amerikaanse softwareontwikkelaar werkte een aantal jaar samen onder de naam ByteBusters aan diverse spellen voor de MSX.
 
Chris Thornton die het schaakalgoritme heeft ontwikkeld heeft zelf nooit voor Aackosoft gewerkt, al heb ik hem wel persoonlijk ontmoet. De source code van zijn Spectrum chess is van hem gekocht en de source code heb ik met een eenvoudige userinterface geschikt gemaakt voor MSX. Later heb ik daar nog de 3D variant ‘The Chess Game 2’ van gemaakt.
 
Van het schaak algoritme zelf weet ik geen details meer en heb me daar ook toen niet zo in verdiept, mijn taak was meer om dit werkend te krijgen op de MSX en later om er een 3D user interface versie van te maken. Dit was iets wat ik zelf deed, dit was geen uitgebreid team effort.
 
In het begin ontwikkelde we bij Aackosoft veel op de systemen zelf, zoals de spectrum en andere home computers zoals de MSX, C64 en Atari. Later gebruikte we veel meer cross compilers op de eerste PC’s om de code te ontwikkelen. Grafisch werd er bijvoorbeeld getekend in AackoPaint wat ik zelf heb geschreven want veel van de ontwikkel tools moest je in de tijd zelf maken.
I believe it used some sort of move evaluator to look at the possible moves and then used alpha/beta pruning.  It also used the interupts to allow the computer to evaluate the moves whilst the player was thinking too.  This significantly improved the performance over its predicessor, specrum chess I.

(There was one)sole developer (many things were in those days).

(Testing took place at) Wing and a prayer.

It did have an opening book of about 32 openings with 8 moves in each.

(It was written in) Z80 assembler.

It was developed on a TRS 80!  That was about the only thing around at the time  that was easy to cross compiler.

Op een dag bedachten die vriend en ik dat het een aardig idee was om zijn MSX en die van mij bij elkaar te brengen en dan beiden met hetzelfde programma een partij tegen elkaar te laten spelen. Zo gezegd zo gedaan. De lijst met zetten is verloren gegaan maar ik weet nog wel dat het eindigde in een win voor wit. De MSX heb ik nog ergens liggen in mijn "man-cave" maar tegenwoordig pak je gewoon een emulator. Die emulators emuleren zo goed dat het geen verschil meer zou moeten maken met een echte MSX. De partij nogmaals gespeeld (1s denktijd):

[Event "legendary match"]
[Site "OpenMSX 0.13.0"]
[Date "2017.02.22"]
[Round ""]
[White "Ultra Chess"]
[Black "Ultra Chess"]
[Result "0-1"]
[Annotator "Stockfish 6 64"]

{Move comments are from engine static evaluation.}
1. Nf3 d5 2. g3 c5
3. Bg2 Nc6 4. d4 Nxd4
5. Nxd4 cxd4 6. Qxd4 e6
7. Nc3 Qf6 8. e3 $0 {+0.52} ({Better is} 8. Qd3 Bd7 9. O-O Rc8 10. Rd1 {+0.88}) Qxd4 {-9.07}
9. exd4 $0 {+0.84} 9... Nf6 $6 {+0.36} ({Better is} 9...Bd7 10. O-O Rc8 11. Re1 Bb4 {-0.08})
10. Bf4 $1 {+0.59} ({} 10. Nb5 Kd7 11. O-O a6 12. Nc3 {+0.01}) Bd7 $5 {+0.27}
11. O-O $1 {+0.67} ({} 11. a3 Be7 12. O-O O-O 13. Rfe1 {-0.07}) Rc8 $5 {+0.52}
12. Rae1 $1 {+0.62} ({} 12. a3 Nh5 13. Bd2 Bd6 14. Rfe1 {-0.06}) Bb4 $0 {+0.46}
13. Re3 $1 {+0.18} ({} 13. Rb1 h5 14. Bd2 h4 15. Rfd1 {-0.39}) 13... Ng4 $2 {-0.01} ({Better is} 13...O-O 14. Rd3 Bxc3 15. Rxc3 Rxc3 {-0.67})
14. Rd3 $1 {+0.08} ({} 14. Rf3 O-O 15. Rb1 Nf6 16. Bf1 {-0.35}) O-O $5 {-0.38}
15. Re1 $1 {-0.29} ({} 15. f3 Nf6 16. Rc1 Nh5 17. Be3 {-0.42}) {, with the idea of Bf3} Bb5 $1 {-0.26}
16. Bxd5 $1 {+0.59} ({} 16. Rf3 Ba4 17. Rc1 Bxc3 18. Rxc3 {-0.50}) 16... exd5 $2 {-2.90} ({Better is} 16...Bxd3 17. Bxb7 Rxc3 18. bxc3 Bxc3 {-3.46})
17. Rf3 $0 {-2.86} Bxc3 {-6.95} 18. Rxc3 $0 {-2.09} Rxc3 {-5.90}
19. bxc3 $0 {-2.31} Re8 $0 {-2.60}
20. Rxe8+ $0 {+1.64} Bxe8 $0 {-2.24}
21. Bb8 $0 {-2.38} ({} 21. f3 Nf6 22. Kf2 Ba4 23. Ke2 {-2.87}) a6 $0 {-2.39}
22. h3 $0 {-1.94} Nf6 $0 {-2.21}
23. Be5 $0 {-2.14} ({} 23. f3 Ba4 24. g4 Bxc2 25. Kf2 {-3.05}) Ne4 $0 {-2.45}
24. c4 $0 {-2.07} ({} 24. Kf1 Nxc3 25. Bf4 Nxa2 26. Bd2 {-3.87}) 24... dxc4 $2 {-2.55} ({Excellent is} 24...f6 {-4.08})
25. d5 $0 {-2.39} 25... Ng5 $2 {-1.83} ({Excellent is} 25...f6 26. Bd4 Bf7 27. Kf1 Bxd5 {-4.16})
26. Kg2 $0 {-1.68} ({} 26. Kf1 f6 27. Bd4 Bf7 28. h4 {-3.75}) 26... b5 $2 {-1.57} ({Excellent is} 26...f6 27. Bc7 Bf7 28. d6 Bd5+ {-3.91})
27. Bf4 $0 {-1.67} ({} 27. f3 f6 28. Bd4 Bg6 29. c3 {-3.22}) Ne4 $0 {-2.24}
28. d6 $0 {-2.70} ({} 28. Be5 Nf6 29. d6 Bc6+ 30. Kf1 {-3.95}) 28... Nc3 $2 {-2.44} ({Excellent is} 28...Bc6 29. f3 Nc3 30. a3 Nd5 {-4.27})
29. a3 $0 {-2.43} 29... Nb1 $2 {-2.09} ({Excellent is} 29...Bc6+ 30. Kf1 f6 31. Be3 Kf7 {-4.17})
30. Bc1 $0 {-2.23} 30... f6 $2 {-2.39} ({Excellent is} 30...Bc6+ 31. f3 Kf8 32. Be3 Ke8 {-4.67})
31. Kf3 $0 {-2.21} 31... Bc6+ $2 {-2.29} ({Excellent is} 31...Kf7 32. Ke3 Ke6 33. Kd4 Kxd6 {-4.44})
32. Ke3 $0 {-2.47} Kf7 $0 {-2.76}
33. Kd4 $0 {-2.63} Ke6 {-3.09} 34. a4 {-3.10} bxa4 {-3.16}
35. Kc5 $0 {-2.67} ({} 35. Kxc4 Kxd6 36. h4 Bd5+ 37. Kb4 {-4.70}) Be4 {-3.03} 36. Kd4 {-3.23} Bxc2 {-4.07}
37. Kxc4 {-3.52} Kxd6 {-4.00} 38. Bf4+ {-4.31} Kc6 {-4.12}
39. Kd4 {-4.28} a3 {-4.53} 40. f3 {-4.62} a2 {-5.33}
41. Ke3 {-5.98} a1=Q {-11.55} 42. Bb8 {-11.71} Kd5 {-11.66}
43. Ke2 {-11.57} Qb2 {-11.98} 44. Ba7 {-11.90} Bf5+ {-12.09}
45. Kf1 {-12.12} Bxh3+ {-12.68} 46. Ke1 {-12.74} Na3 {-12.75}
47. f4 {-12.95} Ke4 {-12.82} 48. Kd1 {-13.00} Qb3+ {-13.15}
49. Ke2 {-13.02} Qxg3 {-13.84} 50. Bb8 {-14.08} g5 {-13.91}
51. Ba7 {-13.93} Qxf4 {-14.34} 52. Bc5 {-14.07} Bg4+ {-14.07}
53. Ke1 {-14.29} Nc2# 0-1

(geannoteerd met https://github.com/fsmosca/chess-artist die onderhuids stockfish 6 met 60 seconden denktijd gebruikt)

Download link van deze partij: http://vanheusden.com/csvn/001.pgn

Sinds die legendarische dag heb ik altijd een schaakprogramma willen maken. We zijn nu een jaar of 25 verder en na talloze pogingen is er nu Embla. Embla speelt best aardig (rating van 2236 op freechess.org op 't moment van schrijven (22 feb 2017). Het leek me wel leuk om eens te kijken hoe eea het tegen dat MSX spel zou uithouden.

[Event "OpenMSX 0.13.0"]
[Site "voga"]
[Date "2017.02.22"]
[Round "-"]
[White "Ultra Chess"]
[Black "Embla v0.9.8 rev 3881"]
[Result "0-1"]
[TimeControl "40/60"]
[Annotator "1... -0.03"]
[Annotator "Stockfish 6 64"]

{Move comments are from engine static evaluation.}
1. d4 d5 2. c4 c6
3. Nf3 e6 4. Na3 Bxa3
5. bxa3 dxc4 6. e4 Qa5+
7. Qd2 Qxd2+ 8. Bxd2 $1 {+0.90} ({} 8. Nxd2 b5 9. a4 Nd7 10. Bb2 {-0.32}) b5 $0 {+0.58}
9. Be2 $1 {+0.74} ({} 9. a4 a6 10. Ne5 Ne7 11. Be2 {-0.42}) Nf6 $0 {+0.10}
10. e5 $1 {+0.26} ({} 10. Ne5 Nxe4 11. Bf3 Nxd2 12. Kxd2 {-0.79}) Nd5 $0 {-0.46}
11. O-O $1 {-0.16} ({} 11. Ba5 O-O 12. O-O Nd7 13. Rab1 {-1.15}) c3 $0 {-0.77}
12. Be3 $0 {-0.84} 12... Nd7 $0 {-1.27} ({} 12...a5 13. Rfc1 Ba6 14. Ne1 Nd7 {-1.36})
13. Rad1 $0 {-1.32} ({} 13. Rfc1 a5 14. Ng5 b4 15. Bf3 {-1.33}) 13... O-O $0 {-1.51} ({Better is} 13...a5 14. Ra1 b4 15. Rfc1 Ba6 {-2.00})
14. Bd3 $0 {-0.98} ({} 14. a4 bxa4 15. Rb1 h6 16. Rfc1 {-1.61}) 14... f6 $2 {-0.94} ({Excellent is} 14...a5 15. Ng5 h6 16. Ne4 b4 {-1.89})
15. Rb1 $0 {-0.99} ({Better is} 15. exf6 N7xf6 16. Rfe1 a5 17. Bc1 {-0.82}) 15... fxe5 $1 {-1.57} ({} 15...f5 16. a4 b4 17. a5 h6 {-1.55})
16. Rfe1 $4 {-1.53} ({Better is} 16. Rfc1 e4 17. Bxe4 N7f6 18. Bc2 {-0.81}) exd4 {-3.47} {, with the idea of dxe3} 17. Nxd4 $0 {-1.17} 17... Nb8 $2 {-0.55} ({Excellent is} 17...Ne5 18. Be4 Bd7 19. Nf3 Nxf3+ {-4)
18. Bg5 $1 {-0.32} ({} 18. Be4 a5 19. f3 Bd7 20. Bf2 {-0.93}) h6 $0 {-0.78}
19. Rxe6 $1 {-0.28} ({} 19. Be3 {-1.65}) Bxe6 {-5.70} 20. Nxe6 $0 {-1.84} ({} 20. Bxh6 gxh6 21. Nxe6 Rf6 22. Nc5 {-5.76}) Re8 $0 {-2.18}
21. Bxh6 $0 {-1.41} ({} 21. Nd4 {-6.14}) Rxe6 {-5.28} 22. Bg5 {-4.57} Na6 {-4.96}
23. Bf5 {-4.69} Re5 {-5.18} 24. g4 {-5.14} Nc5 {-5.51}
25. f4 {-5.11} Rxf5 {-9.47} 26. gxf5 {-5.61} Nd3 {-5.58}
27. Rf1 {-5.75} c2 {-6.53} 28. Rf3 {-7.49} c1=Q+ {-15.37}
29. Rf1 {-15.81} Qc5+ {-15.02} 30. Kg2 {-14.96} Ne3+ {-15.53}
31. Kg1 {-15.13} Qc2 {-16.52} 32. Rf3 {-16.16} Qg2#
0-1

Download link van deze partij: http://vanheusden.com/csvn/002.pgn


Zoals verwacht won Embla. Ik heb nog gekeken of het mogelijk was om de ge-emuleerde MSX sneller te laten lopen maar als ik dat deed dan liep ook de klok in het schaakprogramma sneller (de MSX (1) had geen hardware klok) dus dat had geen zin.