* /* START OF SPECIFICATIONS **** 00010020 *02* PROCESSOR = ASSEMBLER 00020020 **** END OF SPECIFICATIONS ***/ 00030020 GBLC &COMPNM,&ASMID 00050020 JHEAD 'ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE', X00070020 PHASEID=X5A, X00140020 LEVEL=13 00210003 *FUNCTION/OPERATION- * 00280020 * THIS SUBROUTINE IS CALLED FOR EACH ASSEMBLER OPCODE ENCOUNTERED * 00350020 * IN THE TEXT STREAM. THIS ROUTINE IS CALLED BY MAINLINE CONTROL. * 00420020 * THE ONLY ASSEMBLER OPCODES THAT CAUSE PUNCH OR LINK OUTPUT IS DC'S* 00490020 * CCW'S AND CNOP'S. ALL ASSEMBLER OPCODES CAUSE THE PRINT ROUTINE * 00560020 * TO BE CALLED. THE ASSEMBLER OPCODES ARE EVALUATED AND THE PROPER * 00630020 * TABLES ARE UPDATED OR THE PUNCH TEXT IS PREPARED THEN THE OUTPUT * 00700020 * ROUTINE IS CALLED. FOR DC'S THE OUTPUT ROUTINE WILL BE CALLED FOR * 00770020 * EACH 8 BYTES, OR FRACTION THEREOF, OF PUNCHED OUTPUT. * 00840020 * * 00910020 *ENTRY POINT- * 00980020 * AOP100 * 01050020 * * 01120020 *INPUT- * 01190020 * INTERNAL TEXT RECORDS RETRIEVED IN MAINLINE CONTROL. * 01260020 * SYMBOL REFERENCE FILE. * 01330020 * * 01400020 *OUTUT- * 01470020 * LISTING OF ASSEMBLER OPCODES. * 01540020 * PUNCH FILE OUTPUT FOR DC'S, CCW'S AND CNOP'S. * 01610020 * * 01680020 *EXTERNAL ROUTINES- * 01750020 * FORMATING, PRINT AND PUNCH ROUTINE * 01820020 * EVAL - EXPRESSION EVALUATION. * 01890020 * DCEVAL- DC EVALUATION ROUTINE * 01960020 * * 02030020 *EXITS, NORMAL- * 02100020 * EXITS TO MAINLINE CONTROL. * 02170020 * * 02240020 *EXITS, ERROR- * 02310020 * NONE * 02380020 * * 02450020 *TABLES/WORK AREAS- * 02520020 * ASSEMBLY COMMON * 02590020 * USING TABLE * 02660020 * * 02730020 *ATTRIBUTES- * 02800020 * REFRESHABLE * 02870020 * * 02940020 *NOTES- * 03010020 * NONE * 03080020 * * 03150020 * * 03220020 SPACE 2 03222020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -03230020 - COPY CODE ' 03240020 PRINT OFF DON'T PRINT JCOMMON COPY CODE 03250020 COPY JCOMMON 03290020 PRINT OFF DON'T PRINT JTEXT COPY CODE 03340020 COPY JTEXT 03430020 PRINT OFF DON'T PRINT X5COM COPY CODE 03480020 COPY X5COM 03570020 PRINT ON PRINT RSYMRCD COPY CODE 03620020 DSECT10 DSECT , DEFINE RESOLUTION DATA DSECT 03710020 COPY RSYMRCD COPY DSECT ITEMS 03780020 PRINT OFF DON'T PRINT JRXLFMTS COPY CODE 03830020 COPY RXLFMTS POST PROCESSOR RECORD FORMATS 03920020 PRINT OFF DON'T PRINT JERRMSGCD COPY CODE 03970020 COPY JERMSGCD DEFINE ERROR CODES AND SEVERITY 04060020 PRINT OFF DON'T PRINT JERRCD COPY CODE 04110020 COPY JERRCD COPY ERR RECORD FORMAT 04130020 PRINT ON THAT'S ALL THE COPY CODE 04160020 SPACE 3 04162020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -04170020 - INITIALIZATION ' 04180020 JCSECT (X5A00) START CSECT 04270020 * VS1 RELEASE 2 CHANGES 04330020 *D159320 OX00216 04330103 *C133500 OX00219 04330203 *C214900-215600 OX00220 04330503 * VS1 RELEASE 2.6 CHANGES 04330903 *A484500,485000,485600-485780,514420 OX00222 04331303 *C503300,513800 OX00222 04331403 *D485100,486280-487900 OX00222 04331503 * VS1 RELEASE 3 CHANGES 04331803 *D492800 OX00086 04332403 *A493600,494000 OX00086 04332503 *C158900,158920,159000 OX01760 04382503 * VS1 RELEASE 3.1 CHANGES 04384531 *D484500 OY01863 04386502 *A485742 OY01863 04388502 *C164500,903700,905100 OX02675 04390531 *A199900-200900 OX05796 04390931 *C202300 OX05796 04391331 *A208400-208520 OX05796 04391731 *C208600 OX05796 04392131 *A199500,199600,208000,208100 OY06130 04392231 *C199900,208400 OY06130 04392331 * VS1 RELEASE 040 CHANGES 04392403 *A158300 @OY06117 04398203 *C653800,654500,664300,665000,670600,702100,702800 @OX08876 04398305 *A658500,712400 @OX08876 04398405 *D684600,685300 @OX08876 04398505 *D870800,A885300 @OX11000 04398906 *A211000,213400-213932,214167-214191 @AZ07356 04399006 *A056700 @AY12907 04399106 JMODID , MODULE IDENTIFICATION 04404203 USING JTEXT,R5 FIXED TEXT PART 04410020 USING JTEXTA,R4 VARIABLE TEXT PART 04480020 USING X5COM,R7 PHASE COMMON AREA 04550020 USING DSECT10,R11 RESOLVED SYMBOL DATA USING 04620020 SPACE 2 04640020 AOP100 JSAVE BASE=YES SAVE CALLING REGISTERS 04760020 LA R3,AOP100+4095 SET UP USING REGISTER 04830020 LA R3,D1(R3) INCREMENT 1 04900020 USING AOP100+4096,R3 SET USING FOR OVER 4K SIZE 04970020 JENTRY (X5A01=AOP100) ENTRY POINT 05040020 GOIF JTEND,LT=AOP400 JUST LIST GENERATOR OPS 05110020 GOIF JPRONLY,ON=AOP350 IS RECORD PRINT ONLY 05180020 SR R11,R11 CLEAR FOR INSERT CHARACTER 05250020 IC R11,JTIOP PICK UP OP-CODE 05320020 LA R10,JTEND LESS OP-CODES NOT IN TABLE WILL 05390020 SR R11,R10 CALCULATE BRANCH TABLE OP-CODE 05460020 AR R11,R11 DOUBLE FOR BRANCH TABLE INDEX 05530020 LH R11,AOP200(R11) GET ROUTINE DISPLACEMENT 05600020 XC DUMSW,DUMSW CLEAR DS SW @AY12907 05650006 B AOP200(R11) BRANCH TO ASSEMBLER OP ROUTINE 05670020 SPACE 3 05672020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -05680020 - BRANCH TABLE AND EXIT ROUTINES' 05690020 * BRANCH TABLE FOR ASSEMBLER OPCODES 05740020 AOP200 EQU * BEGINNING OF BRANCH TABLE 05810020 ORG AOP200+2*(0-JTEND+JTEND) BRANCH DISPLACEMENT END 05880020 DC AL2(END100-AOP200) TABLE ENTRY FOR END 05950020 ORG AOP200+2*(0-JTEND+JTDXD) BRANCH DISPLACEMENT DXD 06020020 DC AL2(DXD100-AOP200) TABLE ENTRY FOR DXD 06090020 ORG AOP200+2*(0-JTEND+JTEQU) BRANCH DISPLACEMENT EQU 06160020 DC AL2(EQU100-AOP200) TABLE ENTRY FOR EQU 06230020 ORG AOP200+2*(0-JTEND+JTORG) BRANCH DISPLACEMENT ORG 06300020 DC AL2(ORG100-AOP200) TABLE ENTRY FOR ORG 06370020 ORG AOP200+2*(0-JTEND+JTCNOP) BRANCH DISPLACEMENT CNOP 06440020 DC AL2(CNOP00-AOP200) TABLE ENTRY FOR CNOP 06510020 ORG AOP200+2*(0-JTEND+JTCCW) BRANCH DISPLACEMENT CCW 06580020 DC AL2(CCW100-AOP200) TABLE ENTRY FOR CCW 06650020 ORG AOP200+2*(0-JTEND+JTDC) BRANCH DISPLACEMENT DC 06720020 DC AL2(DC0100-AOP200) TABLE ENTRY FOR DC 06790020 ORG AOP200+2*(0-JTEND+JTDS) BRANCH DISPLACEMENT DS 06860020 DC AL2(DS0100-AOP200) TABLE ENTRY FOR DS 06930020 ORG AOP200+2*(0-JTEND+JTSTART) BRANCH DISPLACEMENT START 07000020 DC AL2(START0-AOP200) TABLE ENTRY FOR START 07070020 ORG AOP200+2*(0-JTEND+JTCSECT) BRANCH DISPLACEMENT CSECT 07140020 DC AL2(CSECT0-AOP200) TABLE ENTRY FOR CSECT 07210020 ORG AOP200+2*(0-JTEND+JTDSECT) BRANCH DISPLACEMENT DSECT 07280020 DC AL2(DSECT0-AOP200) TABLE ENTRY FOR DSECT 07350020 ORG AOP200+2*(0-JTEND+JTCOM) BRANCH DISPLACEMENT COM 07420020 DC AL2(COM100-AOP200) TABLE ENTRY FOR COM 07490020 ORG AOP200+2*(0-JTEND+JTENTRY) BRANCH DISPLACEMENT ENTRY 07560020 DC AL2(ENTRY0-AOP200) TABLE ENTRY FOR ENTRY 07630020 ORG AOP200+2*(0-JTEND+JTEXTRN) BRANCH DISPLACEMENT EXTRN 07700020 DC AL2(EXTRN0-AOP200) TABLE ENTRY FOR EXTRN 07770020 ORG AOP200+2*(0-JTEND+JTWXTRN) BRANCH DISPLACEMENT WXTRN 07840020 DC AL2(EXTRN0-AOP200) TABLE ENTRY FOR WXTRN 07910020 ORG AOP200+2*(0-JTEND+JTCXD) BRANCH DISPLACEMENT CXD 07980020 DC AL2(CXD100-AOP200) TABLE ENTRY FOR CXD 08050020 ORG AOP200+2*(0-JTEND+JTLTORG) BRANCH DISPLACEMENT LTORG 08120020 DC AL2(LTORG0-AOP200) TABLE ENTRY FOR LTORG 08190020 ORG AOP200+2*(0-JTEND+JTLITR) BRANCH DISPLACEMENT LITR 08260020 DC AL2(LITR00-AOP200) TABLE ENTRY FOR LITERAL 08330020 ORG AOP200+2*(0-JTEND+JTSYMBL) BRANCH DISPLACEMENT SYMBOL 08400020 DC AL2(AOP300-AOP200) TABLE ENTRY FOR SYMBOL 08470020 ORG AOP200+2*(0-JTEND+JTPUNCH) BRANCH DISPLACEMENT PUNCH 08540020 DC AL2(PUNCH0-AOP200) TABLE ENTRY FOR PUNCH 08610020 ORG AOP200+2*(0-JTEND+JTREPRO) BRANCH DISPLACEMENT REPRO 08680020 DC AL2(REPRO0-AOP200) TABLE ENTRY FOR REPRO 08750020 ORG AOP200+2*(0-JTEND+JTPUSH) ORG FOR PUSH BRANCH ADDRESS 08820020 DC AL2(PUSH00-AOP200) DISPLACEMENT TO PUSH 08890020 ORG AOP200+2*(0-JTEND+JTPOP) ORG FOR POP BRANCH ADDRESS 08960020 DC AL2(POP100-AOP200) DISPLACEMENT TO POP 09030020 ORG AOP200+2*(0-JTEND+JTPRINT) BRANCH DISPLACEMENT PRINT 09100020 DC AL2(PRINT0-AOP200) TABLE ENTRY FOR PRINT 09170020 ORG AOP200+2*(0-JTEND+JTUSING) BRANCH DISPLACEMENT USING 09240020 DC AL2(USING0-AOP200) TABLE ENTRY FOR USING 09310020 ORG AOP200+2*(0-JTEND+JTDROP) BRANCH DISPLACEMENT DROP 09380020 DC AL2(DROP00-AOP200) TABLE ENTRY FOR DROP 09450020 ORG AOP200+2*(0-JTEND+JTCMNT) BRANCH DISPLACEMENT COMNT 09520020 DC AL2(AOP400-AOP200) TABLE ENTRY FOR COMMENT 09590020 ORG AOP200+2*(0-JTEND+JTHCMNT) BRANCH DISPLACEMENT HCMNT 09660020 DC AL2(AOP400-AOP200) TABLE ENTRY FOR HIDDEN COMMENT 09730020 ORG AOP200+2*(0-JTEND+JTERROR) BRANCH DISPLACEMENT ERROR 09800020 DC AL2(ERROR0-AOP200) TABLE ENTRY FOR ERROR 09870020 ORG AOP200+2*(0-JTEND+JTSPACE) BRANCH DISPLACEMENT SPACE 09940020 DC AL2(SPACE0-AOP200) TABLE ENTRY FOR SPACE 10010020 ORG AOP200+2*(0-JTEND+JTEJECT) BRANCH DISPLACEMENT EJECT 10080020 DC AL2(EJECT0-AOP200) TABLE ENTRY FOR EJECT 10150020 ORG AOP200+2*(0-JTEND+JTTITLE) BRANCH DISPLACEMENT TITLE 10220020 DC AL2(TITLE0-AOP200) TABLE ENTRY FOR TITLE 10290020 ORG AOP200+2*(0-JTEND+JTMNOTE) BRANCH DISPLACEMENT MNOTE 10360020 DC AL2(MNOTE0-AOP200) TABLE ENTRY FOR MNOTE 10430020 ORG AOP200+2*(0-JTEND+JTSICTL) RESTORE STANDARD 10450020 DC AL2(SICTL-AOP200) ICTL 10470020 ORG , REORG TO THE END OF TABLE 10500020 SPACE 10530020 AOP300 GOIF JERR,OFF=AOP310 IS THERE AN ERROR IN RECORD 10570020 LA R10,ERROUT YES, LOAD PRINT INDEX 10640020 JCALL OUTPUT GO PRINT ERROR FLAG IN TEXT 10710020 AOP310 JRETURN , EXIT 10780020 AOP350 GOIF JTEND,NE=AOP375 IS THIS AN END STATEMENT 10800020 MVC ENDSTMNO,STMTN YES, SAVE THE STATEMENT NUMBER 10820020 AOP375 GOIF JTREPRO,NE=AOP400 IS THIS A REPRO CARD 10821020 GOIF JPSOP,OFF=AOP400 IS STMT A PSEUDO OP @AY13962 10821406 GOIF REPCARD,ON=REPRO0 IS IT EXPECTED GO PRINT 10822020 SET REPCARD,ON NEXT STATEMENT TO BE IN 1 LINE 10823020 AOP400 MVI LHFLGS,DNTPLH SET PRINT FLAGS 10850020 AOP405 LA R10,LSTOUT LOAD PRINT INDEX 10920020 AOP410 JCALL OUTPUT GO PRINT 10990020 B AOP300 EXIT PHASE 11060020 JEXTRN (X5P01=OUTPUT) PRINT PUNCH ENTRY POINT 11130020 AOP440 LA R10,LSTOUT GET BRANCH DISPLACEMENT PRINT 11200020 OI LHFLGS,DNTPLH TURN ON DON'T PRINT LEFT HALF 11270020 AOP450 JCALL OUTPUT CALL OUT PUT ROUTINE 11340020 BR R6 RETURN TO CALLING ROUTINE 11410020 EJECT 11480020 AOP500 L R14,OPNADR POINT TO OPERAND BEGINNING 11550020 L R15,OPNEND POINT TO OPERAND END 11620020 LA R11,X5ATEMP POINT BUILD AREA WORK REGISTER 11690020 LR R4,R11 REMEMBER WHERE WE STARTED AT 11760020 GOIF D0(R14),JQUOTE,NE=AOP590 NO LEADING QUOTE 11830020 AOP540 LA R14,D1(,R14) STEP WORK REGISTER 11900020 CR R14,R15 IS OPERAND COMPLETE 11970020 BNL AOP595 YES, GO LOG ERROR 12040020 GOIF D0(R14),JQUOTE,EQ=AOP560 CHECK FOR QUOTE 12110020 GOIF D0(R14),JAMPER,EQ=AOP560 CHECK FOR AMPERSAND 12180020 AOP550 MVC D0(D1,R11),D0(R14) MOVE CHARACTER TO OUTPUT 12250020 LA R11,D1(,R11) STEP OUTPUT POINTER 12320020 B AOP540 GO STEP TO NEXT CHARACTER 12390020 AOP560 CLC D0(D1,R14),D1(R14) IS AMPERSAND OR QUOTE A DUPLICT 12460020 LA R14,D1(,R14) INCREMENT POINTER 12530020 BE AOP550 GO OUTPUT CHARACTER 12600020 BCTR R14,0 DECREMENT POINTER 12670020 GOIF D0(R14),JAMPER,EQ=AOP580 UNPAIRES AMPERSAND 12740020 CLI D1(R14),JBLANK DO BLANK FOLLOW TERM QUOTE 12780020 BNE AOP585 IF NOT ERROR 12820020 SR R11,R4 GET LENGTH OF FIELD 12880020 BR R6 RETURN TO CALLING ROUTINE 12950020 JEXTRN (X5L01=LOGERR) 13020020 AOP580 SET TPTEXT,ON INDICATE BAD OPERAND 13090020 ST R14,ERRPTR IT IS ALSO ERROR POINTER 13160020 X5ERRL 176,CLMPTR UNPAIRED AMPERSAND 13230020 BR R6 RETURN TO CALLER 13300020 AOP585 LA R14,D1(R14) POINT TO CHR AFTER QUOT OX00219 13350020 ST R14,ERRPTR SAVE POINTER FOR LOGGING 13400020 SET TPTEXT,ON INDICATE BAD OPERAND 13450020 X5ERRL 185,CLMPTR BLANK DO NOT FOLLOW TERM QUOTE 13500020 BR R6 RETURN TO CALLER 13550020 AOP590 X5ERRL 175,0 NO LEADING QUOTE 13650020 SET TPTEXT,ON INDICATE BAD OPERAND 13700020 BR R6 RETURN TO CALLER 13720020 AOP595 X5ERRL 240,0 ENDING QUOTE MISSING, LOG IT 13790020 SET TPTEXT,ON INDICATE BAD OPERAND 13840020 BR R6 RETURN TO CALLER 14000020 SPACE 2 14070020 * * 14140020 * COMMON CALL OF EVAL. * 14210020 * * 14280020 AOP600 JCALL EVAL GO EVALUATE EXPRESSION 14350020 BR R6 RETURN TO CALLING LOCATION 14420020 JEXTRN (X5V01=EVAL) DEFINITION OF EVAL 14490020 SPACE 4 14500020 * 14510020 * REPLACE THE USER ICTL WITH STANDARD ICTL IN CASE WE HAVE THE SYSMAC 14520020 * OPTION AND ARE GOING TO PRINT OUT MACRO DEFINITIONS 14530020 * 14540020 SICTL MVC JBGNCL(L'JBGNCL*3),=Y(1,16,71) RESTORE STD ICTL 14550020 B AOP310 RETURN TO GET NEXT RECORD 14560020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -14570020 - ''END'' STATEMENT PROCESSOR' 14620020 * * 14630020 * END STATEMENT PROCESSING 14700020 * 14770020 END100 L R10,OPNADR GET OPERAND POINTER 14840020 MVC ENDSTMNO,STMTN SAVE END STATEMENT NUMBER 14870020 GOIF OPNPRS,OFF=END450 OPERAND PRESENT ? 14910020 GOIF D0(R10),JCOMMA,EQ=END400 1ST OPERAND OMITTED ? 14980020 SPACE 15260020 END150 BAL R6,AOP600 GO EVALUATE OPERAND 15330020 BNH END350 ERROR IF NOT RELOCATABLE 15400020 CH R10,=H'4096' IS ESDID VALID? 15540020 BNL END350 NO,GO LOG ERROR 15610020 ST R11,LCTRSAV PUT VALUE IN WORK AREA 15660020 TM LCTRSAV+D3,D1 IS IT EVEN 15670020 BNZ END600 ERROR IF NOT 15672020 ST R11,LOCATN STORE VALUE FOR PRINTING 15680020 ST R11,JENTRYPT SAVE ENTRY POINT FOR END CARD 15750020 STH R10,JESDID SAVE ENTRY POINT ESD 15820020 NI JESDID,X'F7' CLEAR FLAGBIT 5 @YA06117 15830003 SET JESDCHK,ON INDICATE ESD INF FOR END CARD 15870020 END200 GOIF D0(R14),JBLANK,EQ=END250 WAS DELIMIT A BLANK-OK OX01760 15890003 GOIF D1(R14),JLPARN,EQ=END210 IS DELIMITER A PAREN OX01760 15892003 GOIF D1(R14),JBLANK,EQ=END250 2ND OPERAND OMITTED ? OX01760 15900003 B END230 ERROR IN 2ND IDR ITEM IF NONE 15902020 END210 MVI JIDR,X'02' INDICATE A 2ND IDR ITEM 15904020 SR R6,R6 15910020 AH R14,=H'1' 15912020 END225 AH R14,=H'1' COUNT COLUMN POINTER 15920020 GOIF D0(R14),JCOMMA,EQ=END235 SUBITEMS DEL BY COMMA 15930020 AH R6,=H'1' COUNT CHAR. IN PID ORDER NUMBER 15932820 IC R9,D0(R14) MOVE CHAR TO IDR SAVE LOC 15932920 STC R9,JIDR+D19(R6) 15933020 CH R6,=H'10' MAX 10 CHARACTERS ALLOWED 15933120 BNH END225 GET NEXT CHAR IF MORE ALLOWED 15938120 END230 X5ERRL 254,CLMPTR LOG ERR IN 2ND IDR ITEM 15942020 CLI JIDR,X'02' IS FLAG BYTE SET TO 2 15942420 BNE END250 BRANCH IF NOT 15942820 MVI JIDR,X'01' RESET IT TO ONE 15943220 MVI JIDR+D20,X'2F' RESET 2ND IDR PART OF JIDR 15943620 MVC JIDR+D21(D19),JIDR+D20 TO BLANKS 15943720 B END250 15943820 END235 CH R6,=H'10' WAS THERE 10 CHARACTERS 15944020 BNL END240 YES 15951020 LA R6,D1(R6) STEP UP INDEX 15958020 IC R9,=X'2F' NO - PAD WITH BLANKS 15965020 STC R9,JIDR+D19(R6) 15972020 B END235 CHECK AGAIN 15979020 END240 MVC JIDR+D30(D4),D1(R14) MOVE 2ND SUBITEM TO SAVE LOC 15986020 MVC JIDR+D31+D3(D5),D6(R14) MOVE 3RD SUBITEM TO SAVE LOC 15993020 GOIF D11(R14),JRPARN,NE=END230 IS DELIM A PAREN 16000020 END250 SR R10,R10 SET PRINT ROUTINE INDEX 16007020 BAL R6,AOP450 GO PRINT END 16014020 GOIF JERR,OFF=END300 IF NO ERROR,CHECK LITERALS 16030020 LA R10,ERROUT YES, SET *** ERROR *** INDEX 16100020 JCALL OUTPUT GO PRINT IT 16170020 END300 LH R1,LITPID GET LITERAL POOL ID 16240020 GOIF JSYSGEN,OFF=AOP310 EXIT IF X4 NOT LOADED 16270020 LA R1,D1(R1) INCREMENT BY 1 16310020 STH R1,LITPID SAVE IT 16380020 L R1,SYMXRF GET SYMBOL XREFED OX02675 16450031 SR R2,R2 CLEAR R2 16520020 IC R2,SYMCNT GET SYMBOL COUNT 16590020 SR R2,R1 GET REMAINING SYMBOLS 16660020 BNH END345 BRANCH IF NOT HIGH 16730020 END325 LH R10,JINFILE GET JINFILE INDEX 16800020 JGETL FILE=(R10) GET SYMBOL 16870020 BCT R2,END325 FINISH FLUSHING? 16940020 SPACE 17010020 END345 MVI SYMCNT,D0 ZEROED OUT SYMBOL COUNT 17080020 B LTO200 GO CHECK LITERALS 17150020 END350 OI LHFLGS,DNTPLH TURN ON DON'T PRINT LEFT HALF 17220020 X5ERRL 217,CLMPTR RELOCATEBILITY ERROR 17240020 B END200 GO CHECK 2ND OPERAND 17260020 END400 OI LHFLGS,DNTPLH TURN ON DON'T PRINT LEFT HALF 17290020 LR R14,R10 17300020 B END200 GO PRINT END 17360020 END450 OI LHFLGS,DNTPLH SET DONT PRINT LEFT HALF 17370020 B END250 GO PRINT END STATEMENT 17380020 END500 ST R14,ERRPTR SAVE COLUMN PTR FOR LOGGING 17570020 X5ERRL 185,CLMPTR,END400 INVALID DELIMITER ERROR 17640020 SPACE 17690020 END600 X5ERRL 220,CLMPTR,END400 LOG ALIGNMENT ERROR 17700020 SPACE 3 17702020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -17760020 - ''DXD'' STATEMENT PROCESSOR' 17770020 DXD100 SET DXDSW,ON INDICATE DXD FOR DCEVAL 18060020 BAL R6,COMCALL GO GET GOOD OPERAND NUMBER 18130020 MVC ELCTR+D4(4),ELCTR SAVE CURR. LOCTR 18200020 MVC ELCTR+D8(2),EESDI SAVE CURR. ESDID 18270020 XC ELCTR,ELCTR CLEAR LOCTR 18340020 XC EESDI,EESDI CLEAR ESDID 18410020 L R10,OPNADR POINT TO OPERAND 18480020 JCALL DCEVAL GO EVALUATE 18550020 SET DCMOP,ON TURN ON MOP-UP SWITCH 18620020 LA R10,DC0OUT SET PRINT INDEX 18690020 JCALL OUTPUT CALL OUTPUT 18760020 SET DXDSW,OFF TURN OF SWITCH 18830020 MVC ELCTR,ELCTR+D4 RESTORE CURR. LOCTR 18900020 MVC EESDI,ELCTR+D8 RESTORE CURR. ESDID 18970020 B AOP300 EXIT 19040020 SPACE 19050020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -19090020 - COMMON ROUTINE FOR DC, DS AND DXD PROCESSORS' 19100020 COMCALL L R11,SYMDEF GET SYMBOL FILE RECORD PTR 19180020 GOIF NAMPRS,ON=COMCALL2 SKIP IF NAME PRESENT 19200020 GOIF DXDSW,OFF=COMCALL1 NOT DXD - GET RECORD 19220020 SR R10,R10 CLEAR REG 19240020 GOIF JNMERR,ON=COMCALL3 DO NOT LOG NAME ERR AGAIN 19250020 X5ERRL 163,0,COMCALL3 INVALID DXD NAME- NO NAME 19260020 COMCALL1 LH R10,JINFILE GET INPUT FILE NO 19320020 JGETL FILE=(R10) GET SYMBOL FILE RECORD 19390020 SPACE 19530020 COMCALL2 SR R10,R10 CLEAR REG 19600020 IC R10,RFLGA GET GOOD OPERAND COUNT 19670020 COMCALL3 STH R10,LCTRSAV+D8 SAVE FOR DCEVAL USE 19740020 SET (DCSWH,DCCOMP,DCMOP,DCSTRT),OFF RESET DCFLGS FOR SAFE 19790020 BR R6 RETURN TO CALLER 19810020 SPACE 3 19880020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -19930020 - ''EQU'' STATEMENT PROCESSOR' 19940020 EQU100 LH R12,JTNMP COMPUTE ADDR TO OY06130 19950031 AR R12,R5 NAME FIELD OY06130 19960031 CLI D0(R12),X'00' TST FOR NO NAME OY06130 19990031 BNE EQU150 OX05796 20040031 X5ERRL 163,0,AOP400 OX05796 20090031 EQU150 L R11,SYMDEF GET NAME RECORD PTR OX05796 20230031 MVC ADDRS2,RLCTR MOVE SYMBOL VALUE 20300020 SET PRDEFREQ,ON TURN PRIORDEF REQ BIT ON 20440020 L R10,OPNADR GET OPERAND POINTER 20510020 IC R6,RFLGB SAVE FLAGS 20520020 GOIF NAMPRS,ON=EQU250 ANY NAME 20540020 X5ERRL 163,0 LOG MISSING NAME ERROR 20570020 SPACE 20790020 EQU250 LH R12,JTOPP COMPUTE ADDR TO OY06130 20800031 AR R12,R5 OPERAND FIELD OY06130 20810031 CLI D0(R12),X'00' TST FOR NO OPERAND OY06130 20840031 BNE EQU275 OX05796 20850031 X5ERRL 177,0,AOP400 OX05796 20852031 EQU275 JCALL EVAL GO EVALUATE OX05796 20860031 BC CMPX,EQUER1 IS EQU COMPLEXLY RELOCATABLE 20930020 BC ERRX,EQU300 BRANCH IF SYNTAX ERROR 21000020 GOIF D0(R14),JBLANK,EQ=EQU225 OK IF BLANK 21080020 GOIF D0(R14),JCOMMA,NE=EQUER3 ERROR IF NOT COMMA 21090020 SET EQUOPR,ON MORE THAN 1 OPR IN EQU @AZ07356 21100006 EQU225 ST R11,ADDRS2 SAVE VALUE IN LEFTHLF 21140020 EQU200 EX R6,EQUCPR CHECK FOR CIRCULAR DEFINTION 21170020 BE EQU300 NO 21200020 X5ERRL 237,0 CIRCULAR DEFINITION 21220020 EQU300 SET PRDEFREQ,OFF RESET PRIOR DEFINITION SWITCH 21240020 SET EOUBIT,ON INDICATE EQU 21290020 GOIF EQUOPR,OFF=AOP405 BR IF NO 2ND OPER @AZ07356 21340006 GOIF D1(R14),JCOMMA,EQ=EQU800 BR IF 2ND OPER OMITTED @AZ07356 21344006 LA R10,D1(R14) BUMP POINTER @AZ07356 21346006 JCALL EVAL GO EVAL 2ND OPER @AZ07356 21348006 BC (X'F'-CMPX),EQU400 BR IF NOT COMPLEX RELO @AZ07356 21348406 X5ERRL 213,CLMPTR ERR: COMPLEXLY RELOC @AZ07356 21348806 EQU400 GOIF D0(R14),JBLANK,EQ=EQU650 BR IF 3RD OPER @AZ07356 21349206 GOIF D0(R14),JCOMMA,NE=EQU650 BR IF 3RD OPER INVALID @AZ07356 21349606 LA R10,D1(R14) BUMP POINTER @AZ07356 21349706 EQU500 JCALL EVAL GO EVAL 3RD OPER @AZ07356 21349806 BC (X'F'-CMPX),EQU600 BR IF NOT COMPLEX RELO @AZ07356 21349906 X5ERRL 213,CLMPTR ERR: COMPLEX RELOC @AZ07356 21373206 EQU600 GOIF D0(R14),JBLANK,NE=EQU650 BR IF INVALID DELIM @AZ07356 21383206 EQU650 SET EQUOPR,OFF RESET FOR NEXT STMT @AZ07356 21393206 B AOP405 NO EXIT 21396706 EQU800 LA R10,D2(R14) BUMP POINTER @AZ07356 21416706 GOIF D2(R14),JBLANK,EQ=EQU650 BR IF 3RD OPER OMITTED @AZ07356 21418706 B EQU500 GO EVAL 3RD OPER @AZ07356 21419106 EQUER1 CLI EVALSW1,D0 ANY SYNTACTIC ERROR? 21420020 BNE EQU300 YES, EXIT OX00220 21490020 X5ERRL 213,CLMPTR,EQU300 COMPLEXLY RELOCATABLE OX00220 21560020 EQUER3 X5ERRL 216,CLMPTR,EQU200 ILLEGAL OPERAND FORMAT 21700020 EQUCPR CLI EVALSW1,*-* EXECUTED CIRCULAR DEF CHEK 21720020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -21750020 - ''ORG'' STATEMENT PROCESSOR' 21760020 ORG100 L R11,SYMDEF GET SYMBOL DEFINITION POINTER 22050020 GOIF NAMPRS,OFF=ORG200 IS STATEMENT NAMED 22120020 MVC LOCATN,RLCTR MOVE IN DEFINITION LOCATION 22190020 B ORG300 GO GET ORG VALUE 22260020 ORG200 MVC LOCATN,ELCTR DATA, GET LOCATION COUNTER 22330020 ORG300 LH R10,JINFILE POINT TO INPUT FILE 22400020 JGETL FILE=(R10) GET ORG VALUE 22470020 MVC ADDRS2(D4),RLCTR MOVE ORGED VALUE TO PRINT 22540020 GOIF OPNPRS,OFF=ORG700 BRANCH IF OPERAND NOT PRESENT 22610020 L R10,OPNADR GET OPERAND POINTER 22680020 CLC D0(2,R10),=AL1(JCOMMA,JBLANK) IS OPERAND MISSING? 22750020 BE ORG700 BRANCH IF MISSING 22820020 SET PRDEFREQ,ON TURN ON PRIORDEF REQ BIT 22890020 MVC DWORD2(1),RFLGB SAVE FLAG BYTE 22960020 JCALL EVAL EVALUATE OPERAND FOR ERRORS 23030020 BC 8,ORGERR1 ORG VALUE ABSOLUTE 23100020 BC 4,ORG600 IF ERROR BRANCH 23170020 BC 1,ORG400 SYNTACTIC ERRORS 23240020 CLI D0(R14),JBLANK IS DELIMITER BLANK? 23310020 BNE ORGERR2 BRANCH IF NOT BLANK 23380020 CH R10,EESDI SAME ESDID? 23450020 BNE ORGERR3 ESDID NOT ALIKE 23520020 GOIF WRPFLG,ON=ORG500 DO NOT LOC OVERFLOW AGAIN 23570020 C R11,=A(X'FFFFFF') DID LCTR WRAPPED? 23590020 BH ORGERR5 YES, GO LOG ERROR 23660020 ORG500 TM DWORD2,BIT0 ANY ERROR IN ORG OPERAND ? 23730020 BNO ORGERR4 YES,GO LOG ERROR 23800020 ORG700 MVC ELCTR,ADDRS2 PUT IN NEW LOCTR VALUE 23870020 ORG400 IC R4,EESDI SAVE DSECT INDICATOR 23940020 MVI EESDI,BIT1+BIT2 INDICATE DSECT OR COM 24010020 SR R10,R10 SET PRINT INDEX 24080020 SET EOUBIT,ON INDICATE ORG 24150020 BAL R6,AOP450 GO PRINT RECORD 24220020 STC R4,EESDI RESTORE ESD 24290020 SET PRDEFREQ,OFF RESET PRDEFREQ BIT 24360020 B AOP300 EXIT 24430020 ORGERR1 X5ERRL 174,0,ORG400 ORG VALUE ABSOLUTE 24500020 ORGERR2 X5ERRL 185,CLMPTR,ORG700 INCORRECT DELIMITER 24570020 ORGERR3 X5ERRL 173,0,ORG400 ESDID NOT ALIKE 24640020 ORGERR4 X5ERRL 172,0,ORG400 ORG VALUE NEGATIVE 24710020 ORG600 CLI EVALSW1,D0 ANY NON-SYSTACTIC ERROR? 24780020 BNE ORG400 YES,BRANCH TO EXIT 24850020 X5ERRL 213,CLMPTR,ORG400 LOG ERROR THEN EXIT 24920020 ORGERR5 SET WRPFLG,ON INDICATE WE LOGGED THE ERROR 24960020 X5ERRL 246,0,ORG700 INVALID ORG OPERAND 25000020 SPACE 3 25060020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -25110020 - ''CNOP'' STATEMENT PROCESSOR' 25120020 CNOP00 LA R2,D1 GET MAXIMUM ALIGNMENT 25340020 EX R2,ALNTST IS ALIGNMENT NECESSARY 25410020 BZ CNP100 NO, SKIP 25480020 JCALL ALIGN GO ALIGN CNOP 25550020 OI LHFLGS,ENTALN+D1 SET OUTPUT LENGTH AND FLAGS 25620020 SR R10,R10 SET OUTPUT INDEX 25690020 JCALL OUTPUT GO PRINT ALIGNMENT 25760020 CNP100 GOIF OPNPRS,OFF=CNPER7 ERROR IF NO OPERAND 25830020 L R10,OPNADR POINT TO OPERAND 25860020 MVC LOCATN,ELCTR MOVE LOCATION TO LEFT HALF 25900020 SET PRDEFREQ,ON TURN ON PRIORDEF REQ BIT 25970020 JCALL EVAL CALL EVALUATION ROUTINE 26040020 BNZ CNPER1 MUST BE ABSOLUTE 26110020 SET PRDEFREQ,OFF TURN OFF PRIOEDEF REQ BIT 26180020 GOIF (R11),NEG=CNPER5 ERROR IF NEGATIVE 26250020 CH R11,=H'8' IS VALUE VALID? 26320020 BNL CNPER5 VALUE ERROR IN OPERAND 1 26390020 EX R11,BITTST IS OPERAND VALUE ODD 26410020 BNZ CNPER5 YES, GO LOG ERROR 26430020 CNP150 LR R4,R11 SAVE FIRST OPERAND VALUE 26460020 GOIF D0(R14),JCOMMA,NE=CNPER2 CHECK SYNTAX - MUST BE A COMMA 26530020 LA R10,D1(,R14) INITIALIZE EVAL POINTER 26600020 SET PRDEFREQ,ON TURN PRIORDEF REQ BIT 26670020 JCALL EVAL GO EVALUATE SECOND OPERAND 26740020 BNZ CNPER8 MUST BE ABSOLUTE 26810020 SET PRDEFREQ,OFF TURN OFF PRIORDEF REQ BIT 26880020 CH R11,=H'8' IS SECOND OPERAND AN 8 26950020 BE CNP200 YES, GO CHECK FIRST OPERAND 27020020 CH R11,=H'4' IS IT 4 27090020 BNE CNPER4 NO, GO LOG ERROR 27160020 CNP200 CR R4,R11 IS OPERAND 1 NOT LESS THAN 2ND 27230020 BNL CNPER6 YES, GO LOG ERROR 27440020 GOIF INVCNOP,OFF=CNP250 DO ALIGN IF CNOP OPERAND OK 27470020 SET INVCNOP,OFF RESET BAD OPERAN INDICATOR 27490020 B AOP400 27510020 CNP250 LNR R2,R11 COMPLEMENT 2ND OPERAND VALUE 27530020 L R1,ELCTR GET LOCATION COUNTER 27580020 NR R1,R2 ALIGN IT TO PREVIOUS BOUNDARY 27650020 AR R1,R4 ADD FIRST OPERAND BOUNDRY 27720020 C R1,ELCTR HAS ALIGNMENT REQUESTED CORRECT 27790020 BNL CNP300 YES, ALIGNMENT COMPLETE 27860020 AR R1,R11 NO, ADD SECOND OPERAND VALUE 27930020 CNP300 S R1,ELCTR CALCULATE CNOP LENGTH 28000020 EX R1,ORLEN INDICATE OUTPUT LENGTH 28070020 ST R1,LOCLEN SAVE CNOP LENGTH 28140020 JCALL LOCUPD GO UPDATE LOCATION COUNTER 28210020 MVC DCDATA(D6),=X'070007000700' MOVE IN PAD BYTES 28280020 SET ENTDC,ON SET PRINT FLAG 28350020 LA R10,DC0OUT GET PRINT INDEX 28420020 JCALL OUTPUT CALL PRINT 28490020 SET DCMOP,ON SET MOP-UP SWITCH ON 28560020 LA R10,DC0OUT GET DCPRINT INDEX 28630020 JCALL OUTPUT CALL PRINT 28700020 B AOP300 GO CHECK ERROR FLAG 28770020 SPACE 28840020 CNPER1 SET PRDEFREQ,OFF TURN PRIORDEF REQ BIT OFF 28910020 SET INVCNOP,ON INDICATE ERROR IN CNOP OPERAND 28940020 X5ERRL 179,CLMPTR,CNP150 OPERAND NOT ABSOLUTE 28980020 SPACE 29050020 CNPER2 ST R14,ERRPTR SET COLUMN POINTER 29120020 SET INVCNOP,OFF RESET CNOP OPERAND ERROR IND 29150020 X5ERRL 178,CLMPTR,AOP400 COMMA EXPECTED 29190020 SPACE 29260020 CNPER4 SET INVCNOP,ON INDICATE ERROR IN CNOP OPERAND 29330020 X5ERRL 180,CLMPTR,CNP200 VALUE ERROR- SHOULD BE 4 OR 8 29360020 SPACE 29400020 CNPER5 SET INVCNOP,ON INDICATE ERROR IN CNOP OPERAND 29470020 X5ERRL 181,CLMPTR,CNP150 VALUE ERROR OPERAND IS ODD 29500020 SPACE 29540020 CNPER6 SET INVCNOP,OFF RESET CNOP OPERAND ERROR IND 29610020 X5ERRL 182,0,AOP400 OPERAND 2 LARGER THAN 1 29615020 CNPER7 SET INVCNOP,OFF RESET CNOP OPERAND ERROR IND 29620020 X5ERRL 177,0,AOP400 OPERAND REQUIRED 29625020 CNPER8 SET PRDEFREQ,OFF TURN PRIORDEF REQ BIT OFF 29630020 X5ERRL 179,CLMPTR,AOP400 OPERAND NOT ABSOLUTE 29640020 BITTST TM =X'01',D0 EXECUTEC LOW BIT TEST 29680020 SPACE 3 29750020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -29800020 - ''CCW'' STATEMENT PROCESSOR' 29810020 CCW100 LA R2,D7 GET ALIGNMENT CHECK BITS 30100020 EX R2,ALNTST CHECK ALIGNMENT 30170020 BZ CCW150 NO ALIGNMENT REQUIRED 30240020 JCALL ALIGN CALL ALIGNMENT ROUTINE 30310020 L R2,FULLWD GET ALIGNMENT LENGTH 30380020 EX R2,ORLEN OR LENGTH INTO OUTPUT DATA 30450020 SET ENTALN,ON TURN ON ALIGNMENT INDICATOR 30520020 SR R10,R10 SET PRINT INDEX 30590020 JCALL OUTPUT GO PRINT LENGTH 30660020 CCW150 MVC LOCATN,ELCTR MOVE IN ALIGNED LOCATION CTR 30730020 XC DCDATA(D8),DCDATA CLEAR OBJECT CODE 30800020 OI LHFLGS,D8+ENTDC INDICATE LENGTH 31080020 GOIF OPNPRS,OFF=CCWER1 ERROR IF NO OPERAND 31130020 L R10,OPNADR GET OPERAND POINTER 31150020 JCALL EVAL EVALUATE OPERAND 31220020 BNZ CCWER2 GO LOG ERROR IF OPERAND BAD 31290020 CH R11,=H'255' IS VALUE TOO LARGE 31360020 BH CCWER3 GO LOG ERROR IF IT IS 31430020 LTR R11,R11 TEST FOR NEGATIVE VALUE 31500020 BM CCWER15 ERROR IF NEGATIVE 31570020 CCW200 STC R11,DCDATA SAVE VALUE FOR OUTPUT 31640020 CCW225 GOIF D0(R14),JCOMMA,NE=CCWER4 IS SYNTAX OK 31710020 LA R10,D1(,R14) STEP PAST COMMA 31780020 JCALL EVAL GO EVALUATE SECOND OPERAND 31850020 ST R11,DWORD2 SAVE VALUE 31920020 MVC DCDATA+D1(D3),DWORD2+D1 MOVE VALUE TO OUTPUT AREA 31990020 BC ABSX,CCW250 SKIP RLD IF ABSOLUTE 32060020 BC ERRX,CCW250 SKIP RLD IF FATAL ERROR 32110020 LR R4,R14 SAVE OPERAND SCAN POINTER 32130020 L R1,LOCATN GET CCW LOCATION 32200020 LA R1,D1(,R1) STEP FOR RLD LOCATION 32270020 ST R1,DWORD1 SAVE FOR RLD OUTPUT 32340020 MVI DWORD1,D0 SET RLD TYPE FLAG 32410020 LA R1,D3 GET LENGTH 32480020 STH R1,DWORD2 SAVE FOR RLD OUTPUT 32550020 JCALL RLDOUT GO LOG RLD 32620020 LR R14,R4 RESTORE OPERAND SCAN POINTER 32690020 CCW250 L R11,DWORD2 GET VALUE BACK 32760020 GOIF (R11),NEG=CCWER14 ERROR IF NEGATIVE 32830020 C R11,=A(X'FFFFFF') MAXIMUM VALUE 32900020 BH CCWER14 GO LOG ERROR 32970020 CCW275 GOIF D0(R14),JCOMMA,NE=CCWER6 COMMA EXPECTED 33040020 LA R10,D1(,R14) STEP PAST COMMA 33110020 JCALL EVAL GO EVALUATE THIRD OPERAND 33180020 BNZ CCWER7 MUST BE ABSOLUTE 33250020 CH R11,=H'255' IS VALUE TOO BIG 33460020 BH CCWER9 YES, GO LOG ERROR 33530020 CCW300 STC R11,DCDATA+D4 SAVE VALUE FOR OUTPUT 33600020 TM DCDATA+D4,BIT6+BIT7 IS BIT 38 AND 39 ZERO 33670020 BNZ CCWER8 NO - ERROR 33720020 CCW325 GOIF D0(R14),JCOMMA,NE=CCWER10 IS SYNTAX STILL OK 33730020 LA R10,D1(,R14) STEP PAST COMMA 33740020 JCALL EVAL GO EMULATE FORUTH OPERAND 33810020 BNZ CCWER11 MUST BE ABSOLUTE 33880020 C R11,=F'65535' VALUE MUST FIT IN TWO BYTES 33950020 BH CCWER12 LOG ERRER IF TOO LARGE 34020020 CCW400 STH R11,DCDATA+D6 SAVE VALUE 34090020 CCW425 GOIF D0(R14),JBLANK,NE=CCWER13 IS SYSNTAX STILL OK 34160020 SPACE 34280020 CCW500 LA R10,D8 SET ALIGNMENT 34290020 ST R10,LOCLEN SAVE FOR LOCUPD 34292020 JCALL LOCUPD CALL LOCATION UPDATE 34294020 LA R10,DC0OUT SET PRINT INDEX 34295020 JCALL OUTPUT CALL PRINT ROUTINE 34296020 SET DCMOP,ON INDICATE MOP-UP 34297020 LA R10,DC0OUT SET PRINT INDEX 34298020 B AOP410 GO DO DC MOP-UP PRINT CALL 34299020 ALNTST TM ELCTR+D3,D0 EXECUTED ALIGNMENT TEST 34300020 ORLEN OI LHFLGS,D0 EXECUTED OR OF ALIGNMENT LENGTH 34370020 CCWER1 MVC ERRPTR,OPNADR SET COLUMN POINTER 34510020 X5ERRL 177,CLMPTR,CCW500 MISSING OPERAND 34580020 CCWER2 X5ERRL 179,CLMPTR,CCW500 OPERAND NOT ABSOLUTE 34650020 CCWER3 X5ERRL 183,CLMPTR,CCW225 INVALID RANGE 255 MAXIMUM 34720020 CCWER4 X5ERRL 178,CLMPTR,CCW500 COMMA EXPECTED 34790020 CCWER6 X5ERRL 178,CLMPTR,CCW500 COMMA EXPECTED 34860020 CCWER7 X5ERRL 179,CLMPTR,CCW325 OPERAND NOT ABSOLUTE 34930020 CCWER8 X5ERRL 244,CLMPTR,CCW325 BIT 38 AND 39 NOT SERP 34980020 CCWER9 X5ERRL 183,CLMPTR,CCW325 INVALID RANGE 255 MAXIMUM 35070020 CCWER10 X5ERRL 178,CLMPTR,CCW500 COMMA EXPECTED 35140020 CCWER11 X5ERRL 179,CLMPTR,CCW425 OPERAND NOT ABSOLUTE 35210020 CCWER12 X5ERRL 184,CLMPTR,CCW425 INVALID RANGE 65535 MAXIMUM 35280020 CCWER13 X5ERRL 185,CLMPTR,CCW500 INVALID DELIMITER 35350020 CCWER14 X5ERRL 241,CLMPTR,CCW275 INVALID RANGE X'FFFFFF' MAX 35420020 CCWER15 X5ERRL 243,CLMPTR,CCW500 CCW OPCODE NEGATIVE 35490020 SPACE 3 35560020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -35610020 - ''DC && DS'' STATEMENT - CALL DC EVAL' 35620020 * 35630020 * DC STATEMENT - CALL DC EVAL 35680020 * 35690020 DC0100 BAL R6,COMCALL GO GET GOOD OPERAND COUNT 35840020 L R10,OPNADR GET OPERAND ADDRESS 35910020 JCALL DCEVAL CALL DC EVALUATION 35980020 SET DCMOP,ON TURN MOP-UP SWITCH 36050020 LA R10,DC0OUT SET PRINT INDEX 36120020 JCALL OUTPUT GO COMPLETE DC OUTPUT 36190020 JEXTRN (X5D01=DCEVAL) DEFINE EXTERNAL SYMBOL 36260020 B AOP300 EXIT TO MAINLINE 36330020 SPACE 5 36400020 * 36470020 * DS STATEMENT - CALL DC EVAL 36540020 * 36610020 DS0100 SET DSSW,ON INDICATE ENTRY IS A DS 36680020 BAL R6,COMCALL GO GET GOOD OPERAND COUNT 36750020 L R10,OPNADR POINT TO OPERAND 36820020 JCALL DCEVAL CALL DC EVALUATION 36890020 SET DCMOP,ON SET MOP UP SWITCH ON 36960020 LA R10,DC0OUT LOAD PRINT INDEX 37030020 JCALL OUTPUT GO MOP UP DS 37100020 SET DSSW,OFF TURN OFF DS SWITCH 37170020 B AOP300 EXIT 37240020 SPACE 3 37310020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR- ASSEMBLY PHASE-37360020 - ''START, CSECT, DSECT && COM'' STATEMENT PROCESSOR' 37370020 START0 L R11,SYMDEF GET DATA POINTER 37375020 DSECT0 EQU START0 DEFINE DSECT ENTRY POINT 37380020 COM100 EQU START0 DEFINE COM ENTRY POINT 37430020 CSECT0 EQU START0 DEFINE CSECT ENTRY POINT 37440020 GOIF NAMPRS,ON=STR100 IS CONTROL SECTOIN NAMED 37660020 LH R10,JINFILE GET INPUT FILE NUMBER 37730020 JGETL FILE=(R10) GET RESOLUTION DATA 37800020 SPACE 37870020 STR100 GOIF JTSTART,NE=STR110 ARE WE PROCESSING START CARD? 37940020 TM RFLGB,BIT0 IS IT VALID? 38010020 BO STR110 BRANCH AROUND IF YES 38080020 X5ERRL 164,0 INVALID START CARD 38150020 SPACE 38220020 STR110 MVC ELCTR,RLCTR START LOCATION COUNTER 38290020 MVC EESDI,RESDI INITIALIZE ESD FOR THIS CSECT 38360020 MVC LOCATN,RLCTR MOVE VALUE TO LEFT HALF PRINT 38430020 CLC ELCTR,=A(X'FFFFFF') IS CSECT START LOC BELOW LIMIT 38480020 BNH AOP405 YES , GO PRINT AND EXIT 38490020 GOIF WRPFLG,ON=AOP405 GO PRINT IF ALREADY LOGGED 38500020 SET WRPFLG,ON INDICATE ERROR LOGGED 38550020 X5ERRL 246,0 LOG LOCATION COUNTER ERROR 38560020 B AOP405 GO PRINT AND EXIT 38570020 SPACE 3 38850020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -38900020 - ''ENTRY && EXTRN'' STATEMENT PROCESSOR' 38910020 ENTRY0 GOIF OPNPRS,OFF=ENXER1 IS OPERAND BLANK 39130020 EXTRN0 EQU ENTRY0 DEFINE EXTRN ERTRY POINT 39200020 L R4,OPNADR POINT TO THE OPERAND 39270020 ENX100 LR R1,R4 INITIALIZE SCAN REGISTER 39340020 ST R1,ERRPTR SAVE OPERAND PTR FOR LOGGING 39410020 GOIF D0(R1),JALFAMIN,LT=ENXER2 FIRST CHARACTER NON-NUMERIC 39480020 ENX200 GOIF D0(R1),JALFAMAX,GT=ENX300 IS CHARACTER LEGAL IN SYMBOL 39550020 LA R1,D1(,R1) STEP TO NEXT CHARACTER 39620020 B ENX200 CONTINUE SCAN 39690020 ENX300 GOIF D0(R1),JBLANK,EQ=ENX325 WAS DELIMITER A BLANK 39720020 GOIF D0(R1),JCOMMA,NE=ENXER2 NO, WAS DELIMITER A COMMA 39750020 ENX325 SR R1,R4 GET LENGTH OF SYMBOL 39780020 BZ ENXER2 SHOULD NOT BE ZERO 39840020 CH R1,=H'8' IS SYMBOL 8 CHARACTERS OR LESS 39900020 BH ENXER4 NO, GO LOG ERROR 39970020 AR R4,R1 POINT TO DELIMITER 40040020 LH R10,JINFILE POINT TO INPUT FILE 40110020 JGETL FILE=(R10) GET NEXT RECORD 40180020 GOIF JTENTRY,EQ=ENX400 IS ENTRY AN ENTRY 40250020 LA R2,BASE INDICATE BASE FOR XREF 40320020 GOIF PRIORDEF,OFF=ENX350 IF NOT DUPLICATE BRANCH AROUND 40390020 ST R11,ERRPTR STORE OPERAND POINTER 40460020 X5ERRL 196,DTAPTR LOG DUPLICATE NAME ERROR 40530020 LA R2,DUPL INDICATE DUP FOR XREF 40600020 SPACE 40670020 ENX350 JCALL XREF GO MAKE XREF 40740020 B ENX500 SKIP ENTRY ERROR CHECKING 40810020 ENX400 LA R2,REF INDICATE REFERENCE FOR XREF 40880020 JCALL XREF GO MAKE XREF FOR ENTRY 40950020 TM RFLGB,BIT2 VALID ENTRY? 41020020 BZ ENXER6 BRANCH IF ENTRY INVALID 41090020 ENX500 GOIF D0(R4),JBLANK,EQ=AOP400 WAS DELIMITER A BLANK 41160020 LA R4,D1(,R4) YES, STEP PAST COMMA 41300020 B ENX100 CONTINUE SCAN 41370020 SPACE 41440020 ENXER1 X5ERRL 177,0,AOP400 MISSING OPERAND 41510020 SPACE 41580020 ENXER2 X5ERRL 186,CLMPTR,AOP400 INVALID SYMBOL 41680020 SPACE 41790020 ENXER4 X5ERRL 187,CLMPTR,AOP400 INVALID SYMBOL - TOO LONG 41860020 SPACE 41930020 ENXER6 X5ERRL 189,0,ENX500 LOG ENTRY ERROR 42000020 SPACE 42070020 SPACE 3 42210020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -42260020 - ''CXD'' STATEMENT PROCESSOR' 42270020 CXD100 LA R2,D3 GET MAXIMUM ALIGNMENT 42490020 EX R2,ALNTST DO WE NEED TO ALIGN LOCATION 42560020 BZ CXD200 NO, CONTINUE CXD PROCESSING 42630020 GOIF JALGN,OFF=CXD200 DON'T ALIGN IF NOALIGN OPTION 42660020 JCALL ALIGN GO DETERMINE ALIGNMENT 42700020 L R2,FULLWD SAVE ALIGNMENT LENGTH 42770020 EX R2,ORLEN INDICATE OUTPUT LENGTH 42840020 SET ENTALN,ON INDICATE ALIGNMENT 42910020 SR R10,R10 LOAD OUTPUT INDEX 42980020 JCALL OUTPUT GO OUTPUT ALIGNMENT 43050020 CXD200 OI LHFLGS,ENTDC+D4 SET LENGTH AND PRINT FLAGS 43120020 MVC LOCATN,ELCTR MOVE LOCATION COUNTER TO PRINT 43190020 LA R1,D4 GET LENGTH OF DXD 43260020 ST R1,LOCLEN SAVE LENGTH 43330020 STH R1,DWORD2 SAVE CXD LENGTH 43400020 JCALL LOCUPD UPDATE LOCATION COUNTER 43470020 TM EESDI,BIT1+BIT2+BIT3 ARE WE IN DSECT OR COMMON 43540020 BNZ AOP405 BRANCH IF YES 43610020 MVC DWORD1+D1(D3),LOCATN+D1 MOVE CXD LOCATION FOR OUTPUT 43680020 MVI DWORD1,BIT2+BIT3 SET CXD FLAGS 43750020 MVC RLIST,EESDI POSITION AND RELOCATION ID SAME 43820020 MVI RELOCTR,D1 INDICATE ONLY 1 ESDID. 43890020 JCALL RLDOUT GO MAKE RLD ENTRY 43920020 XC D8(D2,R11),D8(R11) SET RELID TO ZERO 43960020 B AOP405 GO PRINT AND EXIT 44030020 SPACE 3 44100020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -44150020 - ''LTORG'' STATEMENT PROCESSOR' 44160020 LTORG0 LH R1,LITPID GET POOL ID 44450020 LA R1,D1(,R1) ADD 1 44520020 STH R1,LITPID STORE NEW POOL ID 44590020 LTO050 LA R2,D7 GET ALIGNMENT FACTOR 44660020 EX R2,ALNTST IS ALIGNMENT NECESSARY 44730020 BZ LTO100 NO, SKIP ALIGNMENT 44800020 GOIF JALGN,OFF=LTO100 DON'T ALIGN IF NOALIGN OPTION 44830020 JCALL ALIGN YES, GO ALIGN LOCATION CTR 44870020 SPACE 45850020 LTO100 MVC LOCATN,ELCTR MOVE LOCATION FOR PRINTING 45920020 GOIF JTLTORG,NE=LTO200 IS IT A LTORG STATEMENT? 45990020 SR R10,R10 SET PRINT INDEX 46060020 JCALL OUTPUT GO PRINT RECORD 46130020 GOIF JERR,OFF=LTO200 ANY ERROR IN LTORG STMNT 46200020 LA R10,ERROUT YES LOAD PRINT INDEX 46250020 JCALL OUTPUT GO PRINT ERROR FLAG 46260020 LTO200 L R2,ELCTR IS LOCATION COUNTER GREATHER 46262020 C R2,=A(X'FFFFFF') THAN MAXIMUM 46264020 BNH LTO210 46266020 GOIF WRPFLG,ON=LTO210 FORGET ERROR IF ALREADY LOGGED 46268020 SET WRPFLG,ON INDICATE LCTR ERROR LOGGED 46268420 X5ERRL 246,0 LOG - LOCATION COUNTER ERROR 46268820 LA R10,ERROUT 46269220 JCALL OUTPUT PRINT *** ERROR *** 46269620 LTO210 LH R10,JINFILE POINT TO SYMBOL DATA FILE 46269720 JGETL FILE=(R10) GET NEXT RECORD 46270020 GOIF JTEND,EQ=LTO300 ARE WE PROCESSING END CARD? 46340020 LR R5,R11 SAVE TEXT POINTER 46410020 GOIF JTADJII,EQ=LITR00 IS ENTRY A LITERAL DC 46550020 GOIF JTLTEND,EQ=AOP310 NO, IS IT END OF LITERAL POOL 46620020 X5ERRL 167,0,AOP310 SYMBOL FILE OUT OF SYNC 46760020 SPACE 46830020 LTO300 CLI RTYPE,JTLTEND IF LITERAL END, THEN EXIT 46900020 BC 8,AOP310 YES,EXIT 46970020 MVC ELCTR,RLCTR RESUMED LOCATION COUNTER 47040020 MVC EESDI,RESDI RESUME ESDID 47110020 MVI JTIOP1,X'00' ZEROED OUT OPCODE 47180020 B LTO050 GO CHECK ALIGNMENT 47250020 SPACE 3 47320020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -47370020 - ''LITR'' STATEMENT PROCESSOR' 47380020 LITR00 L R1,STMTN GET STATEMENT NUMBER 47600020 LA R1,1(,R1) INCREMENT 1 47670020 C R1,=F'65535' IS IT THE LIMIT ? 47740020 BNH LITR05 NO,BRANCH AROUND 47810020 SR R1,R1 YES START FROM ZERO 47880020 SPACE 47950020 LITR05 ST R1,STMTN SAVE IT 48020020 MVC LITRSD,JTNMP SAVE LITR * LOCATION 48090020 MVC LITRLC,JTOCP SAVE LITR * ESD 48160020 MVI SYMCNT,D0 ZERO NUMBER OF SYMBOLS THIS REC 48230020 SET LITRSW,ON INDICATE A LITR FOR DCEVAL 48300020 SR R2,R2 CLEAR REGISTER 48370020 LH R2,RRCDL GET RECORD LENGTH 48420020 BCTR R2,0 MAKE IT MOVE LENGTH 48430020 CH R2,=H'255' LONGER THAN MAX MOVE LENGTH 48430220 BNH LITR10 NO MOVE WILL WORK 48430420 SH R2,=H'256' COMPUTE REMAINDER 48430620 EX R2,LITMOV2 MOVE REMAINDER 48430820 LH R2,=H'255' MOVE FIRST 256 BYTES 48431020 LITR10 EQU * 48431220 EX R2,LITMOV MOVE LITERAL TO X5ATEMP 48432020 SR R2,R2 CLEAR REGISTER 48434020 IC R2,RLNGA GET MACHINE LENGTH OF LITERAL 48440020 LA R5,X5ALIT TREAT IT AS TEXT FILE RECORD 48490020 EX R2,LITMVX MOVE LITERAL IN RECORD OX00222 48500026 MVC JTRLI(D23),=AL1(0,0,0,0,X'2C',0,0,18,0,18,0,20,0,18,0,18*48560026 ,0,0,0,0,16,0,JEQUAL) BUILT TEXT REC FOR LIT OX00222 48570026 MVC JTFLGA(D1),RFLGA MOVE IN FLAG A OX00222 48572026 LA R2,D1(R2) INCREMENT BY 1 OY01863 48572402 STC R2,D21(R5) INSERT LIT TRUE LENGTH OX00222 48574026 LA R1,D23(R2) COMPUTE REC LENGTH OX00222 48576026 STH R1,JTRLI PUT IN REC LENGTH OX00222 48578026 LH R10,JOUTFILE POINT TO OUTPUT FILE 48860020 JPUTL FILE=(R10),BUFREQ=(R1) LOCATE NEXT BUFFER 48930020 USING XRFIN,R11 XREF RECORD USING 49000020 LA R1,D20(R2) COMPUTE LENGTH 49070020 STH R1,XRECLN PUT IN DEFINITION RECORD 49140020 MVC XFLAG(4),=AL2(0,LITTYPE*256) XREF RECORD HEADER 49210020 STC R2,LITDTL PUT IN LITERAL LENGTH 49350003 BCTR R2,0 GIVE TRUE LENGTH OX00086 49360003 EX R2,LITRMV MOVE LITERAL TO RECORD OX00086 49400003 MVC XRFSYM(D4),ELCTR MOVE LOCATION TO XREF RECORD 49420020 MVC XRFSYM+D4(D2),EESDI MOVE ESD TO XREF RECORD 49490020 MVC XRFSYM+6(1),LITPID+1 MOVE LITPOOL ID TO XREF RECORD 49560020 MVI XRFSYM+7,X'00' ZEROED OUT BYTE 49630020 MVI XRFFLG,BASE INDICATE BASE REFERENCE 49700020 MVC XRFSTM,STMTN+D2 STATEMENT NUMBER TO RECORD 49770020 SR R10,R10 CLEAR REGISTER 49840020 IC R10,JTFLGA GET LENTH ATTRIBUTE 49910020 LA R10,D1(,R10) INCREMENT BY 1 49980020 STH R10,LCTRSAV SAVE FOR MOVING 50050020 MVC XRFLEN,LCTRSAV MOVE TO XREF RECORD 50120020 SPACE 50190020 LH R1,JTRLI GET RECORD LENGTH 50260020 LA R10,D23(R5) POINT AT EXPRESSION OX00222 50330026 ST R10,OPNADR SAVE OPERAND ADDRESS 50400020 ST R5,TXTPTR SAVE LITERAL TEXT PTR 50470020 AR R1,R5 ADD RECORD LENGTH TO RECORD PTR 50540020 ST R1,OPNEND SAVE OPERAND END 50610020 SET (DCSWH,DCCOMP,DCMOP,DCSTRT),OFF TURN OFF ALL DC FLAGS 50660020 JCALL DCEVAL GO TO DC EVALUATION ROUTINE 50680020 SET LITRSW,OFF TURN OFF LITERAL SWITCH 50750020 SET DCMOP,ON TURN MOP-UP SWITCH ON 50820020 LA R10,DC0OUT GET DC PRINT INDEX 50890020 JCALL OUTPUT CALL OUTPUT 50960020 GOIF JERR,OFF=LTO200 ANY ERRORS FLAGGED? 51030020 LA R10,ERROUT LOAD ERROR FLAG INDEX 51100020 SET PERR,OFF TURN PRINT ERROR FLAG OFF 51170020 JCALL OUTPUT GO PRINT ERROR FLAG 51240020 B LTO200 GO SEE IF THERE IS MORE LITR'S 51310020 LITRMV MVC LITDTA(0),D22(R5) MOVE LITERAL OX00222 51380026 LITMOV MVC X5ALIT(0),D0(R11) MOVE LITERAL RECORD TO X5ALIT 51430020 LITMOV2 MVC X5ALIT+256(0),256(R11) MOVE FIRST 256 IF TOO LONG 51440020 LITMVX MVC D23(0,R5),D13(R11) REBUILT LIT REC OX00222 51442026 SPACE 3 51450020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -51500020 - ''PUNCH'' && ''REPRO'' STATEMENT PROCESSOR' 51510020 * 51520020 * PUNCH STATEMENT PROCESSING 51570020 * 51580020 PUNCH0 BAL R6,AOP440 GO PRINT PUNCH STATEMENT 51730020 BAL R6,AOP500 GO CLEAR DUPLICATE QUOTES 51800020 GOIF TPTEXT,ON=PUNCH3 FORGET PUNCH IF OPERAND ERROR 51920020 CH R11,=H'80' IS LENGTH > 80? 51940020 BNH PUNCH1 BRANCH AROUND IF NOT HIGH 52010020 PUNER1 X5ERRL 165,0,AOP300 LOG PUNCH OPERAND ERROR 52080020 SPACE 52150020 PUNCH1 LTR R11,R11 IS LENGTH =0? 52220020 BZ PUNER1 IF YES GO LOG ERROR 52290020 GOIF JSYSGEN,OFF=PUNCH2 NEED TO CHECK? NO,BRANCH 52360020 GOIF JPRESD,ON=AOP300 RECORD PUNCHED ALREADY? 52430020 SPACE 52500020 PUNCH2 LA R10,PUNOUT LOAD PUNCH INDEX 52570020 B AOP410 GO PUNCH STATEMENT 52640020 SPACE 52650020 PUNCH3 SET TPTEXT,OFF RESET BAD OPERAND INDICATOR 52690020 B AOP300 GET OUT 52700020 SPACE 3 52710020 * 52780020 * REPRO STATEMENT PROCESSING 52850020 * 52920020 REPRO0 LA R10,RPOOUT LOAD INDEX FOR REPRO CARD 52990020 B AOP410 GO PUNCH AND PRINT 53060020 SPACE 3 53130020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -53180020 - ''PUSH'' STATEMENT PROCESSOR' 53190020 PUSH00 GOIF OPNPRS,OFF=PUSHR1 ERROR NO OPERAND 53200020 L R4,OPNADR POINT TO OPERAND 53270020 PSH100 CLC D0(D5,R4),PSPOUS PUSH USING 53340020 ST R4,ERRPTR SAVE COLUMN PTR 53410020 BE PSH400 YES, GO PUSH USING DOWN LEVEL 53480020 CLC D0(D5,R4),PSPOPR PUSH PRINT 53550020 BNE PUSHR2 NO - REQUEST INVALID 53620020 LH R1,PRPU GET PRINT PUSH COUNT 53690020 CH R1,=AL2(PUPOLV) DOES REQUEST EXCEED LEVEL 53760020 BNL PUSHR3 YES, GO LOG ERROR 53830020 LA R2,PRPU+D2(R1) POINT TO PUSH PRINT SAVE AREA 53900020 MVC D0(D1,R2),PRINTSW SAVE PRINT SWITCHES 53970020 LA R1,D1(,R1) STEP COUNT BY 1 54040020 STH R1,PRPU SAVE NEW LEVEL COUNT 54110020 GOIF PSTMT,ON=PSH200 IF PRINT ON OK 54130020 SET PRPP,ON ELSE FORCE PRINT OF PUSH 54150020 PSH200 GOIF D5(R4),JBLANK,EQ=AOP400 OPERAND FOLLOWED BY A BLANK 54180020 GOIF D5(R4),JCOMMA,NE=PUSHR4 NO, IS COMMA FOLLOWING 54250020 LA R4,D6(,R4) YES, STEP TO NEXT OPERAND 54320020 B PSH100 CONTINUE SCAN 54390020 PSH400 LH R1,USPHL GET USING PUSH DOWN LEVEL 54460020 CH R1,=AL2(PUPOLV) IN MAX. LEVEL EXCEEDED 54530020 BNL PUSHR3 YES,ERROR 54600020 LA R1,D1(,R1) STEP LEVEL COUNT 54670020 STH R1,USPHL SAVE NEW COUNT 54740020 MH R1,=AL2(USTL) POINT TO SPACE TO PUSH 54810020 LA R1,USINGT(R1) USING TABLE 54880020 MVC D0(USTL,R1),USINGT SAVE USING TABLE 54950020 B PSH200 CONTINUE SCAN 55020020 SPACE 55090020 PUSHR1 MVC ERRPTR,OPNADR SET COLUMN PTR 55160020 X5ERRL 177,CLMPTR,AOP400 MISSING OPERAND 55230020 SPACE 55300020 PUSHR2 X5ERRL 190,CLMPTR,AOP400 UNDEFINED PUSH REQUEST 55370020 SPACE 55440020 PUSHR3 X5ERRL 191,CLMPTR,AOP400 PUSH LEVEL EXCEEDED - PRINT 55510020 SPACE 55580020 PUSHR4 X5ERRL 185,CLMPTR,AOP400 INVALID DELIMITER -BLANK 55650020 SPACE 3 55720020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -55770020 - ''POP'' STATEMENT PROCESSOR' 55780020 POP100 GOIF OPNPRS,OFF=POPER1 DOES POP HAVE AN OPERAND 55790020 L R4,OPNADR POINT TO OPERAND 55860020 POP200 CLC D0(D5,R4),PSPOUS ARE WE POPING USING 55930020 ST R4,ERRPTR SAVE COLUMN PTR 56000020 BE POP400 YES, GO MOVE USING UP A LEVEL 56070020 CLC D0(D5,R4),PSPOPR POP PRINT REQUESTED 56140020 BNE POPER2 NO, ERROR UNDEFINED OPERATION 56210020 LH R1,PRPU GET PRINT PUSH LEVEL 56280020 LTR R1,R1 IS TI ZERO 56350020 BZ POPER3 YES, EXCEEDED PUSH LEVEL 56420020 BCTR R1,0 DECREMENT COUNT 56490020 LA R2,PRPU+D2(R1) POINT TO LAST LEVEL SAVED 56560020 MVC PRINTSW,D0(R2) RESTORE PREVIOUS PRINT SWITCH 56630020 STH R1,PRPU SAVE NEW PUSH COUNT 56700020 GOIF PSTMT,ON=POP300 IF PRINT ON OK 56720020 SET PRPP,ON ELSE FORCE PRINT OF POP 56740020 POP300 GOIF D5(R4),JBLANK,EQ=AOP400 IS PUSH OPERAND FOLLOWED BLANK 56770020 GOIF D5(R4),JCOMMA,NE=POPER4 NO, CHECK COMMA - IF NO ERROR 56840020 LA R4,D6(,R4) YES, POINT TO NEXT OPERAND 56910020 B POP200 CONTINUE SCAN OF OPERAND 56980020 POP400 LH R1,USPHL GET USING PUSH LEVEL 57050020 LTR R2,R1 SAVE AND TEST FOR ZERO 57120020 BZ POPER3 NO MORE LEVEL TO POP 57190020 MH R1,=AL2(USTL) POINT TO USING PUSH DOWN 57260020 LA R1,USINGT(R1) SEGMENT FOR RESTORE 57330020 MVC USINGT(USTL),D0(R1) RESTORE USING TABLE 57400020 BCTR R2,0 DECREMENT PUSH DOWN LEVEL 57470020 STH R2,USPHL SAVE NEW PUSH COUNT 57540020 B POP300 CONTINUE SCAN 57610020 SPACE 57680020 POPER1 MVC ERRPTR,OPNADR SET COLUMN PTR 57750020 X5ERRL 177,CLMPTR,AOP400 MISSING OPERAND 57820020 SPACE 57890020 POPER2 X5ERRL 192,CLMPTR,AOP400 INVALID (UNDEFINED) POP REQUEST 57960020 SPACE 58030020 POPER3 X5ERRL 193,CLMPTR,AOP400 NO LEVEL LEFT TO POP FOR PRINT 58100020 SPACE 58170020 POPER4 X5ERRL 185,CLMPTR,AOP400 INVALID DELIMITER - BLANK 58240020 PUPOLV EQU 4 PUSH LEVEL MAXIMUM 58310020 USTL EQU (17*8) USING TABLE LENGTH 58380020 PSPOUS JGENIN 'USING' INTERNAL DC -USING- 58450020 PSPOPR JGENIN 'PRINT' INTERNAL DC -PRINT- 58520020 SPACE 3 58590020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -58640020 - ''PRINT'' STATEMENT PROCESSOR' 58650020 PRINT0 IC R2,PRINTSW SAVE PRINT SWITCH 58870020 SET (PSTMT,PGEN),ON FORCE PRINT ON 58940020 BAL R6,AOP440 GO PRINT PRINT STATEMENT 59010020 STC R2,PRINTSW RESTORE PRINT SWITCH 59080020 GOIF OPNPRS,OFF=PRTER1 GO LOG ERROR IF NO OPERAND 59150020 L R10,OPNADR GET OPERAND POINTER 59220020 L R11,OPNEND GET OPEREND END 59290020 SR R14,R14 ZERO REGISTER TO CLEAR 3 BYTES 59360020 PRT100 LA R15,PRTBL POINT TO POSSIBLE PRINT OPERNDS 59430020 CR R10,R11 ARE WE TO THE END OF OPERAND 59500020 BNL PRT350 YES,GO LOG ERROR 59570020 PRT300 IC R14,D0(,R15) GET LENGTH OF TABLE ENTRY 59640020 EX R14,PRTCLC IS THIS THE PRINT OPTION 59710020 BE PRT400 YES, GO SET PRINT FLAGS 59780020 LA R15,D3(R14,R15) POINT TO NEXT TABLE ENTRY 59850020 GOIF D0(R15),BITFF,NE=PRT300 HAVE WE SCANNED THE WHOLE TABLE 59920020 SPACE 59990020 PRT350 ST R10,ERRPTR SAVE OPERAND COLUMN PTR 60060020 X5ERRL 194,CLMPTR,AOP300 INVALID PRINT REQUEST 60130020 PRT400 ST R10,ERRPTR SAVE ERROR PTR 60180020 LA R10,D1(R14,R10) POINT TO NEXT OPERAND 60190020 GOIF D0(R10),JBLANK,EQ=PRT450 OK IF DELIMITED BY BLANK 60200020 GOIF D0(R10),JCOMMA,NE=PRTER2 ERROR IF NOT DELIMITED BY COMMA 60250020 SPACE 60260020 PRT450 TM D1(R15),BIT7 HOW TO TURN FLAG 60270020 BO PRT600 GO TO TURN FLAG OFF 60320020 OC PRINTSW,D1(R15) TURN FLAG ON 60330020 SPACE 60340020 PRT500 GOIF D0(R10),JCOMMA,NE=AOP300 FINISH IF NOT COMMA 60390020 LA R10,D1(R10) STEP PASS COMMA 60400020 B PRT100 GO SCAN NEXT OPERAND 60410020 PRT600 NC PRINTSW,D1(R15) TURN OF FLAG 60760020 B PRT500 GO STEP TO NEXT OPERAND 60830020 PRTER1 X5ERRL 177,0,AOP300 NO OPERAND 60900020 PRTER2 X5ERRL 185,CLMPTR,AOP300 INVALID DELIMITER 60970020 PRTCLC CLC D0(0,R10),D2(R15) COMPARE EXECUTED ABOVE 61040020 PRTBL DC AL1(L'GON-1) LENGTH OF 'ON' -1 61110020 DC AL1(PSTMT) OR FLAG TO TURN ON PSTMT 61180020 GON JGENIN 'ON' ON - INTERNAL 61250020 DC AL1(L'GOFF-1) LENGTH OF 'OFF' -1 61320020 DC AL1(BITFF-PSTMT) AND FLAG TO TURN OF PSTMT 61390020 GOFF JGENIN 'OFF' OFF - INTERNAL 61460020 DC AL1(L'GGEN-1) LENGTH OF 'GEN' -1 61530020 DC AL1(PGEN) OR FLAG TO TURN ON PGEN 61600020 GGEN JGENIN 'GEN' GEN - INTERNAL 61670020 DC AL1(L'GDATA-1) LENGTH OF 'DATA' -1 61740020 DC AL1(PDATA) OR FLAG TO TURN ON PDATA 61810020 GDATA JGENIN 'DATA' DATA - INTERNAL 61880020 DC AL1(L'GNOGN-1) LENGTH OF 'NOGEN' -1 61950020 DC AL1(BITFF-PGEN) AND FLAG TO TURN OFF PGEN 62020020 GNOGN JGENIN 'NOGEN' NOGEN-INTERNAL 62090020 DC AL1(L'GNODTA-1) LENGTH OF 'NODATA' -1 62160020 DC AL1(BITFF-PDATA) AND FLAG TO TURN OFF PDATA 62230020 GNODTA JGENIN 'NODATA' 62300020 DC AL1(BITFF) 62370020 SPACE 3 62440020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -62490020 - ''USING'' STATEMENT PROCESSOR' 62500020 USING0 GOIF OPNPRS,ON=USI050 OPERAND PRESENT? 62720020 X5ERRL 210,0,AOP405 LOG ERROR AND EXIT 62790020 SPACE 62860020 USI050 XC LHSAVE(2),LHSAVE CLEAR SAVE AREA 62930020 L R10,OPNADR GET OPERAND POINTER 63000020 ST R10,ERRPTR SAVE COLUMN PTR 63070020 GOIF D0(R10),JASTER,GT=USI800 IS 1ST OPERAND PRESENT? 63140020 LH R2,LHSAVE GET OPERAND COUNT 63210020 LA R2,D1(R2) INCREMENT BY 1 63280020 STH R2,LHSAVE STORE OPERAND COUNT 63350020 BAL R6,AOP600 GO EVALUATE FIRST OPERAND 63420020 BC CMPX+ERRX,USI900 IS 1ST OPERAND VALID? 63490020 LR R6,R11 SAVE REGISTER 63560020 LTR R11,R11 IS VALUE NEGATIVE 63630020 BNM USI085 NO,BRANCH AROUND 63700020 LCR R6,R11 COMPLEMENT VALUE 63770020 SPACE 63840020 USI085 STM R10,R11,DWORD1 SAVE ESD AND VALUE 63980020 GOIF D0(R14),JCOMMA,NE=USI600 IF NOT A COMMA-SYNTATIC ERROR 64050020 MVC ADDRS2(D4),DWORD1+D4 MOVE VALUE TO LEFT HALF 64120020 SET EOUBIT,ON INDICATE NO LOCTR IN LISTING 64170020 USI100 LA R10,D1(,R14) POINT TO NEXT OPERAND 64190020 LH R2,LHSAVE GET OPERAND COUNT 64260020 LA R2,D1(R2) INCREMENT OPERAND COUNT BY 1 64330020 STH R2,LHSAVE STORE OPERAND COUNT 64400020 CH R2,=H'17' TOO MANY OPERAND? 64470020 BNH USI110 NO,BRANCH AROUND 64540020 X5ERRL 211,0,AOP405 LOG ERROR AND EXIT 64610020 SPACE 64680020 USI110 BAL R6,AOP600 GO EVALUATE 64750020 BNZ USI700 GO LOG ERROR IF NOT ABSOLUTE 64820020 STH R11,DWORD2 SAVE REGISTER NUMBER 64890020 CL R11,=A(HIREG) IS REGISTER NUMBER TO HIGH 64960020 BH USI700 YES, GO LOG ERROR 65030020 GOIF (R11),ZERO=USI500 IS REGISTER NUMBER ZERO 65100020 USI120 LA R4,USINGT POINT TO USING TABLE 65170020 USING UESD,R4 ESTABLISH USING FOR USING TABLE 65240020 LR R1,R14 SAVE OPERAND TERMINATOR POINTER 65310020 USI200 TM UREG,X'0F' ARE WE TO THE END OF @OX08876 65380005 BO USI300 TABLE - YES, TRM SCN @OX08876 65450005 CLC UREG,DWORD2 NO, CHECK REGISTER 65520020 BE USI320 BRANCH IF REPLACING REGISTER 65590020 LA R4,USNXT POINT TO NEXT ENTRY 65660020 B USI200 CONTINUE SCAN 65730020 USI300 XC USNXT(USSL),USNXT MAKE SURE END OF TABLE DEFINED 65800020 MVI USNXT+D6,X'0F' IND END OF TABLE @OX08876 65850005 USI320 MVC UESD(USSL),DWORD1+D2 MOVE IN NEW USING ENTRY 65870020 NC UESD,UESD IS ESD ZERO 65940020 BNZ USI340 NO, NOT ABSOLUTE 66010020 SET ABSUS,ON TURN ABSOLUTE USING SWITCH 66080020 USI340 LA R6,USINGT PREPARE FOR BUBBLE SORT 66150020 USING JTEXTA,R4 RE-ESTABLISH OPERAND USING 66220020 USING UESD,R6 CHANGE USING FOR USING TABLE 66290020 SET USSRT,OFF TURN OFF SORT SWITCH 66360020 USI360 TM USNXT+D6,X'0F' HAVE WE END OF TABLE @OX08876 66430005 BO USI400 YES, SORT COMPLETE? @OX08876 66500005 CLC UESD(2),USNXT COMPARE ESD'S 66570020 BL USI380 GO TO EXCHANGE IF LOW 66640020 BH USI370 GO TO NEXT IF HIGH 66710020 L R15,UVAL GET USING VALUE 66780020 C R15,USNXT+D2 COMPARE VALUES 66850020 BL USI380 GO TO EXCHANGE IF LOW 66920020 BH USI370 GO TO NEXT ENTRY IF HIGH 66990020 CLC UREG+D1(1),USNXT+D7 COMPARE REGISTER NR @OX08876 67060005 BL USI380 NO, GO EXCHANGE ENTRIES 67130020 USI370 LA R6,USNXT STEP TO NEXT ENTRY 67200020 B USI360 CONTINUE SORT 67270020 USI380 XC UESD(USSL),USNXT EXCHANGE (SORT) 67340020 XC USNXT(USSL),UESD ENTRIES 67410020 XC UESD(USSL),USNXT IN USING TABLE 67480020 SET USSRT,ON TURN ON SORT FLAG 67550020 B USI370 GO CONTINUE SORT 67620020 USI400 GOIF USSRT,ON=USI340 IS SORT COMPLETE 67690020 USI420 EQU * STEP TO NEXT OPERAND 67760020 GOIF D0(R14),JBLANK,EQ=AOP405 ARE WE AT THE END OF OPERAND 67900020 GOIF D0(R14),JCOMMA,NE=USI600 IS TERMINATOR A COMMA 67970020 L R2,DWORD1+D4 YES, GET VALUE 68040020 AH R2,=H'4096' ADD 4096 FOR SECOND USING 68110020 ST R2,DWORD1+D4 SAVE NEW VALUE 68180020 B USI100 GO GET NEXT REGISTER 68250020 USI500 CLC LHSAVE(2),=H'2' IS REGISTER ZERO THE FIRST OPRA 68320020 BNE USI700 NO,GO LOG ERROR 68390020 XC DWORD1+D4(L'UVAL),DWORD1+D4 NO, ZERO VALUE 68600020 B USI120 GO ENTER ENTRY 68670020 USI600 X5ERRL 178,CLMPTR,AOP405 SYNTAX ERROR 68740020 USI700 X5ERRL 195,CLMPTR,AOP405 INVALID REGISTER 68810020 USI800 X5ERRL 216,CLMPTR,AOP405 ILLEGAL FORMAT 68880020 USI900 X5ERRL 217,CLMPTR,AOP405 RELOCATABILITY ERROR 68950020 SPACE 3 69090020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -69140020 - ''DROP'' STATEMENT PROCESSOR' 69150020 DROP00 L R10,OPNADR GET OPERAND POINTER 69370020 GOIF OPNPRS,OFF=DRP400 DROP ALL IF OPERAND EMPTY 69440020 CLC D0(2,R10),=AL1(JCOMMA,JBLANK) IS OPERAND MISSING? 69510020 BE DRP400 BRANCH IF YES 69580020 GOIF D0(R10),JASTER,GT=DRP800 IS OPERAND MISSING? 69650020 DRP100 BAL R6,AOP600 GO EVALUATE OPERAND 69720020 BNZ DRP700 EVAL ERRORS OR RELOCATABLE 69790020 CL R11,=A(HIREG) IS REGISTER VALID 69860020 BH DRP700 NO GO LOG ERROR 69930020 LA R4,USINGT POINT TO USING TABLE 70000020 DROP R6 ELIMINATE USING THIS REGISTER 70070020 USING UESD,R4 DEFINE USING FOR TABLE SCAN 70140020 DRP200 TM UREG,X'0F' IS SCAN COMPLETE @OX08876 70210005 BO DRP500 YES8 REG NOT IN USE @OX08876 70280005 CH R11,UREG IS THIS REGISTER TO BE DROPPED 70350020 BE DRP300 REGISTER FOUND GO DELETE 70420020 LA R4,USNXT STEP TO NEXT ENTRY 70490020 B DRP200 CONTINUE SCAN 70560020 DRP300 LA R2,USINGT+USSL*(HIREG+D2)-D1 POINT END OF TABLE 70630020 SR R2,R4 GET MOVE LENGTH REMAINDER TABLE 70700020 BNH DRPABT ABORT SOMETHING IS WRONG 70770020 EX R2,DRPMVC OVERLAY DROPED REGISTER 70840020 DRP350 GOIF D0(R14),JBLANK,EQ=AOP400 REGISTER(S) DROPPED EXIT 70910020 GOIF D0(R14),JCOMMA,NE=DRP600 INVALID SYNTAX 70980020 LA R10,D1(,R14) POINT TO NEXT OPERAND 71050020 B DRP100 GO REPEAT PROCESS 71120020 DRP400 XC USINGT(USSL),USINGT INITAILIZE USING TABLE 71190020 MVI USINGT+D6,X'0F' IND END OF TABLE @OX08876 71240005 SET ABSUS,OFF TURN OFF ABSOLUTE USING SWITCH 71260020 B AOP400 GO PRINT AND EXIT 71330020 DRP500 X5ERRL 195,CLMPTR,AOP400 INVALID REGISTER 71400020 DRP600 X5ERRL 178,CLMPTR,AOP400 SYNTAX ERROR 71470020 DRP700 LR R2,R14 SAVE TEXT POINTER 71540020 X5ERRL 195,CLMPTR INVALID REGISTER 71610020 LR R14,R2 RESTORE TEXT POINTER 71680020 B DRP350 GO CONTINUE SCAN 71750020 DRP800 EQU * 71820020 ST R10,ERRPTR SAVE COLUMN PTR 71890020 X5ERRL 216,CLMPTR,AOP400 ILLEGAL OPERAND FORMAT 71960020 DRPABT DC H'0' 72030020 DRPMVC MVC UESD(0),USNXT EXECUTED MVC LENGTH OR-ED IN 72100020 SPACE 3 72170020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -72220020 - ''SPACE'' AND ''EJECT'' STATEMENT PROCESSOR' 72230020 SPACE0 GOIF OPNPRS,OFF=SPC200 GO SPACE 1 IF NO OPERAND 72800020 L R10,OPNADR POINT TO OPERAND 72870020 LR R11,R10 SAVE OPERAND POINTER 72940020 CLC D0(2,R11),=AL1(JCOMMA,JBLANK) IS OPERAND MISSING? 73010020 BE SPC200 BRANCH IF MISSING 73080020 SPC050 CLI D0(R11),JNUMMAX IS IT NUMERIC? 73150020 BH SPC075 NO,GO CHECK FURTHER 73220020 LA R11,D1(R11) SKIP TO NEXT CHARACTER 73290020 B SPC050 CONTINUE SCAN 73360020 SPC075 CLI D0(R11),JBLANK IS IT BLANK? 73430020 BNE SPCER1 ERROR IF NOT BLANK 73500020 JCALL EVAL GO EVALUATE 73570020 BO AOP400 EVAL ERROR EXIT 73640020 BNZ SPCER1 OPERAND CANNOT BE RELOCATABLE 73710020 LTR R11,R11 IS VALUE ZERO 73780020 BZ AOP300 YES, EXIT 73850020 BM SPCER1 IF NEGATIVE ERROR 73920020 SPC100 LA R10,CAROUT GET PRINT INDEX 73990020 B AOP410 GO SPACE PRINTER 74060020 SPC200 LA R11,D1 INDICATE 1 SPACE 74130020 B SPC100 EXIT 74200020 SPCER1 X5ERRL 242,CLMPTR,AOP400 OPERAND INVALID 74270020 SPACE 3 74480020 EJECT0 LNR R11,R13 LOAD NEGATIVE VALUE IN REGISTER 74760020 LA R10,CAROUT LOAD CARRIAGE CONTROL INDEX 74830020 B AOP410 GO EJECT PAGE 74900020 SPACE 3 74970020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -75020020 - ''TITLE'' STATEMENT PROCESSOR' 75030020 TITLE0 BAL R6,AOP500 GO SQUEEZE OUT QUOTE AND AMPSND 75250020 MVI JTITLE,JBLANK BLANK OUT TITLE 75390020 MVC JTITLE+D1(L'JTITLE-D1),JTITLE HOLD AREA FOR NEW TITLE 75460020 GOIF (R11),ZERO=TTL150 NULL OPERAND - BLANK TITLE 75510020 GOIF TPTEXT,ON=TTL300 FORGET TITLE IF OPERAND ERROR 75520020 CH R11,H100 IS TITLE LENGTH GT. 100 75530020 BH TTL200 YES, SAVE ONLY 100 CHARACTERS 75600020 BCTR R11,0 GET MOVE LENGTH 75670020 EX R11,TTLMVC MOVE TITLE 75740020 TTL100 GOIF PSTMT,OFF=AOP310 EXIT IF PRINT OFF 75810020 GOIF JGEN,OFF=TTL150 BRANCH AROUND IF NOT GENERATED 75880020 GOIF PGEN,ON=TTL150 BRANCH IF PRINT GEN 75950020 B AOP310 EXIT IF PRINT NOGEN 76020020 SPACE 76090020 TTL150 LNR R11,R13 LOAD NEGATIVE VALUE FOR EJECT 76230020 LA R10,CAROUT LOAD CARRIAGE CONTROL FOR EJECT 76300020 JCALL OUTPUT CALL PRINT 76370020 SET TWASLC,ON SET BUFFER AVAIL. FLAG 76420020 B AOP300 EXIT 76430020 TTL200 X5ERRL 171,0 TITLE LENGTH GREATER THAN 100 76440020 MVC JTITLE,D0(R4) MOVE ONLY 100 CHARACTERS 76510020 B TTL100 GO ESTABLISH PRINT INDEXES 76580020 TTL300 SET TPTEXT,OFF RESET BAD OPERAND INDICATOR 76630020 B AOP400 GO PRINT TITLE STATEMENT 76640020 H100 DC H'100' MAX. LENGTH OF TITLE 76650020 TTLMVC MVC JTITLE(D0),D0(R4) EXECUTE MOVE OF NEW TITLE 76720020 SPACE 3 76790020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -76840020 - ''MNOTE'' STATEMENT PROCESSOR' 76850020 MNOTE0 GOIF OPNPRS,ON=MNO100 CHECK IF OPERAND PRESENT 77070020 X5ERRL 177,0,AOP400 MISSING OPERAND 77140020 MNO050 MVI LHFLGS,DNTPLH SET DON'T PRINT LEFTHALF 77490020 GOIF PSTMT,OFF=MNO075 77520020 GOIF JLIST,OFF=MNO075 77521020 LA R10,LSTOUT GET PRINT INDEX FOR LISTING 77560020 JCALL OUTPUT CALL PRINT 77700020 MNO075 SET MNOPRT,OFF RESET MNOTE FLAG 77730020 B AOP300 EXIT 77770020 MNO085 GOIF PSTMT,OFF=MNO075 EXIT IF PRINT OFF 77780020 GOIF JLIST,OFF=MNO075 EXIT IF NOLIST 77790020 SET MNOPRT,OFF ELSE GO EVALUATE FOR PRINT 77800020 LA R10,MNOOUT LOAD MNOTE PRINT INDEX 77840020 JCALL OUTPUT GO GET BUILD AREA RECORD 78270020 LR R2,R11 SAVE PRINT BUFFER POINTER 78400020 MVC STMTNO(D5,R2),DWORD2 MOVE STATEMENT NUMBER TO PRINT 78470020 LH R6,JENDCL END COLUMN 78540020 AR R6,R11 POINT TO END OF PRINT BUFFER 78610020 B MNO135 GO EVALUATE 78630020 MNO100 SET MNOPRT,ON INDICATE SCAN OF OPERAND 78650020 MNO135 L R4,OPNADR GET OPERAND POINTER 78680020 GOIF D0(R4),JASTER,EQ=MNO800 CHECK MNOTE SEVERITY 78750020 GOIF D0(R4),JNUMMAX,GT=MNO250 IS SEVERITY NUMERIC 78820020 LR R10,R4 YES, SAVE PARAMETER 78890020 JCALL EVAL CALL EVALUATION ROUTINE 78960020 BNZ MNOER1 GO LOG ERROR 79030020 CH R11,=H'255' IS SEVERITY WITHIN RANGE 79100020 BH MNOER2 NO, ERROR 79170020 MNO150 EX R11,PRNTLEV IS MSG TO BE LOGGED (MSGLEVEL) 79180020 BH MNO200 NO 79190020 GOIF MNOPRT,OFF=MNO200 DO NOT LOG ERR IF MSG BUILD ON 79195020 X5ERRL 197,0 FLAG AS MNOTE .... 79200020 EX R11,SEVTST IS SEVERITY HIGHER THAN RECORD 79240020 BNL MNO200 NO,DONT SAVE NEW SEVERITY 79310020 STC R11,JSEVER YES, SAVE NEW SEVERITY 79380020 MNO200 GOIF MNOPRT,ON=MNO225 IF NO PRINT SKIP MOVE 79450020 LR R11,R14 GET MOVE LENGTH 79480020 SR R11,R4 LENGTH OF 79520020 LA R2,D4(,R2) MNOTE WITH SEVERITY DISPLACEMT 79590020 EX R11,SEVMOV MOVE TO PRINT - BY EXECUTE- 79660020 LA R2,D1(R11,R2) STEP PRINT BUFFER POINTER 79730020 MNO225 GOIF D0(R14),JCOMMA,NE=MNOER3 ERROR IF NEXT CHAR NOT , 79800020 LA R4,D1(,R14) STEP OVER COMMA 79870020 MNO300 GOIF D0(R4),JQUOTE,NE=MNOER3 NEED A QUOTE NOW 79940020 LA R4,D1(,R4) STEP OVER QUPTE 80010020 MNO400 GOIF D0(R4),JQUOTE,EQ=MNO700 ELIMINATE DUPLICATE QUOTES 80080020 GOIF D0(R4),JAMPER,EQ=MNO750 AND AMPERSANDS 80150020 C R4,OPNEND COMPARE WITH OPERAND END 80220020 BNL MNO875 YES CHECK DELIMITER 80290020 MNO500 GOIF MNOPRT,ON=MNO550 NO PRINT OF MNOTE ? 80360020 MVC MNOALN(D1,R2),D0(R4) MOVE CHARACTER TO PRINT 80390020 LA R4,D1(,R4) STEP TO NEXT CHARACTER 80430020 LA R2,D1(,R2) STEP PRINT OUTPUT 80500020 CR R2,R6 END OF PRINT BUFFER 80570020 BNL MNO600 YES, GO PRINT LINE 80640020 B MNO400 NO, CONTINUE SCAN 80710020 MNO550 LA R4,D1(R4) STEP TO NEXT CHAR 80750020 B MNO400 CONTINUE SCAN 80790020 MNO250 GOIF D0(R4),JCOMMA,EQ=MNO275 COMMA ALLOWED 80850020 GOIF D0(R4),JBLANK,NE=MNO300 ERROR IF NOT BLANK EITHER 80860020 LA R4,D1(R4) STEP UP POINTER 80870020 B MNO250 SCAN FOR DELIMITER 80880020 MNO275 LA R11,D1 SET SEVERITY TO ONE 80890020 LR R14,R4 POINT R14 AT COMMA (,) ALSO 80930020 B MNO150 GO PROCESS SEVERITY 80990020 MNO600 GOIF D0(R4),JQUOTE,EQ=MNO650 IS NEXT CHARACTER A QUOTE 81060020 MNO610 GOIF MNOPRT,ON=MNO400 CONTINUE SCAN IF NOT PRINTED 81130020 LA R10,MNOOUT LOAD INDEX FOR PRINT 81160020 MVI MNOALN(R2),JX PUT IN CONTINUATION CHAR 81200020 JCALL OUTPUT GO GET NEXT LINE BUFFER 81270020 LR R2,R11 SAVE PRINT BUFFER POINTER 81340020 LH R6,JENDCL END COLUMN 81410020 AR R6,R11 POINT TO END OF PRINT BUFFER 81480020 B MNO400 CONTINUE SCAN 81550020 MNO650 GOIF D1(R4),JQUOTE,EQ=MNO610 IS QUOTE A TERMINATOR 81620020 B MNO900 YES, CHECK DELIMITER 81690020 MNO700 GOIF D1(R4),JQUOTE,NE=MNO900 QUOTE IS AN ENDING TERMINATOR 81760020 MNO710 LA R4,D1(,R4) NO, ELIMINATE EXTRA 81830020 B MNO500 CONTINUE SCAN 81900020 MNO750 GOIF D1(R4),JAMPER,EQ=MNO710,ELSE=MNO500 IS AMPERSAND TWO 81970020 MNO800 GOIF D1(R4),JCOMMA,NE=MNOER3 DOES COMMA FOLLOW ASTERISK 82040020 GOIF MNOPRT,ON=MNO850 BRANCH AROUND MOVE IF NO PRINT 82070020 MVC MNOALN(D2,R2),D0(R4) YES, MOVE BOTH TO PRINT 82110020 LA R2,D2(,R2) STEP POINTERS PAST 82180020 MNO850 LA R4,D2(R4) ASTERISK AND COMMA 82250020 B MNO300 CONTINUE OUTPUT 82320020 MNO875 BCTR R4,0 ADJUST REGISTER FOR DELIM TEST 82321020 MNO900 CLI D1(R4),JBLANK DO BLANK FOLLOW TERM QUOTE 82330020 BNE MNOER4 ERROR IF NOT 82340020 GOIF MNOPRT,ON=MNO085 BRANCH IF SCAN ONLY 82350020 B MNO075 BRANCH IF MESSAGE BUILD DONE 82370020 MNOER1 X5ERRL 179,CLMPTR,MNO050 SEVERITY CODE MUST BE ABSOLUTE 82390020 MNOER2 X5ERRL 183,CLMPTR,MNO050 82460020 SPACE 82490020 MNOER3 ST R4,ERRPTR SAVE COLUMN PTR FOR LOGGING 82520020 X5ERRL 178,CLMPTR,MNO050 SYNTAX ERROR - NOT A COMMA 82550020 MNOER4 ST R4,ERRPTR SAVE COLUMN POINTER FOR LOGGING 82560020 X5ERRL 185,CLMPTR,MNO050 SYNTAX ERROR NO BLANK 82570020 SPACE 82580020 PRNTLEV CLI JMSGL,*-* EXECUTED MSGLEVEL CHECK 82620020 SEVTST CLI JSEVER,D0 EXECUTE SEVERITY CHECK 82670020 SEVMOV MVC MNOALN(D0,R2),D0(R4) EXECUTED SEVERITY MOVE 82740020 MNOOUT EQU 24 MNOTE PRINT INDEX 82810020 STMTNO EQU X'23' STATEMENT NUMBER DISPLACEMENT 82880020 MNOALN EQU 41 MNOTE PRINT DISPLACEMENT 82950020 SPACE 3 83090020 TITLE '&COMPNM&ASMID - ASSEMBLER OPCODE PROCESSOR - ASSEMBLY PHASE -83140020 - ERROR RECORD PROCESSING ' 83150020 ERROR0 SET JERRCHK,ON SET ERROR RECORDS PRESENT 83440020 DROP R11 DROP REG. FOR LATER USE 83510020 USING JERRCD,R5 SET UP BASE FOR ERR RECORD 83580020 MVC JESTMTNO,STMTN+D4-L'JESTMTNO PUT STATMENT NO. IN ERR RD 83620020 CLI JERCDE,ERR60 GENERATED END STATEMENT ERROR 83660020 BNE ERROR1 NO 83670020 MVC JESTMTNO,ENDSTMNO+D4-L'JESTMTNO GET SAVED STATEMENT NO. 83690020 USING JTEXT,R5 SET UP BASE FOR TEXT RECORD 83720020 ERROR1 LH R10,JOUTFILE POINT TO ERROR RECORD 83790020 JPUTM FILE=(R10),ADDR=JTEXT OUTPUT ERROR RECORD 83860020 XC SYMCNT,SYMCNT CLEAR SYMBOL COUNT 83930020 B AOP310 EXIT 84000020 SPACE 3 84002020 TITLE '&COMPNM&ASMID - ASSEMBLY PHASE - PATCH AREA ' 84010020 JPATCH X5A00,15B0 5% PATCH AREA 84050020 TITLE '&COMPNM&ASMID - ASSEMBLY PHASE - ALIGNMENT ROUTINE ' 84100020 JCSECT (X5A20) DEFINE CSECT 84210020 ALIGN JSAVE BASE=YES SAVE REGISTERS 84280020 JENTRY (X5A21=ALIGN) DEFINE MODULE ENTRY POINT 84350020 ALIGN0 L R1,ELCTR GET LOCATION COUNTER 84460020 GOIF VLIT,ON=ALIGN1 BRANCH AROUND IF ON 84490020 ST R1,LOCATN STORE FOR PRINT 84560020 ALIGN1 AR R1,R2 ADD MAX ALIGN ADJUSTMENT 84700020 LCR R2,R2 CREATE MASK TO GET ALIGNED 84770020 BCTR R2,0 LOCATION COUNTER 84840020 NR R2,R1 DETERMINE ALIGNED VALUE 84910020 S R2,ELCTR GET NUMBER OF PADDING BYTES 84980020 ST R2,LOCLEN SAVE FOR LOCATION COUNTER 85050020 ST R2,FULLWD SAVE ALIGNMENT 85120020 JCALL LOCUPD CALL LOCATION COUNTER UPDATE 85190020 ALNEND JRETURN , EXIT 85260020 JPATCH X5A20,54 5% PATCH AREA 85330020 SPACE 3 85400020 TITLE '&COMPNM&ASMID - ASSEMBLY PHASE - LOCATION COUNTER UPDATE85450020 E ROUTINE ' 85460020 JCSECT (X5A30) DEFINE CSECT 85470020 LOCUPD JSAVE BASE=YES SAVE REGISTERS 85540020 JENTRY (X5A31=LOCUPD) DEFINE MODULE ENTRY POINT 85610020 GOIF LTDECV,ON=LUDEND EXIT IF LITERAL REFERENCE 85680020 L R1,ELCTR GET LOCATION COUNTER 85750020 A R1,LOCLEN ADD LENGTH OF DC 85820020 ST R1,ELCTR SAVE NEW LOCATION 85890020 C R1,=X'1000000' IS IT GREATER THAN MAXIMUM? 85960020 BL LUDEND BRANCH IF NOT 86030020 GOIF WRPFLG,ON=LUDEND HAS ERROR BEEN LOGGED 86100020 SET WRPFLG,ON NO, SET FLAG 86170020 X5ERRL 246,0,LUDEND LOCATION COUNTER ERROR 86240020 LUDEND JRETURN , EXIT 86380020 SPACE 3 86390020 TITLE '&COMPNM&ASMID - ASSEMBLY PHASE - LOCATION COUNTER UPDATE86400020 E ROUTINE - PATCH AREA ' 86410020 JPATCH X5A30,68 5% PATCH AREA 86430020 SPACE 3 86520020 TITLE '&COMPNM&ASMID - ASSEMBLY PHASE - RLD OUTPUT ROUTINE ' 86570020 JCSECT (X5A40) DEFINE CSECT 86590020 RLDOUT JSAVE BASE=YES SAVE REGISTERS 86660020 JENTRY (X5A41=RLDOUT) DEFINE MODULE ENTRY POINT 86730020 GOIF LTDECV,ON=RLDEND EXIT IF LITERAL REFERENCE 86800020 GOIF (DSSW,DXDSW),ANY=RLDEND SKIP RLD IF DS OR DXD 86870020 TM EESDI,BIT1+BIT2+BIT3 IS THIS IN DSECT OR COMMON 86940020 BNZ RLDEND YES, NO RLD - EXIT 87010020 SR R4,R4 ZERO REGISTER 87150020 IC R4,RELOCTR GET NUMBER OF RLD'S TO PUT 87220020 GOIF (R4),NOTPOS=RLDEND DON'T PUT RLD IF NOT POSITIVE 87290020 LA R6,RLIST POINT TO ESD LIST 87360020 RLD100 LH R10,JOUTFILE POINT TO OUTPUT FILE 87430020 RLD115 LH R1,D0(R6) GET RELOCATION ID 87500020 LTR R1,R1 IS IT NEGATIVE? 87570020 BNZ RLD125 BRANCH AROUND IF NOT ZERO 87640020 LA R6,D2(R6) SKIP TO NEXT ESDID 87710020 B RLD115 GO TRY AGAIN 87780020 SPACE 87850020 RLD125 BNM RLD150 NO BRANCH AROUND 87920020 OI X5VSW,BIT2 SET BIT TO INDICATE NEGATIVE 87990020 LCR R1,R1 COMPLEMENT ESDID 88060020 STH R1,D0(R6) STORE BACK 88130020 SPACE 88200020 RLD150 LR R2,R1 SAVE R1 88270020 TM D0(R6),BIT1+BIT3 IS IT IN A DSECT 88340020 BNZ RLDER1 ERRONEOUS RELID 88410020 JPUTL FILE=(R10),BUFREQ=RLDND GO GET BUFFER 88480020 SET JRLDCHK,ON INDICATE RLD PRESENT @OX11000 88530006 USING RLDIN,R11 ESTABLISH USING 88550020 MVC RLDIN(D6),=AL1(0,RLDND,0,0,RLDTYPE,0) INITIALIZE RECORD 88620020 MVC POSID,EESDI GET POSITION ID 88690020 MVC RLDFLG,DWORD1 MOVE TYPE TO FLAG 88760020 MVC RLDVAL,DWORD1+D1 MOVE VALUE TO RECORD 88830020 STH R2,RELID PUT IN RELID 88900020 NI RELID,D15 MASK OUT HIGH ORDER HALF BYTE 88970020 TM X5VSW,BIT2 IS ESDID NEGATIVE? 89040020 BNO RLD200 NO,BRANCH AROUND 89110020 NI X5VSW,BITFF-BIT2 TURN OFF BIT2 89180020 OI RLDFLG,BIT6 INDITATE NEGATIVE RELOCATION 89250020 RLD200 LH R1,DWORD2 GET LENGTH 89320020 BCTR R1,0 DECREMENT IT 89390020 SLL R1,D2 POSITION IT FOR FLAG BYTE 89460020 EX R1,RLDORL OR IN LENGTH-1 89530020 LA R6,D2(,R6) STEP TO NEXT ESD 89670020 BCT R4,RLD100 CONTINUE IF COUNT NOT DEPLETE 89740020 RLDEND JRETURN , EXIT 89810020 RLDER1 X5ERRL 158,CLMPTR,RLDEND 89880020 RLDORL OI RLDFLG,D0 EXECUTE OR OF LENGTH-1 89950020 JPATCH X5A40,F2 5 % PATCH AREA 90020020 SPACE 3 90090020 TITLE '&COMPNM&ASMID - ASSEMBLY PHASE - XREF OUTPUT ROUTINE ' 90140020 JCSECT (X5A50) DEFINE CSECT 90160020 XREF JSAVE BASE=YES SAVE REGISTERS 90230020 JENTRY (X5A51=XREF) DEFINE ENTRY POINT 90300020 L R1,SYMXRF GET NBR SYMBOLS XREF OX02675 90370031 LA R1,D1(,R1) THIS STATEMENT AND ADD 1 90440020 ST R1,SYMXRF STORE NEW COUNT OX02675 90510031 GOIF (JXREF,JLIST),NOTALL=XRFXIT BOTH SWITCHES MUST BE ON 90580020 LR R4,R11 SAVE REFERENCE DATA POINTER 90650020 SET JXREFCHK,ON SET FLAG TO INDICATE XREF MADE 90720020 USING DSECT10,R4 ESTABLISH USING 90790020 USING XRFIN,R11 ESTABLISH USING 90860020 LH R10,JOUTFILE POINT TO OUTPUT FILE 90930020 JPUTL FILE=(R10),BUFREQ=XRFND GET OUTPUT BUFFER 91000020 MVC XRECLN(D6),=AL2(XRFND,0,XRFTYPE*256) INITIALISE HEADER 91070020 STC R2,XRFFLG INDICATE DUP OR REF 91140020 MVC XRFSYM,RNAME MOVE SYMBOL TO XREF RECORD 91210020 MVC XRFSTM,STMTN+D2 STATEMENT NUMBER TO RECORD 91280020 MVC XRFLEN,RLNGQ LENGTH ATTRIBUTE TO RECORD 91350020 MVC XRFVAL,RLCTR LOCATION TO RECORD 91420020 LR R11,R4 RESTORE INPUT POINTER 91490020 XRFXIT JRETURN , EXIT 91560020 SPACE 3 91610020 TITLE '&COMPNM&ASMID - ASSEMBLY PHASE - XREF OUTPUT ROUTINE - X91620020 PATCH AREA ' 91622020 JPATCH X5A50,7E 5% PATCH AREA 91630020 END 91700020