Compucolor.org – Virtual Media

Listing of file='CHESS2.MAC;01' on disk='vmedia/sargon_chess_1-sector.ccvf'

 TITLE CHESS2

;	PART 2 OF THE CHESS PLAYING PROGRAM, SARGON 1

	ENTRY DRIVER

	EXTRN CO,CI,KBINIT,OSTR,MOVHD,EXIT,MOVDH,EMESS
	EXTRN INPRMT,PFSPC,OPEN,RWSEQI,INSEQO,CLSEQO
	EXTRN PTBYT,GTBYT,FXBC,FBUF,INBUF,CRLF

	EXTRN INITBD,FNDMOV,MOVE,UNMOVE,INCHK,GENMOV

	EXTRN BESTM,BOARD,COLOR,KOLOR,MOVENO,SCORE
	EXTRN PLYMAX,PLYIX,MLPTRI,MLPTRJ,PMATE,POSK
	EXTRN MLIST,MLNXT,MLFRP,NEWBRD
	EXTRN SCROL,CSRX,CSRY,HGHT,WDTH,CLRSW

CSR	EQU	3
LF	EQU	10
FF	EQU	12
CR	EQU	13
CTRLR	EQU	18
CRSRR	EQU	25
CRSRL	EQU	26
ESC	EQU	27
EOS	EQU	239
QUEEN	EQU	5
KING	EQU	6
RED	EQU	17
GREEN	EQU	18
MAGENT	EQU	21
CYAN	EQU	22
FGON	EQU	29
PGE	EQU	24
FPB	EQU	80F7H

	PAGE(62)

;--------------------------------------------------

DRIVER:
	CALL	KBINIT
	LXI	H,8047H
	SHLD	FPB+FBUF
	LXI	H,80H
	SHLD	FPB+FXBC
	MVI	A,0	;INIT SCROLL WINDOW
	STA	CSRX
	MVI	A,2
	STA	CSRY
	MVI	A,28
	STA	HGHT
	MVI	A,16
	STA	WDTH
	MVI	A,1
	STA	CLRSW
	CALL	CLRBRD
	XRA	A
	STA	COLOR
	LXI	H,GRTTNG
	CALL	OSTR
	LXI	H,MSGCON
	CALL	OSTR
	CALL	CI
DRIV01:
	LXI	H,MSGOPT
	CALL	OSTR
	CALL	CI
	CPI	"N"
	JZ	DR02
	CPI	"C"
	JNZ	DR01
	CALL	CLRBRD
	JMP	ANALYS
DR01:
	CPI	"A"
	JZ	ANALYS
	CPI	"S"
	JZ	SAVE
	CPI	"L"
	JZ	LOAD
	CPI	"H"
	JZ	HELP
	JMP	DRIV01
DR02:
	CALL	CLRBRD
DR04:
	CALL	INTERR
	CALL	INITBD
	CALL	DSPBRD
	LXI	H,TITLE
	CALL	OSTR
DRIV04:
	LXI	H,MVENUM
	CALL	SCRPRT
	LDA	KOLOR
	ANA	A
	JNZ	DR08
	CALL	CPTRMV
	LXI	H,CSR929
	CALL	OSTR
	CALL	PLYRMV
	JZ	DRIV01
	JMP	DR0C
DR08:
	CALL	PLYRMV
	JZ	DRIV01
	LXI	H,CSR929
	CALL	OSTR
	CALL	CPTRMV
DR0C:
	LXI	H,MVENUM+3
	MVI	A," "
	CMP	M
	MVI	A,"9"+1
	JZ	DR10
	INR	M
	CMP	M
	JNZ	DR14
	MVI	M,"0"
DR10:
	DCX	H
	INR	M
	CMP	M
	JNZ	DR14
	MVI	M,"0"
	DCX	H
	INR	M
	CMP	M
	JNZ	DR14
	MVI	M,"1"
	MVI	A,"0"
	STA	MVENUM+3
DR14:
	LXI	H,MOVENO
	INR	M
	JMP	DRIV04
SAVE:
	LXI	H,MSGSPC
	LXI	D,SPCBUF
	MVI	A,20
	CALL	INPRMT
	LXI	D,FPB
	LXI	B,DEFALT
	CALL	PFSPC
	JC	ERR
	LXI	H,FPB
	MVI	M,1
	CALL	OPEN
	JC	ERR
	CALL	INSEQO
	MVI	B,38
	LXI	D,TITLE
SV1:
	LDAX	D
	CALL	PTBYT
	JC	ERR
	INX	D
	DCR	B
	JNZ	SV1
	LDA	PLYMAX
	CALL	PTBYT
	JC	ERR
	LDA	KOLOR
	CALL	PTBYT
	JC	ERR
	LDA	NEWBRD
	CALL	PTBYT
	JC	ERR
	LDA	MOVENO
	CALL	PTBYT
	JC	ERR
	LDA	MVENUM+1
	CALL	PTBYT
	JC	ERR
	LDA	MVENUM+2
	CALL	PTBYT
	JC	ERR
	LDA	MVENUM+3
	CALL	PTBYT
	JC	ERR
	LXI	D,BOARD
	MVI	B,120
SV2:
	LDAX	D
	CALL	PTBYT
	JC	ERR
	INX	D
	DCR	B
	JNZ	SV2
	CALL	CLSEQO
	JMP	DRIV01
LOAD:
	LXI	H,MSGSPC
	LXI	D,SPCBUF
	MVI	A,20
	CALL	INPRMT
	LXI	D,FPB
	LXI	B,DEFALT
	CALL	PFSPC
	JC	ERR
	LXI	H,FPB
	MVI	A,0
	CALL	OPEN
	JC	ERR
	CALL	RWSEQI
	MVI	B,38
	LXI	D,TITLE
LD1:
	CALL	GTBYT
	JC	ERR
	STAX	D
	INX	D
	DCR	B
	JNZ	LD1
	CALL	GTBYT
	JC	ERR
	STA	PLYMAX
	CALL	GTBYT
	JC	ERR
	STA	KOLOR
	CALL	GTBYT
	JC	ERR
	STA	NEWBRD
	CALL	GTBYT
	JC	ERR
	STA	MOVENO
	CALL	GTBYT
	JC	ERR
	STA	MVENUM+1
	CALL	GTBYT
	JC	ERR
	STA	MVENUM+2
	CALL	GTBYT
	JC	ERR
	STA	MVENUM+3
	LXI	D,BOARD
	MVI	B,120
LD2:
	CALL	GTBYT
	JC	ERR
	STAX	D
	INX	D
	DCR	B
	JNZ	LD2
	CALL	ROYALT
	CALL	DSPBRD
	LXI	H,TITLE
	CALL	OSTR
	LDA	KOLOR
	CPI	80H
	JZ	DRIV04
	LXI	H,MVENUM
	CALL	SCRPRT
	LXI	H,CSR929
	CALL	OSTR
	CALL	PLYRMV
	JZ	DRIV01
	JMP	DR0C
HELP:
	LXI	H,MSGHLP
	CALL	OSTR
	LXI	H,MSGCON
	CALL	OSTR
	CALL	CI
	JMP	DRIV01

;--------------------------------------------------

ERR:
	CALL	CRLF
	CALL	CRLF
	CALL	EMESS
	LXI	H,MSGCON
	CALL	OSTR
	CALL	CI
	JMP	DRIV01

;--------------------------------------------------

CLRBRD:			;CLEAR BOARD
	PUSH	H
	PUSH	B
	MVI	B,120
	LXI	H,BOARD
CB1:
	MVI	M,-1
	INX	H
	DCR	B
	JNZ	CB1
	LXI	H,BOARD+21
	MVI	C,8
CB2:
	MVI	B,8
CB3:
	MVI	M,0
	INX	H
	DCR	B
	JNZ	CB3
	INX	H
	INX	H
	DCR	C
	JNZ	CB2
	MVI	B,4
	LXI	H,POSK
CB4:
	MVI	M,0
	INX	H
	DCR	B
	JNZ	CB4
	MVI	A,1
	STA	NEWBRD
	MVI	A,1
	STA	MOVENO
	LXI	H,MVENUM+1
	MVI	M,"0"
	INX	H
	MVI	M,"1"
	INX	H
	MVI	M," "
	POP	B
	POP	H
	RET

;--------------------------------------------------

INTERR:
	LXI	H,CLRMSG
	CALL	OSTR
	CALL	CI
	CPI	"W"
	JZ	IN04
	XRA	A
	STA	KOLOR
	LXI	H,TITLE1
	LXI	D,TITLE+6
	MVI	B,6
	CALL	MOVHD
	LXI	H,TITLE2
	LXI	D,TITLE+14
	MVI	B,6
	CALL	MOVHD
	JMP	IN08
IN04:
	MVI	A,80H
	STA	KOLOR
	LXI	H,TITLE2
	LXI	D,TITLE+6
	MVI	B,6
	CALL	MOVHD
	LXI	H,TITLE1
	LXI	D,TITLE+14
	MVI	B,6
	CALL	MOVHD
IN08:
	LXI	H,PLYDEP
	CALL	OSTR
	CALL	CI
	LXI	H,PLYMAX
	MVI	M,2
	CPI	"1"
	RM
	CPI	"7"
	RP
	SUI	"0"
	MOV	M,A
	RET

;--------------------------------------------------

CPTRMV:
	CALL	FNDMOV
	LHLD	BESTM
	SHLD	MLPTRJ
	LDA	SCORE+1
	CPI	1
	JNZ	CP0C
	MVI	C,1
	CALL	FCDMAT
CP0C:
	CALL	MOVE
	CALL	EXECMV
	MOV	A,B
	ANA	A
	JNZ	CP10
	MOV	D,E
	CALL	BITASN
	SHLD	MVEMSG+3
	MOV	D,C
	CALL	BITASN
	SHLD	MVEMSG
	LXI	H,MVEMSG
	CALL	OSTR
	JMP	CP1C
CP10:
	MOV	A,B
	ANI	02H
	JZ	CP15
	LXI	H,OO
	CALL	OSTR
	JMP	CP1C
CP15:
	MOV	A,B
	ANI	04H
	JZ	CP16
	LXI	H,OOO
	CALL	OSTR
	JMP	CP1C
CP16:
	LXI	H,PXPEP
	CALL	OSTR
CP1C:
	LDA	COLOR
	MOV	B,A
	XRI	80H
	STA	COLOR
	CALL	INCHK
	ANA	A
	MOV	A,B
	STA	COLOR
	JZ	CP24
	LDA	SCORE+1
	CPI	-1
	CNZ	TBCPMV
	LXI	H,CKMSG
	CALL	OSTR
CP24:
	LDA	SCORE+1
	CPI	-1
	RNZ
	MVI	C,0
	CALL	FCDMAT
	RET

;--------------------------------------------------

FCDMAT:
	LDA	MOVENO
	MOV	B,A
	LDA	PMATE
	SUB	B
	ANA	A
	JNZ	FM0C
	MOV	A,C
	ANI	01H
	JZ	FM04
	LXI	H,CKMSG
	CALL	SCRPRT
	CALL	MATED
	LXI	H,UWIN
	CALL	SCRPRT
	JMP	FM08
FM04:
	LXI	H,MATEMG
	CALL	SCRPRT
	LXI	H,IWIN
	CALL	SCRPRT
FM08:
	POP	H
	POP	H
	CALL	CI
FM09:
	LXI	H,AGAIN
	CALL	OSTR
	JMP	DRIV01
FM0C:
	MOV	B,A
	MOV	C,A
	ANI	01H
	MOV	A,B
	RNZ
	ADI	"0"
	STA	MTPL
	CALL	SCROL
	LXI	H,MTMSG
	CALL	OSTR
	CALL	TBPLMV
	RET

;--------------------------------------------------

TBPLCL:
	LXI	H,MVENUM
	CALL	SCRPRT
	LDA	KOLOR
	ANA	A
	RNZ
	LXI	H,CSR929
	CALL	OSTR
	RET

TBCPCL:
	LXI	H,MVENUM
	CALL	SCRPRT
	LDA	KOLOR
	ANA	A
	RZ
	LXI	H,CSR929
	CALL	OSTR
	RET

TBPLMV:
	LXI	H,CSR329
	CALL	OSTR
	LDA	KOLOR
	ANA	A
	RNZ
	LXI	H,CSR929
	CALL	OSTR
	RET

TBCPMV:
	LXI	H,CSR329
	CALL	OSTR
	LDA	KOLOR
	ANA	A
	RZ
	LXI	H,CSR929
	CALL	OSTR
	RET

;--------------------------------------------------

BITASN:
	SUB	A
	MVI	E,10
	CALL	DIVIDE
	DCR	D
	ADI	"A"-1
	MOV	L,A
	MOV	A,D
	ADI	"0"
	MOV	H,A
	RET

;--------------------------------------------------

PLYRMV:
	CALL	CI
	CPI	CTRLR
	RZ		;RETURN IF ZF SET
	MOV	H,A
	CALL	CI
	MOV	L,A
	CALL	ASNTBI
	SUB	B
	JZ	PL08
	STA	MVFBIN
	CALL	CI
	CALL	CI
	MOV	H,A
	CALL	CI
	MOV	L,A
	CALL	ASNTBI
	SUB	B
	JZ	PL08
	STA	MVTBIN
	CALL	VALMOV
	ANA	A
	JNZ	PL08
	CALL	EXECMV
	XRA	A	;RESET ZF
	INR	A
	RET
PL08:
	LXI	H,INVAL1
	CALL	SCRPRT
	LXI	H,INVAL2
	CALL	SCRPRT
	CALL	TBPLCL
	JMP	PLYRMV

;--------------------------------------------------

ASNTBI:
	MOV	A,L
	SUI	"0"
	CPI	1
	JM	AT04
	CPI	9
	JNC	AT04
	INR	A
	MOV	D,A
	MVI	E,10
	CALL	MLTPLY
	MOV	A,H
	SUI	"A"-1
	CPI	1
	JM	AT04
	CPI	9
	JNC	AT04
	ADD	D
	MVI	B,0
	RET
AT04:
	MOV	B,A
	RET

;--------------------------------------------------

VALMOV:
	LHLD	MLPTRJ
	PUSH	H
	LDA	KOLOR
	XRI	80H
	STA	COLOR
	LXI	H,PLYIX-2
	SHLD	MLPTRI
	LXI	H,MLIST+1024
	SHLD	MLNXT
	CALL	GENMOV
	LXI	H,MLIST+1024
VA5:
	LDA	MVFBIN
	INX	H
	INX	H
	CMP	M	;I/P=MLFRP?
	JNZ	VA6
	LDA	MVTBIN
	INX	H
	CMP	M	;I/P=MLTOP?
	DCX	H
	JZ	VA7
VA6:
	DCX	H
	MOV	A,M	;HL=MLPTR
	DCX	H
	MOV	L,M
	MOV	H,A
	ANA	A
	JZ	VA10
	JMP	VA5
VA7:
	DCX	H
	DCX	H
	SHLD	MLPTRJ
	CALL	MOVE
	CALL	INCHK
	ANA	A
	JNZ	VA9
VA8:
	POP	H
	RET
VA9:
	CALL	UNMOVE
VA10:
	MVI	A,1
	POP	H
	SHLD	MLPTRJ
	RET

;--------------------------------------------------

MATED:
	LDA	KOLOR
	ANA	A
	JZ	MA04
	MVI	C,2
	LDA	POSK+1
	JMP	MA08
MA04:
	MOV	C,A
	LDA	POSK
MA08:
	STA	BRDPOS
	STA	ANBDPS
	CALL	CONVRT
	MVI	B,10
	CALL	BLNKER
	PUSH	H
	LXI	H,MA0C
	XTHL
	PUSH	H
	PUSH	B
	PUSH	D
	PUSH	PSW
	LDA	KOLOR
	MOV	C,A
	MVI	A,7
	JMP	IP04
MA0C:
	MVI	B,10
	LDA	ANBDPS
	STA	BRDPOS
	CALL	BLNKER
	RET

;--------------------------------------------------

ANALYS:
	CALL	DSPBRD
	MVI	A,21
	STA	ANBDPS
AN08:
	LXI	H,ENTPCE
	CALL	OSTR
	LDA	ANBDPS
	STA	BRDPOS
	CALL	CONVRT
	LXI	D,BOARD
	ADD	E
	MOV	E,A
	MVI	B,4
	CALL	BLNKER
	CALL	CI
	CPI	CTRLR
	JZ	AN1B
	CPI	CRSRL
	JZ	AN1A
	CPI	CRSRR
	JZ	AN19
	MVI	C,6
	LXI	H,PCS
AN14:
	CMP	M
	JZ	AN16
	INX	H
	DCR	C
	JNZ	AN14
	JMP	AN18
AN16:
	CALL	CI
	CALL	CI
	CPI	"B"
	JNZ	AN17
	MOV	A,C
	ORI	80H
	MOV	C,A
AN17:
	CALL	CI
	CALL	CI
	CPI	"1"
	JNZ	AN18
	MOV	A,C
	ORI	08H
	MOV	C,A
AN18:
	MOV	A,C
	STAX	D
	CALL	DSPBRD
AN19:
	LDA	ANBDPS
	INR	A
	STA	ANBDPS
	CPI	99
	JNZ	AN19B
	MVI	A,21
	STA	ANBDPS
	JMP	AN08
AN19B:
	INX	D
	LDAX	D
	CPI	-1
	JZ	AN19
	JMP	AN08
AN1A:
	LDA	ANBDPS
	DCR	A
	STA	ANBDPS
	CPI	20
	JNZ	AN1AB
	MVI	A,98
	STA	ANBDPS
	JMP	AN08
AN1AB:
	DCX	D
	LDAX	D
	CPI	-1
	JZ	AN1A
	JMP	AN08
AN1B:
	LXI	H,CRTNES
	CALL	OSTR
	CALL	CI
	CPI	"N"
	JZ	AN08
	CALL	ROYALT
	LDA	POSK
	ANA	A
	JZ	AN1D
	LDA	POSK+1
	ANA	A
	JNZ	AN1E
AN1D:
	LXI	H,MSGNOK
	CALL	OSTR
	JMP	AN08
AN1E:
	MVI	A,FF
	CALL	CO
	CALL	INTERR
	LXI	H,WSMOVE
	CALL	OSTR
	CALL	CI
	PUSH	PSW
	CALL	DSPBRD
	LXI	H,TITLE
	CALL	OSTR
	MVI	A,0
	STA	COLOR
	POP	PSW
	CPI	"W"
	JZ	DRIV04
	MVI	A,80H
	STA	COLOR
	LXI	H,MVENUM
	CALL	SCRPRT
	LXI	H,CSR929
	CALL	OSTR
	LDA	KOLOR
	ANA	A
	JNZ	AN20
	CALL	PLYRMV
	JMP	DR0C
AN20:
	CALL	CPTRMV
	JMP	DR0C

;--------------------------------------------------

ROYALT:
	LXI	H,POSK
	MVI	B,4
RY02:
	MVI	M,0
	INX	H
	DCR	B
	JNZ	RY02
	LXI	D,BOARD+21
	MVI	B,21
RY04:
	LXI	H,POSK
	LDAX	D
	ANI	80H
	JZ	RY06
	INX	H
RY06:
	LDAX	D
	ANI	07H
	CPI	KING
	JZ	RY08
	CPI	QUEEN
	JNZ	RY0C
	INX	H
	INX	H
RY08:
	MOV	M,B
RY0C:
	INX	D
	INR	B
	MOV	A,B
	CPI	99
	JNZ	RY04
	RET

;--------------------------------------------------

DSPBRD:
	PUSH	B
	PUSH	D
	PUSH	H
	PUSH	PSW
	MVI	A,FF
	CALL	CO
	LXI	H,7020H
	MVI	A,38H	;CCI
	MVI	C,8	;RANK CTR
DB04:
	MVI	B,4
DB06:
	MVI	D,8	;FILE CTR
DB08:
	MVI	E,6
DB10:
	INX	H
	MOV	M,A	;SET CCI BYTE
	INX	H
	DCR	E
	JNZ	DB10
	XRI	38H
	DCR	D
	JNZ	DB08
	LXI	D,20H
	DAD	D
	DCR	B
	JNZ	DB06
	XRI	38H
	DCR	C
	JNZ	DB04
	MVI	A,21
DB20:
	STA	BRDPOS
	CALL	CONVRT
	CALL	INSPCE
	INR	A
	CPI	99
	JC	DB20
	MVI	B,8
	MVI	C,"A"
	LXI	D,11
	LXI	H,7020H
DB30:
	MOV	M,C
	INX	H
	MOV	A,M
	ORI	02H	;GREEN
	MOV	M,A
	DAD	D
	INR	C
	DCR	B
	JNZ	DB30
	MVI	B,8
	MVI	C,"8"
	LXI	D,01FFH
	LXI	H,71F4H
DB32:
	MOV	M,C
	INX	H
	MOV	A,M
	ORI	02H	;GREEN
	MOV	M,A
	DAD	D
	DCR	C
	DCR	B
	JNZ	DB32
	POP	PSW
	POP	H
	POP	D
	POP	B
	RET

;--------------------------------------------------

INSPCE:
	PUSH	H
	PUSH	D
	PUSH	B
	PUSH	PSW
	LDA	BRDPOS
	LXI	D,BOARD	;GET BOARD CONTENTS
	ADD	E
	MOV	E,A
	LDAX	D
	ANA	A
	JZ	IP20
	CPI	-1
	JZ	IP20
	MOV	C,A	;SAVE PIECE COLOUR
IP04:
	ANI	07H
	DCR	A
	RRC		;*32
	RRC
	RRC
	LXI	D,BLOCK
	ADD	E
	MOV	E,A
	JNC	IP05
	INR	D
IP05:
	INX	H
	MOV	A,M	;GET SQUARE CCI
	INX	H
	PUSH	H
	LXI	H,IPOC
	ANI	38H	;GET SQUARE COLOUR
	JNZ	IP06	;? ON W
	INX	H
	INX	H
	INX	H
	INX	H
IP06:
	MOV	A,C
	ANI	80H	;GET PIECE COLOUR
	JNZ	IP08	;B ON ?
	INX	H
	INX	H
IP08:
	MOV	A,M
	INX	H
	MOV	H,M
	MOV	L,A
	SHLD	IPPC
	POP	H
	MVI	C,4
IP09:
	MVI	B,4
IP10:
	LDAX	D
	MOV	M,A
	INX	D
	INX	H
	LDAX	D
IPPC:
	NOP		;INSTR INSERTED HERE
	NOP
	MOV	M,A
	INX	D
	INX	H
	DCR	B
	JNZ	IP10
	MOV	A,L
	ADI	78H
	MOV	L,A
	JNC	IP16
	INR	H
IP16:
	DCR	C
	JNZ	IP09
IP20:
	POP	PSW
	POP	B
	POP	D
	POP	H
	RET

IPOC:	DB	(NOP),(NOP)	;B ON W
	DB	(ORI),3CH	;W ON W
	DB	(ANI),0C7H	;B ON B
	DB	(XRI),3CH	;W ON B

;--------------------------------------------------

CONVRT:
	PUSH	B
	PUSH	D
	PUSH	PSW
	LDA	BRDPOS
	MOV	D,A
	MVI	E,10
	CALL	DIVIDE
	DCR	D
	DCR	A
	MOV	C,D
	MVI	D,12
	MOV	E,A
	CALL	MLTPLY
	MOV	A,D
	ADI	20H
	MOV	L,A
	MVI	A,8
	SUB	C
	ADD	A
	ADI	70H
	MOV	H,A
	POP	PSW
	POP	D
	POP	B
	RET

;--------------------------------------------------

DIVIDE:			;I/P D=DIVIDEND, E=DIVISOR
			;O/P D=QUOTIENT, A=REMAINDER
	MOV	A,D
	MVI	D,0
DD04:
	SUB	E
	JM	DD08
	INR	D
	JMP	DD04
DD08:
	ADD	E
	RET

;--------------------------------------------------

MLTPLY:			;I/P D & E
			;O/P D & A
	XRA	A
ML04:
	ADD	E
	DCR	D
	JNZ	ML04
	MOV	D,A
	RET

;--------------------------------------------------

BLNKER:
	PUSH	PSW
	PUSH	B
	PUSH	D
	PUSH	H
	SHLD	NORMAD
BL04:
	LHLD	NORMAD
	MVI	D,4
BL08:
	MVI	C,6
BL0C:
	INX	H	;POINT TO CCI BYTE
	MOV	A,M
	XRI	38H
	MOV	M,A
	INX	H
	DCR	C
	JNZ	BL0C
	MOV	A,L
	ADI	74H
	MOV	L,A
	JNC	BL0E
	INR	H
BL0E:
	DCR	D
	JNZ	BL08
	LXI	D,3030H
BL10:
	DCR	D
	JNZ	BL10
	DCR	E
	JNZ	BL10
	DCR	B
	JNZ	BL04
	POP	H
	POP	D
	POP	B
	POP	PSW
	RET

;--------------------------------------------------

EXECMV:
	PUSH	H
	PUSH	PSW
	LHLD	MLPTRJ
	INX	H
	INX	H
	MOV	C,M	;MLFRD
	INX	H
	MOV	E,M	;MLTOP
	CALL	MAKEMV
	INX	H
	MOV	D,M	;MLFLG
	MVI	B,0
	MOV	A,D
	ANI	40H
	JZ	EX14
	LXI	D,4
	DAD	D
	MOV	C,M	;NEXT MLFRP
	INX	H
	MOV	E,M	;NEXT MLTOP
	MOV	A,E
	CMP	C
	JNZ	EX04
	INR	B
	JMP	EX10
EX04:
	CPI	1AH
	JNZ	EX08
	MOV	A,B
	ORI	02H
	MOV	B,A
	JMP	EX10
EX08:
	CPI	60H
	JNZ	EX0C
	MOV	A,B
	ORI	02H
	MOV	B,A
	JMP	EX10
EX0C:
	MOV	A,B
	ORI	04H
	MOV	B,A
EX10:
	CALL	MAKEMV
EX14:
	POP	PSW
	POP	H
	RET

;--------------------------------------------------

MAKEMV:
	PUSH	PSW
	PUSH	B
	PUSH	D
	PUSH	H
	MOV	A,C
	STA	BRDPOS
	CALL	CONVRT
	MVI	B,10
	CALL	BLNKER
	INR	L
	MOV	A,M	;GET CCI
	ANI	38H
	INR	L
	MVI	D,4
MM04:
	MVI	B,4
MM08:
	MVI	M," "
	INR	L
	MOV	M,A
	INR	L
	DCR	B
	JNZ	MM08
	MOV	C,A
	MOV	A,L
	ADI	78H
	MOV	L,A
	JNC	MM12
	INR	H
MM12:
	MOV	A,C
	DCR	D
	JNZ	MM04
	MOV	A,E
	STA	BRDPOS
	CALL	CONVRT
	CALL	INSPCE
	MVI	B,10
	CALL	BLNKER
	POP	H
	POP	D
	POP	B
	POP	PSW
	RET

;--------------------------------------------------

SCRPRT:		;SCROLL, ERASE LINE 29 & PRINT (HL)
	PUSH	B
	PUSH	D
	PUSH	H
	CALL	SCROL
	LXI	H,CSRE29
	CALL	OSTR
	POP	H
	CALL	OSTR
	POP	D
	POP	B
	RET

;--------------------------------------------------


;	GRAPHICS DATA BASE

BLOCK:
;	BLACK PAWN ON WHITE SQUARE
	DB	00H,0B9H,00H,0B9H,00H,0B9H,00H,0B9H
	DB	00H,0B9H,80H,0B9H,08H,0B9H,00H,0B9H
	DB	00H,0B9H,0FH,081H,0F0H,81H,00H,0B9H
	DB	00H,0B9H,32H,0B9H,23H,0B9H,00H,0B9H

;	BLACK KNIGHT ON WHITE SQUARE
	DB	00H,0B9H,88H,0B9H,88H,0B9H,00H,0B9H
	DB	0FCH,0B9H,08H,081H,00H,081H,0FH,0B9H
	DB	0C0H,0B9H,03H,81H,80H,081H,07H,0B9H
	DB	32H,0B9H,33H,0B9H,33H,0B9H,02H,0B9H

;	BLACK BISHOP ON WHITE SQUARE
	DB	00H,0B9H,80H,0B9H,08H,0B9H,00H,0B9H
	DB	0E0H,0B9H,01H,81H,10H,081H,0EH,0B9H
	DB	70H,0B9H,08H,081H,80H,081H,07H,0B9H
	DB	20H,0B9H,32H,0B9H,23H,0B9H,02H,0B9H

;	BLACK ROOK ON WHITE SQUARE
	DB	80H,0B9H,80H,0B9H,08H,0B9H,08H,0B9H
	DB	10H,0B9H,1FH,081H,0F1H,81H,01H,0B9H
	DB	00H,0B9H,0FH,081H,0F0H,81H,00H,0B9H
	DB	30H,0B9H,33H,0B9H,33H,0B9H,03H,0B9H

;	BLACK QUEEN ON WHITE SQUARE
	DB	08H,0B9H,00H,0B9H,00H,0B9H,80H,0B9H
	DB	1FH,081H,31H,081H,13H,081H,0F1H,81H
	DB	31H,0B9H,0CH,081H,0C0H,81H,13H,0B9H
	DB	32H,0B9H,33H,0B9H,33H,0B9H,23H,0B9H

;	BLACK KING ON WHITE SQUARE
	DB	00H,0B9H,80H,0B9H,08H,0B9H,00H,0B9H
	DB	88H,0B9H,0F1H,0B9H,1FH,0B9H,88H,0B9H
	DB	0FH,081H,11H,081H,11H,081H,0F0H,81H
	DB	32H,0B9H,33H,0B9H,33H,0B9H,23H,0B9H

;	TOPPLED BLACK KING ON WHITE SQUARE
	DB	08H,0B9H,88H,0B9H,88H,0B9H,00H,0B9H
	DB	0FFH,81H,00H,081H,0FCH,81H,00H,0B9H
	DB	0FFH,81H,00H,081H,0F3H,81H,00H,0B9H
	DB	01H,0B9H,11H,0B9H,51H,0B9H,4EH,0B9H

;	MESSAGES

GRTTNG:
	DB	FF,ESC,PGE,FGON,14,MAGENT,3,22,10
	DB	"WELCOME TO SARGON 1",15,GREEN
	DB	3,20,13,"A CHESS PLAYING PROGRAM"
	DB	3,15,20,CYAN
	DB	"WRITTEN BY DAN & KATHE SPRACKLEN"
	DB	3,16,22
	DB	"CONVERTED TO CCII BY MAX ALLAN"
	DB	3,6,26,RED
	DB	"THIS PROGRAM HAS BEEN RELEASED TO THE"
	DB	" NSWUG LIBRARY"
	DB	3,23,27
	DB	"FOR USER TESTING",GREEN
	DB	EOS
MSGOPT:
	DB	FF,3,0,4,MAGENT,"N",GREEN,"EW GAME"
	DB	CR,LF,LF
	DB	MAGENT,"C",GREEN,"REATE OWN BOARD"
	DB	CR,LF,LF
	DB	MAGENT,"A",GREEN,"MEND EXISTING GAME"
	DB	CR,LF,LF
	DB	MAGENT,"S",GREEN,"AVE EXISTING GAME"
	DB	CR,LF,LF
	DB	MAGENT,"L",GREEN,"OAD PREVIOUS GAME"
	DB	CR,LF,LF
	DB	MAGENT,"H",GREEN,"ELP"
	DB	CR,LF,LF
	DB	MAGENT,"<ESC>",GREEN," TO RETURN TO FCS"
	DB	" AT ANY TIME? ",EOS
MSGCON:
	DB	3,18,31,MAGENT
	DB	"PRESS <RETURN> TO CONTINUE",3,64,0,EOS
MSGHLP:
	DB	FF,3,25,3,RED,14,"COMMANDS",15
	DB	CR,LF,LF,CYAN
	DB	"WHEN CREATING OR AMENDING A "
	DB	"GAME, USE THE LEFT AND RIGHT ARROWS"
	DB	CR,LF
	DB	"TO SELECT EACH SQUARE THEN ENTER "
	DB	"PIECE, COLOUR & MOVED-CODE"
	DB	CR,LF
	DB	"E.G. ",MAGENT,"K,W,1"
	DB	CR,LF,LF,CYAN,"WHERE PIECE      = "
	DB	MAGENT,"K",CYAN,"ING, "
	DB	MAGENT,"Q",CYAN,"UEEN, "
	DB	MAGENT,"R",CYAN,"OOK, "
	DB	MAGENT,"B",CYAN,"ISHOP, K"
	DB	MAGENT,"N",CYAN,"IGHT OR "
	DB	MAGENT,"P",CYAN,"AWN."
	DB	CR,LF,CYAN,"      COLOUR     = "
	DB	MAGENT,"W",CYAN,"HITE OR "
	DB	MAGENT,"B",CYAN,"LACK."
	DB	CR,LF,CYAN,"      MOVED-CODE = "
	DB	MAGENT,"0",CYAN," FOR NEVER MOVED & "
	DB	MAGENT,"1",CYAN," FOR PIECE MOVED BEFORE"
	DB	CR,LF,LF,CYAN
	DB	"OR ENTER ANY OTHER KEY TO REMOVE PIECE."
	DB	CR,LF,LF
	DB	"USE ",MAGENT,"<CTRL R>",CYAN
	DB	" WHEN FINISHED AMENDING."
	DB	CR,LF,LF,RED
	DB	"                         s s s s s s"
	DB	CR,LF,LF,CYAN
	DB	"WHEN MAKING A MOVE, ENTER "
	DB	MAGENT,"FF-TT",CYAN," E.G. "
	DB	MAGENT,"E2-E4"
	DB	CR,LF,CYAN
	DB	"WHERE FF IS THE 'FROM' SQUARE AND"
	DB	" TT IS THE 'TO' SQUARE."
	DB	CR,LF,LF
	DB	"TO CASTLE, JUST ENTER TO KING'S MOVE "
	DB	"E.G. ",MAGENT,"E1-G1",CYAN
	DB	CR,LF
	DB	"AND THE ROOK WILL FOLLOW."
	DB	CR,LF,LF
	DB	"TO CAPTURE EN-PASSANT, SIMPLY ENTER "
	DB	"THE PAWN'S MOVE."
	DB	CR,LF,LF
	DB	"IF ",RED,"SARGON",CYAN," OR YOU ARE "
	DB	"CHECKMATED, ENTER ",MAGENT,"<SPACE>"
	DB	CYAN," TO PLAY AGAIN."
	DB	CR,LF,LF
	DB	"TO RESIGN ,TAKE BACK A MOVE OR SAVE "
	DB	"A GAME FOR LATER PLAYING,"
	DB	CR,LF
	DB	"ENTER ",MAGENT,"<CTRL R>",CYAN,"."
	DB	EOS
MSGSPC:
	DB	CR,LF,LF,"ENTER FILE SPECIFICATION"
	DB	" (DEFAULT=.CHS) ",EOS
CLRMSG:
	DB	CR,LF,LF,GREEN
	DB	"DO YOU WANT TO PLAY "
	DB	MAGENT,"W",GREEN,"HITE OR "
	DB	MAGENT,"B",GREEN,"LACK? "
	DB	EOS
MSGERR:
	DB	RED,"DISK ERROR",GREEN,EOS
TITLE1:
	DB	"SARGON"
TITLE2:
	DB	"PLAYER"
CSR329:
	DB	MAGENT,3,3,29,EOS
CSRE29:
	DB	3,0,29,"                ",CR,EOS
CSR929:
	DB	RED,3,9,29,EOS
MVENUM:
	DB	CYAN,"   ",MAGENT,EOS
MVEMSG:
	DB	"  -  ",EOS
OO:
	DB	"0-0  ",EOS
OOO:
	DB	"0-0-0",EOS
PXPEP:
	DB	"PXPEP",EOS
CKMSG:
	DB	GREEN,"CHECK",EOS
MATEMG:
	DB	GREEN,"MATE",EOS
MTMSG:
	DB	GREEN,"MATE IN "
MTPL:
	DB	" ",EOS
PCS:
	DB	"KQRBNP"
UWIN:
	DB	CYAN,"YOU WIN",GREEN,EOS
IWIN:
	DB	CYAN,"I WIN",GREEN,EOS
AGAIN:
	DB	FF,3,0,2,GREEN
	DB	"CARE FOR ANOTHER GAME ("
	DB	MAGENT,"Y/N",GREEN,")? ",EOS
CRTNES:
	DB	3,0,0,GREEN,"IS THIS RIGHT ("
	DB	MAGENT,"Y/N",GREEN,")? ",EOS
PLYDEP:
	DB	CR,LF,LF,GREEN,"SELECT LOOK AHEAD ("
	DB	MAGENT,"1-6",GREEN,") ",EOS
TITLE:
	DB	3,0,0
	DB	MAGENT,"        ",RED,"        ",CR,LF
	DB	MAGENT,"  ffffff",RED," ffffff ",EOS
WSMOVE:
	DB	CR,LF,LF,GREEN,"WHOSE MOVE IS IT ("
	DB	MAGENT,"W/B",GREEN,")? ",EOS
INVAL1:
	DB	GREEN,"   INVALID MOVE",EOS
INVAL2:
	DB	"   TRY AGAIN",EOS
ENTPCE:
	DB	3,0,0,CYAN,"PIECE?          ",3,7,0,EOS
MSGNOK:
	DB	3,0,4,RED,"MISSING KING(S)",EOS
DEFALT:
	DB	"CHS"
SPCBUF:	DS	20

;	VARIABLES

MVFBIN:	DS	1	;PLAYER'S MOVE FROM INDEX
MVTBIN:	DS	1	;   "      "    TO    "
BRDPOS:	DS	1
ANBDPS:	DS	1
NORMAD:	DS	2
LINECT:	DS	1

;--------------------------------------------------

	END