632 lines
32 KiB
Plaintext
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.
|
|
|