diff --git a/QUEENS_ASMH b/QUEENS_ASMH new file mode 100644 index 0000000..eb41ada --- /dev/null +++ b/QUEENS_ASMH @@ -0,0 +1,202 @@ +//HERC01 JOB 1,CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1), +// TIME=1440,REGION=2048K +//* EXECUTE ASMH ASSEMBLER, LINK AND GO +//* MOSHIX (C) 2021 +//* THIS IS THE ASM H VERSION, +//* BUT WORKS JUST THE SAME ON FX ASSEMBLER +//* NOTICE THAT THIS BACKTRACKING ALGORITHM +//* IS NOT ANY FASTER IN ASSEMBLER THAN IN FORTRAN OR PL1 +//ASMH EXEC PGM=IEV90,REGION=2048K +//**EPLIB DD DSN=SYS1.ASMH.LOADLIB,DISP=SHR +//SYSLIB DD DSN=SYS1.AMODGEN,DISP=SHR +// DD DSN=SYS1.MACLIB,DISP=SHR +//SYSUT1 DD DSN=&&SYSUT1,UNIT=SYSDA,SPACE=(1700,(600,100)) +//SYSUT2 DD DSN=&&SYSUT2,UNIT=SYSDA,SPACE=(1700,(300,50)) +//SYSUT3 DD DSN=&&SYSUT3,UNIT=SYSDA,SPACE=(1700,(300,50)) +//SYSPRINT DD SYSOUT=*,DCB=BLKSIZE=1089 +//SYSPUNCH DD SYSOUT=B +//SYSLIN DD DSN=&&LOADSET,DISP=(,PASS),UNIT=SYSDA, +// SPACE=(3120,(50,20)),DCB=LRECL=80 +//SYSIN DD * + MACRO +&LAB XDECO ®,&TARGET +&LAB B I&SYSNDX BRANCH AROUND WORK AREA +P&SYSNDX DS 0D,PL8 PACKED +W&SYSNDX DS CL13 CHAR +I&SYSNDX CVD ®,P&SYSNDX CONVERT TO DECIMAL + MVC W&SYSNDX,=X'40202020202020202020212060' NICE MASK + LA R1,W&SYSNDX+7 + EDMK W&SYSNDX,P&SYSNDX+2 EDIT AND MARK + BCTR R1,0 LOCATE THE RIGHT PLACE + MVC 0(1,R1),W&SYSNDX+12 MOVE THE SIGN + MVC &TARGET.(12),W&SYSNDX MOVE TO TARGET + MEND +* + PRINT GEN +NQUEENS CSECT + SAVE (14,12) SAVE REGISTERS ON ENTRY + BALR R12,0 ESTABLISH ADDRESSABILITY + USING *,R12 SET BASE REGISTER + ST R13,SAVEA+4 LINK MYSA->PREVSA + LA R11,SAVEA MYSA + ST R11,8(R13) LINK PREVSA->MYSA + LR R13,R11 SET MYSA POINTER + LA R7,LL L + LA R6,1 I=1 +OPENEM OPEN (OUTDCB,OUTPUT) OPEN THE PRINTER FILE +* +TITLE PUT OUTDCB,TITLEL PRINT TITLE LINE + XDECO R7,SOLNR+13 +TOTAL PUT OUTDCB,SOLNR +* +LOOPI LR R1,R6 DO I=1 TO L + SLA R1,1 I*2 + STH R6,A-2(R1) A(I)=I + LA R6,1(R6) I=I+1 + BCT R7,LOOPI LOOP DO I +* +STRT LA R9,1 N=1 START OF LOOP +LOOPN CH R9,L DO N=1 TO L + BH ELOOPN IF N>L THEN EXIT LOOP + SR R8,R8 M=0 + LA R10,1 I=1 + LR R5,R9 N + SLA R5,1 N*2 + BCTR R5,0 R=2*N-1 +E40 CR R10,R9 IF I>N + BH E80 THEN GOTO E80 + LR R11,R10 J=I +E50 LR R1,R10 I + SLA R1,1 I*2 + LA R6,A-2(R1) R6=@A(I) + LR R1,R11 J + SLA R1,1 J*2 + LA R7,A-2(R1) R7=@A(J) + MVC Z,0(R6) Z=A(I) + MVC Y,0(R7) Y=A(J) + LR R3,R10 I + SH R3,Y -Y + AR R3,R9 P=I-Y+N + LR R4,R10 I + AH R4,Y +Y + BCTR R4,0 Q=I+Y-1 + MVC 0(2,R6),Y A(I)=Y + MVC 0(2,R7),Z A(J)=Z + LR R1,R3 P + SLA R1,1 P*2 + LH R2,U-2(R1) U(P) + LTR R2,R2 IF U(P)<>0 + BNE E60 THEN GOTO E60 + LR R1,R4 Q + AR R1,R5 Q+R + SLA R1,1 (Q+R)*2 + LH R2,U-2(R1) U(Q+R) + C R2,=F'0' IF U(Q+R)<>0 + BNE E60 THEN GOTO E60 + LR R1,R10 I + SLA R1,1 I*2 + STH R11,S-2(R1) S(I)=J + LA R0,1 R0=1 + LR R1,R3 P + SLA R1,1 P*2 + STH R0,U-2(R1) U(P)=1 + LR R1,R4 Q + AR R1,R5 Q+R + SLA R1,1 (Q+R)*2 + STH R0,U-2(R1) U(Q+R)=1 + LA R10,1(R10) I=I+1 + B E40 GOTO E40 +E60 LA R11,1(R11) J=J+1 + CR R11,R9 IF J<=N + BNH E50 THEN GOTO E50 +E70 BCTR R11,0 J=J-1 + CR R11,R10 IF J=I + BE E90 GOTO E90 + LR R1,R10 I + SLA R1,1 I*2 + LA R6,A-2(R1) R6=@A(I) + LR R1,R11 J + SLA R1,1 J*2 + LA R7,A-2(R1) R7=@A(J) + MVC Z,0(R6) Z=A(I) + MVC 0(2,R6),0(R7) A(I)=A(J) + MVC 0(2,R7),Z A(J)=Z; + B E70 GOTO E70 +E80 LA R8,1(R8) M=M+1 +E90 BCTR R10,0 I=I-1 + LTR R10,R10 IF I=0 + BZ ZERO THEN GOTO ZERO + LR R1,R10 I + SLA R1,1 I*2 + LH R2,A-2(R1) R2=A(I) + LR R3,R10 I + SR R3,R2 -A(I) + AR R3,R9 P=I-A(I)+N + LR R4,R10 I + AR R4,R2 +A(I) + BCTR R4,0 Q=I+A(I)-1 + LR R1,R10 I + SLA R1,1 I*2 + LH R11,S-2(R1) J=S(I) + LA R0,0 R0=0 + LR R1,R3 P + SLA R1,1 P*2 + STH R0,U-2(R1) U(P)=0 + LR R1,R4 Q + AR R1,R5 Q+R + SLA R1,1 (Q+R)*2 + STH R0,U-2(R1) U(Q+R)=0 + B E60 GOTO E60 +ZERO XDECO R9,PG+0 EDIT N + XDECO R8,PG+12 EDIT M + PUT OUTDCB,PG PRINT BUFFER + LA R9,1(R9) N=N+1 + B LOOPN LOOP DO N +ELOOPN CLOSE (OUTDCB) CLOSE OUTPUT + L R13,SAVEA+4 PREVIOUS SAVE AREA ADDRS + RETURN (14,12),RC=0 RETURN TO CALLER WITH RC=0 + LTORG +SAVEA DS 18F SAVE AREA FOR CHAINING +OUTDCB DCB DSORG=PS,MACRF=PM,DDNAME=OUTDD USE OUTDD IN JCL +LL EQU 11 LL<=16 +L DC AL2(LL) INPUT VALUE +A DS (LL)H +S DS (LL)H +Z DS H +Y DS H +TITLEL DC CL36'1 N QUEENS SOLVER - MOSHIX DEC 2021' +PRTLINE DC CL133' ' +SOLNR DC CL19'1 MAX NXN: ' +PRTLINE2 DC CL133' ' +PG DS CL20 BUFFER +U DC (4*LL-2)H'0' STACK +R0 EQU 0 +R1 EQU 1 +R2 EQU 2 +R3 EQU 3 +R4 EQU 4 +R5 EQU 5 +R6 EQU 6 +R7 EQU 7 +R8 EQU 8 +R9 EQU 9 +R10 EQU 10 +R11 EQU 11 +R12 EQU 12 +R13 EQU 13 +R14 EQU 14 +R15 EQU 15 + END NQUEENS +/* +//LKED EXEC PGM=IEWL,PARM=(LET,LIST,MAP),COND=(4,LT,ASMH) +//SYSPRINT DD SYSOUT=* +//SYSLMOD DD DSN=&&GOSET(GO),DISP=(,PASS),UNIT=SYSDA, +// SPACE=(6144,(50,20,1)),DCB=RECFM=U +//SYSUT1 DD UNIT=SYSDA,SPACE=(1024,(50,20)) +//SYSLIN DD DSN=&&LOADSET,DISP=(OLD,PASS) +//* +//GO EXEC PGM=*.LKED.SYSLMOD,COND=(4,LT,ASMH) +//GO.OUTDD DD SYSOUT=*,LRECL=121,RECFM=FBA +//GO.SYSPRINT DD SYSOUT=* +//GO.SYSABEND DD SYSOUT=* +//