Listing of file='CHESS1.MAC;01' on disk='vmedia/sargon_chess_1-sector.ccvf'
TITLE CHESS1 ; PART 1 OF THE CHESS PLAYING PROGRAM, SARGON 1 ENTRY INITBD,FNDMOV,MOVE,UNMOVE,INCHK,GENMOV ENTRY BESTM,BOARD,COLOR,KOLOR,MOVENO,SCORE ENTRY PLYMAX,PLYIX,MLPTRI,MLPTRJ,PMATE,POSK ENTRY MLIST,MLNXT,MLFRP,NEWBRD EXTRN DRIVER EXTRN CMPHD SARGON: JMP DRIVER PAGE(62) ;------------------------------------------------ ; TABLES SECTION ; DATA MUST NOT SPAN A PAGE (AIDS ADDR CALCS) DIRN: DB +09,+11,-11,-09 DB +10,-10,+01,-01 DB -21,-12,+08,+19 DB +21,+12,-08,-19 DIRECT: DBP: DB 4,-10,-10,-11,-9,0,0,0,0 DP: DB 4,10,10,11,9,0,0,0,0 DN: DB 8,-21,-12,8,19,21,12,-8,-19 DB: DB 4,9,11,-11,-9,0,0,0,0 DR: DB 4,10,-10,1,-1,0,0,0,0 DQ: DB 8,9,11,-11,-9,10,-10,1,-1 DK: DB 8,9,11,-11,-9,10,-10,1,-1 PVALUE EQU PVALA-1 PVALA: DB 1,3,3,5,9,10 PIECES: DB 4,2,3,5,6,3,2,4 BOARD: DS 120 WACT EQU ATKLST BACT EQU ATKLST+14 ATKLST: DS 28 PAD: DS 20 ;PREVENTS SPANNING PAGE PLIST EQU PLISTA-1 PLISTD EQU PLIST+10 PLISTA: DS 20 POSK: DS 2 POSQ: DS 2 DB -1 SCORE: DS 12 PLYIX: DS 40 ; TABLE INDICES SECTION M1: DS 2 M2: DS 2 M3: DS 2 M4: DS 2 T1: DS 2 T2: DS 2 T3: DS 2 NPINS: DS 2 MLPTRI: DW PLYIX MLPTRJ: DS 2 SCRIX: DS 2 BESTM: DS 2 MLLST: DS 2 MLNXT: DW MLIST ; VARIABLES SECTION KOLOR: DS 1 COLOR: DS 1 P1: DB 0 P2: DB 0 P3: DB 0 PMATE: DB 0 MOVENO: DS 1 PLYMAX: DS 1 NPLY: DS 1 CKFLG: DB 0 MATEF: DB 0 VALM: DB 0 BRDC: DS 1 PTSL: DS 1 PTSW1: DS 1 PTSW2: DS 1 MTRL: DS 1 BC0: DB 0 MV0: DB 0 PTSCK: DS 1 NEWBRD: DS 1 BMOVES: DB 35,55,10H DB 34,54,10H DB 85,65,10H DB 84,64,10H MLIST EQU 0E000H MLEND EQU MLIST+2040 MLPTR EQU 0 MLFRP EQU 2 MLTOP EQU 3 MLFLG EQU 4 MLVAL EQU 5 PAWN EQU 1 KNIGHT EQU 2 BISHOP EQU 3 ROOK EQU 4 QUEEN EQU 5 KING EQU 6 WHITE EQU 0 BLACK EQU 80H BPAWN EQU BLACK+PAWN ;-------------------------------------------------- ; PROGRAM CODE SECTION INITBD: MVI B,8 LXI D,PIECES LXI H,BOARD+21 IB2: LDAX D MOV M,A INX H INX D DCR B JNZ IB2 INX H INX H MVI B,8 IB3: MVI M,1 INX H DCR B JNZ IB3 LXI H,BOARD+81 MVI B,8 IB6: MVI M,81H INX H DCR B JNZ IB6 INX H INX H MVI B,8 LXI D,PIECES IB7: LDAX D ORI 80H MOV M,A INX D INX H DCR B JNZ IB7 LXI H,POSK MVI M,25 INX H MVI M,95 INX H MVI M,24 INX H MVI M,94 MVI A,1 STA NEWBRD RET ;-------------------------------------------------- PATH: LXI H,M2 MOV A,M ADD C MOV M,A LXI H,BOARD ADD L MOV L,A MOV A,M CPI -1 JZ PA3 STA P2 MOV L,A ;TEMP SAVE P2 ANI 07H STA T2 RZ ;A=0 LDA P1 XRA L JP PA2 MVI A,1 RET PA2: MVI A,2 RET PA3: MVI A,3 RET ;-------------------------------------------------- MPIECE: XRA M ANI 87H CPI BPAWN JNZ MP1 DCR A MP1: ANI 07H STA T1 MOV L,A RLC RLC RLC ADD L LXI H,DIRECT ADD L MOV L,A MOV B,M INX H MP5: PUSH H MOV C,M LDA M1 STA M2 MP10: CALL PATH CPI 2 JNC MP15 PUSH PSW LDA T1 CPI PAWN+1 JC MP20 CALL ADMOVE POP PSW ANA A JNZ MP15 LDA T1 CPI KING JZ MP15 CPI BISHOP JNC MP10 MP15: POP H INX H DCR B JNZ MP5 LDA T1 CPI KING CZ CASTLE RET ; PAWN LOGIC MP20: MOV A,B CPI 3 JC MP35 JZ MP30 POP PSW ANA A JNZ MP15 LDA M2 CPI 91 JNC MP25 CPI 29 JNC MP26 MP25: LDA P2 ORI 20H STA P2 MP26: CALL ADMOVE POP H INX H PUSH H DCR B LDA P1 ANI 08H JZ MP10 JMP MP15 MP30: POP PSW ANA A JNZ MP15 MP31: CALL ADMOVE JMP MP15 MP35: POP PSW ANA A JZ MP38 LDA M2 CPI 91 JNC MP37 CPI 29 JNC MP31 MP37: LDA P2 ORI 20H STA P2 JMP MP31 MP38: CALL ENPSNT JMP MP15 ;--------------------------------------------------- ENPSNT: LDA P1 ANI 80H LDA M1 JZ EN1 ADI 10 EN1: CPI 61 RC CPI 69 RNC LHLD MLPTRJ LXI D,MLFLG DAD D MOV A,M ANI 10H RZ DCX H MOV A,M STA M4 LXI H,BOARD ADD L MOV L,A MOV A,M STA P3 ANI 07H CPI PAWN RNZ LDA M4 LXI H,M2 SUB M JP EN6 XRI -1 INR A EN6: CPI 10 RNZ LDA P2 ORI 40H STA P2 CALL ADMOVE LDA M1 STA M3 LDA M4 STA M1 STA M2 LDA P3 STA P2 CALL ADMOVE LDA M3 STA M1 ;-------------------------------------------------- ADJPTR: LHLD MLLST LXI D,-6 DAD D SHLD MLLST MVI M,0 INX H MVI M,0 RET ;-------------------------------------------------- CASTLE: LDA P1 ANI 08H RNZ LDA CKFLG ANA A RNZ LXI B,0FF03H CA5: LDA M1 ADD C MOV C,A STA M3 LXI H,BOARD ADD L MOV L,A MOV A,M ANI 7FH CPI ROOK JNZ CA20 MOV A,C JMP CA15 CA10: LDA M3 LXI H,BOARD ADD L MOV L,A MOV A,M ANA A JNZ CA20 LDA M3 CPI 22 JZ CA15 CPI 92 JZ CA15 CALL ATTACK ANA A JNZ CA20 LDA M3 CA15: ADD B STA M3 LXI H,M1 CMP M JNZ CA10 SUB B SUB B STA M2 LXI H,P2 MVI M,40H CALL ADMOVE LXI H,M1 MOV A,M MOV M,C SUB B STA M2 XRA A STA P2 CALL ADMOVE CALL ADJPTR LDA M3 STA M1 CA20: MOV A,B CPI 1 RZ LXI B,01FCH JMP CA5 ;-------------------------------------------------- ADMOVE: LHLD MLNXT XCHG LXI H,MLEND CALL CMPHD RC LHLD MLLST XCHG SHLD MLLST XCHG MOV M,E INX H MOV M,D LDA P1 ANI 08H JNZ AM4 LDA P2 ORI 10H STA P2 AM4: XCHG MVI M,0 INX H MVI M,0 INX H LDA M1 MOV M,A INX H LDA M2 MOV M,A INX H LDA P2 MOV M,A INX H MVI M,0 INX H SHLD MLNXT RET ;-------------------------------------------------- GENMOV: CALL INCHK STA CKFLG LHLD MLNXT XCHG LHLD MLPTRI INX H INX H MOV M,E INX H MOV M,D INX H SHLD MLPTRI SHLD MLLST MVI A,21 GM5: STA M1 LXI H,BOARD ADD L MOV L,A MOV A,M ANA A JZ GM10 CPI -1 JZ GM10 STA P1 LXI H,COLOR XRA M CP MPIECE GM10: LDA M1 INR A CPI 99 JNZ GM5 RET ;-------------------------------------------------- INCHK: LDA COLOR INCHK1: LXI H,POSK ANA A JZ IN4 INX H IN4: MOV A,M STA M3 LXI H,BOARD ADD L MOV L,A MOV A,M STA P1 ANI 07H STA T1 CALL ATTACK RET ;--------------------------------------------------- ATACK: PUSH B MVI B,16 LXI H,DIRN AK5: PUSH H MOV C,M MVI D,0 LXI H,BOARD LDA M3 ADD L MOV L,A AK10: INR D MOV A,L ADD C MOV L,A MOV A,M CPI -1 JZ AK12 ANI 07H JZ AK11 LDA P1 XRA M JP AK14B MOV A,D ANI 40H JNZ AK12 MOV A,D ORI 20H MOV D,A JMP AK14 AK11: MOV A,B CPI 9 JNC AK10 AK12: POP H INX H DCR B JNZ AK5 XRA A POP B RET AK14B: MOV A,D ANI 20H JNZ AK12 MOV A,D ORI 40H MOV D,A AK14: MOV A,M STA P2 ANI 07H STA T2 MOV E,A MOV A,B CPI 9 JC AK25 MOV A,E CPI QUEEN JNZ AK15 MOV A,D ORI 80H MOV D,A JMP AK30 AK15: CPI KING JNZ AK16 MOV A,D ANI 0FH DCR A JZ AK26 AK16: MOV A,B CPI 13 JC AK21 MOV A,E CPI BISHOP JZ AK30 DCR A ;PAWN? JNZ AK12 MOV A,D ANI 0FH DCR A JNZ AK12 MOV A,M ANA A JP AK20 MOV A,B CPI 15 JC AK12 JMP AK30 AK20: MOV A,B CPI 15 JNC AK12 JMP AK30 AK25: MOV A,E CPI KNIGHT JNZ AK12 AK26: CALL ATKSAV JMP AK12 AK21: MOV A,E CPI ROOK JNZ AK12 AK30: CALL ATKSAV JMP AK10 ;--------------------------------------------------- ATTACK: PUSH B MVI B,16 LXI H,DIRN AT5: PUSH H MOV C,M MVI D,0 LDA M3 STA M2 AT10: INR D LXI H,M2 MOV A,M ADD C MOV M,A LXI H,BOARD ADD L MOV L,A MOV A,M CPI -1 JZ AT12 STA P2 MOV L,A ANI 07H STA T2 JZ AT11 LDA P1 XRA L JP AT14B MOV A,D ANI 40H JNZ AT12 MOV A,D ORI 20H MOV D,A JMP AT14 AT11: MOV A,B CPI 9 JNC AT10 AT12: POP H INX H DCR B JNZ AT5 XRA A AT13: POP B RET AT14B: MOV A,D ANI 20H JNZ AT12 MOV A,D ORI 40H MOV D,A AT14: LDA T2 MOV E,A MOV A,B CPI 9 JC AT25 MOV A,E CPI QUEEN JNZ AT15 MOV A,D ORI 80H MOV D,A JMP AT30 AT15: MOV A,D ANI 0FH CPI 1 JNZ AT16 MOV A,E CPI KING JZ AT30 AT16: MOV A,B CPI 13 JC AT21 MOV A,E CPI BISHOP JZ AT30 MOV A,D ANI 0FH CPI 1 JNZ AT12 CMP E JNZ AT12 LDA P2 ANI 80H JZ AT20 MOV A,B CPI 15 JC AT12 JMP AT30 AT20: MOV A,B CPI 15 JNC AT12 JMP AT30 AT21: MOV A,E CPI ROOK JNZ AT12 JMP AT30 AT25: MOV A,E CPI KNIGHT JNZ AT12 AT30: MOV A,D ANI 20H JZ AT32 MVI A,1 POP H ;REMOVE PTR FROM STACK JMP AT13 CALL ATKSAV AT32: LDA T2 CPI KING JZ AT12 CPI KNIGHT JZ AT12 JMP AT10 ;-------------------------------------------------- ATKSAV: PUSH H PUSH B PUSH D LDA NPINS ANA A CNZ PNCK LXI H,WACT LDA P2 RLC ;*2 & ALSO BIT 7 TO CF JNC AS2 LXI H,BACT AS2: ANI 0EH ;GET PIECE NO.*2 (MASK BIT 0) MOV E,A MOV A,D ANI 80H JZ AS4 MVI E,QUEEN*2 AS4: INR M MVI D,0 DAD D XCHG LHLD T2 LXI B,PVALUE DAD B XCHG MOV A,M ANA A JZ AS20 INX H MOV A,M ANA A JZ AS20 INX H ;INCR TO 1ST KING SLOT MOV A,M ;MOVE 1ST KING SLOT TO 2ND INX H MOV M,A DCX H ;POINT BACK TO 1ST KING SLOT AS20: LDAX D MOV M,A POP D POP B POP H RET ;--------------------------------------------------- PNCK: MOV D,C MVI E,1 MOV B,A LXI H,PLISTA PC0: LDA M2 PC1: CMP M INX H JZ PC2 DCR B JNZ PC1 RET PC2: DCR E JNZ PC5 PUSH H MVI A,9 ADD L MOV L,A MOV A,M POP H CMP D JZ PC3 XRI -1 INR A CMP D JNZ PC5 PC3: DCR B JNZ PC0 RET PC5: POP PSW POP D POP B RET ;-------------------------------------------------- PINFND: XRA A STA NPINS LXI D,POSK PF1: LDAX D ANA A JNZ PF1A INX D JMP PF1 PF1A: CPI -1 RZ STA M3 LXI H,BOARD ADD L MOV L,A MOV A,M STA P1 MVI B,8 LXI H,DIRN PF2: PUSH H LDA M3 STA M2 XRA A STA M4 MOV C,M PF5: CALL PATH ANA A JZ PF5 CPI 3 JZ PF25 CPI 2 JZ PF15 LDA M4 ANA A JZ PF25 LDA T2 CPI QUEEN JZ PF19 MOV L,A MOV A,B CPI 5 JC PF10 MOV A,L CPI BISHOP JNZ PF25 JMP PF20 PF10: MOV A,L CPI ROOK JNZ PF25 JMP PF20 PF15: LDA M4 ANA A JNZ PF25 LDA M2 STA M4 JMP PF5 PF19: LDA P1 ANI 07H CPI QUEEN JNZ PF20 PUSH B PUSH D XRA A MVI B,28 LXI H,ATKLST PF19A: MOV M,A INX H DCR B JNZ PF19A MVI A,7 STA T1 CALL ATTACK LXI H,WACT LXI D,BACT LDA P1 ANI 80H JZ PF19B XCHG PF19B: MOV A,M XCHG SUB M DCR A POP D POP B JP PF25 PF20: LXI H,NPINS INR M LDA NPINS LXI H,PLISTD ADD L MOV L,A MOV M,C MVI A,-10 ADD L MOV L,A LDA M4 MOV M,A PF25: POP H INX H DCR B JNZ PF2 INX D JMP PF1 ;--------------------------------------------------- XCHNG: LXI H,WACT LXI D,BACT LDA P1 RLC JNC XC02 XCHG XC02: MOV B,M INR B INX H SHLD HLDASH XCHG MOV C,M INR C INX H SHLD DEDASH MVI E,0 LDA T3 LXI H,PVALUE ADD L MOV L,A MOV A,M ADD A PUSH PSW MOV H,A DCR C JZ XCEND PUSH H LHLD DEDASH XC04: INX H MOV A,M ANA A JZ XC04 MVI M,0 SHLD DEDASH ADD A POP H MOV D,A JMP XC10 XC09: MOV A,E SUB H MOV E,A MOV H,L XC10: MOV L,D DCR B JZ XC18 PUSH H LHLD HLDASH XC11: INX H MOV A,M ANA A JZ XC11 MVI M,0 SHLD HLDASH ADD A POP H MOV D,A MOV A,H CMP L JNC XC109 MOV A,D XC15: CMP L JC XCEND DCR C JZ XCEND PUSH H LHLD DEDASH XC16: INX H MOV A,M ANA A JZ XC16 MVI M,0 SHLD DEDASH ADD A POP H MOV L,A DCR B JZ XC18 PUSH H LHLD HLDASH XC17: INX H MOV A,M ANA A JZ XC17 MVI M,0 SHLD HLDASH ADD A POP H JMP XC15 XC18: MOV A,E ADD H MOV E,A JMP XCEND XC109: MOV A,E ADD H MOV E,A MOV H,L XC110: MOV L,D DCR C JZ XC118 PUSH H LHLD DEDASH XC111: INX H MOV A,M ANA A JZ XC111 MVI M,0 SHLD DEDASH ADD A POP H MOV D,A MOV A,H CMP L JNC XC09 MOV A,D XC115: CMP L JC XCEND DCR B JZ XCEND PUSH H LHLD HLDASH XC116: INX H MOV A,M ANA A JZ XC116 MVI M,0 SHLD HLDASH ADD A POP H MOV L,A DCR C JZ XC118 PUSH H LHLD DEDASH XC117: INX H MOV A,M ANA A JZ XC117 MVI M,0 SHLD DEDASH ADD A POP H JMP XC115 XC118: MOV A,E SUB H MOV E,A XCEND: POP PSW MOV D,A RET HLDASH: DS 2 DEDASH: DS 2 ;----------------------------------------------------- POINTS: XRA A STA MTRL STA BRDC STA PTSL STA PTSW1 STA PTSW2 STA PTSCK MVI A,21 PT5: STA M3 LXI H,BOARD ADD L MOV L,A MOV A,M CPI -1 JZ PT25 LXI H,P1 MOV M,A ANI 07H STA T3 CPI KNIGHT JC PT6X CPI ROOK JC PT6B CPI KING JZ PT6AA LDA MOVENO CPI 7 JC PT6A JMP PT6X PT6AA: MOV A,M ANI 10H JZ PT6A MVI A,M ANI 80H MVI A,6 JZ PT6D MVI A,-6 JMP PT6D PT6A: MOV A,M ANI 08H JZ PT6X JMP PT6C PT6B: MOV A,M ANI 08H JNZ PT6X PT6C: MOV A,M ANI 80H MVI A,-2 JZ PT6D MVI A,2 PT6D: LXI H,BRDC ADD M MOV M,A PT6X: XRA A MVI B,28 LXI H,ATKLST PT10: MOV M,A INX H DCR B JNZ PT10 CALL ATTACK LXI H,BACT LDA WACT SUB M LXI H,BRDC ADD M MOV M,A LDA P1 ANA A JZ PT25 CALL XCHNG XRA A CMP E JZ PT23 DCR D LDA P1 LXI H,COLOR XRA M ANI 80H MOV A,E JNZ PT20 LXI H,PTSL CMP M JC PT23 MOV M,E LHLD MLPTRJ INX H INX H INX H LDA M3 CMP M JNZ PT23 STA PTSCK JMP PT23 PT20: LXI H,PTSW1 CMP M JC PT21 MOV A,M MOV M,E PT21: LXI H,PTSW2 CMP M JC PT23 MOV M,A PT23: LXI H,P1 MOV A,M ANI 80H MOV A,D JZ PT24 XRI -1 INR A PT24: LXI H,MTRL ADD M MOV M,A PT25: LDA M3 INR A CPI 99 JNZ PT5 LDA PTSCK ANA A JZ PT26 LDA PTSW2 STA PTSW1 XRA A STA PTSW2 PT26: LDA PTSL ANA A JZ PT28 DCR A PT28: MOV B,A LDA PTSW1 ANA A JZ PT30 LDA PTSW2 ANA A JZ PT30 DCR A ANA A RAR PT30: SUB B MOV H,A LDA COLOR ANI 80H MOV A,H JZ PT32 XRI -1 INR A PT32: LXI H,MTRL ADD M LXI H,MV0 SUB M MOV E,A ANA A JP PT50 CPI -30 JNC PT52 MVI E,-30 JMP PT52 PT50: CPI 30 JC PT52 MVI E,30 PT52: LDA BRDC LXI H,BC0 SUB M MOV D,A LDA PTSCK ANA A JZ PT54 MVI D,0 PT54: MOV A,D ANA A JP PT56 CPI -6 JNC PT58 MVI D,-6 JMP PT58 PT56: CPI 6 JC PT58 MVI D,6 PT58: MOV A,E ADD A ADD A ADD D MOV H,A LDA COLOR ANI 80H MOV A,H JNZ PT60 XRI -1 INR A PT60: ADI 80H STA VALM LHLD MLPTRJ LXI D,MLVAL DAD D MOV M,A RET ;--------------------------------------------------- MOVE: PUSH B LHLD MLPTRJ INX H INX H MV1: MOV A,M STA M1 INX H MOV A,M STA M2 INX H MOV D,M LXI B,BOARD LDA M1 ADD C MOV C,A LDAX B MOV E,A MOV A,D ANI 20H JNZ MV15 MOV A,E ANI 07H CPI QUEEN JZ MV20 CPI KING JZ MV30 MV5: XRA A STAX B LXI B,BOARD LDA M2 ADD C MOV C,A MOV A,E ORI 08H STAX B MOV A,D ANI 40H JNZ MV40 MOV A,D ANI 07H CPI QUEEN JNZ MV60 LXI H,POSQ MOV A,D ANI 80H JZ MV10 INX H MV10: XRA A MOV M,A JMP MV60 MV15: MOV A,E ORI 04H MOV E,A JMP MV5 MV20: LXI H,POSQ MV21: MOV A,E ANI 80H JZ MV22 INX H MV22: LDA M2 MOV M,A JMP MV5 MV30: LXI H,POSK MOV A,D ANI 40H JZ MV21 MOV A,E ORI 10H MOV E,A JMP MV21 MV40: LHLD MLPTRJ LXI D,8 DAD D JMP MV1 MV60: POP B RET ;--------------------------------------------------- UNMOVE: PUSH B LHLD MLPTRJ INX H INX H UM1: MOV A,M STA M1 INX H MOV A,M STA M2 INX H MOV D,M LXI B,BOARD LDA M2 ADD C MOV C,A LDAX B MOV E,A MOV A,D ANI 20H JNZ UM15 MOV A,E ANI 07H CPI QUEEN JZ UM20 CPI KING JZ UM30 UM5: MOV A,D ANI 10H JNZ UM16 UM6: MOV A,D ANI 8FH STAX B LXI B,BOARD LDA M1 ADD C MOV C,A MOV A,E STAX B MOV A,D ANI 40H JNZ UM40 MOV A,D ANI 07H CPI QUEEN JNZ UM60 LXI H,POSQ MOV A,D ANI 80H JZ UM10 INX H UM10: LDA M2 MOV M,A JMP UM60 UM15: MOV A,E ANI 0FBH MOV E,A JMP UM5 UM16: MOV A,E ANI 0F7H MOV E,A JMP UM6 UM20: LXI H,POSQ UM21: MOV A,E ANI 80H JZ UM22 INX H UM22: LDA M1 MOV M,A JMP UM5 UM30: LXI H,POSK MOV A,D ANI 40H JZ UM21 MOV A,E ANI 0EFH MOV E,A JMP UM21 UM40: LHLD MLPTRJ LXI D,8 DAD D JMP UM1 UM60: POP B RET ;---------------------------------------------------- SORTM: LHLD MLPTRI MOV B,H MOV C,L LXI D,0 SR5: MOV H,B MOV L,C MOV C,M INX H MOV B,M MOV M,D DCX H MOV M,E XRA A CMP B RZ MOV H,B MOV L,C SHLD MLPTRJ CALL EVAL LHLD MLPTRJ MOV B,H MOV C,L LHLD MLPTRI SR15: MOV E,M INX H MOV D,M XRA A CMP D JZ SR25 LDA VALM PUSH H LXI H,MLVAL DAD D CMP M POP H JNC SR30 SR25: MOV M,B DCX H MOV M,C JMP SR5 SR30: XCHG JMP SR15 ;-------------------------------------------------- EVAL: CALL MOVE CALL INCHK ANA A JZ EV5 XRA A STA VALM JMP EV10 EV5: CALL PINFND CALL POINTS EV10: CALL UNMOVE RET ;-------------------------------------------------- FNDMOV: LDA NEWBRD CPI 1 JZ BOOK XRA A STA NPLY LXI H,0 SHLD BESTM LXI H,MLIST SHLD MLNXT LXI H,PLYIX-2 SHLD MLPTRI LDA KOLOR STA COLOR LXI H,SCORE SHLD SCRIX LDA PLYMAX ADI 2 MOV B,A XRA A FM1: MOV M,A INX H DCR B JNZ FM1 STA BC0 STA MV0 CALL PINFND CALL POINTS LDA BRDC STA BC0 LDA MTRL STA MV0 FM5: LXI H,NPLY INR M XRA A STA MATEF CALL GENMOV LDA NPLY LXI H,PLYMAX CMP M CC SORTM LHLD MLPTRI SHLD MLPTRJ FM15: LHLD MLPTRJ MOV E,M INX H MOV D,M MOV A,D ANA A JZ FM25 XCHG SHLD MLPTRJ XCHG LHLD MLPTRI MOV M,E INX H MOV M,D LDA NPLY LXI H,PLYMAX CMP M JC FM18 CALL MOVE CALL INCHK ANA A JZ FM16 CALL UNMOVE JMP FM15 FM16: LDA NPLY LXI H,PLYMAX CMP M JNZ FM35 LDA COLOR XRI 80H CALL INCHK1 ANA A JZ FM35 JMP FM19 FM18: LHLD MLPTRJ LXI D,MLVAL DAD D MOV A,M ANA A JZ FM15 CALL MOVE FM19: LXI H,COLOR MVI A,80H XRA M MOV M,A ANI 80H JNZ FM20 LXI H,MOVENO INR M FM20: LHLD SCRIX MOV A,M INX H INX H MOV M,A DCX H SHLD SCRIX JMP FM5 FM25: LDA MATEF ANA A JNZ FM30 LDA CKFLG ANA A MVI A,80H JZ FM36 LDA MOVENO STA PMATE MVI A,-1 JMP FM36 FM30: LDA NPLY CPI 1 RZ CALL ASCEND LHLD SCRIX INX H INX H MOV A,M DCX H DCX H JMP FM37 FM35: CALL PINFND CALL POINTS CALL UNMOVE LDA VALM FM36: LXI H,MATEF MOV D,A MOV A,M ORI 01H MOV M,A MOV A,D LHLD SCRIX FM37: CMP M JC FM40 JZ FM40 XRI -1 INR A INX H CMP M JC FM15 JZ FM15 MOV M,A LDA NPLY CPI 1 JNZ FM15 LHLD MLPTRJ SHLD BESTM LDA SCORE+1 CPI -1 JNZ FM15 LXI H,PLYMAX DCR M DCR M LDA KOLOR ANI 80H RZ LXI H,PMATE DCR M RET FM40: CALL ASCEND JMP FM15 ;-------------------------------------------------- ASCEND: LXI H,COLOR MVI A,80H XRA M MOV M,A ANI 80H JZ ASC1 LXI H,MOVENO DCR M ASC1: LHLD SCRIX DCX H SHLD SCRIX LXI H,NPLY DCR M LHLD MLPTRI DCX H MOV D,M DCX H MOV E,M XCHG SHLD MLNXT XCHG DCX H MOV D,M DCX H MOV E,M SHLD MLPTRI XCHG SHLD MLPTRJ CALL UNMOVE RET ;---------------------------------------------------- BOOK: XRA A STA NEWBRD LXI H,SCORE+1 MVI M,0 LXI H,BMOVES-2 SHLD BESTM LXI H,BESTM LDA KOLOR ANA A JNZ BM5 LDA 81B9H ;RANDOM NO. FROM CLOCK ANI 01H RZ INR M INR M INR M RET BM5: INR M INR M INR M INR M INR M INR M PUSH H LHLD MLPTRJ INX H INX H MOV A,M POP H CPI 22 JZ BM9 CPI 27 JZ BM9 CPI 34 JZ BM9 RC CPI 35 RZ BM9: INR M INR M INR M RET ;-------------------------------------------------- END SARGON