ibm:vm370-lib:cms:dmspio.assemble_src
Table of Contents
DMSPIO Source
References
- Fixes Applied : 1
- This Source Date : Tuesday, December 12, 1978
- Last Fix ID : [R14336DS]
Source Listing
- DMSPIO.ASSEMBLE.txt
- PIO TITLE 'DMSPIO (CMS) VM/370 - RELEASE 6' 00001000
- SPACE 2 00002000
- *. 00004000
- * MODULE NAME: DMSPIO (ALSO KNOWN AS PRINTIO) 00005000
- * 00006000
- * FUNCTIONS: 1) TO BUILD PRINTER CCWS BASED ON ASA OR MACHINE CODE 00007000
- * CONTROL CHARACTERS 00008000
- * 00009000
- * 2) TO ISSUE START I/O TO VIRTUAL PRINTER AND ANALYZE 00010000
- * THE RESULTING STATUS 00011000
- * 00012000
- * ATTRIBUTES: NUCLEUS RESIDENT, REENTRANT 00013000
- * 00014000
- * ENTRY POINTS: DMSPIO(PRINTR) - PRINT 1 LINE 00015000
- * DMSPIOCC - PUT CCWS AND DATA IN CALLER'S BUFFER 00016000
- * DMSPIOSI - PRINT CALLER'S BUFFER 00017000
- * 00018000
- * ENTRY CONDITIONS: UPON ENTRY, R1 POINTS TO A PARAMETER LIST. 00019000
- * THE FORMATS OF THE PLISTS FOR THE 3 ENTRY POINTS 00020000
- * ARE AS FOLLOWS: 00021000
- * 00022000
- * PLIST FOR DMSPIO: CL8'PRINTIO'|CL8'PRINTR' 00023100
- * A(LINE TO BE PRINTED) 00024000
- * H - '0' = ASA CODE (SEE NOTES) 00025000
- * '1' = MACH CODE (SEE NOTES) 00026000
- * H - LENGTH OF THE LINE 00027000
- * 8X'FF' 00028000
- * 00029000
- * PLIST FOR DMSPIOCC: CL8'DMSPIOCC' 00030000
- * A(LINE TO BE PUT IN BUFFER) 00031000
- * H - '0' = ASA CODE (SEE NOTES) 00032000
- * '1' = MACH CODE (SEE NOTES) 00033000
- * H - LENGTH OF THE LINE 00034000
- * A(BUFFER) 00035000
- * 8X'FF' 00036000
- * 00037000
- * PLIST FOR DMSPIOSI: CL8'DMSPIOSI' 00038000
- * A(BUFFER) 00039000
- * 8X'FF' 00040000
- * 00041000
- * EXIT CONDITIONS: AT EXIT R15 CONTAINS ONE OF THE FOLLOWING: 00042000
- * 00043000
- * R15 MEANING 00044000
- * 0 NORMAL COMPLETION 00045000
- * 1 LINE TOO LONG 00046000
- * 2 CHANNEL 12 DETECTED (VIRTUAL 3211 OR 3203) 00047000
- * 3 CHANNEL 9 DETECTED (VIRTUAL 3211 OR 3203) 00048000
- * 5 UNKNOWN ERROR 00049000
- * 100 NO VIRTUAL PRINTER 00050000
- * 00051000
- * CALLS TO OTHER ROUTINES: DMSIOW (WAIT) - WAIT FOR DEVICE END 00052000
- * DMSERR - PROCESS ERROR MESSAGES 00053000
- * 00054000
- * EXTERNAL REFERENCES: NUCON 00055000
- EJECT 00056000
- * 00057000
- * TABLES/WORKAREAS: AREA PROVIDED BY INTSVC OR BUFFER 00058000
- * PROVIDED BY CALLER 00059000
- * 00060000
- * REGISTER USAGE: 00061000
- * R1 PLIST POINTER AT ENTRY 00062000
- * R2 PLIST POINTER SAVE 00063000
- * R10 RETURN ADDRESS SAVE 00064000
- * R11 BASE REG IN CALLER'S BUFFER OR ZERO 00065000
- * R12 BASE REGISTER 00066000
- * R13 BUFFER/WORK AREA POINTER 00067000
- * R14 RETURN REG AT ENTRY 00068000
- * R15 A(WAIT) OR RETURN CODE 00069000
- * 00070000
- * NOTES: THE COMMAND CODES THAT ARE PUT IN THE CCWS ARE BASED ON THE 00071000
- * FIRST CHARACTER OF THE LINE TO BE PRINTED. IF THIS 00072000
- * CHARACTER IS AN ASA DEFINED CODE, APPROPRIATE CCWS ARE 00073000
- * BUILT TO SKIP OR SPACE AS NEEDED, THEN PRINT. IF THE 00074000
- * CHARACTER IS ITSELF A VALID MACHINE CCW COMMAND CODE, A 00075000
- * CCW IS BUILT USING THE CHARACTER AS THE COMMAND CODE. 00076000
- * IF THE CHARACTER IS NOT RECOGNIZED AS EITHER ASA OR 00077000
- * MACHINE CODE, A CCW WITH THE MACHINE CODE X'09' IS BUILT, 00078000
- * TO SPACE 1 AFTER PRINTING. 00079000
- * 00080000
- * THERE ARE TWO CHARACTERS, X'C1' AND X'C3', THAT ARE VALID 00081000
- * BOTH AS ASA CODES AND AS MACHINE CODES. IF THE HALFWORD 00082000
- * AT 12 INTO THE PLIST CONTAINS 0, THE ASA CODES ARE CHECKED 00083000
- * BEFORE THE MACHINE CODES, AND THEREFORE X'C1' AND X'C3' WILL 00084000
- * BE INTERPRETED AS ASA CODES. IF THE HALFWORD IS EQUAL TO 1, 00085000
- * ASA CODES ARE NOT CHECKED AT ALL, SO X'C1' AND X'C3' ARE 00086000
- * INTERPRETED AS MACHINE CODES. NOTE THAT IF THE HALFWORD 00087000
- * EQUALS 0, ALL ASA CODES AND ALL MACHINE CODES EXCEPT X'C1' 00088000
- * AND X'C3' ARE RECOGNIZED, BUT IF THE HALFWORD EQUALS 1, 00089000
- * ONLY MACHINE CODES ARE RECOGNIZED. 00090000
- * 00091000
- * 00092000
- * OPERATION: 00093000
- * DMSPIO(PRINTR) - A CHAIN OF 3 STOCK CCWS IS MOVED INTO 00094000
- * THE WORK AREA PROVIDED BY INTSVC. THESE CCWS ARE SPACE, 00095000
- * PRINT, AND NOP. THE FIRST CHARACTER OF THE LINE TO BE 00096000
- * PRINTED IS ANALYZED TO DETERMINE WHAT CCW COMMANDS TO USE. 00097000
- * THE STOCK CCWS ARE MODIFIED WITH WITH THESE COMMANDS. IF 00098000
- * ONLY ONE CCW IS NEEDED TO PERFORM THE REQUESTED FUNCTION, 00099000
- * THE SECOND CCW IS USED. IF THE GIVEN CODE IS AN IMMEDIATE 00100000
- * MACHINE CODE, NO DATA ARE PRINTED. THE LAST CCW IN THE 00101000
- * CHAIN IS A NOP TO FORCE CHANNEL END AND DEVICE END TO COME 00102000
- * TOGETHER. WHEN THE CCWS ARE SET UP, THE CAW IS SET TO 00103000
- * POINT TO THE CHAIN, AND A START I/O IS ISSUED TO THE 00104000
- * VIRTUAL PRINTER. DMSIOW (WAIT) IS CALLED TO WAIT FOR 00105000
- * DEVICE END. THE STATUS AND, IF NECESSARY, THE SENSE 00106000
- * INFORMATION, IS ANALYZED. ANY ERRORS ENCOUNTERED ARE 00107000
- * RETURNED TO THE CALLER. 00108000
- EJECT 00109000
- * 00110000
- * DMSPIOCC - TO USE DMSPIOCC, THE CALLER MUST PROVIDE A 00111000
- * 4096-BYTE BUFFER ON A PAGE BOUNDARY. THE BUFFER MUST 00112000
- * BE IN THE FOLLOWING FORMAT: 00113000
- * 00114000
- * PAGE BOUNDARY +--------+--------+ 00115000
- * | BUFCTR | BATCTR | 00116000
- * +8 +--------+--------+ 00117000
- * | | | 00118000
- * +16 +--------+--------+ 00119000
- * | BUFDATA | 00120000
- * | | 00121000
- * | | 00122000
- * | (ETC.) | 00123000
- * 00124000
- * WHERE 'BUFCTR' IS A FULLWORD CONTAINING THE ADDRESS OF THE 00125000
- * NEXT AVAILABLE LOCATION IN THE BUFFER, AND 'BUFDATA' IS 00126000
- * THE FIRST DATA LOCATION, AND BATCTR IS A FULLWORD USED 00127000
- * FOR CMS BATCH ACCOUNTING. 00128000
- * 00129000
- * A CHAIN OF 3 STOCK CCWS IS MOVED INTO THE CALLER'S BUFFER, 00130000
- * AND THE FIRST CHARACTER OF THE LINE IS ANALYZED AS 00131000
- * DESCRIBED ABOVE TO DETERMINE THE CCW COMMAND CODES TO BE 00132000
- * USED. IF ONLY ONE CCW IS NEEDED, THE FIRST ONE IS USED. 00133000
- * WHEN THE CCWS ARE SET UP, THE DATA ARE MOVED INTO THE 00134000
- * CALLER'S BUFFER, PRECEDED BY A TIC CCW THAT POINTS TO THE 00135000
- * NEXT DOUBLEWORD ADDRESS BEYOND THE DATA. THE CALLER'S 00136000
- * BUFCTR IS UPDATED TO POINT TO THE NEXT AVAILABLE 00137000
- * LOCATION. 00138000
- * 00139000
- * DMSPIOSI - TO USE DMSPIOSI, THE CALLER MUST PROVIDE 00140000
- * A BUFFER IN THE FORMAT DESCRIBED ABOVE. THE BUFFER 00141000
- * CONTAINS CHAINED CCWS, TICS AROUND DATA, AND DATA. 00142000
- * SINCE ALL CCWS PUT IN THE BUFFER BY DMSPIOCC HAVE THE 00143000
- * COMMAND CHAIN FLAG ON, THE CALLER SHOULD MOVE A NOP 00144000
- * INTO THE END OF THE BUFFER BEFORE CALLING DMSPIOSI. 00145000
- * WHEN DMSPIOSI IS ENTERED, THE CAW IS SET TO POINT TO 00146000
- * THE BEGINNING OF THE CCW CHAIN, AND A START I/O IS 00147000
- * ISSUED TO THE VIRTUAL PRINTER. DMSIOW (WAIT) IS CALLED 00148000
- * TO WAIT FOR DEVICE END. THE STATUS AND, IF NECESSARY, 00149000
- * THE SENSE INFORMATION, IS ANALYZED. IF ERRORS ARE DETECTED, 00150000
- * THEY ARE RETURNED TO THE CALLER. 00151000
- * 00152000
- *. 00153000
- ********************************************************************* 00154000
- EJECT 00155000
- *********************************************************************** 00156000
- * 00157000
- * START OF PROGRAM 00158000
- * 00159000
- *********************************************************************** 00160000
- SPACE 1 00161000
- DMSPIO START 0 00162000
- ENTRY PRINTR 00163000
- PRINTR EQU DMSPIO 00164000
- LR R12,R15 ESTABLISH ADDRESSABILITY 00165000
- USING DMSPIO,R12 00166000
- USING NUCON,0 00167000
- SR R11,R11 R11 = 0 WILL INDICATE WE ENTERED HERE 00168000
- B JOIN 00169000
- SPACE 1 00170000
- ENTRY DMSPIOCC 00171000
- DMSPIOCC EQU * 00172000
- LR R12,R15 GET SAME ADDRESSABILITY AS ABOVE 00173000
- LA R15,DMSPIOCC-DMSPIO ... 00174000
- SR R12,R15 NOW IT IS CORRECT 00175000
- L R11,16(,R1) ADDRESS OF CALLER'S BUFFER IN R11 00176000
- USING BUFSECT,R11 ADDRESSABILITY IN CALLER'S BUFFER 00177000
- L R13,BUFCTR NEXT AVAILABLE BUFFER ADDRESS IN R13 00178000
- B JOIN 00179000
- SPACE 1 00180000
- ENTRY DMSPIOSI 00181000
- DMSPIOSI EQU * 00182000
- LR R12,R15 GET SAME ADDRESSABILITY AS ABOVE 00183000
- LA R15,DMSPIOSI-DMSPIO ... 00184000
- SR R12,R15 NOW IT IS CORRECT 00185000
- LR R10,R14 SAVE RETURN ADDRESS IN R10 00186000
- L R11,8(,R1) ADDRESS OF BUFFER IN R11 00187000
- LA R3,BUFDATA ADDRESS OF DATA START IN R3 00188000
- B PRINGO GO DO SIO - NO CCW BUILD 00189000
- SPACE 1 00190000
- SPACE 1 00191000
- JOIN EQU * 00192000
- LR R10,R14 SAVE RETURN ADDRESS IN R10 00193000
- LR R2,R1 KEEP ADDRESS OF PLIST IN R2 00194000
- * 00195000
- * LENGTH OF LINE TO PRINT INTO R7... 00196000
- * 00197000
- L R7,12(R2) LOW ORDER HALFWORD IS THE LENGTH 00198000
- N R7,=A(X'FFFF') ENSURE IT'S NOT A NEGATIVE NUMBER 00199000
- BZ NORMRET0 RETURN IMMEDIATELY IF NOTHING TO DO 00200000
- LA R15,151 MAXIMUM ALLOWABLE LENGTH 00201000
- CR R7,R15 IS HIS TOO BIG? 00202000
- BH ERROR1 IF SO, THAT'S ERROR 1 00203000
- BCTR R7,0 DECREMENT TO ALLOW FOR CARRIAGE CONTROL 00204000
- * 00205000
- * MOVE CCWS INTO STORAGE PROVIDED BY INTSVC OR INTO 00206000
- * BUFFER IF CALLED BY BALR (TO KEEP IT REENTRANT)... 00207000
- * 00208000
- MVC 0(24,R13),CCW MOVE CCWS INTO R13 AREA 00209000
- SPACE 3 00210000
- *********************************************************************** 00211000
- * 00212000
- * DEAL WITH CARRIAGE CONTROL CHARACTER... 00213000
- * 00214000
- *********************************************************************** 00215000
- SPACE 1 00216000
- L R6,8(,R2) LOOK AT GIVEN CARRIAGE CONTROL CHARACTER 00217000
- CLC 12(2,R2),=XL2'0001' WAS MACH CODE SPECIFIED? 00218000
- BE MAC YES, BYPASS ASA CHECK 00219000
- * 00220000
- * CHECK FOR CHARACTERS 'BLANK','0','-','A,B,C', AND '+'. 00221000
- * 00222000
- CLI 0(R6),C' ' IS CONTROL CHAR BLANK? 00223000
- BE PRINDEF BRANCH IF SO - USE DEFINED ASA CONTROL 00224000
- BL MAC (OR GO DEAL WITH MACHINE CODES) 00225000
- LA R15,X'13' READY FOR SPACE 2 LINES BEFORE PRINT 00226000
- CLI 0(R6),C'0' IS THAT WHAT HE WANTS? 00227000
- BE PRINCC BRANCH IF SO (GO DO IT) 00228000
- LA R15,X'1B' READY FOR SPACE 3 LINES BEFORE PRINT 00229000
- CLI 0(R6),C'-' IS THAT WHAT HE WANTS? 00230000
- BE PRINCC BRANCH IF SO (GO DO IT) 00231000
- LA R15,2 SET INDEX IN CASE ONE OF THE NEXT 3 00232000
- CLI 0(R6),C'A' DOES HE WANT TO SKIP TO 10? 00233000
- BE ASKIP BRANCH IF SO 00234000
- CLI 0(R6),C'B' DOES HE WANT TO SKIP TO 11? 00235000
- BE BSKIP BRANCH IF SO 00236000
- CLI 0(R6),C'C' DOES HE WANT TO SKIP TO 12? 00237000
- BE CSKIP BRANCH IF SO 00238000
- CLI 0(R6),C'+' DOES HE WANT OVERPRINT? 00239000
- BNE USASKIP BRANCH IF NOT (CHECK REST OF ASA CODES) 00240000
- LTR R7,R7 ARE THERE ANY DATA? 00241000
- BZ NORMRET0 BRANCH IF NOT (NOTHING TO DO) 00242000
- B PRINT GO PRINT WITHOUT CARRIAGE CONTROL 00243000
- SPACE 1 00244000
- ASKIP BCTR R15,0 REDUCE INDEX BY 1 00245000
- BSKIP BCTR R15,0 REDUCE INDEX BY 1 00246000
- CSKIP IC R15,ABC(R15) INDEX INTO TABLE FOR CORRECT CODE 00247000
- B PRINCC GO BUILD THE CCW 00248000
- SPACE 1 00249000
- ABC DC XL4'D3DBE300' SKIP CODES FOR ASA 'A,B,C' 00250000
- SPACE 1 00251000
- * 00252000
- * SEE IF CARRIAGE CONTROL IS ONE OF THE OTHER 00253000
- * ASA CODES (SKIP COMMANDS)... 00254000
- * 00255000
- USASKIP EQU * 00256000
- CLI 0(R6),X'F9' IS CONTROL CHAR TOO HIGH TO BE ASA? 00257000
- BH DEFAULT BRANCH IF SO - USE DEFAULT CARR CONTROL 00258000
- CLI 0(R6),X'F1' IS IT TOO LOW? 00259000
- BL MAC BRANCH IF SO - CHECK MACHINE CODES 00260000
- IC R15,0(R6) CARRIAGE CONTROL CHAR INTO R15 00261000
- SLL R15,3 MOVE CHANNEL VALUE OVER TO RIGHT PLACE 00262000
- LA R15,3(,R15) INDICATE CARRIAGE CONTROL ONLY (NO DATA) 00263000
- B PRINCC 00264000
- * 00265000
- * SEE IF CARRIAGE CONTROL IS A PERMISSABLE MACHINE CODE. 00266000
- * FIRST TEST LITERAL ONES (NOT THE SKIP COMMANDS) 00267000
- * 00268000
- MAC EQU * 00269000
- LA R3,MACODES READY TO LOOP THRU MACHINE CODES 00270000
- LA R4,1 LOOP INCREMENT 00271000
- LA R5,MACODES+L'MACODES-1 LOOP LIMIT 00272000
- SPACE 1 00273000
- MACLOOP EQU * LOOP THRU LITERAL MACHINE CODES 00274000
- CLC 0(1,R6),0(R3) IS THIS IT? 00275000
- BE MACFOUND BRANCH IF SO 00276000
- BXLE R3,R4,MACLOOP LOOP BACK 00277000
- * 00278000
- * SEE IF CONTROL CHARACTER IS A 'SKIP' MACHINE CODE 00279000
- * 00280000
- TM 0(R6),X'81' COULD IT BE 'SKIP TO CHANNEL N'? 00281000
- BNO DEFAULT BRANCH IF NOT - USE DEFAULT CONTROL CHAR 00282000
- TM 0(R6),X'04' MAKE SURE 00283000
- BO DEFAULT BRANCH IF NOT VALID FOR SKIP COMMAND 00284000
- CLI 0(R6),X'E3' IS IT TOO HIGH? 00285000
- BH DEFAULT BRANCH IF SO - USE DEFAULT 00286000
- CLI 0(R6),X'89' IS IT TOO LOW? 00287000
- BNL MACFOUND BRANCH IF OK TO USE AS IS 00288000
- SPACE 1 00289000
- DEFAULT MVI 0(R6),X'09' USE MACH CODE TO PRINT, THEN SPACE 00290000
- MACFOUND EQU * WE'VE FOUND A VALID MACHINE CODE 00291000
- TM 0(R6),X'03' IS IT AN IMMEDIATE COMMAND? 00292000
- BNO MACDATA NO, PRINT WHATEVER DATA IS GIVEN 00293000
- SR R7,R7 YES, NO DATA WILL BE PRINTED 00294000
- MACDATA EQU * 00295000
- MVC 8(1,R13),0(R6) REPLACE COMMAND CODE IN 2ND CCW 00296000
- B PRINT GO DO IT 00297000
- EJECT 00298000
- ********************************************************************** 00299000
- * 00300000
- * COME HERE TO PERFORM PRELIMINARY CARRIAGE CONTROL 00301000
- * 00302000
- *********************************************************************** 00303000
- SPACE 1 00304000
- PRINCC EQU * 00305000
- STC R15,0(,R13) STORE COMMAND CODE IN FIRST CCW 00306000
- SPACE 1 00307000
- PRINDEF EQU * (COME HERE TO SPACE 1 BEFORE PRINT) 00308000
- LTR R11,R11 BUILDING BUFFER ONLY? 00309000
- BNZ PRINDEF1 BRANCH IF SO 00310000
- LR R3,R13 READY TO START FROM BEGINNING OF CCWS 00311000
- LTR R7,R7 ARE THERE ANY DATA TO PRINT? 00312000
- BNZ PRINSET BRANCH IF SO - SET UP 2ND CCW 00313000
- * 00314000
- * IF CARRIAGE CONTROL ALONE IS REQUIRED, USE SECOND CCW 00315000
- * INSTEAD OF THE FIRST 00316000
- * 00317000
- MVC 8(8,R13),0(R13) MOVE COMMAND TO 2ND CCW 00318000
- * 00319000
- * DROP THROUGH TO 'PRINT', WHICH, SINCE R7=0, WILL SET R3 00320000
- * TO ADDRESS OF 2ND CCW AND BRANCH TO 'PRINGO' 00321000
- * 00322000
- SPACE 1 00323000
- *********************************************************************** 00324000
- * 00325000
- * COME HERE TO PERFORM PRINTING WITHOUT PRELIMINARY CARRIAGE 00326000
- * CONTROL, OR DROP THROUGH FROM ABOVE TO PERFORM CARRIAGE 00327000
- * CONTROL WITHOUT PRINTING ANY DATA... 00328000
- * 00329000
- ********************************************************************** 00330000
- SPACE 1 00331000
- PRINT EQU * 00332000
- LTR R11,R11 BUILDING BUFFER ONLY? 00333000
- BNZ PRINT1 BRANCH IF SO 00334000
- LA R3,8(,R13) READY TO START WITH 2ND CCW 00335000
- LTR R7,R7 ARE THERE ANY DATA TO PRINT? 00336000
- BZ PRINGO BRANCH IF NOT - USE A BLANK 00337000
- SPACE 1 00338000
- PRINSET EQU * SET UP CCW FOR PRINTING THE LINE 00339000
- IC R15,8(,R13) SAVE COMMAND CODE IN 2ND CCW 00340000
- LA R6,1(,R6) ADDRESS OF LINE TO PRINT 00341000
- ST R6,8(,R13) STORE IN CCW 00342000
- STC R15,8(,R13) RESTORE COMMAND CODE 00343000
- STH R7,14(,R13) STORE LENGTH ALSO 00344000
- B PRINGO GO ISSUE START I/O 00345000
- EJECT 00346000
- *********************************************************************** 00347000
- * 00348000
- * COME HERE TO MOVE DATA INTO CALLER'S BUFFER. 00349000
- * 00350000
- * STOCK CCWS HAVE BEEN MOVED INTO THE BUFFER. 00351000
- * NOW, FINISH BUILDING THESE CCWS, ADD APPROPRIATE 00352000
- * TIC CCW AROUND THE DATA, AND MOVE THE DATA TO THE 00353000
- * BUFFER. 00354000
- * 00355000
- *********************************************************************** 00356000
- SPACE 1 00357000
- PRINDEF1 EQU * COME HERE FOR DEFINED CCWS FOR BUFFER 00358000
- LA R13,8(,R13) 1ST CCW OK - POINT R13 TO 2ND CCW 00359000
- LTR R7,R7 ARE THERE ANY DATA? 00360000
- BNZ PRINSET1 BRANCH IF SO - SET UP 2ND CCW 00361000
- *** CARRIAGE CONTROL ONLY - LEAVE 1ST CCW AS IS 00362000
- ST R13,BUFCTR UPDATE BUFFER ADDRESS 00363000
- B NORMRETC 00364000
- SPACE 1 00365000
- PRINT1 EQU * COME HERE TO USE ONLY 1 CCW 00366000
- MVC 0(8,R13),8(R13) MOVE COMMAND TO 1ST CCW 00367000
- LTR R7,R7 ARE THERE ANY DATA? 00368000
- BNZ PRINSET1 BRANCH IF SO 00369000
- TM 0(R13),X'03' IMMEDIATE COMMAND? 00370000
- BO IMMED IF SO, NO DATA NEEDED 00371000
- LA R6,NODATA NO DATA GIVEN, AND NOT IMM. CMD. @VA05935 00372000
- LA R7,1 ...USE A BLANK AS DATA 00373000
- B PRINSET1 ...AND PUT SAME IN BUFFER 00374000
- IMMED LA R8,8(,R13) NO DATA - ADDRESS AFTER CCW IN R8 00375000
- ST R8,BUFCTR UPDATE RESUME ADDRESS IN BUFFER 00376000
- B NORMRETC 00377000
- * 00378000
- * COME HERE IF THERE ARE DATA TO MOVE TO BUFFER. R13 POINTS 00379000
- * TO EITHER 1ST OR 2ND CCW. THIS CCW WILL BE FILLED IN FOR 00380000
- * THE DATA TO PRINT. R6 POINTS TO THE DATA, AND R7, WHICH 00381000
- * IS NONZERO, CONTAINS THE COUNT. 00382000
- * 00383000
- PRINSET1 EQU * 00384000
- LA R3,16(,R13) FILL IN DATA ADDRESS IN CCW 00385000
- STCM R3,B'0111',1(R13) ... 00386000
- STH R7,6(R13) FILL IN BYTE COUNT IN CCW 00387000
- LA R3,16(R7,R13) BASIC CONTINUATION ADDRESS IN R3 00388000
- BCTR R7,0 DECREMENT LENGTH FOR EXECUTE 00389000
- EX R7,BUFLOAD MOVE DATA TO BUFFER 00390000
- SR R9,R9 ZERO R9 00391000
- LA R9,7 COMPUTE ACTUAL... 00392000
- AR R3,R9 ...CONTINUATION ADDRESS... 00393000
- SRL R3,3 ...BY ROUNDING UP TO NEXT... 00394000
- SLL R3,3 ...DOUBLEWORD BOUNDARY 00395000
- ST R3,8(,R13) BUILD TIC CCW 00396000
- MVI 8(R13),X'08' AND MOVE IN COMMAND CODE 00397000
- ST R3,BUFCTR UPDATE CONTINUATION ADDRESS 00398000
- B NORMRETC 00399000
- SPACE 1 00400000
- BUFLOAD MVC 16(0,R13),1(R6) MOVE DATA INTO BUFFER 00401000
- EJECT 00402000
- ********************************************************************** 00403000
- * 00404000
- * COME HERE TO PERFORM START I/O AND ANALYZE STATUS 00405000
- * 00406000
- * R3 POINTS TO CCW 00407000
- * R11 = 0 MEANS WE CAME HERE AFTER ENTERING AT DMSPIO(PRINTR) 00408000
- * AND WE ARE PRINTING A SINGLE LINE 00409000
- * R11 NONZERO MEANS ENTRY WAS MADE AT DMSPIOSI, AND WE ARE 00410000
- * PRINTING THE CALLER'S BUFFER 00411000
- * 00412000
- ********************************************************************** 00413000
- SPACE 1 00414000
- PRINGO EQU * 00415000
- USING PRSECT,R13 00416000
- LA R5,14 ASSUME PRINTER '00E' 00417000
- MVC PRWAITP(20),PWAIT MOVE WAIT PLIST TO KEEP IT REENTRANT 00418000
- LA R1,PRWAITP ADDRESS OF WAIT PLIST IN R1 00419000
- SPACE 1 00420000
- SIO EQU * 00421000
- SR R15,R15 ZERO CSW SAVE FIELD 00422000
- ST R15,PRCSW ... 00423000
- LA R14,SIO SET RETURN VECTOR FOR WAIT 00424000
- LA R4,NORMRET SET RETURN VECTOR FOR TALL 00425000
- ST R3,CAW STORE ADDRESS OF CCW FOR SIO 00426000
- LR R9,R3 SAVE ADDRESS OF CCW @VA07597 00426100
- SIO 0(R5) ISSUE START I/O 00427000
- BC 8,IOWAIT BRANCH IF SUCCESSFULLY STARTED 00428000
- BC 4,CSWSTOR CC1 - CSW STORED 00429000
- BC 2,BUSY CC2 - BUSY 00430000
- B ERR113S CC3 - NOT OPERATIONAL 00431000
- SPACE 1 00432000
- IOWAIT EQU * 00433000
- L R15,=V(WAIT) ADDRESS OF WAIT ROUTINE 00434000
- BALR R14,R15 WAIT FOR INTERRUPT 00435000
- MVC PRCSW(8),CSW MOVE IT TO SAVE AREA 00436000
- TM PRSTAT,X'04' HAVE WE DEVICE END? 00437000
- BO TSTINT YES, SEE KIND OF INTERRUPTS 00438000
- L R15,=V(WAIT) ADDRESS OF WAIT ROUTINE 00439000
- BALR R14,R15 WAIT FOR DEVICE END 00440000
- OC PRSTAT(2),CSW+4 OR IN THE STATUS BYTES 00441000
- SPACE 1 00442000
- TSTINT EQU * 00443000
- CLC ZERO,PRCOUNT ANY RESIDUAL COUNT? 00444000
- BE TESTCSW NO RESIDUAL COUNT, CHECK CSW 00445000
- LA R8,8 00446000
- L R15,PRCSW ADDRESS OF NEXT CCW IN R15 00447000
- SR R15,R8 ADDRESS OF THIS CCW IN R15 00448000
- TM 0(R15),X'03' CHECK COMMAND TYPE 00449000
- BO TESTCSW IMMEDIATE COMMAND - SKIP CHECK 00450000
- LA R15,1 RETURN ERROR 1 00451000
- B ERRET RETURN TO CALLER 00452000
- SPACE 1 00453000
- TESTCSW EQU * 00454000
- TM PRSTAT,X'02' HAVE WE UNIT CHECK? 00455000
- BO FEEL YES, CHECK SENSE BYTES 00456000
- TM PRSTAT,X'01' HAVE WE UNIT EXCEPTION? 00457000
- BNO TALL NO, TEST FOR OTHER ERRORS 00458000
- LTR R11,R11 PRINTING FROM BUFFER? 00459000
- BZ ERROR2 NO,ERROR2 00460000
- TM DOSFLAGS,EIGHT IS THIS DOS PIO CALL? @V305066 00460100
- BO ERROR2 YES, BREAK CCW CHAIN ON UE @V305066 00460200
- BAL R8,RESTART YES, RESTART THE BUFFER 00461000
- ERROR2 LA R15,2 RETURN 'CHAN 12 SENSED' 00462000
- B ERRET 00463000
- SPACE 1 00464000
- TALL EQU * 00465000
- TM PRSTAT+1,X'3F' ANY OTHER ERRORS? 00466000
- BCR 8,R4 NO,RETURN VIA R4 00467000
- B ERROR5 ELSE, UNKNOWN ERROR RETURNED 00468000
- SPACE 1 00469000
- CSWSTOR EQU * 00470000
- LA R4,ERROR5 IN CASE OF UNKNOWN ERROR 00471000
- MVC PRSTAT(2),CSW+4 SAVE STORED CSW (BYTES 4,5 ONLY) 00472000
- CLC PRSTAT(2),=X'0C00' IS CSWSTOR FOR NOP? @VA03714 00472300
- BE NORMRET YES, GOTO NORMAL RETURN @VA03714 00472600
- TM PRSTAT,X'0C' NICE CE+DE? 00473000
- BM WAITDE CE GIVEN - WAIT FOR DE 00474000
- B TESTCSW TEST THE CSW STATUS 00475000
- SPACE 1 00476000
- WAITDE EQU * 00477000
- L R15,=V(WAIT) ADDRESS OF WAIT ROUTINE 00478000
- BALR R14,R15 WAIT FOR DE 00479000
- OC PRSTAT(2),CSW+4 SAVE STATUS BITS IF ANY 00480000
- B TESTCSW TEST THE CSW STATUS 00481000
- SPACE 1 00482000
- BUSY EQU * 00483000
- L R15,=V(WAIT) ADDRESS OF WAIT ROUTINE 00484000
- BR R15 WAIT FOR INTERRUPT 00485000
- SPACE 1 00486000
- FEEL EQU * 00487000
- LA R15,PRSNCCW LOCATION FOR SENSE CCW, NOP 00488000
- MVC 0(16,R15),SENCCW PUT THE SENSE CCW THERE 00489000
- ST R15,CAW STORE ADDRESS FOR SIO 00490000
- LA R15,PRSENFO LOCATION FOR SENSE BYTE 00491000
- MVI 0(R15),X'FF' INITIALIZE WITH BAD NEWS 00492000
- ST R15,PRSNCCW ADDRESS INTO CCW 00493000
- MVI PRSNCCW,X'04' CHANGE COMMAND CODE 00494000
- SIO 0(R5) READ THE SENSE BYTE 00495000
- BNE *-4 00496000
- TIO 0(R5) THEN WAIT UNTIL... 00497000
- BC 2,*-4 ...IT'S DONE 00498000
- TM 0(R15),X'40' IS INTERVENTION REQUIRED? 00499000
- BO ERROR4 PRINT MESSAGE IF SO @VA14336 00500000
- TM 0(R15),X'3C' DATA ERRORS? 00501000
- BNZ ERR145S 00502000
- TM 0(R15),X'01' CHAN 9 SENSED? 00503000
- BZ ERROR5 NO, DON'T KNOW WHAT IT IS 00504000
- LTR R11,R11 PRINTING FROM BUFFER? 00505000
- BZ ERROR3 NO, ERROR3 00506000
- TM DOSFLAGS,EIGHT IS THIS DOS PIO CALL? @V305066 00506100
- BO ERROR3 YES, BREAK CCW CHAIN ON UC @V305066 00506200
- BAL R8,RESTART YES, RESTART THE BUFFER 00507000
- ERROR3 LA R15,3 RETURN WITH CHAN 9 SENSED 00508000
- B ERRET 00509000
- SPACE 1 00510000
- RESTART EQU * ATTEMPT BUFFER RESTART 00511000
- L R15,PRCSW 1ST WORD OF CSW IN R15 00512000
- LA R3,0(,R15) ADDRESS OF NEXT CCW IN R3 00513000
- LTR R3,R3 ...WILL BE 0 IF 'CSW STORED' 00514000
- BZ RETRYIO CSW STORED ON SIO @VA07597 00515110
- CLI 0(R3),X'08' IS NEXT CCW A TIC? @VA02370 00515300
- BNE SIO NO, GO AHEAD AND RESTART @VA02370 00515400
- ICM R3,7,1(R3) PICK UP TIC-TO ADDRESS @VA02370 00515500
- B SIO AND RESTART ON THAT @VA02370 00515600
- RETRYIO EQU * @VA07597 00515700
- LR R3,R9 PICKUP CCW ADD FOR RETRY @VA07597 00515800
- B SIO GO RETRY SIO @VAO7597 00515900
- EJECT 00517000
- ********************************************************************** 00518000
- * 00519000
- * ERROR MESSAGES 00520000
- * 00521000
- ********************************************************************** 00522000
- SPACE 1 00523000
- ERR113S EQU * 00524000
- LA R3,NATT 00525000
- LA R4,113 00526000
- BAL R8,ERRMSG @VA14336 00527000
- LA R15,100 @VA14336 00527300
- B ERRET0 @VA14336 00527600
- SPACE 1 00528000
- ERROR4 EQU * @VA14336 00528100
- LA R3,INT @VA14336 00528200
- LA R4,145 @VA14336 00528300
- BAL R8,ERRMSG @VA14336 00528400
- LA R15,4 @VA14336 00528500
- B ERRET0 @VA14336 00528600
- SPACE 1 @VA14336 00528700
- ERR145S EQU * 00529000
- LA R3,INT 00530000
- LA R4,145 00531000
- BAL R8,ERRMSG @VA14336 00532000
- LA R15,100 @VA14336 00532300
- B ERRET0 @VA14336 00532600
- SPACE 1 00533000
- ERRMSG EQU * 00534000
- DMSERR MF=(E,'SYS'),LET=S,NUM=(4),TEXTA=(3) 00535000
- BR R8 @VA14336 00536000
- SPACE 1 00538000
- ERROR1 EQU * COME HERE FOR LINE TOO LONG 00539000
- LA R15,1 00540000
- B ERRET0 00541000
- SPACE 1 00542000
- ERROR5 EQU * COME HERE IF ANY OTHER I/O ERROR 00543000
- LA R15,5 00544000
- B ERRET 00545000
- EJECT 00546000
- ********************************************************************* 00547000
- * 00548000
- * RETURNS 00549000
- * 00550000
- ********************************************************************* 00551000
- SPACE 1 00552000
- NORMRETC EQU * 00553000
- L R3,BATCTR 00554000
- LA R4,1 00555000
- AR R3,R4 00556000
- ST R3,BATCTR 00557000
- SPACE 1 00558000
- NORMRET0 EQU * NORMAL RETURN 00559000
- SR R15,R15 ZERO RETURN CODE 00560000
- ERRET0 LR R14,R10 RESTORE RETURN ADDRESS 00561000
- BR R14 RETURN 00562000
- SPACE 1 00563000
- NORMRET EQU * NORMAL RETURN 00564000
- SR R15,R15 ZERO RETURN CODE 00565000
- ERRET TM BATFLAGS,BATRUN+BATNOEX IS CMS BATCH RUNNING? 00566000
- BM BATTERUP BRANCH IF SO 00567000
- LR R14,R10 RESTORE RETURN ADDRESS 00568000
- BR R14 RETURN 00569000
- SPACE 1 00570000
- BATTERUP EQU * COME HERE IF BATCH IS RUNNING 00571000
- L R6,ABATLIMT ADDRESSABILITY IN BATCH LIMITS AREA 00572000
- USING BATLSECT,R6 ... 00573000
- LH R7,BATPRTC CURRENT PRINT LINE COUNT 00574000
- LA R8,1 LINE COUNT THIS PRINTING 00575000
- LTR R11,R11 ...IF NOT PRINTING BUFFER 00576000
- BZ BATIK 00577000
- L R8,BATCTR LINE COUNT IF PRINTING BUFFER 00578000
- BATIK AR R7,R8 UPDATE BATCH PRINT COUNT 00579000
- LH R8,BATPRTL GET LIMIT AS A FULLWORD 00580000
- CR R7,R8 ARE WE OVER THE LIMIT? 00581000
- BNH BATHOS NO, UPDATE BATCH'S FIELD, RETURN 00582000
- OI BATFLAGS+1,BATXLIM+BATXPRT YES, SIGNAL TROUBLE 00583000
- L R15,ABATABND ...AND ABEND BATCH 00584000
- BR R15 ... 00585000
- BATHOS STH R7,BATPRTC UPDATE PRINT COUNT 00586000
- LR R14,R10 RESTORE RETURN ADDRESS 00587000
- BR R14 RETURN 00588000
- EJECT 00589000
- *********************************************************************** 00590000
- * 00591000
- * DATA 00592000
- * 00593000
- *********************************************************************** 00594000
- SPACE 1 00595000
- * 00596000
- * LEGAL MACHINE CODES (EXCLUDING CHANNEL CODES)... 00597000
- * 00598000
- DS 0F 00599000
- MACODES DC X'010911190B131B03' 00600000
- SPACE 1 00601000
- DS 0F 00602000
- BLANK DC X'40000000' 00603000
- DS 0H @VA05935 00603300
- NODATA DC X'0040' @VA05935 00603600
- SPACE 1 00604000
- * 00605000
- * DUMMY CCWS - MOVED INTO R13 AREA BEFORE EXECUTION... 00606000
- * 00607000
- SPACE 1 00608000
- CCW CCW X'0B',0,CC+SILI,1 CCW FOR CARRIAGE CONTROL 00609000
- CCW X'01',BLANK,CC+SILI,1 2ND OR 'PRIMARY' CCW 00610000
- CCW X'03',0,SILI,1 (NO-OP FOR EFFICIENCY) 00611000
- SPACE 1 00612000
- * 00613000
- * WAIT PLIST - MOVED TO R13 AREA BEFORE EXECUTION... 00614000
- * 00615000
- PWAIT DS 0F 00616000
- DC CL8'WAIT' 00617000
- DC CL4'PRN1' 00618000
- DC F'0' 00619000
- DC CL4'PRN1' (LET WAIT OFF THE HOOK) 00620000
- SPACE 1 00621000
- * 00622000
- * SENSE CCW - MOVED TO R13 AREA BEFORE EXECUTION... 00623000
- * 00624000
- SPACE 1 00625000
- SENCCW CCW X'04',*-*,CC+SILI,1 00626000
- CCW X'03',0,SILI,1 NOP FOR EFFICIENCY 00627000
- ZERO DC H'0' 00628000
- SPACE 1 00629000
- NATT DC AL1(L'NATTMS) 00630000
- NATTMS DC C'PRINTER NOT ATTACHED' 00631000
- * 00632000
- INT DC AL1(L'INTMS) 00633000
- INTMS DC C'INTERVENTION REQUIRED ON PRINTER' 00634000
- * 00635000
- CC EQU X'40' 00636000
- SILI EQU X'20' 00637000
- EIGHT EQU X'08' DOS PRINTER INDICATOR IN NUCON @V305066 00637100
- * 00638000
- LTORG 00639000
- EJECT 00640000
- ********************************************************************** 00641000
- * 00642000
- * DSECTS 00643000
- * 00644000
- ********************************************************************** 00645000
- SPACE 1 00646000
- PRSECT DSECT 00647000
- PRCCWS DS 3D LOCATION FOR STOCK CCWS 00648000
- PRWAITP DS 5F AREA FOR WAIT PLIST 00649000
- PRSENFO DS 1F SENSE AREA 00650000
- PRSNCCW DS 2D SENSE CCW, NOP 00651000
- PRCSW DS 4B CSW SAVE AREA... 00652000
- PRSTAT DS 2B ...STATUS BYTES... 00653000
- PRCOUNT DS 2B ...COUNT... 00654000
- PRMISC DS 2D 00655000
- SPACE 1 00656000
- BUFSECT DSECT 00657000
- BUFCTR DC A(*-*) 00658000
- BATCTR DC A(*-*) 00659000
- DS 2F 00660000
- BUFDATA DS 500D 00661000
- SPACE 1 00662000
- BATLIMIT 00663000
- EJECT 00664000
- NUCON 00665000
- REGEQU 00666000
- END 00667000
ibm/vm370-lib/cms/dmspio.assemble_src.txt ยท Last modified: 2023/08/06 13:35 by Site Administrator