Sargon A Computer Chess Program
Sargon A Computer Chess Program
https://archive.org/details/sargoncomputerchOOspra
SARGON
SARr.ON -- R LOCK O t A r. RAM
DRIVER CHARTR
ANALYS CHARTR
E
BLNKER
ROY ALT
SARGON
.!>efs"RP_-:
I NTERR -- CHARTR
-
PGIFND -- :Q_S �B!lD
INITBD
TBCPCL
POINTS :�J\rj-Aci:
Xr.HNr. NF.XTAO
LIMIT
r - - - - - - - - - -- - - � -- - - - - - - 1
�
I
CASTLE ATIAC�-,
t=
I
ADMOVE
ADJPTR
AOJPTR I
I
I
INCHK -- :-AtTAC_K I
:.__ - - - - - - - -- - - - - - - - - - - - - - - - - - - - _J
c :��:q;
INCHK -- :_AITt-CK_'
PNFNn
XCHNI. --NEXTAD
LIMIT
IJNMOVF.
ASr.F.NO -- I JNMOVF.
llNMOVE
F CDMA T b BOOK
M AT E O � CO NVRT
RLNKER
r- OIVIOF.
L_ MLTPLY
INSPCF.
CllARTR
TBPL'MV
[
INOIK --�A fr)� � : r - - - - - -- -- --- - -- - - - - ;
PLYRMV CHARTR
OS PBRO CONVRT r- DIVIOE : DSPIRD
L_ MLTPLY 1
ASNTBI -- MLTPLY
I
- - - - ·- - - - - - - - - - - - I
��OVE r
I 1ATTACK
l_ ATKSAV -- PNCK
�
r - '
INC!IK --lAJTA�K •
� - - -- - - - - - - - - - - - - - - _J
PGIFND --�D�PBRD :
TBPLCL
DAN AND KATHE SPRACKLEN
3 4 5 6 7 8 9 PRINTING
79 80 81 82 83 84 85 86 YEAR
CONTENTS
Meet Sargon 1
The Ches board in Computer Graphics 3
Chess Piece Summary . . . . 6
Users Guide to Sargon 11
Notes on the Implementation of Sargon 17
Equates ..... . 19
Direction Tables 20
Point Value Array 20
Board Array 21
Attack List 22
Pinned Piece Array 22
Score and Ply Tables 23
Table Indices Section 24
Variables Section 25
Move List Section 27
Board Setup Routine 28
Path Routine 29
Piece Mover Routine ... ... .. . . 30
En Passant Routine 32
Adjust Move List Pointer .. . 33
Castle Routine ....... .. .. . 34
Admove Routine 36
Generate Move Routine . 37
Check Routine .. .... ...... .... ... ..
. . . . . . 38
Attack Routine 39
Attack Save Routine .. .. ... . .. . ... . . .. . . .. . .
. . . . . . . . .... .. ...... .. .. .. .....
. . . . . . 42
Pin Check Routine 43
Pin Find Routine 44
Exchange Routine 47
Next Attacker/Defender Routine 48
Point Evaluation Routine 49
Limit Routine 51
Move Routine 54
Un-Move Routine 56
Sort Routine 58
Evaluation Routine 59
Find Move Routine 60
Ascend Tree Routine 64
One Move Book Opening 65
Graphics Data Base 66
Standard Message 67
Graphics Variables 68
I/0 Macro Definitions 68
Main Program Driver 69
Interrogation for Ply & Color 71
Computer Move Routine 73
Forced Mate Handling 75
Tab to Player's Column 76
Tab to Computer's Column 76
Tab to Player's Column w /o Move No. . . .. 77
Tab to Computer's Column w/o Move No. 77
Board Index to ASCII Square Name ... ........... ... 78
Player's Move Analysis ....................... ........ ................ ........ ........... . . 79
ASCII Square Name to Board Index ...... .... .. ....................... .... . ... ....... 80
Validate Move Subroutine ......... . ................ ..... ...... . .... ............. 81
Accept Input Character ................ ... ............... . ......... ..................... 82
New Page if Needed ..... . ....................................... ....... ................................
. 83
Display Mated King ................................................ . ............ ........... . .......... 84
Set Up Position for Analysis . ............................. ......... ..... ...... ............... . 85
Update Positions of Royalty .. ......... .............. ........ . . . .... .. ... ............ .... 88
Set Up Empty Board ...................... ........ ... .......... .. . .... ..... . .......... ... 89
Insert Piece Subroutine ...................... ............... .... .... . ... . ..... .... .......... 91
Board Index to Norm Address Subr. . ..... . . . . . ... ...................... 93
Positive Integer Division ... ......................... .. . . . ... . ... ....... ..... ... 94
Positive Integer Multiplication ................. .......... .. . .......... ..... .......... 94
Square Blinker .... ........ . ......... ....... ... ... . .. . . . . .. .................... 95
Execute Move Subroutine . ...................... ............. . ... ... ...................... 97
Make Move Subroutine . .... . .......... . ... . ... .... ..... .. ... . ..... ...... 98
TDL/ZILOG Mnemonics Conversion . ... ........ ....... ...... 99
Index to Subroutines .. . ......... . ..... . . .......... . . .. ... ... .. ... ............ 113
MEET SARGON
1
to adjust all the parameters in transferring the parameters up one ply in the
tree.
At the bottom of FNDMOV's call list on the block diagram is BOOK. BOOK
provides an opening book of a single move. If white, SARGON will play P-K4 or
P-Q4 at random. If black, SARGON replies to any opening move with P-K4 or
P-Q4, whichever is most appropriate.
The move selection logic of FNDMOV is embedded in a whole network of
routines that forms SARGON's interface to the outside world. The DRIVER
routine initiates and coordinates the entire game. First on the block diagram in
DRIVER's list of calls is CHARTR (Accept Input Character). CHARTR is a
totally machine-dependent input routine whose sole purpose is to accept a single
character input from the keyboard. All machine-dependent aspects of SARGON
have been isolated in this manner to simplify conversion to Z-80 machines
running under different operating systems. Machine-dependent code appears in
only two other places. The first is the macro definition area, where all the output
functions are listed, and the second is in the routine DSPBRD (Display Graphics
Board and Pieces), where machine-dependent lines of code are clearly marked.
Next on the block diagram is ANALYS (Set Up Position for Analysis).
ANALYS allows the user to set the board to any position of his choosing. The
routine blinks the graphics board squares in turn, allowing the user to input a
piece of his choice or leave the contents unchanged. When the board has been set
to the desired arrangement of pieces, play of the game may be resumed.
ANALYS also provides a handy means of correcting a move entered by mistake.
As a part of game initialization, DRIVER calls INTERR (Interrogate for Ply
and Color). INTERR questions the player for his choice of white or black, and
allows him to select the depth of search. DSPBRD and INITBD complete ini
tialization by setting up the graphics board display and internal board array.
PGIFND (New Page if Needed) and TBCPCL (Tab to Computer's Column) are
used to control spacing in the move list. The move list is displayed to the left of the
graphics board on the video screen.
The most important routines called by DRIVER are, of course, CPTRMV and
PLYRMV, which are control routines for the computer's and player's moves,
respectively. Central to CPTRMV is FNDMOV, the logic to select the computer's
move, which has already been discussed. Below FNDMOV on the block diagram is
FCDMAT (Forced Mate Handling). If the computer is checkmated, it acknowl
edges the fact with a message displayed in the move list and by tipping over its
king. Assuming the computer is not mated, MOVE makes the chosen move on the
board array and E XECMV displays it on the graphics board. In displaying the
move, the piece first blinks a few times, moves to its new location, and then blinks
a few times again. The function of BITASN (Board Index to ASCII Square Name)
is to convert the internal move into a representation in algebraic chess notation on
the move list, then INCHK determines whether or not the computer should call
((Check."
When the opponent is on the move, PL YRMV controls the events. It calls
CHARTR to accept the move entry. ASNTBI (ASCII Square Name to Board
Index) converts the move to internal representation. Then VALMOV checks the
2
player's move for validity. If the n1ove is legal, E XECMV displays it on the
graphics board as in CPTRMV. PGIFND (New Page if Needed) and TBPLCL (Tab
to Player's Column) control spacing in the move list.
Sargon Player
"'$."""·>;"
. .,,,
";<;;�
:::::.
3
The empty board and move list area are displayed using the block move
feature of the Z-80. It requires no stored data. The memory required to store the
piece shapes has been kept to a minimum through use of the concept of boundary
and kernel dots.
Graphles Control
On the Jupiter III System, every graphics byte is of the form:
1X5 Y4 Y3 Y2 Y1 Yo
IF Y0 = 1
IFY4=1
"U�
IFY5 = 0
'Z
rf
"'""
���
Graphics Characte rs
By varying and ombining bits that ar turn d on, a tot.al of 64 differ nt
graphic characters may be produc d. For exan1ple:
Now, 1010 0101 = 165 in decimal, which can be used as the ASC II code for
this character.
Dot Column
2 3 4 5 6 7 8 9 10 11 12
2 1 2 3 4 5 6
5 7 8 9 10 11 12 2
6
Dot Row Block Bar
7
8 13 14 15 16 17 18 3
10
11 19 20 21 22 23 24 4
12
2 3 4 5 6
Block Pillar
5
CHESS PIECE Sl!MMABY
Each square is 12 x 12 graphics dots,
and 6 x 4 bytes.
the square relative to the base address Base Base Bose Base
Base + + + +
are on the chart. The alterable portions 1H 2H 3H 4H
of the square are referred to as the field.
Norm
Base Base Base Base
+ + + +
41H 42H 43H 44H
-
Field
For each type of piece the tables on the following pages will give the piece
shape and four field configurations:
Black on White
Black on Black
White on Black
White on White
All field values are in hexadecimal. Only the black on white configuration is
stored in the graphics data base.
6
KING
B0 BB 90 B0 BF B7 AF BF
BC BA BB 94 B3 B5 B7 AB
AF BF BF B5 90 B0 B0 BA
B3 B3 B3 Bl BC BC BC BE
QUEEN
90 B0 B0 90 AF BF BF AF
BF B4 BE 95 B0 BB Bl AA
BB BF 9F Bl B4 B0 A0 BE
B3 B3 B3 Bl BC BC BC BE
AF BF BF AF 90 B0 B0 90
AB 9B B9 AA 97 A4 B6 95
B6 AF A7 BE B9 90 9B Bl
BC BC BC BE B3 B3 B3 Bl
7
ROOK
B0 B0 B0 B0 BF BF BF BF
BA BE BD B5 B5 Bl B2 BA
B0 BF BF B0 BF B0 B0 BF
B2 B3 B3 Bl BD BC BC BE
BF BF BF BF B0 B0 B0 B0
B5 Al 92 BA BA 9E AD B5
BF AA 95 BF B0 95 AA B0
BD BC BC BE B2 B3 B3 Bl
BISHOP
B0 A0 B0 B0 BF 9F BF BF
AB BF BD B0 97 B0 B2 BF
B2 AF B7 B0 BD 90 BB BF
B2 B3 B3 B0 BD BC BC BF
/
x
' /
x
'
x BD BC BC BF B2 B3 B3 B0
/ '
8
KNIGHT
B0 B0 B0 B0 BF BF BF BF
BE BF BF 95 Bl B0 B0 AA
A0 BF BF B5 9F Bl BF BA
B3 B3 B3 Bl BC BC BC BE
89
/
AF BF AA B6 90 B0 95 x
/
9F B9 9F BA A0 B6 A0 B5
BC BC BC BE B3 B3 B3 Bl
PAWN
B0 80 80 80 BF BF BF BF
B0 A0 90 B0 BF 9F AF BF
80 AF 9F B0 BF 90 A0 BF
B0 B3 B3 80 BF BC BC BF
BF BF BF BF 80 B0 80 B0
BF 9F AF BF 80 Af/J 90 B0
BF 9A A5 BF B0 A5 9A B0
BF BC BC BF B0 83 B3 B0
9
TOPPLED KING
Black on White
90 B0 B0 B0
BF BF B7 B0
9F BF BD B0
B0 B0 BB 9D
Black on Black
AF BF BF BF
AB BF B9 BF
A2 BF B6 BF
BF BF B7 A2
Kernel bytes must be moved in from a table in memory. Only one color need
be stored, since the other color is the complement. For each piece, the kernel will
be composed of 6 bytes to be transferred to base plus 41H, 42H, 43H, BlH, B2H,
and B3H. Only the black on black values are stored in the graphics data base.
KING BC BA BB AF BF BF A3 B5 A7 9A BF 9F
QUEEN BF B4 BE BB BF 9F AB 9B B9 B6 AF A7
ROOK BA BE BD B0 BF BF B5 Al 92 BF AA 95
BISHOP AB BF BD B2 AF B7 97 BE 96 BD 9B B9
KNIGHT BE BF BF A0 BE BF B9 AF BF 9F B9 9F
PAWN B0 A0 90 B0 AF 9F BF 9F AF BF 9A A5
Thus, the entire data base required for all pieces to be displayed occupies
only 154 bytes of storage.
10
l!ser's Guide to SARGON
1. To b gin execution:
The start address of SARGON will vary depending on th load addr ss. It will
always be the address of DRIVE R. Once execution has begun, SARGON will ask
you a series of questions:
To play a game of chess respond with ''y ." An answer of '(n" will get you to
the routine that allows you to set up a board position. (See Item 5.)
The player selects white by entering ''w" or black by ''b." Any other key
defaults to black. White always moves first.
This allows the player to select the depth of search. For example, if you select 3
ply, SARGON will consider:
At this point, the board display will appear on the screen. If you choose white,
SARGON will be waiting for your move entry. If you choose black, SARGON
will make its move on the board, print it in the move list, and then wait for your
move entry.
2. To enter a move:
Moves must be entered in algebraic chess notation. This means you must tell
SARGON the file and rank coordinates of the squares you are moving from and
to. The files are lettered a-h and the ranks are numbered 1-8. So the coordinates
of the board are:
11
a b c d e f g h
8 08 b8 c8 d8 e8 f8 g8 h8 8
7 o7 b7 c7 d7 e7 f7 g7 h7 7
6 06 b6 c6 d6 e6 f6 g6 h6 6
5 o5 b5 c5 d5 e5 f5 g5 h5 5
4 o4 b4 c4 d4 e4 f4 g4 h4 4
3 o3 b3 c3 d3 e3 f3 g3 h3 3
2 o2 b2 c2 d2 e2 f2 g2 h2 2
o1 b1 c1 d1 e1 f1 g1 h1
o b c d e f g h
The move itself is entered as ff-tt, so to play the king's pawn up two squares
you would enter:
He7-e5"
To Castle
Just enter the king's move. The rook will tag along. For example, if you are
white and you wish to castle king's side, enter:
Hel-gl"
You will see both your king and rook move. W -�n SARGON castles, he lists it as
0-0 or 0-0-0 as in normal chess notation.
To Capture En Passant
If you wish to capture one of SARGON's pawns using the en passant
privilege, enter your pawn's move. After your pawn move is displayed, SAR
GON's pawn will blink and then vanish. When SARGON captures en passant,
12
his move is displayed on the graphics board in the same way. SARGON prints it
in the move list as PxPep.
If either you or SARGON is checkmated, and you wish to play again,just hit any
key. The screen will blank out and SARGON will ask:
Replies to this question are just like those to the original"Care for a Game?"
If you decide your position is hopeless, or you wish to change a move entered in
error, first wait until it is your turn to move. Then enter "control-R." You will
immediately get the "Care for Another Game?" question. If you want to start
over, type "y," but if you want to correct the board display, type "n." You will
then get the routine that allows you to set up a board position.
If you typed "n" to a "Care for a Game" question, SARGON will now ask:
If you answer "n" to this one, you will be out of SARGON entirely and back
in the computer's monitor state. An answer of"y" will display the board just
as you left it. The lower left-hand corner will blink. That's your signal that
you can change the contents of that square, using one of the analysis
commands.
Backspace
A backspace leaves the contents of the square unchanged and blinks a square in
the other direction. It's the opposite of a <CR>, so you can go either direction.
0
An entry of 0 , or of the space bar, or any key not listed in these commands will
empty the square.
13
<<Enter a Piece"
To enter a piece, type in piece-code, color-code, moved-code.
K - King
Q - Queen
R - Rook
B - Bishop
N - Knight
P - Pawn
Color-code is a letter indicating the side the piece belongs to (also upper or lower
case):
w - white
b - black
Some examples:
«p b 0"
' '
Escape
The escape key will terminate the blinking cycle. SARGON will ask:
An answer of ((n" will go back to setting up the board. If you say <<y" then
SARGON will ask for the information it needs to resume play from this point.
The color choice and search depth questions are the same as in Section 1. In
addition SARGON must be given the answer to:
14
ccWhos move I it?"
6. To t rminat ex cution:
The way out of the SARGON program depends on whether you're at th end of a
game, in the middle of a game, or setting up a board position.
Setting up a board:
15
Notes on the ImplementaUon o£SABGON
1. AR TON wa a embled using the TDL Macro Ass \n1bler, whi ·h do \s not.
u the ZILOG mnemonics. Conversion to ZILOG mnen1onics can b 1 p •r
formed on an in truction for instruction basis using th conversion ·hart
1
3. S ARGON must be loaded at a start address which is an even 256 byte page
boundary (that is, at an address of the form XX00 hexadecimal).
Location Is Change to
DB ¢4 MVI M,80H MVI M,¢ BFH
DB08 MVI M,0BFH MVI M,80H
2 lines above IP04 JRZ IP04 JRNZ IP04
4 lines above IP18 JRNZ IP18 JRZ IP18
2 lines above IP18 JRNZ IP2C JRZ IP2C
1 line below IP18 JRZ IP2C JRNZ IP2C
17
•
· ***********************************************************
I
.
I
.
I SARGO
.
I
.
I Sargon is a computer chess playing program d esig n e d
; anu codea by Dan and Kathe Spracklen. Copyright 1978. All
•
.
,
· **************************************************** *******
I
; EQUATES
· ***********************************************************
,
.
,
PAW N =
1
KN IGH'r =
2
i3ISHOP =
3
ROOK =
4
QUEEN =
5
KING - 6
WHITE -
0
B LA C K -
80H
BPAWN =
BLACK+PAWt
· ***********************************************************
I
; TABLES SECTION
· ***********************************************************
I
s·rART:
. LOC START+80H
'IB�SE START+l00H
· ***********************************************************
I
•
· ***********************************************************
,
DIRECT .-TBASE
.BYTE +09,+11,-11,-09
. BY'rE +10,-10,+01,-01
.BYTE -21,-12,+08,+19
.BYTE +21,+12,-08,-19
.BYTE +10,+10,+ll,+09
. B YTE -10,-10,-11,-09
19
· ***********************************************************
I
; DPO I NT D i r e c t i o n Ta b l e Po i n t e r . Us e d t o d e t e r m i n e
; whe r e to beg i n i n t h e d i r e c t i o n t a b l e fo r a n y
; g iven piece .
· ***********************************************************
,
D PO I N T . -T BAS E
. BYTE 20 , 16 , 8 , 0 , 4 , 0 , 0
· ***********************************************************
I
; DCOU N T D i r e c t i o n Ta b l e Co u n t e r . Us e d t o d e t e r m i n e
•
, t h e n u m b e r o f d i r e c t i o n s o f mo v e m e n t f o r a n y
. .
; g i ven p i ece .
· ***********************************************************
I
DCOU NT =
. -T BAS E
. B YTE 4,4,8,4,4,8,8
· ***********************************************************
I
; PVA L U E Po i n t Va l u e . G i v e s t h e po i n t v a l u e o f e a c h
; p i e c e , o r t h e wo r th o f e a c h p i e c e .
· ***********************************************************
I
P VAL U E . - T BA S E - 1
. B YTE 1 , 3, 3 , 5 , 9 , 10
· ***********************************************************
I
; P I EC ES Th e i n i t i a l a r r a n g e me n t o f t h e f i r s t r a nk o f
; p i e c e s o n t h e bo a r d . U s e t o s e t up t h e bo a r d
; fo r t h e s t a r t o f t h e g a m e .
;***********************************************************
P I EC� S =
. -T B AS E
. BYTE 4,2,3,5,6,3, 2,4
20
.
I BOARD Boa r d Ar r ay . U s e d t o h o l d t h e c u r r e n t po s i t i o n
•
I o f t h e bo a r d d u r i ng p l a y . Th e bo a r d i t s e l f
.
I l oo k s l i k e :
•
I FFFFFFFFFFFFFFFFFFFF
•
I FFFFFFFFFFFFFFFFFFFF
.
I FF0 4 0 20 30 50 6 0 30 20 4FF
•
I FF0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1FF
.
I FF0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0FF
•
I F F0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 F F
•
I FF0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0FF
•
I F F0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0F F
•
I FF8 1 8 1 8 1 8 1 8 1 8 1 8 1 8 1FF
•
I FF8 4 8 28 3 8 58 6 8 3 8 28 4FF
•
I FFFFFFFFFFFFFFFFFFFF
•
I FFFFFFFFFFFFFFFF FFFF
•
I Th e v a l u e s o f F F f o r m t h e bo r d e r o f t h e
•
I bo a r d , and a r e u se d t o i nd i c a te w h e n a p i e c e
•
, mo v e s o f f t h e bo a r d . Th e i nd i v i d u a l b i t s o f
•
I t h e o t h e r b y t e s i n t h e bo a r d a r r a y a r e a s
•
I f o l l ow s :
•
I B i t 7 - - C o l o r o t the p i e c e
•
I 1 -- B l ac k
•
I 0--
Wh i te
•
I Bit 6 No t u sed
•
I Bit 5 No t u s ed
•
, Bit 4 C a s t l e f l ag f o r K i ng s o n l y
•
I Bit 3 P i e c e h a s mo v e d f l a g
•
I B i t s 2 - 0 P i e c e type
•
, 1 Pa wn
•
I 2 Kn i g h t
.
I 3 B i shop
•
I 4 Ro o k
•
I 5 Qu e e n
•
, 6 K i ng
•
I 7 No t u sed
•
I 0 Empty Sq u a r e
· ************************************************************
I
B O A RD - . -T B A S E
B O A RDA : . BLK B 1 20
21
· ************************************************************
I
: A T K L I S ·r -- At tac k Li s t . A two pa r t a r r ay , t h e f i r s t
.I h a l f f o r wh i t e a n d t h e s e c o nd h a l f f o r b l a c k .
•
I I t i s u s e d t o h old t h e a t t a c k e r s o f a n y g i v e n
.
I s qua r e i n t h e o r d e r o f t h ei r v a l ue .
.
I
; BACT B l a c k A t t a c k C o un t . Th i s i s t h e eig h t h by t e o f
; t h e a r r a y a nd d o e s t h e s a m e f o r bla c k .
· ***********************************************************
I
WAC T =
A T K L S 'I '
B AC T =
AT K L S T + 7
ATKLS T : . WO RD 0,0,0,0,0,0,0
· ***********************************************************
I
PL I ST =
. -T BA S E -1
PLI STD =
PL I S T + l 0
P L I S TA : . WO RD 0 ,0, 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0
· ****************************************************��*****
I
•
I POS K Po s i t i o n o f K i n g s . A two by t e a r e a , t h e f i r s t
•
I by t e o f w h i c h h o l d t h e po s i t i o n o f t h e w h i t e
•
I k i n g a n d t h e s e c o n d h o l d i n g t h e po s i t i o n o f
•
I the bl ac k k i ng .
•
I
POS K : . BYTE 24 , 9 5
POSQ : . B YTE 14 , 94
. BYTE -1
22
· ************************************************************
I
; SCORE Sc o r e Ar r a y . U s ed d u r i n g A l p ha-Be t a p r u n i ng t o
; h o l d t h e s c o r e s a t e a c h pl y . I t i n c lu e s t w o
; " d u mm y " e n t r i e s f o r p l y -1 a n d ply 0.
· ************************************************************
I
S CORE : . WO R D 0,0,0,0,0,0
· ************************************************************
I
•
I PLY I X P l y Ta b l e . Co n t a i n s pa i r s o f po i n t e r s , a pa i r
•
I for each ply . T h e f i r s t po i n t e r po i n t s t o t h e
.
' t o p o f t h e l i s t o f p o s s i b l e mo v e s a t t h a t p l y .
.
' T h e s e c o n d p o i n t e r p o i n t s t o w h i c h mo v e i n t h e
•
I l i s t i s t h e o n e c u r r e n t l y be i ng c o n s i d e r ed .
· ************************************************************
,
PLY I X : . WO R D 0,0,0,0,0,0,0,0,0,0
. WO R D 0,0,0,0,0,0,0,0,0,0
· ************************************************************
I
; S T AC K C o n t a i n s t h e s ta c k f o r t h e p r og r am .
· ************************************************************
I
. LOC S TA RT + 2 F F H
S TAC K :
23
· ************************************************************
'
; TAB L E I N D I C E S S EC T I ON
•
'
; M l -M4 W o r k i ng i n d i c e s us e d t o i n d e x i n t o
•
' t h e boa r d a r r ay .
.
'
; 'T l -T3 Wo r k i n g i n d i c e s us e d t o i n d e x i n t o D i r e c t i o n
.
' C o un t , D i r e c t i o n V a l ue , a n d P i e ce V a l ue t a b l e s .
.
'
; I NDX l Ge n e r a l wo r k i n g i n d i c e s . U s ed f o r v a r i ous
; IN D X 2 pur po s e s .
•
'
; NP I NS Num be r o f P i n s . C oun t a n d po i n t e r i n t o t h e
.
'
; M LPTRI Po i n t e r i n t o t h e p l y t a b l e w h i c h t e l l s
.
' w h i c h p a i r o f po i n t e r s a r e i n cur r e n t us e .
•
'
; M L P TR J Po i n t e r i n t o t h e mo v e l i s t t o t h e mo v e t h a t i s
•
' cur r e n t l y be i n g p r o c e s s ed .
.
'
; SCRI X Sc o r e I n d e x . Po i n t e r t o t h e s c o r e t a b l e f o r
•
' t h e p l y be i n g e x a m i n e d .
•
'
; B ESTM Po i n t e r i n t o t h e mo v e l i s t f o r t h e mo v e t h a t
.' i s c u r r e n t l y c o n s i d e r e d t h e be s t b y t h e
•
' A l p h a - B e t a p r un i n g p r o c e s s .
•
'
; M LLST Po i n t e r t o t h e p r e v i ous mo v e p l a c e d i n t h e mo v e
.
' l i s t. U s e d d u r i n g g e n e r a t i o n o f t h e mo v e l i s t .
•
'
; M LN X T Po i n t e r t o t h e n e x t a v a i l a b l e s p a c e i n t h e mo v e
•
' 1 i s t.
.
'
· ************************************************************
'
. LOC S TA RT + 0
Ml : .WO RD T BA S E
M2 : . WO RD T BA S E
M3 : .WO RD T BA S E
M4 : . WO RD T B AS E
T1 : .WO R D T BA S E
T2 : .WO RD T BA S E
T3 : . WO R D T B AS E
I NDX l : . WO RD T B AS E
I ND X 2 : . WORD T BA S E
NP I N S : . WO R D TBAS E
M L P'I'R I : .WORD P LY I X
M L P T RJ : .WO R D 0
SCRI X : . WO RD 0
B E STM : . WO RD 0
M LLST : .WO RD 0
M LN X T : .WO RD MLIST
24:
· ************************************************************
I
; VA R I A B L E S S E C T I O N
•
I
; KOLOR I n d i c a t e s c o mp u t e r ' s c o l o r . Wh i t e i s 0 , a nd
•
I
Bl ack i s 8 0H •
•
I
; COLOR I n d i c a t e s c o l o r o f t h e s i d e w i t h t h e mo v e .
•
I
; Pl-P3 W o r k i n g a r e a t o h o l d t h e c o n t e n t s o f t h e bo a r d
.
I a r r ay f o r a g i v e n squa r e .
•
I
; P MA T E Th e mo ve n umbe r a t wh i c h a c h e c k m a t e i s
•
I d i scove r ed d u r i ng l o o k ahead .
•
I
; M OV E N O C u r r e n t mo v e n u m be r .
•
I
; P LYMAX M a x i mu m d e p t h o f s e a r c h u s i ng A l p h a -B e ta
•
I p r u n i ng .
•
I
; N P LY C u r r e n t p l y n u mb e r d u r i n g A l p h a - B e t a
•
I
p r u n i ng .
.
I
; C K F LG A n o n- z e r o v a l u e i nd i c a t e s t h e k i ng i s i n c h e c k .
•
I
; M A T EF A z e r o v a l u e i n d i c a t e s n o l e g a l mo v e s .
; VALM Th e s c o r e o f t h e c u r r e n t mo v e be i n g e x a m i n e d .
.
I
; B RD C A m e a s u r e o f mo b i l i ty equ a l to the to t a l n u m be r
•
I o f s q u a r e s w h i t e c a n mo v e t o m i n u s t h e n u m b e r
.
I b l a c k c a n mo v e t o .
•
I
; PTS L Th e ma x i m u m n umbe r o f po i n t s wh i c h c o u l d be l o s t
•
I t h r o u g h a n e x c h a n g e by t h e p l a y e r n o t o n t h e
.
I
mov e •
.
I
; P TS W l Th e m a x i m u m n u m b e r o f p o i n t s w h i c h c o u l d b e w o n
•
I t h r o u g h a n e xch a n g e b y t h e p l a y e r n o t o n t h e
.
I move .
.
I
; PTSW2 Th e s e c o n d h i g h e s t n u m b e r o f po· i n t s w h i c h c o u l d
.
I be wo n th r o u g h a d i f f e r e n t e x c h a n g e by t h e p l ay e r
•
I n o t o n t h e mo v e .
.
I
; BC0 Th e v a l u e o f bo a r d c o n t r o l ( B RD C ) at ply 0 .
25
•
I
; MV0 Th e v a l u e o f ma t e r i a l ( MT R L ) at ply 0 .
•
I
; PTSC K A n o n - z e r o v a l u e i nd i c a t e s t h a t t h e p i e c e h a s
•
I
j u s t mo v e d i t s e l f i n t o a l o s i ng e x c h a n g e o f
•
I ma te r i a l •
•
I
; B MOV E S O u r v e r y t i n y boo k o f o p e n i ng s . De t e r m i n e s
•
I t h e f i r s t mo v e f o r t h e c o mp u t e r .
•
I
· ************************************************************
I
K O LOR : . BYTE 0
C O LO R : . B YTE 0
Pl : . BYTE 0
P2 : . BYTE 0
P3 : . B YT E 0
PMATE : . B YTE 0
MOV E N O : . BYTE 0
P L Y MA X : . BYTE 2
N PLY : . B YTE 0
C K F LG : . B YTE 0
M AT E F : . BYTE 0
VALM : . BYTE 0
B RDC : . BYTE 0
PTSL : . B YT E 0
PTSW l : . BYTE 0
P T SW 2 : . BYTE 0
MT RL : . BYTE 0
BC 0 : . BYTE 0
MV0 : . BYTE 0
P T SCK : . BYTE 0
BMOV E S : . B YTE 35, 55, 1 0H
. B YT E 34 , 54 , 10H
. B YTE 85, 65, 10H
. BYTE 84 , 64, 10H
26
· ************************************************************
I
; M OV E L I S T S E C T I O N
•
I
; M L I ST A 2 0 4 8 b y t e s t o r a g e a r e a f o r g e n e r a t ed mo v e s .
•
I T h i s a r e a mus t b e l a r g e e n o ug h t o h o l d a l l
.
I t h e m o v e s f o r a s i ng l e l e g o f t h e m o v e t r e e .
.
,
; MLEND Th e add r e s s o f t h e l a s t a v a i l a b l e l o c a t i o n
.
, i n t h e mo v e l i s t .
•
,
; M LPTR T h e Mo v e L i s t i s a l i n k e d l i s t o f i n d i v i d ua l
•
I m o v e s e a c h o f w h i c h i s 6 b y t e s i n l e n g t h. T h e
•
, m o v e l i s t p o i n t e r (M L PT R ) i s t h e l i n k f i e l d
•
, w i t h i n a mo v e .
.
I
; M L F RP T h e f i e l d i n t h e mo v e e n t r y w h i c h g i v e s t h e
•
, b o a r d p o s i t i o n f r o m w h i c h t h e p i e c e i s mo v i n g .
•
,
; M LTO P T h e f i e l d i n t h e mo v e e n t r y w h i c h g i v e s t h e
•
, b o a r d p o s i t i o n t o w h i c h t h e p i e c e i s mo v i n g .
•
I
; M L F LG A f i e l d i n t h e mo v e e n t r y w h i c h c o n t a i n s f l ag
•
I i n f o r m a t i o n. T h e m e a n i n g o f e a c h b i t i s a s
•
, f o l l o w s:
•
I Bit 7 T h e c o l o r o f a n y c a p tu r e d p i e c e
•
I 0 Wh i te
.
, 1 Bl ack
.
, Bit 6 Doub l e mo v e f l a g (s e t f o r c a s t l i n g a n d
.
I e n p a s s a n t p a w n c a p tu r e s )
.
I Bit 5 P a w n P r o mo t i o n f l a g ; s e t w h e n pa w n
•
I p r o m o t e s.
•
I Bit 4 W h e n s e t , t h i s f l ag i nd i c a t e s t h a t
.
, t h i s i s t h e f i r s t mo v e f o r t h e
•
, p i e c e o n t h e mo v e .
.
I Bit 3 Th i s f l ag i s s e t i s t h e r e i s a p i e c e
.
, c a p tu r e d , a n d t h a t p i e c e h a s m o v e d a t
.
, l e a s t o n c e.
.
I B i ts 2-0 D e s c r i b e t h e c a p tu r e d p i e c e. A
•
, z e r o v a l ue i n d i c a t e s n o c a p tu r e .
•
,
; MLVAL T h e f i e l d i n t h e mo v e e n t r y w h i c h c o n t a i n s t h e
•
, s c o r e a s s i g n e d t o t h e m o v e.
•
,
· ************************************************************
,
27
. LOC S TART + 3 00H
ML IST : . BLKB 2048
M LE N D =
M L I S T + 20 4 0
M LPTR -
0
MLFRP =
2
M L TOP =
3
M L F LG -
4
M LVAL =
5
; PROGRAM CO DE S ECT I O N
· ************************************************************
I
; B OA R D S E T U P RO U T I N E
· ******** ****************************************************
I
I CALLED BY : DR I V E R
•
I
I CALLS : No n e
•
I A RG U M ENTS : No n e
•
I
· ******************************************************�******
I
I N I TBD : MV I B ,1 20 ; P r e - f i l l b o a r d wi t h - l ' s
LX I H , BOARDA
MV I M , -1
I NX H
DJ N Z .-3
MV I B,8
LXI X , BOARDA
IB2 : MOV A , -B ( X ) •
I Fil l non-bo r d e r sq u a r e s
MOV 2l (X) ,A •
I Whi t e p i e c e s
S ET 7,A •
' C hang e to b l a c k
MOV 91 ( X ) , A •
, B l a c k pie c e s
MVI 3 l ( X ) , PAWN •
' W h i t e Pa w n s
MVI 81 ( X ) , BP AWN •
' B l a c k Pa w n s
MV I 4l (X) , 0 •
' Em p t y s q u a r e s
MVI 51 ( X ) , 0
MV I 6l (X) ,0
MVI 71 ( X ) ,0
I NX x
DJ N Z IB2
LXI X , PO S K ; !n i t K i n g /Qu e e n po s i t i o n l i s ·
MV I 0 (X ) , 25
MV I 1 (X) , 95
MV I 2 (X ) , 24
MVI 3 (X) , 94
RET
28
· ******************************* * ****************************
I
; P A T H RO U T I N E
· ************************************ * *** * ** * ** * * * * * * * ****** *
I
; F U l C T I ON : To g e n e r a t e a s i n g l e po s s i b l e mo v e f o r a g i v e n
•
I p i e c e a l o n g i t s c u r r e n t p a t h o f mo t i o n i n c l u d i n g :
•
I Fe t c h i n g t h e c o n t e n t s o f t h e b o a r d a t t h e n e w
•
I po s i t i o n , and se t t i ng a f l ag d e s c r i b i ng the
.
I contents :
•
I 0 N e w p o s t i o n i s e mp t y
•
I 1 E n c o u n t e r e d a p i e c e of t h e
•
I o pp o s i t e c o l o r
•
I 2 En c o u n t e r e d a p i e c e o f t h e
•
, s ame c o l o r
•
I 3 Ne w p o s i t i o n i s o f f t h e
•
I bo a r d
•
I
; CALLED BY : MP I E C E
; ATTAC K
; PI NFND
•
; C AL LS : No n e
•
I
; A RG U M E N T S : D i r e c t i o n f r om t h e d i r e c t i o n a r r a y g i v i ng t h e
•
I c on s t a n t to b e added f o r t h e n e w po s i t i o n •
· ************************************************************
I
PATH : LX I H , M2 ; Ge t p r e v i o u s po s i t i o n
M OV A,M
ADD c ; Ad d d i e c t i o n c o n s t a n t
M OV M,A ; Sa v e new pos i t i o n
L I XD M2 ; Lo a d b o a r d i n d e x
MOV A , B O A R D( X ) ; Ge t c o n t e n t s o f b o a r d
CPI -1 ; I n bo a r d e r a r e a ?
JRZ PA 2 ; Ye s - J u m p
S TA P2 ; Save p i ec e
AN I 7 ; C l e a r f lag s
S TA T2 ; Save p i ec e type
RZ ; Re t u r n i f e mp t y
L DA P2 ; Ge t p i e c e e n c o u n t e r e d
LXI H , Pl ; Ge t mo v i ng p i e c e a d d r e s s
X RA M ; C o mp a r e
BIT 7,A ; Do c o l o r s m a t c h ?
JRZ PA l ; Ye s - J u m p
MV I A,l ; Se t d i f fe r en t c o l o r f l ag
RET ; Re t u r n
PAl : MVI A,2 ; Se t s ame c o l o r f l a g
RET ; Re t u r n
PA 2 : MV I A,3 ; Se t o f f boa r d f l ag
RET ; Re t u r n
29
· ******************************************************** * ***
I
; P I E C E MOV E R RO U T I N E
· ************************************************************
I
; F U N C 'I1 I ON : To g e n e r a t e a l l t h e po s s i b l e l e g a l mo v e s f o r a
.
I g iven p i ece .
.
I
; C AL L E D B Y : G E N MOV
.
I
; C AL LS : PATH
.
I ADMOVE
.
I C AS T L E
.
I ENPSNT
.
; A RG U M E N T S : Th e p i e c e t o b e mo v e d .
· ***************************** * * * * * * * ***** * * * **** * ************
I
M P I E C E : X RA M ; P i e c e to move
AN I 8 7H ; C l ea r f l ag b i t
CPI B P AWN ; I s i s a b l a c k Pawn ?
J RN Z . +3 ; No - S k i p
OC R A ; De c r e m e n t f o r b l a c k Pa w n s
AN I 7 ; Ge t p i e c e t y p e
S TA Tl ; Save p i e ce type
L I YD Tl ; Lo a d i n d e x to D C O U NT/D P O I N T
MOV B , DCOUNT ( Y ) ; Ge t d i r e c t i o n c o u n t
M OV A , D PO I N T ( Y ) ; Ge t d i r e c t i o n po i n t e r
S TA I NDX 2 ; Sa v e a s i n d e x to d i r e c t
L I YD I NDX 2 ; Lo a d i n d e x
MPS : MOV C , D I RECT ( Y ) ; Ge t mo v e d i r e c t i o n
LOA Ml ; F r o m po s i t i o n
STA M2 ; I n i t i a l i z e to po s i t i o n
MP10 : CALL PATH ; C a l c u l a t e n e x t po s i t i o n
CPI 2 ; Re a d y f o r n e w d i r e c t i o n ?
J RN C MP l S ; Ye s - J u mp
ANA A ; Te s t f o r e m p t y s q u a r e
E XA F ; Sa v e r e s u l t
L OA Tl ; Ge t p i e c e mo v e d
CPI P AWN + l ; Is i t a Pawn ?
J RC MP20 ; Ye s - J u mp
C ALL A DMOVE ; Ad d mo v e t o l i s t
E XA F ; Emp t y s q u a r e ?
J RN Z MPl S ; No - J u mp
L OA Tl ; P i ece type
CPI K I NG ; K i ng ?
J RZ MPl S ; Ye s - J u mp
CPI B I S HOP ; B i s h o p , Ro o k , o r Qu e e n ?
J RN C MP 1 0 ; Ye s - J u m p
MPl S : I NX y ; I n c r e me n t d i r e c t i o n i n d e x
DJN Z MP S ; De e r . c o u n t - j u mp i f n o n - z e r o
LOA Tl ; P i e c e type
30
CPI K I NG ; K i ng ?
CZ CASTLE ; Ye s - T r y C a s t l i n g
RET ; Re t u r n
. * * * * * P AWN LOG I C * * * * *
I
31
· *************************** * * * * * ***************************
,
; E N PAS S AN T ROU T I N E
· ***********************************************************
,
; F U N C T I ON : To t e s t f o r e n p a s s a n t P a w n c a p t u r e a nd
•
, t o a d d i t t o t h e mo v e l i s t i f i·t i s
•
, l eg a l •
•
,
; CALLED BY : M P I EC E
•
,
; C A L LS : A DMOV E
•
, ADJ P T R
.
,
; A RG U M E N T S : No n e
· ************************************************************
,
E N P S NT : L DA Ml ; Se t p o s i t i o n o f P a w n
LX I H , Pl ; C hec k c o l o r
BIT 7,M ; I s i t wh i te ?
J RZ . +4 ; Ye s - s k i p
ADI 10 ; Ad d 1 0 f o r b l a c k
CPI 61 ; On e n p a s s a n t c a p t u r e r a n k ?
RC ; No - r e t u r n
CPI 69 ; On e n p a s s a n t c a p t u r e r a n k ?
RNC ; No - r e t u r n
L I XD M L PT RJ ; Ge t po i n t e r t o p r e v i o u s mo v e
BIT 4 , M L F LG ( X ) ; F i r s t mo v e f o r t h a t p i e c e ?
RZ ; No - r e t u r n
MOV A , M LTOP ( X ) ; Ge t " t o " po s t i t i o n
S TA M4 ; S t o r e a s i n d e x t o bo a r d
L I XD M4 ; Lo a d bo a r d i nd e x
MOV A , BOARD ( X ) ; Ge t p i e c e mo v e d
S TA P3 ; Save i t
AN ! 7 ; Ge t p i e c e t y p e
CPI PAWN ; Is i t a Pawn ?
RN Z ; No - r e t u r n
L DA M4 ; Ge t " t o " p o s i t i o n
LX I H , M2 ; Ge t p r e s e n t " t o " p o s i t i o n
SUB M ; F i nd d i f f e r e nce
JP . +5 ; Po s i t i v e ? Ye s - J u mp
N EG ; E l s e ta k e abs o l u t e va l u e
CPI 10 ; I s d i f f e r e nce 1 0 ?
RN Z ; No - r e t u r n
LXI H , P2 ; Ad d r e s s o f f l a g s
S ET 6,M ; Se t d o u b l e mo v e f l a g
C AL L A DMOVE ; Ad d P a w n m o v e t o mo v e l i s t
L DA Ml ; S a v e i n i t i a l P a w n po s i t i o n
STA M3
L DA M4 ; Se t " f r o m " a n d " t o " p o s i t i o n s
; f o r d u mmy m o v e
32
S TA Ml
S TA M2
L OA P3 •
I Sa ve c ap t u r ed Pa wn
S TA P2
CALL A DMOV E .
I Ad d P a w n c a p t u r e t o mo v e l i s t
L OA M3 •
I Re s t o r e " f r o m " p o s i t i o n
S TA Ml
· ************************************************************
I
; F U N C T I ON : To a d j u s t mo v e l i s t po i n t e r t o l i n k a r o u n d
•
, s e c o n d mo v e i n d o u b l e mo v e •
•
I
; CALLED BY : EN P S NT
•
I CASTLE
•
I
(Th i s m i n i - r o u t i n e i s no t r ea l ly ca l led ,
•
I
b u t i s j umped t o t o s a v e t i me . )
•
I
; C AL LS : No n e
•
I
; A RG U M E N T S : No n e
· *************************************************************
I
A DJ P T R : LHLD MLLST •
I Ge t l i s t p o i n t e r
LX I D , -6 •
I S i z e o f a mov e e n t r y
DAD D •
I B a c k u p l i s t po i n t e r
S H LD MLLST •
I Sa v e l i s t po i n t e r
MVI M,0 •
I Z e r o o u t l i n k , f i r s t by t e
I NX H •
I N e x t by t e
MV I M,0 •
I Z e r o o u t l i n k , s e c o n d by t e
RET •
I Re t u r n
33
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * � * * * * * * * *
,
; C A S T L E ROU 'r I N E
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
; F U N C T I ON : To d e t e r m i n e w h e t h e r c a s t l i n g i s l e g a l
.
, ( Q u e e n s i d e , K i ng s i d e , o r bo t h ) a n d a d d i t
.
,
to th e move l i s t i f i t i s .
•
,
; CALLED BY : M P I EC E
.
,
; C AL L S : A TTAC K
.
, A D MOV E
•
, ADJ P T R
.
,
; A RG U M E N T S : No n e
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * ** * * * * * * * * * * * * * *
,
CASTLE : L OA Pl ; Ge t K i ng
BIT 3,A ; Ha s i t moved ?
RN Z ; Ye s - r e t u r n
L OA C K F LG ; Fe t c h Chec k Fl ag
ANA A ; Is the K i ng in c h e c k ?
RN Z ; Ye s - Re t u r n
LXI B , 0FF0 3H ; I n i t i a l i z e K i ng - s i d e v a l u e s
CAS : L OA Ml ; K i ng po s i t i o n
ADD c ; Ro o k p o s i t i o n
M OV C,A ; Save
s ·r A M3 ; S t o r e a s bo a r d i n d e x
L I XD M3 ; Lo a d bo a r d i n d e x
M OV A , BOARD ( X ) ; Ge t c o n t e n t s o f bo a r d
AN I 7FH ; C l e a r color bi t
CPI ROOK ; H a s Ro o k e v e r mo v e d ?
J RN Z CA2 0 ; Ye s - J u mp
MOV A,C ; Re s t o r e Ro o k po s i t i o n
J M PR CA1 5 ; J u mp
CA1 0 : L I XD M3 ; Lo a d bo a r d i n d e x
MOV A , BOARD ( X ) ; Ge t c o n t e n t s o f bo a r d
ANA A ; Emp t y ?
J RN Z CA2 0 ; No - J u mp
LOA M3 ; C u r r en t pos i t i on
CPI 22 ; W hj t e Q u e e n K n i g h t s q u a r e ?
JRZ CA1 5 ; Ye s - J u m p
CPI 92 ; B l a c k Qu e e n Kn i g h t s q u a r e ?
JRZ CA1 5 ; Ye s - J u mp
CALL ATTAC K ; Lo o k f o r a t t a c k o n s q u a r e
ANA A ; An y a t t a c k e r s ?
J RN Z CA 2 0 ; Ye s - J u mp
L OA M3 ; C u r r e n t po s i t i o n
CA1 5 : ADD B ; Ne x t p o s i t i o n
S TA M3 ; Sa ve a s boa r d i nd e x
LXI H , Ml ; K i ng pos i t i on
C MP M ; Re a c h e d K i n g ?
34
JR Z CA1 0 ; No - J u m p
SUB B ; De t e r m i n e K i n g ' s p o s i t i o n
SUB B
STA M2 ; Sa ve i t
LX I H , P2 ; Ad d r e s s o f f l a g s
MV I M, 40H ; Se t d o u b l e mo v e f l a g
CALL ADMOVE ; P u t k i n g mo v e i n l i s t
LX I H , Ml ; Ad d r o f K i n g " f r o m " po s i t i o n
MOV A,M ; Ge t K i n g ' s " f r o m " po s i t i o n
MOV M,C ; S t o r e Ro o k " f r o m " po s i t i o n
SUB 8 ; Ge t Ro o k " t o " po s i t i o n
S 'rA M2 ; S t o r e Ro o k " t o " p o s i t i o n
X RA A ; Zero
S TA P2 ; Z e r o move f l ags
CALL A D MOV E ; P u t Ro o k m o v e i n l i s t
CALL ADJ PTR ; Re - a d j u s t m o v e l i s t po i n t e r
L OA M3 ; Re s t o r e K i n g po s i t i o n
S TA Ml ; Sto r e
CA20 : MOV A,B ; Sc a n I n d e x
CPI 1 ; Do n e ?
RZ ; Ye s - r e t u r n
LXI B , 0 1FCH ; Se t Qu e e n- s i d e i n i t i a l va l u e s
JMP CAS ; J u mp
36
· **** * *********** * *******************************************
'
; A D MOV E ROUT I N E
· ** * *********************************************************
'
; F U N C T I ON : To a d d a m o v e t o t h e mo v e l i s t
.
,
; C A L L E D BY : M P I EC E
.
I E NP SNT
•
I C AS T L E
•
I
; CALLS : No n e
•
I
; A RG U M E N T : No n e
· ** * * * * * * * * * * * * **** * **** * *** * *********************************
I
36
· *************************************** * ****** * *** * ** * * ** * **
I
; G E N E RA T E MOV E ROUT, I N E
· ************************************************ * * * * * * * * * * **
I
; F U NC T I ON : To g e n e r a t e t h e mo v e s e t f o r a l l o f t h e
•
I p i eces of a g i ven co l o r •
•
I
; CALLED BY : F N D MO V
•
I
; CALLS : M I EC E
•
, I NC H K
•
I
; A RG U M E N T S : No n e
· ****************************************************** * *****
,
G E N MO V : C A L L I NC H K ; Te s t f o r K i n g i n c h e c k
S TA C KFLG ; Sa v e a t ta c k cou n t a s f l ag
LDED M LN XT ; Ad d r o f n e x t a v a i l l i s t s p a c e
LHLD M L PTR I ; P l y l i s t po i n t e r i nd e x
INX H ; I n c r e me n t to n e x t p l y
INX H
MOV M,E ; S a v e mo v e l i s t p o i n t e r
I NX H
MOV M,D
INX H
S H LD M LPTR I ; S a v e n ew i n d e x
S HLD MLLST ; La s t p o i n t e r f o r c h a i n i n i t .
MV I A, 21 ; F i r s t po s i t i o n o n bo a r d
GMS : S TA Ml ; Save a s i nd e x
L I XD Ml ; Lo a d b o a r d i n d e x
MOV A , BOARD ( X ) ; F e t c h bo a r d c o n t e n t s
ANA A ; I s i t e mp t y ?
JRZ GM 1 0 ; Ye s - J u mp
CPI -1 ; I s i t a bo a r d e r s q u a r e ?
JRZ GM 1 0 ; Ye s - J u m p
STA Pl ; Sa v e p i ec e
LXI H , COLOR ; Ad d r e s s o f c o l o r o f p i e c e
X RA M ; Te s t c o l o r o f p i e c e
B IT 7,A ; Ma tch ?
CZ M P I EC E ; Ye s - c a l l Mo v e P i e c e
GM 1 0 : LOA Ml ; F e t c h c u r r e n t bo a r d po s i t i o n
I NR A ; I n e r t o n e x t bo a r d po s i t i o n
CPI 99 ; E n d o f bo a r d a r r a y ?
JNZ GM S ; N o - J u mp
RET ; Re t u r n
37
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; C H E C K ROUT I N E
· * * * * * * * * * * * * * * * * * * * * � * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; F U NC T I ON : To d e t e r m i n e w h e t h e r o r n o t t h e
•
I K i ng i s i n c h e c k •
•
I
; CALLED BY : G E N MOV
•
I F N DMOV
•
I EVAL
•
I
; CALLS : A TTAC K
•
I
; ARG U M E N T S : C o l o r o f K i ng
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
I NC H K : LDA C O LOR ; Ge t c o l o r
I NCH K l : LX I H , POS K ; Ad d r o f w h i t e K i ng po s i t i o n
ANA A ; Wh i te ?
J RZ . +3 ; Ye s - S k i p
I NX H ; Ad d r o f b l a c k K i ng po s i t i o n
M OV A,M ; F e t c h K i n g po s i t i o n
S TA M3 ; Save
L I XD M3 ; Lo a d b o a r d i nd e x
M OV A , BOARD ( X ) ; Fe t c h boa r d co n te n t s
s ·r A Pl ; Save
AN ! 7 ; Ge t p i e c e t y p e
S TA Tl ; Sa v e
CALL ATTAC K ; Lo o k f o r a t t a c k e r s o n K i ng
RET ; Re t u r n
38
· * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; AT'r AC K RO U 'r I N E
· * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; FUNCT I ON : To f i n d a l l a t t a c k e r s o n a g i v e n s q u a r e
.
I by s c a n n i ng o u twa r d f r om the s q u a r e
.
I u n t i l a p i e c e i s f o u nd t h a t a t ta c k s
•
I t h a t ·s q u a r e , o r a p i e c e i s f o u n d t h a t
•
I doe s n ' t a t ta c k tha t s q ua r e , o r the edg e
•
I o f t h e bo a r d i s r e a c he d .
•
I
I I n d e te r m i n i ng wh i c h p i e c e s a t t a c k
•
I a squ a r e , t h i s r o u t i n e a l s o t a k e s in to
•
I ac coun t the a b i l i ty o f ce r t a i n p i e c e s to
•
I a t t a c k t h r o u g h a n o t h e r a t t a c k i n g p i e c e . ( Fo r
•
I e x a mp l e a q u e e n l i n e d u p b e h i nd a b i s h o p
.
I o f h e r s a me c o l o r a l o n g a d i a g o n a l . ) T h e
•
I b i s hop i s then s a i d to be t r a n spa r en t to the
•
I q u e e n , s i n c e bo t h p a r t i c i p a t e i n t h e
•
I a t tac k .
•
I
•
I
I n the c a s e whe r e t h i s r ou t i n e i s c a l l ed
•
I b y C AS T L E o r I NC H K , t h e r o u t i n e i s
•
I
t e r m i n a ted a s s o o n a s a n a t ta c k e r o f t he
.
I
o p po s i t e c o l o r i s e n c o u n t e r e d .
.
; C AL L E D B Y : PO I NTS
.
I P I N FN D
.
I C AS T L E
•
I I NC H K
•
I
; C AL L S : PATH
•
I A T K S AV
•
I
; A RG U M E N T S : No n e
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
A T T AC K : PUSH B ; S a v e Re g i s t e r B
X RA A ; Cl ea r
MVI B,16 ; In i t i a l d i r ec t i on coun t
S TA I NDX 2 •
I I n i t i a l d i r e c t i o n i nd e x
L I YD I ND X 2 ; Lo a d i n d e x
ATS : M OV C , D I R E C 'r ( Y ) ; Ge t d i r e c t i o n
MVI D,0 ; I n i t . s c a n c o u n t/f l ag s
LOA M3 .
I I n i t . bo a r d s ta r t po s i t i o n
S TA M2 ; Sa ve
AT 1 0 : I NR D ; I n c r e me n t s c a n c o u n t
C AL L P A11 H ; Ne x t po s i t i o n
CPI l ; P i e c e o f a o p po s i t e c o l o r ?
J RZ AT 1 4A ; Ye s - J u m p
CPI 2 ; P i e c e o f s ame co l o r ?
JRZ AT 1 4 B ; Ye s - J ump
39
ANA A ; Em p t y p o s i t i o n ?
J RN Z AT 1 2 ; N o - j u mp
MOV A,B ; Fe t c h d i r e c t i o n c o u n t
CPI 9 ; On k n i g h t s c a n ?
J RN C AT 1 0 ; No - J um p
AT 1 2 : I NX y ; I n c r e me n t d i r e c t i o n i n d e x
DJ N Z AT S ; Do n e ? N o - J um p
X RA A ; No a t tac k e r s
AT 1 3 : POP B ; Re s t o r e r e g i s t e r B
RET ; Re t u r n
AT 1 4 A : BIT 6,D ; S a me c o l o r f o u n d a l r e a d y ?
J RN Z AT 1 2 ; Ye s - j u mp
S ET 5,D ; Se t o p p o s i t e c o l o r f o u nd f l a g
JMP AT 1 4 ; J u mp
AT 1 4 B : BIT 5,D ; Op po s i t e c o l o r f o u n d a l r e a d y ?
J RN Z AT 1 2 ; Ye s - j u mp
S ET 6,D ; Se t s a me c o l o r f o u n d f l a g
.
I
.
I * * * * * D ET E RM I N E I F P I E C E E N C OU NT E R E D ATTAC K S S QU A R E * * * * *
AT 1 4 : LOA T2 ; Fe t c h p i e c e type e nc o u n t e r e d
MOV E,A ; Sa ve
M OV A,B ; Ge t d i r e c t i o n c o u n t e r
CPI 9 ; Lo o k f o r K n i g h t s ?
J RC AT 2 5 ; Ye s - J u mp
MOV A,E ; Ge t p i e c e t y p e
CPI QU EEN ; Is i s a Qu e e n ?
J RN Z AT 1 5 ; No - J u mp
S ET 7,D ; Se t Q u e e n f o u n d f l a g
JMPR AT 3 0 ; J u mp
AT 1 5 : M OV A,D ; Ge t f l a g / s c a n c o u n t
AN I 0FH ; I s o l a te cou n t
CPI 1 ; On f i r s t po s i t i o n ?
J RN Z AT 1 6 ; No - J u mp
MOV A,E ; Ge t e n c o u n t e r e d p i e c e t y p e
CPI K I NG ; Is i t a K i ng ?
J RZ AT 3 0 ; Ye s - J um p
AT1 6 : MOV A,B ; Ge t d i r e c t i o n c o u n t e r
CP I 13 ; Sc a n n i n g f i l e s o r r a n k s ?
J RC AT 2 1 ; Yes - J ump
M OV A,E ; Ge t p i e c e t y p e
CPI B I S H OP ; Is i t a B i s hop ?
J RZ AT 3 0 ; Ye s - J um p
MOV A,D ; Ge t f l a g s/ s c a n c o u n t
ANI 0FH ; Isol a te coun t
CPI 1 ; On f i r s t p o s i t i o n ?
J RN Z AT1 2 ; No - J ump
CMP E ; I s i t a Pa wn ?
J RN Z AT1 2 ; No - J u m p
LOA P2 ; Fe t c h p i e c e i nc l ud i ng c o l o r
40
B I 'I' 7,A •
I Is i t wh i t e ?
JRZ AT 2 0 .
I Ye s -
] U mp
M OV A , B .
I Ge t d i r e c t i o n c o u n t e r
CPI 15 •
I On a n o n - a t t a c k i n g d i a g o n a l ? .
J RC AT 1 2 •
I Ye s - ] U m p
JMPR AT 3 0 •
, J u mp
A 'l1 2 0 : MOV A , B .
, Ge t d i r e c t i o n c o u n t e r
CPI 15 •
, On a n o n - a t t a c k i n g d i a g o n a l ? .
J RNC AT 1 2 .
, Ye s -
] U mp
J M PR AT3 0 •
I J u mp
AT 2 1 : MOV A,E •
, Ge t p i e c e t y p e
CPI ROOK •
I I s i s a Ro o k ? .
J RN Z AT1 2 •
, No - ] U m p
JMPR AT3 0 •
I J u mp
AT2 5 : MOV A,E •
I Ge t p i e c e type
CPI K N I G HT •
I I s i t a Kn i g h t ?
J RN Z AT 1 2 •
I No -
] Ump
AT 3 0 : LDA Tl •
, A t t a c ked p i e ce type/ f l ag
CPI 7 •
I Ca l l f r om PO I NTS ?
J RZ A'I' 3 1 •
, Ye s -
] Ump
BIT 5,D , I s a t tac k e r oppos i te c o l o r ?
•
•
JRZ AT 3 2 •
I No -
) Ump
MV I A,l •
I Se t a t ta c k e r f o u nd f l ag
JMP AT 1 3 •
, J u mp
.
AT 3 1 : CALL A T K S AV •
, Sa ve a t ta c k e r i n a t ta c k l i s t
AT3 2 : L DA T2 •
I A t t ac k i ng p i e c e type
CPI K I NG •
, I s i t a K i n g· ?
JZ AT 1 2 •
I Ye s -
) Ump
CPI KN IGHT •
I I s i t a Kn i g h t ? •
JZ AT 1 2 •
I Ye s -
j ump
JMP AT 1 0 •
I J u mp
41
· ************************************************************
I
; ATTAC K S AV E RO UT I N E
· ************************************************************
I
; F U N C T I ON : To s a v e a n a t t a c k i n g p i e c e v a l u e i n t h e
.
I a t t a c k l i s t , a n d t o i n c r e me n t t h e a t t a c k
.
I coun t fo r tha t c o l o r p i e c e .
.
I
•
I Th e p i n p i e c e l i s t i s c h e c k e d f o r t h e
•
I a t t ac k i ng p i ece , and i f fo und the r e , the
.
I p i ece i s no t i nc l ud ed in the a t t a c k l i s t .
.
I
; CALLED BY : AT'I1AC K
•
I
; C A L LS : P NC K
•
I
; ARG U M E N T S : No n e
· ***********************************************************
I
ATKSAV : PUS H B ; S a v e Re g s BC
PUSH D ; S a v e Re g s D E
L OA NP I NS ; N u m be r o f p i n n e d p i e c e s
ANA A ; An y ?
CNZ P NC K ; Ye s - c h e c k p i n l i s t
L I XD T2 ; I n i t i n d e x to v a l u e t a b l e
LX I H , ATKLST ; In i t add r ess o f a t tac k l i s t
LXI B,0 ; I n i t i n c r e me n t f o r wh i t e
LOA P2 ; A t t a c k i ng p i ece
B I '11 7IA ; I s i t wh i t e ?
JRZ . +4 ; Ye s - ] U mp
MVI C,7 ; I n i t i n c r e me n t f o r b l a c k
AN I 7 ; A t ta c k i ng p i e c e type
MOV E,A ; I n i t i nc r emen t f o r type
B IT 7,D ; Qu e e n f o u n d t h i s s c a n ?
J RZ . +4 ; No - J u mp
MVI E , QU E EN ; U s e Qu e e n s l o t i n a t t a c k l i s t
DAD B ; A t ta c k l i s t add r e s s
I NR M ; I n c r eme n t l i s t c o u n t
MVI D,0
DAD D ; At tac k l i s t s l o t add r e s s
M OV A,M ; Ge t d a t a a l r e a d y t h e r e
AN I 0FH ; I s f i r s t s l o t emp ty ?
J RZ AS 2 0 ; Ye s - J ump
MOV A,M ; Ge t d a t a a g a i n
AN I 0F0H ; I s s e c o n d s l o t e mp t y ?
J RZ AS 1 9 ; Ye s - J um p
I NX H ; I n c r e me n t to K i ng s l o t
JMPR AS 20 ; J u mp
AS 1 9 : RLD ; Te m p s a v e l o we r i n u p p e r
MOV A , P VA L U E ( X ) ; Ge t n e w v a l u e f o r a t t a c k l i s t
RRD ; Pu t i n 2 n d a t t a c k l i s t s l o t
J M PR AS 2 5 ; J u mp
AS 2 0 : MOV A , P VA L U E ( X ) ; Ge t n e w v a l u e f o r a t t a c k l i s t
RLD ; Pu t i n 1 s t a t t a c k l i s t s l o t
AS 2 S : POP D ; Re s t o r e D E r e g s
POP B ; Re s t o r e B C r e g s
RET ; Re t u r n
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
; P I N C H E C K ROU T I N E
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * *
,
; F U NC T I O N : Chec k s to see i f the a t tac k e r i s i n the
.
, p i nned p i ece l i s t . I f so h e i s no t a va l i d
.
, a t t a c k e r u n l e s s t h e d i r e c t i o n i n wh i c h h e
•
, a t ta c k s i n the s ame a s t h e d i r ec t i o n a l ong
.
, wh i c h he i s p i nn ed . I f the p ie c e i s
.
, f o u nd to be i n va l id a s a n a t tac k e r , t h e
•
, r e t u r n t o t h e c a l l i n g r o u t i n e i s a bo r t e d
•
, a n d t h i s r o u t i n e r e t u r n s d i r e c t l y t o ATTAC K .
•
,
; CAL L E D BY : A T K S AV
.,
; CALLS : No n e
•
,
; A RG U M E N T S : Th e d i r e c t i o n o f t h e a t t a c k .
; Th e p i n n e d p i e c e c o u n n t .
· * * * * * ** * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * *
,
PNCK : MOV D,C ; Sa v e a t t a c k d i r e c t i on
MVI E,0 ; Cl ear f lag
MOV C,A ; Lo a d p i n c o u n t f o r s e a r c h
MVI 8,0
LOA M2 ; Po s i t i o n o f p i e c e
LX I H , P L I S TA ; Pi n l i s t add r ess
PC l : CC I R ; Se a r c h l i s t t o r po s i t i o n
RN Z ; Re t u r n i f n o t f o u n d
E XA F ; S a v e s e a r c h p a r a me n t e r s
B IT 0,E ; I s th i s the f i r s t f ind ?
J RN Z PC S ; No - j ump
S E 'T 0,E ; Se t f i r s t f i nd f l ag
PUSH H ; Ge t c o r r e s p i n d e x t o d i r l i s t
POP x
MOV
.
A,9 (X) ; Ge t d i r e c t i o n
CMP D ; Sa me a s a t t ac k i ng d i r ec t i o n ?
JRZ PC 3 ; Ye s - j u m p
N EG ; Op p o s i t e d i r e c t i o n ?
CMP D ; Same a s a t t ac k i ng d i r e c t i on ?
J RN Z PC S ; No - j u m p
PC 3 : E XA F ; Re s t o r e s e a r c h p a r a m e t e r s
J PE PC l ; J u mp i f s e a r c h n o t c o mp l e t e
RET ; Re t u r n
PC S : POP PSW ; Abno r ma l e x i t
POP D ; Re s t o r e r e g s .
POP B
R E 'I1 ; Re t u r n t o ATTAC K
43
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; P I N F I N D ROU T I N E
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; F U N C T I ON : To p r o d u c e a l i s t o f a l l p i e c e s p i n n e d
.
I a g a i n s t t h e K i ng o r Q u e e n , f o r bo t h w h i t e
.
I a nd b l a c k .
•
I
; CALLED BY : F N DM OV
.
I EVAL
.
; C AL L S : PATH
•
I ATTAC K
.
; A RG U M E N T S : No n e
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
P I NFND : X RA A ; Z e r o p i n coun t
STA NP I NS
LX I D , PO S K ; Ad d r o f K i n g /Q u e e n p o s l i s t
PFl : L DA X D ; Ge t p o s i t i o n o f r o y a l p i e c e
ANA A ; I s i t o n bo a r d ?
JZ PF26 ; No - J um p
CPI -1 ; A t e nd of l i s t ?
RZ ; Ye s r e t u r n
S TA M3 ; S a v e po s i t i o n a s b o a r d i n d e x
L I XD M3 ; Lo a d i n d e x t o bo a r d
MOV A , BOARD ( X ) ; Ge t c o n t e n t s o f b o a r d
S TA Pl ; Sa v e
MV I B,8 ; !n i t scan d i rect ion coun t
X RA A
S TA I NDX 2 ; !n i t d i r e c t ion i nd e x
L I YD I NDX 2
PF2 : LOA M3 ; Ge t K i n g /Q u e e n p o s i t i o n
S TA M2 ; Save
X RA A
S TA M4 ; C l e a r p i nned p i ece saved pos
M OV C , D I RECT ( Y ) ; Ge t d i r e c t i o n o f s c a n
PFS : CALL PATH ; C o mp u t e n e x t po s i t i o n
ANA A ; I s i t e mp t y ?
J RZ PFS ; Ye s - J um p
CPI 3 ; O f f bo a r d ?
JZ PF 2 5 ; Ye s - J u m p
CPI 2 ; P i e c e o f s a me c o l o r f o u n d ?
L OA M4 ; Lo a d p i n n e d p i e c e p o s i t i o n
J RZ PF1 5 ; Ye s - J u mp
ANA A ; Po s s i b l e p i n ?
JZ PF2 5 ; No - J um p
LOA T2 ; P i ece type e ncoun te r e d
CPI QU E EN ; Qu e e n ?
JZ PF 1 9 ; Ye s - J u m p
M OV L,A ; Sa v e p i e c e t y p e
44
MOV A,B ; Di r ec t ion co unte r
CPI 5 ; No n - d i a g o n a l d i r e c t i o n ?
J RC PF 1 0 ; Ye s - J U mp
MOV A,L ; P i ece type
CPI B I S HOP ; B i shop ?
JNZ PF2 5 ; No - J u m p
JMP PF20 ; J u mp
PF1 0 : MOV A,L ; P i ece type
CPI ROO K ; Ro o k ?
JNZ PF2 5 ; No - J u mp
JMP PF20 ; J u mp
PF1 5 : ANA A ; Po s s i b l e p i n ?
JNZ PF2 5 ; No - J u m p
LDA M2 ; Sa v e po s s i b l e p i n po s i t i o n
S TA M4
JMP PFS ; J u mp
PF1 9 : LDA Pl ; Lo a d K i n g o r Q u e e n
AN I 7 ; C l ea r f l ag s
CPI QUEEN ; Qu e e n ?
J RN Z PF20 ; No - J u m p
PUSH B ; Sa v e r eg s .
PUSH D
PUSH y
X RA A ; Z e r o o u t a t tac k l is t
MV I B, 14
LX I H , AT K L S T
MOV M,A
I NX H
DJ N Z . -2
MV I A,7 ; Se t a t t ac k f l ag
S TA 'I' l
CALL ATTAC K ; F i nd a t t a c k e r s/d e f e nd e r s
LXI H , WAC 'r ; Wh i te queen a t tac k e r s
LXI D , BACT ; B l a c k queen a t t ac ke r s
LOA Pl ; Ge t q u e e n
BIT 7,A ; I s she wh i te ?
J RZ . +3 ; Ye s - s k i p
XC HG ; Re v e r s e f o r b l a c k
M OV A,M ; N u m be r o f d e f e nd e r s
XC H G ; Re v e r s e f o r a t t a c k e r s
SUB M ; De f e n d e r s m i n u s a t t a c k e r s
DC R A ; Le S S 1
POP y ; Re s t o r e r e g s .
POP D
POP B
JP PF2 5 ; J u mp i f p i n n o t v a l i d
PF20 : LX I H , NP I NS ; Ad d r e s s o f p i n n e d p i e c e c o u n t
I NR M ; I n c r e me n t
L I XD NP I NS ; Lo a d p i n l i s t i n d e x
MOV P L I STD ( X ) , C ; Sa ve d i r e c t ion o f p i n
•
LDA M4 , Po s i t i o n of p i n ned p iece
MOV PL I ST ( X ) , A •
, Sa ve in list
•
PF2 5 : I NX y , I n c r e me n t d i r ec t ion i nd e x
DJ N Z PF27 •
, Do n e ? No -
Jump
PF26 : I NX D .
, Iner K i n g /Q u e e n po s i nd e x
•
JMP PFl , J u mp
PF27 : J !1 P PF2 •
, J u mp
46
· ************************************************************
I
; E XC H A N G E RO U T I N E
· ************************************************************
I
; F U NCT I ON : To d e t e r m i n e t h e e x c h a n g e v a l u e o f a
.
I p i e c e o n a g i v e n s q u a r e by e x a m 1 n 1 n g a l l
.
I a t t a c k e r s a nd d e f e nd e r s o f t h a t p i e ce .
.
I
; CALLED BY : PO I N T S
.
; CALLS : N E X 'T A D
.
I
; A RG U M E N TS : No n e .
· ***********************************************************
I
XC H NG : EXX ; Swa p r eg s .
L OA Pl ; P i ec e a t t a c k ed
LX I H , WA C T ; Ad d r o f w h i t e a t t k r s /d f n d r s
LX I D , BACT ; Ad d r o f b l a c k a t t k r s / d f n d r s
BIT 7,A ; Is p i e c e wh i te ?
J RZ . +3 ; Ye s - J u m p
XC HG ; S w a p l i s t po i n t e r s
M OV B,M ; In i t l i s t cou n ts
XC HG
MOV C,M
XC HG
E XX ; Re s t o r e r e g s .
MV I C,0 ; I n i t a t t a c k e r /d e f e n d e r f l a g
MV I E,0 ; I n i t po i n t s l o s t c o u n t
L I XD T3 ; Lo a d p i e c e v a l u e i n d e x
M OV D , P VA L U E ( X ) ; Ge t a t t a c k ed p i e c e v a l u e
S LA R D ; Do u b l e i t
M OV B,D ; Save
C AL L N E XTAD ; Re t r i e v e f i r s t a t t a c k e r
RZ ; Re t u r n i f n o n e
XC 1 0 : MOV L,A ; Save a t tacke r va l ue
CALL N E X TAD ; Ge t n e x t d e f e n d e r
JRZ XC 1 8 ; J u mp i f n o n e
E XA F ; Sa v e d e f e nd e r v a l ue
M OV A,B ; Ge t a t t a c k e d v a l ue
CMP L ; At tacked l e s s than a t ta c k e r ?
J RN C XC 1 9 ; No - J U m p
EXAF ; Re s t o r e d e f e nd e r
XC 1 5 : CMP L ; De f e n d e r l e s s t h a n a t t a c k e r ?
RC ; Ye s - r e t u r n
C ALL N EXTAD ; Re t r i e v e n e x t a t t a c k e r v a l u e
RZ ; Re t u r n i f n o n e
M OV L,A ; Sa ve a t ta c k e r va l ue
CALL N E X TA O ; Re t r i e v e n e x t d e f e n d e r v a l u e
J RN Z XC 1 5 ; J u mp i f n o n e
XC 1 8 : E XA F ; Save De f e nd e r
.
MOV A,B ; Ge t v a l ue o f a t ta c k e d p i ec e
47
XC 1 9 : B I 'l' 0,C •
I A t ta c k e r o r d e fe nd e r ? .
J RZ . +4 •
I Jump i f d e f e nd e r
N EG •
I Ne g a t e v a l u e fo r a t t a c k e r
ADD E .
I To t a l p o i n t s l o s t
M OV E,A •
I S a v e to ta l
E XA F •
I Re s t o r e p r e v i o u s d e f e n d e r
RZ •
I Re t u r n i f n o n e
MOV B,L •
I P r e v a t t c k r be c o me s d e f e n d e r
JMP XC 1 0 •
I J u mp
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
; N E X T ATTAC K E R/ D E F E N D E R RO U T I N E
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; F U NC T I O N : To r e t r i e v e t h e n e x t a t t a c k e r o r d e f e n d e r
•
I p i e c e va l ue f r om t h e a t t a c k l i s t , a nd d e l e t e
•
I t h a t p i e ce f r om t h e l i s t •
•
I
; CALLED BY : XC H NG
.
•
: CALLS : No n e
•
,
; A RG U M E N T S : A t ta c k l i s t add r e sses .
•
I S i de f lag
•
I At tac k l i s t coun ts
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
N E X TAD : I NR c ; I n c r eme n t s id e f l ag
E XX ; S wa p r e g i s t e r s
MOV A,B ; Swap l i s t coun t s
MOV B,C
MOV C,A
XC HG ; Swap l i s t po i n t e r s
X RA A
CMP B ; At end o f l i s t ?
J RZ NX6 ; Ye s - J u mp
DCR B ; De c r e m e n t l i s t c o u n t
I NX H ; I n c r e m e n t l i s t po i n t e r
CMP M ; C h e c k ne x t i tem i n l i s t
JRZ .
-
2 ; J u mp i f e mp t y
RRD ; Ge t v a l u e f r o m l i s t
ADD A ; Do u b l e i t
DCX H ; De c r e me n t l i s t po i n t e r
NX6 : EXX ; Re s t o r e r e g s .
RET ; Re t u r n
48
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'
; P O I N T E V A L U AT I ON ROU T I N E
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'
; F U N C T I ON : To p e r f o r m a s t a t i c b o a r d e v a l u a t i o n a n d
•
' d e r i v e a s c o r e f o r a g i v e n bo a r d po s i t i o n
.
; CALLED BY : F N D MOV
•
I EVAL
•
I
; C AL L S : A TTAC K
•
' XC H N G
•
I LIMIT
•
I
; A RG U M E N T S : No n e
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
J RC PT 6 X ; Ye s - J u mp
CPI ROO K ; Ro o k , Qu e e n o r K i n g ?
J RC PT6B ; No - J Ump
CPI K I NG ; I s i t a K i ng ?
J RZ PT6AA ; Ye s - J u m p
L DA M OV E N O ; Ge t mo v e n u m b e r
CPI 7 ; Le s s t h a n 7 ?
J RC PT 6A ; Ye s - J u mp
JMP PT6 X ; J u mp
PT6AA : BIT 4,M ; Ca s t l ed ye t ?
JRZ PT6A ; No - J u m p
MV I A , +6 ; Bo n u s f o r c a s t l i ng
BIT 7,M ; Chec k p i ece color
J RZ PT6D ; J u mp i f wh i te
MV I A, -6 ; Bo n u s f o r b l a c k c a s t l i ng
49
JMP PT 6 D ; J u mp
PT6A : B IT 3,M ; Ha s p i e c e moved ye t ?
JRZ PT6 X ; No - ] U m p
JMP PT6C ; Jump
PT6B : BIT 3,M ; Ha s p i ece moved ye t ?
J RN Z PT6X ; Ye s - J u m p
PT6C : MV I A,-2 ; T w o po i n t p e n a l t y f o r w h i t e
B IT 7,M ; C he c k p i e c e co l or
JRZ . +4 ; Jump i f wh i te
MV I A , +2 ; Two p o i n t pe n a l t y f o r b l a c k
PT6 D : LX I H , B RD C ; Ge t a d d r e s s o f bo a r d c o n t r o l
ADD M ; Ad d o n p e n a l t y / bo n u s p o i n t s
MOV M,A ; Sa ve
PT6 X : X RA A ; Z e r o ou t a t tack l i s t
MVI B, 14
LX I H , AT K L S T
MOV M,A
I NX H
,
DJ N Z . -2
C ALL AT'fAC K ; Bu i l d a t ta c k l i s t for squ a r e
LXI H , BACT ; Ge t b l a c k a t t a c k e r c o u n t a d d r
L DA WAC T ; Ge t w h i t e a t t a c k e r c o u n t
SUB M ; Co m p u t e c o u n t d i f f e r e n c e
LXI H , B RD C ; Ad d r e s s o f bo a r d c o n t r o l
ADD M ; Ac c u m bo a r d c o n t r o l s c o r e
MOV M,A ; Sa ve
L DA Pl ; Ge t p i e c e o n c u r r e n t s q u a r e
ANA A ; I s i t empty ?
JZ PT 2 5 ; Ye s - J u m p
CALL XC H NG ; E v a l u a t e e x c h a ng e , i f a n y
X RA A ; Check for a loss
C MP E ; Po i n t s l o s t ?
J RZ PT 2 3 ; No - J u m p
DC R D ; De d u c t h a l f a P a wn v a l u e
L DA Pl ; Ge t p i e c e u n d e r a t t a c k
LXI H , COLOR ; C o l o r o f s i d e j u s t mo v e d
X RA M ; Compa r e w i th p i ec e
BIT 7,A ; Do c o l o r s m a t c h ?
MOV A,E ; Po i n t s l o s t
J RN Z PT 2 0 ; J u mp i f no m a t c h
LX I H , PTS L ; P r e v i o u s m a x po i n t s l o s t
CMP M ; C o mp a r e to c u r r e n t v a l u e
J RC PT 2 3 ; J u mp i f g r e a t e r t h a n
M OV M,E ; S t o r e n e w va l u e a s ma x l os t
L I XD M L PT RJ ; Lo a d p o i n t e r t o t h i s m o v e
L DA M3 ; Ge t po s i t i o n o f l o s t p i e c e
CMP M L TOP ( X ) ; I s i t t h e o n e mo v i n g ?
J RN Z PT2 3 ; No - ] U m p
S TA PTS C K ; S a v e pos i t i o n a s a f l ag
JMP PT2 3 ; J u mp
50
PT 2 0 : LX I H , PTS W l ; P r e v i o u s m a x i m u m po i n t s wo n
C MP M ; C o mp a r e t o c u r r e n t v a l u e
J RC . +4 ; J ump i f g r e a t e r than
M OV A,M ; Lo a d p r e v i o u s m a x v a l u e
M OV M,E ; S t o r e n e w v a l u e a s ma x w o n
LXI H , PTSW 2 ; P r e v i o u s 2 n d ma x po i n t s wo n
CMP M ; C o mp a r e t o c u r r e n t v a l u e
J RC PT2 3 ; J ump i f g r e a t e r t h a n
M OV M,A ; S to r e a s new 2nd max los t
PT 2 3 : LXI H , Pl ; Ge t p i e c e
B IT 7,M ; Te s t c o l o r
M OV A,D ; Va l u e o f p i e c e
J RZ . +4 ; J u mp i f w h i t e
N EG ; Neg a te fo r b l a c k
LXI H , MTRL ; Ge t a d d r s o f ma t e r i a l t o t a l
ADD M ; Ad d n e w v a l u e
MOV M,A ; Sto r e
PT2 5 : LOA M3 ; G e t c u r r e n t b o a r d po s i t i o n
INR A ; I n c r eme n t
CPI 99 ; A t e nd o f bo a r d ?
JNZ PTS ; No - J ump
L OA PTSC K ; Mo v i ng p i e c e l o s t f l a g
ANA A ; Was i t lost ?
J RZ PT 2 5A ; No - J u m p
LDA PTS W 2 ; 2nd ma x po i n t s won
S TA PTS W l ; S t o r e a s ma x po i n t s w o n
X RA A ; Z e r o o u t 2 n d m a x po i n t s w o n
S TA P TS W 2
P T 2 5A : LOA PTS L ; Ge t m a x p o i n t s l o s t
ANA A ; Is i t zero ?
J RZ . +3 ; Ye s - J ump
DC R A ; De c r e m e n t i t
M OV B,A ; Sa v e i t
L OA PTSW l ; M a x po i n t s wo n
ANA A ; Is i t ze r o ?
J RZ . +11 ; Ye s - J u m p
LDA PTS W 2 ; 2 n d m a x p o i n t s wo n
ANA A ; I s i t ze r o ?
J RZ . +5 ; Ye s - J um p
DC R A ; De c r e m e n t i t
S RL R A ; D i v i d e i t by 2
SUB B ; S u b t r a c t po i n t s l o s t
LX J Y , C O LO R ; Co l o r o f s i d e j u s t mo v e d
B I 'I' 7,M ; I s i t wh i te ?
JRZ . +4 ; Ye s - J u m p
N EG ; Ne g a t e f o r bl a c k
LX I H , MTRL ; Ne t m a t e r i a l o n b o a r d
ADD M ; Ad d e x c h a n g e a d j u s t me n t s
LX I H , MV 0 ; Mater ial at ply 0
51
SUB M ; Sub t r a c t f r om c u r r e n t
MOV B,A ; Save
MV I A, 30 ; Lo a d m a t e r i a l l i m i t
C ALL LIMIT ; L i m i t to p l u s o r m i n u s v a l u e
MOV E,A ; Save l i m i ted va l ue
LOA B R DC ; Ge t bo a r d c o n t r o l po i n t s
LX I H , BC 0 ; Boa r d con t r o l a t p l y ze ro
SUB M ; Ge t d i f f e r e n c e
MOV B,A ; Save
LOA PTS C K ; Mo v i ng p i e c e l o s t f l a g
ANA A ; Is i t ze r o ?
JRZ . +4 ; Ye s - J u m p
MV I 8,0 ; Z e r o bo a r d c o n t r o l po i n t s
MVI A, 6 ; Lo a d bo a r d c o n t r o l l i m i t
C ALL LIMIT ; L i m i t to p l u s o r m i n u s v a l u e
MOV D,A ; Sa ve l i m i t ed va l u e
MOV A,E ; Ge t m a t e r i a l po i n t s
ADD A ; M u l t i p l y by 4
ADD A
ADD D ; Ad d bo a r d c o n t r o l
LX I H , COLOR ; Co l o r o f s i d e j u s t mo v e d
B I 'I' 7,M ; Is i t wh i t e ?
J RN Z . +4 ; No - J u m p
N EG ; N e g a t e f o r wh i t e
AD I 80H ; Re s c a l e s c o r e ( n e u t r a l - 8 0 H )
S TA VALM ; Save sco r e
L I XD MLPTRJ ; Lo a d m o v e l i s t p o i n t e r
M OV M LV A L ( X ) , A ; S a v e s c o r e i n mo v e l i s t
RET ; Re t u r n
52
· ***************************************** * * * * * * * * * * * * * * * * * *
'
; LIMIT RO U T I N E
· ************* * ** * *** * ***** * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * *
'
; F U N C T I ON : To l i m i t t h e m a g n i t u d e o f a g i v e n v a l u e
•
; CALLED BY : Pu I NTS
.
I
; CALLS : No n e
•
; A RG U M E N T S : Input - Va l u e t o b e l i m i t e d i n t h e B
•
, r eg i s te r .
•
I - Va l u e t o l i m i t t o i n t h e A r e g i s t e r .
•
, Ou t p u t - L i m i t e d v a l u e i n t h e A r e g i s t e r .
· ************************************************************
,
LIMIT : BIT 7 , B •
, Is va l ue nega t ive ? .
JZ LIM10 •
I No - ] U m p
N EG •
I Make pos i t i ve
CMP B •
I C o mp a r e t o 1 1 m 1 t
RNC •
I Re t u r n i f o u t s i d e l i m i t
MOV A,B •
I Ou tpu t v a l u e a s l S
RET •
I Re t u r n
LIM10 : CMP B •
I C o mp a r e t o l i m i t
RC •
I Re t u r n i f o u t s i d e l i m i t
M OV A,B •
I Ou t p u t v a l u e a s l S
'
RE r •
I Re t u r n
. END
53
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'
; M O V E RO U T I N E
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'
; F U N C ·r I 0 N : To e x e c u t e a mo v e f r o m t h e mo v e l i s t o n t h e
.
' bo a r d a r r a y .
.
'
; C A L L E D BY : C PT RM V
.
' P L Y RM V
.
' EVAL
.
' F N DMOV
.
' VALMOV
.
'
; CALLS : No n e
.
'
; A RG U M E N T S : No n e
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'
MOV E : L H LD M L P T RJ ; Lo a d mo v e l i s t po i n t e r
I NX H ; I n c r e m e n t pa s t l i n k by t e s
I NX H
MV l : M OV A,M ; " F r o m " po s i t i o n
S TA Ml ; Save
I NX H ; I n c r e me n t po i n t e r
M OV A,M ; " To " po s i t i o n
S TA M2 ; Save
I NX H ; I n c r e m e n t po i n t e r
MOV D,M ; Ge t c a p t u r e d p i e c e / f l a g s
L I XD Ml ; Lo a d " f r o m " p o s bo a r d i n d e x
MOV E , BOARD ( X ) ; Ge t p i e c e m o v e d
B IT 5,D ; Te s t P a w n p r omo t i o n f l a g
J RN Z MV 1 5 ; J u mp i f s e t
M OV A,E ; P i e c e mo v ed
AN ! 7 ; C l e a r f l ag b i t s
CPI QU E EN ; Is i t a queen ?
JRZ MV 2 0 ; Ye s - J u m p
CPI K I NG ; Is i t a k i ng ?
J RZ MV3 0 ; Ye s - J u mp
MVS : L I YD M2 ; Lo a d " t o " po s bo a r d i n d e x
S ET 3,E ; Se t p i e c e moved f l ag
M OV BOARD ( Y ) , E ; I n s e r t p i e c e a t n e w po s i t i o n
MVI BOARD ( X ) , 0 ; E m p t y p r e v i o u s po s i t i o n
B IT 6,D ; Do u b l e m o v e ?
J RN Z MV4 0 ; Ye s - j um p
M OV A,D ; Ge t c a p t u r e d p i e c e , i f a n y
AN ! 7
CPI QUEEN ; Was i t a queen ?
RN Z ; No - r e t u r n
LXI H , POSQ ; Ad d r o f s a v e d Q u e e n po s i t i o n
BIT 7,D ; I s Qu e e n w h i t e ?
JRZ MV1 0 ; Ye s - j u mp
I NX H ; I n c r e me n t t o b l a c k Qu e e n po s
54
MV l O : X RA A ; Se t s a v e d po s i t i o n to z e r o
M OV M,A
RET ; Re t u r n
MV 1 5 : S ET 2,E ; C h a ng e P a w n t o a Q u e e n
JMP MV S ; J u mp
MV 2 0 : LX I H , POSQ ; Ad d r o f s a v e d Qu e e n po s i t i o n
MV2 1 : BIT 7,E ; I s Qu e e n w h i t e ?
JRZ MV 2 2 ; Ye s - j u m p
I NX H ; I n c r e m e n t t o b l a c k Qu e e n po s
MV 2 2 : LOA M2 ; Ge t n e w Qu e e n p o s i t i o n
M OV M,A ; Save
JMP MV S ; Jump
MV3 0 : LX I H , POS K ; Ge t s a v e d K i n g p o s i t i o n
BIT 6,D ; C a s t l i ng ?
J RZ MV 2 1 ; No - ] U m p
S ET 4,E ; Se t K i ng c a s t l ed f l ag
JMP MV 2 1 ; J u mp
MV4 0 : L H LD M L P T RJ ; G e t mo v e l i s t p o i n t e r
LXI D,8 ; I n c r emen t t o n e x t mo v e
DAD D
JMP MVl ; J u mp ( 2 n d p a r t o f d b l mo v e )
55
· *********************** * *****************************� ****
I
; U N -M OV E RO U T I N E
· **********************************************************
I
; F U N C 'r I O N : To r e v e r s e t h e p r o c e s s o f t h e mo v e r o u t i n e ,
.
I t h e r e by r e s t o r i ng t h e b o a r d a r r a y t o i t s
•
I p r e v i o u s po s i t i o n
•
•
I
; CALLED BY : VALMOV
.
I EVAL
•
I F N DMOV
•
I ASC END
.
; CALLS : No n e
.
; A RG U M E NTS : No n e
· *************************************************************
I
U NMOV E : LHLD M L P T RJ ; Lo a d m o v e l i s t po i n t e r
I NX H ; I n c r e m e n t pa s t l i n k by t e s
I NX H
UMl : MOV A,M ; Ge t " f r o m " po s i t i o n
STA Ml ; Sa v e
I NX H ; I n c r e m e n t po i n t e r
M OV A,M ; Ge t " t o " po s i t i o n
S TA M2 ; Save
I NX H ; I n c r e m e n t po i n t e r
M OV D,M ; Ge t c a p t u r e d p i e c e / f l a g s
L I XD M2 ; Lo a d " t o " po s bo a r d i n d e x
M OV E , B O A RD ( X ) ; Ge t p i e c e mo v e d
BIT 5,D ; W a s i t a P a w n p r o mo t i o n ?
JRNZ UM1 5 ; Ye s - J u m p
MOV A,E ; Ge t p i e c e m o v e d
AN ! 7 ; C l e a r f l ag b i t s
CPI QUE EN ; W a s i t a Qu e e n ?
JRZ UM 2 0 ; Ye s - ] U m p
CPI K I NG ; Was i t a K i ng ?
JRZ UM 3 0 ; Ye s - ] U mp
UMS : B IT 4,D •
I I s t h i s 1 s t mo v e f o r p i e c e ?
J RN Z UM1 6 ; Ye s - ] U mp
UM6 : L I YD Ml ; Lo a d " f r o m " po s bo a r d i n d e x
MOV BOARD ( Y ) , E ; Re t u r n t o p r e v i o u s bo a r d po s
M OV A,D ; Ge t c a p t u r e d p i e c e , i f a n y
AN ! 8FH ; Clear f lag s
MOV BOARD ( X ) , A ; Re t u r n to bo a r d
BIT 6,D ; W a s i t a d o u b l e mo v e ?
J RN Z UM4 0 ; Ye s - ] U mp
M OV A,D ; Ge t c a p t u r e d p i e c e , i f a n y
AN ! 7 ; C l e a r f l ag b i t s
CPI QUEEN ; W a s i t a Qu e e n ?
RN Z ; No - r e t u r n
56
LX I H , POSQ ; Ad d r e s s o f s a v e d Qu e e n po s
BIT 7,D ; I s Qu e e n w h i t e ?
JRZ UM 1 0 ; Ye s - J ump
I NX H ; I n c r e m e n t t o b l a c k Qu e e n po s
UM1 0 : LOA M2 ; Qu e e n ' s p r e v i o u s p o s i t i o n
MOV M,A ; Save
RET ; Re t u r n
UMl S : RES 2,E ; Re s t o r e Qu e e n t o P a w n
JMP UMS ; J u mp
UM1 6 : RES 3,E ; C l e a r p i e c e mo v e d f l a g
JMP UM6 ; J u mp
UM20 : LXI H , POSQ ; Ad d r o f s a v e d Qu e e n po s i t i o n
UM21 : BIT 7,E ; I s Qu e e n w h i t e ?
J RZ UM2 2 ; Ye s - J u m p
I NX H ; I n c r e m e n t t o b l a c k Qu e e n p o s
UM2 2 : LOA Ml ; Ge t p r e v i o u s p o s i t i o n
MOV M,A ; Save
JMP UMS ; J u mp
UM3 0 : LXI H , PO S K ; Ad d r e s s o f s a v e d K i n g p o s
BIT 6,D ; Was i t a castle ?
J RZ UM2 1 ; N o - J um p
RES 4,E ; C l e a r c a s t l ed f l ag
JMP UM2 1 ; J u mp
UM4 0 : L H LD M L PT RJ ; Lo a d m o v e l i s t po i n t e r
LXI D,8 ; I n c r e me n t t o n e x t mo v e
DAD D
JMP UMl ; J u mp ( 2 n d p a r t o f d b l mo v e )
67
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; S O RT ROUT I N E
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; F U NC T I ON : To s o r t t h e mo v e l i s t i n o r d e r o f
•
I i n c r e a s i n g mo v e v a l u e s c o r e s •
; CALLS : EVAL
•
I
; A RG U M E NT S : No n e
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
58
· **********************************************************
I
; E V A L U A T I Ot ROUT I N E
· **********************************************************
I
; F U NC T I ON : To e v a l u a t e a g i v e n mo v e i n t h e mo v e l i s t .
•
I I t f i r s t ma k e s t h e mo v e o n t h e bo a r d , t h e n i
.
I t h e mo v e i s l e g a l , i t e v a l u a t e s i t , a n d t h e n
.
I r e s t o r e s t h e bo a a r d p o s i t i o n .
.
I
; CALLED BY : S OR'T
•
I
; C AL LS : M OV E
.
I I NC H K
•
I P I NFND
•
I PO I NTS
•
I U NMOV
.
I
; A RG U M E N T S : No n e
· * * * * * ****** * * ************************************************
I
JRZ EVS •
I Ye s -
] Ump
X RA A . Sc o r e o f z e r o
I
S TA VALM •
I F o r i l l e g a l mo v e
JMP EV10 •
' J u mp
EVS : CALL PINFND •
I C o mp i l e p i n n e d l i s t
CALL PO I NTS •
' A s s i g n po i n t s t o m o v e
EV1 0 : CALL U NMOVE •
I Re s t o r e bo a r d a r r a y
R E 'r •
I Re t u r n
59
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; F I N D MOV E RO U T I N E
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; F U N C T I ON : To d e t e r m i n e t h e c o m p u t e r ' s b e s t mo v e by
•
I pe r f o r m i ng a d e p t h f i r s t t r e e s e a r c h u s i ng
•
I t h e tec h n i q u e s o f a l ph a - be ta p r u n i ng •
•
I
; CALLED BY : C P T RMV
.
I
; CALLS : P I NFND
•
I POI NTS
•
I G E N MOV
•
I S O RT M
•
I AS C E N D
•
I U N MOV
•
I
; A RG U M E N T S : No n e
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
60
X RA A ; I n i t i a l i z e ma te f l ag
S TA M AT E F
CALL G E N MOV ; G e n e r a t e l i s t o f mo v e s
L OA N P LY ; C u r r ent ply coun te r
LX I H , P LYMAX ; Ad d r e s s o f ma x i m u m p l y n u m b e r
CMP M ; A t ma x p l y ?
cc S O RT M ; No - c a l l s o r t
L H LO M LPTR I ; Lo a d p l y i n d e x po i n t e r
S HLO M L P T RJ ; Sa v e a s l a s t mov e po i n t e r
FM1 5 : LH LO M L PT RJ ; Lo a d l a s t m o v e po i n t e r
MOV E,M ; Ge t n e x t mo v e p o i n t e r
I NX H
MOV D,M
MOV A,D
ANA A ; End o f mov e l i s t ?
JRZ FM 2 5 ; Ye s - J u m p
SOEO M L P T RJ ; S a v e c u r r e n t mo v e po i n t e r
L H LO M LPTRI ; Sa v e i n p l y p o i n t e r l i s t
M OV M,E
INX H
MOV M,D
LOA NPLY ; C u r r ent p l y coun te r
LX I H , P LYMAX ; M a x i m u m p l y n u m be r ?
C MP M ; Co mpa r e
J RC FM 1 8 ; J u mp i f n o t m a x
<: A L L MOVE ; Ex e c u t e mo ve o n boa r d a r r ay
CALL I NC H K ; C h e c k f o r l e g a l mo v e
ANA A ; I s mo v e l e g a l ?
JRZ . +8 ; Ye s - ] Um p
C AL L U N MOV E ; Re s t o r e bo a r d p o s i t i o n
JMP FM 1 5 ; J u mp
LOA NPLY ; Ge t p l y c o u n t e r
LX I H , PLYMAX ; Max p l y n umbe r
CMP M ; Beyond ma x p l y ?
J RN Z FM 3 5 ; Ye s - J u m p
LOA C O LO R ; Ge t c u r r e n t c o l o r
XRI 80H ; Ge t o p po s i t e c o l o r
CALL I NC H K l ; De t e r m i n e i f K i ng i s i n c h e c k
ANA A ; In check ?
JRZ FM 3 5 ; No - J ump
JMP FM 1 9 ; J u m p ( O n e mo r e p l y f o r c h e c k )
FM1 8 : L I XO M L PT RJ ; Lo a d mo v e p o i n t e r
M OV A , M LV A L ( X ) ; G e t mo v e s c o r e
ANA A ; I s i t z e r o ( i l l e g a l mo v e ) ?
J RZ FM 1 5 ; Ye s - ] Ump
CALL MOVE ; E x e c u t e mo v e o n bo a r d a r r a y
FM 1 9 : LX I H , C O LO R ; To g g l e c o l o r
MV I A, 80H
X RA M
M OV M,A ; Save new col o r
61
BIT 7,A ; I s i t wh i te ?
J RN Z . +6 ; No - J u mp
LXI H , M OV E NO ; I n c r e m e n t mo v e n u m b e r
I NR M
L H LD SCR I X ; Lo a d s c o r e t a b l e po i n t e r
M OV A,M ; Ge t s c o r e two p l y s a bo v e
I NX H ; I n c r eme n t to c u r r e n t p l y
I NX H
MOV M,A ; Save sco r e as i n i t i a l val ue
DC X H ; De c r e m e n t po i n t e r
S H LD SCR I X ; Sa ve i t
JMP FMS ; J u mp
FM2 5 : LOA M A 1' E F ; Ge t m a t e f l ag
ANA A ; Chec kma te or s ta l ema te ?
J RN Z FM3 0 ; No - J um p
LOA C K F LG ; Ge t c h e c k f l a g
ANA A ; Wa s K i ng i n c h e c k ?
MV I A , 80H ; P r e - s e t s t a l e ma t e s c o r e
JRZ FM3 6 ; No - J um p ( s t a l e m a t e )
L OA M OV E N O ; Ge t mo v e n u m b e r
S TA PMATE ; Sa ve
MV I A , 0 F FH ; P r e- s e t c h e c km a t e s co r e
JMP FM3 6 ; J u mp
FM30 : L OA N PLY ; Ge t pl y co u n t e r
CPI 1 ; A t top o f t r e e ?
RZ ; Ye s - r e t u r n
CALL A S C E ND ; A s c e nd o n e p l y i n t r e e
L H LD SC R I X ; Lo a d s c o r e t a b l e p o i n t e r
I NX H ; I n c r eme n t to c u r r e n t p l y
I NX H
MOV A,M ; Ge t sc o r e
DC X H ; Re s t o r e po i n t e r
DCX H
JM P FM3 7 ; J u mp
FM3 5 : CALL P I N FN D ; C o mp i l e p i n l i s t
C ALL PO I N 'rS ; Ev a l u a t e mo v e
C AL L U N MOV E ; Re s t o r e bo a r d po s i t i o n
L OA VA LM ; G e t v a l u e o f mo v e
FM 3 6 : LX I H , MA'I' E F ; Se t ma t e f l ag
S ET 0,M
L H LD SCRIX ; Lo a d s c o r e t a b l e po i n t e r
FM 3 7 : C MP M ; C o m p a r e t o s c o r e 2 p l y a bo v e
J RC FM 4 0 ; Jump i f less
JRZ FM4 0 ; J u mp i f e q u a l
N EG ; Ne g a t e s c o r e
I NX H ; I n e r s c o r e t a b l e po i n t e r
C MP M ; C o mp a r e t o s c o r e 1 p l y a bo v e
JC FM l S ; J u mp i f l e s s t h a n
JZ FM l S ; Jump i f equal
62
MOV M,A ; S a v e a s n e w s c o r e 1 p l y a bo v e
L DA N P LY ; Ge t c u r r e n t p l y c o u n t e r
CPI 1 ; At top o f t r ee ?
JNZ FM 1 5 ; No - J u m p
LHLD M L P T RJ ; Lo a d c u r r e n t m o v e p o i n t e r
SHLD B E S TM ; S a v e a s b e s t mo v e p o i n t e r
LOA SCORE + l ; G e t b e s t mo v e s c o r e
CPI 0 F FH ; Was i t a c h e c km a te ?
JNZ FM 1 5 ; No - J u m p
LX I H , P LY M A X ; Ge t m a x i m u m p l y n u m b e r
DC R M ; Subtr ac t 2
DCR M
LOA KOLOR ; Ge t c o mp u t e r ' s c o l o r
B I 'r 7,A ; I s i t wh i te ?
RZ ; Ye s - r e t u r n
LX I H , PMATE ; C h e c km a t e move n um be r
OC R M ; De c r e m e n t
RET ; Re t u r n
FM 4 0 : CALL ASC END ; A s c e nd o n e p l y i n t r e e
JMP FM 1 5 ; J u mp
63
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; F U N C ·r I 0 N : To a d j u s t a l l n e c e s s a r y p a r a me t e r s t o
•
I a scend one ply in the t r ee .
•
; CALLED BY : F N D �l O V
.
I
; CALLS : U N M OV
.
I
; A RG U M E N T S : No n e
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
ASC END : LX I H , C O LO R ; To g g l e c o l o r
MV I A, 80H
X RA M
MOV M,A ; Save new co l o r
B I 'I' 7, A ; I s i t wh i t e ?
JRZ . +6 ; Ye s - j u m p
LX I H , M OV E N O ; De c r e m e n t mo ve n u m b e r
OC R M
LHLD SCRI X •
I Lo a d s c o r e t a b l e i n d e x
DC X H .
I De c r e m e n t
S H LD SCR I X •
I Sa ve
LXI H , NPLY •
I De c r e me n t p l y c o u n t e r
OC R M
LHLD MLPTRI •
I Lo a d p l y l i s t po i n t e r
DCX H •
I Lo a d po i n t e r t o mo v e l i s t t o p
MOV D,M
DC X H
MOV E , M
SDED M LN XT ; Up d a t e mo v e l i s t a v a i l p t r
DC X H ; Ge t p t r t o n e x t mo v e t o u n d o
MOV D,M
DC X H
MOV E,M
S H LD MLPTRI ; Sa ve new p l y l i s t po i n t e r
S DED M L P T RJ ; S a v e n e x t m o v e po i n t e r
C ALL U NMOVE ; Re s t o r e b o a r d t o p r e v i o u s p l y
RET ; Re t u r n
64
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
; ON E MOV E BOO K O P E N I NG
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
; FU CT ION : To p r o v i d e a n o p e n i n g bo o k o f a s i n g l e
•
I mov e .
.
I
; C ALLED BY : F N DMOV
.
I
; C A L LS : No n e
.
I
; A RG U M E N T S : No n e
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
65
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'
; G RA P H I C S DATA B A S E
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'
; D E S C R I P T I ON : T h e G r a p h i c s Da t a B a s e c o n t a i n s t h e
; n e c e s s a r y s t o r e d d a t a to p r e p u c e t h e p i e c e
; o n t he bo a r d . On l y t h e c e n t e r 4 x 4 b l o c k s a r e
; s t o r e d a nd o n l y f o r a B l a c k P i e c e o n a W h i t e
; squa r e . A Wh i t e p i e c e o n a b l a c k s q u a r e i s
; p r o d u c e d by c o mp l e m e n t i n g e a c h b l o c k , a n d a
; p i e c e o n i t s own c o l o r s q u a r e i s p r o d u c e d
; by mov i n g i n a ke r ne l o f 6 b l oc k s .
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'
. LOC S T A RT + 3 8 4
B LB A S E =
S T ART+ 5 1 2
B LOC K =
. - B L BAS E
. RA D I X 16
. BYTE 80 , 80 , 80 , 80 ; B l a c k P a w n o n Wh i t e s q u a r e
. B YTE 8 0 , 0A 0 , 9 0 , 8 0
. BYTE 8 0 , 0A F , 9 F , 8 0
. BYTE 80 , 83 , 83 , 80
. BYTE 80 , 0B0 , 0B0 , 80 ; B l a c k K n i g h t o n Wh i t e sq u a r e
. BYTE 0BE , 0BF , 0BF , 9 5
. BYTE 0A0 , 0BE , 0BF , 8 5
. BYTE 83, 83, 83, 81
. B YT E 0 0 , 0A 0 , a 0 , 0 0 ; B l a c k B i s hop o n Wh i t e squ a r e
. BYTE 0A8 , 0BF , 0BD , 8 0
. B YT E 8 2 , 0A F , 8 7 , 8 0
. BYTE 82 , 83 , 83 , 80
. BYTE 80, 80 , 80 , 80 ; B l a c k Ro o k o n Wh i t e s q u a r e
. BYTE 8A , 0 B E , 0 B D , 8 5
. BYTE 8 0 , 0B F , 0BF , 8 0
. B YT E 82, 83, 83, 81
. B YT E 90 , 80 , 80 , 90 ; B l a c k Qu e e n o n Wh i t e s q u a r e
. BYTE 0BF , 0B 4 , 0BE , 9 5
. B YT E 8B , 0B F , 9F , 8 1
. BYTE 83 , 83 , 83 , 81
. BYTE 80 , 0B8 , 90 , 80 ; B l a c k K i n g o n Wh i t e s q u a r e
. B Y'r E 0 BC , 0BA , 0B 8 , 9 4
. BYTE 0AF , 0BF , 0B F , 8 5
. BYTE 83, 83 , 83, 81
. BYTE 9 0 , 0B 0 , 0B0 , 8 0 ; To pp l e d B l a c k K i n g
. BYTE 0BF , 0B F , 0B 7 , 8 0
. BYTE 9F , 0BF , 0BD , 8 0
. BYTE 80 , 80 , 88 , 9D
K E RN E L =
. - B LB A S E
. BYTE 0 B F , 9 F , 0 A F , 0 B F , 9A , 0A 5 ' P a wn Ke r n e l
•
. BYTE 8 9 , 0A F , 0 BF , 9F , 0B 9 , 9 F K n i g h t Ke r n e l
•
I
. BYTE 9 7 , 0B E , 9 6 , 0 BD , 9B , 0 B 9 B i s h o p Ke r n e l
.
. BYTE 0 B 5 , 0 A l , 9 2 , 0 B F , 0 AA , 9 5 Ro o k Ke r n e l
•
I
. B Yrr E 0A 3 , 8 5 , 0A 7 , 9A , 0B F , 9F K i ng K e r ne l
•
I
. BYTE 0A8 , 0B F , 8 9 , 0A 2 , 8F , 8 6 To pp l e d K i ng K e r n e l
•
I
. RA D I X 10
66
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; S TA N DA R D M E S S AG E S
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
. LO C S TA RT + l 8 0 0 H
G RTTNG : . ASC I I " W E LC O M E TO C H E S S ! C A R E FOR A GAM E ? "
A NA M S G : . AS C I I " WO U L D YOU L I K E TO ANA L Y Z E A POS I T I ON ? "
C L RM S G : . AS C I I " DO Y O U WAN T TO P L A Y W H I T E ( w ) O R B LAC K ( b ) ? "
T I T LE ! : . ASC I I " S A RGON "
T I TLE 2 : . ASC I I " P LA Y E R "
..
S PAC E : • ASC I I " ; Fo r o u tp u t o f b l a n k a r e a
MVENUM : . AS C I I "01 "
ti "
T I TLE 3 : . AS C I I
. AS C I I [ "H 83 ] ; Pa r t o f T I TL E 3 - U n d e r l i n e s
. ASC I I [ "H 8 3 ]
. AS C I I [ "H8 3 ]
. ASC I I [ "H 8 3 ]
. ASC I I [ "H 8 3 ]
.
. AS C I I [ .H 8 3 ]
It "
. ASC I I
. ASC I I [ .. H 8 3 ]
. AS C I I [ .. H 8 3 ]
.
. AS C I I [ .H 83 ]
.
. ASC I I [ .H 8 3 ]
. AS C I I [ .. H 8 3 ]
. AS C I I [ .. H 8 3 ]
" It
. AS C I I
MVEMSG : . ASC I I " a l -a l "
o.o: . AS C I I " 0 -0 "
0.0.0: . ASC I I " 0 -0 -0 "
C KM S G : . ASC I I " C H EC K "
MTMSG : . ASC I I " MA T E I N "
It
MTPL : . ASC I I 2 ti
PCS : . ASC I I " K QRBNP " ; Va l i d p i e c e c h a r a c t e r s
UW I N : . AS C I I " YOU W I N "
!WIN : . ASC I I " I WIN"
A GA I N : . ASC I I " C A R E F O R A N OT H E R GAM E ? "
C RT N E S : . ASC I I " I S TH I S R I GHT? "
P LYDEP : . ASC I I " S E L E C T LOOK A H E A D ( 1 - 6 ) "
..
T I T LE 4 : ·. A S C I I "
W S MOVE : . AS C I I " W H O S E MOV E I S I T ? "
B LAN K R : . ASC I I [ � H lC ] ; Con t r o l-\
P . PE P : . AS C I I " P x Pe p "
I N VA L l : . AS C I I " I N VA L I D MOVE "
I N VA L 2 : . AS C I I " T R Y AGA I N "
67
· *******************************************************
I
; VAR I ABLES
· ****************************************************** *
I
B RD P OS : . B L K B 1 ; I n d e x i n t o t h e bo a r d a r r a y
A N BDPS : . B LKB 1 ; Ad d i t i o n a l i n d e x r eq u i r e d f o r AN A L Y S
I N D X E R : . WORD B LB AS E ; I nde x into g r aph i c s d a t a base
N O RMA D : . B LKW 1 ; Th e a d d r e s s o f t h e u p p e r l e f t h a nd
; c o r n e r o f t h e s q u a r e o n t h e bo a r d
L I N EC T : . B Y T E ; C u r r e n t l i n e n umbe r
·
I *******************************************************
; MAC RO D E F I N I T I ON S
·
I *******************************************************
; A l l i n p u t / o u t p u t t o S A RG O N i s h a nd l e d i n t h e f o r m o f
; m a c r o c a l l s t o s i mp l i f y c o n v e r s i o n t o a l t e r n a t e s y s t e m s .
; A l l o f t h e i n p u t /o u t p u t ma c r o s c o n f o r m t o t h e J o v e m o n i t o r
; o f t h e J u p i t e r I I I c o mp u t e r .
·
I ************************* ******************************
·
I * * * OUTPUT <C R > < L F > * * *
. D E F I N E C A RR E·r =
[ RST 7
. B Y'r E 9 2H , lAH
. WORD 0]
·
I * * * C LEAR SCREEN * * *
. D E F I N E C LRS C R =
[ RST 7
. B Y'r E 08 2H , lAH
. WORD B LA N K R , l ]
·
I * * * P R I N T AN Y L I N E ( N A M E , L E NG T H ) * * *
. D E F I N E PRT L I N [ N AM E , L N G T H ] =
[ R ST 7
. B Y'r E 08 2H , lAH
. WORD N A M E , LN G T H ]
·
I * * * P R I N T AN Y B LOC K ( N A M E , L E N GT H ) * * *
. D E F I N E P RT B L K [ N AM E , L N G T H ] =
[ RST 7
. B Y 'r E 0 B 3 H , lAH
. WORD N AM E , L N GT H ]
·
I * * * E X I T TO M O N I TO R * * *
. DEF I NE EX IT=
[ RST 7
. B Y 'r E 0 lFH ]
68
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; M A I N P ROG RA M D R I V E R
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; F U N C T I ON : To c o o r d i n a t e t h e g a m e m o v e s .
•
I
; CALLED BY : No ne
•
I
; C ALLS : I N T E RR
•
I I N I TB D
•
, D S P B RD
•
I C PT RM V
•
, P L Y RM V
•
, T B C PC L
•
I PG I FN D
•
I
; M A C RO C A L LS : C L RS C R
•
I C A RR E T
•
I P RT L I N
•
, P RT B L K
•
I
; A RG U M E N T S : No ne
· * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
. LOC S 'f A RT + l A 0 0 H ; A b o v e t h e mo v e l o g i c
D R I VE R : L X I S P , STAC K ; S e t s t a c k po i n t e r
C LRSCR ; B l a n k out sc r een
P RT L I N G RT'f N G , 3 4 ; Ou t p u t g r e e t i n g
D R I V0 1 : CALL C HARTR ; Ac c e p t a n swe r
CARRET ; New l i ne
CPI 5 9H ; Is i t a ' Y ' ?
JNZ ANALYS ; Y e s - J u mp
S UB A ; Code o f Wh i te i s z e r o
S TA C O LOR ; Wh i te a lways mov e s f i r s t
CALL I NT E RR ; P l a ye r s c o l o r /s e a r c h d ep t h
CALL I N I TB D ; I n i t i a l i ze boa r d a r r a y
MVI A,l ; M o v e n u m be r i s l a t a t s t a r t
S TA MOVENO ; Save
S TA L I N EC T ; L i n e n u m be r i s o n e a t s t a r t
LX I H , MVENUM ; Ad d r e s s o f a s c i i mo v e n u m be r
MVI M , 30H ; In i t to ' 0 1 '
I NX H
MVI M , 31H
I NX H
MVI M , 20H
CALL D S P B RD ; Se t up g r aph i c s boa r d
P RT L I N TITLE4 , 1 5 ; Pu t u p p l a y e r h e a d i ng s
P RT L I N T I TL E 3 , 1 5
D R I V 0 4 : P RT B L K M VE N U M , 3 ; D i s p l ay m o v e n umbe r
L OA K O LOR ; B r i n g i n c o mp u t e r ' s c o l o r
ANA A ; I s i t wh i te ?
J RN Z DR08 ; No - j u mp
69
CALL PG I F N D ; New pa g e i f needed
CPI 1 ; W a s p a g e t u r ned ?
CZ T B C PC L ; Ye s - T a b to c o m p u t e r s c o l u rr
C A LL C PT R M V ; M a k e a n d w r i t e c o mp u t e r s m o v
PRTBLK S PAC E , l ; Ou t p u t a s pa c e
CALL P L Y RM V ; A c c e p t a n d m a k e p l a y e r s mo v e
C A RR E T ; New l i ne
J M PR DR0C ; J u mp
DR0 8 : CALL P LYRMV ; Ac c e p t a n d ma k e p l a y e r s mo v e
P RT B L K S PA C E , l ; O u t p u t a s pa c e
CALL PG I FND ; N e w pa g e i f n e e d e d
C P I· 1 ; Was pag e t u r ned ?
CZ T B C PC L ; Ye s - T a b to c o mp u t e r s c o l u m
C A LL C P TRM V ; M a k e and w r i t e compu te r s mov
C A RR E T ; Ne w l i n e
DR0C : LX I H , M VE N U M + 2 ; Ad d r o f 3 r d c h a r o f mo v e
MVI A , 20H ; Asc i i space
CMP M ; Is cha r a space ?
MVI A , 3AH ; Se t u p t e s t v a l u e
J RZ DR1 0 ; Ye s - ] U m p
I NR M ; I n c r eme n t v a l ue
CMP M ; Ov e r A s c i i 9 ?
J RN Z DR1 4 ; No - J u m p
MVI M , 30H ; Se t c h a r t o z e r o
DR1 0 : DC X H ; 2nd cha r o f Asc i i move no .
I NR M ; I n c r e m e n t va l u e
CMP M ; Ov e r A s c i i 9 ?
J RN Z DR1 4 ; No - J ump
MVI M , 30H ; Se t c h a r to z e r o
DC X H ; 1 s t c ha r o f Asc i i move no .
I NR M ; I n c r eme n t va l ue
CMP M ; Ov e r A s c i i 9 ?
J RN Z DR1 4 ; N o - ] U mp
MVI M, 31H ; Make 1s t cha r a one
MVI A, 30H ; Make 3 rd cha r a zero
S TA M VE N U M + 2
DR1 4 : LX I H , M OV E N O ; H e x a d e c i ma l mo v e n u m b e r
I NR M ; I n c r eme n t
JMP DR I V0 4 ; J u mp
70
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
•
, depth a nd co l o r .
.
'
; C AL L E D BY : DR I VE R
•
I
; C ALLS : C H A RT R
•
; M A C RO C A L L S : P RT L I N
•
' CARRET
•
I
; A RG U M E N T S : No n e
71
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
I NTERR : P RT L I N C L RM S G , 4 1 ; Re q u e s t c o l o r c h o i c e
CALL C H A RT R ; Ac c e p t r e s po n s e
C A RR E T ; Ne w l i n e
CPI 57H ; Did p l aye r r eq u e s t wh i te ?
J RZ IN0 4 ; Ye s - b r a n c h
SUB A ; Se t c o m p u t e r s c o l o r t o w h i t e
S TA K O LOR
LX I H , T I TLE l ; P r epa r e move l i s t t i t l e s
LXI D , TITLE4+2
LXI B,6
LD IR
LX I H , T I TLE 2
LX I D , T I TLE 4 + 9
LX I B,6
LDI R
JMPR IN08 ; J u mp
I N0 4 : MVI A , 80H ; Se t c o mp u t e r s c o l o r t o b l a c k
S TA KO LOR
LX I H , T ITLE 2 ; P r e p a r e mo v e l i s t t i t l e s
LXI D , TI TLE 4 + 2
LX I B,6
LD I R
LXI H , T I TLE l
LX I D , T I TLE 4 +9
LXI B,6
LDI R
I N0 8 : P RT L I N PLYDEP , 2 3 ; Re q u e s t d e p t h o f s e a r c h
CALL C H A RTR ; A c c e p t r e s po n s e
C ARRET ; New l i ne
LXI H , PLYMAX ; Ad d r e s s o f p l y d e p t h v a r i a b l
MVI M,2 ; De f a u l t d e p t h o f s e a r c h
CPI 31H ; Und e r m i n i mum o f 1 ?
RM ; Ye s - r e t u r n
CPI 3 7H ; Ov e r ma x i m um o f 6 ?
RP ; Ye s - r e t u r n
SUI 30H ; Subt r a c t Asc i i con s t a n t
MOV M,A ; Se t d e s i r ed depth
RET ; Re t u r n
72
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; C OM P U T E R MOV E R O U T I N E
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; F UNCT I ON : To c o n t r o l t h e s e a r c h f o r t h e c o m p u t e r s mo v e
•
I a n d t h e d i s p l a y o f t h a t mo v e o n t h e b o a r d
•
, a n d 1 n t h e mo v e l i s t •
•
I
; CALLE D BY : DR I VE R
•
•
: C A L LS : F N D MOV
•
, F C D MA T
•
I MOV E
•
, E X EC M V
•
' B I TA S N
•
' I NC H K
•
,
; M A C RO C A L LS : PRTBLK
•
• CARRET
•
,
; A RG U M E NT S : No n e
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
C PT R M V : C A L L FN DMOV ; S e l e c t b e s t mo v e
L H LD B E S TM ; M o v e l i s t po i n t e r v a r i a b l e
S HLD M L P T R'1 ; Po i n t e r t o mo v e d a t a
L OA SCORE + l ; To c h e c k f o r m a t e s
CPI 1 ; M a t e a g a i n s t c o mp u t e r ?
J RN Z C P 0C ; No - J ump
MVI C,l ; C o mp u t e r m a t e f l a g
CALL FC DMAT ; Fu l l chec kma te ?
C P 0C : CALL MOVE ; P r o d u c e mo v e o n b o a r d a r r a y
C ALL E X EC M V ; M a k e move o n g r a p h i c s bo a r d
; a n d r e t u r n i n f o a bo u t i t
MOV A,B ; Spec i a l move f l ag s
A NA A ; Spec i a l ?
J RN Z CP10 ; Ye s - j u m p
MOV D,E ; " To " p o s i t i o n o f t h e m o v e
CALL B I TAS N ; Conve r t to Asc i i
S.H L D MVEMSG + 3 ; Pu t i n move m e s s a g e
M OV D,C ; " F r om " p o s i t i o n o f t h e move
CALL B I TA S N ; Conve r t to Asc i i
S HLD MVEMSG ; Pu t i n move me s s age
P RT B L K MVEMSG , 5 ; Ou tpu t te x t o f move
JMPR CPlC ; J u mp
CP10 : BIT l,B ; K i ng s i d e c a s t l e ?
J RZ . +1 1 ; No - J u mp
P RT B L K 0.0, 5 ; O u t p u t " 0 -0 "
J M PR C P lC ; J u mp
BIT 2,B ; Qu e e n s i d e c a s t l e ?
JRZ . +1 1 ; No - ] U m p
73
P RT B L K o.o.o, 5 , Ou t p u t " 0 - 0 -0 "
JMPR CPlC ; J u mp
P RT B L K P . PEP , 5 ; Ou t p u t " P x Pe p " - E n pa s s a n t
C P lC : L OA C O LOR ; S h o u l d c omp u t e r c a l l c h e c k ?
M OV B,A
XRI 80H ; To g g l e c o l o r
S TA C O LOR
C A LL I NC H K ; C he c k f o r chec k
ANA A ; I s e nemy i n chec k ?
MOV A,B ; Re s t o r e c o l o r
STA C OLOR
J RZ CP24 ; No - r e t u r n
C ARRET ; New l i ne
L OA S C OR E + l ; C h e c k f o r p l a y e r ma t e d
CPI 0 F FH ; Fo r ce d m a t e ?
CNZ T BC P M V ; No - T a b t o c o mp u t e r c o l um n
P RT B L K C KM S G , 5 ; Ou t p u t " c h e c k "
LXI H , L I N ECT ; Ad d r e s s o f s c r e e n l i n e c o u n t
I NR M ; I n c r e m e n t f o r me s s a g e
CP24 : L OA SCORE + l ; C h e c k a g a i n f o r ma t e s
CPI 0FFH ; Pl a y e r ma ted ?
RN Z ; No - r e t u r n
MVI C,0 ; S e t p l a y e r ma t e f l a g
C A LL F C OMAT ; F u l l c he c kma t e ?
RET ; Re t u r n
74
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
; F O RC E D M A T E H A N D L I NG
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
; F U N C T I ON : To e x a m i n e s i t u a t i o n s w h e r e t h e r e e x i t s
.
, a f o r c ed ma te a nd d e te r m i n e whe t h e r o r
.
•
, n o t t h e c u r r e n t mo v e i s c h e c k m a t e . If it lS ,
.
,
; CALLED BY : C PT RM V
•
,
; C ALLS : MATED
.
, C HARTR
•
, TBP LMV
•
,
; A RG U M E N TS : Th e o n l y v a l u e pa s s ed i n a r e g i s t e r i s t h e
; f l a g wh i c h t e l l s FC DMAT w h e t h e r t h e c ompu t e r
; o r t h e p l a y e r i s ma t e d .
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * *
,
F C DM A T : L OA M OV E N O ; C u r r e n t m o v e n um b e r
M OV B ,A ; Save
L OA PMATE ; M o v e n um b e r w h e r e ma t e o c c u r s
SUB B ; Numbe r o f move s t i l l ma t e
ANA A ; Chec kma te ?
J RN Z FM0C ; No - j ump
B IT 0 ,C ; C he c k f l ag f o r who i s ma t e d
J RZ FM0 4 ; Jump i f p l aye r
C AR P S T ; New l i ne
P RT L I N C KM S G , 9 ; P r i n t " C H EC KM AT E "
CALL MATED ; T i p o v e r K i ng
P RT L I N UWI N , 7 ; Ou tpu t " YOU W I N "
JMPR FM0 8 ; J ump
FM 0 4 : P RT L I N MTMSG , 4 ; O u t p u t " MA T E "
P RT L I N IWIN , 5 ; Ou t p u t " I W I N "
FM0 8 : P OP H ; Re m o v e r e t u r n a d d r e s s e s
POP H
CALL C HA RT R ; I n pu t a n y c h a r to p l ay a g a i n
FM0 9 : C L RS C R ; Blank s c r een
P RT L I N AGA I N , 2 2 •
, " C A R E F O R A N OT H E R G A M E ? "
JMP DRIV0 1 ; J u mp ( Re s t o f g a m e i n i t )
F M 0C : B IT 0,C ; Who h a s f o r c ed ma t e ?
RNZ ; Re tu r n i f p l a y e r
C A RR E T ; New l i ne
ADI 30H ; N u m be r o f mo v e s t o As c i i
S TA MTPL ; P l a ce va l ue i n me s s a g e
P RT L I N MTM S G , 9 ; O u t p u t " MA 'l' E I N x MOV E S "
CALL T B P LMV ; Ta b t o p l a y e r s c o l um n
RET ; Re t u r n
75
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'
; TAB TO P LAY E RS C O L U M N
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'
; FUNCT I ON : To s p a c e o v e r i n t h e mo v e l i s t i n g t o t h e
.
'
c o l u m n i n w h i c h t h e p l a y e r s mo v e s a r e b e i n g
•
,
r e cor ded . Th i s r o u t i n e a l s o r e p r i n t s t h e
•
' mo v e n u m b e r .
•
; C A L L E D BY : P L Y RM V
•
,
; C A L LS : No ne
•
,
; M AC RO C A L L S : P RT B L K
.
.
: ARG U M E N T S : No n e
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
T B P LC L : P R T B L K MVENUM , 3 •
, Re p r o d u c e m o v e n u m b e r
L OA K O LOR •
, C o mp u t e r s c o l o r
ANA A •
' I s c o mp u t e r w h i t e ? .
RN Z .
' No -
return
P RT B L K S PAC E , 6 •
' Ta b t o n e x t c o l u m n
RET •
' Re t u r n
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'
; TA B TO C OM P U T E RS C O L U M N
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
; F U N C T I ON : To s p a c e o v e r i n t h e mo v e l i s t i n g t o t h e
•
I c o l um n i n w h i c h t h e c o m p u t e r s mo v e s a r e
•
' be i n g r e c o r d e d . Th i s r o u t i n e a l s o r e p r i n t s
•
' t h e mo v e n u m b e r •
•
'
; CALLED BY : DRIVER
•
' C PT RM V
•
I
; C A L LS : No n e
•
,
; MAC RO C A L LS : P RT B L K
•
'
; ARG U M E N T S : No n e
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
T B C PC L : P RT B L K MVENUM , 3 •
' Re p r od u c e m o v e n um be r
L DA K O LOR •
, Compu te r ' s co l o r
ANA A •
, I s c o mp u t e r w h i t e ? .
RZ •
' Ye s -
return
P RT B L K S PAC E , 6 •
' Ta b t o n e x t c o l u m n
RET •
' Re t u r n
76
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'
; TA B TO P LA Y E R S C O L U M N W/O M O V E N O .
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
; F U N C T I ON : L i k e T B P LC L , e x c e p t t h a t t h e m o v e n u m b e r
.
, i s n o t r ep r i n ted .
•
'
i CALLED BY : FC DMAT
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'
T B P LM V : P RT B L K S P AC E , 3
L OA K OLOR
ANA A
RN Z
P RT B L K S PAC 8 , 6
R E 'f
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
; TA B TO C OM P U T E R S C O L U MN W/O MOV E N O .
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
: F U N C T I ON : L i k e T B C P C L , e x c e p t t h a t t h e mo v e n u m b e r
•
I i s no t r ep r i n ted .
•
,
; CALLED BY : C PTRMV
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
T B C PM V : P RT B L K S P AC E , 3
LOA KOLOR
ANA A
RZ
P RT B L K S PA C E , 6
RET
77
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
; B O A RD I N D E X TO AS C I I S Q U A R E NAM E
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
; F U N C 'r I O N : To t r a n s l a t e a h e x a d e c i ma l i nd e x i n t h e
•
, bo a r d a r r a y i n t o a n a s c i i d e s c r i p t i o n
•
, o f t h e squa r e i n a l g e b r a i c che s s n o t a t i o n •
,
; C A L L E O BY : C P T RM V
•
,
; CALLS : DIVIDE
•
,
; ARG U M E N T S : Bo a r d i nd e x i npu t i n r eg i s te r D a nd t h e
; As c i i squa r e name i s o u tpu t i n r eg i s t e r
; pa i r H L .
· * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
B I TA S N : SUB A •
, Ge t r e a d y f o r d i v i s i o n
MVI E, 10
CALL D I V I DE •
, Di v ide
DC R D •
I Ge t r a n k o n 1 - 8 ba s i s
ADI 60H •
I Conve r t f i l e to Ase i i ( a- h )
MOV L,A •
I Save
M OV A,D •
I Ra n k
ADI 30H •
I Conve r t r a n k to Ase i i ( 1-8 )
M OV H ,A •
I Save
RET •
, Re t u r n
78
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; P L A Y E RS MOV E A N A L Y S I S
· * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; F U N C T I ON : To a c c e p t a n d v a l i d a t e t h e p l a y e r s mo v e
•
I a n d p r od u c e i t o n t h e g r a p h i c s bo a r d . Al so
•
I a l l ow s p l a y e r t o r e s i g n t h e g a m e by
.
I e n t e r i ng a c o n t r o l - R .
.
I
; CALLED BY : D R I VE R
•
I
; CALLS : C HARTR
•
I ASNTB I
.
I VA LMOV
•
I EXECMV
•
I PG I FN D
•
I T B P LC L
•
I
; A RG U M E N T S : No ne
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
P LY RM V : C A L L C HA RT R ; Ac c e p t " f r o m " f i l e l e t t e r
CPI 12H ; I s i t i ns tead a Con t r o l -R ?
JZ FM 0 9 ; Ye s - ] U m p
M OV H,A ; Sa v e
CALL C HA RT R ; Ac c e p t " f r om " r an k numbe r
M OV L,A ; Save
CALL ASN TB I ; C o n v e r t t o a bo a r d i n d e x
SUB B ; G i v e s boa r d i nd e x , i f va l i d
J RZ PL0 8 ; Jump i f i nv a l i d
S TA M VE M S G ; Mo ve l i s t " f r om " p o s i t i on
CALL C HART R ; Ac c e p t s e pa r a t o r & i g n o r e i t
C ALL C HA RT R ; Re p e a t f o r " t o " p o s i t i o n
M OV H ,A
CALL C H A RT R
M OV L,A
C ALL ASNTB I
SUB B
J RZ PL0 8
S TA M V E M SG + l ; Move l i s t " to " pos i t i o n
CALL VA LMOV ; De t e r m i n e s i f a l e g a l m o v e
ANA A ; Le g a l ?
JNZ PL0 8 ; No - J ump
C ALL E X EC M V ; M a k e mo v e on g r a ph i c s boa r d
RET ; Re t u r n
PL0 8 : LX I H , L I N ECT ; Ad d r e s s o f s c r e e n l i n e c o u n t
I NR M ; I n c r e a s e by 2 f o r m e s s a g e
I NR M
CARRET ; Ne w l i ne
CALL PG I FND ; New pag e i f needed
P RT L I N I N VA L l , 1 2 ; O u t p u t " I N VA L I D M OV E "
P RT L I N I N VA L 2 , 9 ; Ou t p u t " T R Y AGA I N "
C ALL T B P LC L ; Ta b t o p l a y e r s c o l u m n
J�P P LY RM V ; J ump
79
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** ** * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
; A S C I I S QU A R E NAME TO BOARD I N D E X
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * *
I
; F U NC T I ON : To c o n v e r t a n a l g e b r a i c s q u a r e n a m e i n
•
, A s c i i t o a h e x a d e c i ma l bo a r d i nd e x •
•
I Th i s r o u t i n e a l s o c h e c k s t h e i n p u t f o r
•
I va l id i ty •
•
I
; CALLE D BY : P L Y RM V
•
,
; C A L LS : M LT P LY
•
I
; ARG U M E N T S : A c c e p t s t h e s q u a r e n a me i n r e g i s t e r p a i r H L
•
I a n d o u t p u t s t h e boa r d i n d e x i n r e g i s t e r A •
•
I Reg i s t e r B = 0 i f o k . Reg i s te r B = Reg i s te r
•
, A i f i n va l i d .
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
A S N T B I : MOV A,L •
I Asc i i r an k
SUI 30H •
I Ra n k 1 - 8
CPI 1 •
I C h e c k l owe r bo u nd
JM AT 0 4 •
I J u mp i f i n v a l i d
CPI 9 •
I C h e c k u p p e r bo u n d
J RN C AT0 4 •
I J u mp i f i n v a l i d
I NR A •
, Ra n k 2 - 9
M OV D ,A •
I Re a d y f o r m u l t i p l i c a t i o n
MVI E , 10
C A LL M LT P L Y •
I Mu l t iply
MOV A,H •
I As c i i f i l e l e t te r ( a - h )
SUI 4 0H •
I F i le 1 - 8
CPI 1 •
, C h e c k l owe r bo u n d
JM AT0 4 •
I J u mp i f i n v a l i d
CPI 9 •
, C h e c k u pp e r bo u n d
J RN C AT 0 4 •
, J ump i f i n va l i d
ADD D •
I F i l e +Ra n k ( 2 0 - 9 0 ) =Bo a r d i nd e x
MVI B,0 •
, Ok f l ag
RET •
I Re t u r n
AT 0 4 : MOV B ,A •
, I n va l id f l ag
RET •
, Re t u r n
80
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
; VA L I DAT E M O V E S U B R O U T I N E
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; F U NC T I ON : To c h e c k a p l a y e r s mo v e f o r v a l i d i t y .
•
I
; CALLED BY : P L Y RM V
•
I
; CALLS : G E N MOV
•
I MOVE
•
I I NC H K
•
I U NM O V E
•
I
; A RG U M E N T S : Re t u r n s f l a g i n r e g i s t e r A , 0 f o r va l id
•
I and 1 f o r i n va l i d move .
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
V A LM O V : L H LD M L P T RJ ; S a v e l a s t mo v e po i n t e r
PUSH H ; Sa v e r eg i s t e r
L OA K O LOR ; Compu t e r s c o l o r
XRI 80H ; To g g l e c o l o r
S 'rA C O LO R ; Sto r e
LX I H , PLY I X- 2 ; Lo a d mo v e l i s t i n d e x
S H LD MLPTR I
LX I H , ML I ST+l 0 2 4 ; Ne x t a v a i l a b l e l i s t po i n t e r
S H LO M LNXT
CALL G E N M OV ; G e n e r a t e o p p o n e n t s mo v e s
LX I X , MLIST+l 0 2 4 ; I n d e x t o s t a r t o f mo v e s
VA S : L OA MVEMSG ; " F r om " po s i t i o n
CMP MLFRP ( X ) ; I s i t in l i s t ?
J RN Z VA 6 ; No - J ump
L OA MVEMSG+ l ; " To " po s i t i o n
CMP M LT O P ( X ) ; Is i t in l is t ?
J RZ VA 7 ; Ye s - ] U m p
VA 6 : M OV E , M LPTR ( X ) ; Po i n te r to n e x t l i s t move
M OV D , M L PTR+ l ( X )
X RA A ; A t e nd o f l i s t ?
C MP D
J RZ VA 1 0 ; Ye s - ] U m p
PUSH D ; Mo v e t o X r eg i s t e r
POP x
JMPR VA S ; J u mp
VA 7 : S I XO M L PT RJ ; S a v e o pp o n e n t s m o v e p o i n t e r
CALL MOVE ; Ma k e move on boa r d a r r ay
CALL I NC H K ; Was i t a l eg a l move ?
ANA A
J RN Z VA 9 ; No - ] Ump
VAS : POP H ; Re s t o r e s a v e d r e g i s t e r
RET ; Re t u r n
VA9 : CALL U NMOVE ; U n - d o mov e o n boa r d a r r a y
VA 1 0 : MVI A, l ; Se t f l ag f o r i n va l i d move
POP H ; Re s t o r e s a v e d r e g i s t e r
S H LD M L P T RJ ; S a v e m o v e po i n t e r
RET ; Re t u r n
81
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; AC C E PT I N P U T C H A RA T E R
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; F U NCT I ON : A c c e p t s a s i ng l e c h a r a c t e r i n p u t f r o m t h e
•
I c o n s o l e k e y bo a r d a n d p l a c e s i t i n t h e A
.
I r eg i s te r . Th e c h a r a c t e r i s a l s o e c h oed o n
•
I the v ideo s c r een , u n l e s s i t i s a ca r r ag e
•
I r e t u r n , l i ne f e e d , o r ba c k s p a c e •
•
I Lo we r c a s e a l p h a be t i c c h a r a c t e r s a r e f o l d e d
•
I t o u p pe r c a s e .
•
I
; CALLS : No n e
•
; NOT E S : Th i s r o u t i n e c o n t a i n s a r e f e r e n c e t o a
; m o n i t o r f u n c t i o n o f t h e J o v e mo n i t o r , t h e r e -
; f o r the f i r s t few l i nes o f th i s r o u t i ne a r e
; s y s tem depend e n t .
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
RM ; No n e e d t o f o l d - r e t u r n
SUI 2 0H ; C ha n g e to one o f A- Z
RET ; Re t u r n
82
· *********** * ********************************************
,
; N E W PAG E I F N E E D E D
· *********************************************************
,
; F U N C 'r I 0 N : To c l e a r mo v e l i s t o u t p u t w h e n t h e c o l u m n
•
, h a s be e n f i l l ed .
•
,
; CALLED BY : DR I VE R
•
, P L Y RM V
.
, C PTRMV
•
'
; A RG U M E N T S : Re t u r n s a 1 i n t h e A r eg i s te r if
; a new page was t u r ned .
· ********************************************************
'
PG I FN D : LXI H , L I N ECT •
I Ad d r o f p a g e p o s i t i o n c o u n t e r
I NR M •
I I n c r eme n t
MVI A , lBH •
' Pa g e bo t to m ? .
CMP M
RNC •
' No - r e t u r n
CALL D S P B RD •
' Pu t up new pag e
P RT L I N TITLE4 , 1 5 •
I Re - p r i n t t i t l e s
P RT L I N T I TLE 3 , 1 5
MVI A,l •
, Se t l i n e c o u n t ba c k to 1
S TA L I NECT
R E T· •
, Re t u r n
83
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
; D I S P LA Y MAT E D K I N G
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
; FUNCT I ON : To t i p o v e r t h e c o mp u t e r s K i n g w h e n
•
, ma t e d .
•
,
; CALLED BY : F C DMAT
•
,
; C A L LS : C O N V RT
•
, BLNKER
•
, I NS PC E ( Ab no r ma l C a l l to I P 0 4 )
•
,
; A RG U M E N T S : No n e
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
84
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; S E T U P POS I T I ON F O R A N A L Y S I S
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; F U NC T I ON : To e n a b l e u s e r t o s e t u p a n y p o s i t i o n
•
I for ana lys i s , o r to con t i nue to play
•
I t h e g ame . Th e r o u t i n e b l i n k s t h e boa r d
•
I s q u a r e s i n t u r n a nd t h e u se r h a s t h e op t i o n
•
I o f l e a v i n g t h e c o n t e n t s u n c h a n g e d by a
•
, c a r r i a g e r e t u r n , e mp t y i n g t h e s q u a r e b y a 0 ,
•
' o r i n p u t t i ng a p i e c e o f h i s c h o s i n g . To
•
' e n t e r a p i e c e , type i n p i e c e - c od e , c o l o r - co d e ,
•
' moved - cod e •
•
'
•
' P i e c e - code i s a l e t te r i nd i c a t i ng the
.
•
' d e s i r ed p i ec e :
•
' K K i ng
•
' Q Qu e e n
•
' R Ro o k
•
I B B i s hop
•
' N Kn i g h t
•
' p Pawn
•
'
•
' Co l o r code i s a l e t te r , W f o r wh i te , o r
•
' B for black •
•
'
•
' M o v e d - c o d e i s a n um b e r . 0 i n d i c a t e s t h e p i e c e
•
' h a s neve r moved . 1 i nd i ca te s t h e p i e c e ha s
•
I
moved •
•
I
•
' A b a c k s p a c e w i l l ba c k u p i n t h e s e q u e n c e o f
•
' bl i n k ed squ a r es . An E s c a pe w i l l t e r m i na t e
•
' the bl i n k cyc le and ve r i fy tha t the
•
I po s i t i o n i s c o r r e c t , t h e n p r ec e d e w i t h g ame
•
I i n i t i a l i za t ion •
•
,
; CALLED BY : DR I VER
•
'
; CA LLS : C HARTR
•
' DPSBRD
•
' B LN K E R
•
' ROYA LT
•
I P L Y RM V
•
' C PT RM V
•
'
; M A C RO C A L L S : P RT L I N
•
' E X I 'r
•
' C LRSC R
•
' P RT B L K
•
I C AR R E T
•
'
; A RG U M E N T S : No n e
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'
85
ANALYS : PRTL I N ANAMSG , 3 7 ; " C A R E TO A N A L Y S E A POS I T I ON ? "
C ALL C HA RT R ; Ac c e p t a n swe r
C AR R E T ; New l ine
CPI 4 EH ; I s a nswe r a " N " ?
J RN Z AN 0 4 ; No - j um p
EXIT ; Re t u r n t o mo n i t o r
AN 0 4 : CALL D S P BRD ; C u r r e n t bo a r d p o s i t i o n
MVI A, 21 ; F i r s t bo a r d i n d e x
AN 0 8 : S TA ANBDPS ; Save
S TA B R D POS
CALL C ONV RT ; No r m a d d r e s s i n t o H L r e g i s t e r
S TA Ml ; S e t u p bo a r d i n d e x
L I XD Ml
M OV A , BOARD ( X ) ; Ge t b o a r d c o n t e n t s
CPI 0 FFH ; Boa rde r squa r e ?
J RZ AN 1 9 ; Ye s - j u mp
MVI B , 4H ; Re a d y to b l i n k s q u a r e
C ALL B LN K E R ; Bl ink
C AL L C HA RT R ; Ac c e p t i np u t
CPI lBH ; I s i t a n escape ?
J RZ AN l B ; Ye s - j um p
CPI 0 8H ; I s i t a ba c k s p a c e ?
J RZ AN l A ; Ye s - j um p
CPI 0 DH ; I s i t a c a r r i ag e r e tu r n ?
J RZ AN 1 9 ; Y e s - j um p
LXI B, 7 ; N um be r o f t y p e s o f p i e c e s + 1
LX I H , PC S ; Ad d r e s s o f p i e c e s y m bo l t a b l e
CC I R ; Se a r c h
J RN Z AN 1 8 ; J u mp i f n o t f o u n d
CALL C HA RT R ; Ac c e p t a n d i g n o r e s e p a r a t o r
CALL C H ART R ; Co l o r o f p i e c e
CPI 4 2H ; Is i t black ?
J RN Z . +4 ; No - s k i p
S ET 7,C ; B l a c k p i e c e i nd i c a t o r
CALL C HA RT R ; Ac c e p t a n d i g n o r e s e pa r a to r
C AL L C H A RT R ; Mo ved f l ag
CPI 31H ; Has p i ece moved ?
J RN Z AN 1 8 ; N o - J u mp
S ET 3,C ; Se t mo v e d i nd i c a t o r
AN 1 8 : M OV B OA R D ( X ) , C ; I n s e r t p i e ce i n to boa r d a r r ay
C ALL D S P BR D ; Upd a t e g r a p h i c s b o a r d
AN 1 9 : LOA ANBDPS ; C u r r e n t bo a r d p o s i t i o n
I NR A ; Ne x t
CPI 99 ; Do n e ?
J RN Z AN 0 8 ; No - J ump
J M PR AN 0 4 ; J ump
AN lA : L OA A N B DPS ; P r e p a r e to g o b a c k a s q u a r e
86
SUI 3 ; To g e t a r o u n d bo a r d e r
CPI 20 ; Of f the o th e r e nd ?
J NC AN 0 8 ; No - j u mp
MVI A , 98 ; W r a p a r o u n d to top o f s c r e e n
AN 0 B : JMP AN 0 8 ; J u mp
ANlB : P RT L I N C RT N E S , 1 4 ; Ask i f cor rect
C ALL C HARTR ; Ac c e p t a n swe r
CPI 4EH ; Is i t " N" ?
JZ AN 0 4 ; No - J ump
C A LL ROYALT ; Up d a t e po s i t i o n s o f r o y a l t y
C LRSC R ; Blank sc r ee n
C AL L I N T E RR ; Ac c e p t c o l o r c h o i c e
AN lC : P RT L I N WSMOVE , 1 7 ; As k who s e mo v e i t i s
CALL C H A RT R ; Ac cept r e spon s e
CALL D S P B RD ; D i s p l a y g r aph i c s boa r d
P RT L I N T I TLE4 , 1 5 ; Pu t u p t i t l e s
P RT L I N T ITLE 3 , 1 5
CPI 5 7H ; I s i s wh i t e s mov e ?
JZ DRIV0 4 ; Ye s - j ump
P RT B L K Ml/E N U M , 3 ; P r i n t move n umbe r
P RT B L K S PA C E , 6 ; Ta b t o b l a c k s c o l umn
L OA K O LOR ; C o mp u t e r ' s c o l o r
ANA A ; I s c o mp u t e r w h i t e ?
J RN Z AN 20 ; No - j ump
CALL P L Y RM V ; Ge t p l a y e r s mo v e
C A RR E T ; New l i ne
JMP DR0C ; Jump
AN20 : CALL C P T RM V ; Ge t c o mp u t e r s mo v e
CARRET ; New l i n e
JMP D R 0C ; J ump
87
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'
; U P DAT E POS I T I ON S O F RO YA LTY
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * *
'
; F U NCT I ON : To u pd a t e t h e po s i t i o n s o f t h e K i ng s
•
' a n d Qu e e n a f t e r a c h a n g e o f b o a r d po s i t i o n
•
' i n ANALYS •
..
'
; C A L L E D BY : ANA LYS
•
'
; C A L LS : No n e
•
'
; A RG U M E N T S : No n e
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
'
ROYALT : LX I H , PO S K ; S t a r t o f Ro y a l t y a r r a y
MVI B,4 ; C l ea r a l l fou r pos i t ions
MVI M,0
I NX H
DJ N Z . -3
MVI A, 21 ; F i r s t bo a r d p o s i t i o n
RY 0 4 : STA Ml ; S e t u p bo a r d i n d e x
LX I H , POS K ; Ad d r e s s o f K i n g p o s i t i o n
L I XD Ml
MOV A , BOARD ( X ) ; F e t c h bo a r d c o n t e n t s
BIT 7,A ; Te s t c o l o r b i t
JRZ . +3 ; J u mp i f w h i t e
I NX H ; Of f s e t for b l a c k
AN I 7 ; De l e t e f l a g s , l e a v e p i e c e
CPI K I NG ; K i ng ?
J RZ RY 0 8 ; Ye s - J u m p
CPI QUEEN ; Qu e e n ?
J RN Z RY 0 C ; N o - J u mp
I NX H ; Qu e e n p o s i t i o n
I NX H ; Plus offset
RY 0 8 : L DA Ml ; Index
MOV M,A ; Save
RY0C : L DA Ml ; C u r r e n t po s i t i o n
I NR A ; Ne x t po s i t i o n
CPI 99 ; Do n e . ?
J RN Z RY0 4 ; N o - J u mp
RET ; Re t u r n
88
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; S E T UP EMPTY BOARD
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; F U N C T I ON : D i p l a y g r a p h i c s bo a r d a n d p i e c e s .
•
I
; CALLED BY : DR I VER
•
I ANA L Y S
•
I PG I FN D
•
I
; CALLS : CONVRT
•
I I N S PC E
•
I
; A RG U M E N T S : No n e
•
'
; NOT E S : Th i s r o u t i n e m a k e s u s e o f s e v e r a l f i x e d
•
' add r e s s e s in the v i d e o s to r ag e a r e a o f
•
, t h e Ju p i t e r I I I c ompu te r , and i s t h e r e f o r
•
I s y s tem d ep e nd e n t . Each such r e fe rence w i l l
•
I be ma r k ed •
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
DS PBRD : PUSH B ; S av e r e g i s t e r s
PUSH D
PUSH H
PUSH PSW
C L RS C R ; Blank screen
LX I H , 0C 0 0 0H ; Sys tem Depen d e n t-F i r s t v id eo
; add r ess
MVI M, 80H ; S t a r t o f b l a n k bo r d e r
LX I D , 0C 0 0 1 H ; S y s D e p - N e x t bo a r d e r s q u a r e
LXI B, 15 ; N u m be r o f b y t e s t o b e m o v e d
LDIR ; B l a n k bo a r d e r ba r
MVI M , 0AAH ; F i r s t b l a c k bo a r d e r bo x
I NR L ; Ne x t blo c k add r es s
MVI B,6 ; Numbe r t o be mo v e d
DB0 4 : MVI M , 80H ; C r ea te wh i te b l o c k
I NR L ; Ne x t bloc k add r e s s
DJN Z 08 0 4 ; Do n e ? � o - j u m p
MVI B,6 ; Numbe r o f r epea t s
DB0 8 : MVI M , 0BFH ; C r e a te b l a c k box
I N '1 L ; Ne x t bloc k add r es s
DJN Z 08 0 8 ; Do n e ? N o - J u m p
XC HG ; Ge t r e a d y f o r b l o c k mo v e
LXI B , 36 ; B y t e s t o be mo v e d
LDI R ; M o v e - c o mp l e t e s f i r s t b a r
LXI H , 0C 0 0 0 H ; S D - F i r s t add r to be c op i ed
LXI B , 0 D0 H ; N u m be r o f b l o c k s t o m o v e
LDIR ; C o mp l e t e s f i r s t r a n k
LXI H , 0C 0 1 6H ; s D - S t a r t o f c o py a r e a
LX I B,6 ; N u m be r o f b l o c k s t o mo v e
89
LDI R ; F i r s t bl a c k sq u a r e done
LX I H , 0C 0 1 0 H ; S D - S t a r t copy a r ea
LXI B,42 ; B y t e s t o be mo v e d
LDI R ; Re s t o f ba r d o n e
LXI H , 0C l 0 0H ; S D - S t a r t o f copy a r ea
LXI B , 0C 0H ; Mo v e t h r e e ba r s
LDI R ; Ne x t r a n k done
LXI H , 0C 0 0 0 H ; S D - C o py r e s t o f s c r e e n
LX I B , 600H ; Numbe r o f bloc k s
LDI R ; Boa rd done
B S ETU P : MV I A, 21 ; F i r s t bo a r d i n d e x
B S ET 0 4 : STA B R D PO S ; Re a d y p a r a me t e r
CALL C O N V RT ; No r m a d d r i n t o H L r e g t i s t e r s
CALL I N S PC E ; I n s e r t t h a t p i e c e o n t o boa r d
I NR A ; Ne x t squa r e
CPI 99 ; Do n e ?
J RC BSET0 4 ; No - J ump
POP PSW ; Re s t o r e r e g i s t e r s
POP H
POP D
POP B
RET
90
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; I N S E RT P I E C E S U B RO U T I N E
· * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; F U NC T I ON : Th i s s u b r o u t i n e p l a c e s a p i e c e o n t o a
•
I g i v e n squa r e o n th e v i d eo boa r d . Th e p i e c e
•
I i n s e r t e d i s t h a t s to r ed i n t h e bo a r d a r r a y
•
I for tha t squa r e .
•
I
; CALLED BY : DPSPRD
•
I M AT E D
•
I
; C A L LS : M LT P L Y
.
; A RGU M E NT S : No r m a d d r e s s f o r t h e s q u a r e i n r e g i s t e r
; pa i r H L .
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * *
I
I N S PC E : PUSH H ; Save r eg i s te r s
PUSH B
PUSH D
PUSH x
PUSH PSW
LOA BRDPOS ; Ge t b o a r d i n d e x
S TA Ml ; Save
L I XD Ml ; I n d e x i n t o bo a r d a r r ay
MOV A , BOARD ( X ) ; C o n t e n t s o f bo a r d a r r a y
ANA A ; I s s q u a r e e mp t y ?
J RZ I P 2C ; Ye s - ] Ump
CPI 0 FFH ; I s i t a boa r d e r s q u a r e ?
JRZ I P 2C ; Ye s - J um p
MVI C,0 ; C l ea r f l a g r eg i s t e r
BIT 7,A ; I s p iece wh i te ?
JRZ I P0 4 ; Ye s - J ump
MVI C,2 ; Se t b l a c k p i ece f l ag
I P0 4 : AN ! 7 ; De l e t e f l a g s , l e a v e p i e c e
OC R A ; P i e c e o n a 0 - 5 ba s i s
MOV E ,A ; Save
MVI D , 16 ; M u l t ip l i e r
°
CALL M LT P L Y ; Fo r l o c o f p i e c e i n t a b l e
MOV A,D ; D i s p l a c e me n t i n to b l o c k t a b l e
S TA I NDXER ; Low o r d e r i n d e x by t e
L I XD I NDXER ; Ge t e n t i r e i nd e x
BIT 0,M ; I s s q u a r e wh i te ?
J RZ I P0 8 ; Ye s - J ump
I NR c ; S e t c o mp l i m e n t f l a g
I P0 8 : I NR L ; Ad d r e s s o f f i r s t a l t e r b l o c k
PUS H H ; Sa v e
MVI D,0 ; Ba r cou n t e r
I P 0C : MVI B,4 ; Block counter
I P1 0 : MOV A , B LO C K ( X ) ; B r i ng i n s o u r ce b l o c k
B IT 0,C ; S h o u l d i t b e c o mp l e me n t e d ?
91
J RZ IP14 ; N o - j ump
XRI 3FH ; G r a p h i c s c o mp l e m e n t
IP1 4 : MOV M,A ; Sto r e bloc k
I NR L ; Ne x t b l o c k
I NX x ; Ne x t s o u r ce b l o c k
DJN Z 1 Pl0 ; Do n e ? N o - J um p
MOV A,L ; B a r i n c r e me n t
ADI 3CH
MOV L,A
I NR D ; Ba r cou n te r
B IT 2,D ; Do n e ?
J RZ I P0C ; No - j ump
POP H ; Ad d r e s s o f No r m + 1
BIT 0,C ; I s s q u a r e wh i t e ?
J RN Z IP18 ; No - J ump
B IT l,C ; I s p i e c e wh i t e ?
J RN Z I P 2C ; No - j ump
J�PR I PlC ; J u mp
I P1 8 : BIT l,C ; I s p i e c e wh i t e ?
J RZ I P 2C ; Ye s - j u mp
I P lC : MVI D,6 ; Mu l t ipl i e r
CALL M LT P L Y ; Mu l t i p l y f o r d i s p l a c eme n t
MOV A,D ; Ke r ne l t a b l e d i sp l aceme n t
S TA I NDXER ; Save
L I XD I NDXER ; Ge t c o mp l e t e i n d e x
M OV A,L ; S t a r t o f Ke r n e l
ADI 4 0H
MOV L ,A
MVI D,0 ; Ba r coun ter
IP20 : MVI B, 3 ; B l o c k counter
IP24 : MOV A , K E RN E L ( X ) ; Ke r ne l block
BIT l,C ; Ne e d t o c o mp l e m e n t ?
J RN Z I P28 ; No - J ump
XRI 3FH ; G r a p h i c s c o mp l e m e n t
I P28 : MOV M,A ; S to r e bloc k
I NR L ; Ne x t t a r g e t b l o c k
I NX x ; Ne x t s o u r c e b l o c k
DJN Z IP24 ; Do n e ? N o - ] U mp
M OV A,L ; B a r i nc r eme n t
ADI 3DH
MOV L,A
I NR D ; Ba r cou n t e r
BIT l,D ; Do n e ?
J RZ IP20 ; Re pe a t ba r m o v e
I P 2C : POP PSW ; Re s t o r e r e g i s t e r s
POP x
POP D
POP B
POP H
RET
92
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; B O A R D I N D E X TO NORM A D D R E S S S U B R .
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * ** * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; F U N C T I ON : C o n v e r t s a h e x a d e c i m a l bo a r d i n d e x into
•
' a No r m add r e s s f o r t h e s q u a r e •
•
'
; CALLED BY : DSPBRD
•
I I N S PC E
•
I AN A L Y S
•
' MATE D
•
I
; C A L LS : D I V I DE
.
I M LT P LY
•
I
; A RG U M E N T S : R e t u r n s t h e No r m a d d r e s s i n r e g i s t e r p a i r
•
I HL •
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
,
C O N V RT : PUSH B ; S a v e r eg i s te r s
PUSH D
PUSH PSW
L DA B RD PO S ; Ge t bo a r d i nd e x
MOV D ,A ; S e t u p d i v i d e nd
SUB A
MVI E , 10 ; D i v i so r
CALL D I V I DE ; I n d e x i n to r an k a nd f i l e
; f i le ( 1-8 ) & rank ( 2-9 )
DCR D ; Fo r r an k ( 1 - 8 )
DC R A ; Fo r f i 1e ( 0 - 7 )
MOV C,D ; Sa v e
MVI D,6 ; Mul t ipl ier
MOV E ,A ; F i l e n umbe r i s mu l t i p l i ca nd
CALL MLTPLY ; G i v i ng f i l e d i s p l a c eme n t
M OV A,D ; Save
ADI 10H ; F i l e no r m add r es s
MOV L,A ; Low o r d e r a d d r e s s by t e
MVI A,8 ; Ra n k a d j u s t
SUB c ; Ra n k d i s p l a c e m e n t
ADI 0C0H ; Ra n k No r m a d d r e s s
M OV H ,A ; H i g h o r d e r a d d r e s by t e
POP PSW ; Re s t o r e r e g i s t e r s
POP D
POP B
RET ; Re t u r n
93
·I * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; POS I T I V E I N T E G E R D I V I S I O N
***********
I· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
D I V I DE : PUS H B
MVI B,8
DD0 4 : S LA R D
RAL
SUB E
JM . +6
I NR D
JMPR . +3
ADD E
DJ N Z DD0 4
POP B
RET
I· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; POS I T I V E I N T E G E R MU LT I P L I C AT I ON
; **********************************************************
M LT P L Y : PUSH B
SUB A
MVI B,8
ML0 4 : BIT 0,D
JRZ •+3
ADD E
S RA R A
RARR D
DJN Z ML0 4
POP B
RET
94
,· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; S UARE B L I NKER
,· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
; F U NC T I ON : To b l i n k t h e g r a p h i c s b o a r d s q u a r e t o s i g n a l
•
, a p i e c e ' s i n t e n t i o n t o mo v e , o r t o h i g h
•
, l i g h t t h e squa r e a s be i ng a l t e r a b l e
•
, i n AN A L Y S .
•
I
; CALLED BY : MAKEMV
•
, ANA LYS
•
' M AT E D
•
'
; CALLS : No n e
•
,
; A RG U M E N T S : No r m a d d r e s s o f d e s i r e d s q u a r e p a s s e d i n
; r eg i s te r pa i r H L . Numbe r o f t i m e s to
; b l i n k pa s s e d i n r eg i s t e r B .
· ****•******************************************************
I
B LN K E R : PUS H PSW ; Sa v e r eg i s te r s
PUSH B
PUSH D
PUSH H
PUSH x
S H LD NORMAD ; S a v e No r m a d d r e s s
B L0 4 : MVI D,0 ; Ba r counte r
B L0 8 : MVI C,0 ; B l oc k coun t e r
BL0C : MOV A,M ; Fe tch bloc k
XRI 3FH ; G r a p h i c s c o mp l e m e n t
MOV M,A ; Re p l a c e b l o c k
I NR L ; Ne x t bloc k add r e s s
I NR c ; I n c r em e n t b l o c k c o u n t e r
MOV A,C
CPI 6 ; Do n e ?
J RN Z BL0C ; N o - j um p
MOV A,L ; Ad d r e s s
ADI 3AH ; Ad j u s t s q u a r e p o s i t i o n
MOV L,A ; Re p l a c e a d d r e s s
I NR D ; I n c r e me n t b a r c o u n t e r
B IT 2,D ; Do n e ?
J RZ BL0 8 ; No - j ump
L H LD N ORMA D ; Ge t N o r m a d d r e s s
PUSH B ; S a v e r eg i s te r
LX I B , 3030H ; De l a y l o o p , f o r v i s i b i l i ty
B L1 0 : DJ N Z BL10
DC R c
J RN Z BL10
95
POP B •
I Re s t o r e r e g i s t e r
DJ N Z BL0 4 •
I Do n e ? N o
.
-
] Ump
POP x •
I Re s t o r e r e g i s t e r s
POP H
POP D
POP B
POP P SW
RET •
I Re t u r n
96
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * �* * * * * * * * * * * * * * * * * * * *
I
; E X EC U T E MOV E S U B R O U T I N E
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; F U N C T I ON : Th i s r o u t i ne i s t he c on t r o l r o u t i n e f o r
•
I M A K E MV . I t c h e c k s fo r d o u b l e mo v e s a nd
•
I s e e s tha t t hey a r e p r ope r l y h a nd l ed . It
•
I s e ts f l ag s i n the B r eg i s te r f o r d o u b l e
•
I mo v e s :
•
I En Pa s s a n t Bit 0
•
I o -o Bit l
•
I 0 -0 -0 Bit 2
•
I
; CALLED BY : P LY RM V
•
I C PT RM V
•
I
; CALLS : M A K E MV
.
'
; A RG U M E N T S : F l ag s s e t i n t h e B r eg i s te r a s d e s c r i bed
•
I a bo v e .
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
97
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
; M A K E MOVE S U B RO U T I N E
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
•
I
; CALLED BY : EXECMV
.
: CALLS : C O N V RT
•
I B LN K E R
.
I I NSPCE
•
I
: A RG U M E N T S : Th e " f r o m " po s i t i o n i s p a s s e d i n r e g i s t e r
: C , a n d t h e " t o " po s i t i o n i n r e g i s t e r E .
· * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
I
J RZ MM 0 4 •
I No - ] U mp
M OV A,E •
I Ge t " t o " p o s i t i o n
S TA B RDPOS •
I Se t up pa r am e te r
C AL L C O N V RT .
I Ge t t i n g N o r m a d d r e s s i n H L
MVI B, 10 •
I B l i n k pa r a m e t e r
CALL I NSPCE •
I Inse r ts the piece
CALL B LN K E R •
I B l i n k s " to " squa r e
POP H •
I Re s t o r e r e g i s t e r s
POP D
POP B
POP PSW
RET : Re t u r n
98
1'.DL/ZILOG lllnenao nie• Con�rsion
Symbols Used.
SYMBOL OPERATION
r one o f the 8-b i t regis ters A , B , C , D , E , H , L
n any 8-b i t absolute value
ii an index reg i s ter referenc e , e i ther X or Y
d an 8-b i t index displacemen t , where - 1 2 8 < d < 1 2 7
zz B for the BC reg is ter pa ir , D for the DE pa ir
nn any 16-b i t value , absolute or relocatable
rr B for the BC regis ter pair , D for the DE pa ir , H for the
HL pair , SP for the s tack po inter
qq B for the BC reg is ter pair , D for the DE pair , H for the
HL pair , PSW for the A/ Flag pair
s any o f r (def ined above) , M , or d ( i i )
IFF interrup t f l ip-f lop
CY carry f l ip- f lop
ZF zero f lag
tt B for the BC regis ter pa ir , D for the DE pair , SP for the
s tack po inter , X for index r eg is ter IX
uu B for the BC regis ter pair , D for the DE pair , SP for the
s tack po inter , Y for index reg i s ter IY
b a b i t pos i t ion in an 8-b i t by te , where the b i t s are
numbered from righ t to lef t 0 to 7
PC program counter
b{n} b i t n of the 8-b i t value or regis ter v
vv/H the mos t s ignif icant by te o f the 16-b i t value or
regis ter vv
vv / L the leas t s igni f icant by te o f the 1 6-b i t va lue o r
regis ter vv
99
Iv an input operat ion on por t v
Ov an ou tput operat ion on por t v
w + v the value of w is replaced by the value of v
w +-+ v the value of w is exchanged wi th the value of v
101
PUSH qq ( S P- 1 ) +- qq /H PUSH qq 1 11
(SP- 2 ) +- qq/L
SP +- SP- 2
PUSH i i (SP- 1 ) +- i i /H PUSH ii 2 15
(SP- 2) +- i i/L
SP +- SP- 2
POP q q q q /H + (SP- 1 ) POP q q 1 10
qq /L +- ( SP )
SP +- SP- 2
1 02
E xe hanae , Bloe k Transfe r, and Seareh Gro up
XTHL H � c sP+1) EX ( S P ) , HL 1 19
L � (S P )
XTIX IX/H � ( S P+l ) EX ( SP) , IX 2 23
IX/L � ( S P )
XTIY I Y /H � csP+l ) EX ( SP ) , IY 2 23
IY /L � ( S P )
LDI (DE) + (HL ) LD I 2 16
DE + DE+l
HL + HL+l
BC + BC- 1
LD IR rep ea t LDI unt il BC= 0 LDIR 2 21 / 16
LDD (DE) + (HL) LDD 2 16
DE + DE- 1
HL + HL- 1
BC + BC- 1
LDDR rep ea t LDD unt il BC= 0 LDDR 2 21/ 16
CC I A - (HL ) CP I 2 16
HL HL+l
+
BC BC-1
+
BC BC- 1
+
1 03
8 B it Arithmetie and Logieal
ADI n A +A + n ADD A , n 2 7
SBB s A + A - s - CY SBC A , s
SBI n A + A - n - CY SBC A , n
ANA s A +A fl.. s AND s
ANI n A +A fl.. n AND n
ORA s A +A v s OR s
ORI n A +A v n OR n
XRA s A +A�s XOR s
XRI n A + A A'3 n XOR n
CMP s A - s CP s
CP I n A - n CP n
INR r r + r + 1 INC r
INR M (HL ) + (HL) + 1 INC (HL )
INR d ( ii) ( i i+d ) + ( ii+d ) + 1 INC ( Ii i+d )
DCR r r + r - 1 DEC r
DCR M (HL) + (HL) - 1 DEC (HL )
DCR d ( i i) ( i i+d ) + ( ii+d ) - 1 DEC ( I i i+d)
1 04:
Gene ral Purpose Arlthmetie and Co ntrol G roup
105
1 6 Bit Arithmeti� Group
1 06
Rotate and ShHt G roup
RLCR d ( ii ) "
RLC ( I i i+d ) 4 23
RALR s Same d iagram as RL s Same as for RLCR
for RAL ins truc t ion
RRCR s S ame d iagram as RRC s
for RRC
RARR s Same d iagram as RR s
f o r RAR
SI.AR s ! CY j + l 7
s
+ 01 + 0 SLA s
SRAR s
Cl
-+
0s I -+ ! CY I SRA s
107
SRLR s 0� 1 7 � 0 l �l cY l S RL s
s
RLD RLD 2 18
RRD A 1 7 4 j 3 01 r
RRD 2 18
� t
(HL) I 7 4 l 3 01
L t
1 08
Ju.mp Gro up
1 09
Call and Return Group
1 10
RO if ov rf low RET PE 1 5/11
RNO if no overf low RET PO 1 5/ 1 1
RETI re turn f rom interrup t RET I 2 14
RETN re turn from non- RETN 2 14
maskab le in terrup t
RST n ( SP- 1 ) + PC/H RST n 1 11
( SP- 2 ) + PC /L
PC + 8 * n
where o < n < 8
HL + HL - 1
OUTDR r ep ea t OUTD until B = 0 OTDR 2 16/21
111
INDEX TO SUBROUTINES
ADJ PTR 33
AD MOVE 36
AN ALY S 85
ASCEND 64
ASNTBI 80
ATKSAV 42
ATTACK 39
BITASN 76
BLNKER 94
BOO K 65
CASTLE 34
CHARTR 82
CO NVRT 93
CPTRMV 73
D I VIDE 93
DRIVER 69
D SPBRD 89
ENPSNT 32
EVAL 60
EXECMV 97
FCDMAT 75
FNDMOV 59
GENMOV 38
I NCH K 38
I N ITBD 27
INSPCE 91
INTERR 71
L I M IT 51
MAKEMV 98
MATED 84
MLTPLY 94
MOVE 54
MP I E CE 30
113
NEXT AD 49
PATH 29
PGIFND 83
PIN FND 44
PLYRMV 79
PNCK 43
POINTS 49
ROY ALT 88
SOR TM 58
TBCPCL 78
TBPLCL 76
TBPLMV 78
UN MOVE 56
VALMOV 80
XCHNG 47
1 1 4:
sargonco m p u te rc h O O s p ra
sargoncompute rchOOspra
I I I 111 11 1 I 1 1 1 1 1 I
sargonco m puterc h 0 0 spr3
• l .J ..J I
$ 1 4.95
G A M E P LAY I N G W I T H BAS I C
Both by Dona�d D . Spencer
Two col l ect i o n s of g a m es a n d p u zz l es t h at wi l l c h a l l e n g e yo u r v e ry
best g a m e- p l ay i n g a n d p rog ram m i n g s k i l l s . G a m e P l ay i n g w i t h
C o m p u t e rs , # 51 03-4, c l ot h , 320 p p . ; G a m e Pl ayi n g w i t h BA S I C ,
#51 09-3 , p a p e r, 1 76 pp.
C O N S U M E R' S G U I D E TO P E R S O NAL C O M P UT I N G
A N D M I C R O CO M P UT E R S
B y Stephen Freiberger a n d Paul Chew
An i n t ro d u ct i on to the p r i n c i p l es of m i c roco m p ute rs a n d ·a rev i ew
of 64 m i c roco m p u t e r p ro d u cts f ro m ove r 50 m a n ufact u r e rs .
# 5680-X, paper, 1 76 p p .
H AY D E N BOOK CO M PA N Y , I N C .
Roche l l e Pa rk , New J ersey