Compucolor.org – Virtual Media

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