gigatron/rom/Apps/Microchess/asm/org/uchessasm.txt
2025-01-28 19:17:01 +03:00

632 lines
32 KiB
Plaintext

MICROCHESS
COPYRIGHT 1976, PETER JENNINGS, MICROCHESS,
1612-43 THORNCLIFFE PK DR, TORONTO, CANADA.
ALL RIGHTS RESERVED. REPRODUCTION BY ANY
MEANS, IN WHOLE OR IN PART, IS PROHIBITED.
2 ; EXECUTION BEGINS AT ADDRESS 0000
3 ;
4 +++
5 0000 D8 CHESS CLD INITIALIZE
6 0001 A2 FF LDXIM FF TWO STACKS
7 0003 9A TXS
8 0004 A2 C8 LDXIM C8
9 0006 86 B2 STX .SP2
10 ;
11 ; ROUTINES TO LIGHT LED
12 ; DISPLAY AND GET KEY
13 ; FROM KEYBOARD.
14 ;
15 0008 20 1F 1F OUT JSR *OUT DISPLAY AND
16 000B 20 6A 1F JSR *GETKEY GET INPUT
17 000E C5 F3 CMPZ .OLDKY KEY IN ACC
18 0010 F0 F6 BEQ OUT (DEBOUNCE)
19 0012 85 F3 STAZ .OLDKY
20 ;
21 0014 C9 0C CMPIM 0C [C]
22 0016 D0 0F BNE NOSET SET UP
23 0018 A2 1F LDXIM 1F BOARD
24 001A B5 70 WHSET LDAZX .SETW FROM
25 001C 95 50 STAZX .BOARD SETW
26 001E CA DEX
27 001F 10 F9 BPL WHSET
28 0021 86 DC STXZ .OMOVE
29 0023 A9 CC LDAIM CC
30 0025 D0 12 BNE CLDSP
31 ;
32 0027 C9 0E NOSET CMPIM 0E [E]
33 0029 D0 07 BNE NOREV REVERSE
34 002B 20 B2 02 JSR REVERSE BOARD AS
35 002E A9 EE LDAIM EE IS
36 0030 D0 07 BNE CLDSP
37 ;
38 0032 C9 14 NOREV CMPIM 14 [PC]
39 0034 D0 0B BNE NOGO PLAY CHESS
40 0036 20 A2 03 JSR GO
41 ;
42 0039 85 FB CLDSP STA .DIS1 DISPLAY
43 003B 85 FA STAZ .DIS2 ACROSS
44 003D 85 F9 STAZ .DIS3 DISPLAY
45 003F D0 BF BNE CHESS
46 ;
47 0041 C9 0F NOGO CMPIM 0F [F]
48 0043 D0 06 BNE NOMV MOVE MAN
49 0045 20 4B 03 JSR MOVE AS ENTERED
50 0048 4C 9D 01 JMP DISP
51 004B 4C 96 01 NOMV JMP INPUT
52 ;
53 ; THE ROUTINE JANUS DIRECTS THE
54 ; ANALYSIS BY DETERMINING WHAT
55 ; SHOULD OCCUR AFTER EACH MOVE
56 ; GENERATED BY GNM
57 ;
58 ;
59 +++
60 0100 A6 B5 JANUS LDXZ .STATE
61 0102 30 5C BMI NOCOUNT
62 ;
63 ; THIS ROUTINE COUNTS OCCURRENCES
64 ; IT DEPENDS UPON STATE TO INDEX
65 ; THE CORRECT COUNTERS
66 ;
67 0104 A5 B0 COUNTS LDAZ .PIECE
68 0106 F0 08 BEQ OVER IF STATE=8
69 0108 E0 08 CPXIM 08 DO NOT COUNT
70 010A D0 04 BNE OVER BLK MAX CAP
71 010C C5 E6 CMPZ .BMAXP MOVES FOR
72 010E F0 2E BEQ XRT WHITE
73 ;
74 0110 F6 E3 OVER INCZX .MOB MOBILITY
75 0112 C9 01 CMPIM 01 + QUEEN
76 0114 D0 02 BNE NOQ FOR TWO
77 0116 F6 E3 INCZX .MOB
78 ;
79 0118 50 1E NOQ BVC NOCAP
80 011A A0 0F LDYIM 0F CALCULATE
81 011C A5 B1 LDAZ .SQUARE POINTS
82 011E D9 60 00 ELOOP CMPAY .BK CAPTURED
83 0121 F0 03 BEQ FOUN BY THIS
84 0123 88 DEY MOVE
85 0124 10 F8 BPL ELOOP
86 0126 B9 A0 00 FOUN LDAAY .POINTS
87 0129 D5 E4 CMPZX .MAXC
88 012B 90 04 BCC LESS SAVE IF
89 012D 94 E6 STYZX .PCAP BEST THIS
90 012F 95 E4 STAZX .MAXC STATE
91 ;
92 0131 18 LESS CLC
93 0132 08 PHP ADD TO
94 0133 75 E5 ADCZX .CC CAPTURE
95 0135 95 E5 STAZX .CC COUNTS
96 0137 28 PLP
97 ;
98 0138 E0 04 NOCAP CPXIM 04
99 013A F0 03 BEQ ON4
100 013C 30 31 BMI TREE (=00 ONLY)
101 013E 60 XRT RTS
102 ;
103 ; GENERATE FURTHER MOVES FOR COUNT
104 ; AND ANALYSIS
105 ;
106 013F A5 E8 ON4 LDAZ .XMAXC SAVE ACTUAL
107 0141 85 DD STAZ .WCAP0 CAPTURE
108 0143 A9 00 LDAIM 00 STATE=0
109 0145 85 B5 STAZ .STATE
110 0147 20 4B 03 JSR MOVE GENERATE
111 014A 20 B2 02 JSR REVERSE IMMEDIATE
112 014D 20 00 02 JSR GNMZ REPLY MOVES
113 0150 20 B2 02 JSR REVERSE
114 ;
115 0153 A9 08 LDAIM 08 STATE=8
116 0155 85 B5 STAZ .STATE GENERATE
117 0157 20 09 02 JSR GNM CONTINUATION
118 015A 20 31 03 JSR UMOVE MOVES
119 ;
120 015D 4C 80 17 JMP STRATGY FINAL EVALUATION
121 0160 E0 F9 NOCOUNT CPXIM F9
122 0162 D0 0B BNE TREE
123 ;
124 ; DETERMINE IF THE KING CAN BE
125 ; TAKEN, USED BY CHKCHK
126 ;
127 0164 A5 60 LDAZ .BK IS KING
128 0166 C5 B1 CMPZ .SQUARE IN CHECK?
129 0168 D0 04 BNE RETJ SET INCHEK=0
130 016A A9 00 LDAIM 00 IF IT IS
131 016C 85 B4 STAZ .INCHEK
132 016E 60 RETJ RTS
133 ;
134 ; IF A PIECE HAS BEEN CAPTURED BY
135 ; A TRIAL MOVE, GENERATE REPLIES &
136 ; EVALUATE THE EXCHANGE GAIN/LOSS
137 ;
138 016F 50 FD TREE BVC RETJ NO CAP
139 0171 A0 07 LDYIM 07 (PIECES)
140 0173 A5 B1 LDAZ .SQUARE
141 0175 D9 60 00 LOOPX CMPAY .BK
142 0178 F0 05 BEQ FOUNX
143 017A 88 DEY
144 017B F0 F1 BEQ RETJ (KING)
145 017D 10 F6 BPL LOOPX SAVE
146 017F B9 A0 00 FOUNX LDAAY .POINTS BEST CAP
147 0182 D5 E2 CMPZX .BCAP0 AT THIS
148 0184 90 02 BCC NOMAX LEVEL
149 0186 95 E2 STAXZ .BCAP0
150 0188 C6 B5 NOMAX DEC .STATE
151 018A A9 FB LDAIM FB IF STATE=FB
152 018C C5 B5 CMPZ .STATE TIME TO TURN
153 018E F0 03 BEQ UPTREE AROUND
154 0190 20 25 03 JSR GENRM GENERATE FURTHER
155 0193 E6 B5 UPTREE INC .STATE CAPTURES
156 0195 60 RTS
157 ;
158 ; THE PLAYER'S MOVE IS INPUT
159 ;
160 0196 C9 08 INPUT CMPIM 08 NOT A LEGAL
161 0198 B0 12 BCS ERROR SQUARE #
162 019A 20 EA 03 JSR DISMV
163 019D A2 1F DISP LDXIM 1F
164 019F B5 50 SEARCH LDAZX .BOARD
165 01A1 C5 FA CMPZ .DIS2
166 01A3 F0 03 BEQ HERE DISPLAY
167 01A5 CA DEX PIECE AT
168 01A6 10 F7 BPL SEARCH FROM
169 01A8 86 FB HERE STXZ .DIS1 SQUARE
170 01AA 86 B0 STXZ .PIECE
171 01AC 4C 00 00 ERROR JMP CHESS
172 ;
173 ; GENERATE ALL MOVES FOR ONE
174 ; SIDE, CALL JANUS AFTER EACH
175 ; ONE FOR NEXT STEP
176 ;
177 +++
178 0200 A2 10 GNMZ LDXIM 10 CLEAR
179 0202 A9 00 GNMX LDAIM 00 COUNTERS
180 0204 95 DE CLEAR STAZX .COUNT
181 0206 CA DEX
182 0207 10 FB BPL CLEAR
183 ;
184 0209 A9 10 GNM LDAIM 10 SET UP
185 020B 85 B0 STAZ .PIECE PIECE
186 020D C6 B0 NEWP DECZ .PIECE NEW PIECE
187 020F 10 01 BPL NEX ALL DONE?
188 0211 60 RTS -YES
189 ;
190 0212 20 1E 03 NEX JSR RESET READY
191 0215 A4 B0 LDYZ .PIECE GET PIECE
192 0217 A2 08 LDXIM 08
193 0219 86 B6 STXZ .MOVEN COMMON START
194 021B C0 08 CPYIM 08 WHAT IS IT?
195 021D 10 41 BPL PAWN PAWN
196 021F C0 06 CPYIM 06
197 0221 10 2E BPL KNIGHT KNIGHT
198 0223 C0 04 CPYIM 04
199 0225 10 1F BPL BISHOP BISHOP
200 0227 C0 01 CPYIM 01
201 0229 F0 09 BEQ QUEEN QUEEN
202 022B 10 0E BPL ROOK ROOK
203 ;
204 022D 20 8E 02 KING JSR SNGMV MUST BE KING!
205 0230 D0 FB BNE KING MOVES
206 0232 F0 D9 BEQ NEWP 8 TO 1
207 0234 20 9C 02 QUEEN JSR LINE
208 0237 D0 FB BNE QUEEN MOVES
209 0239 F0 D2 BEQ NEWP 8 TO 1
210 ;
211 023B A2 04 ROOK LDXIM 04
212 023D 86 B6 STXZ .MOVEN MOVES
213 023F 20 9C 02 AGNR JSR LINE 4 TO 1
214 0242 D0 FB BNE AGNR
215 0244 F0 C7 BEQ NEWP
216 ;
217 0246 20 9C 02 BISHOP JSR LINE
218 0249 A5 B6 LDAZ .MOVEN MOVES
219 024B C9 04 CMPIM 04 8 TO 5
220 024D D0 F7 BNE BISHOP
221 024F F0 BC BEQ NEWP
222 ;
223 0251 A2 10 KNIGHT LDXIM 10
224 0253 86 B6 STXZ .MOVEN MOVES
225 0255 20 8E 02 AGNN JSR SNGMV 16 TO 9
226 0258 A5 B6 LDAZ .MOVEN
227 025A C9 08 CMPIM 08
228 025C D0 F7 BNE AGNN
229 025E F0 AD BEQ NEWP
230 ;
231 0260 A2 06 PAWN LDXIM 06
232 0262 86 B6 STXZ .MOVEN
233 0264 20 CA 02 P1 JSR CMOVE RIGHT CAP?
234 0267 50 05 BVC P2
235 0269 30 03 BMI P2
236 026B 20 00 01 JSR JANUS YES
237 026E 20 1E 03 P2 JSR RESET
238 0271 C6 B6 DECZ .MOVEN LEFT CAP?
239 0273 A5 B6 LDAZ .MOVEN
240 0275 C9 05 CMPIM 05
241 0277 F0 EB BEQ P1
242 0279 20 CA 02 P3 JSR CMOVE AHEAD
243 027C 70 8F BVS NEWP ILLEGAL
244 027E 30 8D BMI NEWP
245 0280 20 00 01 JSR JANUS
246 0283 A5 B1 LDAZ .SQUARE GETS TO
247 0285 29 F0 ANDIM F0 3RD RANK?
248 0287 C9 20 CMPIM 20
249 0289 F0 EE BEQ P3 DO DOUBLE
250 028B 4C 0D 02 JMP NEWP
251 ;
252 ; CALCULATE SINGLE STEP MOVES
253 ; FOR K, N
254 ;
255 028E 20 CA 02 SNGMV JSR CMOVE CALC MOVE
256 0291 30 03 BMI ILL1 -IF LEGAL
257 0293 20 00 01 JSR JANUS -EVALUATE
258 0296 20 1E 03 ILL1 JSR RESET
259 0299 C6 B6 DECZ .MOVEN
260 029B 60 RTS
261 ;
262 ; CALCULATE ALL MOVES DOWN A
263 ; STRAIGHT LINE FOR Q,B,R
264 ;
265 029C 20 CA 02 LINE JSR CMOVE CALC MOVE
266 029F 90 02 BCC OVL NO CHK
267 02A1 50 F9 BVC LINE CH,NOCAP
268 02A3 30 07 OVL BMI ILL RETURN
269 02A5 08 PHP
270 02A6 20 00 01 JSR JANUS EVALUATE POSN
271 02A9 28 PLP
272 02AA 50 F0 BVC LINE NOT A CAP
273 02AC 20 1E 03 ILL JSR RESET LINE STOPPED
274 02AF C6 B6 DECZ .MOVEN NEXT DIR
275 02B1 60 RTS
276 ;
277 ; EXCHANGE SIDES FOR REPLY
278 ; ANALYSIS
279 ;
280 02B2 A2 0F REVERSE LDXIM 0F
281 02B4 38 ETC SEC
282 02B5 B4 60 LDYZX .BK SUBTRACT
283 02B7 A9 77 LDAIM 77 POSITION
284 02B9 F5 50 SBCZX .BOARD FROM 77
285 02BB 95 60 STAZX .BK
286 02BD 94 50 STYZX .BOARD AND
287 02BF 38 SEC
288 02C0 A9 77 LDAIM 77 EXCHANGE
289 02C2 F5 50 SBCZX .BOARD PIECES
290 02C4 95 50 STAZX .BOARD
291 02C6 CA DEX
292 02C7 10 EB BPL ETC
293 02C9 60 RTS
294 ;
295 ;
296 ;
297 ;
298 ;
299 ;
300 ;
301 ; CMOVE CALCULATES THE TO SQUARE
302 ; USING .SQUARE AND THE MOVE
303 ; TABLE. FLAGS SET AS FOLLOWS:
304 ; N - ILLEGAL MOVE
305 ; V - CAPTURE (LEGAL UNLESS IN CH)
306 ; C - ILLEGAL BECAUSE OF CHECK
307 ; [MY THANKS TO JIM BUTTERFIELD
308 ; WHO WROTE THIS MORE EFFICIENT
309 ; VERSION OF CMOVE]
310 ;
311 02CA A5 B1 CMOVE LDAZ .SQUARE GET SQUARE
312 02CC A6 B6 LDXZ .MOVEN MOVE POINTER
313 02CE 18 CLC
314 02CF 75 8F ADCZX .MOVEX MOVE LIST
315 02D1 85 B1 STAZ .SQUARE NEW POS'N
316 02D3 29 88 ANDIM 88
317 02D5 D0 42 BNE ILLEGAL OFF BOARD
318 02D7 A5 B1 LDAZ .SQUARE
319 ;
320 02D9 A2 20 LDXIM 20
321 02DB CA LOOP DEX IS TO
322 02DC 30 0E BMI NO SQUARE
323 02DE D5 50 CMPZX .BOARD OCCUPIED?
324 02E0 D0 F9 BNE LOOP
325 ;
326 02E2 E0 10 CPXIM 10 BY SELF?
327 02E4 30 33 BMI ILLEGAL
328 ;
329 02E6 A9 7F LDAIM 7F MUST BE CAP!
330 02E8 69 01 ADCIM 01 SET V FLAG
331 02EA 70 01 BVS SPX (JMP)
332 ;
333 02EC B8 NO CLV NO CAPTURE
334 ;
335 02ED A5 B5 SPX LDAZ .STATE SHOULD WE
336 02EF 30 24 BMI RETL DO THE
337 02F1 C9 08 CMPIM 08 CHECK CHECK?
338 02F3 10 20 BPL RETL
339 ;
340 ; CHKCHK REVERSES SIDES
341 ; AND LOOKS FOR A KING
342 ; CAPTURE TO INDICATE
343 ; ILLEGAL MOVE BECAUSE OF
344 ; CHECK. SINCE THIS IS
345 ; TIME CONSUMING, IT IS NOT
346 ; ALWAYS DONE.
347 ;
348 02F5 48 PHA STATE
349 02F6 08 PHP
350 02F7 A9 F9 LDAIM F9
351 02F9 85 B5 STAZ .STATE GENERATE
352 02FB 85 B4 STAZ .INCHEK ALL REPLY
353 02FD 20 4B 03 JSR MOVE MOVES TO
354 0300 20 B2 02 JSR REVERSE SEE IF KING
355 0303 20 09 02 JSR GNM IS IN
356 0306 20 2E 03 JSR RUM CHECK
357 0309 28 PLP
358 030A 68 PLA
359 030B 85 B5 STAZ .STATE
360 030D A5 B4 LDAZ .INCHEK
361 030F 30 04 BMI RETL NO - SAFE
362 0311 38 SEC YES - IN CHK
363 0312 A9 FF LDAIM FF
364 0314 60 RTS
365 ;
366 0315 18 RETL CLC LEGAL
367 0316 A9 00 LDAIM 00 RETURN
368 0318 60 RTS
369 ;
370 0319 A9 FF ILLEGAL LDAIM FF
371 031B 18 CLC ILLEGAL
372 031C B8 CLV RETURN
373 031D 60 RTS
374 ;
375 ; REPLACE .PIECE ON CORRECT .SQUARE
376 ;
377 031E A6 B0 RESET LDXZ .PIECE GET LOCAT.
378 0320 B5 50 LDAZX .BOARD FOR PIECE
379 0322 85 B1 STAZ .SQUARE FROM BOARD
380 0324 60 RTS
381 ;
382 ;
383 ;
384 0325 20 4B 03 GENRM JSR MOVE MAKE MOVE
385 0328 20 B2 02 GENR2 JSR REVERSE REVERSE BOARD
386 032B 20 09 02 JSR GNM GENERATE MOVES
387 032E 20 B2 02 RUM JSR REVERSE REVERSE BACK
388 ;
389 ; ROUTINE TO UNMAKE A MOVE MADE BY
390 ; MOVE
391 ;
392 0331 BA UMOVE TSX UNMAKE MOVE
393 0332 86 B3 STXZ .SP1
394 0334 A6 B2 LDXZ .SP2 EXCHANGE
395 0336 9A TXS STACKS
396 0337 68 PLA MOVEN
397 0338 85 B6 STAZ .MOVEN
398 033A 68 PLA CAPTURED
399 033B 85 B0 STAZ .PIECE PIECE
400 033D AA TAX
401 033E 68 PLA FROM SQUARE
402 033F 95 50 STAZX .BOARD
403 0341 68 PLA PIECE
404 0342 AA TAX
405 0343 68 PLA TO SQUARE
406 0344 85 B1 STAZ .SQUARE
407 0346 95 50 STAZX .BOARD
408 0348 4C 70 03 JMP STRV
409 ;
410 ; THIS ROUTINE MOVES .PIECE
411 ; TO .SQUARE, PARAMETERS
412 ; ARE SAVED IN A STACK TO UNMAKE
413 ; THE MOVE LATER
414 ;
415 034B BA MOVE TSX
416 034C 86 B3 STXZ .SP1 SWITCH
417 034E A6 B2 LDXZ .SP2 STACKS
418 0350 9A TXS
419 0351 A5 B1 LDAZ .SQUARE
420 0353 48 PHA TO SQUARE
421 0354 A8 TAY
422 0355 A2 1F LDXIM 1F
423 0357 D5 50 CHECK CMPZX .BOARD CHECK FOR
424 0359 F0 03 BEQ TAKE CAPTURE
425 035B CA DEX
426 035C 10 F9 BPL CHECK
427 035E A9 CC TAKE LDAIM CC
428 0360 95 50 STAZX .BOARD
429 0362 8A TXA CAPTURED
430 0363 48 PHA PIECE
431 0364 A6 B0 LDXZ .PIECE
432 0366 B5 50 LDAZX .BOARD
433 0368 94 50 STYZX .BOARD FROM
434 036A 48 PHA SQUARE
435 036B 8A TXA
436 036C 48 PHA PIECE
437 036D A5 B6 LDAZ .MOVEN
438 036F 48 PHA MOVEN
439 0370 BA STRV TSX
440 0371 86 B2 STXZ .SP2 SWITCH
441 0373 A6 B3 LDXZ .SP1 STACKS
442 0375 9A TXS BACK
443 0376 60 RTS
444 ;
445 ; CONTINUATION OF SUB STRATGY
446 ; -CHECKS FOR CHECK OR CHECKMATE
447 ; AND ASSIGNS VALUE TO MOVE
448 ;
449 0377 A6 E4 CKMATE LDXZ .BMAXC CAN BLK CAP
450 0379 E4 A0 CPXZ .POINTS MY KING?
451 037B D0 04 BNE NOCHEK
452 037D A9 00 LDAIM 00 GULP!
453 037F F0 0A BEQ RETV DUMB MOVE!
454 ;
455 0381 A6 E3 NOCHEK LDXZ .BMOB IS BLACK
456 0383 D0 06 BNE RETV UNABLE TO
457 0385 A6 EE LDXZ .WMAXP MOVE AND
458 0387 D0 02 BNE RETV KING IN CH?
459 0389 A9 FF LDAIM FF YES! MATE
460 ;
461 038B A2 04 RETV LDXIM 04 RESTORE
462 038D 86 B5 STXZ .STATE STATE=4
463 ;
464 ; THE VALUE OF THE MOVE (IN ACC)
465 ; IS COMPARED TO THE BEST MOVE AND
466 ; REPLACES IT IF IT IS BETTER
467 ;
468 038F C5 FA PUSH CMPZ .BESTV IS THIS BEST
469 0391 90 0C BCC RETP MOVE SO FAR?
470 0393 F0 0A BEQ RETP
471 0395 85 FA STAZ .BESTV YES!
472 0397 A5 B0 LDAZ .PIECE SAVE IT
473 0399 85 FB STAZ .BESTP
474 039B A5 B1 LDAZ .SQUARE
475 039D 85 F9 STAZ .BESTM FLASH DISPLAY
476 039F 4C 1F 1F RETP JMP *OUT AND RTS
477 ;
478 ; MAIN PROGRAM TO PLAY CHESS
479 ; PLAY FROM OPENING OR THINK
480 ;
481 03A2 A6 DC GO LDXZ .OMOVE OPENING?
482 03A4 10 17 BPL NOOPEN -NO
483 03A6 A5 F9 LDAZ .DIS3 -YES WAS
484 03A8 D5 DC CMPZX .OPNING OPPONENT'S
485 03AA D0 0F BNE END MOVE OK?
486 03AC CA DEX
487 03AD B5 DC LDAZX .OPNING GET NEXT
488 03AF 85 FB STAZ .DIS1 CANNED
489 03B1 CA DEX OPENING MOVE
490 03B2 B5 DC LDAZX .OPNING
491 03B4 85 F9 STAZ .DIS3 DISPLAY IT
492 03B6 CA DEX
493 03B7 86 DC STXZ .OMOVE MOVE IT
494 03B9 D0 1A BNE MV2 (JMP)
495 ;
496 03BB 85 DC END STAZ .OMOVE FLAG OPENING
497 03BD A2 0C NOOPEN LDXIM 0C FINISHED
498 03BF 86 B5 STXZ .STATE STATE=C
499 03C1 86 FA STXZ .BESTV CLEAR BESTV
500 03C3 A2 14 LDXIM 14 GENERATE P
501 03C5 20 02 02 JSR GNMX MOVES
502 ;
503 03C8 A2 04 LDXIM 04 STATE=4
504 03CA 86 B5 STXZ .STATE GENERATE AND
505 03CC 20 00 02 JSR GNMZ TEST AVAILABLE
506 ; MOVES
507 ;
508 03CF A6 FA LDXZ .BESTV GET BEST MOVE
509 03D1 E0 0F CPXIM 0F IF NONE
510 03D3 90 12 BCC MATE OH OH!
511 ;
512 03D5 A6 FB MV2 LDXZ .BESTP MOVE
513 03D7 B5 50 LDAZX .BOARD THE
514 03D9 85 FA STAZ .BESTV BEST
515 03DB 86 B0 STXZ .PIECE MOVE
516 03DD A5 F9 LDAZ .BESTM
517 03DF 85 B1 STAZ .SQUARE AND DISPLAY
518 03E1 20 4B 03 JSR MOVE IT
519 03E4 4C 00 00 JMP CHESS
520 ;
521 03E7 A9 FF MATE LDAIM FF RESIGN
522 03E9 60 RTS OR STALEMATE
523 ;
524 ; SUBROUTINE TO ENTER THE
525 ; PLAYER'S MOVE
526 ;
527 03EA A2 04 DISMV LDXIM 04 ROTATE
528 03EC 06 F9 ROL ASLZ .DIS3 KEY
529 03EE 26 FA ROLZ .DIS2 INTO
530 03F0 CA DEX DISPLAY
531 03F1 D0 F9 BNE ROL
532 03F3 05 F9 ORAZ .DIS3
533 03F5 85 F9 STAZ .DIS3
534 03F7 85 B1 STAZ .SQUARE
535 03F9 60 RTS
536 ;
537 ; THE FOLLOWING SUBROUTINE ASSIGNS
538 ; A VALUE TO THE MOVE UNDER
539 ; CONSIDERATION AND RETURNS IT IN
540 ; THE ACCUMULATOR
541 ;
542 +++
543 1780 18 STRATGY CLC
544 1781 A9 80 LDAIM 80
545 1783 65 EB ADCZ .WMOB PARAMETERS
546 1785 65 EC ADCZ .WMAXC WITH WEIGHT
547 1787 65 ED ADCZ .WCC OF 0.25
548 1789 65 E1 ADCZ .WCAP1
549 178B 65 DF ADCZ .WCAP2
550 178D 38 SEC
551 178E E5 F0 SBCZ .PMAXC
552 1790 E5 F1 SBCZ .PCC
553 1792 E5 E2 SBCZ .BCAP0
554 1794 E5 E0 SBCZ .BCAP1
555 1796 E5 DE SBCZ .BCAP2
556 1798 E5 EF SBCZ .PMOB
557 179A E5 E3 SBCZ .BMOB
558 179C B0 02 BCS POS UNDERFLOW
559 179E A9 00 LDAIM 00 PREVENTION
560 17A0 4A POS LSRA
561 17A1 18 CLC **************
562 17A2 69 40 ADCIM 40
563 17A4 65 EC ADCZ .WMAXC PARAMETERS
564 17A6 65 ED ADCZ .WCC WITH WEIGHT
565 17A8 38 SEC OF 0.5
566 17A9 E5 E4 SBCZ .BMAXC
567 17AB 4A LSRA ************
568 17AC 18 CLC
569 17AD 69 90 ADCIM 90
570 17AF 65 DD ADCZ WCAP0 PARAMETERS
571 17B1 65 DD ADCZ WCAP0 WITH WEIGHT
572 17B3 65 DD ADCZ WCAP0 OF 1.0
573 17B5 65 DD ADCZ WCAP0
574 17B7 65 E1 ADCZ WCAP1
575 17B9 38 SEC [UNDER OR OVER-
576 17BA E5 E4 SBCZ .BMAXC FLOW MAY OCCUR
577 17BC E5 E4 SBCZ .BMAXC FROM THIS
578 17BE E5 E5 SBCZ .BCC SECTION]
579 17C0 E5 E5 SBCZ .BCC
580 17C2 E5 E0 SBCZ .BCAP1
581 17C4 A6 B1 LDXZ .SQUARE ************
582 17C6 E0 33 CPXIM 33
583 17C8 F0 16 BEQ POSN POSITION
584 17CA E0 34 CPXIM 34 BONUS FOR
585 17CC F0 12 BEQ POSN MOVE TO
586 17CE E0 22 CPXIM 22 CENTRE
587 17D0 F0 0E BEQ POSN OR
588 17D2 E0 25 CPXIM 25 OUT OF
589 17D4 F0 0A BEQ POSN BACK RANK
590 17D6 A6 B0 LDXZ .PIECE
591 17D8 F0 09 BEQ NOPOSN
592 17DA B4 50 LDYZX .BOARD
593 17DC C0 10 CPYIM 10
594 17DE 10 03 BPL NOPOSN
595 17E0 18 POSN CLC
596 17E1 69 02 ADCIM 02
597 17E3 4C 77 03 NOPOSN JMP CKMATE CONTINUE
598 ;
599 ;
600 ;
[CROSS REFERENCE LISTING OMITTED]
BLOCK DATA
.SETW 0070 03 04 00 07 02 05 01 06 10 17 11 16 12 15 14 13
73 74 70 77 72 75 71 76 60 67 51 66 52 65 64 63
.MOVEX 0090 F0 FF 01 10 11 0F EF F1 DF E1 EE F2 12 0E 1F 21
.POINTS 00A0 0B 0A 06 06 04 04 04 04 02 02 02 02 02 02 02 02
.OPNING 00C0 99 25 0B 25 01 00 33 25 07 36 34 0D 34 34 0E 52
25 0D 45 35 04 55 22 06 43 33 0F CC
NOTE THAT 00B7 TO 00BF, 00F4 TO 00F8, AND 00FC TO 00FF ARE
AVAILABLE FOR USER EXPANSION AND I/O ROUTINES.