A large commit.
[pdp8.git] / sw / chekmo / CHEKMO.PA
diff --git a/sw/chekmo/CHEKMO.PA b/sw/chekmo/CHEKMO.PA
new file mode 100644 (file)
index 0000000..5aec342
--- /dev/null
@@ -0,0 +1,3510 @@
+/ CHEKMO II
+ZZZ=63
+/AUTHOR    JOHN E. COMEAU
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/   :::::::::::::::::::::::::::::::
+/   :                            :
+/   :                            :
+/   :                            :
+/   :          CHEKMO II         :
+/   :    CHESS PROGRAM  2/74     :
+/   :                            :
+/   :                            :
+/   :                            :
+/   :::::::::::::::::::::::::::::::
+\f
+
+
+
+/ FIELD 0  CORE UTILIZATION
+
+/      0000-0177       CONSTANTS AND POINTERS
+/      0200-0377       INITIALIZATION
+/      0400-4777       THE THINKER PART
+/      5000-6377       INPUT/OUTPUT ROUTINES
+/      6400-7377       PUSH DOWN LIST AREA
+/      7400-7577       BOARD & MISC. TABLES
+/      7600-7777       BINARY LOADER PROGRAM
+\f/SYMBOL DEFINITIONS
+/MISC. SYMBOLS
+PDLS=6400      /BEGINING OF 1000(OCTAL) WORDS RESERVED FOR PUSH DOWN LISTS
+
+/PIECE VALUES DEFINED
+DECIMAL
+KING=  15^32   /15. RELATIVE TO A PAWNS VALUE
+QUEEN= 9^32    /9.0 RELATIVE TO A PAWNS VALUE
+ROOK=  5^32    /5.0 RELATIVE TO A PAWNS VALUE
+BISHOP=        3^32+10 /3.3 RELATIVE TO A PAWNS VALUE
+KNIGHT=        3^32+4  /3.1 RELATIVE TO A PAWNS VALUE
+PAWN=  1^32    /1.0 RELATIVE TO A PAWNS VALUE
+
+OCTAL
+
+/PSEUDO INSTRUCTIONS DEFINED
+PUSH1= JMS  I  [PUSH01 /PUSH THE AC INTO PUSH DOWN LIST #1
+POP1=  JMS  I  [POP01  /POP THE TOP ENTRY OF PUSH DOWN LIST #1 INTO THE AC
+PRINTO=        JMS  I  [MES    /PRINT 6BIT 2CHAR/WORD TEXT AT ADDRESS SPECIFIED IN THE AC
+IPDL1= JMS  I  [IPDL01 /INITIALIZE PUSH DOWN LIST #1
+PUSH2= JMS  I  [PUSHIT /PUSH THE CONTENTS OF THE AC INTO PUSH DOWN LIST #2
+POP2=  JMS  I  [POPIT  /POP THE TOP ENTRY OF PUSH DOWN LIST #2 INTO THE AC
+IPDL2= JMS  I  [PDLIN  /INITIALIZE PUSH DOWN LIST #2
+SNO=   JMS  I  [RFOFL  /SKIP NO OVERFLOW (C(AC)>=0 & C(AC8)=0)
+
+/PDP 8/E IOTS DEFINED
+CAF= 6007
+PSKF=6661
+PCLF=6662
+PSKE=6663
+PSTB=6664
+PCIE=6667
+
+/CONDITIONAL ASSEMBLY DEFINITIONS
+OS8=1                  /NO SPECIAL MEANING TO "^C"
+LPTREE=1               /DON'T INCLUDE LINE PRINTER CAPABILITIES
+DEBUG=1                        /OPT FOR DYNAMIC ERROR DETECTION
+RANVAL=1               /NOISY EVALUATIONS PLEASE
+
+/DEFAULT ASSEMBLY DEFINITIONS
+IFNDEF OS8     <OS8=0>         /NON OS8 SYSTEM
+IFNDEF DEBUG   <DEBUG=0>       /DEBUG SWITCH CLEARED
+IFNDEF LPTREE  <LPTREE=0>      /DONT INCLUDE TREE PRINTOUT CAPABILITIES
+IFNDEF RANVAL  <RANVAL=1>      /INCLUDE A SMIDGEN OF RANDOMNESS IN EVALUATIONS
+\f
+/ABREVIATIONS USED
+
+/ SQR  SQUARE
+/ INC  INCREMENT
+/ #    NUMBER
+/ =    EQUALS
+/ -    MINUS, NEGATIVE OR TO
+/ &    AND
+/ INFO INFORMATION
+/ AC   ACCUMULATOR
+/ TEMP TEMPORARY
+/K-SIDE        KING SIDE
+/Q-SIDE        QUEEN SIDE
+/ LOC  LOCATION
+/ CR   CARRIAGE RETURN
+/ LF   LINE FEED
+/ MSW  MOVE SQUARE WORD
+/ MDW  MOVE DATA WORD
+/ CHAR CHARACTER
+/ W/   WITH
+/ <    LESS THAN
+/ >    GREATER THAN
+/ PSW  POSITION STATUS WORD
+/ ADDR ADDRESS
+/ PDL  PUSH DOWN LIST
+/ PDL#1        PUSH DOWN LIST #1
+/ PDL#2        PUSH DOWN LIST #2
+/ ABS  ABSOLUTE
+/ PROM PROMOTION
+/ ARG  ARGUMENT
+/ VAL  VALUE
+
+\f/             MOVE SQUARE WORD(MSW) FORMAT
+/
+/  -------------------------------------------------------------------------  
+/  I     I     I     I     I     I     I     I     I     I     I     I     I
+/  I  0  I  1  I  2  I  3  I  4  I  5  I  6  I  7  I  8  I  9  I  10 I  11 I
+/  I     I     I     I     I     I     I     I     I     I     I     I     I  
+/  -------------------------------------------------------------------------  
+/  I                                  I I                                 I  
+/   -----------------I----------------- -----------------I-----------------  
+/ 
+/         SIXBIT ADDRESS OF THE                SIXBIT ADDRESS OF THE   
+/           "FROM SQUARE"                         "TO SQUARE"
+
+
+
+
+
+
+/              MOVE DATA WORD(MDW) FORMAT
+/  -------------------------------------------------------------------------  
+/  I     I     I     I     I     I     I     I     I     I     I     I     I
+/  I  0  I  1  I  2  I  3  I  4  I  5  I  6  I  7  I  8  I  9  I  10 I  11 I  
+/  I     I     I     I     I     I     I     I     I     I     I     I     I  
+/  -------------------------------------------------------------------------  
+/     I   I         I I                                 I I               I  
+/     I    ----I----   ----------------I----------------   -------I-------   
+/     I   
+/     I      UNUSED       = THE SIXBIT ADDRESS OF       0 = NORMAL  
+/     I      ALLWAYS      THE "TO SQUARE" IF THE        1 = QUEEN SIDE CASTLING 
+/     I      EQUALS 0     MOVE IS A 2 SQUARE            2 = KING SIDE CASTLING  
+/     I                   PAWN MOVE                     3 = EN PASSANT CAPTURE  
+/     I                                                 4 = PAWN PROM. TO KNIGHT
+/     I                                                 5 = PAWN PROM. TO BISHOP
+/     I                                                 6 = PAWN PROM. TO ROOK
+/     I                                                 7 = PAWN PROM. TO QUEEN
+/     I  
+/     I  
+/     I  
+/     I  
+/ 
+/ = 1 IF THIS MOVE 
+/ IS A CAPTURE     
+\f
+
+*0000
+/INTERRUPT!
+IFRM,  0000
+       JMP  I  .+1
+       INTHAN          /ADDRESS OF THE INTERUPT HANDLER
+REV,   ZZZ             /LOC 3 HOLDS PROGRAM REVISION #
+ODT4,  0000    /LOCATIONS 4, 5, AND 6 ARE RESERVED FOR DEBUGERS
+ODT5,  0000
+ODT6,  0000
+
+/ ZERO PAGE CONSTANTS
+*11
+RANDOM,        0000
+XR0,   0000
+ITMP0, 0000
+ITMP1, 0000            /AUTO-INCREMENT TEMPORARY STORAGE
+ITMP2, 0000
+CLIST, KBUF-1          /INPUT BUFFER POINTER
+LIST2, 0000
+TEMP,  0000            /TEMPORARY STORAGE LOCATIONS
+TEMP1, 0000            /           .
+TEMP2, 0000            /           .
+TEMP3, 0000            /           .
+TEMP4, 0000            /           .
+TMP,   0000            /TEMPORARY STORAGE
+ZOUT,  OUT             /POINTS TO OUTPUT ROUTINE
+CHAR,  0000            /TEMP. STORAGE PLACE FOR A CHARACTER
+ZCRLF, CRLF            /POINTS TO CR-LF PRINTING ROUTINE
+XXXX,  0000            /TEMPORARY STORAGE
+ZBEGIN,        BEGIN           /POINTS TO INPUT INITIATING ROUTINE
+CNTCHR,        0000            /CHARACTER COUNT
+ISW,   0000            /INPUT SWITCH
+ZGETC, GETC            /POINTS TO INPUT BUFFER READING ROUTINE
+PONDIR,        0001            /PAWN DIRECTION CONSTANT
+M1,    0000
+M2,    0000
+M3,    0000
+M4,    0000
+GN1,   0000            /COMMON STORAGE FOR THE MOVE GENERATION ROUTINES
+GN2,   0000            /               .
+GN3,   0000            /               .
+GN4,   0000            /               .
+GNMSW, 0000            /               .
+GNMDW, 0000            /               .
+FSTRNK,        7777            /-VALUE OF THE FIRST RANK
+ZCHKIO,        CHKIO           /POINTS TO IO STALL ROUTINE
+WPSW,  0000            /WHITES POSITION STATUS WORD
+BPSW,  0000            /BLACKS POSITION STATUS WORD
+CPSW,  0000            /ADDRESS OF CURRENT POSITION STATUS WORD IS KEPT HERE
+GMAP,  0000
+OMAP,  0000
+TOMAK1,        0000            /MOVE SQUARE WORD HERE
+TOMAK2,        0000            /MOVE DATA WORD HERE
+DIR1,  0000
+DIR2,  0000
+CNTR1, 0000
+WKING, 0000            /ADDRESS OF THE WHITE KING IS STORED HERE
+BKING, 0000            /ADDRESS OF THE BLACK KING IS STORED HERE
+CKING, 0000            /ADRESS OF THE KING BEING TESTED
+TKING, 0000            /TEMP STORAGE FOR KING ADDR
+LSTMV, 0000            /LOCATION WHICH DESCRIBES THE LAST MOVE MADE IF DOUBLE PAWN MOVE
+ZGNMV, GNMV            /POINTS TO MOVE GENERATION ROUTINE
+ZMKMV, MKMV            /POINTS TO THE MOVE MAKING ROUTINE
+ZUNMV, UNMV            /POINTS TO THE MOVE UNMAKING ROUTINE
+ZMAPEC,        MAPEC           /POINTS TO PIECE MAP ROUTINE
+PW,    0000            /SET = TO TOTAL VALUE OF ALL PIECES ON THE BOARD BY 'MAPEC'
+WHOSE, 0000            /THIS LOC =0 IF IT IS WHITES MOVE, =-1 IF BLACKS
+PCNT,  0000            /USED BY CHKATK =# OF PIECES ATTACKING THE SQUARE
+PVAL,  0000            /USED BY CHKATK =LEAST VALUABLE ATTACKER
+PSQR,  0000            /USED BY CHKATK =ADDRESS OF THE LEAST VALUABLE ATTACKING PIECE
+ZSPLIT,        SPLIT           /POINTS TO A SUBROUTINE WHICH SPLITS UP A MSW
+ZTSTCH,        TSTCHK          /POINTS TO CHECK TESTING ROUTINE
+ZFNL,  TSTCHK          /POINTS TO FINAL LEGAL MOVE VERIFICATION ROUTINE
+GNCNT, 0000            /LOC=NUMBER OF MOVES GENERATED BY GNWMV
+TOADR, 0000
+IOMDW, 0000            /ARGUMENT STORAGE FOR I/O ROUTINES
+IOMSW, 0000            /ARGUMENT STORAGE FOR I/O ROUTINES
+CMSW,  0000            /CHECKMATE SWITCH
+SMSW,  0000            /STALEMATE SWITCH
+COMP,  0000
+ZLOOKA,        LOOKA           /POINTS TO THE RECURSIVE LOOKAHEAD SUBROUTINE
+UVAL1, 0000
+CVAL1, 3777
+RVAL1, 0000
+MVAL1, 0000            /HOLDS MOBILITY VALUE
+PLY,   0000            /HOLDS CURRENT RECURSION LEVEL OF THE "LOOKA" SUBROUTINE
+DEPTH, 0003            /HOLDS THE MAXIMUM RECURSION LEVEL FOR THE "LOOKA" SUBROUTINE
+RDEPTH,        0000
+BUG,   0000
+RNKKNT,        0000            /TEMP STORAGE FOR BOARD OUTPRINT & BOARD INPUT ROUTINES
+FILKNT,        0
+PIECE, 0
+COLOR, 0
+RNKPTR,        0
+MOBMOD,        0000
+KNGBLK,        0000            /SET BY "GNMV" TO # OF KING MOVES ILLEGAL BECAUSE OF CHECK
+MOB0,  0000
+MOB1,  0000
+CTNEED,        0000
+STRATG,        0000            /HOLDS STRATEGIC VALUE
+PC01,  0000            /POINTER FOR PUSH DOWN LIST #1
+PDLADR,        0000            /POINTER FOR PUSH DOWN LIST #2
+IFNZRO DEBUG<
+ENO,   0000
+ENOB,  0000
+>
+WHOWHI,        0000
+WHOBLK,        0000
+COMTMP,        0000
+BOGUS, 0000
+DOMAP, 0000
+\f*200
+START, IFNZRO LPTREE   <
+       TAD     (OUT
+       DCA     ZOUT    /MAKE SURE OUTPUT GOES TO THE TTY
+>
+       JMS  I  ZCRLF
+       PRINTO; NAME    /PRINT "CHEKMO-II"
+       JMS  I  ZCRLF
+       DCA     WHOSE
+       JMS     SETBRD  /SETUP THE BOARD
+COMPN, DCA     WHOWHI  /RESET SWITCH FOR THE USER TO PLAY WHITE
+       DCA     WHOBLK  /RESET SWITCH FOR THE USER TO PLAY BLACK
+COMMAN,        IPDL2           /INITIALIZE PUSH DOWN LISTS
+       IPDL1
+       ISZ     DOMAP   /MAKE SURE A PIECE MAP IS REALY DONE
+       JMS     QMATE   /TEST FOR SIDE TO MOVE IN CHECKMATE OR STALEMATE
+       TAD     WHOSE   /GET "WHOSE MOVE" SWITCH
+       SPA CLA         /IS IT WHITES OR BLACKS MOVE?
+       JMP     BLKMVE  /BLACKS
+       PRINTO; MESG23  /PRINT "W. "
+       TAD     WHOWHI  /GET THE "WHO PLAYS WHITE" SWITCH
+       SZA CLA         /DOES THE COMPUTER PLAY ON BEHALF OF WHITE?
+       JMP     CMOVE   /YES
+USER,  PRINTO; MESG24  /PRINT "YOUR MOVE?"
+       JMS  I  ZBEGIN  /SETUP TO ACCEPT A LINE OF INPUT
+       ION             /ACCEPT IT ANY TIME NOW
+       JMS  I  ZCHKIO  /WAIT FOR IT TO FINISH
+       JMS  I  ZGETC   /GET 1ST CHAR
+       AND     [0077   /ONLY NEED 6 BITS
+       RTL CLL         /MOVE THEM TO THE HIGH ORDER 6 BITS
+       RTL             /POSITION
+       RTL
+       DCA     COMTMP  /STORE FOR A WHILE
+       JMS  I  ZGETC   /GET 2ND CHAR
+       AND     [0077   /ONLY NEED 6 BITS
+       TAD     COMTMP  /WE NOW HAVE THE FIRST 2 INPUT CHARS PACKED
+       DCA     COMTMP  /6BIT STYLE IN 1 WORD
+       TAD     (COMLST-2/ADDRESS-2 OF THE COMMAND LIST
+       DCA     XR0     /TO AUTO INDEX REGISTER
+NUTHER,        ISZ     XR0     /INC POINTER TO POINT AT A 6BIT COMMAND IN THE COMMAND LIST
+       TAD  I  XR0     /GET A LEGAL 6BIT COMMAND
+       SNA             /WERE THERE ANY MORE TO GET?
+       JMP     UINP    /NO. THE USER MUST BE TRYING TO ENTER A MOVE
+       TAD     COMTMP  /YES. COMPARE WITH THE ONE THE USER JUST INPUTED
+       SZA CLA         /IS IT A MATCH?
+       JMP     NUTHER  /NO. TRY AGAIN
+       TAD  I  XR0     /YES. GET THE TRANSFER ADDRESS
+       DCA     TEMP
+       JMP  I  TEMP    /TRANSFER
+
+COMPW, ISZ     WHOWHI  /SET SWITCH TO INDICATE THAT WHITE IS PLAYED 
+       JMP     COMMAN  /BY THE COMPUTER
+
+COMPB, ISZ     WHOBLK  /SET THE SWITCH TO INDICATE THAT BLACK IS PLAYED
+       JMP     COMMAN  /BY THE COMPUTER
+
+COMBD, JMS     DISPLAY /DISPLAY THE BOARD ON THE TELLETYPE
+       JMP     COMMAN
+
+COMIP, JMS     INPUT   /GET THE INPUT OF A POSITION FROM THE TELLETYPE
+       JMP     COMPN
+
+UINP,  JMS  I  ZBEGIN  /REINIT THE KEYBOARD BUFFER POINTER
+       JMS     INMV    /WAS A LEGAL MOVE TYPED IN?
+       SKP CLA         /NO.
+       JMP     COMMAN  /YES. IT WAS ALSO MADE BY THE "INMOVE" SUBROUTINE
+       TAD     ("?     /PRINT A "?"
+       JMS  I  ZOUT    /TO INDICATE THE ERROR
+       JMS  I  ZCRLF
+       JMP     COMMAN  /TRY AGAIN
+
+BLKMVE,        PRINTO; MESG22  /BRINT "B. "
+       TAD     WHOBLK
+       SNA CLA         /DOES THE USER PLAY BLACK, OR DOES THE COMPUTER?
+       JMP     USER    /THE USER
+CMOVE, CLA             /COMPUTER NOW MAKES A MOVE
+       TAD     (3777   /INITIALIZE SEARCH VALUE TO PREVENT PRUNING AT THE FIRST PLY
+       DCA     CVAL1
+       DCA     PLY     /MAKE SURE PLY # IS 0 BEFORE ENTERING RECURSIVE EVALUATOR
+       IFNZRO  LPTREE<
+       TAD     (LPTOUT /SWITCH OUTPUT DEVICE TO LINE PRINTER
+       DCA     ZOUT
+       JMS  I  ZCRLF
+       JMS     DISPLA  /PRINT THE BOARD AT PLY 0
+       JMS     TABPLY
+>
+       CMA CLA
+       TAD     DEPTH   /DO A SHORT "PRE ANALYSIS"
+       SNA             /UNLESS WE ARE IN "BLITZ MODE" (DEPTH OF 1)
+       JMP     CMOVE1  /WHICH WE ARE
+       IAC
+       DCA     RDEPTH  /SAVE THE REAL DEPTH
+       IAC
+       DCA     DEPTH   /SET THE DEPTH TO 1 TEMPORARILY
+       JMS  I  ZLOOKA  /FIND OUT WHICH MOVE LOOKS THE BEST
+       TAD     RDEPTH
+       DCA     DEPTH   /RESTORE THE REAL DEPTH
+CMOVE1,        JMS  I  ZLOOKA  /FIGURE OUT WHICH MOVE TO MAKE
+       IFNZRO  LPTREE<
+       TAD     (OUT    /SWITCH OUTPUT DEV. BACK TO TTY
+       DCA     ZOUT
+>
+       TAD     BESTBL
+       DCA     IOMSW
+       TAD     BESTBL+1
+       DCA     IOMDW
+       TAD     BESTBL  /GET THE LAST MOVE TO WIN A COMPARE ON PLY #1
+       DCA     TOMAK1  /FROM THE TABLE OF BEST MOVES
+       TAD     BESTBL+1
+       DCA     TOMAK2
+       JMS  I  ZMKMV   /MAKE THE MOVE
+       JMS     OUTMV   /PRINT OUT THE MOVE JUST MADE
+       JMS     GNMVSM  /GENERATE MOVES FOR THE SIDE TO MOVE
+       TAD     GNCHEK  /GET # OF ATTACKS ON THE KING
+       SZA CLA         /IS THE SIDE TO MOVE IN CHECK?
+       TAD     ("+     /YES. PRINT A "+" TO INDICATE IT
+       JMS  I  ZOUT
+       JMS  I  ZCRLF
+       JMP     COMMAN
+
+PAGE
+\f/THIS SUBROUTINE GENERATES ALL MOVES FOR A SIDE
+/AND STICKS THEM INTO PDL2.
+/THIS SUBROUTINE IN ADDITION...
+/SETS "GNCNT" TO THE # OF MOVES GENERATED
+/SETS "CMSW" TO A NON-ZERO VALUE IF NO MOVES CAN BE GENERATED BECAUSE OF CHECKMATE
+/SETS "SMSW" TO A NON-ZERO VALUE IF NO MOVES CAN BE GENERATED BECAUSE OF STALEMATE
+/SETS "GNCHEK" TO THE NUMBER OF PIECES ATTACKING THE KING IF THE KING IS IN CHECK
+/SETS "KNGBLK" TO THE NUMBER OF ADJACENT SQUARES THE KING CANNOT MOVE
+/INTO BECAUSE THAT WOULD PUT HIM IN CHECK
+/SETS "MOBMOD" TO THE MOVING SIDES MOBILITY VALUE, BASED ON "GNCNT" AND
+/THE NUMBER OF MOVES THAT ARE ILLEGAL BECAUSE THEY DO NOT
+/GET THE KING OUT OF CHECK, BUT ARE OTHERWISE LEGAL, MINUS
+/50% OF THE TOTAL # OF QUEEN MOVES.
+/IF THIS ROUTINE IS CALLED WITH "BOGUS" SET TO A NON-ZERO VALUE
+/THIS SUBROUTINE WILL NOT PUT ANY MOVES IN PDL#2 OR TRY TO GENERATE
+/EN PASSANT PAWN CAPTURES
+/THIS SUBROUTINE SETS BOGUS TO ZERO BEFORE RETURNING
+GNMV,  0000
+       CLL CLA
+       DCA     MOBMOD  /INITIALIZE THE MOBMOD COUNTER
+       DCA     KNGBLK  /INITIALIZE THE BLOCKED KING MOVE COUNTER
+       DCA     CMSW    /INITIALIZE CHECKMATE SWITCH TO = NO CHECKMATE
+       DCA     SMSW    /INITIALIZE STALEMATE SWITCH TO = NO STALEMATE
+       DCA     QMVCNT  /INIT QUEEN MOVE COUNTER
+       TAD     CKING   /TEST FOR KING IN CHECK
+       DCA     TEMP
+       JMS     CHKATK  /CALL W/AC CLEAR---FIND ALL ATTACKS ON THE KING
+       TAD     PCNT    /GET # OF ATTACKS
+       DCA     GNCHEK  /SAVE THE # OF ATTACKS ON THE KING
+       DCA     GNCNT   /INITIALIZE GENERATION COUNT = 0
+       TAD     BOGUS
+       SZA CLA         /ARE WE GOING TO BE PUTTING MOVES IN PDL#2?
+       JMP     .+3     /NO. NO NEED FOR MARKERS THEN
+       PUSH2           /YES. FIRST THING TO DO IS PUSH 2 BLANK WORDS
+       PUSH2           /TO MARK LIST PLACE
+       TAD     CKING   /SETUP TO GENERATE KING MOVES
+       DCA     CNTR1
+       TAD     CNTR1   /SPLIT THE KINGS SQUARES ADDR UP INTO RANK AND FILE #'S
+       AND     [0007
+       DCA     GN2     /STORE THE FILE #
+       TAD     CNTR1
+       RTR
+       RAR
+       AND     [0007
+       DCA     GN1     /STORE THE RANK #
+       JMS     GKM     /GENERATE THOSE KING MOVES
+       TAD     GNCHEK  /GET THE NUMBER OF PIECES PRESENTLY CHECKING THE KING
+       RAR CLL         /NO COMMENT
+       SZA CLA         /IS THE KING IN DOUBLE CHECK?
+       JMP     TSCMSM  /YES. NO USE TRYING TO GENERATE MOVES BY OTHER PIECES
+       TAD     BOGUS   /NO.
+       SNA CLA         /IS THIS FOR REAL?
+       JMS     GNEP    /YES. GENERATE ANY POSIBLE 'EN PASSANT' PAWN CAPTURES NOW
+       TAD     GMAP    /ADDRESS-1 OF MAP
+       DCA     ITMP2   /STORE IT
+NXTSQR,        CLL CLA
+       TAD  I  ITMP2   /GET THE ADDRESS OF THE NEXT PIECE
+       SNA             /IS IT REALY A PIECE?
+       JMP     TSCMSM  /NO. MOVES ARE ALL GENERATED.
+       DCA     CNTR1   /YES. STORE ITS ADDRESS
+       IAC
+       DCA     CTNEED  /INITIALIZE THE CHECK TEST NEED SWITCH
+       TAD     CNTR1   /NOW STRIP RANK AND FILE NUMBERS FROM THE ADDRESS
+       AND     [0007
+       DCA     GN2     /STORE THE FILE NUMBER
+       TAD     CNTR1
+       RTR
+       RAR
+       AND     [0007
+       DCA     GN1     /STORE THE RANK NUMBER
+       TAD  I  CNTR1   /GET THE VALUE OF THE PIECE ON THE SQUARE
+       JMS     CLRFIX
+       TAD     [-PAWN
+       SNA             /IS IT A PAWN?
+       JMP     GPM     /YES
+       TAD     (PAWN-KNIGHT
+       SNA             /IS IT A KNIGHT?
+       JMP     GNM     /YES
+       TAD     (KNIGHT-BISHOP
+       SNA             /IS IT A BISHOP?
+       JMP     GBM     /YES
+       TAD     (BISHOP-ROOK
+       SNA             /IS IT A ROOK?
+       JMP     GRM     /YES
+       TAD     (ROOK-KING
+       SNA             /IS IT A KING?
+       JMP     NXTSQR  /YES. TRY NEXT PIECE SINCE KING MOVES HAVE ALLREADY BEEN GENERATED
+       TAD     (KING-QUEEN
+       SNA             /IS IT A QUEEN?
+       JMP     GQM     /YES
+       HLT             /NO. SOMTHINGS WRONG HERE !
+
+QMVCNT,        0000
+GNCHEK,        0000
+
+TSCMSM,        TAD     QMVCNT  /ADD # OF QUEEN MOVES & QUEEN MOVE REJECTS
+       CLL RAR         /DIVIDE BY 2
+       TAD     QMVCNT
+       CLL RAR         /AC WIL EQUAL 3/4 OF THE # OF QUEEN MOVES & REJECTS
+       CIA             /SUBTRACT
+       TAD     MOBMOD  /FROM THE MOBILITY MODIFIER
+       TAD     GNCNT   /ADD "REAL" MOBILITY IN WITH THE MOBILITY MODIFIER
+       DCA     MOBMOD
+       DCA     BOGUS
+       TAD     GNCNT   /GET # OF MOVES GENERATED
+       SZA CLA         /ANY?
+       JMP  I  GNMV    /YES: RETURN
+       TAD     GNCHEK  /NO. ITS EITHER A CHECKMATE OR STALEMATE POSITION
+       SNA             /WAS THE KING IN CHECK?
+       ISZ     SMSW    /NO. SET THE STALEMATE SWITCH
+       DCA     CMSW    /IF KING WAS IN CHECK (GNCHEK>=1) SET THE CHECKMATE SWITCH
+       JMP  I  GNMV    /RETURN
+
+\fIFNZRO        DEBUG<
+/ROUTINE TO ALLOW THE TIMING OF THE "GNMV" SUBROUTINE
+/CALLS IT 4000(OCTAL) TIMES, THEN HALTS
+TIME,  IPDL2
+       IPDL1
+       JMS     GNWMV
+       ISZ     .+2
+       JMP     .-4
+       4000            /# OF ITTERATIONS OF THE TIMING LOOP
+       HLT
+>
+
+/  SNO -- SKIP NO OVERFLOW
+/PSEUDO-INSTRUCTION TO TEST FOR RANK OR FILE OVERFLOW.
+/EFFECTIVLY SKIPS IF NO OVERFLOW. CALL WITH RANK OR FILE
+/NUMBER IN AC. RETURN WITH NUMBER IN AC IF NO OVERFLOW, GARBAGE OTHERWISE
+RFOFL, 0000
+       SPA             /LESS THAN ZERO?
+       JMP  I  RFOFL   /YES. RETURN
+       RTR             /SHIFT BIT 8 INTO LINK
+       RTR             /IF IT'S SET OVERFLOW HAS OCCURED
+       SZL             /GREATER THAN 7?
+       JMP  I  RFOFL   /YES. RETURN (WITH A GARBLED ACCUMULATOR)
+       RTL
+       RTL             /SHIFT THE WORD BACK TO NORMAL
+       ISZ     RFOFL   /INC RETURN ADDRESS
+       JMP  I  RFOFL   /RETURN
+PAGE
+\f
+/THIS ROUTINE GENERATES ALL THE MOVES OF A 'STRAIGHT LINE' MOVING
+/PIECE. ITMP0 MUST BE PRESET TO THE ADDRESS-1 OF THE MOVE GENERATION
+/DIRECTION LIST. LCNT MUST BE SET TO MINUS THE NUMBER OF 2-WORD
+/ENTRIES IN THAT LIST
+LINE,  CLA
+       TAD  I  ITMP0   /GET THE VERTICAL DIRECTION
+       DCA     DIR1    /SAVE IT
+       TAD  I  ITMP0   /GET THE HORIZINTAL DIRECTION
+       DCA     DIR2    /SAVE THAT ALSO
+       TAD     GN1
+       DCA     GN3
+       TAD     GN2
+       DCA     GN4
+LINEM, TAD     GN3     /BUILD SQUARE RANK NUMBER
+       TAD     DIR1
+       SNO             /IS THAT RANK REALY ON THE BOARD?
+       JMP     XXOX    /NO. IT DOES NOT EXIST
+       DCA     GN3
+       TAD     DIR2
+       TAD     GN4
+       JMS     XYZ
+       JMP     XXOX
+       TAD  I  CNTR1   /GET VALUE OF THE MOVING PIECE
+       JMS     CLRFIX
+       TAD     (-QUEEN
+       SNA CLA         /ARE WE TESTING FOR A LEGAL QUEEN MOVE?
+       ISZ     QMVCNT  /YES. INC QUEEN MOVE COUNTER
+       TAD     GNMSW
+       JMS  I  ZFNL    /DO FINAL TEST FOR KING CHECK
+       JMP     XOOO    /MOVE ILLEGAL: KING IS IN CHECK
+       TAD  I  TOADR   /GET VALUE OF THE 'TO' SQUARE
+       SZA CLA         /IS THE MOVE A CAPTURE?
+       STL RAR         /YES: SET CAPTURE BIT
+       DCA     GNMDW
+       JMS     GNSTR   /PUSH THE MOVE INTO THE STACK
+XOOO,  TAD  I  TOADR   /GET THE VALUE OF THE PIECE ON THE 'TO SQUARE'
+       SNA CLA         /WAS THE MOVE A CAPTURE?
+       JMP     LINEM   /NO. COULD BE MORE MOVES IN THIS DIRECTION
+XXOX,  CLA             /YES. NO MORE MOVES IN THIS DIRECTION
+       ISZ     LCNT    /DONE ALL DIRECTIONS?
+       JMP     LINE    /NO. TRY ANOTHER
+       JMP     NXTSQR  /YES. DONE WITH THIS PIECE. TRY NEXT
+LCNT,  0000
+
+/ROUTINE TO STORE THE MSW AND MDW IN THE PDL
+GNSTR, 0000
+       ISZ     GNCNT   /INC GENERATION COUNT
+       CLA
+       TAD     BOGUS
+       SZA CLA         /SHOULD THESE MOVES GO INTO PDL#2?
+       JMP  I  GNSTR   /NO. DONT PUT ANY THERE!
+       TAD     GNMSW   /GET MSW
+       PUSH2           /PUSH IT INTO THE LIST
+       TAD     GNMDW   /GET THE MDW
+       PUSH2           /PUSH IT INTO LIST
+       JMP  I  GNSTR   /RETURN
+
+/SUBROUTINE TO TEST IF THE 'TO' SQUARE IS OCCUPIED BY OWN PIECE
+/IF NOT SKIP FOR RETURN AND BUILD MSW
+XYZ,   0000
+       SNO             /DID IT GO OFF THE BOARD?
+       JMP  I  XYZ     /YES: RETURN
+       DCA     GN4     /NO: SAVE THIS HALF
+       JMS     BLDTO   /BUILD 'TO' ADDR
+       TAD  I  TOADR   /GET VALUE OF THE 'TO' SQUARE
+       JMS     CLRFIX
+       SMA SZA CLA     /OCCUPIED BY OWN PIECE?
+       JMP  I  XYZ     /YES: RETURN
+       JMS     BLDMSW  /NO: BUILD THE MSW
+       ISZ     XYZ     /INC RETURN ADDR
+       JMP  I  XYZ     /RETURN
+
+GQM,   CLA             /GENERATE QUEEN MOVES
+       TAD     [-10    /DO ALL DIRECTIONS
+       DCA     LCNT
+       TAD     (OTRX-1 /DIAGONAL  AND  ORTHOGONAL
+       DCA     ITMP0
+       JMP     LINE
+
+GRM,   CLA             /GENERATE ROOK MOVES
+       TAD     (-4     /DO ONLY HALF OF THE DIRECTIONS
+       DCA     LCNT
+       TAD     (OTR-1  /THE ORTHOGONAL ONES
+       DCA     ITMP0
+       JMP     LINE
+
+GBM,   CLA             /GENERATE BISHOP MOVES
+       TAD     (-4     /DO ONLY HALF OF THE DIRECTIONS
+       DCA     LCNT
+       TAD     (OTRX-1 /THE DIAGONAL ONES
+       DCA     ITMP0
+       JMP     LINE
+
+/SUBROUTINE TO BUILD AN MSW. CALL WITH ADDRESS OF THE 'TO SQUARE' IN LOCATION
+/'TOADR', AND THE LOCATION OF THE 'FROM SQUARE IN LOCATION "CNTR1". RETURN WITH THE
+/NEW MSW IN LOCATION 'GNMSW
+BLDMSW,        0000
+       CLA
+       TAD     TOADR
+       AND     [0077   /STRIP THE 'TO SQUARE' ADDRESS DOWN INTO 6BIT
+       DCA     GNMSW   /STORE IT TEMPORARILY
+       TAD     CNTR1
+       AND     [0077   /DO THE SAME FOR THE 'FROM SQUARE' ADDRESS
+       RTL CLL         /BUT INSTEAD OF STORING IT,  ROTATE IT INTO BITS 0-5
+       RTL
+       RTL
+       TAD     GNMSW   /NOW PACK THE 6BIT 'TO SQUARE' ADDRESS IN WITH IT
+       DCA     GNMSW   /STORE AWAY THE NEW MSW
+       JMP  I  BLDMSW  /RETURN
+
+PUSHIT,        0000            /PUSH ROUTINE
+       DCA  I  PDLADR  /PUT NEW ITEM ON TOP
+       ISZ     PDLADR  /PUSH
+       JMS     OFLOW   /TEST FOR LIST OVERLAP
+       JMP  I  PUSHIT  /RETURN
+
+POPIT, 0000            /POP ROUTINE
+       CLA CMA
+       TAD     PDLADR  /MOVE LIST POINTER DOWN
+       SMA             /MAKE SURE LIST DOESN'T GO WILD
+       HLT             /IT DID! MANY EXTRA POPS
+       DCA     PDLADR
+       TAD  I  PDLADR  /GRAB THE TOP WORD
+       JMP  I  POPIT   /RETURN WITH IT
+
+PUSH01,        0000
+       DCA  I  PC01    /PUT NEW ITEM ON TOP
+       CMA
+       TAD     PC01
+       DCA     PC01    /PUSH IT DOWN
+       JMS     OFLOW   /TEST FOR PDL OVERFLOW
+       JMP  I  PUSH01  /RETURN
+
+POP01, 0000
+       ISZ     PC01    /MOVE THE LIST POINTER DOWN
+       SKP CLA
+       HLT             /LOTS OF EXTRA POPS
+       TAD  I  PC01    /GRAB THE WORD ON TOP
+       JMP  I  POP01   /RETURN WITH IT
+
+PAGE
+\f/ROUTINE TO GENERATE ALL MOVES OF A KING OR KNIGHT
+/CALLED WITH THE MOVE GENERATION LIST ADDRESS-1 IN AC
+SNGMV, 0000
+       DCA     ITMP0   /STORE THE ADDRESS OF THE LIST
+       TAD     [7770
+       DCA     SCNT    /THERE ARE 8 DIRECTIONS
+       DCA     GNMDW   /INITIALIZE THE MDW
+       TAD     GN1
+       TAD  I  ITMP0
+       SNO             /OFF THE BOARD
+       JMP     XXXO-1  /YES TRY ANOTHER DIRECTION
+       DCA     GN3
+       TAD     GN2
+       TAD  I  ITMP0
+       JMS     XYZ
+       JMP     XXXO
+       TAD  I  CNTR1   /GET VALUE OF THE MOVING PIECE
+       JMS     CLRFIX
+       TAD     (-KING
+       SZA CLA         /IS IT A KING?
+       JMP     SNGKNT  /NO: ITS A KNIGHT
+       TAD     GNMSW   /YES
+       JMS     MMOVE   /MAKE THE KING MOVE
+       TAD     TOADR
+       DCA     TEMP    /TEST FOR AN ATTACK ON THE KINGS NEW SQUARE
+       IAC             /AND RETURN AFTER THE FIRST ATTACK IS FOUND
+       JMS     CHKATK
+       JMS     UMOVE   /UNMAKE THE MOVE
+       TAD     PCNT    /NOW WORRY ABOUT LEGAL OR ILLEGAL
+       SNA CLA         /WAS THE KING IN CHECK?
+       JMP     SNGLGL  /NO. MOVE IS LEGAL
+       ISZ     KNGBLK  /YES. INC BLOCKED KING MOVE COUNTER
+       JMP     XXXO    /GO TO THE ILLEGAL PLACE
+SNGKNT,        TAD     GNMSW
+       JMS  I  ZFNL    /DO FINAL CHECK
+       JMP     XXXO    /KING IS ATTACKED: KNIGHT MOVE NO GOOD
+SNGLGL,        TAD  I  TOADR   /GET VALUE OF THE 'TO' SQUARE
+       SZA CLA         /IS THE MOVE A CAPTURE?
+       CLA STL RAR     /YES: SET CAPTURE BIT
+       TAD     GNMDW
+       DCA     GNMDW   /STORE MDW AGAIN
+       JMS     GNSTR   /PUSH MOVE INTO LIST
+       SKP
+       ISZ     ITMP0   /FAILED ON FIRST LIST ELEMENT. PASS OVER SECOND
+XXXO,  CLA
+       ISZ     SCNT    /TESTED ALL DIRECTIONS?
+       JMP     SNGMV+4 /NO. TRY THE NEXT ONE
+       JMP  I  SNGMV   /YES. RETURN
+
+SCNT,  0000            /DIRECTION COUNTER
+
+
+GPM,   CLA             /GENERATE THE MOVES OF A PAWN
+       DCA     GNMDW
+       TAD     GN2
+       DCA     GN4
+       TAD     GN1
+       JMS     PST
+       JMP     GPM1    /MOVING 1 FORWARD BLOCKED: FORGET 2
+       TAD     GN1     /MOVING 1 FORWARD IS NOT BLOCKED. NOW TEST FOR 2
+       TAD     FSTRNK
+       SZA CLA
+       JMP     GPM1    /NOT THIS PAWNS FIRST MOVE. CAN'T MOVE 2
+       CLA STL RTR
+       DCA     GNMDW   /SETUP MDW TO INDICATE DOUBLE PAWN MOVE(TEMPORARY INDICATION)
+       TAD     GN3
+       JMS     PST
+       NOP             /MUST BE HERE CAUSE "PST" SUBROUTINE SOMETIMES RETURNS TO ADDRESS+2 OF THE CALLING JMS
+GPM1,  CLA             /NOW TEST CAPTURES
+       TAD     GN1
+       TAD     PONDIR
+       DCA     GN3
+       IAC
+       TAD     GN2
+       DCA     GN4
+       TAD     GN4
+       AND     [7770
+       SZA CLA         /CAN IT CAPTURE TO THE HIGH SIDE?
+       JMP     .+2     /NO. IT WAS ON THE EDGE OF THE HIGH SIDE
+       JMS     CAPTST
+       CLA CMA
+       TAD     GN2
+       SPA             /CAN IT CAPTURE TO THE LOW SIDE?
+       JMP     .+3     /NO. IT WAS ON THE LOW EDGE
+       DCA     GN4
+       JMS     CAPTST
+       JMP     NXTSQR
+\f/FOLLOWING ARE THE MOVE GENERATION DIRECTION LISTS
+OTRX,  1               /BISHOP MOVE DIRECTION LIST
+       -1
+
+       1
+       1
+
+       -1
+       -1
+
+       -1
+       1
+
+OTR,   1               /ROOK MOVE DIRECTION LIST
+       0
+
+       0
+       -1
+
+       0
+       1
+
+       -1
+       0
+
+KNLST, 2               /KNIGHT MOVE DIRECTION LIST
+       -1
+
+       2
+       1
+
+       1
+       2
+
+       -1
+       2
+
+       -2
+       1
+
+       -2
+       -1
+
+       -1
+       -2
+
+       1
+       -2
+
+PAGE
+\f/GENERATE KING MOVES
+GKM,   0000
+                       /FIRST TRY CASTLING
+       IAC CLA         /SETUP MDW TO INDICATE CASTLING
+       DCA     GNMDW
+       TAD     PONDIR  /BUILD THE ADDRESS OF THE KINGS ORIGINAL SQUARE
+       AND     (0070
+       TAD     (BOARD+4/KING IS ON FILE E
+       DCA     TEMP    /STORE THE ADDRESS OF THE KINGS ORIGINAL SQUARE
+       TAD  I  TEMP    /GET THE VALUE OF THE PIECE ON IT
+       JMS     CLRFIX
+       TAD     (-KING
+       SNA CLA         /IS IT A KING?
+       JMP     GKM2    /YES
+       TAD  I  CPSW    /NO. MAKE 'CPSW' REFLECT THIS
+       AND     [0007   /SAVE BITS 9-11 IN CASE HE IS CASTLED
+       TAD     (3000   /SET THE "NO MORE CASTLING" BITS
+       DCA  I  CPSW    /NO MORE CASTLING
+       JMP     GKM1    /BUT NORMAL KING MOVES ARE OK. GENERATE THEM NOW
+GKM2,  TAD     TEMP    /CHANGE 'TEMP' TO EQUAL THE ADDRESS OF THE QUEENS ROOK
+       AND     [7770   /BY CHANGING THE FILE TO A
+       DCA     TEMP    /STORE ADDRESS OF QUEENS ROOK
+       TAD  I  CPSW
+       RTL             /MOVE 'QUEEN ROOK BIT' INTO AC0
+       SPA CLA         /IF ITS SET THE QUEENS ROOK HAS MOVED
+       JMP     CAKR    /QUEENS ROOK HAS MOVED ALLREADY: TRY KING SIDE CASTLING
+       TAD  I  TEMP    /GET VALUE OF PIECE ON A1(A8)
+       JMS     CLRFIX
+       TAD     (-ROOK
+       SNA CLA         /IS IT A ROOK?
+       JMP     .+5     /YES. CONTINUE
+       TAD     (1000   /NO. 'QUEEN ROOK BIT' LIED
+       TAD  I  CPSW    /CHANGE IT TO GIVE A TRUE INDICATION
+       DCA  I  CPSW    /NO MARE CASTLING WITH THE QUEENS ROOK
+       JMP     CAKR    /AND TRY KING-SIDE CASTLING
+       TAD     GNCHEK  /FIND OUT IF THE KING IS IN CHECK
+       SZA CLA         /IS THE KING IN CHECK
+       JMP     CAKR    /YES. GO SEE IF THE KINGS ROOK HAS MOVED
+       ISZ     TEMP    /NO. INC 'TEMP' SO THAT IT EQUALS THE ADDRESS OF B1(B8)
+       TAD  I  TEMP    /GET THE VALUE OF THE SQUARE
+       SZA CLA         /IS IT EMPTY?
+       JMP     CAKR    /NO. TRY KING-SIDE CASTLING
+       ISZ     TEMP    /INC 'TEMP' SO THAT IT EQUALS THE ADDRESS OF C1(C8)
+       TAD  I  TEMP    /GET THE VALUE OF THE SQUARE
+       SZA CLA         /IS IT EMPTY?
+       JMP     CAKR    /NO. TRY KING-SIDE CASTLING
+       JMS     CHKATK  /CHECK FOR AN ATTACK ON THAT SQUARE BY AN ENEMY PIECE
+       TAD     PCNT    /GET # OF ATTACKS
+       SZA CLA         /ANY?
+       JMP     CAKR    /YES. Q-SIDE CASTLING ILLEGAL, TRY K-SIDE
+       ISZ     TEMP    /INC 'TEMP' TO EQUAL ADDRESS OF D1(D8)
+       TAD  I  TEMP    /GET THE SQUARES VALUE
+       SZA CLA         /IS IT OCCUPIED?
+       JMP     CAKR    /YES. TRY K-SIDE CASTLING INSTEAD
+       JMS     CHKATK  /CHECK FOR ATTACKS ON SQUARE D1(D8)
+       TAD     PCNT    /GET # OF ATTACKS
+       SZA CLA         /ARE THERE ANY?
+       JMP     CAKR    /YES. TRY K-SIDE CASTLING
+       TAD     PONDIR  /NO. QUEEN SIDE CASTLING IS LEGAL!!
+       AND     (7070   /BUILD AN MSW FOR QUEEN SIDE CASTLING
+       TAD     (0402
+       DCA     GNMSW   /STORE THE NEW MSW
+       JMS     GNSTR   /PUSH THE MOVE ONTO PDL2
+CAKR,  CLA
+       TAD  I  CPSW    /TRY TO GENERATE A KING SIDE CASTLING MOVE
+       RAL             /MOVE 'KING ROOK BIT' OF THE PSW INTO AC0
+       SPA CLA         /IS IT SET?
+       JMP     GKM1    /YES. KINGS ROOK HAS ALLREADY MOVED
+       TAD     TEMP    /NO. BUILD ADDRESS OF THE KINGS ROOK
+       AND     [7770
+       TAD     [0007
+       DCA     TEMP
+       TAD  I  TEMP    /GET THE VALUE OF THE PIECE ON H1(H8)
+       JMS     CLRFIX
+       TAD     (-ROOK
+       SNA CLA         /IS IT A ROOK?
+       JMP     .+5     /YES CONTINUE
+       CLA STL RTR     /NO. 'KING ROOK BIT' LIED: FIX IT
+       TAD  I  CPSW
+       DCA  I  CPSW
+       JMP     GKM1    /GO TRY PROPER STYLE KING MOVES
+       TAD     GNCHEK  /TEST FOR KING IN CHECK
+       SZA CLA         /IS THEKING IN CHECK?
+       JMP     GKM1    /YES. GO TRY REGULAR STYLE KING MOVES
+       TAD     TEMP    /NO. CONTINUE TRYING FOR KING SIDE CASTLING
+       TAD     (-2
+       DCA     TEMP    /SET 'TEMP' = THE ADDRESS OF SQUARE E1(E8)
+       JMS     CAKR1   /TEST TO SEE IF THE SQUARE IS OCUPIED OR ATTACKED
+       ISZ     TEMP    /NO. INC 'TEMP' TO EQUAL THE ADDRESS OF F1(F8)
+       JMS     CAKR1   /TEST THE SQUARE FOR OCCUPATION OR ATTACKS
+       TAD     PONDIR  /NO. BUILD AN MSW CAUSE KING SIDE CASTLING IS LEGAL!!
+       AND     (7070
+       TAD     (0406
+       DCA     GNMSW
+       ISZ     GNMDW   /INC MDW SO THAT IT INDICATES KING SIDE CASTLING
+       JMS     GNSTR   /STORE THE MOVE IN PDL2
+GKM1,  CLA
+       TAD     (OTRX-1 /NOW GENERATE 'NORMAL' KING MOVES
+       JMS     SNGMV
+       JMP  I  GKM     /RETURN
+
+\fCAKR1,        0000
+       TAD  I  TEMP    /GET THE VALUE OF THE SQUARE
+       SZA CLA         /IS THERE A PIECE ON IT?
+       JMP     GKM1    /YES. MOVE ON TO NORMAL KING MOVES
+       JMS     CHKATK  /NO. TEST FOR ATTACKS ON THAT SQUARE BY ENEMY PIECES
+       TAD     PCNT    /GET # OF ATTACKS
+       SZA CLA         /ANY?
+       JMP     GKM1    /YES.
+       JMP  I  CAKR1   /RETURN
+
+GNM,   CLA             /GENERATE KNIGHT MOVES
+       TAD     (KNLST-1/GET ADDRESS OF THE KNIGHT MOVE GENERATION LIST
+       JMS     SNGMV
+       JMP     NXTSQR
+PAGE
+\f/SUBROUTINE TO BUILD A 'TO SQUARE' ADDRESS
+/RETURN WITH ADDRESS IN LOC 'TOADR'
+BLDTO, 0000
+       TAD     GN3     /GET RANK # AND ROTATE IT
+       RTL CLL         /INTO ITS PROPER PLACE(BITS 6-8)
+       RAL
+       TAD     GN4     /ADD IN THE FILE #
+       TAD     [BOARD  /ADD IN BOARD ADDRESS CONSTANT
+       DCA     TOADR   /STORE THE ADDRESS
+       JMP  I  BLDTO   /RETURN
+
+
+/SUBROUTINE TO FIX THE COLOR PROBLEM, AND ALLOW ANY SUBROUTINE
+/TO WORK WITH BLACK PIECES AS WELL AS WHITE PIECES
+CLRFIX,        0000
+COLR,  HLT             /=NOP FOR WHITE, =CIA FOR BLACK
+       JMP  I  CLRFIX  /RETURN
+\f/SUBROUTINE TO GENERATE 'EN PASSANT' PAWN CAPTURES
+/IF PAWNS MYSTERYOUSLY CHANGE COLOR, THIS ROUTINE IS THE LIKLEY SUSPECT
+GNEP,  0000
+       CMA CLA         /-1 TO THE AC
+       DCA     CTNEED  /ALWAYS TEST FOR KING IN CHECK
+       TAD     LSTMV   /GET SOME INFORMATION ON THE LAST MOVE MADE
+       AND     (0770   /ISOLATE THE 'DOUBLE PAWN MOVE' INFO
+       SNA             /WAS THE LAST MOVE MADE A DOUBLE PAWN MOVE?
+       JMP  I  GNEP    /NO. 'EN PASSANT' CAPTURES ARE NOT POSIBLE. RETURN
+       RTR CLL         /YES. ROTATE THE INFO(6BIT 'TO ADDRESS') INTO BITS 6-11
+       RAR
+       TAD     [BOARD  /ADD IN BOARD ADDRESS CONSTANT
+       DCA     CNTR1   /STORE THE ADDRESS OF THE CAPTURED PAWN
+       TAD     CNTR1
+       DCA     GNEPTM  /STORE THE ADDRESS OF THE CAPTURED PAWN
+       DCA  I  GNEPTM  /TAKE THE PAWN OFF THE BOARD NOW FOR CONVIENIENCE
+       TAD     CNTR1   /BUILD A 'TO RANK' THEN A 'TO ADDRESS'
+       RTR CLL         /FIRST ROTATE THE OLD 'TO RANK' INTO BITS 9-11
+       RAR
+       AND     [0007
+       TAD     PONDIR  /NEW 'TO RANK' IS 1 MOVE GREATER THAN THE OLD ONE
+       RTL CLL         /ROTATE THE 'TO RANK' BACK INTO PLACE AGAIN
+       RAL
+       DCA     GNMDW   /STORE IT TEMPORARILY
+       TAD     CNTR1   /GET THE ADDRESS OF THE PAWN BEING CAPTURED
+       AND     (7707   /CLEAR OUT ROOM FOR THE NEW 'TO RANK'
+       TAD     GNMDW   /ADD THE NEW 'TO RANK' IN
+       DCA     TOADR   /STORE THE 'TO SQUARE' ADDRESS
+       TAD     (4003   /4003 IS THE MDW REPRESENTING AN 'EN PASSANT' CAPTURE
+       DCA     GNMDW   /STORE THE NEW MDW
+       ISZ     CNTR1   /TRY THE ADDJACENT FILE ON THE HIGH SIDE FIRST
+       TAD     CNTR1
+       AND     [0007
+       SNA CLA         /IS THERE REALY A FILE ON THAT SIDE?
+       JMP     GNOTF   /NO. TRY THE OTHER SIDE
+       TAD  I  CNTR1   /GET THE VALUE OF THE PIECE ON THE SQUARE
+       JMS     CLRFIX
+       TAD     [-PAWN
+       SZA CLA         /IS IT A PAWN?
+       JMP     GNOTF   /NO. TRY THE OTHER ADDJACENT FILE
+       JMS     BLDMSW  /YES. MOVE SEEMS OK. BUILD AN MSW FOR IT
+       TAD     GNMSW   /LOAD THE MSW INTO THE AC
+       JMS  I  ZTSTCH  /TEST IF THE MOVE IS ILLEGAL BY VIRTUE OF KING IN CHECK
+       SKP             /IT IS ILLEGAL DONT STORE IT IN THE PUSH DOWN LIST
+       JMS     GNSTR   /MOVE IS LEGAL STORE IT IN PDL2
+GNOTF, CLA
+       TAD     CNTR1   /GET THE 'FROM SQUARE ADDRESS'
+       TAD     (-2     /CHANGE IT TO POINT TO THE  ADDJACENT FILE ON THE OTHER SIDE
+       DCA     CNTR1
+       TAD     GNEPTM  /NOW TEST IF THAT FILE REALY EXISTS
+       AND     [0007   /IF THE FILE IS 0 WE'RE ON THE EDGE
+       SNA CLA         /DOES THE FILE REALY EXIST, OR IS THE PAWN ON THE EDGE OF THE BOARD
+       JMP     GNEPDN  /DOES NOT EXIST!
+       TAD  I  CNTR1   /GET THE VALUE OF THE PIECE ON THAT SQUARE
+       JMS     CLRFIX
+       TAD     [-PAWN
+       SZA CLA         /IS IT A PAWN?
+       JMP     GNEPDN  /NO
+       JMS     BLDMSW  /YES. BUILD AN MSW
+       TAD     GNMSW
+       JMS I   ZTSTCH  /IS THE KING IN CHECK IF THAT MOVE IS MADE
+       SKP             /YES. DONT STORE THE MOVE IN THE PDL
+       JMS     GNSTR   /NO. STORE THE MOVE IN PDL2
+GNEPDN,        TAD     [-PAWN
+       JMS     CLRFIX
+       DCA  I  GNEPTM  /REPLACE THE PAWN THAT WAS REMOVED EARLIER
+       JMP  I  GNEP    /RETURN
+GNEPTM,        0000            /LOCATION FOR STORAGE OF THE CAPTURED PAWNS ADDRESS
+\f
+/SUBROUTINE TO MAP THE PIECES IF NECCESARY(IF DOMAP=-1).
+/MAP IS IN TWO PARTS, 1 FOR EACH COLOR
+/WHITE MAP STARTS AT LOC 7400. BLACK MAP STARTS AT LOC 7424.
+/MAP FORMAT-- 1 WORD PER PIECE, REPRESENTING THE ADDRESS OF THAT PIECE
+MAPEC, 0000
+       CLA CMA
+       TAD     [BOARD  /SETUP BOARD ADDRESS
+       DCA     ITMP2
+       TAD     DOMAP
+       SNA CLA         /IS A MAP REALY NECCESARY?
+       JMP  I  MAPEC   /NO. RETURN
+       DCA     DOMAP
+       TAD     (MAP-1  /YES. SETUP MAP OF WHITES PIECE ADDRESSES
+       DCA     ITMP0
+       TAD     (MAP+23 /SETUP MAP OF BLACK PIECE ADDRESSES
+       DCA     ITMP1
+       TAD     (-100   /SETUP COUNT FOR 100(OCTAL) SQUARES ON THE BOARD
+       DCA     TEMP4
+       TAD  I  ITMP2   /GET VALUE OF THE PIECE ON THE SQUARE
+       SZA             /IS SQUARE OCCUPIED?
+       JMP     MAPOC   /YES
+MAPGO, ISZ     TEMP4   /FINISHED BOARD YET?
+       JMP     .-4     /NO. DO MORE SQUARES
+       DCA  I  ITMP0   /YES. PUT A 0000 AT THE END OF THE WHITE MAP
+       DCA  I  ITMP1   /ALSO AT THE END OF THE BLACK MAP
+       JMP  I  MAPEC   /RETURN
+MAPOC, SPA             /IS IT WHITE OR BLACK?
+       JMP     MAPOCB  /ITS BLACK
+       TAD     (-KING  /ITS WHITE. IS IT A KING?
+       SZA CLA
+       JMP     .+3     /NO
+       TAD     ITMP2   /YES
+       DCA     WKING   /STORE ADDRESS OF THE WHITE KING
+       TAD     ITMP2
+       DCA  I  ITMP0   /PUT IT IN THE WHITE MAP WHATEVER IT IS
+       JMP     MAPGO
+MAPOCB,        TAD     (KING   /IS IT THE BLACK KING?
+       SZA CLA
+       JMP     .+3     /NO. PROCEDE NORMALY
+       TAD     ITMP2   /YES, GET ITS ADDRESS
+       DCA     BKING   /STORE IT
+       TAD     ITMP2   /GET THE ADDRESS
+       DCA  I  ITMP1   /EITHER WAY, PUT IT IN THE BLACK MAP
+\f      JMP     MAPGO
+PAGE
+\f/SUBROUTINE TO CHECK FOR A 'DOUBLE PAWN MOVE', AND MODIFY THE
+/MDW IF IT IS. ALSO TEST IF A LEGAL PAWN MOVE IS ALSO A PROMOTING MOVE
+/APPROPRIATE ACTION IS TAKEN IF IT IS. IN ANY CASE THIS ROUTINE CALLS
+/'GNSTR' TO STORE MSW & MDW IN PDL2
+PROMCK,        0000
+       CLA
+       TAD     GNMDW   /GET THE MOVE DATA WORD
+       RTL             /ROTATE AC BIT 1 INTO THE LINK
+       SZL CLA         /DOES IT SAY 'DOUBLE PAWN MOVE'?
+       JMP     PROM1   /YES. SET THE MDW TO SHOW IT
+       TAD     GN3     /BUILD THE RANK OF THE PAWN, IF IT WERE TO BE
+       TAD     PONDIR  /MOVED ONE MORE TIME
+       SNO             /IS IT STILL ON THE BOARD?
+       SKP CLA         /NO: IT'S A PROMOTIMG MOVE
+       JMP     PPLSTR  /YES: IT'S NOT A PROMOTING MOVE
+       TAD     GNMDW
+       TAD     [0004   /SET 'PAWN PROMOTION BIT' (BIT 9) OF THE MDW
+       DCA     GNMDW
+       JMS     GNSTR   /STORE PROMOTION TO KNIGHT MOVE IN PDL2
+       ISZ     GNMDW   /CHANGE MDW TO INDICATE PROMOTION TO A BISHOP
+       JMS     GNSTR   /STORE MOVE IN PDL2
+       ISZ     GNMDW   /CHANGE MDW TO INDICATE PROMOTION TO A ROOK
+       JMS     GNSTR   /STORE MOVE IN PDL2
+       ISZ     GNMDW   /CHANGE THE MDW TO INDICATE PROMOTION TO A QUEEN
+PPLSTR,        JMS     GNSTR   /STORE MOVE IN PDL2
+       JMP  I  PROMCK  /RETURN
+PROM1, CLL RTR         /CLEAR LINK(BIT 1)AND REROTATE THE MDW BACK INTO POSITION
+       DCA     GNMDW   /RESTORE THE MDW
+       TAD     GNMSW   /NOW GET THE MSW
+       AND     [0077   /EXTRACT 'TO SQUARE' INFO
+       RTL CLL         /ROTATE THE INFO SO THAT IT FITS IN MDW BITS 3-8
+       RAL
+       TAD     GNMDW   /ADD IT TO THE MDW
+       DCA     GNMDW   /THERES THE NEW MDW!!!
+       JMP     PPLSTR  /IF THE PAWN MOVE A DOUBLE MOVE, IT WASN'T QUEENING
+
+/SUBROUTINE TO CHECK FOR LEGAL PAWN CAPTURES
+CAPTST,        0000
+       JMS     BLDTO   /BUILD THE ADDRESS OF THE 'TO' SQUARE
+       TAD  I  TOADR   /GET THE VALUE OF THE SQUARE
+       JMS     CLRFIX
+       SMA CLA         /IS IT AN ENEMY PIECE?
+       JMP  I  CAPTST  /YES. CAN ONLY CAPTURE OPPOSING PIECES
+       JMS     BLDMSW  /NO. CAPTURE SEEMS LEGAL. BUILD AN MSW
+       CLA STL RAR     /BUILD AN MDW WHICH INDICATES CASTLING
+       DCA     GNMDW
+       TAD     GNMSW   /FINAL TEST FOR MOVE LEGALITY COMING UP
+       JMS  I  ZFNL    /IS KING IN CHECK?
+       JMP  I  CAPTST  /YES: MOVE ILLEGAL
+       JMS     PROMCK  /NO: CHECK FOR PROMOTION
+       JMP  I  CAPTST  /RETURN
+
+\fPST,  0000
+       TAD     PONDIR
+       DCA     GN3
+       JMS     BLDTO   /BUILD THE 'TO' ADDR
+       TAD  I  TOADR   /GET VALUE OF 'TO' SQUARE
+       SZA CLA         /IS THE SQUARE OCCUPIED?
+       JMP  I  PST     /YES, MOVE NO GOOD
+       JMS     BLDMSW  /NO. PACK IT INTO 12 BITS.
+       TAD     GNMSW
+       JMS  I  ZFNL    /IS KING IN CHECK?
+       SKP             /YES: MOVE NO GOOD
+       JMS     PROMCK  /MOVE IS LEGAL. CHECK FOR PAWN PROMOTION
+       ISZ     PST     /INC RETURN ADDRESS IF "TO" SQUARE WAS NOT OCCUPIED
+       JMP  I  PST
+
+/TEST FOR LEGAL KNIGHT CAPTURE: 
+ISLNM, CLA CLL CMA
+       RAL             /AC WILL=-2
+       DCA     TOOS
+       TAD     M1      /COMPARE RANKS
+       CIA
+       TAD     M3
+       SMA
+       CIA
+       IAC
+       SNA
+       JMP     .+5
+       IAC
+       SZA CLA
+       JMP     BATAK
+       ISZ     TOOS
+       TAD     M2
+       CIA
+       TAD     M4
+       SMA
+       CIA
+       IAC
+       SNA
+       JMP     .+5
+       IAC
+       SZA CLA
+       JMP     BATAK
+       ISZ     TOOS
+       SKP
+       JMP     BATAK
+       ISZ     TOOS
+       JMP     BATAK
+       JMP     GATAK
+TOOS,  0000
+       \f
+PDLIN, 0000            /INITIALIZE THE LIST
+       CLA
+       TAD     (PDLS
+       DCA     PDLADR  /INITIALIZE LIST ADDRESS
+       JMP  I  PDLIN   /RETURN
+
+\fIPDL01,       0000            /INITIALIZE PUSH DOWN LIST #1
+       CLA
+       TAD     (PDLS+777
+       DCA     PC01
+       JMP  I  IPDL01  /RETURN
+
+/SUBROUTINE TO TEST FOR PUSH DOWN LIST OVERFLOW
+OFLOW, 0000
+       TAD     PC01    /GET ADDR OF BOTTOM PDL#1
+       CIA             /COMPARE IT WITH
+       TAD     PDLADR  /THE ADDR OF BOTTOM PDL#2
+       SZA CLA         /ARE THEY THE SAME?
+       JMP  I  OFLOW   /NO. RETURN.
+/PUSH DOWN LIST HAS OVERFLOWED!!!!!
+       IFNZRO  LPTREE<
+       TAD     (OUT
+       DCA     ZOUT    /MAKE SURE OUTPUT GOES TO THE TTY
+>
+       PRINTO; MESG26  /PRINT "I RESIGN"
+       JMS  I  ZCRLF
+       HLT
+MESG26,        TEXT \I RESIGN\
+
+PAGE
+\f
+/CHECK FOR LEGAL KING MOVE
+ISLKM, CLA
+       TAD     M1
+       CIA
+       TAD     M3
+       SMA
+       CIA
+       SZA
+       IAC
+       SZA CLA
+       JMP     BATAK
+       TAD     M2
+       CIA
+       TAD     M4
+       SMA
+       CIA
+       SZA
+       IAC
+       SNA CLA
+       JMP     GATAK
+       JMP     BATAK
+
+/ROUTINE TO CHECK FOR PIECES IN THE MOVE ROW
+ROW,   0000
+       CLA
+       TAD     M1
+       CIA
+       TAD     M3
+       RAL CLL         /GET THE SIGN
+       SZA CLA
+       TAD     (10
+       SZL
+       CIA
+       DCA     TEMP3
+       TAD     M4
+       CIA
+       TAD     M2
+       RAL CLL         /GET THE SIGN
+       SZA CLA
+       IAC
+       SNL
+       CIA
+       TAD     TEMP3
+       DCA     TMP
+       TAD     TMATK   /GET THE SQUARE OF THE ATTACKER
+       DCA     TEMP3   /COPY IT SO WE DONT HAVE TO DESTROY THE ORIGINAL
+MIDLIN,        TAD     TEMP3   /SET TO NEXT SQUARE
+       TAD     TMP
+       DCA     TEMP3
+       TAD     TEMP3   /COMPARE IT WITH THE ATTACKED SQUARE
+       CIA
+       TAD     TEMP
+       SNA CLA         /ARE THEY THE SAME?
+       JMP  I  ROW     /YES RETURN
+       TAD  I  TEMP3   /NO. GET THE VALUE OF THE PIECE ON THE SQUARE
+       SNA CLA         /IS THE SQUARE EMPTY?
+       JMP     MIDLIN  /YES- KEEP GOING UNTIL WE FIND ONE THAT ISN'T
+       ISZ     ROW     /NO. ITS NOT A LEGAL ATTACK--INC RETURN ADDRESS
+       JMP  I  ROW     /RETURN
+
+/CHECK FOR LEGAL BISHOP MOVE
+SUBR1, 0000
+       CLA
+       TAD     M1
+       CIA
+       TAD     M3
+       SMA
+       CIA
+       DCA     TEMP3
+       TAD     M2
+       CIA
+       TAD     M4
+       SPA
+       CIA
+       TAD     TEMP3
+       SZA CLA         /ARE BOTH SQUARES ON THE SAME DIAGONAL?
+       JMP  I  SUBR1   /NO
+       JMS     ROW     /YES. FIND OUT IF ANY PIECES ARE BLOCKING THAT DIAGONAL
+       ISZ     SUBR1   /NONE FOUND -- INC RETURN ADDRESS
+       JMP  I  SUBR1   /RETURN
+
+/CHECK FOR LEGAL ROOK MOVE
+SUBR2, 0000
+       CLA
+       TAD     M1
+       CIA
+       TAD     M3
+       SNA CLA
+       JMP     .+6     /SAME RANK. FORGET FILE
+       TAD     M2
+       CIA
+       TAD     M4
+       SZA CLA
+       JMP  I  SUBR2   /BOTH RANK AND FILE CHANGED?!
+       JMS     ROW
+       ISZ     SUBR2   /NO PIECES IN THE WAY-- INC RETURN ADDRESS
+       JMP  I  SUBR2
+
+/CHECK FOR LEGAL QUEEN MOVE
+/GO TO 'GATAK' IF IT IS
+ISLQM, JMS     SUBR2   /CHECK FOR A QUEEN MOVE 'ROOK STYLE'
+       SKP             /NOT FOUND
+       JMP     GATAK   /FOUND
+       JMS     SUBR1   /IF NOT CHECK FOR BISHOP STYLE QUEEN MOVE
+       JMP     BATAK   /NIETHER ONE
+       JMP     GATAK   /FOUND BISHOP STYLE QUEEN MOVE
+
+ISLBM, CLA
+       JMS     SUBR1
+       JMP     BATAK
+       JMP     GATAK
+
+ISLRM, CLA
+       JMS     SUBR2
+       JMP     BATAK
+       JMP     GATAK
+
+PAGE
+
+\f
+/SUBROUTINE TO TEST IF A SQUARE IS ATTACKED BY A PIECE.
+/ALSO FINDS OUT HOW MANY ATTACKERS, AND THE VALUE OF THE LEAST VALUABLE ATTACKER
+/CALL WITH ADDRESS OF SQUARE TO BE TESTED IN LOCATION 'TEMP'
+/ALSO PONDIR AND COLR SET IN REVERSE OF THE ATTACKERS
+/AND THE ATTACKERS PIECE LIST ADDRESS-1 IN LOC 'OMAP'
+/RETURNS WITH NUMBER OF ATTACKERS IN LOC. 'PCNT', THE ADDRESS
+/OF THE LEATST VALUABLE ATTACKER IN LOC "PSQR" AND VALUE OF THE LEAST
+/VALUABLE ATTACKER IN LOC. 'PVAL'
+/IF THE VALUE OF THE LEAST VALUABLE ATTACKER, AND THE # OF ATTACKERS
+/IS NOT IMPORTANT, CALL WITH AC NOT =0
+/RETURN IN THIS CASE IS DIRECTLY AFTER THE FIRST ATTACK IS FOUND
+CHKATK,        0000
+       DCA     CKMODE  /SET RETURN MODE SWITCH
+       CLA CMA
+       DCA     TMATK   /INITIALIZE SWITCH ENABLING 1 LOOPBACK IN THE PAWN SECTION
+       DCA     PCNT    /INITIALIZE PIECE COUNT
+       DCA     PVAL    /INITIALIZE PIECE VALUE TO 0
+       DCA     PSQR    /INIT PIECE ADDRESS
+       TAD     TEMP    /GET SQUARE TO BE CHECKED
+       AND     [0007   /EXTRACT THE FILE #
+       DCA     M4      /RECORD IT
+       TAD     TEMP    /GET SQUARE ADDR AGAIN
+       RTR CLL         /ROTATE RIGHT 3 BITS SO THAT THE RANK CAN
+       RAR             /BE EXTRACTED IN A SIMILAR MANNER
+       AND     [0007
+       DCA     M3      /STORE RANK #
+       TAD     PONDIR  /CHECK FOR AN ATTACK BY A PAWN
+       TAD     M3
+       SNO             /IMPOSIBLE RANK?
+       JMP     TAG1    /YES. FORGET PAWN ATTACKS
+       DCA     M1      /NO. SAVE THE RANK
+       IAC CLA         /NOW BUILD A FILE
+TAG0,  TAD     M4
+       SNO             /IS THAT FILE REALY ON THE BOARD?
+       JMP     TAG3    /NO.
+       RTR CLL         /YES: PASTE TOGETHER THE ADDRESS OF THIS HYPOTHETICAL PAWN
+       RAR
+       TAD     M1
+       RTL
+       RAL
+       TAD     [BOARD  /ADD IN BOARD ADDRESS CONSTANT
+       DCA     TEMP1   /VOLIA! STORE THE ADDRESS
+       TAD  I  TEMP1   /GET THE VALUE OF THE PIECE AT THAT ADDR
+       JMS     CLRFIX
+       TAD     (PAWN
+       SZA CLA         /PER CHANCE A PAWN?
+       JMP     TAG3    /NO: TRY NEXT PIECE 
+TAG2,  ISZ     PCNT    /YES. ITS A PAWN ATTACK. INC PIECE COUNT
+       TAD  I  TEMP1   /SET LOWEST VALUED ATTACKING PIECE VALUE = PAWN
+       DCA     PVAL
+       TAD     TEMP1   /ALSO SET THE ADDRESS OF THE LOWEST ATTACKING PIECE
+       DCA     PSQR    /EQUAL TO THE ADDRESS OF THE PAWN
+       TAD     CKMODE  /TEST FOR 'FAST RETURN' MODE
+       SZA CLA
+       JMP  I  CHKATK  /RETURN NOW
+TAG3,  ISZ     TMATK   /TESTED FOR PAWNS ON BOTH ADJACENT FILES?
+       JMP     TAG1    /YES
+       CMA CLA         /NO. LOOP BACK FOR THE OTHER FILE
+       JMP     TAG0
+TMATK, 0000
+CKMODE,        0000
+TMATK1,        0000
+TAG1,  CLA
+       TAD     OMAP    /GET ADDRESS-1 OF THE ATTACKERS PIECE MAP
+       DCA     TOMAK1
+BATAK, ISZ     TOMAK1  /INC THE PIECE TABLE ADDRESS
+       TAD  I  TOMAK1  /GET THE ADDRESS OF THE PIECE
+       SNA             /IS IT REALY A PIECE, OR IS THE SQUARE BLANK?
+       JMP  I  CHKATK  /BLANK. TABLE EXAUSTED:RETURN
+       DCA     TMATK   /NO. SOMTHINGS THERE. STORE ITS ADDRESS
+       TAD     TMATK   /GET THE ATTACKERS SQR ADDR
+       CIA
+       TAD     TEMP    /COMPARE WITH THE ATTACKED SQUARS ADDRESS
+       SNA CLA         /ARE THEY THE SAME?
+       JMP     BATAK   /YES.PIECES CANNOT ATTACK THEMSELVES
+       TAD  I  TMATK
+       JMS     CLRFIX
+       TAD     (PAWN
+       SNA CLA         /IS IT A PAWN?
+       JMP     BATAK   /YES, DONE PAWNS ALLREADY, TRY NEXT PIECE
+       TAD     TMATK   /NO GET SQUARE ADDRESS
+       AND     [0007   /EXTRACT THE FILE
+       DCA     M2      /STORE IT
+       TAD     TMATK   /GET ADDRESS AGAIN
+       RTR             /ROTATE RANK # INTO BITS 9-11
+       RAR
+       AND     [0007   /ISOLATE RANK INFO
+       DCA     M1      /STORE IT
+       TAD  I  TMATK   /GET THE VALUE OF THE PIECE AGAIN
+       JMS     CLRFIX
+       TAD     (ROOK   /NOW IDENTIFY IT
+       SNA             /IS IT A ROOK?
+       JMP     ISLRM   /YES
+       TAD     (-ROOK+BISHOP
+       SNA             /IS IT A BISHOP?
+       JMP     ISLBM   /YES
+       TAD     (-BISHOP+KNIGHT
+       SNA             /IS IT A KNIGHT?
+       JMP     ISLNM   /YES
+       TAD     (-KNIGHT+KING
+       SNA             /IS IT A KING?
+       JMP     ISLKM   /YES
+       TAD     (-KING+QUEEN
+       SNA CLA         /IS IT A QUEEN?
+       JMP     ISLQM   /YES
+       JMP     BATAK   /NO? WHATEVER WAS THERE MUST HAVE MOVED! PLEASE TO IGNORE.
+
+\f/WE REACH HERE IF AN ATTACK ON THE SQUARE IN QUESTION IS FOUND
+GATAK, ISZ     PCNT    /INC ATTACK COUNTER
+       TAD     CKMODE  /TEST FOR FAST RETURN
+       SZA CLA         /'FAST RETURN' MODE?
+       JMP  I  CHKATK  /YES. RETURN NOW
+       CMA CLA
+       TAD     PCNT
+       SNA CLA         /IS THIS THE FIRST ATTACK FOUND?
+       JMP     TAG4    /YES. DONT COMPARE
+       TAD  I  TMATK   /NOW COMPARE THE VALUE OF THIS ATTACKING PIECE
+       CIA             /WITH THE LOWEST VALUED ATTACKER FOUND SO FAR
+       TAD     PVAL
+       JMS     CLRFIX
+       SMA CLA         /IS THE VALUE OF THIS PIECE LOWER?
+       JMP     BATAK   /NO
+TAG4,  TAD  I  TMATK   /YES. REPLACE THE OLD VALUE WITH THIS ONE
+       DCA     PVAL
+       TAD     TMATK
+       DCA     PSQR
+       JMP     BATAK
+
+PAGE
+\f
+/TEST FOR KING IN CHECK BY MOVING A PIECE AND CALLING CHKATK
+/CALL WITH MSW IN AC, AND THE KINGS ADDRESS IN "CKING"
+/RETURN TO THE ADDRESS+1 OF THE CALLING JMS IF THE KING IS IN CHECK
+/RETURN TO THE ADDRESS+2 OF THE CALLING JMS IF THE KING IS NOT IN CHECK
+TSTCHK,        0000
+       DCA     MMUMTM  /STORE THE MSW FOR THE MOMENT
+       TAD     GNCHEK  /GET # OF ATTACKS ON THE KING
+       SZA CLA         /WAS THE KING IN CHECK?
+       JMP     TSTCH1  /YES. DO A COMPLETE TEST FOR KING IN CHECK
+       TAD     CTNEED
+       SPA             /HAVE WE DETERMINED THAT A CHECK TEST IS NESCESARY?
+       JMP     TSTCH1  /YES. DO ONE
+       SNA CLA         /NO. HAVE WE DETERMINED THAT IT IS NOT?
+       JMP     TSTCH2  /YES. DONT DO ONE THEN
+       DCA     CTNEED  /NO. DETERMINE THAT NOW
+       TAD     CKING
+       DCA     TEMP
+       TAD     CNTR1
+       DCA     TMATK
+       TAD     TEMP
+       RTR CLL
+       RAR
+       AND     [0007
+       DCA     M3
+       TAD     TEMP
+       AND     [0007
+       DCA     M4
+       TAD     CNTR1
+       RTR CLL
+       RAR
+       AND     [0007
+       DCA     M1
+       TAD     CNTR1
+       AND     [0007
+       DCA     M2
+       JMS     SUBR1
+       SKP
+       JMP     TSTCH1
+       JMS     SUBR2
+       JMP     TSTCH2
+TSTCH1,        CLA CMA
+       DCA     CTNEED  /SET CHECK TEST NEED SWITCH
+       TAD     MMUMTM  /GET THE MSW BACK AGAIN
+       JMS     MMOVE
+       TAD     CKING   /ADDRESS TO TEST FOR ATTACK
+       DCA     TEMP
+       IAC             /RETURN AFTER FIRST ATTACK IS FOUND
+       JMS     CHKATK
+       JMS     UMOVE   /PUT THE PIECE BACK WHERE IT BELONGS
+       TAD     PCNT    /GET # OF ATTACKS
+       SNA             /ANY?
+TSTCH2,        ISZ     TSTCHK  /NO. INC RETURN ADDRESS
+       SNA CLA         /I'LL ASK AGAIN: WERE THERE ANY?
+       JMP  I  TSTCHK  /NO. RETURN
+       TAD     GNCHEK
+       SZA CLA         /WAS IT A CHECK REPLY?
+       ISZ     MOBMOD  /TALLY ONE MORE ILLEGAL BY VIRTUE OF KING IN CHECK
+       JMP  I  TSTCHK
+
+\f/SUBROUTINE TO MAKE A SIMPLE TYPE MOVE
+/CALL WITH MSW IN AC
+MMOVE, 0000
+       DCA     MMUMT1  /STORE THE MSW
+       TAD     MMUMT1
+       JMS  I  ZSPLIT  /SPLIT THE MSW UP INTO 'TO' AND 'FROM' SQUARE ADDRESSES
+       TAD  I  TEMP1   /GET VALUE  OF CAPTURED PIECE
+       DCA     MMUMTM  /STORE IT
+       TAD  I  TEMP2   /MOVE THE PIECE
+       DCA  I  TEMP1   /ONTO ITS NEW SQR
+       DCA  I  TEMP2   /CLEAR OUT OLD SQR
+       JMP  I  MMOVE
+
+/SUBROUTINE TO UMMAKE SIMPLE TYPE MOVES
+/AS MADE BY THE MMOVE SUBROUTINE
+UMOVE, 0000
+       CLA
+       TAD     MMUMT1  /GET THE MSW
+       JMS  I  ZSPLIT  /SPLIT IT UP INTO 'TO' AND 'FROM' SQUARE ADDRESSES
+       TAD  I  TEMP1   /GET VALUE OF THE PIECE BEING UNMOVED
+       DCA  I  TEMP2   /PUT IT BACK ON ITS ORIGINAL SQUARE
+       TAD     MMUMTM
+       DCA  I  TEMP1   /RESTORE CAPTURED PIECE
+       JMP  I  UMOVE
+MMUMTM,        0000
+MMUMT1,        0000
+
+/SUBROUTINE TO GENERATE ALL MOVES FOR WHITE
+GNWMV, 0000
+       CMA CLA         /SETUP FIRST RANK CONSTANT
+       DCA     FSTRNK
+       JMS  I  ZMAPEC  /MAP THE PIECES
+       TAD     (NOP    /SETUP COLOR COMPLIMENTOR
+       DCA     COLR
+       IAC             /SETUP PAWN DIRECTION CONSTANT
+       DCA     PONDIR
+       TAD     WKING   /SAVE THE ADDRESS OF THE WHITE KING
+       DCA     CKING
+       TAD     (MAP-1  /SETUP ADDRESS OF WHITE PIECE MAP
+       DCA     GMAP
+       TAD     (MAP+23 /SETUP ADDRESS OF BLACK PIECE MAP
+       DCA     OMAP
+       TAD     (WPSW   /SETUP CURRENT PSW ADDRESS
+       DCA     CPSW
+       JMS  I  ZGNMV   /GENERATE THE MOVES
+       JMP  I  GNWMV   /RETURN
+\f
+
+/SUBROUTINE TO GENERATE ALL MOVES FOR BLACK
+GNBMV, 0000
+       CMA CLA         /SETUP THE PAWN DIRECTION CONSTANT
+       DCA     PONDIR
+       JMS  I  ZMAPEC  /MAP THE PIECES
+       TAD     [CIA    /SETUP COLOR COMPLIMENTOR
+       DCA     COLR
+       TAD     BKING   /SAVE THE ADDRESS OF THE BLACK KING
+       DCA     CKING
+       TAD     (7772   /SETUP FIRST RANK CONSTANT
+       DCA     FSTRNK
+       TAD     (MAP+23 /SETUP ADDRESS OF BLACK PIECE MAP
+       DCA     GMAP
+       TAD     (MAP-1  /SETUP ADDRESS OF WHITE PIECE MAP
+       DCA     OMAP
+       TAD     (BPSW   /SETUP POSITION STATUS WORD ADDRESS
+       DCA     CPSW
+       JMS  I  ZGNMV   /GENERATE THE MOVES
+       JMP  I  GNBMV   /RETURN
+
+PAGE
+\f
+/SUBROUTINE TO TEST FOR WHITE ATTACKS
+/CALL WITH ADDRESS OF THE SQUARE TO BE TESTED IN AC
+TSTWAT,        0000
+       DCA     TEMP
+       TAD     [CIA
+       DCA     COLR
+       CLA CMA
+       DCA     PONDIR
+       TAD     (MAP-1  /ADDRESS-1 OF MAP OF ATTACKING PIECES
+       DCA     OMAP
+       JMS     CHKATK  /DO THE TEST
+       JMP  I  TSTWAT  /RETURN
+
+/SUBROUTINE TO TEST FOR BLACK ATTACKS ON ANY SQUARE
+/CALL WITH THE ADDRESS OF THE SQUARE TO BE TESTED IN AC
+TSTBAT,        0000
+       DCA     TEMP    /STORE ADDRESS OF SQUARE TO BE TESTED
+       TAD     (NOP
+       DCA     COLR
+       CLA IAC
+       DCA     PONDIR
+       TAD     (MAP+23 /ADDRESS-1 OF THE BLACK PIECE MAP
+       DCA     OMAP
+       JMS     CHKATK  /DO THE TEST
+       JMP  I  TSTBAT  /RETURN
+
+
+\f
+/SUBROUTINE TO MAKE A MOVE. CALLED WITH MSW IN LOCATION 'TOMAK1'
+/AND MDW IN LOCATION 'TOMAK2'
+MKMV,  0000
+       CLA CLL
+       ISZ     DOMAP   /SET SWITCH INDICATING THAT A PIECE MAP IS NESSECARY
+       IFNZRO  DEBUG<
+       JMS     TSTBRD  /TEST BOARD
+>
+       TAD     TOMAK1
+       PUSH1           /SAVE THE MSW
+       TAD     TOMAK1  /GET THE MSW
+       JMS  I  ZSPLIT  /SPLIT  THE MSW UP INTO A 'TO' AND A 'FROM' ADDRESSES
+       TAD     TOMAK2  /MDW TO AC
+       SMA CLA         /IS THE MOVE A CAPTURE?
+       JMP     MKMV1   /NO.
+       TAD  I  TEMP1   /YES. SAVE ITS VALUE IN
+       PUSH1           /THE PUSH DOWN LIST
+       TAD  I  TEMP1   /GET VAL OF CAPTURED PIECE
+       CIA             /SUBTRACT IT FROM THE
+       TAD     PW      /TOTAL VALUE OF THE BOARD
+       DCA     PW
+MKMV1, TAD  I  TEMP2   /NOW PHYSICALY MOVE THE PIECE
+       DCA  I  TEMP1   /ONTO ITS NEW SQUARE
+       DCA  I  TEMP2   /REMOVE THE PIECE FROM ITS OLD SQUARE
+       TAD     WPSW    /SAVE WHITES POSITION STATUS WORD
+       PUSH1
+       TAD     BPSW    /SAVE BLACKS POSITION STATUS WORD
+       PUSH1
+       TAD     LSTMV
+       PUSH1           /SAVE THE 'LSTMV' INFORMATION
+       TAD     TOMAK2  /INSTALL NEW INFORMATION ON THE LAST(THIS) MOVE MADE
+       DCA     LSTMV
+       TAD     TOMAK2
+       AND     [0007
+       SNA             /IS THIS ONE OF THE SPECIAL TYPES OF MOVES?
+       JMP     MKMVDN  /NO. ALL DONE SO RETURN
+       TAD     (JMP    .+2     /YES. BUILD A 'JMP' TO THE PROPER SPECIAL CASE HANDLER
+       DCA     .+1
+       HLT             /PUT THE JUMP HERE
+/A JMP TO  ONE OF THE FOLLOWING 7 INSTRUCTIONS WAS EXECUTED
+/BY THE PREVIOUS INSTRUCTION
+       JMP     MKQSC   /MAKE A QUEEN SIDE CASTLING MOVE
+       JMP     MKKSC   /MAKE A KING SIDE CASTLING MOVE
+       JMP     MKEP    /EN PASANT
+       TAD     (KNIGHT-BISHOP  /PROMOTING TO A KNIGHT
+       TAD     (BISHOP-ROOK    /PROMOTING TO A BISHOP
+       TAD     (ROOK-QUEEN     /PROMOTING TO A ROOK
+       TAD     (QUEEN          /PROMOTE TO A QUEEN
+       DCA     TEMP3   /STORE ABS VALUE OF THE PROM PIECE
+       TAD  I  TEMP1   /GET THE VALUE OF THE PROMOTEING PAWN
+       CIA             /SUBTRACT IT FROM THE
+       TAD     PW      /TOTAL VALUE OF THE BOARD
+       DCA     PW
+       TAD  I  TEMP1   /GET THE VAL OF THE MOVING PAWN
+       RAL             /LOAD THE SIGN INTO THE LINK
+       CLA
+       TAD     TEMP3   /GET ABS VALUE OF PROM PIECE
+       SZL             /WAS THE PROMOTING PAWN BLACK?
+       CIA             /YES. MAKE THE PROMOTION PIECE BLACK ALSO
+       DCA  I  TEMP1   /PLACE THE NEW PIECE ON THE BOARD
+       TAD  I  TEMP1   /ADD THE VALUE OF THE NEW PIECE
+       TAD     PW      /IN WITH THE TOTAL VALUE
+       DCA     PW
+       JMP     MKMVDN
+
+MKQSC, TAD     TEMP1   /IT'S QUEENS SIDE CASTLING
+       AND     [7770
+       DCA     TEMP2   /STORE THE ADDR OF QUEENS ROOK BEFORE CASTLING
+       TAD     TEMP2
+       TAD     (3
+       DCA     TEMP1   /STORE ADDRESS OF ROOKS NEW SQUARE
+MKCA1, TAD  I  TEMP2   /LOAD AC WITH VALUE OF THE ROOK
+       DCA  I  TEMP1   /PUT THE ROOK DOWN ON ITS NEW SQR
+       DCA  I  TEMP2   /REMOVE THE ROOK FROM ITS OLD SQR
+       TAD  I  TEMP1   /GET COLOR OF CASTLING SIDE
+       SPA             /IS IT BLACK?
+       ISZ     BPSW    /YES. SET BIT 11 OF HIS PSW
+       SMA CLA         /OR IS IT WHITE?
+       ISZ     WPSW    /YES. SET BIT 11 OF HIS PSW
+       JMP     MKMVDN
+
+MKKSC, TAD     TEMP1   /BUILD ADDRESS OF THE
+       IAC             /KINGS ROOK
+       DCA     TEMP2   /STORE THE ADDR OF KINGS ROOK BEFORE CASTLING
+       TAD     (-5     /BUILD THE ADDRESS OF THE ROOKS
+       JMP     MKCA1-3 /NEW SQUARE
+
+MKEP,  TAD     TEMP2   /IT'S AN 'EN PASSANT' CAPTURE
+       AND     [7770   /BUILD ADDRESS OF THE PAWN THAT WAS TAKEN
+       DCA     TEMP3
+       TAD     TEMP1
+       AND     [0007
+       TAD     TEMP3
+       DCA     TEMP3
+       TAD  I  TEMP3   /SUBTRACT THE PAWNS VALUE
+       CIA             /FROM THE TOTAL
+       TAD     PW
+       DCA     PW
+       DCA  I  TEMP3   /REMOVE CAPTURED PAWN FROM THE BOARD
+MKMVDN,        IFNZRO  DEBUG   <
+       JMS     TSTBRD  /TEST BOARD VALUE
+>
+       TAD     WHOSE   /NOW THAT THE MOVE IS MADE
+       CMA             /COMPLIMENT
+       DCA     WHOSE   /THE "WHOSE MOVE" SWITCH
+       JMP  I  MKMV    /AND RETURN
+
+PAGE
+
+\f
+/SUBROUTINE TO UNMAKE A MOVE  MADE BY THE 'MKMV' ROUTINE
+/LIKE THE 'MKMV' SUBROUTINE 'UNMV' IS COLOR INDEPENDENT- USES NO 'CLRFIX'
+UNMV,  0000
+       CLA CLL
+       ISZ     DOMAP   /SET SWITCH FOR OBSOLETE PIECE MAP
+       IFNZRO  DEBUG<
+       JMS     TSTBRD  /MAKE SURE BOARD VALUE IS OK
+>
+       TAD     LSTMV   /GET THE MDW FOR THE LAST(THIS) MOVE MADE
+       DCA     TOMAK2
+       POP1            /GET THE OLD 'LSTMV' INFO
+       DCA     LSTMV   /RESTORE IT
+       POP1            /RESTORE BLACKS PSW
+       DCA     BPSW
+       POP1            /RESTORE WHITES PSW
+       DCA     WPSW
+       TAD     TOMAK2  /GET THE MDW FOR THE MOVE
+       SPA CLA         /IS IT A CAPTURE?
+       POP1            /YES. GET THE VALUE OF THE CAPTURED PIECE
+       DCA     TEMP3   /STORE IT
+       POP1            /GET THE OLD MSW
+       DCA     TOMAK1  /STORE THE MSW
+       TAD     TOMAK1  /BACK AGAIN
+       JMS  I  ZSPLIT  /UNPACK THE MSW AND BUILD THE 'TO' AND 'FROM' ADDRESSES
+       TAD  I  TEMP1   /GET THE MOVED PIECE AND
+       IFNZRO  DEBUG<  
+       SNA             /IS IT STILL THERE?
+       HLT             /BUG!!!
+>
+       DCA  I  TEMP2   /PUT IT BACK ON ITS OLD SQUARE
+       TAD     TEMP3
+       DCA  I  TEMP1   /RESTORE THE VALUE OF THE CAPTURED PIECE(OR EMPTY SQUARE)
+       TAD     TEMP3   /ADD VAL OF CAPTURED PIECE
+       TAD     PW      /BACK IN WITH THE TOTAL
+       DCA     PW
+       TAD     TOMAK2
+       AND     [0007
+       SNA             /WAS THE MOVE A SPECIAL TYPE?
+       JMP     UNMVDN  /NO. RETURN
+       TAD     (JMP    .+2
+       DCA     .+1
+       HLT             /THE JUMP GOES HERE
+/A JUMP TO ONE OF THE FOLLOWING 7 LOCATIONS WAS
+/EXECUTED BY THE PREVIOUS INSTRUCTION
+       JMP     UNQSC   /UNMAKE A QUEEN SIDE CASTLING MOVE
+       JMP     UNKSC   /UNMAKE KING SIDE CASTLING MOVE
+       JMP     UNEP    /UNMAKE AN EN PASSANT CAPTURE
+       JMP     UNQP
+       JMP     UNQP
+       JMP     UNQP
+UNQP,  TAD  I  TEMP2   /PAWN PROM. MOVE
+       CIA             /SUBTRACT PROMOTION VALUE
+       TAD     PW      /FROM THE TOTAL
+       DCA     PW
+       TAD  I  TEMP2   /GET VALUE OF THE PROMOTION PIECE
+       SMA CLA         /WHICH COLOR IS MOVING?
+       TAD     (PAWN+PAWN      /WHITE IS MOVING.
+       TAD     [-PAWN
+       DCA  I  TEMP2   /RESTORE THE PROMOTION PIECE BACK TO A PAWN
+       TAD  I  TEMP2   /ADD THE VAL OF THE PAWN
+       TAD     PW      /IN WITH THE TOTAL VALUE
+       DCA     PW
+       JMP     UNMVDN
+
+UNKSC, TAD     TEMP2   /BUILD ADDR OF ROOKS 'POST CASTLING' SQUARE 
+       IAC             /BY ADDING +1 TO THE KINGS 'PRE CASTLING' SQUARE ADDRESS
+       DCA     TEMP2   /STORE IT
+UNKS1, TAD     TEMP2   /BUILD ADDRESS OF THE ROOKS 'PRE CASTLING' SQUARE ADDR
+       TAD     (2      /BY ADDING +2 TO ITS 'POST-CASTLING' SQUARE ADDR
+       DCA     TEMP1   /STORE ROOKS PRE CASTLING SQUARE ADDRESS
+       TAD  I  TEMP2   /GET THE ROOKS VALUE
+       DCA  I  TEMP1   /PLACE THE ROOK BACK ON ITS 'PRE CASTLING' SQUARE
+       DCA  I  TEMP2   /REMOVE IT FROM ITS 'POST CASTLING SQUARE'
+       JMP     UNMVDN
+
+UNQSC, TAD     TEMP1   /BUILD THE ADDR OF THE ROOKS 'POST CASTLING SQUARE
+       IAC             /BY ADDING +1 TO THE KINGS 'POST CASTLING' SQUARE ADDRESS
+       DCA     TEMP2   /STORE IT
+       TAD     (-5     /BUILD THE ADDRESS OF THE ROOKS 'PRE CASTLING SQUARE'
+       JMP     UNKS1   /SAME AS KING SIDE EXCEPT OVER 5 FILES
+UNEP,  TAD     TEMP1   /BUILD THE ADDRESS OF THE CAPTURED PAWN
+       AND     [0007   /TAKE THE FILE OF THE 'TO SQUARE'
+       DCA     TEMP3   /STORE THE TO SQUARE' FILE #
+       TAD     TEMP2   /AND EVERYTHING BUT THE FILE #
+       AND     [7770   /FROM THE FROM SQUARE ADDRESS
+       TAD     TEMP3   /ADD THEN TOGEATHER
+       DCA     TEMP3   /STORE
+       TAD  I  TEMP2   /GET THE VALUE OF THE CAAPTURING PAWN
+       CIA             /MAKE THE VALUE THAT OF AN OPOSITE COLORED PAWN
+       DCA  I  TEMP3   /REPLACE THE PAWN THAT WAS TAKEN 'EN PASSANT'
+       TAD  I  TEMP3   /ADD PAWNS VALUE
+       TAD     PW      /IN WITH THE TOTAL
+       DCA     PW
+UNMVDN,        IFNZRO  DEBUG   <
+       JMS     TSTBRD  /VERIFY BOARD VALUE
+>
+       TAD     WHOSE   /NOW THAT THE MOVE IS UNMADE
+       CMA             /COMPLIMENT
+       DCA     WHOSE   /THE "WHOSE MOVE" SWITCH
+       JMP  I  UNMV    /RETURN
+
+\f/SUBROUTINE TO SPLIT A MSW UP LEAVING THE ADDRESS
+/OF THE 'TO' SQUARE IN LOC 'TEMP1' AND THE ADDRESS OF THE 'FROM'
+/SQUARE IN LOC. 'TEMP2'. CALL WITH MSW IN AC
+SPLIT, 0000
+       DCA     TEMP1
+       TAD     TEMP1   /FIRST BUILD THE 'FROM' SQUARE ADDRESS
+       RTR CLL
+       RTR
+       RTR
+       AND     [0077   /MASK OUT THE GARBAGE IN BITS 0-5
+       TAD     [BOARD  /ADD IN BOARD ADDRESS CONSTANT
+       DCA     TEMP2   /STORE 'FROM' SQUARE ADDRESS
+       TAD     TEMP1   /NOW FOR THE 'TO' SQUARE.
+       AND     [0077   /MASK OUT BITS 0-5
+       TAD     [BOARD  /ADD IN BOARD ADDRESS CONSTANT
+       DCA     TEMP1   /STORE THE ADDRESS OF THE 'TO' SQUARE
+       JMP  I  SPLIT   /RETURN
+
+/SUBROUTINE TO RETURN THE PLY#-1 IN THE AC.
+/IF THE PLY # IS 8 OR GREATER,  7 IS RETURNED, AND THE LINK IS SET
+/IF PLY # <8 THE LINK IS RETURNED CLEAR
+PLYCHP,        0000
+       CLA STL
+       TAD     PLY     /GET PLY #
+       TAD     [7770   /SUBTRACT 8
+       SMA             /IS PLY # 8 OR GREATER ?
+       CLA             /YES. PRETEND IT WAS 8
+       TAD     [0007   /RESTORE AC VALUE TO PLY#-1
+       JMP  I  PLYCHP  /RETURN
+
+       IFNZRO  DEBUG   <
+/SUBROUTINE TO GET AN OLD BOARD VALUE FROM PDL#1 AND COMPARE IT WITH THE CURRENT
+/BOARD VALUE. TO VERIFY THE "MKMV" AND "UNMV" SUBROUTINES
+TSTBRD,        0000
+       CLA
+       TAD     PW
+       DCA     TEMP1
+       JMS     BRDVAL  /GET CURRENT BOARD VALUE
+       CIA
+       TAD     TEMP1
+       SZA CLA         /ARE THEY THE SAME?
+       HLT             /NO. ERROR SOMEWHERE
+       JMP  I  TSTBRD  /ALL IS WELL
+>
+PAGE
+\f
+
+/SUBROUTINE TO COMPARE THE AC WITH LOCATION 'COMP'
+/RETURN NORMALY IF THEY ARE EQUAL
+/RETURN TO THE ADDRESS+2 OF THE JMS IF THE AC IS LARGER
+/RETURN TO THE ADDRESS+3 OF THE JMS IF 'COMP' IS LARGER
+COMPAR,        0000
+       CIA
+       DCA     COMPAC  /STORE THE COMPLIMENT OF THE AC
+       TAD     COMPAC  /COMPARE THE AC WITH 'COMP'
+       TAD     COMP
+       SNA CLA         /ARE THEY EQUAL?
+       JMP  I  COMPAR  /YES. RETURN NORMALY
+       TAD     COMPAC  /NO. GET COMPLIMENT OF THE AC AGAIN
+       SPA SNA CLA     /WAS THE AC POSITIVE?
+       JMP     XXAP    /YES. AC WAS POSITIVE
+       TAD     COMP    /NEGATIVE
+       SMA             /IS 'COMP' POSITIVE?
+       JMP     XXCL    /YES. 'COMP' IS LARGER ALSO
+       TAD     COMPAC  /NO. BOTH ARE NEGATIVE
+       SPA CLA         /BUT WHICH IS THE LARGER?
+       JMP     XXAL    /THE AC IS THE LARGER
+       JMP     XXCL    /'COMP' IS THE LARGER
+XXAP,  TAD     COMP    /THE AC WAS POSITIVE
+       SPA             /TEST 'COMP' FOR ITS SIGN
+       JMP     XXAL    /'COMP' IS NEGATIVE, AND THEREFORE LARGER
+       TAD     COMPAC
+       SMA CLA
+XXCL,  ISZ     COMPAR  /'COMP' IS LARGER
+XXAL,  ISZ     COMPAR  /AC IS LARGER
+       CLA
+       JMP  I  COMPAR  /RETURN
+COMPAC,        0000
+
+/SUBROUTINE TO TALLY UP THE VALUES OF ALL PIECES ON THE BOARD
+/STORE THE RESULT IN LOC "PW", AND IN THE AC  ON RETURN
+BRDVAL,        0000
+       CLA
+       TAD     (-100   /INITIALIZE FOR 64 SQUARES
+       DCA     TEMP
+       TAD     (BOARD-1/ADDRESS-1 OF BOARD
+       DCA     ITMP1   /TO AUTO INDEX REG
+       TAD  I  ITMP1
+       ISZ     TEMP    /DONE ALL SQUARES?
+       JMP     .-2     /NO DO ANNOTHER
+       DCA     PW      /YES. STORE BOARD VALUE
+       TAD     PW      /ALSO LOAD INTO AC
+       JMP  I  BRDVAL  /RETURN
+
+PRNCNT,        0000
+
+\fEVAL, 0000
+       CLA
+       IFNZRO RANVAL<
+       TAD  I  RANDOM  /INTRODUCE A RANDOM VARIATION INTO THIS EVALUATION
+       AND     (0001   /LET IT BE NO GREATER THAN +1
+>
+       DCA     STRATG
+       JMS     BREV    /DO A BACK RANK EVALUATION
+       JMS     COEV    /DO A CENTER OCCUPATION EVALUATION
+       JMS     CASTEV  /EVALUATE CASTLING STATUS
+       TAD     PW      /ADD THE VALUE OF ALL PIECES ON THE BOARD
+       TAD     STRATG  /ADD IN STRATEGICAL VALUE
+       JMS     LCLRFX  /DO A COLOR FIX
+       DCA     STRATG  /STORE
+       JMS     MOBGET  /GET MOBILITY VALUE
+       TAD     STRATG  /ADD IT IN WITH THE TOTAL
+       DCA     STRATG  /STORE
+/UPCOMING IS A MINI ALPHA BETA PRUNER
+/SINCE THE "HIEP" PART OF THE EVALUATION IS TIME CONSUMING
+/AND IT ONLY SERVES TO MAKE THE EVALUATION RETURNED LESS
+/FAVORABLE FOR THE SIDE TO THAT JUST MOVED, IT IS BOTH
+/WISE AND PROFITABLE TO TRY SAVE TIME THIS WAY
+       TAD     STRATG
+       JMS     PLYFIX
+       DCA     COMP    /LOAD SOFTWARE COMPARE REGISTER
+       TAD     UVAL1
+       JMS     PLYFIX
+       JMS     COMPARE/COMPARE VALUES
+       JMP     EVAL2   /THEY ARE EQUAL. PRUNE
+       JMP     EVAL1   /"HIEP" EVALUATION IS NESSECARY
+       JMP     EVAL2   /NO "HIEP" NESSECARY(GOOD)
+EVAL1, JMS     HIEP    /GET THE CONTROVERSIAL VALUE
+       JMS     LCLRFX
+       TAD     STRATG
+       JMP  I  EVAL    /RETURN
+
+EVAL2, IFNZRO LPTREE<
+       TAD     ("_     /SIGNAL THAT A MINI-PRUNE WAS DONE
+       JMS  I  ZOUT
+>
+       TAD     STRATG  /GET VALUE
+       JMP  I  EVAL    /RETURN
+
+\f/SUBROUTINE TO GET THE MOBILITY VALUE FOR THIS POINT IN
+/THE ANALYSIS
+/RETURN WITH VALUE IN THE AC
+MOBGET,        0000
+       CLA
+       TAD     MOB0
+       SZA CLA         /DO SE HAVE ANY RELIABLE INFORMATION AT HAND ALREADY?
+       JMP     MOBGE1  /YES. USE IT
+       ISZ     BOGUS   /NO. GET SOME NOW
+       TAD     GNCNT   /SAVE COUNTERS WE ARE ABOUT TO MODIFY
+       PUSH1
+       TAD     MOBMOD
+       PUSH1
+       JMS     GNBMV   /DO A PSEUDO MOVE GENERATION
+       TAD     MOBMOD  /GET MOBILITY VALUE FOR BLACK
+       DCA     MOBGTM  /SAVE FOR THE MOMENT
+       ISZ     BOGUS
+       JMS     GNWMV   /DO ANOTHER PSUEDO MOVE GENERATION
+       TAD     MOBGTM  /SUBTRACT BLACKS MOBILITY VALUE
+       CIA
+       TAD     MOBMOD  /FROM WHITES
+       JMS     LCLRFX
+       DCA     MOBGTM  /STORE VALUE FOR THE MOMENT
+       POP1            /RESTORE THE COUNTERS THAT WE DESTROYED
+       DCA     MOBMOD
+       POP1
+       DCA     GNCNT
+       TAD     MOBGTM  /GET VALUE BACK AGAIN
+       JMP  I  MOBGET  /RETURN
+MOBGE1,        TAD     MOBMOD  /GET MOBILITY VALUE FOR THIS LEVEL
+       SNA             /IS THERE ONE FOR THIS LEVEL?
+       TAD     MOB0    /NO. USE THE ONE FOR 2 PLYS BACK
+       CIA
+       TAD     MOB1
+       CIA
+       JMS     PLYFIX
+       JMP  I  MOBGET  /RETURN
+MOBGTM,        0000
+
+PAGE
+\f/THIS IS THE RECURSIVE LOOKAHEAD SUBROUTINE
+/SEARCHES THE GAME TREE "DEPTH" PLYS DEEP. LOACTION "PLY"
+/HOLDS THE CURRENT RECURSION LEVEL, OR DEPTH LEVEL OF THE SEARCH
+/AND MUST BE SET TO = 0, BEFORE THIS ROUTINE IS CALLED FOR THE FIRST TIME
+/SETTING "CVAL1" TO -3777 BEFORE CALLING THIS ROUTINE FOR THE FIRST TIME 
+/IS ALSO NICE, TO PREVENT ALPHA-BETA PRUNING AT LEVEL #1
+/THIS ROUTINE ASSUMES THAT THE COMPUTER HAS WHITE, BUT THE "LCLRFX" SUBROUTINE
+/ALLOWS THE COMPUTER TO PLAY BLACK, BY SETING LOCATION "LCLRFX"+1 TO EQUAL
+/A CIA INSTRUCTION
+LOOKA, 0000
+       CLA CLL
+       TAD     LOOKA   /GET RETURN ADDRESS
+       PUSH1           /SAVE IT IN PDL#1
+       ISZ     PLY     /INC PLY NUMBER
+       CMA CLA         /-1 TO AC
+       TAD     PLY
+       SZA CLA         /IS THIS THE FIRST PLY?
+       JMP     LOOKA1  /NO
+       TAD     WHOSE   /YES. SETUP "LCLRFX"
+       SMA CLA         /WHICH COLOR ARE WE TO LOOK AHEAD ON BEHALF OF?
+       TAD     (NOP-CIA/WHITE
+       TAD     [CIA    /BLACK
+       DCA     LCLRFX+1
+       DCA     MOBMOD  /INITIALIZE MOBILITY VALUES
+       DCA     MOB0
+       DCA     MOB1
+       DCA     ENO     /SET EVALUATION COUNTER TO 0
+LOOKA1,        TAD     UVAL1   /SAVE THE OLD "UPPER LEVEL VALUE"
+       PUSH1           /IN PDL#1
+       TAD     CVAL1   /THE OLD "CURRENT LEVEL VALUE"
+       DCA     UVAL1   /BECOMES THE NEW "UPPER LEVEL VALUE"
+       TAD     PLYFIX+1        /SAVE PLY COMPENSATOR VALUE
+       PUSH1
+       TAD     GNCNT   /SAVE GENERATION COUNTER
+       PUSH1           /IN PDL#1
+       TAD     STRATG  /SAVE STRATEGIC VALUE
+       PUSH1
+       DCA     GNCNT   /CLEAR OUT GENERATION COUNTER, IN CASE NO MOVES ARE GENERATED
+       TAD     MOB0    /SAVE MOBILITY OF THE LEVEL 2 ABOVE THIS ONE
+       PUSH1
+       TAD     MOB1    /BUMP ALL THE LEVELS BY 1
+       DCA     MOB0
+       TAD     MOBMOD
+       DCA     MOB1
+       DCA     MOBMOD  /!!!BUG OF AUG 13 FIXED!!!/
+       IFNZRO  DEBUG   <
+       TAD     PDLADR  /PUSH A MARKER SO THAT PDL#2 CAN BE VERIFIED
+       PUSH1
+       TAD     PC01    /PUSH A MARKER SO THAT PDL#1 CAN BE
+       PUSH1           /VERIFIED TO BE IN LINE
+>
+       TAD     PLY     /BUILD A NEW PLY COMPENSATOR. FIRST GET PLY #
+       RAR             /EVEN/ODD BIT TO LINK
+       SZL CLA         /IS PLY #  EVEN ?
+       TAD     (NOP-CIA/NO. BUILD A NOP INSTRUCTION
+       TAD     [CIA
+       DCA     PLYFIX+1
+       TAD     PLY     /PLY # TO AC
+       CIA             /COMPARE AGAINST
+       TAD     DEPTH   /THE MAXIMUM DEPTH
+       SPA CLA         /DOES CURRENT PLY# EXCCEDE THE MAX DEPTH #?
+       JMP     LEVAL   /YES. DO A STATIC EVALUATION OF THE POSITION
+LKFUR, TAD     (-3777  /NO. BUILD A STARTING VALUE FOR THIS LEVEL
+       JMS     PLYFIX
+       DCA     CVAL1   /INITIALIZE VALUE FOR THIS LEVEL
+       JMS     GNMVSM  /GENERATE THE MOVES OF THE SIDE WHOSE MOVE IT IS
+       TAD     CMSW    /GIT CHECKMATE SWITCH
+       SZA CLA         /IS SIDE TO MOVE IN CHECKMATE?
+       JMP     LKCM    /YES. DO SOMTHING
+       TAD     SMSW    /GET STALEMATE SWITCH
+       SZA CLA         /IS THE SIDE TO MOVE IN STALEMATE?
+       JMP     LKSM    /YES. DO SOMTHING
+       JMS     PRUNE   /ONLY CONSIDER "GOOD" MOVES
+PICK,  POP2            /POP A MOVE OUT OF PDL2
+       DCA     TOMAK2  /STORE THE MDW
+       POP2
+       SNA             /IS IT A MOVE OR THE END OF THE LIST?
+       JMP     LKAD    /ITS THE END OF THE LIST.
+       DCA     TOMAK1  /ITS A MOVE--STORE THE MSW
+IFNZRO LPTREE  <
+       TAD     TOMAK1
+       DCA     IOMSW
+       TAD     TOMAK2
+       DCA     IOMDW
+       JMS     OUTMV   /PRINT OUT THE MOVE
+       JMS     SPACE   /ALSO A SPACE SO THAT THE NEXT TAB STOP IS REACHED
+>
+       JMS  I  ZMKMV   /MAKE THE MOVE
+       JMS  I  ZLOOKA  /PEER FURTHER INTO THE MURKY DEPTHS OF THE GAME TREE
+       IFNZRO  LPTREE<
+       JMS  I  ZCRLF   /PRINT A CARRIAGE RETURN
+>
+       JMS  I  ZUNMV   /UNMAKE THE MOVE
+       JMP     COMPMV  /GO DO A COMPARE
+\f
+/SUBROUTINE TO POP OUT A GROUP OF MOVES FROM PDP#2
+POPOUT,        0000
+       CLA
+       POP2            /OUT MDW
+       POP2            /OUT MSW
+       SZA CLA         /IS IT AN MSW OR IS IT THE END  OF THE MOVES MARKER?
+       JMP     .-3     /IST AN MSW. GO POP OUT ANOTHER MOVE
+       JMP  I  POPOUT  /END. RETURN
+
+/SUBROUTINE TO GENERATE THE MOVES OF THE SIDE WHOSE TURN IT IS TO MOVE
+/AS INDICATED BY THE "WHOSE" SWITCH
+/RETURN WITH THE MOVES IN PDL#2, AND THE AC CLEARED
+GNMVSM,        0000
+       CLA
+       TAD     WHOSE   /GET "WHOSE MOVE" SWITCH
+       SMA CLA         /IS IT WHITES MOVE?
+       JMS     GNWMV   /YES. GENERATE WHITES MOVES
+       TAD     WHOSE
+       SPA CLA         /OR IS IT BLACKS MOVE?
+       JMS     GNBMV   /YES. GENERATE BLACKS MOVES
+       JMP  I  GNMVSM  /RETURN
+PAGE
+
+\fCOMPMV,       CLA
+IFNZRO LPTREE  <
+       JMS     TABPLY  /TAB TO COLOMN "PLY"
+       TAD     RVAL1
+       JMS     OCTOUT
+       TAD     CVAL1
+       JMS     OCTOUT  /PRINT THE VALUE TO BEAT
+>
+       TAD     RVAL1   /GET VALUE RETURNED
+       JMS     PLYFIX  /FIX W/RESPECT TO PLY NUMBER
+       DCA     COMP    /LOAD SOFTWARE COMPARE REGISTER WITH IT
+       TAD     CVAL1   /GET CURRENT VALUE FOR THIS LEVEL
+       JMS     PLYFIX  /FIX W/RESPECT TO PLY #
+       JMS     COMPAR  /COMPARE IT WITH THE RETURNED VALUE NOW IN COMPARE REGISTER
+       JMP     JMPICK  /THEY ARE EQUAL:
+       JMP     JMPICK  /UNFAVORABLE COMPARE: GO ON TO NEXT MOVE
+RPLACE,        TAD     RVAL1   /HAIL NEW "BEST MOVE VALUE"
+       DCA     CVAL1   /STORE NEW "BEST MOVE VALUE"
+       IFNZRO  LPTREE  <
+       TAD     ("*
+       JMS  I  ZOUT    /THE RETURN MOVE WON INDICATION
+>
+       JMS     SETPNT
+       TAD     TOMAK1  /MSW
+       DCA  I  XR0     /INTO "BEST MOVE" TABLE
+       TAD     TOMAK2  /MDW
+       DCA  I  XR0     /INTO THE "BEST MOVE" TABLE
+
+                       /COMING UP IS THE "ALPHA BETA PRUNER"
+                       /IT CHECKS IF THE NEW "BEST VALUE" FOR THIS LEVEL
+                       /IS COMPETITIVE WITH THE "BEST VALUE" ON THE LEVEL ABOVE
+ALPHAB,        CLA
+       TAD     CVAL1   /GET CURRENT LEVEL VALUE
+       JMS     PLYFIX  /COMPLIMENT IF THIS IS AN EVEN PLY
+       DCA     COMP    /LOAD COMPARE REGISTER WITH IT
+       TAD     UVAL1   /GET THE VALUE OF THE LEVEL ABOVE
+       JMS     PLYFIX
+       JMS     COMPAR  /COMPARE WITH THE CURRENT LEVEL VALUE IN THE COMPARE REGISTER
+       JMP     ALPHAP  /EQUAL MEANS PRUNE
+       JMP     JMPICK  /SORRY. THE VALUE WOULD STILL BE COMPETITIVE ON THE LEVEL ABOVE
+ALPHAP,        JMS     POPOUT  /REMOVE ALL OTHER MOVES ON THIS LEVEL
+       TAD     PLY     /FOR DEBUG
+       CLA CLL
+       IFNZRO  LPTREE<
+       TAD     ("!
+       JMS  I  ZOUT    /PRINT INDICATION FOR PRUNE
+>
+       JMP     LKAD    /YES. GO SET RETURN VALUE
+
+JMPICK,        IFNZRO  LPTREE  <
+       JMS  I  ZCRLF   /CARRIAGE RETURN
+       JMS     TABPLY  /TAD TO COLOMN # "PLY"
+>
+       CLA
+       JMP     PICK
+
+SAVBRD,        ROOK
+       KNIGHT
+       BISHOP
+       QUEEN
+       KING
+       BISHOP
+       KNIGHT
+       ROOK
+       PAWN
+       PAWN
+       PAWN
+       PAWN
+       PAWN
+       PAWN
+       PAWN
+       PAWN
+BESTBL,        ZBLOCK  30      /TABLE TO HOLD THE LAST "BEST MOVE" ON ANY LEVEL
+
+/SUBROUTINE TO SET AUTO-INDEX REG "XRO0" TO POINT TO
+/THE WORD BEFORE THE 2WORD ENTRY IN THE "BESTBL" COROSPONDING WITH THIS PLY
+SETPNT,        0000
+       CLA
+       TAD     PLY     /GET PLY #
+       CLL RAL         /MULT TIMES 2 WORDS IN EACH ENTRY
+       TAD     ADCON   /ADD IN ADDRESS CONSTANT
+       DCA     XR0     /STORE ADDR AS ADVERTISED
+       JMP  I  SETPNT  /RETURN
+ADCON, BESTBL-3
+       -PAWN
+       -PAWN
+       -PAWN
+       -PAWN
+       -PAWN
+       -PAWN
+       -PAWN
+       -PAWN
+       -ROOK
+       -KNIGHT
+       -BISHOP
+       -QUEEN
+       -KING
+       -BISHOP
+       -KNIGHT
+       -ROOK
+
+PAGE
+\f
+LKAD,  CLA             /FINISHED GENERATING & EXPLORING MOVES ON THIS LEVEL
+       TAD     CVAL1   /SET RETURN VALUE = THIS LEVELS VALUE
+       DCA     RVAL1
+       JMP     DONE    /PREPARE TO RETURN
+
+LKSM,  CLA             /ITS A STALEMATE!
+       IFNZRO  LPTREE<
+       TAD     ("=
+       JMS  I  ZOUT    /PRINTOUT STALEMATE INDICATION
+>
+       DCA     RVAL1   /SET RETURN VALUE TO TOTALY EVEN GAME ( 0 )
+       JMP     LKXM    /TAKE SAME RETURN PATH AS A CHECKMATE NOW
+
+/COME HERE TO RETURN FROM THE "LOOKA" SUBROUTINE
+DONE,  CLA CMA         /-1 TO AC
+       TAD     PLY     /DECREMENT PLY #
+       DCA     PLY
+       TAD     UVAL1   /RESTORE VARIOUS DATA TO ITS STATE BEFORE CALLING
+       DCA     CVAL1
+       IFNZRO  DEBUG   <
+       POP1            /POP OUT PDL#1 VERIFIER WORD
+       CIA             /SHOULD BE SAME ON EXIT AS WAS ON ENTRY
+       TAD     PC01
+       SZA             /AFTER COMPLIMENTING, SHOULD BE 0. IS IT?
+       HLT             /NO. SURE GLAD I PUT THIS TEST IN!
+       POP1            /DO THE SAME THING FOR PDL#2
+       CIA
+       TAD     PDLADR
+       SZA             /IS PDL#2 IN LINE?
+       HLT             /NO. AMOUNT OFF IS IN THE AC
+>
+       TAD     MOB1
+       DCA     MOBMOD  /RESTORE MOBMOD COUNTER
+       TAD     MOB0
+       DCA     MOB1
+       POP1
+       DCA     MOB0
+       POP1
+       DCA     STRATG  /RESTORE STRATEGIC VALUE
+       POP1
+       DCA     GNCNT   /RESTORE OLD MOVE GENERATION COUNTER
+       POP1            /POP OFF OLD PLY COMPENSATOR VALUE
+       DCA     PLYFIX+1        /RESTORE IT
+       POP1
+       DCA     UVAL1   /RESTORE "UPPER LEVEL VALUE"
+       POP1            /POP OFF RETURN ADDRESS
+       DCA     TEMP    /RESTORE IT
+       JMP  I  TEMP    /RETURN FROM "LOOKA" SUBROUTINE
+
+\fLKCM, CLA             /ITS A CHECKMATE.
+       IFNZRO  LPTREE<
+       TAD     ("+
+       JMS  I  ZOUT    /PRINT CHECKMATE INDICATION
+>
+       TAD     PLY     /SUBTRACT PLY # FROM
+       TAD     (-3740  /VALUE FOR RETURN VALUE
+       JMS     PLYFIX  /RETURN VALUE IS POSITIVE IF THIS IS AN EVEN PLY
+       DCA     RVAL1
+LKXM,  POP2            /POP THE 2 MARKER WORDS OFF OF PDL2
+       POP2            /THAT "GNMV" PUT THERE
+       JMP     DONE    /READY TO RETURN
+
+/COLOR FIXING SUBROUTINE EXCLUSIVLY FOR THE "LOOKA" SUBROUTINE.
+/FIXES COLOR WITH RESPECT TO PLY EVEN/ODD
+PLYFIX,        0000
+       CIA             /=NOP IF PLY IS ODD, OR TO = CIA IF PLY IS EVEN
+       JMP  I  PLYFIX  /RETURN
+
+/GENERAL PURPOSE COLOR FIXING ROUTINE
+/SET "LCLRFX"+1 ONLY ONCE A PROGRAM INITIALIZATION TIME. SET IT TO
+/EQUAL A "NOP" INSTRUCTION IF THE COMPUTER HAS WHITE, SET IT TO A
+/"CIA" INSTRUSTION IF THE COMPUTER HAS BLACK
+LCLRFX,        0000
+       NOP             /COMPUTER HAS: WHITE="NOP", BLACK="CIA"
+       JMP  I  LCLRFX  /RETURN
+
+\f/STATIC EVALUATION ROUTINE
+LEVAL, CLA CLL
+       JMS  I  ZMAPEC  /MAP PIECES
+       TAD     WHOSE   /GET "WHOSE MOVE SWITCH"
+       SMA CLA         /IS IT WHITES OR BLACKS?
+       JMP     .+4     /WHITES
+       TAD     BKING   /BLACKS. GET BLACKS KING ADDRESS
+       JMS     TSTWAT  /FIND OUT IF IT IS ATTACKED
+       JMP     .+3
+       TAD     WKING   /GET WHITES KINGS ADDRESS
+       JMS     TSTBAT  /FIND OUT IF IT IS ATTACKED
+       TAD     PCNT    /GET # OF ATTACKERS
+       SZA CLA         /IS THE KING IN CHECK?
+       JMP     LKFUR   /YES. LOOK AHEAD 1 MORE MOVE
+IFNZRO LPTREE  <
+       TAD     ("#
+       JMS  I  ZOUT    /PRINT EVALUATION INDICATOR
+       ISZ     ENO     /INC EVALUATION #
+       TAD     ENO     /FIND OUT IF IT IS OF SPECIAL INTREST
+       CIA             /BY TESTING TO SE IF IT IS THE SAME
+       TAD     ENOB    /AS "ENOB"
+       SNA CLA         /IS IT?
+       NOP             /YES. A BREAKPOINT FOR ODT MAY BE PLACED HERE
+       TAD     ENO     /PRINT OUT THE EVALUATION #
+       JMS     OCTNFM
+>
+       JMS     EVAL    /GET AN EVALUATION
+       DCA     RVAL1   /SETUP RETURN VALUE
+       JMP     DONE    /READY TO RETURN
+
+
+/SUBROUTINE TO PRUNE UNDESIRABLE MOVES OUT OF THE TREE BEFORE THEY CREATE
+/HUGE BRANCHES. WHAT TYPES OF MOVES ARE DESIRABLE AND UNDESIRABLE AT ANY GIVEN
+/PLY, IS DETERMINED BY THE TABLE AT LOCATION "PRNPRO"
+/THIS ROUTINE SHOULD SET "PRNCNT" TO THE NUMBER OF MOVES PRUNED
+PRUNE, 0000
+       CLA
+       DCA     PRNCNT  /INIT PRUNED MOVE COUNTER TO 0
+       TAD     GNCHEK  /GET # OF CHECKS ON THE KING
+       SZA             /IS THE KING IN CHECK?
+       JMP  I  PRUNE   /NO. DONT PRUNE ANY MOVES
+       JMS     PLYCHP  /GET PLY #
+       TAD     (JMP  I .+3     /BUILD A JMP I  TO THE PROPER PRUNE PROCEDURE
+       DCA     .+1     /PUT THE JMP I  DOWN SO THAT IT MAY BE EXECUTED
+       HLT             /JMP GOES HERE
+
+PRNPRO,        PPA             /PRUNE PROCEDURE FOR PLY 1
+       PPB             /PRUNE PROCEDURE FOR PLY 2
+       PPB             /PRUNE PROCEDURE FOR PLY 3
+       PPB             /PRUNE PROCEDURE FOR PLY 4 
+       PPB             /PRUNE PROCEDURE FOR PLY 5 
+       PPB             /PRUNE PROCEDURE FOR PLY 6 
+       PPB             /PRUNE PROCEDURE FOR PLY 7 
+       PPB             /PRUNE PROCEDURE FOR PLY 8 OR GREATER
+
+PPA,   JMS     BSTOP   /COUNT ON A "PRE-ANALYSIS"
+PPZ,   JMP  I  PRUNE   /RETURN
+
+PPB,   JMS     HIEP    /FIND OUT THE VALUE OF THE MOST FAVORABLE EN PRISE PIECE CAPTURE
+       SNA CLA         /DOES A FAVORABLE ONE EXIST?
+       JMP     .+4     /NO. COUNT ON THE ENTRY IN "BESTBL"
+       JMS     SETPNT  /YES. SETUP POINTER FOR THE INSERTION
+       TAD     HIEPMS  /OF THE EN PRISE PIECE CAPTURE MSW
+       DCA  I  XR0     /INTO THE "BESTBL"
+       JMS     BSTOP   /IF IT EXISTS, BSTOP WILL INSURE THAT IT IS LOOKED AT FIRST
+       JMP  I  PRUNE   /RETURN
+PAGE
+\f/SUBROUTINE TO SCAN THROUGH THE LAST BUNCH OF MOVES IN PDL#2
+/IF A MOVE EXISTS, WHICH HAS THE SAME MSW AS THE LAST "BEST MOVE"
+/ON THIS PLY, THAT MOVE IS SWAPED WITH THE MOVE ON THE TOP OF THE LIST
+BSTOP, 0000
+       JMS     SETPNT
+       TAD  I  XR0
+       CIA
+       DCA     TEMP2
+       TAD     GNCNT
+       CIA
+       TAD     PRNCNT
+       SNA             /ANY MOVES TO RUMMAGE THRU?
+       JMP  I  BSTOP   /NO. RETURN
+       DCA     TEMP    /SETUP COUNT
+       TAD     TEMP
+       CLL RAL         /MULT TIMES 2 WORDS PER MOVE
+       TAD     PDLADR
+       DCA     TEMP1
+BSTOP1,        TAD  I  TEMP1   /GET AN MSW
+       IFNZRO  DEBUG   <
+       SNA             /DOES IT LOOK LIKE AN MSW
+       HLT             /NOT IF ITS 0 IT DOESNT
+>
+       TAD     TEMP2
+       SNA CLA         /IS IT A MATCH?
+       JMP     BSTOP2  /YES!! GO SWAP IT WITH THE MOVE ON TOP
+       ISZ     TEMP1   /BUMP POINTER BY 2 TO POINT TO THE NEXT MSW
+       ISZ     TEMP1
+       ISZ     TEMP    /COMPARED AGAINST ALL MOVES?
+       JMP     BSTOP1  /NO. DO ANOTHER
+       JMP  I  BSTOP   /YES. RETURN
+BSTOP2,        TAD     PDLADR
+       TAD     (-2
+       DCA     TEMP
+       TAD  I  TEMP
+       DCA  I  TEMP1
+       TAD     TEMP2
+       CIA
+       DCA  I  TEMP
+       ISZ     TEMP
+       ISZ     TEMP1
+       TAD  I  TEMP1
+       DCA     XR0
+       TAD  I  TEMP
+       DCA  I  TEMP1
+       TAD     XR0
+       DCA  I  TEMP
+       JMP  I  BSTOP
+
+
+\f/SUBROUTINE TO EVALUATE THE BACK RANK
+/TO FIND OUT WHAT'S NOT DEVELOPED, AND RETURN A VALUE FOR DEVELOPMENT
+BREV,  0000
+       CLA
+       TAD     (NOP
+       DCA     BREV2   /SETUP TO DO THE WHITE SIDE FIRST
+       JMS     BREV1   /DO AN EVALUATION
+       CIA             /NEGATE THE VALUE FOR WHITES SIDE
+       TAD     STRATG
+       DCA     STRATG
+       TAD     [CIA
+       DCA     BREV2   /SETUP TO DO THE BLACK SIDE
+       TAD     (70     /RANK 8
+       JMS     BREV1   /DO THE BLACK EVALUATION
+       TAD     STRATG
+       DCA     STRATG
+       JMP  I  BREV    /RETURN WITH IT
+
+BREV1, 0000
+       TAD     (BOARD-1/CONSTANT FOR BOARD ADDRESS
+       DCA     ITMP0
+       DCA     TEMP2   /INIT MINOR PIECE COUNTER
+       TAD     [7770   /COUNT FOR 10 SQUARES ON THE BACK RANK
+       DCA     TEMP1
+       TAD  I  ITMP0   /GET THE PIECES VALUE
+BREV2, HLT             /COMPLIMENT IT IF IT IS BLACK
+       TAD     (-KNIGHT
+       SNA             /IS IT A KNIGHT?
+       ISZ     TEMP2   /YES. INC MINOR PIECE COUNTER
+       TAD     (KNIGHT-BISHOP
+       SNA CLA         /IS IT A BISHOP?
+       ISZ     TEMP2   /YES. INC MINOR PIECE COUNTER
+       ISZ     TEMP1   /DONE ALL 8 SQUARES YET?
+       JMP     BREV2-1 /NO. GO BACK AND DO ANOTHER
+       TAD     TEMP2   /ADD IN # OF MINOR PIECES
+       RAL CLL         /MULT TIMES 2
+       RAL CLL         /MULT TIMES 2 AGAIN (2*2=4)
+       JMP  I  BREV1   /RETURN WITH RANK EVALUATION IN THE AC
+/
+/CENTER OCCUPATION EVALUATOR
+COEV,  0000
+       CLA
+       TAD     (-4     /SETUP COUNT FOR 4 CENTER SQUARES
+       DCA     TEMP1
+       TAD     (TAD  I  COTB   /SETUP TO ACCESS ADDRESSES OF THE 4 CENTER SQUARES
+       DCA     COEV1
+COEV1, HLT             /GET SQUARES VALUE
+       SNA             /IS IT OCCUPIED
+       JMP     COEV2   /NO. TEST TO SEE IF DONE
+       SMA CLA         /IS IT A WHITE PIECE?
+       TAD     (10     /VALUE WILL BE +4
+       TAD     (-4     /OR -4 IF IT IS BLACK
+       TAD     STRATG  /ADD TO THE CENTER OCCUPATION VALUE
+       DCA     STRATG
+COEV2, ISZ     COEV1   /INC INSTRUCTION SO THAT IT REFFRENCES THE NEXT CENTER SQUARE
+       ISZ     TEMP1   /DONE ALL 4 SQUARES YET?
+       JMP     COEV1   /NO. DO ANOTHER
+       TAD     TEMP    /YES. GET FINAL VALUE
+       JMP  I  COEV    /AND RETURN
+\f
+/ADDRESSES OF THE 4 CENTER SQUARES
+COTB,  BOARD+33
+       BOARD+34
+       BOARD+43
+       BOARD+44
+
+/CASTLING STATUS EVALUATOR
+CASTEV,        0000
+       CLA
+       TAD     WPSW
+       RAR             /MOVE "CASTLED BIT" INTO LINK
+       SZL CLA         /HAS WHITE CASTLED?
+       TAD     (10     /YES ADD TO STRATEGIC VALUE
+       TAD     STRATG
+       DCA     STRATG
+       TAD     BPSW
+       RAR             /MOVE "CASTLED BIT" TO THE LINK
+       SZL CLA         /HAS BLACK CASTLED YET?
+       TAD     [7770   /YES. SUBTRACT POINTS FROM THE STRATEGIC VALUE
+       TAD     STRATG
+       DCA     STRATG
+       JMP  I  CASTEV  /RETURN
+
+PAGE
+\f/SUBROUTINE TO TEST IF A PIECE IS EN PRISE
+/CALL WITH THE ADDRESS OF THE SQUARE TO BE TESTED IN THE AC
+/IF THE PIECE IS EN PRISE, RETURN WITH THE PREDICTED EXCHANGE
+/LOSS IN THE AC, IF NOT 0 IS RETURNED
+/THE ADDRESS OF THE SQUARE IS RETURNED IN "ENPRAD"
+/RETURN WITH ADDR OF ATTACKER IN "ENPSQR"
+/RETURN WITH ADDR OF THE LEAST VALUABLE DEFENDER IN "PSQR"
+/RETURN WITH THE # OF ATTACKERS IN "ENPCNT"
+/RETURN WITH THE # OF DEFENDERS IN "PCNT"
+ENPRIS,        0000
+       DCA     ENPRAD  /SAVE ADDR OF EN PRIS SQUARE
+       JMS  I  ZMAPEC  /MAKE SURE PIECE MAP IS UP TO DATE
+       TAD  I  ENPRAD
+       SNA             /IS THERE A PIECE ON IT?
+       JMP  I  ENPRIS  /NO. IDIOT! CONSIDER YOURSELF SAVED
+       SMA CLA         /YES. IS IT WHITE OR BLACK?
+       JMP     ENPRWH  /ITS WHITE
+       TAD     ENPRAD  /BLACK. FIND OUT ABOUT WHITES ATTACKS
+       JMS     TSTWAT
+       TAD     PVAL
+       DCA     ENPVAL  /SAVE VALUE OF SMALEST ATTACKER
+       TAD     PCNT
+       SNA             /ANY ATTACKERS?
+       JMP  I  ENPRIS  /NO.RETURN
+       DCA     ENPCNT  /SAVE # OF ATTACKERS
+       TAD     PSQR
+       DCA     ENPSQR  /SAVE ADDR OF LEAST VALUABLE ATTACKER
+       TAD     ENPRAD  /FIND OUT ABOUT DEFENDERS NOW
+       JMS     TSTBAT
+       JMP     ENPR0   /ALL DONE SETTING UP. GO TO THE BUISINESS PART
+ENPRWH,        TAD     ENPRAD  /FIND OUT ABOUT BLACK ATTACKS
+       JMS     TSTBAT
+       TAD     PVAL
+       CIA
+       DCA     ENPVAL  /SAVE VALUE OF LEAST VALUABLE ATTACKER
+       TAD     PSQR
+       DCA     ENPSQR  /SAVE ADDR OF LEAST VALUABLE ATTACKER
+       TAD     PCNT
+       SNA             /ANY ATTACKERS?
+       JMP  I  ENPRIS  /NO. RETURN
+       DCA     ENPCNT  /STORE # OF ATTACKERS
+       TAD     ENPRAD  /FIND OUT ABOUT WHITES DEFENCE
+       JMS     TSTWAT
+       TAD     PVAL
+       CIA             /COMPLIMENT VALUE OF LEAST VALUABLE DEFENDER
+       DCA     PVAL
+ENPR0, TAD     ENPCNT  /GET # OF ATTACKERS
+       CIA
+       TAD     PCNT    /COMPARE WITH # OF DEFENDERS
+       SMA CLA         /MORE ATTACKERS THAN DEFENDERS?
+       JMP     ENPR1   /NO.
+       TAD     PCNT    /# OF DEFENDERS
+       CLL RAR
+       SZA CLA         /MORE THAN 1 DEFENDER?
+       JMP     ENPR1   /YES. TOO COMPLICATED TO PREDICT THE SWAP ALL THE WAY DOWN
+       SNL CLA         /NO. ARE THERE ANY DEFENDERS AT ALL?
+       JMP     ENPR2   /NO. ITS EN PRISE ALL RIGHT
+       TAD  I  ENPRAD  /YES. ITS EXACTLY 1 DEFENDER
+       JMS     CLRFIX
+       TAD     PVAL    /ADD VALUE OF DEFENDER PLUS OBJECT
+       TAD     ENPVAL  /COMPARE WITH THE ATTACKERS VALUE
+       SMA CLA         /IS ATTACKER SMALLER THAN DEFENDER PLUS OBJECT?
+       JMP     ENPR3   /NO. THE OBJECT IS NOT EN PRISE
+       TAD     PVAL    /-D
+       TAD     ENPVAL  /+A
+       SPA SNA CLA     /IS DEFENDER SMALLER THAN ATTACKER?
+       JMP     ENPR2   /NO. HE WONT CAPTURE BACK THEN
+       TAD     PVAL    /YES
+       TAD     ENPVAL
+       JMS     CLRFIX
+ENPR2, TAD  I  ENPRAD
+       CIA
+       JMP  I  ENPRIS  /RETURN
+ENPR1, CLA
+       TAD  I  ENPRAD  /COMPARE VALUE OF OBJECT
+       JMS     CLRFIX
+       TAD     ENPVAL  /WITH THE VALUE OF THE ATTACKER
+       SMA             /IS THE ATTACKERS VALUE SMALLER?
+ENPR3, CLA             /NO. PIECE IS NOT EN PRISE
+       CIA
+       JMS     CLRFIX
+       JMP  I  ENPRIS  /RETURN
+ENPRAD,        0000
+ENPVAL,        0000
+ENPSQR,        0000
+ENPCNT,        0000
+       IFNZRO DEBUG<
+/TEST OF THE "ENPRIS" ROUTINE
+TESTEP,        JMS     INPUT
+       JMS  I  ZMAPEC
+       TAD     [BOARD
+       DCA     TSTTMP
+       TAD     (7700
+       DCA     TSTCNT
+TEP2,  TAD     TSTTMP
+       JMS     ENPRIS
+       SNA             /IS IT EN PRIS?
+       JMP     TEP1    /NO
+       JMS     OCTOUT
+       JMS     SPACE
+       TAD     TSTTMP
+       JMS     OUTSQR
+       JMS  I  ZCRLF
+TEP1,  ISZ     TSTTMP
+       ISZ     TSTCNT
+       JMP     TEP2
+       HLT
+       JMP     TESTEP
+TSTTMP,        0000
+TSTCNT,        0000
+>
+PAGE
+\f/SUBROUTINE TO RETURN THE EXCHANGE VALUE OF THE HIGHEST EN PRISE
+/PIECE THAT CAN BE TAKEN BY THE SIDE TO MOVE
+/ADDED IN WITH THE VALUE IS A 10 POINT "PENALTY" FOR EACH ADDITIONAL EN PRISE PIECE
+/THAT CAN BE TAKEN
+/THE VALUE IS RETURNED IN SUCH A WAY THAT IT CAN SIMPLY BE ADDED
+/TO THE  EVALUATION
+/CALL WITH AC CLEAR TO USE NORMALY
+/THIS ROUTINE CALCULATES WHOSE MOVE IT IS BY EXAMINING LOCATION "WHOSE"
+HIEP,  0000
+       CLA
+       TAD     WHOSE
+       SPA CLA         /IS IT WHITES MOVE OR BLACKS?
+       TAD     (NOP-CIA        /BLACKS - SET "HIEPX"=NOP
+       TAD     [CIA    /WHITES - SET "HIEPX"=CIA
+       DCA     HIEPX   /SEE
+       DCA     HIEPVL  /INIT VALUE TO 0
+       DCA     HIEPCN  /INIT COUNT TO 0
+       JMS  I  ZMAPEC  /MAKE SURE THE PIECE MAP IS UP TO DATE
+       TAD     (-12
+       JMS     HIEPFX
+       TAD     (MAP+12 /BUILD THE ADDR OF THE PIECE MAP(WHICHEVER ONE IT IS)
+       DCA     HMAPAD
+HIEP1, CLA
+       TAD  I  HMAPAD  /GET PIECE ADDR
+       ISZ     HMAPAD  /INC MAP ADDRESS POINTER
+       SNA             /DONE ALL PIECES YET?
+       JMP     HIEP2   /YES
+       DCA     HIEPTM  /STORE ADDR FOR THE MOMENT
+       TAD  I  HIEPTM  /GET THE PIECES VALUE
+       JMS     HIEPFX
+       TAD     (-KING  /COMPARE IT WITH THAT OF A KING
+       SNA CLA         /IS IT A KING?
+       JMP     HIEP1   /YES. KINGS CANT BE SWAPED ANYWAYS
+       TAD     HIEPTM  /NO. GET THE PIECES ADDR
+       JMS     ENPRIS  /FIND OUT IF IT IS ENPRIS
+       SNA             /IS IT?
+       JMP     HIEP1   /NO. TRY THE NEXT ONE
+       DCA     HIEPTM  /YES. SAVE THE EXCHANGE VALUE
+       ISZ     HIEPCN  /INC EN PRIS PIECE COUNTER
+       TAD     HIEPVL  /GET BEST VALUE SO FAR
+       CIA
+       TAD     HIEPTM  /COMPARE IT WITH THE ONE JUST AQUIRED
+       JMS     HIEPFX
+       SMA CLA         /IS THE ONE WE JUST GOT BIGGER?
+       JMP     HIEP1   /NO. GO TRY ANOTHER PIECE
+       TAD     HIEPTM  /YES.MAKE THE ONE WE JUST GOT THE NEW VALUE TO BEAT
+       DCA     HIEPVL
+       TAD     ENPSQR  /BUILD MSW FOR THE MOVE TO CAPTURE THIS EN PRISE PIECE
+       AND     [0077   /"FROM SQUARE" IS THAT OF THE
+       RTL CLL         /LEAST VALUABLE ATTACKER
+       RTL
+       RTL
+       DCA     HIEPTM
+       TAD     ENPRAD  /"TO SQUARE" IS THAT OF THE PIECE ITSELF
+       AND     [0077
+       TAD     HIEPTM  /COMBINE "TO" AND "FROM" 6BIT ADDRESSES
+       DCA     HIEPMS  /INTO ONE CONVIENIENT MSW
+       JMP     HIEP1   /GO TRY ANOTHER PIECE
+HIEP2, CLA CMA
+       TAD     HIEPCN  /GET # OF EN PRISE PIECES
+       SPA             /WERE THERE ANY?
+       CLA             /NO
+       CLL RTL
+       RAL             /MULT TIMES 8 AND INCLUDE IN THE VALUE RETURNED
+       CIA
+       JMS     HIEPFX
+       TAD     HIEPVL  /GET THE EXCHANGE VALUE
+       JMP  I  HIEP    /RETURN
+
+HIEPFX,        0000
+HIEPX, HLT             /NOP,BLACKS MOVE/CIA,WHITES MOVE
+       JMP  I  HIEPFX
+
+HIEPVL,        0000
+HIEPTM,        0000
+HIEPCN,        0000
+HIEPMS,        0000
+HMAPAD,        0000
+
+
+/SUBROUTINE TO SETUP THE BOARD
+SETBRD,        0000
+       CLA CLL
+       TAD     (-100   /IST PUT ALL OF THE PIECES ON THE BOARD
+       DCA     TEMP    /SETUP A COUNT FOR 64 SQUARES
+       TAD     (BOARD-1
+       DCA     ITMP0   /BOARD ADDRESS TO AUTO INDEX REG
+       TAD     (SAVBRD-1
+       DCA     ITMP1   /SAVED BOARD ADDRESS TO AUTO-INDEX REG
+       TAD  I  ITMP1   /MOVE FROM THE SAVED BOARD AREA
+       DCA  I  ITMP0   /TO THE WORKING AREA
+       ISZ     TEMP    /DONE 64 SQUARES YET?
+       JMP     .-3     /NO. DO MORE
+       TAD     (-40    /NOW CLEAR OUT THE MIDDLE
+       DCA     TEMP
+       TAD     (BOARD+17
+       DCA     ITMP1
+       DCA  I  ITMP1
+       ISZ     TEMP    /CLEARED OUT 32 SQUARES YET?
+       JMP     .-2     /NO. DO 1 MORE
+       DCA     LSTMV
+       DCA     WPSW    /ENABLE CASTLING BY WHITE
+       DCA     BPSW    /AND BY BLACK
+       DCA     PW      /INITIALIZE TOTAL PIECE VALUE
+       JMP  I  SETBRD  /RETURN
+
+COMTM, IAC             /TOURNAMENT MODE SETTING
+       IAC
+COMBM, IAC             /BLITZ MODE SETTING
+       DCA     DEPTH   /DEPTH=3 FOR TOURNAMENT MODE, DEPTH=1 FOR BLITZ MODE
+       JMP     COMMAN
+
+PAGE
+\f
+/THIS IS THE INTERRUPT HANDLING ROUTINE
+INTHAN,        DCA     ACHOLD  /SAVE ACCUMULATOR
+       RAL             /LINK TO AC11
+       DCA     LKHOLD  /SAVE LINK
+       KSF             /KEYBOARD INTERRUPT?
+       HLT             /NO. UNEXPLANED INTERRUPT. PRESS START (CLEAR&CONT) TO CLEAR FLAGS
+       KRB             /YES. GET THE CHAR
+       SNA             /IS IT A NULL CHARACTER ?
+       JMP     RTINT   /YES. IGNOR IT TOTALY
+       AND     (0177   /MAKE SURE BIT 4 IS SET IN
+       TAD     (200    /CASE OF A PARITY TTY
+       DCA     CHAR    /NOW STORE THE CHAR. FOR EASY ACCESS
+       TAD     ISW     /GET INPUT IN PROGRESS SWITCH
+       SNA CLA         /IS IT SET?
+       JMP     RTINT   /NO. RETURN AND FORGET THAT THIS HAPPENED
+       TAD     CHAR    /LOAD IT BACK INTO THE AC
+       JMS  I  ZOUT    /ECCO IT
+       TAD     CHAR    /TEST IF IT IS TO BE IGNORED
+       TAD     (-240
+       SNA CLA         /IS IT A SPACE ?
+       JMP     RTINT   /YES. IGNOR IT
+       ISZ     CNTCHR  /TOO MUCH INPUT?
+       SKP             /NO
+       JMP     UGO     /YES. PRINT "^U", REINITIALIZE, AND TRY AGAIN
+       TAD     CHAR    /LOAD THE CHAR BACK INTO THE AC AGAIN
+       TAD     (-215   /FIND OUT IF IT IS A SPECIAL CHARACTER (CR OR RUBOUT)
+       SNA             /IS IT A CR?
+       JMP     LINDUN  /YES! HE'S DONE TYPING THE INPUT LINE
+       TAD     (215-377
+       SNA             /IS IT A RUBOUT CHAR?
+       JMP     RUBGO   /YES. DELETE THE LAST CHAR TYPED
+       TAD     (377-225        /NO
+       SNA CLA         /IS IT A CONTROL-U?
+       JMP     UGO     /YES. DELETE A WHOLE LINE
+       TAD     CHAR    /NO.
+IFNZRO OS8<
+       TAD     (-203
+       SNA CLA         /IS CHAR A CONTROL-C  ?
+       JMP     MONITR  /YES
+       TAD     CHAR    /NO. GET ITS VALUE BACK AGAIN
+>
+       DCA  I  CLIST   /STORE THE CHAR. IN THE KEYBOARD BUFFER
+RTINT, TAD     LKHOLD  /RESTORE THE LINK TO ITS PRE-INTERRUPT STATE
+       CLL RAR
+       TAD     ACHOLD  /RESTORE ACCUMULATOR
+       RMF             /AND THE MEMORY FIELDS
+       ION             /WITH INTERRUPT ENABLED,
+       JMP  I  IFRM    /RETURN TO MAIN PROGRAM
+ACHOLD,        0000            /HOLD AC AFTER INTERRUPT
+LKHOLD,        0000            /HOLD LINK AFTER INTERRUPT
+
+LINDUN,        DCA  I  CLIST   /MARK THE END OF INPUT WITH A 0000 CHAR. IN BUFFER
+       TAD     (KBUF-1 /REINITIALIZE THE KEYBOARD BUFFER
+       DCA     CLIST
+       DCA     ISW     /CLEAR THE INPUT SWITCH
+       JMS  I  ZCRLF   /PRINT A CARRIAGE RETURN-LINE FEED
+       JMP     RTINT   /RETURN
+
+LNOGO, JMS  I  ZCRLF   /PRINT A CARRIAGE RETURN LINE FEED
+       JMS  I  ZBEGIN  /REINITIALIZE INPUT BUFFER
+       JMP     RTINT   /RETURN FROM THE LAST INTERRUPT
+
+/IO STALL SUBROUTINE: RETURN WHEN INPUT IS DONE
+CHKIO, 0000
+       CLA
+       TAD     ISW     /GET THE INPUT SWITCH
+       ISZ     RANDOM  /INCREMENT THE RANDOM NUMBER
+       SZA CLA         /IS INPUT DONE?
+       JMP     .-4     /NO: CHECK AGAIN
+       IOF             /DONT NEED THIS ANYMORE
+       JMP  I  CHKIO   /YES: RETURN
+
+RUBGO, CLA
+       TAD     (KBUF-1
+       CIA
+       TAD     CLIST
+       SNA CLA         /ARE WE AT THE BEGINING OF A LINE ALLREADY?
+       JMP     LNOGO   /YES.
+       TAD     ("\     /NO. PRINT A "\" CHAR
+       JMS  I  ZOUT
+       CMA CLA         /NOW MOVE BACK THE BUFFER POINTER
+       TAD     CLIST
+       DCA     CLIST
+       JMP     RTINT   /RETURN FROM INTERUPT
+
+UGO,   CLA
+       PRINTO; MESG21  /PRINT A "^U"
+       JMP     LNOGO   /GO SETUP FOR A NEW LINE
+
+\f/FOLLOWING IS THE LEGAL  COMMAND LIST
+/IT CONSISTS OF A NUMBER OF 2WORD ENTRIES
+/THE 1ST WORD IN EACH ENTRY IS THE 6BIT REPRESENTATION(NEGATED FOR EASY COMPARING)
+/OF A 2 CHARACTER COMMAND
+/THE 2ND WORD CONTAINS THE ADDRESS TO GO TO IF THAT COMMAND IS TYPED
+COMLST,        -2027;  COMPW   /PW - PLAY WHITE
+       -2002;  COMPB   /PB - PLAY BLACK
+       -2016;  COMPN   /PN - PLAY NIETHER WHITE OR BLACK
+       -0204;  COMBD   /BD - DISPLAY THE POSITION
+       -1120;  COMIP   /IP - INPUT A POSITION
+       -2205;  START   /RE - RESET  (RESIGN)
+       -1526;  CMOVE   /MV - MOVE
+       -2313;  COMSK   /SK - SKIP A MOVE
+       -0215;  COMBM   /BM - BLITZ MODE
+       -2415;  COMTM   /TM - TOURNAMENT
+       IFNZRO  LPTREE <
+       -1424;  COMLT   /LT - OUTPUT TREE TO LINE PRINTER(LP08)
+>
+       -0000;  0000    /END OF COMMAND LIST
+
+MESG14,        TEXT \STALEMATE\
+MESG24,        TEXT \YOUR MOVE? \
+
+PAGE
+\f
+/MESSAGE PRINTING SUBROUTINE--CALL WITH ADDR OF MESSAGE IN AC
+/RETURN WITH THE AC CLEAR
+/IF CALLED WITH THE AC IS CLEAR THE ADDRESS OF THE MESSAGE IS TAKEN FROM THE WORD
+/AT THE ADDRESS+1 OF THE CALL TO THIS SUBROUTINE, AND THE RETURN ADDRESS
+/IS THE ADDRESS+2 OF THE CALLING JMS
+MES,   0000
+       SZA             /IS THE ADDRESS OF THE MESSAGE IN THE AC?
+       JMP     .+3     /YES. DONT BOTHER GETTING IT FROM THE WORD FOLLOWING THE JMS
+       TAD  I  MES     /NO. BOTHER PLEASE
+       ISZ     MES     /AND INC THE RETURN ADDRESS
+       DCA     TEMP    /STORE THE ADDRESS OF THE MASSAGE
+MES2,  TAD  I  TEMP    /GRAB 2 CHARS. PACKED INTO 1 WORD
+       RTR
+       RTR
+       RTR
+       JMS     TYPO    /PRINT CHAR IN BITS 0-5
+       TAD  I  TEMP
+       JMS     TYPO    /PRINT CHAR IN BITS 6-11
+       ISZ     TEMP    /NEXT WORD PLEASE
+       JMP     MES2
+
+TYPO,  0000
+       AND     [0077   /CLEAROUT BITS BELONGING TO THE OTHER CHAR.
+       SNA             /IS IT A NULL CHARACTER?
+       JMP  I  MES     /YES: RETURN
+       TAD     [-40    /NO. CONVERT IT TO 8 BIT
+       SPA
+       TAD     (100
+       TAD     (240
+       JMS  I  ZOUT    /NOW PRINT IT
+       JMP  I  TYPO
+
+/PRINTOUT SUBROUTINE--SINGLE CHARACTER
+OUT,   0000
+       TLS             /FIRST PRINT THE CHAR
+       TSF             /WAIT FOR THE FLAG TO RETURN
+       JMP     .-1     /NOT YET IT HASN'T
+       TCF             /CLEAR FLAG TO AVOID TELLEPRINTER INTERUPTS
+       CLA
+       JMP  I  OUT     /RETURN
+
+/CARRIAGE RETURN & LINE FEED SUBROUTINE
+CRLF,  0000
+       CLA
+       TAD     (215
+       JMS  I  ZOUT    /PRINT THE CR
+       JMS  I  ZOUT    /AND A NULL
+       TAD     (212
+       JMS  I  ZOUT    /PRINT THE LF
+       JMS  I  ZOUT    /PRINT A COUPLE OF NULL FILLER CHARS IN CASE SOMEONE
+       JMS  I  ZOUT    /TRYS TO USE A FANCY VIDEO-SCREEN TERMINAL
+       JMP  I  CRLF    /RETURN
+
+/INITIALIZE INPUT
+BEGIN, 0000
+       CLA IAC
+       DCA     ISW     /SET THE 'INPUT IN PROGRESS' SWITCH
+       TAD     (KBUF-1 /INITIALIZE THE KEYBOARD BUFFER POINTER
+       DCA     CLIST
+       TAD     (-30
+       DCA     CNTCHR  /30 CHARACTERS MAXIMUM
+       KCC             /REINITIALZE THE KEYBOARD FLAG
+       JMP  I  BEGIN   /RETURN
+
+/GET A CHARACTER FROM THE INPUT BUFFER
+/IGNOR  "-" AND ":" CHARACTERS
+GETC,  0000
+       CLA
+       TAD  I  CLIST   /TAKE A CHAR. OUT OF THE BUFFER
+       DCA     TEMP    /MAKE IT EASILY REACHED
+       TAD     TEMP    /FIND OUT IF THE CHAR SHOULD BE IGNORED
+       TAD     (-"-
+       SNA             /IS IT A MINUS SIGN?
+       JMP     GETC+1  /YES. IGNOR IT
+       TAD     ("--":  /NO. TEST FOR A COLON
+       SNA CLA         /IS IT A COLON?
+       JMP     GETC+1  /YES. IGNOR IT
+       TAD     TEMP    /NO. LOAD IT BACK INTO AC
+       JMP  I  GETC    /RETURN
+
+/SUBROUTINE TO PRINT A "SIGNED OCTAL" NUMBER
+OCTOUT,        0000
+       DCA     TEMP
+       JMS     SPACE   /PRINT A LEADING SPACE
+       TAD     TEMP
+       SPA CLA         /IS IT A NEGATIVE #?
+       TAD     ("--"   /YES PRINT A MINUS SIGN
+       TAD     (" 
+       JMS  I  ZOUT
+       TAD     TEMP    /GET # AGAIN
+       SPA             /IS IT NEGATIVE?
+       CIA             /YES. MAKE POSITIVE
+       JMS     OCTNFM  /PRINT IN OCTAL
+       JMP  I  OCTOUT  /RETURN
+
+/SUBROUTINE TO PRINT OUT AN OCTAL NUMBER WITH NO FORMATING
+OCTNFM,        0000
+       RAL             /ROTATE INTO POSITION
+       DCA     TEMP
+       TAD     (-4
+       DCA     TEMP1   /SETUP COUNT FOR 4 DIGITS
+OCTMID,        TAD     TEMP
+       RAL
+       RTL
+       DCA     TEMP
+       TAD     TEMP
+       AND     [0007
+       TAD     ("0
+       JMS I   ZOUT
+       ISZ     TEMP1
+       JMP     OCTMID
+       JMP  I  OCTNFM  /RETURN
+
+/SUBROUTINE TO PRINT A SPACE CHARACTER
+SPACE, 0000
+       CLA
+       TAD     (240    /LOAD AC WITH SPACE CODE
+       JMS  I  ZOUT    /SEND IT OUT
+       JMP  I  SPACE   /RETURN
+
+IFNZRO OS8     <
+/PRINT A "^C" AND RETURN TO THE OS8 MONITOR
+MONITR,        CLA
+       PRINTO; MESG18  /PRINT "^C"
+       CIF CDF 0       /MONITOR IS IN FIELD 0
+       JMP  I  (7600   /GO TO MONITOR
+>
+
+IFNZRO LPTREE  <
+/SUBROUTINE TO TAB OVER TO COLOMN # "PLY"
+TABPLY,        0000
+       CLA
+       TAD     PLY     /GET PLY #
+       SNA             /IS IT ZERO?
+       IAC             /YES. DO ONE TAB ANYWAYS
+       CIA
+       DCA     CMBCNT  /SETUP COLOMN COUNTER
+       PRINTO; MESG19  /PRINT 8 SPACES
+       ISZ     CMBCNT  /TABBED ENOUGH PLACES YET?
+       JMP     .-3     /NO. TAB AGAIN
+       JMP  I  TABPLY  /YES. RETURN
+CMBCNT,        0000
+>
+PAGE
+\f
+/SUBROUTINE TO TRY TO INTERPERT THE CONTENTS OF THE KEYBOARD
+/BUFFER AS A MOVE TYPED IN USING MODIFIED
+/ALGEBREIC NOTATION, TEST THE MOVES LEGALITY, AND MAKE THE
+/MOVE ON THE BOARD
+/IF INPUT IS NOT A LEGAL MOVE RETURN IS TO THE ADDRESS+1
+/OF THE CALLING JMS  AND THE AC  MAY NOT BE CLEARED
+INMV,  0000
+       CLA
+       DCA     IOMSW   /INITIALIZE MSW AND MDW
+       DCA     IOMDW
+       JMS  I  ZGETC   /GET A CHARACTER
+       JMS     ISA2H   /IS IT A LETTER "A" TO "H" ?
+       JMP     INCA    /NO. MOVE MUST BE CASTLING
+       TAD     (-301
+       RTL CLL
+       RTL
+       RTL
+       JMS     INPAK   /STORE THIS CHAR AND GET NEXT
+       JMS     IS128   /IS IT A NUMBER "1" TO "8" ?
+       JMP  I  INMV    /NO: BAD INPUT, TAKE ERROR RETURN
+       TAD     (-261
+       RTR CLL         /ROTATE BITS 9-11 INTO THE 'FROM RANK' POSITION
+       RTR
+       JMS     INPAK   /PACK IT INTO MSW AND GET NEXT CHAR
+       JMS     ISA2H   /IS IT A LETTER "A" TO "H" ?
+       JMP  I  INMV    /NO. TAKE ERROR RETURN
+       TAD     (-301
+       JMS     INPAK
+       JMS     IS128   /IS IT A NUMBER "1" TO "8" ?
+       JMP  I  INMV    /NO. TAKE ERROR RETURN
+       TAD     (-261
+       RTL CLL         /YES. ROTATE BITS 9-11 INTO THE 'TO RANK' POSITION
+       RAL
+       JMS     INPAK
+       TAD     (-"=
+       SZA CLA         /IS IT AN EQUAL SIGN?
+       JMP     INMID-1 /NO. INPUT FINISHED, CHECK FOR LEGALITY
+       NOP             /YES. HE SAYS IT'S A PAWN PROMOTION
+       JMS  I  ZGETC   /GET THE LETTER OF THE PROMOTION PIECE
+       TAD     (-"Q
+       SNA             /IS IT A QUEEN?
+       JMP     IPPQ    /YES
+       TAD     ("Q-"R
+       SNA             /IS IT A ROOK?
+       JMP     IPPR    /YES
+       TAD     ("R-"B
+       SNA             /IS IT A BISHOP?
+       JMP     IPPB    /YES
+       TAD     ("B-"N
+       SNA             /IS IT A KNIGHT?
+       JMP     IPPN    /YES
+       JMP  I  INMV    /NO. NONE OF THE ABOVE. TAKE ERROR RETURN
+IPPQ,  IAC
+IPPR,  IAC
+IPPB,  IAC
+IPPN,  TAD     (0004
+       DCA     IOMDW
+       JMP     INMID-1
+
+INCA,  TAD     (-"O
+       SZA CLA         /COULD IT BE CASTLING?
+       JMP  I  INMV    /NO TAKE ERROR RETURN
+       JMS  I  ZGETC   /IT MUST BE CASTLING, GET NEXT CHAR
+       TAD     (-"O
+       SZA CLA         /IS IT AN "O" ?
+       JMP  I  INMV    /NO. TAKE ERROR RETURN
+       TAD     PONDIR  /YES. THE MOVE IS CASTLING CALCULATE THE 8TH RANK
+       AND     (7070   /AND USE IT TO HELP BUILD AN MSW
+
+       TAD     (0406   /KING ALWAYS STARTS FROM FILE 4
+       DCA     IOMSW
+       JMS  I  ZGETC   /GET ANOTHER CHAR
+       TAD     (-"O    /ANOTHER "O" MEANS QUEEN SIDE CASTLING
+       SZA             /IS IT QUEENS SIDE?
+       JMP     INMID-1 /NO. INPUT DONE. CHECK FOR LEGALITY
+       TAD     (-4     /YES. CHANGE 'TO FILE' TO C
+       TAD     IOMSW
+       DCA     IOMSW
+       JMS     GNMVSM  /GENERATE THE MOVES OF THE SIDE TO MOVE
+INMID, POP2            /POP OFF AN MDW
+       DCA     TOMAK2  /STORE IT
+       POP2            /POP OFF AN MSW
+       SNA             /IS IT AN MSW OR THE END OF THE LIST?
+       JMP  I  INMV    /END OF LIST AND MOVE NOT FOUND, TAKE ERROR RETURN
+       CIA
+       TAD     IOMSW   /COMPARE THE MSW WITH THE ONE HE INPUTED
+       SZA CLA         /MATCH?
+       JMP     INMID   /NO: TRY NEXT
+       TAD     IOMSW   /YES
+       DCA     TOMAK1  /STORE THE MSW
+       TAD     IOMDW   /GET THE INPUTED MDW
+       SNA CLA         /IS IT = 0  ?
+       JMP     INMID2  /YES. MOVE IS LEGAL
+       TAD     TOMAK2
+       AND     [0007   /CLEAR IRRELEVENT BITS
+       CIA
+       TAD     IOMDW
+       SZA CLA         /DO THE IMPORTANT PARTS OF THE MDW'S MATCH?
+       JMP     INMID   /NO TRY NEXT MOVE FOR A MATCK
+INMID2,        JMS  I  ZMKMV   /MAKE THE MOVE
+       IPDL1           /REINITIALIZE PUSH DOWN LIST #1
+       JMS     POPOUT  /REINITIALIZE PDL2
+       ISZ     INMV    /NORMAL RETURN IS TO THE ADDRESS+2 OF THE CALLING JMS
+       JMP  I  INMV    /RETURN
+
+\f/SUBROUTINE USED BY INMV. ADDS NEW COMPONENT TO  'IOMSW'
+/ALSO GETS NEXT CHAR FROM THE BUFFER, AND RETURN WITH ITS VALUE IN THE AC
+INPAK, 0000
+       TAD     IOMSW
+       DCA     IOMSW
+       JMS  I  ZGETC
+       JMP  I  INPAK
+
+MESG18,        TEXT \^C\
+MESG15,        TEXT \O-O-O\
+NAME,  TEXT \CHEKMO-II\
+
+PAGE
+\f/SUBROUTINE TO OUTPUT A MOVE IN MODIFIED ALGEBREIC NOTATION
+/CALL WITH MSW IN 'IOMSW', AND MDW IN 'IOMDW'
+OUTMV, 0000
+       CLA
+       TAD     (" 
+       DCA     IOCH1
+       TAD     (" 
+       DCA     IOCH2
+       TAD     IOMDW
+       AND     [0007   /BUILD A JUMP
+       TAD     (JMP  .+3
+       DCA     .+1
+       HLT             /A JUMP TO ONE OF THE NEXT 8 INSTRUCTIONS IS PLACED HERE
+
+       JMP     OUTSTD  /STANDARD OUTPUT FOR NORMAL MOVES
+       JMP     OUTQCA  /QUEEN-SIDE CASTLING
+       JMP     OUTKCA  /KING-SIDE CASTLING
+       JMP     OUTSTD  /STANDARD OUTPUT FOR 'EN PASSANT' CAPTURES
+       TAD     ("N-"B  /PRIMOTE TO A KNIGHT
+       TAD     ("B-"R  /PROMOTE TO A BISHOP
+       TAD     ("R-"Q  /PROMOTE TO A ROOK
+       TAD     ("Q     /PROMOTE TO A QUEEN
+       DCA     IOCH2
+       TAD     ("=     /PRINT AN EQUAL SIGN BEFORE LETTER OF THE PROMOTION PIECE
+       DCA     IOCH1
+OUTSTD,        CLA             /DO STANDARD OUTPUT
+       TAD     IOMSW   /GET THE MSW FOR THE MOVE TO BE OUTPUT
+       RTR             /ROTATE THE 'FROM FILE' BITS INTO AC 9-11
+       RTR
+       RTR
+       JMS     OUTSQR  /OUTPUT THE "FROM" SQUARE COORDINATES
+       TAD     IOMDW   /TEST TO SEE IF MOVE IS A CAPTURE
+       SPA CLA         /IS IT?
+       TAD     (":-"-  /YES: OUTPUT A ":" INSTEAD OF A "-"
+       TAD     ("-     /LOAD AC WITH THE CODE FOR A DASH
+       JMS  I  ZOUT    /OUTPUT IT
+       TAD     IOMSW   /GET MSW
+       JMS     OUTSQR  /OUTPUT THE "TO" SQUARE COORDINATES
+       TAD     IOCH1   /THIS IS A SPACE UNLESS MOVE IS A PAWN PROMOTION
+       JMS  I  ZOUT
+       TAD     IOCH2   /THIS IS A SPACE UNLESS MOVE IS A PAWN PROMOTION
+       JMS  I  ZOUT    /PRINT THE LAST CHARACTER AND,
+       JMP  I  OUTMV   /RETURN
+
+\f/SUBROUTINE TO OUTPUT THE COORDINATES OF A SQUARE
+/CALL WITH SQUARE # IN AC BITS 6-11
+OUTSQR,        0000
+       DCA     IOTMP   /SAVE  SQR #
+       TAD     IOTMP
+       AND     [0007   /CLEAR BITS 0-8
+       TAD     (301    /OUTPUT FILE AS A CHARACTER "A" TO "H"
+       JMS  I  ZOUT
+       TAD     IOTMP   /GET MSW
+       RTR             /MOVE RANK INTO BITS 9-11
+       RAR
+       AND     [0007
+       TAD     (261    /BUILD A CHARACTER "1" TO "8"
+       JMS  I  ZOUT    /OUTPUT IT
+       JMP  I  OUTSQR  /RETURN
+
+OUTKCA,        IAC             /PASS OVER THE FIRST "O-" OF THE QUEEN SIDE CASTLING MESSAGE
+OUTQCA,        TAD     (MESG15 /GET ADDRESS OF THE QUEEN SIDE CASTLING MESSAGE
+       PRINTO          /TYPE THE MESSAGE
+       JMP  I  OUTMV   /RETURN
+IOCH1, 0000
+IOCH2, 0000
+IOTMP, 0000
+
+/SUBROUTINE TO CHECK FOR A CHARACTER FROM "1" TO "8". SKIP IF IT IS
+/CALL W/CHARACTER IN AC, RETURN SAME WAY
+IS128, 0000
+       TAD     (-"1
+       SPA             /GREATER OR EQUAL TO "1"?
+       JMP     .+4     /NO. DON'T SKIP
+       TAD     [7770
+       SPA CLA         /LESS THAN "8"?
+       ISZ     IS128   /YES. INC RETURN ADDRESS
+       CLA
+       TAD     TEMP    /LOAD THE CHARACTER BACK INTO THE AC
+       JMP  I  IS128   /RETURN
+
+\f/SUBROUTINE TO CHECK FOR A CHARACTER FROM "A" TO "H"
+/CALL W/CHARACTER IN AC, RETURN SAME
+/SUBROUTINE EFFECTS A SKIP IF CHAR IS BETWEEN "A" AND "H"
+ISA2H, 0000
+       TAD     (-"A
+       SPA             /IS IT >= "A" ?
+       JMP     .+4     /NO. DONT SKIP
+       TAD     [7770
+       SPA CLA         /IS IT <= "H" ?
+       ISZ     ISA2H   /YES. INC RETURN ADDRESS
+       CLA
+       TAD     TEMP    /GET CHAR BACK
+       JMP  I  ISA2H   /RETURN
+
+/SUBROUTINE TO TEST FOR CHECKMATE OR STALEMATE
+QMATE, 0000
+       JMS     GNMVSM  /GENERATE THE MOVES OF THE SIDE WHOSE MOVE IT IS
+       JMS     POPOUT  /DONT NEED THE MOVES JUST THE INFO ON THEM
+       TAD     GNCNT   /GET # OF MOVES GENERATED
+       SZA CLA         /ANY?
+       JMP  I  QMATE   /YES. RETURN
+       TAD     CMSW    /NO. GET CHECKMATE SWITCH
+       SNA CLA         /IS IT SET?
+       TAD     (-MESG9+MESG14  /NO. GET ADDR OF STALEMATE MESSAGE
+       TAD     (MESG9  /ADD ADDR OF CHECKMATE MESAGE
+       PRINTO          /PRINT THE MESSAGE OUT
+       JMS  I  ZCRLF
+       JMS     DISPLA  /PRINTOUT THE FINAL POSITION
+       JMP     START   /START A NEW GAME
+
+
+       IFNZRO  LPTREE <
+COMLT, TAD     LTSW
+       CMA
+       DCA     LTSW
+       JMP     COMMAN
+>
+COMSK, TAD     WHOSE   /COMPLIMENT THE "WHOSE MOVE" SWITCH
+       CMA             /SO THAT SOMEONE MISSES A MOVE
+       DCA     WHOSE
+       DCA     LSTMV   /DISABLE EN PASSANT PAWN CAPTURES FOR THE NEXT MOVE
+       JMP     COMMAN
+
+PAGE
+\fMESG19,       TEXT \        \
+MESG21,        TEXT \^U\
+
+IFNZRO LPTREE  <
+/SUBROUTINE TO OUTPUT A CHARACTER TO THE LINE PRINTER
+/CALL WITH THE CHAR. IN THE AC, RETURN WITH THE AC CLEARED
+LPTOUT,        0000
+       SNA             /TRYING TO PRINT A NULL CHAR ?
+       JMP  I  LPTOUT  /YES. DONT BOTHER, JUST RETURN
+       DCA     LPTMP   /STORE THE CHAR JUST FOR A MOMENT
+       TAD     LTSW    /GET TREE PRINTOUT SWITCH
+       SNA CLA         /IS IT SET?
+       JMP  I  LPTOUT  /NO. DO NO OUTPUT TO THE LINE PRINTER
+       LAS             /READ SWITCHES
+       SMA CLA         /SWITCH 0 SET?
+       JMP  I  LPTOUT  /NO. DO NOT OUTPUT TO LINE PRINTER
+       TAD     LPTMP   /YES.
+       PSKE            /ERROR?
+       SKP             /NO. CONTINUE
+       JMP     .-2     /YES. WAIT FOR THE ERROR TO GO AWAY
+       PSKF            /IS THE PRINTER READY TO ACCEPT THE CHAR?
+       JMP     .-1     /NO. TEST AGAIN, AND AGAIN
+       PCLF PSTB       /YES. PRINT IT
+       CLA             /GET READY TO RETURN
+       PCIE            /CLEAR LINE PRINTER INTERUPT FLAG
+       JMP  I  LPTOUT  /RETURN
+LPTMP, 0000            /TEMP STORAGE FOR LINE PRINTER ROUTINE
+LTSW,  0000            /TREE PRINTOUT SWITCH
+>
+\f/ CHESSBOARD PRINTER
+
+DISPLAY,0
+       JMS  I  ZCRLF   /PRINT A BLANK LINE
+       TAD (BOARD+70-1
+       DCA RNKPTR      /POINT TO TOP RANK
+       TAD [7770
+       DCA RNKKNT      /SET UP FOR 8 RANKS
+RNKLUP,        TAD RNKPTR
+       DCA XR0         /POINT TO BEFORE LEFTMOST SQUARE IN RANK
+       TAD [7770
+       DCA FILKNT      /SET UP FOR 8 SQUARES PER RANK
+       JMP RL1
+RL2,   TAD (240
+       JMS I ZOUT
+RL1,   DCA COLOR       /SET COLOR TO ZERO
+       TAD I XR0       /GET PIECE
+       SNA             /IS SQUARE OCCUPIED?
+       JMP EMPTY       /NO
+       SPA             /YES
+       ISZ COLOR       /SET COLOR TO 1 IF BLACK PIECE
+       SPA
+       CIA             /TAKE ABSOLUTE VALUE OF PIECE
+       TAD [-PAWN
+       SNA             /IS IT A PAWN?
+       JMP DP          /YES
+       TAD (PAWN-KNIGHT/NO
+       SNA             /IS IT A KNIGHT?
+       JMP DN          /YES
+       TAD (KNIGHT-BISHOP/NO
+       SNA             /IS IT A BISHOP?
+       JMP DB          /YES
+       TAD (BISHOP-ROOK/NO
+       SNA             /IS IT A ROOK?
+       JMP DR          /YES
+       TAD (ROOK-QUEEN /NO
+       SNA             /IS IT HER MAJESTY?
+       JMP DQ          /YES
+       TAD (QUEEN-KING /NO
+       SNA CLA         /IS IT HIS HIGHNESS?
+       JMP DK          /YES
+       TAD ("?-"P      /IT'S AN UNKNOWN PIECE
+DP,    TAD ("P-"N
+DN,    TAD ("N-"B
+DB,    TAD ("B-"R
+DR,    TAD ("R-"K
+DK,    TAD ("K-"Q
+DQ,    TAD ("Q
+       DCA PIECE       /SAVE PIECE
+       TAD COLOR       /WHICH COLOR PIECE IS IT?
+       SZA CLA
+       TAD ("B-"W      /BLACK
+       TAD ("W         /WHITE
+       JMS I ZOUT      /PRINT COLOR OF PIECE
+       TAD PIECE
+       JMS I ZOUT      /PRINT NAME OF PIECE
+       JMP NEXT
+EMPTY, TAD XR0
+       RTR
+       RAR
+       AND [0007       /ISOLATE RANK
+       TAD XR0         /ADD IN FILE
+       RAR             /PUT PARITY IN LINK
+       SZL CLA         /WHITE OR BLACK SQUARE?
+       TAD ("--"*      /WHITE
+       TAD ("*         /BLACK
+       DCA PIECE
+       TAD PIECE
+       JMS I ZOUT
+       TAD PIECE
+       JMS I ZOUT
+NEXT,  ISZ FILKNT      /AT END OF RANK?
+       JMP RL2         /NO, GO ON TO NEXT SQUARE
+       JMS I ZCRLF     /YES, GO TO NEXT RANK
+       TAD RNKPTR
+       TAD [7770
+       DCA RNKPTR
+       ISZ RNKKNT      /WAS THIS THE LAST RANK?
+       JMP RNKLUP      /NO, PROCEED TO NEXT RANK
+       JMS I ZCRLF     /AN EXTRA CRLF FOR GOOD LUCK
+       JMP I DISPLAY   /RETURN
+
+PAGE
+\f
+/CHESS POSITION INPUTTER
+/INPUT A LINE AT A TIME IN FORSYTH NOTATION
+/
+/ POSIBLE ERRORS....
+/ 1?   TRYING TO PUT TOO MUCH STUFF ON A RANK
+/ 2?   INCOMPLETE RANK SPECIFICATION(NOT ENOUGH STUFF)
+/ 3?   UNKNOWN PIECE LETTER
+/ 4?   PIECE COLOR NOT "W" OR "B"
+
+INPUT, 0
+       JMS I ZCRLF
+       TAD (BOARD+70-1
+       DCA RNKPTR
+       TAD [7770
+       DCA RNKKNT      /SET UP FOR 8 RANKS
+RNLUP, TAD RNKPTR
+       DCA XR0
+       TAD     (">
+       JMS  I  ZOUT    /PRINT A ">" TO INDIACTE READYNESS FOR INPUT
+       TAD     (7767
+       DCA FILKNT
+       JMS I ZBEGIN    /SETUP TO READ A LINE OF INPUT
+       ION             /GO !
+       JMS I ZCHKIO
+RL3,   JMS I ZGETC     /READ A CHARACTER
+       SNA             /AT END OF LINE?
+       JMP EOL         /YES
+       JMS I (IS128    /IS CHAR A DIGIT?
+       JMP LETTR       /NO
+       TAD (-260       /YES, CONVERT TO DIGIT
+       CIA
+       DCA COLOR
+       JMS     CHK     /TEST FOR TOO ENOUGH STUFF ON THIS RANK ALREADY
+       DCA I XR0
+       ISZ COLOR
+       JMP .-3
+       JMP RL3
+
+LETTR, TAD (-"B
+       SNA             /IS IT A BLACK PIECE?
+       JMP BLP         /YES
+       TAD ("B-"W
+       SZA CLA         /IS IT A WHITE PIECE?
+       JMP ERR4        /NOT "B" OR "W"
+WHP,   STA
+BLP,   DCA COLOR
+       JMS CHK
+       JMS I ZGETC     /GET PIECE NAME
+       TAD (-"B
+       SNA             /IS IT A BISHOP?
+       JMP GB          /YES
+       TAD ("B-"N      /NO
+       SNA             /IS IT A KNIGHT?
+       JMP GN          /YES
+       TAD ("N-"P      /NO
+       SNA             /IS IT A PAWN?
+       JMP GP          /YES
+       TAD ("P-"R      /NO
+       SNA             /IS IT A ROOK?
+       JMP GR          /YES
+       TAD ("R-"K      /NO
+       SNA             /IT IT A KING?
+       JMP GK          /YES
+       TAD ("K-"Q      /NO
+       SNA             /IT IT A QUEEN?
+       JMP GQ          /YES
+       TAD ("Q-"S      /NO
+       SNA CLA         /IS IT A SPRINGER?
+       JMP GN          /YES, ACCEPT AS KNIGHT
+       JMP ERR3        /UNKNOWN PIECE
+
+GP,    TAD (PAWN-KNIGHT
+GN,    TAD (KNIGHT-BISHOP
+GB,    TAD (BISHOP-ROOK
+GR,    TAD (ROOK-QUEEN
+GQ,    TAD (QUEEN-KING
+GK,    TAD (KING
+       ISZ COLOR       /WHICH COLOR
+       CIA             /COMPLEMENT VALUE IF BLACK
+       DCA I XR0       /STORE AWAY PIECE
+       JMP RL3         /REITERATE
+
+EOL,   ISZ     FILKNT  /WERE 8 SQUARES INPUTTED?
+       JMP ERR2        /NO, TOO FEW SQUARES
+       TAD RNKPTR
+       TAD [7770
+       DCA RNKPTR      /POINT TO NEXT RANK
+       ISZ RNKKNT      /WAS THIS LAST RANK?
+       JMP RNLUP       /NO
+       DCA     BPSW    /YES. INITIALIZE POSITION STATUS WORDS
+       DCA     WPSW    /TO ALLOW CASTLING
+       DCA     LSTMV   /DISSALLOW EN PASSANT PAWN CAPTURES FOR THE NEXT MOVE
+       JMS     BRDVAL  /THEN FIGURE OUT ITS VALUE
+/<<DANGER>>    THE AC MIGHT NOT EQUAL ZERO NOW!
+       JMS I ZCRLF     /LET GUY KNOW HE'S THROUGH
+       JMS     DISPLA  /PRINT OUT THE BOARD JUST INPUTED
+       JMP I INPUT     /RETURN
+
+ERR4,  IAC
+ERR3,  IAC
+ERR2,  IAC
+ERR1,  TAD (61
+       JMS I ZOUT
+       TAD ("?
+       JMS I ZOUT
+       JMS I ZCRLF
+       JMP RNLUP
+
+CHK,   0
+       ISZ     FILKNT  /IS THIS RANK FULL ALREADY?
+       JMP  I  CHK     /NO. KEEP GOING
+       JMP     ERR1    /YES. SIGNAL ERROR
+
+MESG9, TEXT \CHECKMATE\
+MESG22,        TEXT \B. \
+MESG23,        TEXT \W. \
+
+PAGE
+\f*7400
+/TABLE AREA
+
+MAP,   ZBLOCK  50      /50 WORDS RESERVED FOR PIECE MAP
+
+KBUF,  ZBLOCK  30      /30 WORDS RESERVED FOR THE KEYBOARD BUFFER
+
+/ THE BOARD
+
+BOARD, IFNZRO  .&0077<?BOARD MUST OCCUPY 1ST OR 2ND HALF OF A PAGE ?>
+
+
+        ROOK
+        KNIGHT
+        BISHOP
+       QUEEN
+        KING
+        BISHOP
+        KNIGHT
+        ROOK
+
+        PAWN
+        PAWN
+        PAWN
+        PAWN
+        PAWN
+        PAWN
+        PAWN
+        PAWN
+
+ZBLOCK  40
+
+        -PAWN
+        -PAWN
+        -PAWN
+        -PAWN
+        -PAWN
+        -PAWN
+        -PAWN
+        -PAWN
+
+        -ROOK
+        -KNIGHT
+        -BISHOP
+        -QUEEN
+        -KING
+        -BISHOP
+        -KNIGHT
+        -ROOK
+
+$&$
+\fSAID FARMER BROWN
+\fWHOSE BALD
+\fON TOP
+\fWISH I COULD
+\fROTATE THE CROP
+\fBURMA SHAVE
+\f
+\fCHEKMO-II WAS WRITTEN, PRODUCED AND DIRECTED BY:      JOHN E. COMEAU
+\f