\V VCH CHECKERS BY CAROL SHAW 5/15/80 9:41 AM .TITLE "VCS CHECKERS BY CAROL SHAW15/15/80 '(ywJ. 1 0000 “PAL = -Q J0 => NTSC, i=> PAL VERSION 0000 PRNT 0 ;0 => ROM, 1=> DEBUG VERSION WHICH PRINTS ON TI TERMINAL 0000 STACK = 0 ;0 => NORMAL ALPHA-BETA "STACK", 1 => EXTRA LARGE STACK_ !-000 ROMSTR = $F000 ;ROM START ADDR DK1:SCHKG. SRC COPYRTGHTATARr, 1980 STARTED 10/1/79 THE ALPHA-BETA PRUNING ALGORITHM USED HEREIN IS BASED ON THE LISP PROGRAM ON PAGE 321 OF "ARTIFICIAL INTELLIGENCE" BY PATRICK HENRY WINSTON, 1977, ADDISON-WESLEY PUBLISHING COMPANY, INC. PHILIPPINES._ ALSO ON "SOME STUDIES IN MACHINE LEARNING USING THE GAME OF CHECKERS", BY A. L. SAMUEL, PARTS I AND II, IN THE IBM JOURNAL OF RESEARCH AND DEVELOPMENT, JULY 1959 AND NOVEMBER 1967. PART I IS ALSO IN "COMPUTERS AND THOUGHT", BY EDWARD A. FEIGENBAUM AND JULIAN FELDMAN, PP. 71-105, 1963, MCGRAW-HILL. STELLA” START_ 0000 VSYNC BIT 75; T” VERTICAL BLANK SET-CLR PORT CONTROL 11NPT0—1NPT5) oooi (/BLANK = $oi WS YNC $02 STROBE WAIT FOR HORIZ BLANK 0002 RSYNC $03 STROBE RESET HORIZ SYNC COUNTER_ 0003 NUMBER-SIZE PLAYER/MISSILE 0 NUSlZO = $04 BITS 54 210 0004 NUMBER-SIZE PLAYER/MISSILE 1 0005 NUSIZ1 $05 BITS 54 210 COLUPO = $06 BITS 7654321 COLOR(4)—LUM(3) PLAYER O oooa COLOR 1 = BITS 7654321 COLOR(4)—LUM(3) PLAYER 1 "0007 CQLUPF = $08 BITS 7654321 COLOR (4)—LUM(3 > PLAYFIELD 0008 COLUEK = $09 BITS 7654321 COLOR(4)-LUM(3) BACKGROUND 0009 CTRLPF = $0A BITS 54 210 PLAYFIELD CONTROL & BALL OOOA” REFPO $0B BIT 3 REFLECT PLAYER 0. 1=>REFLECT OOOB REFP1 $0C BIT 3 REFLECT PLAYER 1 OOOC PFO $0D ~ BITS 7654 PLAYFIELD REG BYTE O (REVERSED) GOOD PF1 $0E BITS ALL PLAYFIELD REG BYTE OOOE PF2 $0F BITS ALL PLAYFIELD REG BYTE (REVERSED) OOOF RESPO $10 STROBE RESET PLAYER O 0010 RESP1 $11 STROBE RESET PLAYER 1 0011 RESMO $12 STROBE RESET MISSILE 0 0012 STROBE RESET MISSILE 1 0013 0014 RESBL $14 STROBE RESET BALL AUDCO $15 BITS 3210 AUDIO CONTROL 6 0015 AUDC1 $16 B I TS “ 3210 AUDIO CONTROL 1 ”0016 AUDFO $17 BITS 3210 AUDIO FREQUENCY 0 0017 AUDF1 $18 BITS 3210 AUDIO FREQUENCY 1 0018 AUDVO $T9” BITS 3210 AUDIO VOLUME 0 0019 AUDV1 $1A i BITS 3210 AUDIO VOLUME 1 001A VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM 00 IB GRPO = $1B BITS ALL GRAPHICS FOR PLAYER 0 001C GRP 1 = $1C BITS ALL GRAPHICS FOR PLAYER 1 001D ENAMO = " $1D “BTT --1 ENABLE MISSILE 0. 1=> ENABLE 00 IE ENAM1 = $1E BIT 1 ENABLE MISSILE 1 00IF ENABL = $1F BIT 1 ENABLE BALL 0020 HMPO = *20- BITS 7654 HORIZ MOTION PLAYER 0. 0-7 -> LEFT 0021 HMP1 = $21 BITS 7654 HORIZ MOTION PLAYER 1. F-8 => RIGHT 0022 HMMO = $22 BITS 7654 HORIZ MOTION MISSILE 0 " 0023 HMM1 " - $23 BITS 7654 HORIZ MOTION MISSILE I 0024 HMBL = $24 BITS 7654 HORIZ MOTION BALL 0025 VDELPO = $25 BIT 0 VERTICAL DELAY PLAYER 0. 1=> VDEL ON 0026 VDELFl = $26 BIT 0 VERTICAL DELAY PLAYER 1 0027 VDELBL = $27 BIT 0 VERTICAL DELAY BALL 0028 RESMPO = $28 BIT 1 RESET MISSILE TO PLAYER 0. 1=> MISSILE RESET TO PLAYER 0029 RESMPl = $29 BIT' 1 RESET MISSILE TO PLAYER 1 002A 'HMOVE = $2A STROBE ACT ON HORIZ MOTION 002B HMCLR = $2B STROBE CLEAR ALL HM REGISTERS _ 0020 CXGOT~ =' $2C j STROBE- ~CCEAR COLLISION LATCHES ; READ ADDRESSES - BITS 7 & 6 ONLY 0030 CXMOP = $30 M0*P1 MO*PO 0031 CXM1P = $31 M1*P0 M1*P1 j._ 0032 CXPOFB = $32 PO*PF PO*BL 0033 CXP1FB = $33 P1#PF P1*BL 0034 CXMOFB = $34 MO*PF MO*BL 0035 CXM1FB = $35 >M1*PF M1*BL 0036 CXBLPF = $36 ;BL*PF 0037 CXPPMM = $37 ;PQ*P1 M0*M1 0038 INF TO = $38 ) POT 0. BlT7=l -> POT CAPACITOR IS COMPLETELY CHARGED? 0039 INPT1 = $39 iPOT 1 003A INPT2 = $3A iPOT 2 -003B " INPT3 = $3B POT 3 003C INPT4 = $3C JOYSTICK 0 BUTTON. B7=0 => BUTTON PRESSED 003D INPT5 = $3D JOYSTICK 1 BUTTON ; PIA AND TIMER (6532) LOCATIONS 0280 SWCHA = $280 POiPl JOYSTICKS (RLDUiRLDV)> PD1 TRIGGERS/ KEYBOARD/ DRIVING CONTROLLER 0281 CTLSWA = $281 SWCHA I/O CONTROL 1=0UTPUT 0282 SWCHB = $282 CONSOLE SWITCHES (READ ONLY) P1B/POB,X,X/B/W, X, SELECT.RESET IF 0 0283 CTLSWE = $283 UNUSED 0284 INTIM = $284 ) INTERVAL TIMER INPUT 0=>TIMER UP 0294 TIM1T = $294 ; TIMER OUTPUT: 1 MACHINE CYCLE/TICK (.838 MICROSEC) 0295 TIM8T = $295 ;8 MACHINE CYCLES/TICK 0296 TIM64T = $296 ; 64 MC'S/TICK 0297 T1024T = $297 ; 1024 MACHINE CYCLES/TICK (858. 2 MICROSECONDS) ; KIM SUBROUTINES -IE2F- CRLF = $1E2F PRINT CRLF ON TI JE3B PRTBYT = $1E3B PRINT ACCUMULATOR IN HEX ASCII ON TI 1E5A GETCH = $1E5A READ ASCII CHAR FROM TI INTO A J E9E ~ ' ' OUTSP = S1E9E PRINT SPACE ON TI JEAO OUTCH = $1EA0 PRINT ACCUMULATOR AS ASCII CHAR ON TI JF9D GETBYT = $1F9D READ TWO HEX ASCII CHARS FROM TI INTO A CHECKERS EQUATES OOOB MAXMAX = 11 ;MAX STACK DEPTH FOR ALPHA-BETA . IF STACK MAXMAX = 22 . ENDIF 0009 JMPLEN = 9 ; LENGTH OF JMPTBL (LIST OF JUMPED PIECES! 6010 LINCHR = 15 ;# OF LINES/CHAR 0000 EMPTY = 0 i EMPTY SQUARE INDEX INTO CHARACTER TABLE 0010 CHECKER = 1*LINCHR 0020 KING = 2*LINCHR 0030 CURS = 3*LINCHR OOAA BLANK = 10*16+10 iTWO BLANK CHARS OOBB JP = 11*16+11 i "JP" 0000 CLFO = 0 ;PLAYER O (HUMAN, LEFT JOYSTICK) 0030 CLP 1 = $80 ;PLAYER 1 (COMPUTER, RIGHT PLAYER) 0010 HUMCHK = CLPO+CHECKER iHUMAN CHECKER (NOT KING) 0020 HUMKNG = CLPO+KING i HUMAN KING 0030 HUMCRS = CLPO+CURS ;HUMAN CURSOR 0090 CMFCHK = CLP1+CHECKER 7 COMPUTER CHECKER OOAO CMPKNG = CLP1+KING iCOMPUTER KING OOBO ’ CMPCRS = CLP1+CURS ;COMPUTER CURSOR 0005 HMIN = 5 ; MIN. GAMIMO FOR HARD BOARD COLORS 0036 DARK = $36 iDARK CHECKER COLOR/LUM OOOC LIGHT $0C i LIGHT CHECKER COLOR/LUM 0000 ED ARK 0 iEASY DARK SQUARE COLOR. 0 IS ACTUALLY USED INSTEAD OF EDARK 0034 ELIGHT = $34 i EASY LIGHT SQUARE COLOR (RED) 0036 ELI AT $36 ;EASY LIGHT IF ATTRACT OOBO HDARK $B0 ;HARD DARK SQUARE COLOR (GREEN) 0026 HLIGHT = $26 ;HARD LIGHT SQUARE COLOR (BUFF OR CREAM OR WHITE) 0026 HLIAT $26 iHARD LIGHT SQUARE IF ATTRACT OOOC LTCHR_= $0C iLIGHT CHAR COLOR 0092 DRKCHR = $92 ;DARK CHARACTER COLOR 002D GSCON 45 iGAME SELECT TIMER INITIAL VALUE 0025 OVRCON = $25 ;OVERSCAN TIMER INITIAL VALUE 002C VBLCON = 44 iVBLANK TIMER INITIAL VALUE 00 IE VBTIM 30 i 1/2 SEC. VBLANK AFTER CALCULATION — CHANGE FOR PAL 002D FRZTIM = 45 ;FREEZE TIMER FOR END OF HUMAN MOVE PAL VERSIONS OF THE ABOVE . IF PAL DARK = $66 iDARK CHECKER COLOR/LUM LIGHT = $0C ;LIGHT CHECKER COLOR/LUM EDARK = 0 ;EASY DARK SQUARE COLOR ELIGHT =_ $64 ;EASY LIGHT SQUARE COLOR (RED) EL I AT = $66 ;EASY LIGHT IF ATTRACT HDARK = $50 »HARD DARK SQUARE COLOR (GREEN) HLIGHT = $46 iHARD LIGHT SQUARE COLOR (BUFF OR CREAM OR WHITE) HLIAT $46 ;HARD LIGHT SQUARE IF ATTRACT LTCHR = $0C ;LIGHT CHAR COLOR DRKCHR = $B2 ;DARK CHARACTER COLOR GSCON = 38 ;GAME SELECT TIMER INITIAL VALUE VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM OVRCON = $2B i OVERSCAN TIMER INITIAL VALUE - SL VBLCON VBTIM = = $36 $32 ; VBLANK TIMER INITIAL VALUE j 1/2 SEC. VBLANK AFTER CALCULATION — CHANGE FOR PAL FRZTIM = 38 i FREEZE TIMER FOR END OF HUMAN MOVE .ENDIF FFFB RB = -5 SQUARE # OFFSET FOR RIGHT BACKWARD (DOWN) MOVEMENT FFFC LB = ‘ -4 LEFT EACKWARD 0004 RF = 4 RIGHT FORWARD 0005 LF_=_ 5 LEFT FORWARD _ 0010 PLAY2 = $10 ;TWO-PLAYER GAME # IN DECIMAL 0036 DROP = $36 ; PIECE DROPPING SOUND FOR AUDVO 0030 PICKUP = $30 ;PIECE PICKUP SOUND FOR AUDVO 0004 PURE2 = 4 iPURE TONE/4 FOR AUDCO OOOF ERRSND =15 iERROR SOUND FOR AUDCO 0008 MLT = $08 ;MULTIPLE JUMP MASK 0004 MST = $04 sMUST JUMP MASK 0004 CORN = 4 ;DOUBLE CORNER CREDIT 0008 ENDPC = 4*2 iMIN NUMBER OF HUMAN PIECES FOR NON-END GAME 0020 ADDTRM = $20 ; TERM TO ADD TO MAGNITUDE OF SCORE IF STACK IS FULL IN TERMNQDE VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM VARIABLES (RAM PAGE ZERO) • *=$80 THE FOLLOWING RAM" LOGS ARE CLEARED DURING RESET: • t ;A-B MEANS USED BY ALPHA-BETA PRUNING ROUTINE SAVE MEANS ALPHA- BETA PRUNING ROUTINE DOES NOT ALTER ZROBGN m 0080 BOARD *=*+35 iCHECKER BOARD (1 BYTE / SQUARE) SQUARES 8,17,26 ARE NOT USED. A-B "OOA3 PIECE • *=*+1 /CURRENT PIECE BEING MOVED. A-B 00A4 JMPI ~ 0 *=*+1 ;INDEX INTO JMPLST — <0 => NO JUMPS. A-B 00 A 5 MSTJMP *=*+1 /0 => ACTIVE PLAYER CAN'T JUMP 4 => ACTIVE PLAYER MUST jump: A-B 0 00A6 MLTJMP *=*+1 iS => CONTINUING MULTIPLE JUMP. A-B & MAIN O0A7 MSTFLG 0 *=*+1 /MSTJMP SAVED WHILE NEW MSTJMP IS COMPUTED. A-B 00A8 MLTFLG *=*+1 ;MLTJMP BACKUP. A-B • 00A9 HPIECE *=*+1 ; HUMAN PIECE COUNT. KING=3, CHECKER=2. A-B • 00 A A CPIECE *=*+1 /COMPUTER PIECE COUNT. A-B OOAB CURSOR *=*+1 ; SQUARE # FOR BLINKING CURSOR. SAVE OOAC " FRORB *=*+1 /BINARY "FROM" SQUARE (INTERNAL NUMBERING). A-B • OOAD TOSQRE *=*+1” /BINARY "TO" SQUARE7 A-B € • OOAE HKING *=*+r z HUMAN KTNCTTIOUNT ~ OOAF CKING I *=#+1 /COMPUTER KING COUNT (1 FOR EACH KING) _ OOBO ZROEND f 3 THE FOU_UWJLNU KW1 LUL HKt NUI Ktbt 1 : 3 c GAMNO = 1 TO GMAX2 IN DECIMAL I- 9 “ REGULAR CHECKERS 10 2-PLAYER (EITHER) e II- 19 GIVE-AWAY (LOSING) -OOBO GAMNO *=*+1 /GAME NUMBER t »; GOBI COLHUM --———1—~ *=*+1 /Human checker color (no attract added in), save 00B2 COLCMP c #=*+1 /COMPUTER CHECKER COLOR (NO ATTRACT ADDED IN). SAVE? r 00B3 T0 *=*+1 ; TEMP (USED IN KERNEL, ETC. ). A-B 8t MAIN _ OOB4 T1 /TEMP (USED IN KERNEL, ETC. ). A-B & MAIN *=*+1 ; X REG SAVED FOR JMPCHK SUBROUTINE. A-B & MAIN • 00B4 XSAVE Aan =_ — T1 00B5 T2 a _ _^ —_ mkiW? aE-^JHpi-- w VCS CHECKERS BY CAROL SHAW 5/15/SO 9:41 AM - m, *=*+1 ;A-B & MAIN t |_ 0QB5 YSAVE T2 ! . A-B & MAIN nUm — >2 BYTE NUMERATOR FOR STATIC EVALUATION DIVIDE (USED FOR RATIO OF PIECE COUNTS). A—B • f 00B6 T3 *=#+1 ; A-B St MAIN GOB 6 ANYMVE = T3 i >0 -> ACTIVE PLAYER CAN MOVE. A-B & MAIN — USED ONLY BY JMPCHK 9 OOB7 T6 *=*+1 ;ANOTHER TEMP OOBS DEN 9 *=*+1 iDENOMINATOR. A-B 00B9 T7 *=*+1 7 TEMP - OOBA TS *=*+1 ;YET ANOTHER TEMP — USED TO SAVE BK COLOR OOBB ACTIVE *•=#■+1 ; ACTIVE OR CURRENT PLAYER (HUMAN=0, COMPUTER=$SO>. A-B Zt MAIN ODBC T3EPTH |! «■=«■+1 ;CURRENT DEPTH OF TREE SEARCH. A-B & SET UP BY MAIN OOBD JMPSQR #=#+1 ; SQUARE # FOR PIECE BEING JUMPED. A-B OOBE INDEX *=*+1 " iCURRENT OFFSET INDEX <0-3). A-B OOBF FRSMOV *=#+1 ;$80 => FIRST MOVE (MAY BE MULTIPLE JUMP). A-B ; B7=l => FIRST MOVE, B6=l => FIRST MOVE AT THIS LEVEL, BETTER MOVE FOUND OOCO XMOVE *=*+1 ;"FROM" MOVE SQUARE FROM MOVCHK. A-B & MAIN OOC1 TIMOOT jggg g S' V ^x v i ; |§| I m ; ] * L X70C2 OLDPBQ *=•»•+1 /timer i *=*+1 ;SWCHB FOR THIS FRAME. OOC 3 FRAME i FRAME COUNTER --""COUNTS "OP." -^-----1 OOC4 PRNCNT *=*+1 ■ - ; B7=l => PRUNE (FOR MULTIPLE JUMPS). B6-B0 = RANDOM MOVE COUNTER ) OOC 5 JMPLST *=#+JMPLEN ;SQUARES FOR PIECES JUMPED BY COMPUTER, -CO => KING. A-B & MAIN OOCE " ' ' JMPEND 1 ; THE FOLLOWING ALPHA-BETA "STACK" OVERLAP THE MAIN PROGRAM VARS WHICH 7 ARE" LISTED LAST. THEY ALSO OVERLAP JMPLST WITH THE EXCEPTION OF THE FIRST 3 BYTES. i *=JMPLST+3 TTF STACK" AX=* *•=$180 . ENDIF' ;ALLOW FOR BIGGER STACK"IF DEBUG I OOCS FROMT *=*+MAXMAX ;FROM<1-1) = FROM SQUARE FOR DEPTH I. A-B B7=l => FIRST MOVE, B6=l => FIRST MOVE AT THIS LEVEL, BETTER MOVE FOUND 00D3 OTHER _ *=*+MAXMAX ^OTHER(1-1) = OTHER FOR DEPTH I. A-B ' B7-6 = CAPTURED PIECE, B5-4 = MOVED’ FI EC E, B3 = MLTJMP, B2 = MSTJMP, Bl-0 = OFFSET INDEX OODE ALPHAL *=*+MAXMAX+l+l ;ALPHAL(I) = ALPHA m THE FOLLOWING VARS OVERLAP THE ALPHA-BETA "STACK" AND T4—SCRRPF: 3 ' c *=UMPLST+JMPLEN OOCE COLPO 3 *=*+! iCOLOR OF PO (ATTRACT ADDED IN) i { OOCF C0LP1 *=*+1 iCOLOR OF PI » c OODO COLO .COLOR OF 1ST PIECE IN ROW (FOR KERNEL ONLY) • 00D2 C0L1 O0D4^ C0L2 *=*+2 c 3 #=*+2 • 00D6 COLS *=*+2 3 ft 00D8 PNTRO L *=*+2 _1 iPOINTERS TO SQUARE GRAPHICS 3 OODA PNTR1 * #=#+2 H" OODC PNTR2 1 *=#+2 i_ OODE PNTR3 #=*+2 ‘ Jfc > OOEO SQUARE *=*+1 ; SQUARE # FOR USE IN KERNEL OOE1 SQREND _j« THE FOLLOWING PARTIALLY OVERLAP BOTH THE ALPHA-BETA "STACK" AND 1 COLPO-SQUARE. ft *=JMPLST+JMPLEN OOCE T4 ’ [ #=*+1 _] • OOCF T5 *=*+1 Cl OODO SCRLPO *=#+5 :i PO “SCORE" GRAPHICS * 00D5 SCRRP1 *=*+5 rpi i OODA SCRLPF y #=-if-+5 i LEFT PF1 GRAPHICS fg OODF SCRRPF #=*+5 iiRIGHT PF1 GRAPHICS j y 00E4 MOVVAL *=*+1 ; VALUE IN MOVE SQUARE. SET UP AT END OF A-B. DON'T SAVE 00E5 MOVFLG *=*+1 ; 1 => DISPLAY COMPUTER'S MOVE. DON'T SAVE * 0 VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM ' • OOE6 WINSAV 0 *=*+1 ;WINNING PLAYER, 0=> NO WIN. DON'T SAVE OOE7 FROMTO *=*+1 iO => FROM, 1=> TO. DON'T SAVE ,t 00E8 CURSC *=*+1 ;COMPUTER CURSOR. SET UP AT END OF A-B. DON'T SAVE 00E9 MOVE *=*+1 ;CURRENT MOVE. SET UP AT END OF A-B. DON'T SAVE OOEA OLDINP *•=*+1 iJOYSTICK BUTTON VALUE FOR CURRENT PLAYER FOR LAST FRAME. DON'T SAVE ~ OOEB GSTIM f; *=*+1 i GAME SELECT TIMER — COUNTS DOWN TO 0. DON'T SAVE OOEC 0LDPB6 *=*+1 ; OLD SWCHB VALUE, 0=>N0RMAL, 00=>SETUP 0 => MAKE ILLEGAL MOVE SOUND. DON'T SAVE < OOEE ATIM *=#+1 ;ATTRACT MODE TIMER — COUNTS UP. DON'T SAVE OOEF GFLG2 #=*+1 ; 0=>ATTRACT <> 0 => NOT ATTRACT. DON'T SAVE OOFO BLNKTM *=*+1 ;FRAME‘COUNTER FOR VBLANK AFTER CALCULATION(DOWN TO 0). DON'T SAVE 00F1 SNDTIM *=*+1 ; TIMER FOR SOUNDS (COUNTS DOWN TO 0). DON'T SAVE “ OOF 2 FREEZE *=#+1 ;TIMER FOR FREEZE AFTER HUMAN MOVE (0=END OF FREEZE) OOFS COLSQ *=#+1 TSQUARE^COLOR FOR KERNEL 00F4 ‘FROM *=*+1 ; FROM SQUARE FOR •'SCORE" . DON'T SAVE OOF 5 TOSGR *=■*+1 ;TO SQUARE FOR "SCORE". DON'T SAVE 00F6 SCPO #=*+1 ;GAME # FOR "SCORE". SAVE _ OOF7 SCP1 *=*+1 ;# OF PLAYERS FOR "SCORE". DON'T SAVE i F8-FF ARE USED FOR STACK (4 LEVELS DEEP FOR NOW) L_____-_ « ♦ VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM , SCORE KERNEL (TOP LINE OF CHARS) *=ROMSTR . IF PRNT *=$E000 ; RELOCATE IF DEBUG TO MAKE ROOM FOR MORE CODE fe f JMP PSTART . ENDIF FOOO JMPBAK FOOO A2 04 LDX #5—1 ;5 BYTES PER CHARACTER e F002 SC0R2 MACHINE CYCLE COUNTS ARE GIVEN T-002 AO 02 LDY #2 ; 50 49 REPEAT EACH BYTE TWICE F004 SC0R3 F004 85 02 STA WSYNC ; 47 53 46 52_ F006 B5 DA LDA SCRLPFiX > 4 F008 85 OE STA PF1 ;7 GAME # (AT LEFT) F00A B5 DO LDA SCRLPOiX ill __ FOOC 85 IB STA GRPO iT4 “FROM" SQUARE $ FOOE B5 D5 LDA SCRRP1> X F010 85 1C STA GRP 1 i 21 "TO" SQUARE___ • F012 A9 00 LDA #0 i23 MISSILE 0 FOR DASH BETWEEN “FROM" AND "TO" r~ r-oi4 eo 02 CPX #2 i25 X=0 ON LAST TIME THROUGH SO CARRY IS CLEAR 3 F'016 DO 01 BNE SC0R4 i 27 28 F018 8A TXA i 29 X=2 FO19 SC0R4 F019 85 ID STA ENAMO ; 32 31 3 --F0!e B5 DF LDA SCRRPF,X i 36 35 F01D 88 DEY i 38 37 3 FOIE 85 OE STA PF1 i41 40 # OF PLAYERS (AT RIGHT) F020 DO E2 BNE SC0R3 ;44 43 43 42 § F022 CA DEX ;45 44_ F 023 10 DD BPL “ SC0R2 i48 47 46 X=$FF Y=0 i VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM CHECKERBOARD KERNEL - X=*FF Y=0 CARRY IS CLEAR => LAST SQUARES AT LEFT, NEXT SQUARES AT RIGHT. F025 A5 F3 LDA“~ COLSQ F027 85 02 STA WSYNC F029 85 07 STA C0LUP1 SET UP PI COLOR FOR TOP RIGHT OF TOP RIGHT SQUARE F02B ST 31 LDA Wl 75 8 CLOCK BALL, REFLECT PLAYFIELD r-02D 85 OA STA CTRLPF F02F 84 OE STY PF1 F031 84 IB GRPO F033 84 1C GRP 1 SET HORIZONTAL POSITION OF PLAYERS, MISSILE AND BALL LDA wro 19 2 TO RIGHT F037 85 24 STA HMBL F039 8A TXA 24 INIT MSB'S OF CHAR POINTERS FOR KERNEL T03A~“85 33~ STA 27 $FX — 1 TO RIGHT F03C 85 D9 STA F03E 85 11 STA f- 040 A2 06 LDX~ #6 ; 35 NOTE THAT RESET TAKES 4-6 CLOCKS • F042 86 04 STX NUSIZO i 38 3 COPIES OF PLAYER, MEDIUM SEPARATION F044 84 21 STY HMP1 ; 41 Y=0 i-046 85 10 STA RESPO i 44 POSITION PO (MUST OCCUR AT THIS TIME) • F048 A2 30 LDX #$30 ; 46 F04A 86 05 STX NUSIZ1 ,49 8 CLOCK MISSILE, 1 COPY OF PLAYER 0 F04C 85 DB STA PNTRl+1 ; 52 • F04E 85 DD STA PNTR2+1 ; 55 F050 85 DF STA PNTR3+1 f 58 F052” A9 ~10 LDA #$10 60 F T0~LEFT--- • 1 F054 85 20 STA HMPO 63 F056 85 14 STA RESBL 66 POSITION BALL (MUST OCCUR AT THIS TIME) F058 85 13 STA RESM1 69 POSITION MISSILE #1 0 F05A 85 02 STA WSYNC 72 0 F05C 85 2A STA HMOVE 3 MOVE OBJECTS A FEW CLOCKS FOR EXACT POSITIONING F05E A5 BA fLDA T8 CHANGE BK~~COLOR~ 0 1 F060 85 09 ISTA COLUBK IF B/W F062 85 02 STA WSYNC 12 F064 85 2B STA RM’CLR 3 0 F066 A9 CO LDA #$C0 5 F068 85 21 STA HMP 1 8 4 TO RIGHT F06A 85 20 3TA HMPO 11 } F06C AO IF LDY #35-4 13 START AT TOP LEFT OF BOARD — BQARD(31) TO BOAI DISPLAY NEXT ROW OF CHECKERS F06E F06E 84 EO ;16 25 _ “F070 A2 06 LT5X #3*2 i 18 27 SET UP COLORS AND GRAPHICS FOR 4 CHECKERS IN THIS ROW SET UP GRAPHICS IN RAM F07 2 F072 B? 80 00 LDA BOARD, Y F075 30”D9 BMI KRNlO f-077 95 D8 STA PNTRO,X 10 HUMAN PIECE OR EMPTY F079 A5 CE LDA COLPO 13 F07B 4C 86 FO ~K*N15 T6T vcs CHECKERS BY CAROL SHAW 5/15/80 9:41 AM F07E BO 50 LOOP 15 BCS i34 FOR L00P2 DELAY F080 KRN10 1080 29 7F AND #$7F >9 COMPUTER PIECE F-082 95 D8 STA~ PNTRO, X ; 13 F0B4 A5 CF LDA C0LP1 i 16 1086 ■-086 95 DO STA F088 C8 I NY F089 CA DEX •> FOSA CA DEX i 26 FOSB 10 E5 BPL >29 4*29-1 = 115 M. C. 'S <9 MIN = 18+115+3 = 136 = 76+60 MAX = 27+115+3 = 145 = 76+69 ■ IP PAL ;PUT TWO EXTRA LINES AT BOTTOM OF SQUARE IF PAL USR WAIT2 iDO 2 WSYNC'S. JSR & RTS EACH TAKE 6 MC'S $ . ENDIF FOOD 85 02 STA WSYNC ;3 F08F 85 2A STA HMOVE ;3 MOVE PLAYERS 4 MORE CLOCKS (RIGHT OR LEFT) ® ; SET UP BALL AND PLAYFIELD F091 BO 09 BCS K100 5 6 F093 38 SEC 7 CS => AT RIGHT f F094 A9 C3 LDA #*C3 9 PLAYFIELD 2 F096 A2 03 LDX #3 11 PF1 F098 AO 02 LDY #2 13 ENABLE BALL f F09A BO 06 BCS KUO 16 JMP F09C K100 “ ~ F09C 18 CLC 8 CC => AT LEFT < F09D A9 3C LDA #$3C 10 PLAYFIELD 2 F09F AA TAX 12 PF1 FOAO AO 00 LDY #0 14 DISABLE BALL F0A2 KUO F0A2 85 OF STA PF2 ; 19 17 F0A4 86 OE STX PF1 22 F0A6 84 IE STY ENAM1 25 !-0A8 84 IF STY ENABL 28 STA WSYNC 31 29 MOVE 4 MORE CLOCKS_ FOAA 85 02 STA HMOVE 3 ~ FOAC 85 2A .IF PAL PUT TWO EXTRA LINES AT BOTTOM OF SQUARE IF PAL JSR WAIT3 DO 3 WSYNC'5. JSR & RTS EACH TAKE 6 MC'S . ENDIF . IF PAL-1 WSYNC WAIT 1 MORE LINE FOAE 85 02 4 TO LEFT FOBO A9 40 F0B2 BO 02 4 TO RIGHT I-0B4 A9 CO F0B6 STA_ HMPO ; 9 8 F0B6 85 20 STA HMP1 i 12 11 FOBS 85 21 #LINCHR-1 ; 14 13 FOBA AO OF DISPLAY ONE ROW OF CHECKER BOARD DISPLAY NEXT TV LINE VCS CHECKERS BY CAROL SHAW 5/15/80 9: 41 AM FOBC L00P2 i'-OBC 85 02 STA WSYNC ; 16 15 72 76 0 WAIT FOR NEXT LINE FOBE A5 DO LDA COLO ;3 STORE COLOR AND GRAPHICS FOR LEFT CHECKER FOCO 85 07 STA C0LUP1 i 6 ____ F0C2 B1 D8 LDA (PNTRO),Y 5 11 F0C4 85 1C STA GRP 1 ; 14 F0C6 A5 D2 LDA C0L1 ; 17 STORE COLOR AND GRAPHICS FOR NEXT CHECKER F0C8 85 06 STA COLUPO ; 20 FOCA B1 DA LDA (PNTRl), Y i 25_ FOCC 85 IB STA GRPO ; 28 FOCE BO AE BCS LOOP15 i 30 31 4 EXTRA MACHINE CYCLES IF CARRY SET (SQUARES SHIFTED TO RIGHT) i-QDO L00P20 FODO A5 F3 LDA COLSQ i33 37 LOAD DARK SQUARE COLOR F0D2 85 07 STA C0LUP1 ,36 40__ F0D4 A6 D4 LDX C0L2 ;39 43 STORE COLOR & GRAPHICS FOR NEXT CHECKER F0D6 B1 DC LDA (PNTR2),Y ; 44 48 ____ T-0D8 86 06 STX COLUPO ;47 51 TIMING IS CRITICAL FROM HERE TO NEXT WSYNC FODA 85 IB STA GRPO ; 50 54 FODC A6 D6 LDX C0L3 ;53 57 STORE COLOR & GRAPHICS FOR RIGHT CHECKER FODE B1 DE LDA (PNTR3)» Y ; 58 62 FOEO 85 IB STA GRPO ; 61 65 F0E2 86 06 STX COLUPO ; 64 68 F0E4 88 DEY ; 66 70 IT00P2 ~ ; 69 73 "68 72 CONTINUE FOR REST OF LINES IN THIS ROW OF SQUARES MOVE TO RIGHT OR LEFT 16 CLOCKS FOR NEXT ROW__ (4 CLOCKS/MOVE * 4 MOVES) Y=$FF STA WSYNC i 71 75 F0E7 85 02 STA HMOVE ;3 EXECUTE MOVE F0E9 85 2A I NY 7 5 Y=0 FOEB C8 STY GRP 1 ; 8 FOEC 84 1C STY GRPO ; 11 5-0EE 84 IB STA WSYNC ; 14 0 FOFO 85 02 STA HMOVE ;3 MOVE SOME MORE F0F2 85 2A PHP i6 SAVE CARRY F0F4 08 F0F5 A5 EO LDA SQUARE ill “SUBTRACT 5 IF CARRY IS CLEAR (COMPENSATES FOR BOARD NUMBERING) F0F"7~E9 04 BBC “#4~” PLP ;15 RESTORE CARRY F0F9 28 TAY ; 17 FOFA A8 BMI FRAMLP i 19 FOFB 30 28 JMP LOOP 1 ;22 CONTINUE FOFD 4C 6E FO END OF KERNELS “ m VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM kr INITIALIZATION .r F100 F101 FI02 78 D8 A2 00 SEI CLD LDX #0 DISABLE INTERRUPTS BINARY ARITHMETIC F104 8A TXA FT05 95 00 I NLP STA" 0, X CLEAR HARDWARE REGISTERS AND RAM F107 ES INX F10S DO FB BNE I NLP F10A CA DEX $FF F10E 9A TXS INIT STACK PTR_ . IF PRNT STA PRFLG 0 — CLEAR PRINT FLAGS IF DEBUG STA PRDEP STA PRCNT .ENDIF F10C E6 BO INC GAMNO F10E AD 82 02 LDA SWCHB SAVE INITIAL PORT READING Fill 85 C2 STA OLDPBQ FI13 29 40 AND #$40 FI 15 85 EC STA 0LDPB6 FI 17 A2 30 LDX #$30 FI 19 86 18 STX AUDF1 FOR WIN SOUND_ TUB E8 INX“ F11C 86 OA STX CTRLPF $31: 8 CLOCK BALL, REFLECT PLAYFIELD FI IE A2 04 LDX #4 F120 “86 16 ~BT5T~ AUDC1 F122 20 82 F9 JSR RESET SET UP BOARD VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM END OF FRAME — RESTORE BOARD AFTER DISPLAY _FI 25 FRAMLP —jp- PAL ;TWO EXTRA LINES AT BOTTOM OF BOTTOM SQUARE IF PAL t JSR . ENDIF WAIT3 ;DO 3 WSYNC'S AND RETURN .IF PAL-1 F125 85 02 STA WSYNC iANOTHER LINE AT BOTTOM OF BOARD IF NOT PAL . ENDIF F127 A2 25 LDX ttOVRCON FI29 85 02 STA WSYNC F12B 8E 96 02 STX TIM64T iSET TIMER FOR OVER SCAN (? LINES) FI2ET ~A2~00 LDX” #0- FI30 86 OF STX PF2 iCLEAR PLAYFIELD FI32 86 OE _ STX PF1 FI 34 E6 C3 INC FRAME FI36 DO 08 BNE FRMLP2 FI 38 E6 EE INC ATIM F13A DO 04 BNE FRMLP2 F13C A9 00 LDA #0 iGO INTO ATTRACT F13E 85 EF STA GFLG2 FI 40 FRMLP2 FI 40" A5 E5 LDA MOVFLG FI 42 FO OA BEQ FRAM10 iNO COMPUTER MOVE COMPUTER MOVE- IS BEING DISPLAYED - RESTORE FI 44 18 CLC FI45 20 CE F9 JSR JMPSET ;CLEAR OUT JUMPED PIECES, IF ANY_ FI48 A6-ES -LDX-CURBC F14A A9 00 LDA #0 F14C 95 80 STA BOARD,X FI 4E FRAMTO F14E A6 E9 LDX MOVE ; "TO" FI50 A5 E4 LDA MOVVAL -STA-BOARD, X FI 54 A6 AB LDX CURSOR ; "FROM"__ F156“A5 A3 LDA-PIECE STA BOARD,X ;RESTORE CURRENT SQUARE FI 58 95 80 LDA ELNKTM iSTILL BLANKING AT END OF COMPUTER MOVE? FI5A A5 FO F15C DO 6F BNE BLKJMP ;YE5. SKIP __ LDA SWCHB ;NO. SAVE NEW CONSOLE SWITCH PORT VALUE F15E AD 82 02 TAX ~ ; IN OLDPBQ BUT DON'T CHANGE 0LDPB6 YET. F15T“AA F162 45 C2 EOR OLDPBQ FI64 86 C2 STX OLDPBQ BPL NOREV NO CHANGE IN BIT 7 OF OLDPBQ -FI 66 10-62 VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM J ; RIGHT DIFFICULTY SWITCH MOVED MEANS TO REVERSE BOARD (SWITCH SIDES) J ; MOVE CURSOR# FROMB# TOSQRB . FI68 A2 02 LDX #2 F16A A5 AD LDA_ TOSQRB F16C 30 07 BMI SW10 ;NO "TO" SQUARE F16E F16E A9 22 P170 38 SEC F171 F5 AB SBC CURSOR,X F173 95 AB STA CURSOR,X 1-175 F175 CA FI78 A9 22 LDA #34 jCHANGE CURSC, MOVE F17A 38 SEC ■ P17B E5 E8 SBC CURSC F17D 85 E8 STA CURSC F17F A9 22 LDA #34 I " F181~3B SEC FI82 E5 E9 SBC MOVE FI84 85 E9 STA MOVE SWITCH SIDES FOR EACH PIECE ON BOARD, PIECE Fl86 A2 23 LDX #34+1 FI 88 NORLP f, F188 B5 80 LDA BOARD,X FIBS F0~ 04 BEQ N0R05 F18C 49 80 EOR #$80 % F18E 95 80 STA BOARD, X -FT90 NOR 05 F190 CA DEX - • F191 10 F5 BPL NORLP FI93 A5 E4 ~ .— LDA MOWAL ; SWITCH MOWAL © BEQ N0R06 FI95 FO 04 FI97 49 80 EOR #$80 O FI99 85 E4 STA MOWAL ft F19B REVERSE BOARD F19B A2 10 LDX J i iO TO 16 (17 IS UNUSED), 18-34 F19D AO 00 LDY F19F J 4 LDA F19F B5 92 F1A1 48 PHA LDA BOARD,Y I F1A2 B9 80 00 I F1A5 95 92 STA BOARD+18,X F1A7 68 PiTAT F1A8 99 80 00 STA I) F1AB C8 I NY FIAC CA DEX F1AD 10 FO BPL BSWLP D F1AF 20 14 FB JSR SWIT ;REVERSE ACTIVE I-1B2 A5 B1 LDA COLHUM ,- SWITCH COLORS A F1B4 A6 B2 LDX COLCMP F1B6 86 B1 STX COLHUM ft VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM F1B8 85 B2 STA COLCMP F1BA A5 A9 LDA HPIECE iSWITCH HPIECE CPIECE F1BC A6 AA LDX CPIECE FI BE 86 A9 STX HPIECE F1C0 85 AA STA CPIECE F1C2 A5 AE LDA HKING iSWITCH HKING & CKING F1C4 A6 AF LDX CKING F1C6 86 AE STX HKING F1C8 85 AF STA CKING F1CA NOREV PICA 20 44 F9 JSR GSRST VC8 CHECKERS BY CAROL SHAW 5/15/80 9:41 AM BEGINNING OF FRAME — CHECK FOR SET UP MODE PI CD BLKJMP #3 ; B6=0 => DISABLE LATCHES. Bl = l => START VSYNC & VBLANK F1CF AE 84 02 OVSLP LDX INTIM ;WAIT FOR END OF OVERSCAN F1D2 DO FB BNE OVSLP START VERTICAL BLANK F1D4 85 02 STA WSYNC F1D6 85 00 STA VSYNC iSTART VERTICAL SYNC STA VBLANK FIDA 86 15 STX AUDCO ;N0 SOUND FI DC 85 OA STA CTRLPF pmc—Cjr;—- ;STORE 3 — SCORE. REFLECT PLAYFIELD » HJt 03 Ud STA WSYNC F1E0 85 02 STA WSYNC F1E2 AO 2C LDY ttVBLCON ;37 LINES F1E4 85 02 STA WSYNC F1E6 86 00 STX VSYNC ;END VERTICAL SYNC DO NOTHING F1F2 NOBL CHECK FOR SETUP MODE (LEFT PRO/AM SWITCH UP (=1)) F1F2 A5 C2 LDA OLDPBQ F1F4 A6 EC LDX 0LDPB6 F1F6 DO 67 BNE STUP25 F1F8 29 40 AND #$40 ;PREVIOUSLY IN NORMAL MODE . FIFA DO 4E BNE STUP10 STILL IN NORMAL MODE (NORMAL -> NORMAL) FTFC A5 E6 LDA WINSAV FIFE FO 13 BEQ COMPOS i NO WIN SUntUNt HAS WUIN- OUTPUT WINSOUND F200 A6 EF LDX GFLG2 F202 FO OC BEQ WIN70 ;ATTRACT MODE F204 C6 FI DEC SNDTIM F206 A6 FI LDX SNDTIM F208 86 EF STX GFLG2- 0=5 DONE WITH SOUND, DO ATTRACT — i F20A FO 02 BEQ WIN60 F20C A6 C3 LDX FRAME f'20E WIN60 -—..! F20E 86 1A STX AUDV1 F210 WIN70 F2T0 4C 66 F7 JMP CRSBLK -CHECK FOR COMPUTER OR HUMAN MOVE F213 COMPOS F213A6 BO LDX GAMNO F215 A5 F2 LDA FREEZE ; FREEZE DISPLAY AFTER MOVE'? F217 FO IF BEQ C0MP06 ;NO. CONTINUE F219 C6 F2 DEC FREEZE ;FREEZE OVER YET? F21B DO F3 BNE WIN70 ;NO. JMP CRSBLK F21D EO 10 CPX #PLAY2 I pif DO IB BNE C0MP07 VCCi CHECKERS BY CAROL SHAW 5/15/SO 9:41 AM 1-221 20 E8 F9 JMPWIN i-224 FO 64 STUP50 1-226 A5 AB- CURSOR F228 A6 E8 CURSC ; REVERSE COMPUTER AND HUMAN CURSORS F22A 85 E8 CUR SC F22C 86 AB CURSOR F22E B5 80 BOARD, X F230 85 A3 PIECE ! 232 20 E2 FA TOSET ;CLEAR TOSQRB, MOVFLG F235 4C D6 F7 ATTR10 F23S — F238 EO 10 #PLAY2 F23A FO 04 COMP 10 i 2-PLAYERJ5AME F23C F23C A6 BB LDX ACTIVE F23E 30 03 BMI CMPMVE ;COMPUTER'S MOVE_ i-240 F240 4C A7 F5 i2-PLAYER GAME OR HUMAN'S MOVE F243 F243 20 E8 F9 JSR JMPWIN ; SET UP MSTJMP, XMOVE, YMOVE, ETC. F246 FO 42 BEQ STUP50 ;GAME OVER — GOTO ATTR10 F248 DO 43 BNE COMPUT ,-JMP DEFINITELY DO COMPUTER'S MOVE CHANGE TO SETUP MODE < NORMAL -> SETUP) F24A STUP10 F24A 85 EC STA 0LDPB6 F24C 20 El FE USR MOVCLR ;SET MOVE TO OFF BOARD SQUARE F24F 20 F3 FA •JSR TONORM fNOT SOFT ATTRACT < RETURNS Y=$FF) F25284 A4 STY- JMPT i$FF — NO JUMPS FOR COMPUTER F254 20 E2 FA JSR TOSET iSET UP TOSQRB, MOVFLG, RETURN Y=0, EQ F257 84 1A STY AUDV1 iCLEAR WIN SOUND F259 84 E7 Si Y FROMTO F25B B4 A5 STY MSTJMP ;N0 JUMP ! 25D FO 04 BEG STUP30 ; JMP ; PREVIOUSLY IN SETUP MODE F25F STUP25 F25F 29 40 AND #$40 F26I 85 EC 0LDPB6 F 263 5TUP30 F263 20 FB FA JSR CRSTUP ;SET UP ACTIVE, COLHUM, COLCMP 1 F266 A6 AB cur CURSOR F268 B5 80 LDA BOARD,X iCURSOR SQUARE DETERMINES STARTING PLAYER AFTER SET UP F26A FO 04 BEQ STUP35 i UNLESS EMPTY— USE RIGHT DIFFICULTY SWITCH FROM CRSTUP F26C29 SO AND #$80 F26E 85 BB STA ACTIVE '•270 STUP35 F37U~fi3~U0 LDX #0 F272 86 E6 STX WINSAV F274 86 E5 STX MOVFLG ; NO COMPUTER MOVE F276 A6 EC VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM • r7 F278 DO C& BNE COMP 10 /GOTO NOCHCK IF STILL IN SETUP (NORMAL->SETUP OR SETUP->SETUP) ! OUT OF SETUP (SETUP -> NORMAL) *\ . IF PRNT JSR PRBRD i .ENDIF F27A 20 F3 FA JSR TQNORM » MAKE SURE WE'RE NOT IN ATTRACT MODE o F27D A6 BO LDX GAMNO F27F EO 10 CPX #PLAY2 iTWO-PLAYER GAME? :-28i FO 04 ' BEQ STUP49 ; YES. F283 A5 BB LDA ACTIVE ;NO. COMPUTER PLAYER? 1_ F285 30 03 BMI STUP50 ; YES. F287 STUP49” 11 F287 20 ES F9 JSR JMPWIN ;CHECK FOR JUMPS, MOVES, WINS FOR HUMAN PLAYER F28A STUP50 iSKIP THE REST UNTIL NEXT TIME VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM CALL ALPHA-BETA PRUNING ROUTINE THIS IS A "RECURSIVE" TREE SEARCH. TO SAVE SPACE/ THE STACK IS NOT USED. INSTEAD, THE ROUTINE RETURNS TO ABRET1 IF DEPTH=1 AND OTHERWISE RETURNS TO ITSELF. EVENTUALLY, WE WANT TO CHECK TO SEE IF THERE IS ONLY ONE POSSIBLE MOVE FIRST, FOR FASTER RESPONSE. F28D COMPUT F2SD A2 01 LDX #1 F28F 86 BC STX DEPTH ;START AT DEPTH=1 F291 86 DE STX ALPHAL+O F293 86 DF STX ALPHAL+1 F295 CA DEX i 0 F296 86 A6 STX MLTJMP iNOT MULTIPLE JUMP YET F29S 86 01 STX VBLANK ;MAKE SURE VBLANK IS OFF F29A 86 C4 STX PRNCNT ;CLEAR PRUNE FLAG AND BEST MOVE COUNTER F29C A9 80 LDA #$80 ;ALPHA(0) = ALPHA<1) = $8001 = -INFINITY F29E 85 EB STA ALPHAH+O F2A0 85 EC STA ALPHAH+1 F2A2 85 BF STA FRSMOV ;FIRST MOVE — NO BETTER MOVE YET IF RESET PRESSED THEN PICK OPENING MOVE AT RANDOM F2A4 A5 C2 LlJA OLDPBQ F2A6 6A ROR A RESET SWITCH PRESSED? F2A7 BO 13 BCS C0MPU2 NO. FZA9 A5C3 LDA FRAME YES. PICK FROM 7 OPENING MOVES F2AB 29 07 AND #7 AT RANDOM <22-19) IS TWICE AS LIKELY AS THE OTHERS). F2AD AA TAX F2AEBD6ETFF LDA FRSTAB,X F2B1 85 C5 STA JMPLST F2B3 29 3F AND #$3F F2B5 85 AC STA FROMB F2B7 85 ES STA CURSC F2B9 4C 5A F5 JMP NOJUMP ; JMP F2BC C0MPU2 VCS CHECKERS BY CAROL SHAW 5/15/SO 9:41 AM P2F0 AA TAX F2F1 A5 A5 LDA MSTJMP !-2F3 DO 33 BNE A JUMP ;MUST JUMP L VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM ; NO JUMP -- ORDINARY MOVE F2F5 B5 80 LDA BOARD, X IS "TO" SQUARE OCCUPIED? F2F7 DO 37 BNE C0NT2J YES. TRY NEXT OFFSET F2F9 86 AD STX TOSQRB NO. HAVE POTENTIAL MOVE F2FB 84 BE STY INDEX SAVE TO SQUARE AND INDEX 5-2FD A5 A3 LDA PIECE LOAD PIECE AND CHECK FOR NEW KING- P2FF 20 BC FE JSR KNGCK2 CHANGES A AND PIECE COUNT IF NEW KING F302 95 80 STA BOARD, X CHANGE TOSQR TO FROM SQUARE F304 A9 00 “IDA #0 !CLEAR FROM SQUARE F306 A6 AC LDX FROMB 1-308 95 80 STA BOARD, X F30A 20 CE FB JSR TERMNODE iCHECK FOR TERMINAL NODE F30D BO OC BCS TER ;YES. — TERMINAL NOT TERMINAL NODE — SAVE VARS. FOR THIS LEVEL !-30F A5 A3 LDA PIECE F311 29 30 AND #$30 ;BIT 5-4 INDICATES KING OR CHECKER F313 05 BE ORA INDEX ;BIT 1-0 IS MOVTAB INDEX (MSTJMP AND MLTJMP ARE O) F315 20 AF FE JSR SAVE1 ; SAVE OTHER, FROMT, INC DEPTH. RETURN X=DEPTH F31S 4C- 76 F3 JMP ALPJMP ________ J TER — ORDINARY MOVE — NOT JUMP — TERMINAL NODE F31B TER __. __ F31B 20 14 FB JSR SUIT i TAKE MOVE BACK ___ I-3IE 20 62 FB JSR RESTOR f-321 A9 00 LDA #0 > MAKE SURE MSTJMP IS CLEAR BECAUSE IF AT MAXMAX DEPTH, . i THEN TERMNODE MIGHT HAVE DETECTED JUMP. ,'•323 35 A5 3TA MSTJMP 1-325 4C 4A F4 JMP FINSH3 i CHECK NEW STATIC VALUE, POSSIBLY MODIFY ALPHA VCvS- CHECKERS BY CAROL SHAW 5/15/SO 9:41 AM ; AJUMP — MUST JUMP F328 AJUMP F32S B5 80 LDA BOARD,X F32A FO 04 BEG C0NT2J EMPTY— TRY NEXT OFFSET F32C 45 BB EOR ACTIVE F32E 30 03 _BMI_AJQ5_ F330 C0NT2J F330 4C D2 F4 JMP C0NT2 ;ACTIVE PLAYER — CAN'T JUMP OWN PIECE F333 AJ05 F333 86 BD STX JMPSGR iSAVE SQUARE WHICH WE ARE JUMPING OVER F335 20 C9 FA JSR 0NBRD2 ;ADD MOVTAB OFFSET. OFF BOARD? F338 BO F6 BCS C0NT2J ;YES. TRY NEXT OFFSET F33A AA TAX F33B B5 80 LDA BOARD,X F33D DO FI _BNE CPNT2J i TO SQUARE IS OCCUPIED — TRY NEXT OFFSET F33F 86 AD STX TOSQRB iSUCCESS — SAVE SQUARE F341 84 BE STY INDEX F343 A5 A3 ’LDA PIECE F345 20 DF FF JSR KNGCHK > IF NEW KING THEN SET CARRY, INC PIECE COUNT S< MODIFY MSTJMP F348 95 80 STA BOARD,X ;STORE IN TO SQUARE_ F34A A0 ~00 X.DY #cr~ iCLEAR FROM SQUARE F34C A6 AC LDX FROMB F34E 94 80 STY_BOARD, X F350 A6 BD LDX JMPSQR F352 B5 80 LDA BOARD,X F354 OA ASL A ;SAVE JUMPED PIECE_IN B7-6 F3550A- ASL W “ F356 05 BD ORA JMPSGR ; COMBINE WITH JUMP SQUARE F35S 85 BD STA JMPSGR “F35A“9'4”B0 sty-board; X ;CLEAR JUMP SQUARE F35C 20 51 FE JSR CHGCNT ; CHANGE PIECE COUNTS P35FA5A5 LDA MSTJMP ; MOST JUMP? F 361 FO 07 BEG MJ05 iNO — NEW KING MUST STOP — CHECK FOR NEW JUMP F363 A6 AD LDX TOSQRB T3S5rS0“2Dn=7Y "J5R" MOVCHK F368 90 22 BCC MJ08 ; ANOTHER JUMP FOR THIS PIECE VCH CHECKERS BY CAROL SHAW 5/15/30 9:41 AM e NEW KING OR END OF JUMP e F36A F36A A9 00 ;NOT MULTIPLE JUMP NEXT TIME F36C 85 A6 STA MLTJMP « F36E 20 CE FB JSR TERMNODE ; SWITCH PLAYERS --- CHECK FOR TERMINAL SET UP XMOVE, MSTJMP FOR NEXT LEVEL e 1-371 BO 14 BCS MJ07 ;TERMINAL NOT TERMINAL i-373 20 9F FE JSR JMPSAV ; INC DEPTH ST SAVE VARS RETURN X=NEW DEPTH e F376 LDA ALPHAL-2, X F376 B5 DC F37S95T5E STfT ALP HAL.. X e F37A B5 E9 LDA ALPHAH-2. X F37C 95 EB STA ALPHAH,X e F37E A9 00 LDA #0 F380 85 BF STA FRSMOV iNOT FIRST MOVE ~F382~S5-A5- MLTJMP e F384 4C BC F2 e F387 -F3S720'14FEF jsr —sarr iTERMINAL —SWITCH ACTIVE BACK F38A BO OF BCS MJl5 ; JMP ■t MULTIPLE JUMP — MSTJMP ALREADY SET F3BC F38C A9 08 LDA #MLT I STA MLTJMP F38E 85 A6 F390 20 14 FB JSR SRTT JSR ALP200 i CHECK FOR MAXMAXDEPTH • F393 F396 20 20 E5 FB 14 FB JSR SWIT_ ;OK - KEEP GOING F399 90 OD BCC ~"RJ20 STACK FULL — MUST STOP — UNDO JUMP F39B MJl 5 F39B A5 SD LDA JMPSGR F39D"29“3F “AND #$3F F39F AA TAX F3A0 A5 BD LDA JMPSGR RESTR5 i RESTORES MSTJMP; MLTJMP, ETC. F3A2 20 3C FB JSR F1NSH3 TCHECK NEW STATIC'VALUE F3A5 4C~4A~ F4~ JMP VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM SAVE VARS -- MULTIPLE JUMP NEXT TIME F3A8 MJ20 F3A8 20 9F FE JSR JMPSAV ; INC DEPTH & SAVE VARS (MSTFLG, MLTFLG, ETC. ) F3AB A5 BF LDA FRSMOV P-3AD 29 80 AND #$80 ; FIRST MOVE STAYS THE SAME, EXCEPT NO BETTER MOVE F3AF 85 BF STA “ FRSMOV F3B1 B5 DD LDA ALPHAL-1,X iUSE SAME ALPHA F3B3 95 DE ' STA ALPHAL, X F3B5 B5 EA LDA ALPHAH-1,X F3B7 95 EB STA_ ALPHAH, X F3B9 B5 DC LDA ALPHAL--2, X ;ALSO SAME BETA (PREVIOUS ALPHA) F3BB 95 DD STA ALPHAL-1,X -F3BD B5 E9 LDA ALPHAH-2, X F3BF 95 EA STA ALPHAH-1, X F3C1 4C BC F2 JMP ALPHBETA VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM RETURN FROM RECURSIVE ALFHBETA CALL RESTORE VARS F3C4 F3C4 C6 BC DEC DEPTH F3C6 A6 BC LDX DEPTH F3C8 B5 C7 LDA FROMT-1, 3 :-3CA 29 3F AND' "#$3F F3CC 85 AC STA FROMB F3CE B5 D2 LDA OTHER-1j I F3D0 29 08 AND #MLT F3D2 85 A8 STA MLTFLG F3D4 B5 D2 LDA OTHER-1, ! F3D6 29 04 "AND #MST F3D8 85 A7 STA MSTFLG F3DA B5 D2 LDA OTHER-1, ) F3DC 29 03~ AND #3 F3DE 85 BE STA INDEX F3E0A5 A7 "LDA" MSTFLG ;WAS MOVE A JMP? F3E2 DO 29 BNE WASJ i YES. NOT A JUMP F3E4 20 14 FB JSR SWIT ;SWITCH ACTIVE PLAYER -F3E7"A5 AB LDA MLTFLG ino: NOT JUMP F3E9 85 A6 STA MLTJMP F3EB A5 A7 LDA MSTFLG F3ED 85 A5 STA MSTJMP F3EF B5 D2 LDA OTHER-1, X ;SET UP PIECE F3F1 29 30 AND #$30 F3F3 05 BB ORA ACTIVE F3F5 85 A3 STA PIECE F3F7 B5 C7 LDA FROMT-1, F3F9 29 CO AND #$C0 F3FB 85 BF STA FRSMOV Hii F3FD A5 AC LDA FROMB F3FF”A4 BE LDY INDEX F401 18 CLC F402 79 66 FF ADC MOVTAB^ F405 85 AD STA TOSQRB F407 20 62 FB JSR RESTOR ; RESTORE SOME VARS BOARD F40A 4C 19 F4 JMP PRNJMP ; CLEAR PRUNE FLAG CHECK NEW VALUE AGAINST ALPHA WAS A JUMP F40D F40D A4 A6 LDY MLTJMP I-40F DO 10 BNE WASJ10 WAS NOT A MULTIPLE JUMP VCIi CHECKERS BY CAROL SHAW 5/15/80 9:41 AM I F411 20 14 FB JSR SWIT iSWITCH ACTIVE PLAYER F414 B5 C7 LDA FROMT-li X 1-416 20 TB FB JSR RESTR6 i SET UP FRSMOV,PIECE,MSTJMP, MLTJMP, RESTORE BOARD 1 F419 PRNJMP F419 06 C4 ASL PRNCNT _J CLEAR PRUNE FLAG WITHOUT DISTURBING COUNTER__ F41B 18 cue F41C 66 C4 ROR PRNCNT F41E 4C 4A F4 JMP FINSH3 ____I _ i NEXT LEVEL CONTINUED MULTIPLE JUMP — MOVE BETA & NEW ALPHA BACK F421 WASJ10 . IF PRNT _ LDA PRFLG AND #$80 iFLAG SET? BEQ SKIP 1 ; NO. TXA ;YES. SAVE X AND PRINT "MULTIPLE JUMP" MESSAGE PIHA _ LDA #MJ _ _ JSR BLECCH PLA ;RESTORE X TAX - ~ SKIP1 " . ENDIF LDA ALPHAL, )f ;MOVE BETA F423 95 DD STA ALPHAL—1,X F425 B5 EE LDA ALPHAH,X F427" 95EA "STB- ALPHAH-I, X F429 B5 EC LDA ALPHAH+1, X i MOVE ALPHA -F42B" 95 EB STA ALPHAH, X F42D B5 DF LDA ALPHAL+1,X F42F 95 DE STA ALPHAL,X LDA PRNCNT ;PRUNE? F431 A5 C4 BPL NEW50 ; NO. F433 10 06 RESTR4 >YES. LEAVE FRSMOV AS IS. RESTORE OTHER JUNK F435 20 IF FB JSR JMP ABD2 ; GOTO PRUNE__ F438 4C OA F5 - T-43B -NEW50 FRSMOV ;FIRST MOVE? (NEXT LEVEL) F43B 24 BF BIT BPL SKIP 2 ;NO. BETTER MOVE? F43D TO 05" ; NO. DON'T SAVE MOVE BUT RESTORE JUNK F43F 50 03 BVC SKIP2 MULTIPLE JUMP— FIRST MOVE & BETTER MOVE KEEP FRSMOV & BETTER MOVE FROM PREVIOUS LEVEL (BOTH SET) P441 WASJ17 F441 20 6A FE_ JSR JMPSV2 . IF PRNT LDA PRFLG ------AND" #$40 BEQ SKIP2 i "MULTIPLE JUMP - FIRST MOVE & BETTER ALPHA" LDA #MJBA -:--- JSR BLECCH VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM . ENDIF ~F444 [-44420 IF FB JSR RESTR4 • SET UP PIECE,MSTJMP,MLTJMP, RESTORE BOARD F447 4C DO F4 JMP CONTI ; SKIP ALPHA CHECKING AND DO NEXT INDEX s CHECKERS BV CAROL SHAW 5/15/80 9:41 AM CHECK NEW VALUE AGAINST ALPHA MAY BE STATIC VALUE OR VALUE PASSED BACK BY CALL TO NEXT DEPTH."-*" HUMAN PASSES UP -C/H, COMPUTER TRIES TO MAXIMIZE +C/H r 44A FINSH3 IF -ALPHA ALPHA(DEPTH) THEN HAVE BETTER ALPHA. I.E. IF ALPHA(DEPTH) + ALPHA(DEPTH+1) < 0 THEN HAVE BETTER ALPHA. J-44A A6 BC LDX DEPTH I 44C 24 BF BIT FRSMOV ;FIRST MOVE? I 44E 10 06 BPL NEW 10 ; NO. r 450 F6 DF INC ALPHALH-1, X ;YES. INCREASE -ALPHA BY 1 (TO MAKE RANDOMNESS WORK) I 452 DO 02 BNE NEW 10 1-454 F6 EC INC ALPHAH+1,X ;IF LSB WENT TO 0 THEN INC MSB f 456 NEW 10 I 456 B5 DE LDA ALPHAL,X 1-458 18 CLC r-459 75 DF ADC ALPHAL+1.X F45B 85 B3 STA TO JSAVE LSB F45D B5 EB LDA ALPHAH, X F45F 75 EC ADC " ALPHAH+1, X F461 50 02 BVC FH5 ; OVERFLOW? f 463 B5 EB LDA ALPHAH,X ;YES. OVERFLOW -- LOAD SIGN F465 FH5 f-465 30 34 BMI FH7 ; NEGATIVE «=»> HAVE BETTER ALPHA NEW VALUE IS THE SAME AS OLD ALPHA OR WORSE I 467 70 2F BVS FH6 ;OVERFLOW SET — NOT 0 — WORSE F469 DO 2D BNE FH6 ;MSB NOT 0 — WORSE I-46B 24 BF BIT FRSMOV »FIRST MOVE? f 46D 10 29 BPL FH6 j NO. FORGET THIS MOVE F46F A5 B3 LDA TO > NEW VALUE - ALPHA? BNE FH6 ;NO. FORGET THIS MOVE t-471 DO 25 . IF PRNT LDA PRFLG AND #*02 BEG SKIP7 LDY DEPTH CPY PRDEP BCS SKIP 7 (DON'T PRINT IF DEPTH>=PRDEP LDA #RAN ;"RANDOM" JSR 0UTAL3 LDX DEPTH SKIP7 . ENDIF LDA FRAME (SUM IS 0 — USE NEW VALUE AT "RANDOM" 1473 A5 C3 (MOVE OLD FRAME VALUE TO Y AND COMPUTE NEW VALUE TAY 1475 A8 BNE FRAQ F476 DO 04 LDA #$62 ;SET TO NEW VALUE IF 0 l 478 A9 62 8TA FRAME F47A 05 C3 VC8 CHECKERS BY CAROL SHAW 5/15/SO 9:41 AM F47C FRAG F47C 2A ROL A ;B7—> CARRY F47D 26 C3 ROL FRAME F47F 2A ROL A iOLD B6 -> CARRY F430 2A ROL A ;OLD B6—> BO f-481 29 01 AND #1 F483 45 C3 EOR FRAME F485 85 C3 STA FRAME F487 A5 C4 LDA PRNCNT ;LOAD COUNTER F489 29 7F AND #$7F iMASK OFF PRUNE FLAG F4SB C9 05 CMP ;EQUAL TO 5? F48D BO 02 BCS NEW40 iYES. LIMIT TO 5 F48F E6 C4 INC PRNCNT ; NO. INCREMENT EQUAL MOVE COUNTER NEW40 F491 AA TAX F492 98 TYA CMP RANTAB, X i IS RANDOM NUMBER < 1/2, 1/3, 1/4 ETC? F496 90 IF BCC FHQ • YES. KEEP MOVE NEW VALUE WAS THE SAME AND WE ARE NOT USING THIS MOVE OR NEW VALUE WAS WORSE THAN THE OLD ALPHA. F498 FH6 . IF PRNT LDA PRFLG AND #$20 BEG SKIP3 LDA #WA )"WORSE ALPHA" JSR BLECCH SKIP3 . ENDIF F498 4C DO F4 UMP CONTI IF ALPHA >= BETA THEN PRUNE TREE — OPPONENT WOULD NEVER LET US PICK THIS MOVE I. E. IF ALPHA(DEPTH) + ALPHA(DEPTH-1) >= 0 THEN PRUNE TREE BETA(DEPTH) = -ALPHA(DEPTH-1) F49B f-H7 NEGATE ALPHA+1 AND NUVE IU ALrHA (X=DEPTH ON INPUT) F49B A9 00 LDA #0 ;NEGATE AND MOVE NEW VALUE TO ALPHA F49D 38 SEC F49E F5 DF SBC ALPHAL+1,X F4A0 95 DE STA ALPHAL,X F4A2 A9 00 LDA #0 F4A4 F5 EC SBC ALPHAH+1,X | F4A6 95 EB STA ALPHAH,X F4A8 B5 DE LDA ALPHAL, X I-4AA 18 CLC F4AB 75 DD ADC ALPHAL-1,X F4AD B5 EB LDA ALPHAH.X F4AF 75 EA ADC ALPHAH-1,X :-4Bl 50 02 BVC FH20 F4B3 B5 EB LDA ALPHAH,X ;OVERFLOW — LOAD SIGN F4B5 !4B5 10 53 BPL ABD2 ;MOVE REJECTED => PRUNE VCH CHECKERS BY CAROL SHAW 5/15/80 9:41 AM BEST MOVE SO FAR - SAVE IN JMPLST IF FIRST MOVE. f RESULT OF ADDITION WAS NEGATIVE F4B7 FHQ F4B7 A5 BF LDA FRSMOV F4B9 09 40 ORA #$40 ;INDICATE BETTER MOVE F4BB 85 BF STA FRSMOV . IF PRNT BMI FHBLEC ;BRANCH IF FIRST MOVE LDA PRFLG AND #$10 BEQ SKIP4 LDA #BANFM ;"BETTER ALPHA - NOT FIRST MOVE" JSR BLECCH SKIP4 JMP CONTI . ENDIF F-4BD 10 11 BPL CONTI ;IF NOT DEBUG THEN BRANCH IF NOT FIRST MOVE F4BF FHBLEC F4BF A9 00 “EDA #0 ;FIRST MOVE => CLEAR PRUNE FLAG & COUNTER F4C1 85 C4 STA PRNCNT F4C3 A9 FF LDA #$FF FAC5 A6A5 LDX MSTJMP F4C7 FO 02 BEQ FH21 F4C9 A5 BC LDA DEPTH ; JUMP FHZ1 F4CB 85 A4 STA JMP I F4CD "20T 6A FET JSR JMPSV2 iSAVE MOVE IN JMPLST . IF PRNT LDA PRFLG AND #$08 BEQ SKIPS LDA #BAFM ;"BETTER ALPHA - FIRST MOVE" JSR BLECCH SKIP 5 . ENDIF VCH CHECKERS BY CAROL SHAW 5/15/80 9:41 AM ; TRY NEXT INDEX 1“ F4D0 CONTI • F4D0 A4 BE LDY INDEX TRY NEXT INDEX — Y=INDEX • F4D2 C0NT2 -F4D2 AS AC LDX FROMB F4D4 8S DEY • F4D5 30 OD BMI C0NT3 iDONE WITH THIS SQUARE I 4D7 CO 01 CRY #1 I _ F4D9 DO 06 BNE ALJ • P4DB B5 80 LDA BOARD,X _j I-4DD C9 10 CMP #HUMCHK iSTOP IF HUMAN CHECKER F4DF FO 03 BEQ C0NT3 c F4E1 ALJ _ F4E1 4C E7 F2 JMP ALP H10 ;CONTINUE f . TRY NEXT SQUARE - - X=SQUARE f F4E4 C0NT3 -F4E4 C6 Cl DEC TIMOUT ;TIME UP? F-4E6 DO 18 BNE AB30 ; NO. » F4E8 AD 82 02 LDA SWCHB -F4EB 29 ~0B AND #8 ;COLOR TV? F4ED DO 07 BNE AB10 i YES. f F4EF A5 BC LDA DEPTH ;NO. B/W — USE DEPTH TO SET LUMINANCE F4F1 OA ASL A F4F2 29 06 AND #6 € F4F4 10 08 BPL AB20 ; JMP m “F4F6 AE10~ F4F6 A5 BC LDA DEPTH ;COLOR TV A F4F8 F4F9 6A 6A ROR ROR ft F4FA 6A ROR A i in F4FB 6A ROR A _j F4FC 09 02 ORA #2 iSET LUMINANCE F4FE AB20 i F4FE 85 09 STA COLUBK ~ P500 AS30 1 F500 A5 A6 LDA MLTJMP " F502 DO 11 BNE ABDONE ;MULTIPLE JUMP => DONE (ONLY TRY ONE SQUARE) F504 CA DEX F505 30 OE BMI “ ABDONE ; SKIP JMP AL00P1 ;CONTINUE F507 4C D7 F2 # DONE WITH ALL SOU/NRES — RETURN F50A ABD2 . IF PRNT ;WE COME HERE FOR PRUNING LDA PRFLG AND #$04 BEQ SKIP6 LDA #PRUNE ; '‘PRUNE" JSR BLECCH SKIP6 .ENDIF VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM “ -- F50A 06 C4 ASL PRNCNT i SET PRUNE FLAG (FOR MULTIPLE JUMPS) F 50C 38 SECT F50D 66 C4 ROR PRNCNT F50F A5 BF LDA FRSMOV ;NOT BETTER MOVE «~511 29 80 AND #$80 F513 85 BF STA FRSMOV F515 ABDONE F 515 A5 BC LDA DEPTH F517 C9 01 CMP #1 F519 FO 03 BEQ ABRET1 iRETURN FOR DEPTH = 1 ! - 51B 4C C4 F3~ JMP ABRET2 ' /RETURN FOR DEPTH > 1 . SSlillll :, VCH CHECKERS BY CAROL SHAW 5/15/80 9:41 AM F51E F51E A5 C5 LDA JMPLST F520 29 3F AND #*3F iSTART SQUARE F522 85 AC STA FROMB F524 85 ES 1ST A CURSC F526 A6 A4 LDX JMPI F528 30 30 BMI NOJUMP F52A C6 A4 DEC iCHANGE 1-9 TO 0-8 (JMPLST INDEX) F52C 85 B3 STA F52E A9 00 LDA ;JUMPS F530 85 B4 STA T1 ;START WITH JMPLST+O F532 06 C5 ASL JMPLST F534 2A ROL F535 06 C5 ASL ; B7-6 = INDEX INTO MOVTAB F537 2A ROL TAY <3 F539 20 80 FB JSR JUMP1 ;SET UP JMPLST FOR FIRST JUMP F53C BO OE BCS JTHRU ; DONE f*53E A5 C7 LDA JMPLST+2 iMOVE 3RD BYTE TO END OF JMPLST TO SAVE IT °L F540 48 F541 A5 C6 F543 20 B 5 FB F546 68 PHA LDA JSR PLA JMPLST+1 JUMP 4 i2ND BYTE CONTAINS 4 MOVTAB TD0“4 JUMPS INDEXES <3 F547 BO 03 BCS JTHRU ;BRANCH IF THROUGH F54920B5FB JSR JQMP4 3 1 F54C JTHRU ~ F54C A6 AC' “LDX FROMB . » F54E F550 B5 48 80 LDA PHA BOARD, X F551 A9 00 LDA“ #0 ;CLEAR FROM SQUARE f ! F553 95 80 STA BOARD, X f-555 A5 B3 LDA TO ;TO SQUARE NO JUMP"-- JUST MAKE 1 MOVE A=START SQUARE FROM JMPLST F55A F55A AA TAX F55B B5 80 LDA BOARD, X F55D 48 PHA F55E A9 00 LDA #0 F560 95 80 STA BOARD, X F562 06 C5 ASL JMPLST s r-'564 2A “ROC F565 06 C5 ASL JMPLST F567 2A ROL TAY ' TOFFSET INDEX F568 A8 F569 8A TXA F56A 18 CLC ADC ;TO SQUARE I-56B 79 66 FF F56E !• 56E AA TAX f-56F 85 AD STA VCfi CHECKERS BY CAROL SHAW 5/15/80 9:41 AM F571 85 E9 STA MOVE 1-573 68 PLA ;PIECE BEING MOVED F574 20 BC FE JSR KNGCK2 CHANGE AND INCREMENT PIECE COUNT F577 95 80 STA BOARD/ X 1-579 85 E4 STA MOVVAL VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM RESTORE VARIABLES END OF COMPUTER MOVE F57B 20 8A F5 VSR RSV F57E A6 AB LDX CURSOR ; SET UP PIECE IN CASE CURSOR'S PIECE WAS JUMPED r-5B0 B5 80 LDA BOARD* X F582 85 A3 _ STA PIECE F584 20 E8 F9 USR JMPWIN ;CHECK FOR WIN F587 4C D6 F7 _UMP_ATTR10 F58A RSV F58A AD 82 02 " LDA SWCHB F58D RSV2 F58D 85 C2 STA OLDPBQ F58r29"^0 ANO #$40 F591 85 EC STA 0LDPB6 JSR TONORM ;MAKE SURE IN NORMALMODE, Y<-$FF T^93“20~F3~FA I NY ; 0 F596 C8 STY MLTJMP ;NOT MULTIPLE JUMP CONTINUATION T-597 84 A6 —-STY ACTIVE -; HUMAN IS ACTIVE P599 84 BE STY FRQMTO i“FROM" F59B 84 E7 STY ILEGAL ; NOT ILLEGAL MOVE F59D 84 ED STY WINSAV ;NOWTN T^9F~8 STY FREEZE ;NO FREEZE F5A1 84 F2 I NY i 1 F5A3 C8 ;DISPLAY COMPUTER'S MOVE F5A4 W4 E5— -~-“STY MOVFLG . IF PRNT USR PRMOVE ;PRINT MOVE ON TI .ENDIF F5A6 60 RTS _ VCS- CHECKERS BY CAROL SHAW 5/15/80 9:41 AM CHECK “JOYSTICK BUTTON — SET UP MODE?" IS RIGHT JOYSTICK BUTTON PUSHED? TJ0Y2" PASK YES. INPUT PRFLG FROM TI . ENDIF F5A7 A5 EC LDA 0LDPB6 "HjA? FO 51 Teo-jo y i i F5AB A5 3C LDA INPT4 ;SETUP MODE: CHECK PUSHBUTTON F5AD 10 04 BPL _J0Y3 BUTTON NOT PRESSED F5AF 18 » ALWAYS USE PO'S JOYSTICK IN SETUP F5B0 4C D7 F6 BNEO ; UNCOND JMP FSB3 A5 C3 LDA FRAME ;BUTTON IS PUSHED FSB5 29 IF AND #$1F ;MOVE ONLY ON CERTAIN FRAMES F5B7”DCr57 BNE JOYlil ;GOTO CRSBLK F5B9 A5 A3 LDA PIECE iALTERNATE BETWEEN COMPUTER & HUMAN CHECKER, COMPUTER & HUMAN KING, & SPACE F5BB A2 04 LDX #4 F5BD DD 4E FF NXTAB,X FIND CURRENT SQUARE CONTENTS IN TABLE F5C0 FO 03 J0Y9 FOUND F5C2 CA uumroND F5C3 10 F8 CONTINUE .IF PRNT 3 LDA #$FF STA PRFLG JSR ;PRINT ERROR MESSAGE ON TI 9 JMP /ERROR (SHOULD NEVER OCCUR) 7SNDTF 3 " F5C5 A5 A9 iMODIFY”PrECE COUNT TO REFLECT CHANGE F5C7 18 CLC * F5C8 7D 3E FF ADC HTAB,X F5CB 85 A9~~ STA HPIECET F5CD A5 AA LDA CPIECE F5CF 18 CLC F5D0^77B"4D~FF'~ ADC” ”CTASrX~ F5D3 85 AA STA CPIECE ♦ ” F5D5 A5 "AE LDA ~ /MODIFY KING COUNT TO REFLECT CHANGE F5D7 18 CLC 9 ADC HKTAB/ X F5D8 7D 43 FF F5DB 85 AE "STA HKING F5DD A5 AF LDA CKING l F5DF 18 CLC ~ ^F5F(D”7D”45”FF ADC “CKTAB7X F5E3 85 AF STA CKING F5E5 DA DEX iTAKE PREVIOUS ENTRY FROM TABLE VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM F5E6 10 02 BPL JOY 10 F5E8 A2 04 LDX #4 0 GOES TO 4 F5EA JOY 10 F5EA BD 4E FF LDA NXTABiX LOAD NEXT SQUARE VALUE F5ED A6 AB LDX CURSOR F5EF 20 BC FE JSR KNGCK2 MUST HAVE KING IF' LAST ROW F5F2 85 A3 STA PIECE F-5F4 95 80 STA BOARD/ X r-5F6 20 F3 FA JSR TONORM F5F9 4C CA F6 JMP J0Y81 VCJ-> CHECKERS BY CAROL SHAW 5/15/80 9:41 AM CHECK JOYSTICK BUTTON — NOT SET UP MODE F5FC JOY 11 FSFCrA5 BE LDA ACTIVE F5FE OA ASL A F5FF 2A ROL A F600 A8 TAY > Y=0 IF ACTIVE=0» 1 IF ACTIVE =$80 F601 B9 3C 00 LDA INPT4.Y i IF BUTTON PRESSED THEN DROP PIECE IF LEGAL F604 A8 TAY- F605 45 EA EOR OLDINP F607 30 IB BMI NOCHDO F609 98 TYA ;N0 CHANGE IN PUSHBUTTON T-60A 30 07 BMI JPM05 I NOT PRESSED F60C A5 ED LDA ILEGAL iBUTTON PRESSED f-60E DO 57 BNE J0Y20 iILLEGAL NOISE SOUND F610 4C 66 F7 JOY111 JMP CRSBLK jOK— wait for letup F613 JPM05 F613 A5 ED LDA ILEGAL iJOYSTICK MOVEMENT ERROR? F615 10 06 BPL JPM06 » NO. F617 A5 BB LDA ACTIVE >SET UP CARRY TO INDICATE PLAYER F619 2A ROL A F61A 4C DD F6 JMP MOVE12 )YES. CHECK JOYSTICK MOTION F61D JPM06 F61D A9 00 LDA BO ; OK F61F 85 ED STA ILEGAL F621 JPM10 F621 4C D4 F6 JMP MOVE10 .CHECK JOYSTICK F624 NOCHDO F624 84 EA STY OLDINP ;STORE NEW BUTTON READING _ F626 98 -TYA--- F627 30 F8 BMI JPM10 l NOT PRESSED BUTTON JUST PRESSED F629 A5 E7 LDA FROMTO F62B DO 46 BNE T010 i TO__ FROM T62D 20 E2 FA JSR TOSET i DON'T DISPLAY COMPUTER'S MOVE, SET UP TOSQRB F630 A6 AB LDX CURSOR T632 20 2D FA JSR MOVCHK f-635 90 06 BCC FR0M10 I CAN JUMP F637 FO IF BEQ J0Y12 CAN'T MOVE 1-639 A5 A5 LDA MSTJMP J MUST JUMP? F63B DO IB BNE 30Y12"' iYES, NOT LEGAL PIECE TO PICK UP F63D FR0M10 I-63D E6 E7 INC FROMTO iCAN MOVE - DO TO NEXT F63F A6 AB LDX CURSOR f-641 86 E9 STX MOVE F643 B5 BO LDA-BOARD, X" 1645 85 A3 STA PIECE F647 85 E4 STA MOVVAL F649 A9 00 LDA #0 F64B 85 A6 STA MLTJMP i NO MULTIPLE JUMPS YET F64D 20 F3 FA JSR TONORM F650 A9 30 LDA #PICKUP F652 20 EB FF JSR SOUND1 f-655 4C D6 F7 JMP ATTR10 MAKE NOISE F658 JOY 12 F65S A9 01 —£ ° rr LDA #1 J0V13T F65A 85 ED 1 0 F65C 20 F3 FA ' ILLEGAL M0VE NOISE WILL CONTINUE UNTIL BUTTON IS RELEASED I OSR TONORM F65FA5 A5 d F661 F0 04 1 • BEQ J0Y20 ~ ~ — - F663 A9 BB LDA #JP r-665 85 AD F667 J0Y20 1 * F667 A9 30 LDA #$30 !-669 A2 08 ~ iAUDFO F66B AO OF ; AUDVO ---__ 1 0 ldy #errsnd ;AUDCO F66D 20 EF FF JSR S0UND3 'IMP CRSBLK — m -1 _1_"TO11 MODE 0 F673 -1 T010 F673 A6 AB LDX CURSOR ;FROM SQUARE F675 AF 00- F677 95 80 STA BOARD,X i# r F679 E4 E9 _CPX MOVE jpEg ; FROM SQUARE = TO SQUARE'? i NO. .... •.—9-I- » F67D A4 A6 LDY MLTJMP ;YES. MULTIPLE JUMP? F67F DO D7 BNE J0Y12 PTTO'i • oo l nn—nir—crnr- c.\J JJt. rfc. ;YES. MUST MOVE THIS PIECE TO CONTINUE MULTIPLE JUMP JSR TOMOV" i SET" UP TOSQRB, CLEAR MOVFLG. RETURN TO "FROM” SQUARE -- CLEAR~MOVE 9 F6B4 F686 A5 A3 95 80 LDA STA PIECE BOARD, X 11 irrz.dg ODD a ho nr- L-Pi HLt p* ' JMP J0Y81 iWAIT FOR SAME PLAYER~TOMdVE AGAIN- 3 F68B T011 F68B A4 A5 LDY MSTJMP ;MUST JUMP? fTAan t:n io HJEQ T050 i NCT SKIP i 1 —------ m- L JUMP CHANGE OPPONENT'S PIECE COUNT — REMOVE JUMPED PIECE F68F F690 8A A4 BE TXA LDY INDEX ; CURSOR n i-dYc' OLC F693 79 66 FF ADC MOVTAB,Y F696 AA TAX F697 B5 80 LDA BOARDTJT ; LOAD JUMPED PIECE _ F699 F69B AO 00 94HBO LDY sty #0 board,x ; REMOVE JUMPED PIECE FROM BOARD F69D OA ASL A i SHIFT KING BIT TO MSB F69E OA ASL A r~~ F69F F6A2 20 51 FE 20 D1 FF JSR JSR CHGCNT TOSUB ;CHANGE OPPONENT'S PIECE COUNT 0 => CONTINUE JUMPING F6B6 DO 16 BNE J0Y90 ; JMP F6B8 T050 F6BS 20 D1 FF JSR TOSUB — ; DO STUFF WITH MOVE S< PIECE INCLUDING KING CHECK & STORE F6BB T051 . IF PRNT JSR PRM0V2 . ENDIF ' L>/ F6BB F6BD 86 AB 20 F3 FA STX CURSOR JSR TONORM ;RETURNS Y=$FF F6C0 C8 I NY i 0 F6C1 84 A5 STY MSTJMP ;CLEAR MSTJMP F6C3 20 14 FB JSR SWIT iREVERSE ACTIVE PLAYER F6C6 A9 2D LDA #FRZTIM ;SET FREEZE TIMER F6C8 85 F2 STA FREEZE BRANCH HERE FROM SETUP MODE WHEN PUSHBUTTON PUSHED BRANCH HERE FROM CASE WHERE PIECE IS RETURNED TO STARTING F6CA J0Y81 F6CA A9 00 LDA #0 F6CC 85 E7 STA FROMTO TDCTFRUFTNEXT-——- F6CE J0Y90 F6CE 20 E9 FF JSR SOUNDO .PIECE DROPPING SOUND F6D1 4C D6 F7 ‘ JMP ATTR10 CHECKERS BY CAROL SHAW 5/15/80 9:41 AM F6D4 CHECK FOR JOYSTICK MOVEMENT EVERY FEW FRAMES I-6D4 A5 BB LDA active F6D6 2A ;MOVE BIT 7 OF ACTIVE TO BIT 1 OF Y ROL A ;SET CARRY IF PLAYER 1 BRANCH HERE FROM SETUP WITH Y=0 CC => PLAYER 0 I-6D7 _BNEO F6D7 7)5 C3 LDA FRAME F6D9 29 IF AND #$ IF F6DB DO 27 BNE M0VE36 iDON'T MOVE THIS FRAME F6DD AD SO 02 LDA SWCHA 1 F6E0 BO 04 ___ BCS M0VE20 ,-CHECK CARRY BIT (SET UP PREVIOUSLY) LSR A i PO F6E3 4A LSR A F6E4 4A 1 LSR A F6E6 M0VE20 ' Hg m gc a g “] F6E6 29 OF AND #»F #$F iIS JOYSTICK CENTERED? BEQ M0VE36 ;YES. SKIP iJOYSTICK IS NOT CENTERED F-6EC M0VE2S F6EC 20 F3 FA JSR TONORM F6EF A6 E9 LDX MOVE ; TO MODE F6F1 A4 E7 LDY FROMTO ;FROM? F6F3 VO 05 BlNiET M0VE29 i NO. TO (-6F5 20 DE FE JSR TOMOV ;SET UP TOSQRB, CLEAR MOVFLG. RETURN TO "FROM" SQUARE — CLEAR MOVE F6F8 A6 AB CD)T CURSOR F6FA M0VE29 F6FA AO 03 LDY #3 ;CHECK FOR DIAGONAL MOVEMENT F6FC M2SLP F6FC D9 62 FF CMP JOYTAB, Y F6FF FO 06- BEQ M0VE37 ;DIAGONAL FOUND F701 88 DEY F702 10 F8 BPL M28LP iCONTINUE ~F704 M0VE36 F704 4C 62 F7 JMP FRM30 ;NOT DIAGONAL —NO SOUND ; DIAGONAL MOVEMENT F707 M0VE37 F707 20 C9 FA JSR 0NBRD2 ; COMPUTE MOVE SQUARE. OFF BOARD? F70A 90 05 BCC MOVE50 ; NO. OK F70C MDVE40 F70C A9 80 LDA #$80 ;INDICATE JOYSTICK ILLEGAL MOVE F70E 4C 5A F6 JOY 13 ; ERROR F711 M0VE50 F711 AA TAX — LDA FROMTO ;FROM? “ F7I2r_A5~E7 BNE FRM10 ; NO. TO 1-714 DO 09 LDA BOARD,X YES. FROM F716 B5 80 !-718 85 A3 BTA PIECE F71A 86 AB STX CURSOR JMP FRM20 ; JMP F71C 4C 5B F7 F71F FRM10 VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM F71F A5 A5 LDA MSTJMP MUST JUMP? F721 FO OE BEQ M0VE60 NO. ' F723 B5 80 LDA BOARD,X YES. SQUARE EMPTY? F725 FO E5 BEQ M0VE40 YES. ERROR F727 45 BB EOR ACTIVE NO. OPPONENT'S PIECE? 1-729 10 El BPL M0VE40 NO. ERROR F72B 20 C9 FA JSR 0NBRD2 ;YES. MOVE TO NEXT SQUARE. OFF BOARD? F72E BO DC BCS M0VE40 ; YES. ERROR F730 AA TAX F731 M0VE60 f-731 E4 AB CPX CURSOR RETURN TO FROM SQUARE? 1-733 FO 1C BEQ FRM15 YES. OK P'735 A5 E9 LDA MOVE ALREADY MOVED? F737 C5 AB CMP CURSOR BNE M0VE40 YES. CAN'T MOVE PIECE AGAIN (EXCEPT TO FROM SQUARE) 1-739 DO D1 F73B B5 80 LDA BOARD,X EMPTY? 1-73D DO CD BNE M0VE40 NO. ERROR __ F73F A5 A3 LDA PIECE YES. LEGAL MOVE DIRECTION? 1-T41 C9 10 CMP #HUMCHK HUMAN CHECKER (NOT KING)? F743 DO 04 BNE M0VE70 NO. ___ F745 CO 02 CPY #2 YES. LEGAL? F747 90 C3 BCC M0VE40 i NO. ERROR F749 M0VE70 CMP #CMPCHK /RIGHT PLAYER CHECKER (NOT KING)? "F749 C9 90 BNE FRM15 ; NO. SKIP F74B DO 04 CPY #2 i YES. LEGAL?______________-_ F74D CO 02 BCS M0VE40 /NO. ERROR 1-74F BO BB F751 FRM15 F751 B5 80 LDA BOARD,X _ STA ROWAL F753 85 E4 F755 86 E9 STX MOVE STX TOSQRB F757 86 AD -F75984BE STY INDEX F75B _ FRM20 #$30 SET UP FOR MOVE SOUND — LOAD AUDFO LDA LDY #14 AUDCO F75D AO OE S0UND2 USE MAX VOLUME — CALL SOUND ROUTINE 1-75F 20 ED FF JSR 1-762 FRM30 LDA #0 F762 A9 00 ILEGAL ;CLEAR ILLEGAL MOVE FLAG F764 85 ED STA VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM SET UP CURSOR, MOVE, JMP DISPLAY ! • F766 j F766 A5 C3 LDA FRAME F768 29 10 AND #$10 i F76A DO 27 BNE CRSB10 F76C A5 E5 MOVFLG F76E FO 66 ATTR10 * ~T770~3S SEC~ DISPLAY COMPUTER MOVE F771 20 CE F9 JSR JMPSET DISPLAY ANY JUMPED PIECES F774 A6 E8 LDX CURSC COMPUTER CURSOR__ F776" A9~B 0 ~CDfi~ #CMPCRS F778 95 80 STA BOARD, X F77A A6 E9 LDX MOVE ;DON'T SHOW COMPUTER'S NEW LOC F77C A9 00- LDA #0 F77E 95 80 STA BOARD, X F780 A6 AB"“ “T-05T“ CURSOR F782 E4 E9 CPX MOVE HUMAN CURSOR V. COMPUTER MOVE IN SAME SQUARE? F784 DO 50 BNE ATTR10 NO _________ .J F7B6 A9 30 " TDA- #HUMCRS YES. DISPLAY HUMAN CURSOR NOW F788 A4 BB LDY ACTIVE F7SA 10 02 BPL CRSB03 ~F78CA9~B0 LDA #CMPCRS F78E F78E 95 ! STA BOARD, X F790 4C“ D6 F7 JMP ; JMP F793 F79S AS E6 -LDA WINSAV F795 FO OC BEQ CRSB13 F797 AS“E5“ LDA MOVFLG F799 FO 22 BEQ CRSB17 F79B A6 E8 LDX CURSC ;COMPUTER HAS WON -- DISPLAY ITS CURSOR F /VI) A9 BO LDA #CMPCRS F79F 95 80 STA BOARD, X P7A1 DO 1A BNE CRSB17 i JMP__ F7A3 CRSB13 i A6 AB LDX CURSOR ;HUMAN CURSOR F7A3 F7A5 A9 00 LDA #0 A4 F2 LDY FREEZE ; FREEZE LAST MOVE? F7A7 F7A9 DO 10 BNE CRSB15 i YES. DON'T DISPLAY CURSOR OR PIECE — PIECE WILL BLINK F7AB A5 E5 LDA MOVFLG ;COMPUTER MOVE BEING DISPLAYED? FTAD FO 04 BEQ CRSB14 ; NO. OK F7AF E4 E9 CPX MOVE ; HUMAN CURSOR ?, COMPUTER MOVE ON SAME SQUARE?_ .. : - F7B1 FO OA BEQ CRSB17 ;YES. DON'T DISPLAY HUMAN CURSOR NOW F7B3 CRSB14 F7B3 A9 30 LDA #HUMCRS_ -F7B5 A4 BE LDY ACTIVE F7B7 10 02 BPL CRSB15 A9 BO LDA #CMPCRS ;RIGHT PLAYER (PI) IS ACTIVE F7B9 F7BB CRSB15 F7BB 95 80 STA BOARD,X f F7BD^ CR5B17 F7BD A5 E7 LDA FROMTO BEQ ATTR10 ;FROM (MAY BE DISPLAYING COMPUTER MOVE) F7BF FO 15 LDX MOVE ; TO FTC 1 A6 E9 9CS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM T-7C3 A4 A3 LDY PIECE F7C5 C4 E4 CPY MQWAL i DOES PIECE = MOWAL? F7C7 DO OB BNE CRSB20 i NO. SKIP F7C9 A5 C3 LDA FRAME i YES. ONLY DISPLAY PIECE ON XXX10100 XXX11011 F7CB 6A ROR A i WHEN B2 & B3 ARE DIFFERENT. F7CC 45 C3 EOR FRAME F7CE 29 04 AND #4 f 7D0 DO 02 BNE CRSB20 F7D2 AO 00 LDY 40 I-7D4 CRSB20 J-7D4 94 80 STY BOARD. X VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM © LOAD RAM TABLE OF GRAPHICS FOR SCORE KERNEL < F7D6 ATTR10 F7D6 AO 01 LDY #1 ONE PLAYER F7D8 A6 BO LDX GAMNO ( F7DA 86 F6 STX SCPO F7DC EO TO CPX 4PLAY2 F7DE DO 01 BNE ATTR20 F7E0 C8 I NY i2-PLAYER GAME ~ F7E1 ~ ATTR20 F7E1 84 F7 STY SCP1 P7E3 A5 F2 LDA FREEZE ;FREEZE? F7E5 DO OD BNE ATTR35 ;YES. SKIP — DON'T CHANGE FROM F7E7 A6 AB LDX CURSOR -F7E9 A5 E5 LDA MOVFLG ;COMPUTER MOVE DISPLAY? F7EB FO 02 BEQ ATTR30 i NO. F7ED A6 AC LDX FROMB ;YES. USE FROMB F7EF ATTR30 F7EF 20 8D FA USR IEDSP F7F2 85 F4 STA FROM ;CONVERT BINARY TO BCD F7F4 ATTR35 F7F4 A6 AD LDX TOSQRB F7F6 20 8D FA JSR IEDSP F7F9 85 F5 STA TOSQR 1 BASED ON VCS BASKETBALL BY AL MILLER (WITH EOR IMPROVEMENT A LA COIN-OP) -F7FB A2 00 LDX #0 STX T4+1 ;INITIALIZE HIGH BYTE INDIRECT POINTER F7FD 86 CF F7FF A9 FF LDA #SCRTBL/256 !-801 85 ~B4 ST A TO+l F803 85 B6 STA T2+1 F805 A9 E4 LDA #5*4+SCRLP0 F807 A2 03 LDX #3 F809 LODRAM ' F809 38 " SEC F80A E9 05 SBC #5 F80C 85 CE STA T4 LDA~ FROM, X ; GET LOW ORDER DIGIT F80E B5 F4 F810 29 OF AND #$0F F812 85 B5 STA T2 -FBI4 OA ASL S' A ; SHIFT LEFT AND CLEAR CARRY F815 OA ASL FBI6 65 B5 ADC T2 _ ;five TIMES LOW DIGIT #SCRTBL&$FF ;ADD IN BEGINNING OF GRAPHICS 'TABLE FBI8 69 8C ADCT ;STORE IN LOW BYTE OF INDIRECT POINTER FBIA B5 B3 STA TO F81C B5 F4 ; LDA FROM, X ;GET HIGH ORDER DIGIT F81E 29 FO AND #*F0 F820 4A LSR A g ;SHIFT RIGHT AND CLEAR CARRY F821 4A LSR A F822 85 B5 STA T2 P824 4A LSR A FB25 4A LSR A iFIVE TIMES HIGH ORDER DIGIT P826 65 B5 ;ADD IN BEGINNING OF GRAPHICS TABLE ADC #SCRTBL?<$FF PS28 69 8C #1 VC(S CHECKERS BY CAROL SHAW 5/15/80 9:41 AM F82A 85 B5 STA T2 ) STORE IN LOW BYTE OF INDIRECT POINTER F-B2C AO 04 LDY *4 F82E HIDIGT FB2E B1 B3 LDA (TO),Y F830 51 B5 EOR < T2)/Y /TAKE UPPER NIBBLE FROM T2, LOWER FROM FS32 29 OF AND #$0F F834 51 B5 EOR 2 CLOCK MISSILE/ DOUBLE SIZE PLAYERS (1 COPY) 1-853 85 05 STA NUSIZ1 F855 A9 FO LDA #$F0 ;1 TO RIGHT F857 85 20 STA HMPO 1-859 A9 30 LDA #$30 ;3 TO LEFT F85B 85 21 STA HMP1 F85D A9 CO LDA #$C0 f 4 TO RIGHT F85F 85 22 STA RMMO F861 85 02 STA WSYNC F863 AO 08 LDY~ #8 8*5+1 = 41 MACHINE CYCLES FS65 88 WSLP DEY WARNING — MUST NOT CROSS PAGE BOUNDARY F866 DO FD BNE WSLP DELAY F868 85 1^> STA RESPO 44 F86A EA NOP 46 DELAY F86E 85 12 STA RESMO 49 FS6D 85 11 STA RESP1 52 F86F 85 02 STA WSYNC F871 85 2A STA HMOVE VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM ; SET UP ATTRACT IF NECESSARY F873 A2 00 LDX iO IF NOT ATTRACT F875 A5 C2 LDA OLDPBQ F877 29 08 AND #$08 ; B/W? F879 DO 3E BNE QQ30 ;N0. COLOR — SKIP F87B A9 OF LDA #$0F jYES. _____ F87D A4 EF LDY GFLG2 7 ATTRACT? F87F DO 04 BNE QQ10 i NO. SKIP F881 A6 EE LDX ATIM ; YES. USE ATTRACT TIMER TO CHANGE LUMS '•883 A9 07 LDA #$07 iMASK OFF COLOR BITS F885 QQ10 F885 85 B3 STA TO ;SAVE MASK F887 8A TXA . F888 49 06 EOR #$06 ;DARK SQUARE COLOR F88A 25 B3 AND TO FBSC 85 F3 “ STA COLSQ F88E 85 08 STA COLUPF F890 85 09 STA CQLUBK ;USE THIS FOR BK COLOR FOR SCORE F892 8A TXA F893 49 OA EOR #$0A iLIGHT SQUARE COLOR F895 25 B3 AND FS97 85 BA STA F899 8A TXA F89A 49 OC EOR ;LIGHT CHECKER COLOR r-89c 25 b3 And F89E 85 CF STA ;ASSUME COMPUTER (PI) IS LIGHT F8A0 8A TXA F8A1 25 B3 0 —For AND #$00 TO ;ASSUME HUMAN IS DARK F8A3 85 CE STA COLPO F8A5 ~ A"4 131 -LDY COLHUM F8A7 CO 36 CPY #DARK ;IS HUMAN DARK? F8A9 FO 07 BEQ QQ20 ; YES. SKIP FBAB“A4 CF —Lirr C0LF1 ; NO. SWITCH F8AD 84 CE STY COLPO F8AF 85 CF STA C0LP1 F8B198 —TYfi F8B2 F8B2 85 06 STA ;STORE HUMAN COLOR FOR SCORE FBB4 85 07 STA COLUPT- E F8B6 4C OF F9 JMP QQ50 F8B9 FBB9A9FF ~LDA“ #$FF F8BB A4 EF LDY GFLG2 ;ATTRACT? F8BD DO 09 BNE 0040 ; NO. SKIP _ F8EF~A5“~EE“ “LBAT“ “ATTM TYESr ROTATE SO COLORS SHIFT QUICKLY F8C1 2A ROL F8C2 2A ROL F8CT2A “ROL F8C4 2A ROL F8C 5 AA TAX _F8C6~A9“F?~ ~TBA~~ ;MASK OFF HI BIT OF LUM IN ATTRACT F8C8 F8C8 85 B3 STA I-8CA 8A TXA~ iis HUMAN DARK? »YES. SKIP iHUMAN IS LIGHT — SO IS SCORE COLOR ;USE DIFFERENT COLORS FOR HARD GAMES ;DARK SQUARE COLOR lSET UP PLAYFIELD COLOR iATTRACT? iJMO. ;YES. USE DIF COLORS ;LIGHT SQUARE COLOR AND BK ; SOMEONE HAS WON ; TURN OFF REMAINING PLAYER'S PIECES EVERY FEW FRAMES BY SETTING TO PF COLOR. ;HUMAN CAN'T MOVE —TURN OFF COMPUTER i JMP ;COMPUTER CAN'T MOVE — TURN OFF HUMAN # VCS CHECKERS BY CAROL SHAW 5/15/30 9:41 AM F925 A4 FO LDY BLNKTM F927 FO OF EEQ VBLP F929 AO 02 LDY #2 iKEEP VBLANK ON WHILE SYNCING AFTER CALCULATIONS !-92B C6 FO DEC BLNKTM F92D DO 09 BNE VBLP F92F A5 BO LDA GAMNO ;BLANK TIME IS UP F931 C9 10 CMP #PLAY2 F933 FO 03 BEQ VBLP ; 2-PLAYER GAME__ F935 20 E9 FF JSR SOUNDO i PIECE DROPPING SOUND IF 1-PLAY ?y. HUMAN NEXT F938 AE 84 02 VBLP LDX INTXM ;WAIT FOR TIMER TO RUN OUT F93B DO FB BNE VBLP F93D S5 02 STA WSYNC F93F 84 01 STY VBLANK iEND OF VERTICAL BLANK (IF Y=0> . IF PAL ;IF PAL THEN ADD 3 EXTRA LINES AT TOP OF DISPLAY USR WAIT3 ;DO 3 WSYNC'S . ENDIF F941 4C 00 FO JMP JMPBAK ; SKIP BACK TO KERNEL END OF MAIN PROGRAM VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM GSRST — SUBROUTINE TO CHECK GAME SELECT AND RESET SWITCHES F944 GSRST F944 A5 C2 LDA OLDPBQ ;CHECK GAME SELECT F946 6A ROR A F947 6A ROR A F948 BO 23 BCS GS1 ;BRANCH IF GAME SELECT NOT PRESSED F94A C6 EB DEC GSTIM ;GAME SELECT PRESSED — DON'T CHANGE GAME NUMBER TILL TIME UP F94CD0TE BNE GRTN2 •) F94E A9 2B LDA #GSCON F950'85 EE' “ ST A GSTIM i"REINITIALIZE TIMER F952 F8 SED iDECIMAL ARITHMETIC F953 A5 BO LDA GAMNO F955 18 CLC 1 F956 69 01 ADC #1 F958 C9 20 CMP #$20 iGMAX+1 IN DECIMAL F95A DO 02 BNE RESET2 F95C A9 01 LDA #1 F95E resetst F95E 85 BO STA GAMNO F960 D8 CLD F961 A5 E6 LDA WINSAV iSTAY IN ATTRACT IF WIN F963 DO 03 BNE GSKIP F965 20 F3 FA JSR TONORM ;MAKE SURE NOT ATTRACT, RETURN Y=$FF F968 GSKIP LDY #0 F96A 84 1A STY AUDV1 F96C GRTN2 F96C 60 RTS“ ; SET UP GAME SELECT TIMER ?y. CHECK GAME RESET -F96D GS1 F96D OA ASL A F96E BO 59 BCS RES20 ; NOT PRESSED — GSTIMOl & RETURN F970 F972 A9 00 A2 2F LDA J_DX_ #0 #ZR0END-1 -ZROBGN ;RESET BUTTON IS PRESSED _ j - F974 CLRLP F974 95 80 STA ZROBGNi X F976 CA DEX F977 10 FB BPL CLRLP . IF PRNT LDX #0 STX PRCNT . ENDIF F979 85 1A STA AUDV1 iOFF (0) S-97B A2 03 LDX #3 ; CLEAR MORE STUFF — MOWAL, MOVFLG, WINSAV, FROMTO F97D RESLP i:97D 95 E4 STA MOWAL. X V-97F CA ” DEX VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM F980 10 FB BPL RESLP RESET — ENTRY POINT FROM INIT CODE ; F982 RESET F982 20 F3 FA JSR TONORM ;NOT ATTRACT, Y<-$FF F985 84 A4 STY JMPI ; $FF _ F987 20 El FE JSR MOVCLR ;NO CURRENT MOVE SO POINT OFF BOARD F9BA A5 EC LDA 0LDPB6 898C DO 17 BNE “RES10 iIF SETUP MODE THEN LEAVE BOARD EMPTY SET UP BOARD F9BE A9 10 LDA #CHECKER+CLPO ; HUMAN ON 0-12 (8 NOT USED)__ f 990 AO 90 LDY WCHECKER+CLPl ;COMPUTER ON SQUARES 22-34 <26 NOT USED) F992 A2 OD LDX #13-1+1 F994 BRDLP F994 95 7F STA BOARD-1,X F996 94 95 STY BOARD-1+22, X F998 CA DEX F999 DO F 9 BNE BRDLP F99B 86 88 STX BOARD+8 i CLEAR PHANTOM SQUARES___ — F99D 86 9A STX BOARD+26 LDA #12*2 ; INITIALIZE PIECE COUNTS — 12 MEN PER SIDE_ F99F A9 18 STA CPIECE ;COMPUTER PIECE COUNT F9A1 85 AA STA HPIECE jHUMAN PIECE COUNT (P0> F9A3 85 A9 ~F9A5 RE3l'0 LDX #11 ;INITIALIZE CURSOR POSITIONS F9A5 A2 OB F9A7 AO 17 LDY #23 F9A9 A5 BO LDA GAMNO CMP #PLAY2 F9AB C9 10 F9AD DO 08 BNE RES15 r i BOTTOM TPO) PLAYER STARTS'? F9AF A5 BB ' ~ LDA ~-ACTIVE- BPL RES15 ; YES. F9B1 10 04 #23 iNO. TOP PLAYER STARTS F9B3 A2 17 LDX F9B5 AO OB ~~ L0V " ¥ii F9B7 RES 15 STX CURSOR F9B7 86 AB T9B9 84 E8 ■STY CURSd F9BE B5 80 LDA BOARD,X STA PIECE F9BD 85 A3 F9BF A9 80 LDA #$80 P i-— F9C1 85 EA F9C320 FIT FA F9C6 F9C9 20 E2 FA “RES20 STA JSR JSR OLDINP CRSTUP TOSET . up ACTIVE, COLHUM, , MSTJMP=0 SO CLEAR TQSQRB, CQLCMP BASED ON RIGHT DIFFICULTY SWITCH MOVFLG---- F9C9 A2 01 LDX #1 STX GSTIM F9CB 86 EB - F9CB S0 RTS~ VCS CHECKERS BY CAROL SHAW 5/15/80 7:41 AM . IF PAL ___ WAITS — DO 3 WSYNC'S WAIT2 — DO 2 WSYNC'S STA 9 STA WSYNC STA WSYNC 9 RTS TENDIF m JMPSET — SET UP OR CLEAR BOARD FOR JUMP DISPLAY INPUT: => CLEAR EACH SQUARE m > PUT JUMPED CHECKERS IN EACH SQUARE IN JMPLST —- F9CE JMPSET 9 F9CE A4 A4 LDY JMPI F9B0T3tfT5~ ”BMTT JMPSR F9D2 •> F9D2 A9 10 #HUMCHK F9D4E6TC5" LDX~ TJMPLST7Y “ F9D6 10 06 BPL JMPS10 • F9D8 SA TXA i <0 => KING F9D9 29 ~7F AND #$7F F9DB AA TAX 9 F9DC A9 20 LDA #HUMKNG F9DE JMPS10 F9DE BO 02 BCS JMPS20 % F9E0 A9 00 LDA #0 ;CLEAR SQUARE F9E2 JMPS20 F9E2 95 80 STA BOARD/X m F9E4 88 DEY F9E5 10 EB BPL JMPSLP F9E7 JMPSR % F9E7 60 9 SET UP OLDTNP, MLTJMF, CALL JMPCHK TO SETUP MSTJMP,XMOVE RETURN EQOWIN, NE=> NO WIN 9 F9E9“ F9E8 A9 80 LDA #$80 9 F9EA 85 EA STA OLDINP ;ASSUME BUTTON NOT PRESSED F9EC A9 00 LTTA ¥0 F9EE 85 A6 STA MLTJMP F9F0 20 FE F9 JSR JMPCHK ;CHECK FOR JUMPS & ANY MOVES F9F3 DO 08 ONE" UMPRTN ;CAN MOVE i . IF PRNT ;CAN'T MOVE — OTHER PLAYER WINS ■oar PRFLG BEQ PRSKIP I JSR CRLF LDA SGAMOVR .DISPLAY "GAME OVER" ON TI IF DEBUG JSR OUTMSG < JSR PRBRD 9 fllPruPPP nv oardi 8HALI 5/15/80 9:41 AM VC8 CHECKERS BY CAROL SHAW 5/15/SO 9:41 AM . ENDIF F9F5 E6 E6 INC WINSAV F9F7 A9 80 LDA #$80 F9F9 85 FI STA SNDTIM F9FB A9 00 LDA F9FD JMPRTN F9FD 60 RTS MOVCHK TO SET UP XMOVE JMPCHK CHECK TO SEE IF ACTIVE PLAYER HAS ANY JUMPS. SETUP MSTJMP,CALL RETURN CC=> JUMP, CS => NO JUMPS MSTJMP=4 OR MSTJMP =0 NE => ACTIVE PLAYER CAN MOVE (ANYMVE - 1) EQ => ACTIVE PLAYER CANNOT MOVE AT ALL (ANYMVE = 0) S9FE ' JMPCHK LDA #VBTIM ; BLANK SCREEN FOR 1/2 SECOND AFTERt„o„m„ F9FE A? IE STA BLNKTM iTHIS BECAUSE IT TAKES 1203-2080 MICROSEC. FAOO 85 FO _ P AQ2P A902 LDA #2 STA VBLANK j TURN ON VBLANK FA04 85 01 JMPCK2 — SAME AS JMPCHK EXCEPT NO VBLANK JUNK FA06 JMPCK2 FA06 A9“~00 LDA #0 ANYMVE iNO MOVE FOUND YET FA08 85 B6 STA FAOA A9 04 LDA #4 MSTJMP ;ASSUME JUMP -FAOC"85 A5 STA LDX #34 FAOE A2 22 FA 10 JMPLP1 -FA 10 20 2D~FA~ JSR MOVCHK BEQ JPF1 FA13 FO 04 ; INDICATE THAT MOVE HAS BEEN FOUND INC ANYMVE FA15 E6 B6 ;JUMP FOUND --BCC JMPF2 -FA17 90 06 - FA19 JPF1 FA19 CA DEX —FAI7TT0F4 fpL JMPLP1 ;NO JUMP FOUND 0, CS FA 1C E8 INX STX MSTJMP FA1D 86 A5 TATF “JMPFSF LDY ANYMVE FAIF A4 B6 FA21 60 RTS VC5 CHECKERS BY CAROL SHAW 5/15/80 9:41 AM LOADY — Y <— 3 (OR 1 IF CMPCHK) FA22 FA22 AO 03 LDY I A24 B5 SO LBA“ FA26 C9 90 CMP #CMPCHK FA28 DO 02 BNE L0DY10 FA2A AO 01 LDY' iCOMPUTER CHECKER CANNOT MOVE FORWARD (UP ) — SKIP RF, LF FA2C FA2C 60 MQVCHK — CHECK TO SEE IF THIS IS AN ACTIVE PIECE WHICH CAN JUMP INPUT: X = SQUARE NUMBER (0-34) OUTPUT: X=SQUARE # CC => ACTIVE, CAN JUMP CS »> CANNOT JUMP Y>0 (NE) => ACTIVE PIECE WHICH CAN MOVE — SAVED IN YSAVE Y=0 (EQ) => NO MOVE AT ALL FOR THIS SQUARE XMOVE=START SQUARE OF FIRST MOVE OR JUMP FOUND IF ANYMVE=0 OR IF JUMP. FA2D MOVCHK -FA2D AO 00 LDY #0 FA2F 84 B5 STY YSAVE i T2 FA31 B5 80 LDA BOARD, X FS33~F0 44 -BEQ JMP12 ;EMPTY SQUARE FA35 45 BB EOR ACTIVE FA37 30 40 BMI JMP12 ;PASSIVE PIECE — CAN'T MOVE FA39 86 B4 STX XSAVE i T1 FA3B 20 22 FA JSR LOADY iY <— 3 (OR i IF CMPCHK) FA3E JMPLP2 FA3E 20 C9^ FA~ J5R 0NBRD2 ;ADD MOVTAB OFFSET TO SQUARE AND CHECK TO SEE IF OFF BOARD FA41 BO 27 BCS JMP10 ;OFF BOARD FA43 AA TAX FA44 BS SO- LDA BOARD, X FA46 DO OD BNE JMP05 ; NOT JUMP FA48 SA TXA ;NEXT SQUARE IS EMPTY FA49 A5 B6 LDA " ANYMVE FA4B DO 04 BNE JMP02 FA4D A6 B4 LDX XSAVE -FA4F 66 CO “XMOVE ;SAVE START SQUARE AND OFFSET INDEX FA51 JMP02 FA51 E6 B5 INC YSAVE FA55 45 BB EOR ACTIVE ;NEXT SQUARE IS OCCUPIED 1 A57“1D 11 BFL JMP10 ;ACTIVE PIECE — CAN'T JUMP OWN PIECE FA59 20 C9 FA JSR 0NBRD2 ;ADD MOVTAB OFFSET TO SQUARE AND CHECK IA5C BO OC BCS JMP10 ;CAN'T JUMP OFF BOARD T-A5E A A TAX :-A5F B5 80 LDA BOARD,X I-A61 DO 07 BNE JMP10 VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM FA63 A6 B4 LDX XSAVE ; SAVE START SQUARE AND OFFSET INDEX FOR JUMP FA65 36 CO STX XMOVE }CC» NE JUMP FOUND FA67~S0 01 LET? #1 FA69 60 RTS 1A6A JMP10 FA6A A6 B4 LDX XSAVE FA6C 88 DEY FA6D 30 “0A~ BMI JMP12 i DONE FA6F CO 01 CPY #1 FA71 DO CB BNE JMPLP2 ;CONTINUE FA73 B5~ 80 LDA BOARD, X FA75 C9 10 CMP #HUMCHK FA77 DO C5 BNE JMPLP2 i HUMAN CHECKER CAN'T GO BACK (DOWN) SKIP RB, LB FA79 JMP12 FA79 38 SEC iNO JUMP FOUND FA7A A4 B5 LDY YSAVE iLOAD MOVE COUNT FA7C 60 RTS VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM XIEl — INPUT X = INTERNAL SQUARE NUMBER (0-34) r _ OUTPUT X = EXTERNAL SQUARE #-l (0-31) AFFECTS X, CARRY SET IF RESULT = 24-31 INTERNAL #'S 8, 17 AND 26 ARE NOT USED. FA7D XIEl FA7D EO 08 CPX #8 !• A7F 90 OB BCC ARTN ; 0-7 OK FA81 CA DEX i 9-34 TO 8-33 FA82 EO 10 CPX #16 FA84 90 06 BCC ARTN rs-15 OK FA86 CA DEX »17-33 TO 16-32 !-AS7 EO 18 CPX #24 I-A89 90 01 BCC ARTN “TT6-230K FA8B CA DEX ;25-32 TO 24-31 FA8C ARTN FA8C 60 RTS i IEDSP — CONVERT INTERNAL SQUARE # IN X (0-34) TO EXTERNAL IN A FOR DISPLAY. 1-32 IF HUMAN IS DARK, 32-1 IF HUMAN IS LIGHT FA8D IEDSP FA8D 8A TXA FA8E 10 OA BPL IED04 FA90 A5 C3 LDA FRAME FA92 29 10 AND #$10 FA94 FO 02 BEQ IED02 ~ FA96 A2~ AA LDX #BLANK ;IF SPECIAL CHAR (E.G. "JP"> THEN BLINK ON & OFF FA98 IED02 FA98 8A TXA FA99 60 RTS FA9A IED04 I-A9A 20 7D FA JSR XIEl FA9D A5 C2 LDA OLDPBQ ;CHECK "B/W SWITCH" FA9F A4 B1 — LDY COLHUM l-AAl CO 36 CPY #DARK FAA3 DO 06 BNE IED05 ;HUMAN LIGHT => REVERSE NUMBERING FAA5 29 08 AND #$8 ;DARK=>DON yT REVERSE FAA7 FO 06 BEQ IED07 ;B/W => REVERSE FAA9 DO OB BNE IED10 ;NQT B/W => DON'T REVERSE “ FAAB IED05 FAAB 29 08 AND #8 ;CHECK B/W FAAD FO 07 BEQ IEDIO^_ iB/W IMPLIES DON'T REVERSE _ FAAF IED07 FAAF 8A TXA ;BOARD REVERSED FABO 38 SEC . .■■■■■[::' ____ l-ABl E9 20 “BBC #32 j 31-X = -(X-31) = -((X—32)+1) = COMP (X-32) FAB3 49 FF EOR #$FF ;COMPLEMENT FAB5 AA TAX FAB 6 I ED 10 FAB6 E8 INX i 1-32 FAB7 8A TXA CONVERT BINARY IN A TO DECIMAL IN A {-ABB AO 00 LDY #0 - _ _ VCH CHECKERS BY CAROL SHAW 5/15/80 9:41 AM [•ABA C9 OA CMP #10 f'ABC 90 07 BCC IED20 i 0-9 => DONE T-ABE E9 OA SBC #10 f ACO C8 I NY FAC 1 DO F7 BNE IEDLP1 i JMP FAC 3 IEDLP2 FAC3 69 10 ADC #16 ;CONVERT BINARY TO DECIMAL FAC 5 IED20 1 AC 5 88 DEY 1 AC6 10 FB BPL IEDLP2 FAC8 60 RTS VCB CHECKERS BY CAROL SHAW 5/15/80 9:41 AM ; 0NBRD2 — ADD MOVTAB OFFSET TO SQUARE AND CHECK TO SEE IF OFF BOARD FAC9 0NBRD2 T-AC? SA TXA i ACA CLC FACB 79 66 FF ADC MOVTAB, Y ONBRD - - INPUT: A=INTERNAL SQUARE # OUTPUT: CS => OFF BOARD A,X,Y ARE NOT CHANGED FACE C9 S3 CMP #35 F ADO BO OE BCS NOTON i>=35 OR <0 FADS_ cv 1A CTiP #26 - FAD4 FO OA BEQ NOTON FAD6 C9 11 CMP #17 TADS (-0 06 BEG NOTON ! ADA C9 OS CMP #8 F ADC FO 02 BEQ NOTON F-ADE TF “ CLC FADF 60 RTS FAEO NOTON FAEO 3S SEC FAE1 60 RTS 1 ; . TOSET -— SET UP TOSQRB# TtUvFLG# RETURN Y-~G# A# X UNCHANGED# EQ FAES TOSET 1 -FAES A4 A5 LDY ' " MSTJMP FnFROM" F AE4 FO 04 BEQ MV285 FAE6 AO BB LDY #JP ; MUST JUMP FAES DCF 02 BNE MV287 TUMP FAEA MV285 FAEA AO AA LDY #BLANK > NO JUMP FAEC ^ MV287 ! AEC 84 AD STY TOSQRB FAEET AO 00 LDY m FAFO 84 E5 STY MOVFLG FAF2 60 RTS -- VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM / TONORM — GO OUT OF ATTRACT INTO NORMAL MODE FAF3 TONORM FAF3 AO 00 LDY #0 ;CLEAR TIMER FAF5 84 EE STY ATTR FAF7 88 DEY ;RETURN Y=$FF FAF8 84 EF STY GFLG2 FAFA 60 RTS --- CRSTUP — SET UP ACTIVE AND COLORS (COLHUM&COLCMP) (DEPENDS ON RIGHT DIFFICULTY SWITCH) FAFB CRSTUP- FAFB A4 C2 LDY OLDPBQ FAFD 10 08 BPL FSET20 ;0 (AM,B,DOWN) => PO FIRST (ACTIVE) • FAFF A9 SO L.DA #$80 ;COMPUTER STARTS 1 (PRO,A,UP) PB01 "A2 OC ~ LDX #light ;HUMAN IS LIGHT FB03 AO 35 LDY #DARK ;COMPUTER IS DARK (OR RIGHT HAND PLAYER) F-B05 DO 06 BNE FSET30 ; JMP FB07 FSET20 FB07 A9 00 LDA #0 FB09 A2 36 LDX #DARK ;HUMAN IS DARK FBOB AO OC LDY #L1GHT ;COMPUTER IS LIGHT (OR RIGHT HAND PLAYER) FBOD FSET30 FBOD 85 BB STA ACTIVE FBOF 86 B1 STX “COLFRJM FB11 84 B2 STY COLCMP FB13 60 RTS SWIT -- SWITCH ACTIVE PLAYER, RETURN A=ACTIVE FB14 SWIT FB I 4 A 5 I3B-— CDA“ ACTIVE" FBI6 49 80 EOR #$80 FBI8 85 BB STA ACTIVE TUTS-50" "RTS VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM m • l t" RESTR6 — RESTORE A BUNCH OF STUFF INCLUDING FRSMOV FB1B RESTR6 f-BlB 29 CO AND #*C0 FB1D 85 BF STA FRSMOV —-• RESTR4 — RESTORE BOARD AFTER JUMP FB1F RESTR4 •--;---s------1 FB1F A6 BC LDX DEPTH FB21 B5 D2 LDA OTHER-1, X ; COMPUTE PIECE • FB23 29 30 AND #$30 FB25 05 BB ORA ACTIVE FB27 85 A3 STA PIECE FB29 B5 D2 LDA OTHER-1, X FB2B 48 PHA iCAPTURED PIECCE • FB2C A 5 AC- LDA FROMB ; FROM SQUARE __ -FS2E~A4n3E LDY INDEX FB30 18 CLC FB31 79 66 FF ADC MOVTAB,Y ' FB34 AA TAX iJUMP SQUARE # FB35 ie CLC FB36 79 66 FF ADC MOVTAB,Y ~ FB39S5 AD STA TOSQRB FB3B 68 PLA RESTR5 —ENTRY POINT FB3C RESTR5 #2 ,SET UP TO INCREMENT OPPONENT'S PIECE COUNT FB3C AO“02 LDY ROL A iKING? FB3E 2A LDA #CMPCHK FB3F A9 90 BCC NOK- ; NO. FB41 90 03 I NY iKING => 3 FB43 C8 • LDA_ #CMPKNG _ FB44 A9 AO FB46 NOK ACTIVE iOPPOSITE PLAYER — JUMPED PIECE FB46 45 BB EOR STA BOARD, X_ FB48 95 80 #$80 ;ACTIVE EOR #$80 FB4A 29 80 AND FB4C OA ASL A ~"AT jSHIFT AND CLEAR CARRY -FB4D 2A ROL # FB4E AA TAX FB4F 98 TYA ADC HPIECE, X FB50 75 A9 i STORE NEW PIECE COUNT STA HPIECE, X FB52 95 A9 CPY #3 FB54 CO 03 BNE NOK 10 FB56 DO 02 INC HKING,X_ FB58 F6 AE !-B 5 A N0K10 LDA MSTFLG -- FB5A A5 A7 STA MST JMP FB5C 85 A5 ;RESTORE FLAGS LDA MLTFLG FB5E A5 A8 i. ra in AA STA MLTJMP IB60 85 Ao SI A mltjmp VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM RESTOR — MOVE PIECE BACK & DEC PIECE COUNT IF NEW KING [ * TT362 RESTOR FB62 A6 AD LDX TOSQRB FB64 B5 80 LDA BOARD,X FB66 C5 A3 CMP PIECE FB68 FO 09 BEQ TERR iSAME — NOT NEW KING FB6A A5 BB LDA ACTIVE iMOVE BIT7 TO BIT 1 S-B6C OA ASL A FB6D 2A ROL A FB6E AA TAX FB6F D6 A9 DEC HPIECE,X FB71 D6 AE DEC HKING, X ;DECREMENT KING COUNT FB73 TERR FB73 A6 AD LDX TOSQRB FB75 A9 00 LDA #0 FB77 95 80 STA BOARD, X ;CLEAR TO SQUARE FB79 A6 AC LDX FROMB FB7B A5 A3 LDA PIECE iMOVE PIECE TO FROM SQUARE FB7D 95 80 STA BOARD, X FB7F 60 RTS VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM JUMP 1 — SETS UP JMPLST IF MULTIPLE JUMP FOR COMPUTER (FOR END OF ALPHA-BETA) INPUT TO = STARTING SQUARE Y = INDEX INTO MOVTAB 11 = CURRENT JMPLST INDEX OUTPUT: TO = ENDING SQUARE (AFTER JUMP) T1 = Tl+1 COLD T1 TN X) ---: JMPLST, X = JUMPED PIECE (B7=l => KING) AND SQUARE CS = DONE (LAST JUMP) } FB80 JUMP 1 PESO A5 B3 LDA TO M382 IS CLC FB83 79 66 FF ADC MDVTAB, Y FB86 48 PHA ““F B2T7 AA TAX FB88 B5 80 LDA BOARD, X ;SAVE JUMP SQUARE F-B8A C6 A9 DEC HPIECE ;DECREMENT HUMAN'S PIECE COUNT FB8C C6 A9 DEC HPIECE FB8E C9 20 CMP #HUMKNG FB90- DO 04 BNE NK —— FB92 C6 A9 DEC HPIECE jKING —DECREMENT AGAIN FB94 C6 AE DEC HKING iDEC KING COUNT FB96 NK FB96 48 PHA ;SAVE JUMPED PIECE FB97 A9 00 LDA #0 ;CLEAR OUT JUMP SQUARE - - FB'99~915—B0 STA BOARD, FB9B 68 PLA FB9C AA TAX FB9D 68 PLA ;JUMP SQUARE FB9E 48 PHA FB9F EO 20 " CPX #HUMKNG ;DOES JUMP SQUARE CONTAIN HUMAN KING? FBA1 DO 02 BNE JUMPS ; NO. FBA3 09 80 ORA #$80 ; YES. KING FBA5 JUMPS FBA5 A6 B4 LDX T1 FBA7 95 C5 STA JMPLST, X ~ FBA9 E6 B4 INC T1 FEAB 68 PLA iRELOAD JUMP SQUARE -FBAC 18 CLC iCOMPUTE TO SQUARE FBAD 79 66 FF ADC MOVTAB, Y FBBO 85 B3 STA TO FBB2 24 A4 CPX JMPI ;DONE? FBB4 60 RTS VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM JUMP4 -- SIMILAR TO JUMP1, EXCEPT DOES 4 JUMPS INPUT: A = 4 OFFSET INDEXES (B7-6 = FIRST! TO = START SQUARE (FOR JUMP1) T INDEX (FOR JUMP!) ;« USES: T2 = LOOP COUNT T3 = INDEXES OUTPUT:: TO = END SQUARE, CS=> DONE FBB5 JUMP4 FBB5 85 B6 STA T3 FSB 7 A9 03 LDA #3 FBB9 85 B5 STA T2 FBBB JUMPL FEBB“ A9~”0G LDA #0 FBBD 06 B6 ASL T3 ;SHIFT 2 BITS OF 3 FBBF 2A ROL A FBCO 06B6 ASL T3 FBC2 2A ROL A FBC3 A8 TAY -FBB4^0^80 FB JSR JUMP 1 FBC7 BO 04 BCS JUMPR iBRANCH IF DONE FBC9 C6 B5 DEC T2 FBCB 10 EE ‘ BPL JUMPL 7 CONTINUE FBCD JUMPR FBCD 60 RTS - VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM : TERMNODE — CHECK FOR TERMINAL NODE 1 ' RETURN ACTIVE SWITCHED CC => NOT TERMINAL — XMOVE, AND MSTJMP SET UP FOR NEXT LEVEL CS -> TERMINAL — NUM = STATICT VALUE OF BOARD T-BCE TERMNODE FBCE 20 14 FB JSR SWIT ; SWITCH ACTIVE PLAYER TO GET ACTIVE FOR NEXT LEVEL JSR JMPCK2 iCHECK FOR MOVE OR JUMP, SET UP MSTJMP, XMOVE,YMOVE FBD4 DO OF BNE ALP200 ,' CAN MOVE DEPTH ; CAN'T MOVE — VERY BAD FBD8 8A TXA FBD9 IS CLC i'-BDA 69 02 ADC #2 FBDC 95 DF STA ALPHAL+1,X FBDE A9 80 LDA #$80 f-BEO 95 EC STA ALPHAH+1,X ;-INFINITY = $8C-02+DEPTH = -(7FFF - DEPTH-1) (-7FFD TO -7FF3) ($8003 - $800—1 JMP SED20 iNEGATE IF LOSING CHECKERS & RETURN CARRY SET » — ENTRY POINT — CHECK DEPTH — WE KNOW WE CAN JUMP. CS=:TERMINAL NODE FBE5 A5 BC ALP200 LDA DEPTH CMP #MAXMAX FBE9 90 22 BCC ALP220 JSR STATEVAL ;"STACK" FULL — MUST STOP FBEE A5 A5 LDA MSTJMP FBFO FO 19 BEQ ALP210 MUST JUMP— MODIFY VALUE FOR PENDING JUMP DECREASE MAGNITUDE OF SCORE. FBF2 AO 00 LDY #0 ;ADD NEGATIVE NUMBER F-BF4 A6 BC LDX DEPTH FBF6 B5 EC LDA ALPHAH+1,X FBFB 10 02 BPL ALP205 FEFA AO 02 LDY #2 ;<0 => ADD POSITIVE NUMBER FBFC ALP205 FBFC B9 CB FF LDA ADDTAB,Y ;POS. => -ADDTRM. NEG => ADDTRM FBFF IS CLC _____ FCOO 75 DF ADC ALPHAL+1,X FC02 95 DF STA ALPHAL+1,X FC04 B9 C9 FF LDA ADDTAB+1 ,"Y ; POS=> $ FF. RES =>~0 FC07 75 EC ADC ALPHAH+1,X FC09 95 EC STA ALPHAH+1,X FCOB ALP210 FCOB 38 SEC FCOC 60 RTS FOOD ALP220 ~FCOD A6 A 5 LDX MSTJMP iMUST JUMP? FCOF FO 02 BEQ ALP235 i NO. BRANCH FC11 ALP230 FC11 18 CLC ;YES. CONTINUE TREE SEARCH FC12 ALP231 FC12 60 RTS FC 13 ALP235 FC13 A5 BO LDA GAMNO ;CHECK MAX DEPTH FC15 29 OF AND #$0F FC17 C5 BC CMP DEPTH VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM FC19 FO 02 BEQ ALP240 ; IF GAMNO = DEPTH THEN STOP UNLESS OTHER PLAYER CAN JUMP PC IB BO F4 BCS ALP230 i IF GAMNO > DEPTH THEN CONTINUE TREE SEARCH ; i IF GAMNO < DEPTH THEN STOP UNLESS OTHER PLAYER CAN JUMP 5CID ALP240 VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM STATEVAL — COMPUTE STATIC VALUE OF BOARD HUMAN ACTIVE => -CPIECE/HPIECE THEN SHIFT LEFT 4 BITS (2 BYTE RESULT) COMPUTER ACTIVE => CPIECE/HPIECE RESULT IS TWO BYTES IN NUM & ALPHA(DEPTH+1) (THIS MIGHT REPLACE OLD ALPHA VALUE). NUM = LSB = FRACTIONAL PART. NUM+1 = MSB = INTEGER PART. R ETUR N'CARR Y' SET ‘ FCID STATEVAL FCID A6 A9 TDJT HPIECU FC1F A4 AA LDY CPIECE FC21 86 B8 STX DEN iHUMAN ACTIVE => HPIECE/CPIECE FC23 84 B6 “STY NUM+1 ; MSB FC25 A9 00 LDA #0 ; LSB FC27 85 B5 STA NUM “FC29 A2 11 LDX #17 FC2B IS CLC FC2C SELF FC2C 26 B5 ROL NUM i LSB FC2E 26 B6 ROL NUM+1 ; MSB FC30 CA DEX FC31 FO 09 BEG SEDONE ;BRANCH IF DONE FC33 2A ROL A FC34 C5 B8 CMP DEN FC36~90HF4 BCC SELP i 0 FC38 E5 B8 SBC DEN FC3A BO FO BCS SELP ;JUMP — ROTATE IN 1 FC3C SEDONE FC3C A9 00 LDA #0 FC3E 85 B4 STA T1 iINIT CREDIT TO 0 FC40 06 B5 ASL NUM ;SHIFT LEFT 4 BITS FC42 26 B6 ROL NUM+1 ;CHECK FOR OVERFLOW FC44 06 B5 ASL NUM FC46 26 B6 ROL NUM+1 FC4S 06 B5 ASL NUM FC4A 26 B6 “ROL NUM+1 FC4C 06 B5 ASL NUM FC4E 26 B6 ROL NUM+1 FC50 BO 02 BCS^ SED05 ;OVERFLOW FC52 10 OB BPL SED07 ;NO OVERFLOW FC54 SED05 -FC'54 A9 F2 #$FF-MAXMAX-2 ; $F2 IF MAXMAX“= TT FC56 85 B5 STA NUM FC58 A9 7F LDA #$7F i SET TO MAX MAGNITUDE (-S800E TO ALLOW ROOM FOR DEC)_ FC5A 85 B6 STA NUM+1 FC5C 4C 1A FE JMP ADDSUM ;IGNORE REST OF CREDITS FC5F SED07 VCF CHECKERS BY CAROL SHAW 5/15/80 9:41 AM END GAME CLEAN UP - DO ONLY J^F COMPUTER IS WINNING OR EVEN FC5F A9 FF LDA #$FF FC61 35 B9 STA T7 i INDICATE NOT END GAME UNTIL PROVEN OTHERWISE FC63 A5 A9 LDA HPIECE FC65 3S SEC ; COMPUTE # OF HUMAN PIECES # 2 = HPIECE-HKING FC66 E5 AE SBC HKTNG FC68 C9 08 CMP #ENDPC iDOES HUMAN HAVE MORE THAN END GAME AMOUNT? FC6A 90 03 BCC DIS03 FC6C DIS02- FC6C 4C 10 FD UMP DIS70 i YES. NOT END GAME 1_ FC6F_ DIS03 :C6F 65 AF ADC CKING i NO. END GAME. IS COMPUTER AHEAD IN # OF PIECES? FC71 38 SEC FC73 E5 AA SBC CPIECE FC74“S0^F&- BCS- DTS02 iSKIP IF HUMAN >= COMPUTER FC76 DIS04 — IC76 A2 22 LDX #34 FC7B DISLP1 FC78 86 B9 STX T7 ;SAVE X FC7A S5 80 LDA BOARD, X ;EMPTY SQUARE? FC7C FO 64 BEQ DIS65 ;YES. TRY NEXT SQUARE FC7E2920 AND 4KING ;KING? FC80 DO OD BNE DIS05 ;YES. SKIP FCB2 "20 7D FA- U5R XTEI- ;NO. ORDINARY MAN. COMPUTE DISTANCE OF MAN FROM BOTTOM OF BOARD FC85 8A TXA FC86 4A LSR A -FC87 4A- LSR A FC88 18 CLC FC89 65 B4 ADC T1 ; ADD T1_ FC8B 85 B4 -sta-rr- FC8D A6 B9 LDX T7 i RELOAD X FCSF DIS05 FCBFD5 80- " CUB-TJDARBTX ~ FC91 30 4F BMI DIS65 i SKIP IF COMPUTER FC93 20 7D FA JSR XIE1 ;CONVERT INTERNAL SQUARE # TO EXTERNAL -FC96 8A- -rxA—— -~ FC97 4A LSR A FC9S 4A LSR A FC99B5B7 STA TST — ; ROW FC9B 49 01 EOR #1 ;COMPLEMENT LSBIT FC9D 6A ROR A iAND SHIFT TO CARRY. FC9E~BA~- — TXA'—--- FC9F 2A ROL A ;SHIFT CARRY INTO BO _FCAO 2907 AND #7 iAND MASK TO GET COL. FCA2 85 B8 STAT "DEN- “ /'COL"""—-■"—- FCA4 A2 22 LDX #34 ;FIND COMPUTER'S PIECES FCA6 D1SLP2 | H FCA6 B5 80 LDA BOARD, X FCAS 10 35 BPL DIS60 ;EMPTY OR HUMAN CHECK FOR KING? FCAA 8A TXA ;SAVE INTERNAL SQUARE # FCAB 48 PHA FCAC 20 7D FA "JSR XIEl ;CONVERT INTERNAL SQUARE # TO EXTERNAL VCfi CHECKERS BY CAROL SHAW 5/15/80 9:41 AM FCAF BA TXA FCBO 4A LSR A iCOMPUTE ROW FCB1 4A L5R A FCB2 38 SEC FCB3 E5 B7 SBC T6 >COMPUTE DIFFERENCE IN ROWS PCB5 10 05 BPL DIS30 FCB7 49 FF EOR #$FF .MAKE POSITIVE FCB9 18 CLC l-CB'A 69 01 ADC #1 FCBC DIS30 FCBC 85 B3 STA TO '■ CBE SA TXA iCOMPUTE DIFFERENCE IN COLS FCBF 4A LSR A FCCO 4A LSR A ~FCCl 49 01 EOR #1 FCC3 6A ROR A iSHIFT TO CARRY FCC4 8A TXA F-CC5 2A ROL- A FCC6 29 07 AND #7 ; COL FCCS 38 SEC FCC9 E5 B8 SBC DEN FCCB 10 05 BPL DIS40 FCCD 49 FF EOR #$FF .MAKE POSITIVE CLC FCDO 69 01 ADC #1 FCD2 DIS40 .r-CD2 C5 B3 'CMP TO i FIND LARGER' OF DIF IN ROWS AND COLS FCD4 BO 02 BCS DIS50 FCD6 A5 B3 LDA TO > USE FIRST VALUE FCD8 DIS5G FCD8 18 CLC ; THIS IS THE DISTANCE BET. THE COMPUTER PIECE & THE HUMAN PIECE FCD9 65 B4 ADC T1 iADD NEG. ft TO CREDIT FCDD 85 B4 ^TA T1 FCDD 68 PLA .RESTORE INTERNAL SQUARE # FCDE AA TAX FCDF DIS60 FCDF CA DEX FCEO 10 C4 BPL DISLP2 FCE2 DIS65 PCE2 A6 B9 LDX T7 ; STOP WHEN T7=0 FCE4 CA DEX FCE5 10 91 BPL DISLP1 FCE7 A5 B5 LDA NUM .SUBTRACT CREDIT FROM NUM FCE9 38 SEC FCEA E5 B4 SBC T1 FCEC 85 B5 STA NUM ' FCEE BO 02 BCS DIS67 iBORROW? FCFO C6 B6 DEC NUM+1 ;YES. DECREMENT MSB FCF2 DIS67 FCF2 A9 00 LDA #0 ;CLEAR OUT T1 F-CF4 85 B4 STA T1 * I VCS CHECKERS BY CAROL SHAW 5/15/SO 9:41 AM -- ; COUNT COMPUTER PIECES ON DIAGONAL * FCF6 AO OD LDY #14-1 FCFS DIAGLP FCFS BE 7E FF LDX DIAG,Y FCFB B5 80 LDA BOARD/X FCFD FO OE BEQ DIAG20 ;EMPTY FCFF 2A ROL A FDOO 29 40 AND #KING*2 ;KING? FD02 FO 09 BEQ DIAG20 ; NO. FD04 90 05 see DIAG10 FYES: “ BRANCH IF HUMAN FD06 E6 B4 INC T1 iCOMPUTER FDOS 4C OD FD JMP DIAG20 1-DOB DIAGIO FDOB C6 B4 DEC T1 ;HUMAN FDOD DIAG20 FOOD 88 DEY FDOE 10 E8 BPL DIAGLP FD10 DIS70 VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM (KING ROW PROTECTION) 1 FD10 FD12 A5 BO 29 OE LDA AND GAMNO #$0E i GAME # = 1? FD14 DO 03 BNE ADS 10 ; NO. SKIP FD16 BACK25 FD16 4C 1A FE JMP ADDSUM ; SKIP THE REST IF GAME # _•=_ 1 OR $11 FD19 ADSTO FD19 A5 AE LDA HKING iDOES HKING * 3 = HPIECE? _ FBTB OA ASL A ;SHIFT LEFT AND CLEAR CARRY FD1C 65 AE ADC HKING FD1E C5 A9 CMP HPIECE FD20 FO 23 BEQ BACK10 iYES. => NO ORDINARY MEN TO CONVERT TO KINGS FD22 A9 00 LDA #0 FD24 A4 9F LDY BOARD+31 FD26 10 02 BPL BACK30 FD28 09 08 ORA _#8_ i OR IN 1 BIT FOR EACH BACK ROW SQUARE WHICH IS OCCUPIED BY A COMP PIECE _ FD2A BACK30 FD2A A4 AO LDY BOARD+32 FD2C 10 02 BPL BACK40 FD2E 09 04 ORA #4 FD30 BACK40 FD30 A4 A1 LDY BOARD+33 FD32 10 02 BPL BACK50 FD34 09 02 ORA #2 FD36 BACK50 1 FD36 A4A2 LDY EOARD+34 FD38 10 02 BPL BACK60 FD3A 09 01 ORA #1 FD3C BACK60 FD3C AA TAX FD3D BD 52 FF LDA BAKTAB,X ;ADD TABLE VALUE TO CURRENT CREDIT .jgS -FB40 18 CLC FD41 65 B4 ADC T1 FD43 85 B4 STA T1 FD45 BACK10 FD45 A5 AF LDA CKING ;DOES CKING»3 = CPIECE?_ m FD47 OA ASL A CKING ~ FD48 65 AF ADC L FD4A "FD4C C5 FO AA 2B “ CMP SEQ CPIECE BACK20 ;YES. NO CHECKERS TO CONVERT TO KINGS FD4E A9 00 LDA #0 ;0R IN 1 BIT FOR EACH BACK ROW SQUARE WHICH IS OCCUPIED BY A HUMAN PIECE FD50 A4 83 -LBT BOARD+3 FD52 FO 04 BEQ BACK70 FD54 30 02 BMI BACK70 FD56 09 08 ORA #8 FD58 BACK70 FD58 A4 82 LDY BOARD+2 FD5A FO 04 -BEQ ' BACKSO FD5C 30 02 BMI BACK80 FD5E 09 04 ORA #4 FDSO BACK80 PD60 A4 81 LDY BQARD+1 FD62 FO 04 BEQ BACK90 FD64 30 02 BMI BACK90 VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM FD66 09 02 ORA #2 ID68 BACK90 FD68 A4 80 LDY BOARD+O 1-D6A FO 04 BEQ BACK95 FD6C 30 02 BMI BACK95 FD6E 09 01 ORA #1 FD70 BACK95 FD70 AA TAX FD71 A5 B4 LDA T1 FD73 38 SEC FD74 FD 52 FF SBC BAKTAB,X ;SUBTRACT TABLE VALUE FROM CURRENT CREDIT FD77 85 B4 STA TV FD79 BACK20 VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM * COMPUTE DOUBLE CORNER CREDIT FD79 A5 BO GAMNO FD7B 29 OF #$0F FD7D C9 <73 #3 ; GAME # = T OR 2? FD7F 90 95 BACK25 JUMP ADDSUM IF GAME # TOO SMALL FD81 A9 20 #HUMKNG FD83 A2 FC #—CORNS<$FF FD85 A4 A9 HPIECE FD87 C4 AA CPIECE FD89 FO 06 C0RN20 iDO IF EQUALS FD8B 90 04 C0RN20 ;HUMAN <= COMPUTER _ HUMAN WANTS CORN FD8D A9 AO #CMPKNG ;HUMAN > COMPUTER =>COMPUTER WANTS CORN FDBF A2 04 #CORN iINC ALPHA FD91 FD91 85 B8 “STA“ BEN¬ ;HUMAN OR COMPUTER FD93 86 B3 STX TO ;-CORN OR +CORN FD95 AO 00 LDY #0 FD97 A5 80 LDAT BOARD+0 iIS SQUARE OCCUPIED? FD99 FO 05 BEQ C0RN30 i NO. EMPTY FD9B 45 B8 EOR DEN ;CORRECT PLAYER AND KING? FD9D DO IF!- HSNE~ C0RN50 iNO. OTHER PLAYER — TOO BAD FD9F CS I NY iYES. INC CORN COUNT FDAO FDA0A5 84- “LBA~ BOARD+4'' iCHECK OTHER SQUARE IN THIS CORNER FDA2 FO 05 BEQ C0RN40 iEMPTY FDA4 45 B8 EOR DEN FDA6 DO OC BNE C0RN50 ;WRONG PLAYER— TOO BAD FDA8 C8 I NY FDA9 C0RN40 FDA9 CO 01 CPY #1 " FDAB DO 07 BNE C0RN50 FDAD A5 B4 LDA T1 FDAF IS CLC FDBO 65 B3 ADC TO iWE GET CREDIT FDB2 85 B4 STA T1 __ FDB4 CORN50" FDB4 AO 00 LDY #0 CHECK OTHER CORNER FDB6 A5 9E LDA B0ARD+30 IS SQUARE OCCUPIED? FDB8 FO 05 BEQ ~ C0RN60 NO. EMPTY FDBA 45 B8 EOR DEN CORRECT PLAYER AND KING? FDBC DO 15 BNE CRN100 NO. TOO BAD FDBE CET INY FDBF C0RN60 FDBF AS A2 LDA BOARD+34 FDCI FO 05 BEQ C0RN70 NO. EMPTY FDC3 45 B8 EOR DEN CORRECT PLAYER AND KING? FDC 5 DO OC BNE CRN100 NO. FDC7 C8 INY FDC8 C0RN70 FDC8 CO 01 CPY #1 FDCA DO 07 BNE CRN100 FDCC A5 B4 LDA T1 FDCE 18 CLC FDCF 65 B3 ADC TO FDD1 85 B4 STA T1 FDD3 CRN100 VCrs CHECKERS BY CAROL SHAW 5/15/SO 9:41 AM COMPUTE CENTER CREDIT FDD3 DOCENT FDD3 A5 B9 LDA T7 FDD5 FO OC. BEQ CENT90 ;SKIP IF END GAME FDD7 A5 93 LDA BOARD+19 ;COUNT EACH COMPUTER PIECE IN SQUARES 19&20 FDD9 10 02 BPL CENT50 FDDB E6 B4 INC T1 FDDD CENT50 FDDD A5 94 LDA B0ARD+20 ! • DDF TO 02 BPL CENT90 FDE1 E6 B4 INC T1 FDE3 CENT90 VC8 CHECKERS BY CAROL SHAW 5/15/80 9:41 AM COMPUTE MOVE CREDIT (ADD CREDIT IF COMPUTER HAS MOVE) FDE3 A5 BO LDA GAMNO FDE5 29 OC AND #$0C iGAME # < 4? FDE7 FO 31 BEQ ADDSUM T YES. SKIP FDE9 A5 A9 LDA HPIECE FDEB 18 CLC "FDEC 65~AA ADC CPIECE FDEE C9 19 CMP #24+1 ;TOTAL PIECE COUNT > 24? FDFO BO 28 BCS QMV100 ; YES. SKIP MOVE FDF2 A5 A9 LDA HPIECE iSUBTRACT OFF EXTRA POINT FOR EACH KING TO GET FDF4 38 SEC j 2 TIMES PIECE COUNT FOR EACH PLAYER. FDFS^ES’AE SBC HKING FDF7 38 SEC FDF8 E5 AA SBC CPIECE ;HPIECE-HKING-CPIECE+CKING FDFA 18 CLC 7=HPIECE-HKING-(CPIECE-CKING) FDFB 65 AF ADC CKING FDFD DO IB BNE QMV100 ;PIECE COUNTS ARE DIFFERENT _ COUNT PIECES IN COMPUTER'S SYSTEM FDFF AO OF LDY #16-1 FE01 A9 00 LDA #0 ;INIT COUNT FE03 85 B3 STA TO FE05 QMVLP FE05 BE 75 FF LDX SYSTEM,Y FE08 B5 80 LDA BOARD, X FEOA FO 02 BEQ QMV10 FEOC E6 B3 INC TO FEOET QMVID FEOE 88 DEY {•EOF 10 F4 BPL QMVLP FE11 66 B3 ROR TO ;ODD OR EVEN? FE13 6A ROR A 5E14 45 BB EOR ACTIVE ;COMPUTER OR HUMAN ACTIVE? FE16 30 02 BMI QMV100 ;HUMAN HAS MOVE — DON'T ADD CREDIT FE1B E6 B4 INC T1 iHUMAN IS ACTIVE AND EVEN COUNT FE1A ■QHVTOO L_ VCS CHECKERS BY CAROL SHAW 5/15/80 9:41 AM ADD SUM OF BACK, CORN, ETC. IN T1 TO PIECE COUNT RATIO IN NUM FE1A ADDSUM FE1A A6 BC LDX DEPTH FETCT A5 B4 DBA TI FE1E 18 CLC FE1F 65 B5 ADC NUM !E21 95 DF STA ALPHAL+1, X FE23 A9 00 LDA #0 ;COMPUTE MSB FE25 A4 B4 LDY Tl iNEGATIVE? I-E27 10 02 " BPL ADD 10 ; NO. POSITIVE. USE 0 FE29 A9 FF LDA #$FF ;YES. USE *FF FE2B __ADD 10 ______ ! E2B 65 B6 ADC NUM+1 ' LADD WITH CARRY FROM LSB FE2D 95 EC STA ALPHAH+1,X ; SHOULD NEVER GET OVERFLOW FE2F A5 BB LDA" ACTIVE - LHUMAN ACTIVE? FE31 30 07 BMI SED20 i NO. FE33 A5 BO LDA GAMNO - FE35 C9 10 CMP #PLAY2 “ i LOSING CHECKERS?" FE37 90 09 BCC SED25 ;NO. WINNING CHECKERS — NEGATE ALPHA PE39 60 _RTS ; YES. DOUBLE NEGATE => NO NEGATE. RETURN CARRY J3ET IF LOSING CHECKERS 2-PLAYER GAME) THEN NEGATE ALPHA — ENTRY POINT RETURN CARRY SET FE3A SED20 FE3A A6 BC XDX DEPTH FE3C A5 BO LDA GAMNO FE3E C9 10 CMP #PLAY2 "FE40 90 OD BCC “ SED30 FE42 SED25 ;LOSING CHECKERS FE42 FE43 38 A9 "00 LDA SEC TKT " FE45 F5 DF SBC ALPHAL+1,X FE47 95 DF STA ALPHAL+1,X_ FE49 A9 00 LDA #0 FE4B F5 EC SBC ALPHAH+1, X FE4D 95 EC STA ALPHAH+1, X __ ~FE4F SED30 SEC ;RETURN CARRY SET OR JP