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