ZX-Chess II is a chess-playing program that stores its entire chess engine as machine code embedded within REM statements and string data, launched via PRINT USR 20480 at line 2. The machine code at address 20480 implements move generation, position evaluation, and a variable-strength minimax search selectable from level 0 through level 6. The program supports three modes — Play, Analyse, and Load — and allows the user to choose color, specify the move number, and set which color moves next, making it suitable for analyzing positions mid-game. The BASIC loader is minimal by design, with the bulk of the program’s logic residing in the raw byte sequences packed into REM lines and data lines that follow line 2.
Program Analysis
Program Structure
The program is essentially a two-line BASIC wrapper around a large machine code payload. Line 1 is a SAVE command used to store the program, and line 2 executes PRINT USR 20480, which transfers control to machine code loaded at address 20480 (decimal). Everything from line 50077 onward consists of REM statements and apparent BASIC lines whose tokenized content is actually binary machine code data — a common technique for embedding Z80 routines directly in the BASIC program area.
Machine Code Embedding Technique
The overwhelming majority of the listing — lines 50077 through the end — is not intended to be executed as BASIC. Instead, these lines serve as containers for raw Z80 machine code bytes. The ZX81/TS1000 BASIC interpreter stores each line with a length field, and the tokenizer encodes keywords as single bytes, meaning arbitrary binary sequences can be stored as a mixture of keyword tokens and literal character bytes inside REM statements or within string and numeric operand fields. The chess engine exploits this by placing its entire game logic — board representation, move generation, evaluation, and search — into these binary sequences.
Entry Point and Initialization
Line 2 uses PRINT USR 20480 to call the machine code. Address 20480 (0x5000 hex) places the code just above the system area typically available on a 16K machine. The PRINT wrapper means any value returned by the USR call will be displayed, though in practice the machine code takes over the display entirely and implements its own I/O loop, presenting the prompts visible at the end of the listing: mode selection (Play/Analyse/Load), color choice, skill level (0–6), color to move, and move number.
User Interface Strings
Near the end of the listing, readable ASCII text appears embedded in the data: ZXCHESS-II, the prompt strings PLAY,ANALYSE OR LOAD (P,A,L)?, YOUR COLOUR(B,W)?, LEVEL OF PLAY? (0-6), COLOUR TO MOVE NEXT?(B,W), MOVE NUMBER? (NN), and ZXCHESS PLAYER. These are stored as literal byte sequences within the machine code data and are output directly by the Z80 routine rather than by BASIC PRINT statements.
Notable BASIC Idioms
PRINT USR 20480on line 2 is the canonical single-line BASIC launcher for a self-contained machine code program.- The high line numbers (50077, 9783, etc.) push the REM/data lines far up the line-number space, making accidental
RUNorGO TOinto them less likely during normal execution flow. - The
SAVE "ZXCHES[S]"on line 1 saves the entire program including its machine code payload.
Chess Engine Features
Based on the user-facing prompt strings embedded in the binary data, the engine supports:
- Three operating modes: Play (human vs. computer), Analyse (computer evaluates a position), and Load (load a previously saved game or position).
- Color selection: the human player can choose Black or White.
- Six skill levels (0–6): almost certainly controlling the search depth of a minimax or alpha-beta search.
- Mid-game entry: prompts for the color to move next and the move number, allowing analysis or play to begin from an arbitrary position.
Binary Data Anomalies
Because the listing is a disassembly of tokenized BASIC bytes rather than source text, many lines appear as nonsensical sequences of BASIC keywords (RETURN, TAN, LN, INKEY$, GOSUB, ACS, RND, etc.). These are not actual BASIC commands — they are the interpreter’s keyword tokens (each a single byte in the range 0xA0–0xFF on the ZX81) being misread as code. The true content is Z80 opcodes and data bytes that happen to share the same byte values as these tokens.
Block Graphics in Data
Block graphic characters (▘, ▝, ▀, ▖, ▗, ▄, ▌, ▐, ▞, ▚, ▛, ▜, ▙, ▟, █, ▒) appear throughout the data lines. On the ZX81/TS1000, block graphics occupy character codes 128–143 (0x80–0x8F), and their presence in the binary payload simply reflects Z80 instruction bytes or data values that fall in that range — they carry no graphical meaning in this context.
Program Size and Memory Considerations
The sheer volume of data lines indicates a substantial machine code routine. A chess engine with a six-level search requires significant code for move generation, legal-move filtering, board evaluation, and the search tree itself. Fitting this into a 16K machine alongside the BASIC system variables, display file, and a usable stack represents a careful memory layout, with the code beginning at 0x5000 to leave the lower RAM for system use.
Content
Image Gallery
Source Code
1 SAVE "ZXCHES[S]"
2 PRINT USR 20480
65283 RETURNZCE RETURNTASN ## RETURNOASN #INKEY$ TAN LN [G]##LN [G]#TAN .LN [G]## RETURN0TAB #INKEY$ TAN LN ▌##)#-/E£RND7LN #▒ LPRINT
50077 REM 5 #60#TAN 5 PAUSE ## RETURNX""5 #▞##WC▝Q 7( RUN LPRINT #▒INKEY$ CLEAR5 RNDUQ TAN 5P#Q4#█#LN [G]# CLEARACS ▘#TAB #INKEY$ # RETURN0TAB #INKEY$ TAN ...............) #5ASN #▘* GOSUB [K])4#5#INKEY$ ▘* GOSUB [K]TAN .(C)1981
9783C COMPUTING.LN LLIST ▒<>5##▘00VAL LN [T]#AT <= CLS NEWRND4▖ CLEARACS ▘EXP ▀# RETURNA4▀:0▖#LN [G]##LN [G]#2 STR$ [J]LN [G]#[J]LN [G]#<> NEW#LN PRINT INKEY$ LET NEW█Y-C▝YXLN [G]#<>7<>7SGN 0ACS #CINT Y#LN (INKEY$ # NEW▘4[M]LN ,,#/[2]SGN ACS #Y#CODE [G]# CLEARACS ▘#ATN ,,#U[W]# RETURN▘ASN ##UX#[R]ASN ##U[X]# RETURN COPYASN ### STEP ##LN [:]###[L]RND...[I][N][B][R][Q][K]I##VAL STR$ FAST PRINT LN INT #5▛#2▖▞▀Q 7( CLS▞▀Q█7( CLS14 LOAD 5▛#)B#▘/ GOSUB [K]5▛#)##▘/ GOSUB [K]5~~# FAST)##▘+ GOSUB [K] LPRINT )▗#▘+ GOSUB [K]5~~#)[B]#▘+ GOSUB [K]5 #)""#▘"" GOSUB [K]5 #▘█▘ GOSUB [K]5▛#)# ▞▒Y8 PRINT [Q]# LET ;X( SAVE 5 SCROLL##J#TAN FASTVAL STR$ <> FAST PRINT LN ##M▞PI<>E▞PI<> COPYC* NEW▛ FAST5 COPYINKEY$ - #;# LPRINT <> LET <> LPRINT SGN AT LPRINT TAN VAL STR$ PRINT U£##[J]2~~LN ▘#++ PRINT Y▛[>]# LET A ▞▌D( CLEAR FASTSGN D;#▗▄LEN ▖#-#; LET SGN AT TAN )RND#5 PAUSE #▘▌ GOSUB [K]TAN )RND#▘▌ 5[,]# GOSUB [K]TAN 5[B]#)RND#▘▌ GOSUB [K] 5[3]#)##▘▖ GOSUB [K]TAN FOR )""# GOSUB [K]TAN 5VAL #)##▘▛ GOSUB [K]TAN 5[7]#)█#▘▖ GOSUB [K]TAN FOR )█# GOSUB [K]TAN LN ""PI7U£#TAN 5##)[4]#▘▛ GOSUB [K]5##)4#▘▞ GOSUB [K]TAN 5[,,]#UP##2~~▞▝[J]LN ▘#LEN 0F#( PLOT RETURN04▝Q 5▗#▘▝ ) # GOSUB [K]TAN 5RND#60#) PAUSE #TAN ▞▛Q 7( CLSTAN 5RND#LN [;]#5##LN [;]#5█#LN [;]#5█##[;]#LN STEP RND:/▞3Q 7( CLSQ#7$4 NEXT 6(RNDTAN LN [T]#5▛#TAN FASTSTR$ VAL <> FAST▘ █LN INKEY$ RETURN▜4,,LN M? CLEARQP COPY/▀LN P? GOSUB #9RNDLN [X]▛TAN YAVAL ▞▒ACS 6*[<] IF :#=/▘▄( NEXT AT TAN VAL [*]▞▒ACS PIC▘▄ACS JACS ,( PRINT AT TAN COPY COPY COPY COPY COPY COPY COPY COPY YA▞▒ PRINT [Q]# LET W777( PLOT Y+M£#LN ""PILN [▒]PIW RETURN#S PAUSE LET LPRINT SGN AT TAN <>E4#LN [Z]#<>ACS ▖#TAB ▐#<>#▝LN [:]#6 PAUSE #<>#▀LN [:]#6 PRINT #<>C▝YXM POKE #) PAUSE #/5)▌ <>;LN [Z]#U£#<>[Y]▝)""#C:)[Q]# RETURN,C▛ RETURN#C▀)[V]#▘▌ LN 1#UV#[B]COS # RAND PI <>~~ LN [▒]PI<>[▒]PI▞~~TAN 5 LIST #) LET #▘,, GOSUB [S]5 LIST #) LET #▘▒ GOSUB [S]<>E4#<>#▝<>#▀6 CONT #TAN U##5K#ACS █ RETURN▄SQR E CONT # GOSUB # LIST #[B] GOSUB #""<>E8#<>#▝<>#▀ GOSUB # INPUT #[B] GOSUB #""<># <>#▘#[B]COS 68#TAN #[B]COS FAST<> LPRINT <>8#TAN ▘▝▝) PAUSE #LN [7]#LN [Y]# RETURN#4▌LN [>]#/ LET ><( GOSUB LN [>]#LN **#U PAUSE #TAN FY LN ▀##[T]C▀F.▖60#TAN E0#Y▖LN ▀#LN ,,# NEW# RETURNS#CODE # RETURN# LIST RETURN# SAVE CHR$ 4TAN E0#LN ▀#760#TAN ,LN [Y]#<( RAND TAN LN TAN #LN **#TAN FASTE0## NEW STEP #)4 ; 60# LPRINT TAN VAL STR$ ▞$5""W)█WVAL #INT # CONT # >#7* [,]/#7Q [/] 7J [0]£#7. [.]2#FO [/]Q#FXE0##FQ ▄▞#F4 [(]##F+ ▚##F6 [/]##F;["]#K#G* ▜E#G4 [£]PI#GO ▄ #G8 [/]##G;["]###HR █##SPI █▜#Z# █##INKEY$ # #[~~]##Y 8### █W##X #### #[0]#;6 [£][6]#;F"#[C]#;8 [I]#;J~~ [O]#NY [U]#NE ""#NX NO NO ABS #NX" NO NO SLOW#*#( REM #/7( LIST #/I( PLOT #/T( UNPLOT #/#( ▝#/6( ▒#/G( :#;6( =#;7( ,#,7( 4#,G( A#,P( G#,Y( M#,#( S#.7( Y#.I( ##.K( ##3D( ##3N( ##4E( ##5F( ##5P( ##8I( ##8S( ##9J( ##9T( █#AK( ▚#AU( [£]#QRND QINKEY$ [,,] INKEY$ S[,,]#[2]#INKEY$ # [8]#INKEY$ # [E]#INKEY$ # [K]#INKEY$ #▟ [Q]#INKEY$ Q [W]#INKEY$ F TAB #INKEY$ 4 COS #INKEY$ + EXP #INKEY$ S USR #INKEY$ J AND #INKEY$ A STEP ### NEW### GOTO ##Y PAUSE ##O SAVE ##E RETURN##4 ▖##- ~~### (### -### 0### 6### C### I### O##RND U##P RND##E ###3 #PI ###3 #PI["] ##RND# ##RND# ##RNDP ##RNDE ##RNDR ##RNDI ▙#RND9 [▒]#RND0 [:]#RND# [=]#RND# [,]#RND# [4]#RNDQ[$] [A]#RNDZ [G]#RNDY [M]#RNDX[,,] [S]#INKEY$ # [Y]#INKEY$ # CODE #INKEY$ # ASN #INKEY$ # SQR #INKEY$ #▟ CHR$ #INKEY$ Q[$] >=### LLIST ### ## ## POKE ### IF ### ## ▞#INKEY$ A £### >### ## ##[,,] 8### E### ## Q#RND# W#RND# PI#RND# ##RNDQ ##RNDG ##RND6 ##RND/ [W]##RNDINKEY$ ##RNDPI ##RND# ##RND#[,,] ##RNDZ RNDX[,,] ?$(#" DIM #,,##▝SGN #?▖#Z,,A#▌##▒[0]#▖[P]#▞ AND #> STOP#▛ NEW#▒$H#/###?U#,##▞ COPY,, COPY▛ COPY/▛##▞##▘##S▌ COPY" COPY/ COPY. COPY▝; COPY0 COPY 0 COPY▞)##▘ COPY* COPY▘▘ COPY COPY ## : COPY▒$##▘[;]#;▌##(▜#▛["]#=[>]# )▟# COPY )[▒]# COPY )[?]# COPY .[-]# ▝ COPY ( COPY -[4]# ▒[8]#▝▘[F]#▝[K]#▝1 COPY3 COPY▝3 COPY▛ COPY▒-[W]#$PEEK # ▞""#~~▘ASN #8LN #9SQR # COPY COPY ( COPY ▞NOT # ▘ COPY - THEN#▝; COPY" COPY 1 COPY 1 COPY,,> NEXT #▛6#"## > RUN #▘$ RETURN#?$#▝▘▌#:▒# ; COPY▒▒ COPY; COPY/▘*#/0#:3#▝= COPY$ COPY $ COPY = COPY >A#~~▛K#▌Z# ##▒▘R#/W#▝3 COPY▛ COPY 3 COPY▒:##0## . COPY COPY :## 0 COPY▝>##=## > COPY ## ▘ COPY.▌##,,["]#▒[O]#▖VAL #>ATN #▘▘##▌>#▝?▙#<?#▒([▒]#▖ COPY ? COPY ▘[?]#▀([;]#.[6]#▛[L]#▘([3]#▖ COPY : COPY▘([D]#▖[I]#▘: COPY~~ COPY < COPY ( COPY ▌[S]# .[W]#▝:TAB #$ COPY $ COPY ▌TAN # < COPY▘▌ COPY▘ COPY~~▛<=#▌ PLOT #>▘#▝$ LLIST #▒ NEXT #▝▞ DIM #, LIST # ▝ GOSUB # ( COPY ▝ COPY COPY $ IF # ( RETURN# ▝ COPY $ COPY ▛▒# ▀£# , COPY ( COPY <-#▝"0#: COPY COPY) #E4#[B] GOSUB ###2▌LN ▘##M=#EG#UP# RETURN▘4£5 #6G#UK#[B]CA▘▖[B]4 SAVE U=#7[Y]C:▌C▌LN [T]#/ PRINT Y█MT#TAN LN [9]#K▘TAN # GOSUB ##ACS SS:#[B]C,,ACS TK POKE LN [T]#/ LOAD FOR #▞ LN [9]#5 #,,#▗#,,,,68#5 █6[W]# LPRINT TAN 77# FOR 6G#[B]TAN MT#RTAN PRINT 77 LET TAN ASN AND # RETURNMTAB [6]RNDU##[B]COS U##[B]COS <>5##<># LN [:]#6 PAUSE #<>#▘LN [:]#6 PRINT #Y-M POKE #▘▌ )█#5 PAUSE # GOSUB [K] LPRINT LPRINT #[1]#[F]#[J]M##5 CONT #TAN M##U##M##UQ####5RND#60# ▘▌▌TAN U##5Q#[Y]K.5##▐#U##[Y]S(UR# RETURN▘C▞LN >=#### LPRINT LPRINT TAN E4#TAN LN ##5 6##6##6[U]#5##6##[J]M##)##LN [.]# GOSUB [K]5 #6E#68# 5ASN #62#5[V]#66#LN THEN#EE#6SQR #UT#[B]ATN 3#Y▘MQ# LN [/]#U[X]#[B]COS RETURN COPYCOS UQ# RETURN▘CJE## GOSUB #[W]#[B] GOSUB #K#5 [B] GOSUB # FOR E[U]#[B] GOSUB #K#E[W]#)[0] COPY;6## FOR 5S COPY[B] GOSUB #6[U]#UQ# RETURN▒COS 5##[Y]S(U##[Y]SQR 5Q#O/N5 6##6[U]## REM # GOSUB #6[U]#/)5 6##6[U]## REM # GOSUB #6##U9#[B]4▞EA#68#E8#E8#6EXP #ESQR #6E#U###"# C>U▝INKEY$ RETURN#K▖ RETURN1K GOSUB 57INKEY$ ACS INPUT / NEWLN ,#/[C]U INKEY$ 56INKEY$ ACS X** RETURN#SQR <>E-INKEY$ <>ACS ▖#COS <>E▞INKEY$ <>▛ RETURN▘""U▞INKEY$ 5▝INKEY$ [-] PAUSE ## GOSUB # RETURN~~""57INKEY$ ACS PLOT LN £#U INKEY$ M▖INKEY$ U▞INKEY$ M INKEY$ M▝INKEY$ U8INKEY$ M7INKEY$ LN £#U▖INKEY$ M INKEY$ E0INKEY$ ) IF COPY;60INKEY$ Q 7Q TAN U6INKEY$ ACS #""UDINKEY$ [B]""▘▀ COPYU INKEY$ ▟#M▖INKEY$ <>E▖INKEY$ <>4##/2<>E▖INKEY$ <>▖INKEY$ RETURN-C$ RETURN#C,,LN [O]#[B]4NU▖INKEY$ █M▖INKEY$ 5 INKEY$ [Y]4**[(][(]M▝INKEY$ 57INKEY$ QRNDLN £#5 INKEY$ [J]M7INKEY$ LN £#LN ##U▖INKEY$ # AND ##TAN #I#A#RND#Z#▝# #▘#/#█#EXP ###[V]### ##LN #[0]# █ £ [,,])▘▘ █▘▘#[B] ▛▌ ▒[Y] LOAD # LIST PAUSE 6##,M ## ▘▝▌(4█▘▝▌(4█ COPY6HU# NO6H ,," PRINT RUN ~~ PLOT ▘ COPY FOR POKE ▒<+£ SAVE GOSUB ,,"~~~~ RUN PRINT PLOT PLOT (▒ ▖ ▖▒▖▖▒▒ ▘▀▀▌,,~~ ▘ #[G][4]#K▙$))) #COS #LN ### PRINT #G###[(]#####[,]#CHR$ # RAND ###QIKA#Q0KO#AAXF3Q▖▝▀▌▞▀▝▖ COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY ▀ ▀ COPY COPY ▘▘: ▘ £ COPY COPY [~~],, COPY COPY[£] ,, COPY COPY [,,] COPY COPY [,,] [,,] COPY COPY ▟▟ ["]▟▟▟ COPY COPY ▐ [£][:] COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY [N]## ## RUN INKEY$ ▝X? SAVE # CONT #▌▌ PAUSE #RND#[I]###[7]# CLEAR#TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ ##[7]# CLEAR#TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ ##[7]# PRINT #TAB INKEY$ TAB INKEY$ [N]## ## RUN INKEY$ ▝X? SAVE #[K]#▌▌ PAUSE #RND#[I]###[7]# CLEAR#TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ [N]## ## RUN INKEY$ ▝X? SAVE #[8]#▌▖ NEXT #INKEY$ #[I]###[7]# CLEAR#TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ TAB INKEY$ ▒EXP ( ▒EXP ( ▒EXP (0## ▝ ####W#[T]##*## STEP # 4[6]*5J[U]8[U]RND#######RND################################################### COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY COPY STEP [X] COPY COPY COPY COPY COPY COPY COPY COPY COPY [I][I][I][U][U][U][U][U][U][U][U][U][U][U][A][U][6]**668AAJ############################################################XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX#############NIII▌#NX ~~#N# ?#N# =#N# ;#ND 2#N3 C#N+ #NO H#NP M#Q5▘R#QE W#QY INKEY$ #Q# ##QPI 7#QI~~##Q7 ###Y ###INKEY$ ####(###Z(#### ###Z ###O ###D #### ▙### ▗##U,,[£]###([)]##PI([-]###([.]###([4]###([9]###([E]###([J]###([O]###([T]###([Y]###(####(COS ### ## ABS #,7 NOT #,G >=#,P LPRINT #,Y NEW#,# FOR #,9 LIST #,K PRINT #4E IF #4O COPY#5F 5P ##6F 1#6H ▖#6; :#6G <#6/ /#67 B#AK G#A0 L#A9 LN #I; ,,#IQ[~~]6#IINKEY$ Q#I#["]##I. V#JT RND#U#["]##U# ##I# ##IA ##I. ##JT NOT #U# ##ND ##N3 ▟#N+ ▚#NO ["]#NP FOR #U# ["]#6/ [(]#67 [+]#68 [8]#9J [D]#9T [I]#KU [N]#QRND [S]#Q# [X]#Q# TAB #Q# SIN #QG ATN #QR SGN #QP CHR$ #QO <=#QN ##SPI FAST#PQ REM #PR LOAD #PO POKE #PN [N]#SPI ##SPI [X]#SPI ▒#Q# $#QG >#Q6 *#Q/ 0#QR 5#QP A#QO F#QN SPI P#PG U#P7 Z#P, SGN #SPI PRND ##P#["]##PE ##PG ##P7 ##P, SGN #SPI ##Q/ ##QR ##QP ##QO █#QN SPI ##SPI [?]#QR ##SPI [;]#8Q [2]#8Z 8# LEN #8#▟[H]#8; [M]#F- [R]#FN [W]#FY A#FR [7]#JS["]ACS #JT SQR #KU [C]#RND# AND #KU ##RND# #### DIM ###▐[2]###[£]STR$ ###[,,] SAVE ### CLEAR### AND ##U ▛#H# £#I; SLOW#IQ NEXT #IINKEY$ [,,].#I# 4#IU 9### SAVE ### )###▟O##RND T##P Y##E ###PI ###T -##K -###$#### #### #### ####$▛### 4### ###RND ###P ###E ▜##PI [,,]##T ###K [<]#-+ ##8H [,,]#8;[$][6]#8. [B]#8I [G]#8, [L]#89 [Q]#87 [V]#AK([:]#AU( THEN#RPI[,,]ASN #RINKEY$ INT #RND# USR #RND# [1]#RND# ""#RND#[£] STOP#RNDP CONT #RNDE GOSUB #RND3 PAUSE ### VAL ### UNPLOT ### ▘##Y▌#,7 ~~#,G ?#,P =#,Y ;#,# 2#,9 7#4E C#4O H#5F M#5P R#6F W#6H INKEY$ #6; ##6G ##6/ ##67 ##I; ##IQ[~~]##IINKEY$ ##I# ##IA ##I. ##JT ##KA ##K0 U# U# [£]#I. [)]#JT U# [.]#IA [4]#I. [9]#JT U# QRND [O]#NF QRND [Y]#QRND RINKEY$ RND# RINKEY$ ABS #P#["] PE >=#P# LPRINT #P#▟ PE FOR ### ## IF ###RND ## COPY### ## ▘▝▀▀▝▘ ▘▀▖▌▌▖▀▘ ▝▖▞▛▛▞▖▝ ▀▌▛▒▒▛▌▀ ▀▌▛▒▒▛▌▀ ▝▖▞▛▛▞▖▝ ▘▀▖▌▌▖▀▘ ▘▝▀▀▝▘ ▞#5 #Q COPY7( CLS▞▒<>5 #<> COPY<>##<>Q3▘<>Q#▟<>QD <>QN <>QX <>Q# <>7( OR TAN CLEARE=# CLEAR#[1] CLEARACS /# CLEARE/##[?]#SGN STR$ CLEAR#█#▄#,[B]C$ RETURN COPYC55M#[I]ACS #C;[I]▒U=# RETURN▘C2LN [P]#4"U=# RETURN▞C▖ RETURN▀KUSR CLEAR7(ACS SGN U=# RETURN▞""#### RETURN▀K>▒4$▒LN [P]#UM#ACS #4▝([L]SGN TAN ▒C▞▒LN [P]#/ABS LN PAUSE #/LN U£#5M#ACS X** RETURN#SQR <>E4#<>ACS ▖#COS <>E>#<>▛ RETURN▘""U>#[<] PAUSE F# GOSUB # RETURN~~""YRND▒LN [P]#U£#M(#U>#M£##UO#▒LN [P]#U(#M£#EC# FFFF[J]#F#6C#TAN ,ACS #""LN 0#""▘ COPY▝Y▀STR$ ▄#M:#, NEW# RETURN▖4H#▟#,[B]4A# RETURN▀C▌LN 0#40( GOSUB #[)]#YRND▒LN [P]#U:#M£##▟#[J]▒LN [P]#LN ##SGN ACS #COS #M£#▘▘▀Y UNPLOT /[R]<>EC#EE#6C#<># <>#▘[J]#7#7U£##7#7▒#76E#TAN 76E#TAN GOSUB #E#E2#77#7#762#6C#)+#,[B]C0 RETURN COPYC/5L#[I]ACS #4([I]MM# NEW▛M=##M£#LN ##0# RETURN#TAB POKE #TAN VAL ▞([J] M/# CLEARE/##I#SGN STR$ CLEAR#█I RETURNG#▟#, RETURN COPYC▒[B]4,# RETURN,,K LOAD CLEAR7( SLOWSGN AT [J]TAN SGN AT TAN SGN AT PLOT ▘TAN ▚##/ FOR #UM#[G]ACS #C LLIST # NEW▛▒# RETURN,,SV▒ RETURN▌C TO ACS #C▖ RETURN▞CNOT ▒ RETURN$S6▒ RETURN▀CLN ACS #C[Y] RETURN▘4[U]UM#ACS #4▛▒ RETURN?S[I]/[R]▒ RETURN?K[B]/[K]▒ RETURN▖4[4]/[D]▒ RETURN▝4[;]/[6][J]M##Y#M##)+#,[B]C? RETURN COPYC"MM# NEW▛M=#LN STR$ #0# RETURN#TAB [U]#TAN CLEARE=# CLEAR#[1] CLEAR▌▌5M#ACS /# CLEARE/## RAND #SGN STR$ CLEAR#█[J]M/(#M£##▄#, RETURN COPY4▞ CLEAR7( SCROLLSGN TAN 5/#ACS #4#5USR :;ACS ##▚#,[B]C##UM#[G]ACS #CPI# NEW▛ RETURN▞4:UL#[G]ACS #ASN 2#Y▘MV#5/#ACS #4▝ACS EXP ACS RETURN5##[3]# NEW▛ RETURN▘C[4]UM#[G]ACS #C[/]ACS CLS5/#ACS [:]/ THEN5/#ACS LEN 5###ACS CLEARU£##U=# RETURN▀ AND $# RETURN▞ASN $#5/#ACS #TAB ▌#ACS NEW▛ASN ▌#▒ RETURN▖4<▒ RETURN▖ASN ▌# RETURN▌TAB $#5£#ACS RETURN#▌# RETURN▀4>▒ RETURN▘CS RETURN▌TAB $#5£#ACS RETURN#▌#▒ RETURN▀4,,# RETURN▌ AND $##▌# RETURN▖4,,# RETURN▌ AND ▌##$# RETURN▌ASN ▌# RETURN▘TAB $## RETURN▌ AND $#UM#[D]ACS #TAB $#5/#ACS RETURN#▌#SGN LPRINT LPRINT TAN U## GOSUB #LEN #COS 5###ACS TAN FASTVAL ACS CLEAR# OR 5 ##▞C0# OR #>5 #U##[B]C###[Y]ASN Y#G( RAND 5█#U##[B]C##ACS [X] OR ## RETURN▞ OR C▒ OR JSTR$ VAL FAST#U## GOSUB #LEN ##ACS [X]4▌ LPRINT AT SGN /▒H( CONT LPRINT AT SGN Q ACS CLEARG([I]5 COPY#U## GOSUB #LEN ##ACS [X] OR ## RETURN▞ OR C7 OR #H(▖▖G/=ACS OR #MGQ HU##[B]CASTR$ VAL FAST##ACS [X]4▌ LPRINT AT SGN /▒G( CONT LPRINT AT SGN Q ACS CLEARH([=]AT LPRINT #M# OR [J]▞:5[G]##G( UNPLOT OR : ACS RETURN FASTACS CLEAR## NEW#5 ##C▀5[N]#O NEW▛#ACS #C/Y▌▐# NEW LIST C▀G/,, GOSUB ## GOSUB #/"▐## GOSUB #[B]C▀G/ SAVE LPRINT U:#ACS INKEY$ C~~(▘TAN G[Y]4 RAND ###($5###5 #ACS AT ▖H/ SCROLLH[Y]4 GOSUB ###<>E:#<>5[G]#)[N]#ACS #4▘ FOR # FOR # OR NEW▛M=#<>E=#<>5 LN (#C/ GOSUB #█#[W]S▝##LN (#C?█#[U]K CONT ### DIM ##[V]**#TAN #[X]SQR #TAN OR ### FOR [B]C<[J]▌7[Y]C UNPLOT GOSUB #M=#<>E=#<>##7#[P]4▘F6##[J]▞,,5V##G( UNPLOT LN [I]#LN 6#U## GOSUB #LEN #C##5##C#M:# FASTVAL LN ##LN [W]#CHR$ █ IF [P]#C0#UM#5L#[I]ACS ##455Y#[Y]S▘#UPI#CHR$ ▒MPI#<>E4#U:#<>[Y]▀41MINKEY$ ##[P]#5Z#[Y]S▝S▘#UPI#LEN ▖MPI#AT LPRINT H([0]UINKEY$ #[B]C▖[J]MRND#US#[B]CODE [C]#LN ##URND#5Y#[-][-]5L##ACS #C▝ GOSUB #5##▚▚#I UY#▗#UZ#[(]#UPI#█ACS #C▝ GOSUB #LN ##U##LN ##U##LN ##;U##LN ## ;ACS #C▛ FOR 5 [B] GOSUB #) █;6W#TAN █;6W#TAN <>#Y▛[=]#[J]TAN <>##[J]TAN - #*K▝- COPY;TAN [J]▒5 : 6##)3#▞▞, NEW▛ RETURN▘41,*S:#[B]C▛Y UNPLOT ▟##/:#/"#[B]C▞Y▖▟#/▘#Y~~▄#(CHR$ STR$ GOSUB ###▒##[B]4INKEY$ #[B]CPACS LIST UP# RETURN=K▖Y▖/,,LN H#R*( CLEAR<>#▟##[B]C([W]C,,X[W]C▌LEN ▝[W]4▖Y▝▟##[B]C▀[W]S▝ACS SAVE #[B]C▖Y▖▟##[B]4RND#[B]COACS STEP UP# RETURN=K▖Y UNPLOT /"LN P#R*( CLEAR<># GOSUB #▟##[B]C([X]C,,W[X]C▌CHR$ ▝[X]4▖Y RETURN▟##[U]S▝ACS CONT #[B]C▖Y UNPLOT ▟#ACS #C7#[B]C([U]C,,W[U]C▌CHR$ ▝[U]4▖Y▝▟#ACS #C"#[B]C▀[U]S▖Y▖▟#ACS RNDC4#[B]C([V]C,,X[V]C▌LEN ▝[V]4▖Y RETURN▟#ACS #C▒#[W]S▖Y UNPLOT ▟#ACS SACS SACS SACS S#▒6##5 SGN #CHR$ V# RETURNB4▖STR$ #,# RETURN GOTO TAB ###M##TAN Y▛[7]COS RETURN▘TAB ▒#U£##U:#[S]COS UP# RETURN~~K9#ACS #C▝CHR$ M RETURN6C,, RETURN7C▌▞ RETURN#▜#▞▖5:#[-] RETURN GOTO ASN ## RETURN LLIST ASN ##TAN RETURN;SQR ACS #4+U## RETURN,S▛ RETURN1SQR ▞ /, RETURN/SQR ▞▌/<U## RETURN#S▖▞EXP /▒ RETURN#SQR RETURN#**▞PEEK U£#█ RETURNBSQR RETURN8**▞ POKE #▜# RETURN▖S6 RETURN▞C"UP# RETURN▛KD▞ LIST /#ACS #C▌LN [*]#/BUP# RETURN2SQR ▞ POKE /#ACS #C▖▞▒/+UP# RETURN,,SQR ▞ SAVE /*ACS #COS Y RAND ACS #LN 3#TAN /~~#XACS Z▗▗ GOSUB #█#UP# RETURN?KAU:#ACS #C▝CHR$ 2 RETURNGC▖ RETURNH4+CHR$ ~~ACS #C▝LEN M5 ##▝▞ CONT #ACS INKEY$ C▝ GOSUB #ACS #C▝ GOSUB #5##▚#TAN U:#ACS #C▝CHR$ #▞£ RETURN.COS ▞▞TAN U###[J]2~~LN ▘###U###[J]LN ▘#[(] PAUSE TAB # GOSUB ###[>] PAUSE ASN # GOSUB #█ GOSUB #LEN :#U##5##ACS #4▘G)+##5USR :;█#U##ACS ##C▝ GOSUB #▗▗M##[J]MZ#TAN [▒]<6##TAN E4#77M:#7#<>E£#<># ACS #4▖ACS NEWACS <=# NEW▛ RETURN▘C3 RETURN▞CH CLEARE:# CLEAR# <>Q : LN [£]#ACS #4C# NEW▛CODE <#TAN U:# RETURN#K▖ RETURN1K AND ACS INPUT ACS PEEK #J#5##ACS #C▘GU:###J#E4#)▛ ;#~~#E4#77M:#7#<>E:#<># :▘LN [£]#ACS #46# NEW▛ RETURN▞C9ACS #40 CLEARE£# CLEAR# # NEW[?]<># ACS #43 NEW▛CODE <#TAN ACS [<]#[0]#ACS [.]#[4]#5##ACS #C▘GU£###[0]#E4#)▛ ;###E## GOSUB #** LPRINT LPRINT TAN 9#[B]""EA#68#TAN ▞~~ RETURN#S▝▞:UR#XACS Z▗▗ GOSUB #█ACS #C▝ GOSUB #ACS INKEY$ C▝ GOSUB #5##▚#▒M=#<>E=#<> GOSUB #ACS INKEY$ C▝ GOSUB #5###▚#TAN R#XACS Z▗▗▗CHR$ (ACS #4▝ GOSUB #5##▚#TAN GOSUB #2#) ###7##F#[J][S]COS VAL <> LPRINT LN TAB #C▀E2#▒#7#[J][U]C$STR$ <> LPRINT FASTLN TAB ##▒[W] LPRINT S▞#F#### FOR ###UL#5##[B]C▘7) ##,MM#LN 0#TAN Y▘MR#[J]M##MU#5 E##6[W]#E2#64#LN A##7##[B]C# GOSUB #4#E2##7#LN ▌#LN ▙#C▞LN ###[Q]#UR#5Q#[Y]ABS ##5L#Y█[I]#ACS #4▖5P#O<>E6#<># <># COPY<>#▖<>#▀<>7<>7<>66#5R#O[J]MU#E##776##LN THEN#LN ###[K]#UU#[B]46LN ▙#[B]) █ASN ▗#UR##- #▗#L#ACS █#2 /XUR# RETURN▘COS LN >=#<>E6#<>#▀<>#▖5 [B] GOSUB # FOR #[(]#LN I#UR#5##[Y]S$5Q#[Y]4▛UV#[B]TAB LLIST #LN ## GOSUB #W#5U#ACS LEN <>E6#<>#▝<>#▘[B] GOSUB #ABS [Q]#<>#▝<>#▘LN SLOW#5 [B] GOSUB # FOR <># <># COPY[B] GOSUB #K[<]UR# RETURN▘ATN CLS##[Q]# FAST<>4-E##<>~~7<>▘W[B] LPRINT TAN CLEARE4#LN ▜# NEW▛""E## CLEAR▀#TAN LN ## GOSUB #4#[B] GOSUB PICOS ,, FAST GOSUB #8##7# FOR [B] GOSUB PI,,4 PLOT 7 GOSUB #4#SGN #7#TAN UQ#5#UQ#5##[Y]KCU##▗#I UL#[B]C▛ FOR 5 [B] GOSUB #) ▟; FOR <>E6#<>#▝<>#▘[B] GOSUB #K▖LN H#TAN GOSUB #W#UL# INPUT █LN ▐#MV#TAN ##LN >=####[J]MS#M##M##▞#)+#, NEW▛M=# RETURN▞4~~,5##ACS #C▘G#<>E=#,ACS #<>#5##▚##7▚#<(SGN RETURNISQR U##ACS #C▝ GOSUB # RETURN▌**MS#TAN Q#5 █6[W]#TAN ▝Y▝MQ#TAN 5L#Y█[I]#ACS #C▖5P#PE6#FF66#5R#PE2#F#F# GOSUB #E#F#F#62# GOSUB #4#E##FF6##LN ##TAN R# RETURN▘"" TAN U##5Q#[Y]K.5##▐#U##[Y]S(UR# RETURN▘C▞LN >=##U# LPRINT LPRINT TAN E4#TAN <>E4#<>#▝LN [:]#6 PAUSE #<>#▀LN [:]#6 PRINT #YHM POKE # E8#U##M##U##M##TAN UR# RETURN▝4£ CLEAR5##TAN #E4#[B] GOSUB ###2▌LN ▘#AT LPRINT #ACS #4▘▀# NEWZ[U]ASN ##7ACS #C INPUT Y█MT#TAN <<<<< ZXCHESS-II >>>>> (EXPERIMENTAL)PLAY,ANALYSE OR LOAD (P,A,L)? YOUR COLOUR(B,W)? LEVEL OF PLAY? (0-6) COLOUR TO MOVE NEXT?(B,W) MOVE NUMBER? (NN) ZXCHESS PLAYER 17
0
0
0
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.