Compucolor.org – Virtual Media

Listing of file='MAZESB.SRC;01' on disk='vmedia/mazes_2-sector.ccvf'

;	TITLE	'SOLRUT' & 'BORRA' GBG CC II VERSION
;
;	AUTHOR	GUILLERMO F. BREMER, JR. MONTERREY, MEXICO
;
;	SOLRUT:	SOLVE MAZE 'RAPIDLY'
;
;	PARAMETERS:	M=ENTRY TO MAZE (ARGUMENT OF CALL)
;			CR=COLOR FOR SOLUTION (POKED)
;
	ORG	0BC00H
;
SOLRUT:	PUSH	H	;SAVE HL
	XCHG		;HL=ARGUMENT
	MVI	M,'.'	;2005
	INX	H
	LDA	CR
	MOV	M,A
	DCX	H
B2010:	MVI	A,4	;2010
	STA	CONT
	LXI	B,DESPL
LOOP1:	LDAX	B	;DE=DISPLACEMENT
	MOV	E,A
	INX	B
	LDAX	B
	MOV	D,A
	XCHG		;DE=M
	DAD	D	;HL=M+D(I)
	MOV	A,M
	CPI	'B'
	JZ	RUTA
	XCHG		;HL=M, DE=M+D(I)
	INX	B
	LDA	CONT
	DCR	A
	STA	CONT
	JNZ	LOOP1
	JMP	NORUTA
;
;WAY FOUND, MARK IT WITH A '.'
RUTA:	MVI	M,'.'	;2020
	INX	H
	LDA	CR
	MOV	M,A
	DCX	H
	LXI	D,128	;2030
	XCHG
	DAD	D
	MOV	A,M
	CPI	' '
	JZ	RETOK
	XCHG		;2040
	JMP	B2010
;
;NO WAY TO PROCEED, FIND WAY BACK
NORUTA:	MVI	A,4	;2050
	STA	CONT
	LXI	B,DESPL
LOOP2:	LDAX	B
	MOV	E,A
	INX	B
	LDAX	B
	MOV	D,A
	XCHG		;DE=M
	DAD	D	;HL=M+D(I)
	MOV	A,M
	CPI	'.'
	XCHG		;HL=M, DE=M+D(I)
	JZ	RETRO
	INX	B
	LDA	CONT
	DCR	A
	STA	CONT
	JNZ	LOOP2
RETERR:	MVI	D,-1
	MOV	E,D
	POP	H	;RESTORE HL
	RET		;NO WAY OUT, ERROR RETURN
;
; MARK WITH 'X' AND GO BACK ONE STEP
RETRO:	MVI	M,'X'	;2060
	INX	H
	MVI	M,0
	XCHG		;GO BACK (HL=M+D(I))
	JMP	B2010
;
; FOUND SOLUTION, NORMAL RETURN VALUE = 0
RETOK:	MVI	D,0	;DE=0
	MOV	E,D
	POP	H	;RESTORE HL
	RET
;
;DATA AREAS
CR:	DS	1	;COLOR FOR SOLUTION (POKED FROM BASIC)
DESPL:	DW	128	;DOWN
	DW	2	;RIGHT
	DW	-2	;LEFT
	DW	-128	;UP
CONT:	DS	1	;SCRATCH COUNTER
;
;
;
;	BORRA:	ERASE SOLUTION TO MAZE
;
;	PARAMETERS:	M=ENTRY POSITION (ARGUMENT)
;	IT ERASES UNTIL A 127 CHARACTER (DEL) IS FOUND
;
	ORG	0BD00H
;
BORRA:	PUSH	H	;SAVE HL
	XCHG		;HL=ARGUMENT
ESFIN:	MOV	A,M
	CPI	127
	JZ	DONE	;RETURN
	CPI	'.'
	JZ	BOR
	CPI	'X'
	JZ	BOR
	INX	H
	INX	H
	JMP	ESFIN
;
; ERASE '.' OR 'X' TO 'B'
BOR:	MVI	M,'B'
	INX	H
	MVI	M,0
	INX	H
	JMP	ESFIN
;
DONE:	POP	H
	RET
;
	END