PUZP checks the output from PUZA to see if it's correct, and if the piece placement logic seems to work. Yes and yes.
AGO .START
--ASSEMBLE, LINK, AND GO -----------------------
C:\USERS\LIN\DOCUMENTS\Z390CODE\PUZP
TEST CMD: S FF3FE.!=X'8D' <===
THIS IS PUZP. THERE ARE 3 PROGRAMS IN THE SET.
PUZA READS THE PIECE/ROTATION FILE, AND CREATES
THE TABLE OF VALID LOCATIONS. THIS IS USED TO
INSURE THAT WE DON'T INSERT A PIECE THAT WOULD
LAY OVER THE EDGE OF THE BOARD
PUZP TESTS THE VALID LOCATION TABLE TO MAKE SURE IT'S GOOD.
ALSO, THE SAY-TRACE ROUTINE WAS ENHANCED TO SHOW
BOTH HOW MANY TIMES SAY WAS CALLED,
HOW MANY TIMES FROM EACH LOCATION,
AND ALLOW REGISTERS TO BE (SORT OF) DYNAMICALLY
SPECIFIED AT ASSEMBLY TIME.
MOST OF THE WORK AREAS WERE JUST COPIED FROM THE PUZB
PROGRAM.
PUZB IS THE PROTRAM THAT DOES THE WORK, PUTTING PIECES
INTO THE PUZZLE, REMOVING THEM WHEN WE CANNOT CONTINUE,
AND REPORTING FOUND SOLUTIONS.
SET G=C:\USERS\LIN\DOCUMENTS\Z390CODE\PUZB
SET INFILE=%G%.I5.TXT
SET OUTFILE=%G%.OUTFILE.TXT
BAT\ASMLG %G%.MLC TIME(1) PARM('PRINT-9')
=========== CREATE FILE OF BREAK POINT COMMANDS. =================
C:\USERS\LIN\DOCUMENTS\Z390CODE\PUZPB
SET G=C:\USERS\LIN\DOCUMENTS\Z390CODE\PUZP
SET LISTING=%G%.PRN
SET SYSPRINT=%G%.BREAK.SYSPRINT.TXT
SET BREAK=%G%.BREAK.BREAK.TXT
SET SYSIN=%G%.BREAK.SYSIN.TXT
BAT\EZ390 C:\USERS\LIN\DOCUMENTS\Z390CODE\QBREAK.MLC
--//SYSIN INPUT TO CREATE BREAKPOINT COMMANDS. ------------
LOADLOC=FF000 13R%
LABEL=AAAA,BBBB,EEEE
LABEL=ZIN
COMMAND=C:\USERS\LIN\DOCUMENTS\Z390CODE\PUZP ASMLG
COMMAND=C:\USERS\LIN\DOCUMENTS\Z390CODE\PUZPT EZ390
COMMAND=C:\USERS\LIN\DOCUMENTS\Z390CODE\PUZPB BK PTS
-----------------------------------------------------------
* -----------------------------------------------------------
.START ANOP
*
MACRO
CLRZ &LOC,&LEN,&PAD=
$$LA R0,&LOC
$$LA R1,&LEN
LR 14,13
SLR 15,15
AIF (T'&PAD EQ 'O').MVCL
ICM 15,8,=&PAD
.MVCL MVCL (0),(14)
MEND
*
MACRO
$$LA &R,&FROM
AIF ('&FROM'(1,1) EQ '(').LR
LA &R,&FROM
MEXIT
.LR LR &R,&FROM
MEND
*
MACRO
&L GETP &FILE
L R1,APIECE INPUT BUFFER
LA R2,48(R1) NEXT ELEMENT IN INPUT BUFFRE
ST R2,APIECE SAVE FOR NEXT TIME
MEND
*
MACRO
&LBL SAY &TEXT
&LBL BAL R1,SAY
DC H'-1'
AIF ('&TEXT' NE '').DC
DC AL2(*-PUZP)
MEXIT
.DC DC CL8&TEXT
MEND
.*
MACRO
ERRWTO &TEXT
LCLA &A
&A SETA K'&TEXT-2
MVC LINE(&A),=C&TEXT
WTO MF=(E,LINE-6)
MVC LINE,LINE-1
MEND
PUZP START 0
YREGS
DS 18F
PRTTEST DS CL60,CL4 WORK AREAS,
DW DS 4D ONLY USED AFTER
HW DS 4H WE'RE DONE WITH
BOARD DS D THE INITIALIZATION CODE.
ORG PUZP
*
USING *,13
STM 14,12,12(13)
ST 13,4(15)
ST 15,8(13)
LR 13,15
L R4,0(R1)
*
L R2,LGETMAIN
ST R2,LTABLE
GETMAIN R,LV=(2)
ST R1,LGETMAIN+4
LR R12,R1
USING DSECT,R12
CLRZ INDEX,(2)
*
LA R1,PAGE
LR R0,R1
LA R2,LLINE
AR R2,R1
STM R0,R2,APAGE
L R0,=A($TABL-DSECT)
AR R0,R12
*** LA R0,$TABL
ST R0,ATABLE
** BAL R9,CLRPAGE
*
MVC LINE-8(8),=X'4040004800004040'
MVC LINE,LINE-1
MVC SPACES,SPACES-1
MVI SEPAR,C'='
MVC SEPAR+1(L'SEPAR-1),SEPAR
MVC WTO-8(8),LINE-8
MVC WTO,SPACES
ZAP SAY#,P0
LA R0,SAY##
ST R0,SAY##-4
*
CLI 1(R4),0
BE OPEN
LH R5,0(R4)
SH R5,=H'10'
BP PACKSAY#+6
BADPARM ERRWTO 'BAD PARM, SAYSTOP=###'
EX 0,*
PACKSAY# PACK SAYSTOP,10(0,R4)
EX R5,PACKSAY#
B OPEN
* -----------------------------------------
* THERE ARE 62 PIECES/ROTATIONS FROM PUZA.
* 76 ALLOWS FOR THE PIECES + X'FF' AT THE END OF EACH SET.
* I'VE ALIGNED THEM ON A 125 BYTE BOUNDARY TO MAKE TESTING,
* LOOKING AT THE CONTENTS OF ENTRIES EASIER.
* ONE COULD CHANGE THAT LATER, BUT WHY BOTHER.
*
* THE LARGE TABLE CONTAINS ENTRIES FOR EACH OF THE 61 ROTATIONS
* OF THE 12 PIECES. + HAS ONLY 1. T HAS 4. L WOULD HAVE 4,
* BUT ONLY 1 IS DEFINED BECAUSE THAT ELIMINATES GETTING MIRROR
* IMAGES -- IE THE SAME SOLUTION, TURNED OVER OR ROTATED 180 DEGREES.
* THE INDEX TABLE IS INTERNALLY DEFINED, ON TOP OF THE "DOC" SECTION,
* BECAUSE IT'S SMALL AND THE SPACE IS FREE.
*
* BUT, THIS IS THE LARGE TABLE. FOR TESTING, I ALIGNED IT ON A 256
* BYTE BOUNDARY. IT'S ENTRY LENGTH IS SLIGHTLY MORE THAN 128 AND 256
* IS THE NEXT CONVENIENT SIZE. WORSE, I PUT IT ON A REALY 256 BYTE
* BOUNDARY SO PROGRAM OFFSETS EXACTLY MATCH LOCATIONS.
*
LISTDCBM DC C'........ OPENED FOR OUTPUT, RECFM=.., LRECL=.....'
PUSH USING,PRINT
USING IHADCB,2
PRINT NOGEN
OPENOUT MVC LISTDCBM(8),DCBDDNAM
OPEN ((2),OUTPUT)
B LISTDCB
OPENIN MVC LISTDCBM(8),DCBDDNAM
MVC LISTDCBM+20(3),=C' IN'
OPEN ((2),INPUT)
LISTDCB UNPK LISTDCBM+34(3),DCBRECFM-IHADCB(2,R2)
TR LISTDCBM+34(2),HEX-240
MVI LISTDCBM+36,C','
LH R0,DCBLRECL-IHADCB(R2)
CVD R0,16(R13)
OI 13(R13),X'0F'
UNPK LISTDCBM+44(5),21(3,R13)
POP USING,PRINT
MVC LINE(L'LISTDCBM),LISTDCBM
WTOLINE WTO MF=(E,LINE-6)
PUTLINE PUT OUTFILE,LINE-1
MVC LINE,LINE-1
BR R9
*
OPEN LA R2,OUTFILE
BAL R9,OPENOUT
LA R2,INFILE
BAL R9,OPENIN
*
SLR R8,R8
*** BAL R9,QINDEXM
*
LA R5,$$L
GET INFILE PUZA PGM-ID. NEXT. NXNN+++
LR R0,R1 ALL IE 1 SINGLE RECORD.
STM R0,R1,APIECE
MVC IDA,0(R1)
*
GETP INFILE NXNN, PUZZLE WIDTH, LEN, WID-1, LEN-1
LA R5,$$L(R5)
MVC NXNN(LNXNN),0(R2)
*
MVC LINE(LIDA),IDA
PUT OUTFILE,LINE-1
MVC LINE,LINE-1
MVC LINE(LIDB),IDB
MVC LINE+LIDB(4),NXNN
PUT OUTFILE,LINE-1
MVC LINE,LINE-1
*
SR R5,R5
SR R8,R8
LA R6,INDEX
L R7,ATABLE
MVC 0($L,R7),ZEROS
ZAP HW,P1
ZAP HW+2,P0
GETP INFILE FIRST PIECE, MUST BE "+"
LA R5,$$L(R5)
CLI 0(R2),C'+'
BE NEWPIECE+18
ERRWTO '+ PIECE MUST BE FIRST (JUST BECAUSE)'
EX 0,*
* ---------------- CREATE INDEX, LOAD ROTATIONS
USING $,R7
USING $INDEX,R6
*
NEWPIECE MVI 0(R7),X'FF' END OF PIECE
LA R7,$L(R7) BUMP ADDR IN TABLE
MVC 0($L,R7),ZEROS
LA R6,LINDEX(R6)
*
AP HW+2,P1
MVC HW+4,2(R2) SAVE ROTATID
MVC 0(LINDEX,R6),ZEROS
ST R7,0(R6) $INDEXR7
MVI 8(R6),X'FF'
LA R5,1(R5)
SAMEPIEC MVC 0($L,R7),ZEROS
MVC 0($$L,R7),0(R2) SAVE PASSED DATA
MVI $L(R7),X'FF'
LA R8,1(R8)
*
LM R0,R1,$$VALID
LA R2,VALCHAR
LA R15,60
*
* BOTH BOARD, AND VALID TABLES, 8 BYTES EACH, WERE PASSED.
* WE'RE GOING TO CREATE A CHARACTER VALID TABLE.
* THAT WILL MAKE THE 'VALID' TEST MUCH EASIER AND FASTER.
* BUT IT DID MAKE THE ROTATE DSECT 128 BYTES INSTEAD OF 64.
*
SETVAL LA R14,1
NR R14,R1
BZ *+8
MVI 0(R2),C'X'
LA R2,1(R2)
SRDL R0,1
BCT R15,SETVAL
*
**** MVC $$L($L-$$L,R7),ZEROS SAVE PASSED DATA
LA R7,$L(R7) POINT TO NEXT SLOT
MVI 0(R7),X'FF'
*
GETIN GETP INFILE GET NEXT ENTRY
LA R5,$$L(R5)
AP HW,P1 COUNT IT
LA R8,1(R8) TWICE - WHAT THE HECK
CLI 0(R2),X'FF' Q. END OF FILE/RECORD/TABLE
BE ZIN YEP
*
CLC HW+4(1),2(R2) Q. SAME ROTAT=ID PREFIX?
BE SAMEPIEC YES, SAME PIECE, NEXT ROTATION
B NEWPIECE
* -------------------------------------------
APIECE DC 2F'0'
*
LGETMAIN DC A(LDSECT,0)
*
LTABLE DC A(384*73)
ATABLE DC F'0'
ENDTABLE DC F'0'
*
LLINE EQU 80
DC A(22*80)
APAGE DC A(0,0,0)
DC H'53,0',C' '
* -------------------------------------------
* -------------------------------------------
DC AL2(L'LOADEDM+4,0),C' '
**ADEDM DC C' ... PIECE DEFINITIONS (OUT OF 60) LOADED FOR .... BOARD'
**ADEDM DC C' ... ROTATIONS OF ... PIECES (OUT OF 60+12) LOADED FOR
LOADEDM DC C' ..... BYTES LOADED FOR ... ROTATIONS OF ... PIECES (OUT X
OF 60+12) LOADED FOR BOARD'
ZIN OI HW+1,X'0F'
SAY 'ZIN'
CLOSE INFILE
CVD R5,DW
OI DW+7,X'0F'
UNPK LOADEDM+1(5),DW+5(3)
UNPK LOADEDM+24(3),HW
OI HW+3,X'0F'
UNPK LOADEDM+41(3),HW+2
MVC LOADEDM+L'LOADEDM-10(4),NXNN
WTO MF=(E,LOADEDM-5)
MVC LINE(L'LOADEDM),LOADEDM
PUT OUTFILE,LINE
*
SAY ,
MVC PRTTEST,SPACES
MVC DW(32),ZEROS
MVC LINE,LINE-1
LA R6,LINDEX(R6)
ST R6,ENDINDEX
MVI 0(R6),X'FF'
MVI 0(R7),X'FF'
ST R7,ENDTABLE
* ------------------------------------
SAY ,
L R11,APAGE
ST R11,APAGE+4
LA R0,74(R11)
ST R0,APAGE+8
ST R11,APAGE+4
* ------------------------------------
LA R6,INDEX
L R7,0(R6)
AAAA SR R8,R8
CCCC LA R1,VALCHAR(R8)
CLI 0(R1),0
BNE EEEE
SR R1,R1
BAL R9,SAV1
BAL R9,MOV1
MVI PRTTEST,C'.'
MVC PRTTEST+1(59),PRTTEST
*
EEEE LA R8,1(R8)
SAY 'EEEE'
CH R8,=H'57'
BL CCCC
* --------------------------------------
LA R7,$L(R7)
CLI 0(R7),X'FF'
BNE AAAA
LA R6,LINDEX(R6)
L R7,0(R6)
CLI 0(R6),0
BE AAAA
BAL R9,PUTLAST
B CLOSE
* EX 0,*
* -----------------------------------
SAV1 LM R14,R15,$$BOARD
SLDL R14,0(R8)
STM R14,R15,BOARD
SAY 'SAV1'
LA R1,PRTTEST
LA R2,60
SAV1L LA R0,1
NR R0,R15
BZ *+10
MVC 0(1,R1),$$CHAR
LA R1,1(R1)
SRDL R14,1
BCT R2,SAV1L
BR R9
* --------------------------------------
MOV1 LA R14,PRTTEST
SAY 'MOV1'
L R1,WIDTHX
STC R1,MMM+7
LA R1,2(R1)
STC R1,MMM+1
*
L R1,APAGE+4
LA R0,2(R1)
A R0,WIDTH
ST R0,APAGE+4
L R0,LENGTH
*
MMM MVC 0(0,R1),SPACES
MVC 1(0,R1),0(R14)
A R14,WIDTH
AH R1,DCBLRECL-IHADCB+OUTFILE
BCT R0,MMM
*
CVD R8,DW
OI DW+7,X'0F'
UNPK 2(3,R1),DW+6(2)
*
MVI PRTTEST,C'.'
MVC PRTTEST+1(59),PRTTEST
*
L R11,APAGE+4
C R11,APAGE+8
BLR R9
PUTLAST L R11,APAGE
ST R11,APAGE+4
*
L R2,LENGTH
LA R2,1(R2)
SAY 'PPP'
PPP PUT OUTFILE,(11)
MVC 0(81,R11),SPACES
AH R11,DCBLRECL-IHADCB+OUTFILE
BCT R2,PPP
PUT OUTFILE,SPACES
** BAL R9,CLRPAGE
BR R9
* ----------------------------------
SAYSTOP DC CL6' '
SAY# DC PL6'0'
SAY#C DC CL14' '
DC H'120,0',C' '
SAYLINE DC CL120' '
EDITL6 DC X'4020202020206B2020206B212020',CL14' '
LEDITL6 EQU *-EDITL6
CNOP 0,4
SAYBRK DC CL8'MAIN BACKUPTESTPA'
ST R0,12(R13)
SAYRGS DC X'60708090'
*
REPLY DC F'0'
ECB DC F'-1'
*
DC 4F'0'
SAY LA R1,0(R1)
STM R14,R1,SAY-16
* --------------------------------
CLI 0(R1),X'FF'
BNE SAYCOUNT
*
L R14,SAY##-4
LA R0,6(R14)
ST R0,SAY##-4
ZAP 0(6,R14),P0
SR R14,R12
STH R14,0(R1)
*
SAYCOUNT LH R14,0(R1)
AR R14,12
AP 0(6,R14),P1
MVC 12(LEDITL6,R13),EDITL6
EDMK 12(L'EDITL6,R13),0(R14)
MVC SAY##-16(12),0(R1)
L R1,SAY-4
* --------------------------------
* WTOR CLI DCB,X'FF'
* WTOR 'ENTER QUESTION',REPLY,4,ECB
* WAIT 1,ECB=DW
* OC REPLY,SPACES
CLC 2(6,R1),SAYBRK
BE SAYWTO
CLC 2(6,R1),SAYBRK+6
BE SAYWTO
CLC 2(6,R1),SAYBRK+12
BNE SAYNWTO
SAYWTO WTO MF=(E,LINE-5)
L R1,SAY-4
*
SAYNWTO CLI 2(R1),X'39'
BH SAYLBL
MVC SAYLINE(8),SAYLINE-1
UNPK SAYLINE+2(5),2(3,R1)
TR SAYLINE+2(4),HEX-240
MVI SAYLINE+6,C' '
B SAYLBL+6
*
SAYLBL MVC SAYLINE(8),2(R1)
*
UNPK SAYLINE+10(9),BOARD(5)
UNPK SAYLINE+18(9),BOARD+4(5)
MVI SAYLINE+26,C' '
TR SAYLINE+10(16),HEX-240
*
LA R15,SAYRGS
LA R14,SAYLINE+28
LA R0,L'SAYRGS
SAYLOOP MVI 0(R14),C'R'
MVI 2(R14),C'='
SR R1,R1
IC R1,0(R15)
** ST R0,12(R13)
EX R1,SAYRGS-4
SRL R1,4
IC R1,HEX(R1)
STC R1,1(R14)
UNPK 3(9,R14),12(5,R13)
TR 3(8,R14),HEX-240
MVI 11(R14),C' '
LA R14,12(R14)
LA R15,1(R15)
BCT R0,SAYLOOP
*
OI #PIECES+3,X'0F'
UNPK 2(3,R14),#PIECES+2(2)
*
AP SAY#,P1
MVC 12(LEDITL6,R13),EDITL6
EDMK 12(L'EDITL6,R13),SAY#
MVC SAY#C,0(R1)
MVC 7(L'EDITL6,R14),SAY#C
MVC 19(12,R14),SAY##-16
WTO MF=(E,SAYLINE-5)
CLC SAY#,SAYSTOP
BL SAYEXIT
EX 0,*
*
SAYEXIT LM R14,R1,SAY-16
CLI 2(R1),X'40'
BL 4(R1)
B 10(R1)
* -------------------------------------------
CLOSE CLOSE OUTFILE
LM R0,R1,LGETMAIN
FREEMAIN R,A=(1),LV=(0)
*
L 13,4(13)
LM 14,12,12(13)
SLR 15,15
BR 14
* --------------------------------------
LTORG
P1 DC X'1C'
P0 DC X'0C'
#PIECES DC PL4'0'
*
#FIT DC PL8'0'
#TRIES DC PL8'0'
HEX DC C'0123456789ABCDEF'
DC H'112,0',C' '
IDA DC CL27' '
DC C', SETUP, DEFINES PIECE BIT PATTERNS+VALID LOCATIONS'
LIDA EQU *-IDA
IDB DC C'PUZP, ASM &SYSDATE AT &SYSTIME'
DC C', TESTS THE EDGE LOCATION DEFINITIONS FOR BOARD='
LIDB EQU *-IDB
PUSH PRINT
PRINT NOGEN
INFILE DCB DDNAME=INFILE,DSORG=PS,EODAD=ZIN,MACRF=GL,LRECL=3200, X
RECFM=F,BUFNO=1
OUTFILE DCB DDNAME=OUTFILE,DSORG=PS,LRECL=81,RECFM=FT,MACRF=PM
POP PRINT
*
DS 0D
LINDEX EQU 48
LLINDEX EQU 48*12
*
*
@@PAD#0 EQU *-PUZP+4095
@@PAD#1 EQU @@PAD#0/(4097)
@@PAD#2 EQU (@@PAD#1*4096)
ORG PUZP+@@PAD#2
*----------------------------------------------------------
* WHEN TESTING, IT'S EASIER IF THE PROGRAM DOES NOT EXCEED 4K,
* SO I MOVED SOME OF THE WORK AREAS DOWN INTO THE GETMAIN AREA.
* THERE IS A SINGLE GETMAIN, WITH 4 SECTIONS.
* INDEX -- IS THE 12 ENTRY PIECE INDEX. ROTATIONS ARE SEPARATE.
* WORKAREAS -- JUST THAT, MOVED FROM PROGRAM.
* PAGE --- 22 LINE, PRINT AREA
* $TABLE -- ROTATION DEFINITIONS.
*----------------------------------------------------------
DSECT DSECT 0
INDEX DS 13XL128,XL4
*----------------------------------------------------------
*
* THIS SECTION COMES FROM PUZA. PUZA PASSES 1 SINGLE RECORD
* THAT CONTAINS THE IDA (PGM NAME, ASSEMBLY DATE+TIME
* THE NXNN RECORD WITH THE HALF DOZEN FIELDS BELOW,
* AND THEN 60 ROTATION DEFINITIONS. 4 ARE OMITTED.
* 3 "L" TO ELIMINATE DUPLICATE SOLUTIONS.
* U UPSIDE DOWN BECAUSE THE PROGRAM WILL NEVER SELECT IT.
* (I MAY HAVE TO DO SOMETHING ABOUT THIS)
*
* ++++++++++++++++++++++++++++++
NXNN DS F DC F'0' THIS SECTION IS PASSED
WIDTH DS F DC F'0' FROM PUZA
LENGTH DS F DC F'0'
WIDTHX DS F DC F'0'
LENGTHX DS F DC F'0'
LRECL DS F DC F'81'
LNXNN EQU *-NXNN
* ++++++++++++++++++++++++++++++
*
ENDINDEX DS F DC A(INDEX+12*128)
SAV678B DS XL28
DS CL2
WTO DS XL4,CL2
LINE DS CL136
SPACES DS CL136
* PARM DS CL100
SEPAR DS CL136
ZEROS DS XL136
DS CL4
SOLLIST DS 12XL20
ESOLLIST DS CL20
DC 4F'0'
SAY## DS 40PL6
*
PAGE DS 22CL84 PRINT A ROW OF SOLUTIONS TABLE/DSECT
*----------------------------------------------------------
$TABL DS 80XL180 PIECE ROTATION TABLE 60 ENTRIES+12 ENDS=72
LDSECT EQU *-DSECT
*
$INDEX DSECT 0
IR6 DS A FIRST R7 ROTATION
IR678 DS 3A PRIOR R6, R7, R8
IOLDBORD DS XL8 BOARD INTO WHICH WE PUT PIECE
IBOARD DC XL8 BOARD
IPIECE DS XL8 PIECE BITS SHIFTED
IROTATID DS CL4
DS CL4
ISAVLEN EQU *-IR678
*
ISAVOLD DS XL40 6,7,8, BOARD, SHIFTED PIECE PATTERN
ISAVNEW DS XL40
IL EQU *-$INDEX
*
* THE FILE FROM PUZA IS A SINGLE BLOCK, WITH 48 BYTE LOGICAL RECORDS.
* THE FIRST RECORD IS THE PUZA NAME AND ASSEMBLE DATE
* THE SECOND IS THE NXNN RECORD SHOWN BELOW (NXNN = BOARD WIDTH+LENGTH)
* THE THIRD IS THE START OF THE 60 ROTATION DEFINITION RECORDS,
* WITH $$CHAR AND $$ROTAT IDENTIFICATION.
* PIECEDEF IS 10 BYTES OF PIECE DEF FROM CONTROL CARDS
* PIECEOFF IS THE OFFSET OF EACH OF THE 5 SQUARES.
* COULD HAVE BEEN JUST 1 BYTE EACH, BUT IT'S DONE.
*
$ DSECT 0
DS XL(128)
$L EQU *-$
ORG $
*
* MVC LINE(4),ROTATID
* MVC LINE(1),CARD+1
* MVC LINE+4(16),BOARD + VALID
* MVC LINE+20(4),FIRSTLOC
* MVC LINE+24(4),MAXHEIGH
* MVC LINE+28(20),PIECEDEF
*
$$CHAR DS 0CL1 ALL THIS IS FROM PUZA.
$$ROTAT DS CL4
$$BOARD DS XL8
$$VALID DS XL8
$$MIN DS F
$$MAX DS F
PIECEDEF DS CL10
PIECEOFF DS CL10
$$L EQU *-$ DATA FROM PUZA PROGRAM
*
$SHIFTED DS F
$$MAXMAX DS F
NEWBOARD DS F
ROTATID DS CL6
*
VALCHAR DS CL60
* PUZINDEX DS 2CL60
* PUZLOCS DS 25XL8 X'180' = 384
*
* * THE REST IS WORK AREAS HERE.
* $NEXTOP DS F
* $BOARD DS XL8
* $LASTBOA DS XL8
* $INDEXSV DS 0XL64
* $INDEX DS XL44
* $CURR DS XL4
* $SAVE6 DS 2XL8
* $SAVE DS 2XL8
ORG
*
END PUZP