SPECTRUM CHESS

by Christopher Leigh

from Sinclair User, October 1982



[I've corrected several errors in the listing, which are marked in]

[INVERSE in SPECHESS.TAP.                                         ]

[Some of the English in this article doesn't make much sense. JimG]



UPGRADING THE MANUAL



Christopher Leigh details attempts to improve Sinclair chess pieces.



WHEN I received my Spectrum, just six weeks after it was arrived I

working quickly through the instruction manual provided. I found very

few mistakes and some stimulating ideas but the chess routine which

was provided gave such a tiny display a magnifying glass was needed to

distinguish the pieces. I set to work to write a bigger version.



I started with a piece of graph paper, thinking about the chess pieces

and how they could be improved. The obvious aim was to make them

bigger but that meant using more than one character space for each

chess piece.



It would have been good to fill the screen with a 24*24 display but I

settled for a 16*16 one. That meant that each chess-board square

consisted of four printing spaces arranged 2*2.



Printing the board was fairly easy; the labelling was added later. A

white screen was kept for ease of reading, though a black screen would

probably look more impressive.



The board was printed using PAPER colour controls so that INK could be

reserved for the pieces. It seemed more sensible than, for example, to

print one large magenta and then to put green ink squares over it,

which would have involved using "Inverse"; Inverse can be confusing.



Using the graph paper I drew the pieces, shading-in with a pencil each

little square - representing a pixel - which needed inking-in. That

was translated into a binary code which could be POKEd. The user

graphics are of memory.



Three considerations affected the shape of the pieces. They had to

leave enough margin to show clearly the colour of the square on which

they were printed.



They had to be very clearly distinguishable. For that reason pawns

were made smaller than other pieces. The third consideration was more

awkward. Each piece occupies a 2*2 square, requiring four user

graphics to define it. There are six different pieces in chess so that

24 graphic characters would seem necessary but only 21 are available.



The answer was to share some of them between pieces; the fourth

quarter of the queen is the same as the corresponding quarter of the

knight and the complete bottom half of the king is the same as that of

the rook.



The rook consists of USR "a" followed by USR "b" with USR "e" and USR

"d" underneath. Each drawing was labelled with the appropriate USR

letter and then the binary codes worked out for each graphic. Each

pixel is represented by a 0 for paper and a 1 for ink.



The codes can be POKEd into memory as binary numbers using BIN but as

there were so many to do they were translated into decimal to reduce

the typing.



The original drawings and binary codes have been kept for ease of

operation should I wish to change the shape of any piece. Figure 1

[Not included here. JimG] shows how this all works out for the rook.



With the pieces complete the most laborious part of the job was over.

The next task was to put the pieces on the blank board. The user

graphics could be typed-in but that would make any kind of game impossible.



The pieces must be held in a string or array. I settled for an 8*8*4

string array so that each board position was fully- defined and all

four labels for the user graphics could be put into the array for each

piece, which proved to be fairly simple. The use of upper- and

lower-case letters gives the array an extra dimension so the computer

always knows the colour of any pieces referred to.



Once the board array was set up, printing it was merely a question of

getting the numbers correct so that the proper graphic was printed at

the correct position. Number juggling was also needed when entering moves.



At that stage I was able to run the program and see if it worked. It

did; I was bothered by the blank screen at the start of the program,

which occurs while the machine processes lines 1-1000. To prevent the

player thinking something was wrong lines 70-90 were added.



Other improvements were made.



There was a long wait between printing white and black pieces. The

Spectrum was printing blanks all over the centre of the board.

Variable "w" was used to suppress such stupidity on the first run. On

subsequent runs the player has to suffer space printing, as it is used

to erase pieces which are out of place.



The complete listing is shown in figure two. The program puts board

and pieces on the screen and then allows you to move them at will.

Pawns automatically become queens on last rank, castling has to be

done in two moves. Games can start with the pieces put in any position.



Lines 70-90 print a title and flashing "Thinking!" so the screen is

not blank during the few seconds it takes to run through the user

graphics and setting-up the board array.



Lines 100-350 poke the user graphics. Since only 21 are available,

three are used twice by the chess pieces.



Lines 500-640 set up the two- dimensional string array which is used

to hold the positions and the make-up of each piece. Each letter of

the string points to the user graphic which defines a quarter of the

piece. The use of upper- and lower-case allows you to distinguish

between black and white pieces. The dimension statement (520) re-sets

the array automatically.



Lines 1000-1130 print the blank board using magenta and green. They

were chosen to give maximum contrast and therefore clarity for the

pieces which were black and white for simplicity [The listing actually

uses blue and white. JimG]. It is spaces that are printed using colour

control characters (see page 115 of the manual) [Actually page 86.

JimG] to define their paper colour. Remember to switch back to white

paper after the fourth space.



Lines 1500-1620 print the pieces on the board using black [blue] or

white ink. Paper 8 keeps the board squares their original colour [The

printed listing used PAPER 0. JimG]. Lines 1580 and 1590 keep the

print position within the correct 2*2 square.



Lines 2000-2200 enter the piece moves checking at 2120 that the move

is within the board and allowing you to stop the game. Either capitals

or lower-case are accepted in input, 2140 unprints the old position

and 2160 prints the new, 2155 and 2156 convert pawns to queens.



The variable set in 2150 allows use of earlier lines as a subroutine.

It is re-set in 1520. Variable w (set in 260) allows the omission of

some printing - blank squares on the initial run (line 1615) and

reprinting the board (line 650) in subsequent games. w is reset at 2190.

