home *** CD-ROM | disk | FTP | other *** search
- TITLE 'DEMO8Q.ALC - 8 DEMO8QS PROBLEM'
- *
- * AUTHOR. DON HIGGINS.
- * DATE. 10/23/82.
- * REMARKS. PC/370 DEMO OF RECURSIVE PROGRAM.
- *
- * SOLVE 8 QUEENS CHESS PROBLEM WITH RECURSIVE ROUTINE.
- *
- * THE PROBLEM AS DESCRIBED IN "STRUCTURED PROGRAMMING" BY DIJKSTRA
- * IS TO PRINT ALL POSSIBLE POSITIONS OF 8 QUEENS ON A CHESS BOARD
- * SUCH THAT THEY CANNOT CAPTURE EACH OTHER.
- *
- * PROGRAM RAN 85 SECONDS WITH JRT PASCAL ON 4MHZ Z80
- * PROGRAM RAN 55 SECONDS WITH PC/370 ON 4MHZ Z80
- * PROGRAM RAN 69 SECONDS WITH PC/370 ON 4.77MHZ 8088
- *
- DEMO8Q CSECT
- LR BASE,ENTRY
- USING DEMO8Q,BASE
- L ENTRY,=V(PET)
- BALR LINK,ENTRY
- LA STKPTR,STACK-LSENTRY
- USING DSTACK,STKPTR
- LA N,1
- BAL LINK,GENQ CALL RECURSIVE SUBROUTINE FOR RESULT
- L ENTRY,=V(PET)
- BALR LINK,ENTRY
- SVC EXIT
- GENQ EQU *
- LA STKPTR,LSENTRY(STKPTR) PUSH STACK
- ST H,STKH
- ST LINK,STKLINK STORE ARGUMENTS
- LA H,1
- LOOP EQU *
- LA ACOL,COL-1(H)
- CLI 0(ACOL),TRUE
- BNE NEXT
- LA R1,8(N)
- SR R1,H
- LA AUP,UP-1(R1)
- CLI 0(AUP),TRUE
- BNE NEXT
- LA R1,0(N,H)
- BCTR R1,0
- LA ADOWN,DOWN-1(R1)
- CLI 0(ADOWN),TRUE
- BNE NEXT
- STC H,X-1(N)
- MVI 0(ACOL),FALSE
- MVI 0(AUP),FALSE
- MVI 0(ADOWN),FALSE
- LA N,1(N)
- CH N,=H'8'
- BH PRINT
- BAL LINK,GENQ CALL ROUTINE AGAIN
- B CONT
- PRINT EQU * PRINT ONE SOLUTION
- LA K,8
- LA ALINE,LINE+1
- PLOOP EQU *
- SR R0,R0
- IC R0,X-1(K)
- CVD R0,PWORK
- MVC 0(4,ALINE),=X'40202020'
- ED 0(4,ALINE),PWORK+6
- LA ALINE,5(ALINE)
- BCT K,PLOOP
- LA R2,LINE
- SVC WTO
- CONT EQU *
- BCTR N,0
- LA R1,0(H,N)
- BCTR R1,0
- LA ADOWN,DOWN-1(R1)
- MVI 0(ADOWN),TRUE
- LA R1,8(N)
- SR R1,H
- LA AUP,UP-1(R1)
- MVI 0(AUP),TRUE
- LA ACOL,COL-1(H)
- MVI 0(ACOL),TRUE
- NEXT EQU *
- LA H,1(H)
- CH H,=H'8'
- BNH LOOP
- L H,STKH
- L LINK,STKLINK
- SH STKPTR,=AL2(LSENTRY) POP STACK
- BR LINK RETURN
- LTORG
- EXIT EQU 0
- WTO EQU 209
- R0 EQU 0
- R1 EQU 1
- R2 EQU 2
- N EQU 3
- ACOL EQU 4
- AUP EQU 5
- ADOWN EQU 6
- AX EQU 7
- H EQU 8
- ALINE EQU 9
- K EQU 10
- BASE EQU 12
- STKPTR EQU 13
- LINK EQU 14
- ENTRY EQU 15
- COL DC 8AL1(TRUE)
- UP DC 15AL1(TRUE)
- DOWN DC 15AL1(TRUE)
- X DC 8AL1(0)
- STACK DC 8F'0,0'
- LINE DC CL50' ',C'$'
- PWORK DC D'0'
- TRUE EQU 0
- FALSE EQU 1
- DSTACK DSECT
- STKH DS F
- STKLINK DS F
- LSENTRY EQU *-DSTACK
- END DEMO8Q