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.
 | 
						|
 |