ibm:vm370-lib:cp:dmkdrd.assemble_src
Table of Contents
DMKDRD Source
References
- Fixes Applied : 10
- This Source Date : Thursday, December 7, 1978
- Last Fix ID : [HRC106DK]
Source Listing
- DMKDRD.ASSEMBLE.txt
- DRD TITLE 'DMKDRD (CP) VM/370 - RELEASE 6' 00001000
- ISEQ 73,80 VALIDATE SEQUENCING 00002000
- COPY OPTIONS 00003000
- COPY LOCAL 00004000
- *. 00005000
- * MODULE NAME - 00006000
- * 00007000
- * DMKDRD 00008000
- * 00009000
- * CONTENTS - 00010000
- * 00011000
- * DMKDRDER - DIAGNOSE INTERFACE TO INPUT SPOOL FILES 00012000
- * DMKDRDMP - DIAGNOSE READ OF SYSTEM DUMP SPOOL FILE 00013000
- * DMKDRDSY - DIAGNOSE READ OF SYSTEM SYMBOL TABLE 00014000
- * DMKDRDDD - DELETE SYSTEM DUMP SPOOL FILE 00015000
- *. 00016000
- SPACE 2 00017000
- DMKDRD START 00018000
- USING SAVEAREA,R13 00019000
- USING DMKDRD,R12 00020000
- USING VMBLOK,R11 00021000
- USING SFBLOK,R10 00022000
- USING VSPLCTL,R9 00023000
- USING VDEVBLOK,R8 00024000
- USING PSA,0 00025000
- SPACE 2 00026000
- EXTRN DMKSCNVU,DMKRPAGT,DMKVSPCR 00027000
- EXTRN DMKSYSOW,DMKHVCPC,DMKPGTSD 00028000
- EXTRN DMKPSASP CHECK FOR STORAGE PROTECTION @V202232 00029000
- EXTRN DMKSYM CP SYSTEM SYMBOL TABLE 00030000
- EXTRN DMKPGTVG,DMKPGTVR @V293598 00031000
- EJECT 00032000
- *. 00033000
- * SUBROUTINE NAME - 00034000
- * 00035000
- * DMKDRDER 00036000
- * 00037000
- * FUNCTION - 00038000
- * 00039000
- * TO MANIPULATE INPUT SPOOL FILES VIA VIRTUAL DIAGNOSE 00040000
- * CODE X'0014'. 00041000
- * 00042000
- * ATTRIBUTES - 00043000
- * 00044000
- * RE-ENTRANT, PAGEABLE, CALLED VIA SVC FROM DMKHVCAL 00045000
- * 00046000
- * ENTRY POINT - 00047000
- * 00048000
- * DMKDRDER 00049000
- * 00050000
- * ENTRY CONDITIONS - 00051000
- * 00052000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00053000
- * GPR 12 = ADDRESS OF DMKDRDER 00054000
- * GPR 11 = ADDRESS OF VMBLOK 00055000
- * GPR 6 = ADDRESS OF DIAGNOSE 'R2' VALUE 00056000
- * GPR 5 = ADDRESS OF DIAGNOSE 'R1' VALUE 00057000
- * 00058000
- * EXIT CONDITIONS - 00059000
- * 00060000
- * GPRS 1,3-15 UNCHANGED 00061000
- * GPR 2 = 0 - CONDITION CODE IS SET FOR VIRTUAL MACHINE 00062000
- * GPR 2 > 0 - SIMULATE PROGRAM INTERRUPT FOR VM, AND 00063000
- * AND GPR 0 = INTERRUPT CODE FOR SIMULATED PROGRAM INTERRUPT 00064000
- * 00065000
- * CALLS TO OTHER ROUTINES - 00066000
- * 00067000
- * DMKSCNVU - TO LOCATE VIRTUAL DEVICE BLOCKS 00068000
- * DMKRPAGT - TO READ SPOOL-FILE BUFFER PAGES 00069000
- * DMKVSPCR - TO CLOSE AN ACTIVE SPOOL FILE 00070000
- * DMKFREE - TO OBTAIN FREE STORAGE 00071000
- * DMKPTRAN - TO BRING IN VIRTUAL STORAGE PAGES 00072000
- * DMKPSASP - TO CHECK FOR STORAGE PROTECTION 00073000
- * 00074000
- * EXTERNAL REFERENCES - 00075000
- * 00076000
- * DMKHVCPC - TABLE OF PAGES PER CYLINDER, DASD DEVICES 00077000
- * DMKSYM - SYSTEM SYMBOL TABLE CSECT 00078000
- * 00079000
- EJECT 00080000
- * TABLES / WORK AREAS - 00081000
- * 00082000
- * VDEVBLOK, VSPLCTL, SFBLOK, SPLINK 00083000
- * 00084000
- * REGISTER USAGE - 00085000
- * 00086000
- * GPRS 14, 15 EXTERNAL LINKAGE REGISTERS 00087000
- * GPR 13 = SAVEAREA ADDRESSABILITY 00088000
- * GPR 12 = MODULE BASE REGISTER 00089000
- * GPR 11 = VMBLOK ADDRESSABILITY 00090000
- * GPR 10 = SFBLOK ADDRESSABILITY 00091000
- * GPR 9 = VSPLCTL ADDRESSABILITY 00092000
- * GPR 8 = VDEVBLOK ADDRESSABILITY 00093000
- * GPR 7 = WORK REGISTER 00094000
- * GPR 6 = ADDRESS OF DIAGNOSE 'R2' VALUE 00095000
- * GPR 5 = ADDRESS OF DIAGNOSE 'R1' VALUE 00096000
- * GPRS 0-4 WORK REGISTERS 00097000
- * 00098000
- * OPERATION - 00099000
- * 00100000
- * DIAGNOSE CODE X'0014', PROCESSED BY DMKDRDER, REQUIRES 00101000
- * THREE REGISTER VALUES FROM THE VIRTUAL MACHINE ISSUING 00102000
- * THE DIAGNOSE INSTRUCTION, AS FOLLOWS: 00103000
- * 'R1' = DEPENDS ON FUNCTION SUB-CODE 00104000
- * 'R2' = VIRTUAL ADDRESS OF A SPOOL READER DEVICE 00105000
- * 'R2+1' = FUNCTION SUB-CODE X'000' TO X'018' 00106000
- * 00107000
- * (N.B. - SEE BELOW FOR A DESCRIPTION OF AN ADDITIONAL 00108000
- * SUB-CODE, X'FFF', FOR WHICH THE REGISTER VALUE 'R2' IS 00109000
- * A SPOOL FILE ID NUMBER, RATHER THAN THE VIRTUAL ADDRESS 00110000
- * OF A SPOOL READER DEVICE.) 00111000
- * 00112000
- * THE SUB-CODE IS FIRST EXAMINED FOR VALIDITY, AND A SPECI- 00113000
- * FICATION EXCEPTION PROGRAM INTERRUPT IS GENERATED IF THE 00114000
- * CODE IS UNRECOGNIZED OR NOT A MULTIPLE OF 4. SECONDLY, THE 00115000
- * VIRTUAL DEVICE ADDRESS IS VALIDATED AS TO AVAILABILITY, 00116000
- * CORRECT DEVICE TYPE, ETC. A VIRTUAL CONDITION CODE 3 IS 00117000
- * SET WITH THE FOLLOWING ERROR CODES IN THE USER'S 'R2+1': 00118000
- * CODE = 4 => DEVICE ADDRESS INVALID 00119000
- * CODE = 8 => INVALID DEVICE TYPE 00120000
- * CODE = 12 => DEVICE BUSY WITH 'SIO' I/O 00121000
- * CODE = 16 => FATAL PAGING I/O ERROR 00122000
- * CODE = 20 => DIAGNOSE 14,BUT PAGE IS ALREADY LOCKED FOR I/O 00122100
- * 00123000
- * IF ALL THE ABOVE CHECKS ARE PASSED, THE FUNCTION SUB-CODE 00124000
- * IS DECODED FOR THE FUNCTIONAL SUBROUTINES, AS FOLLOWS: 00125000
- * 00126000
- EJECT 00127000
- * CODE = X'000' READ NEXT SPOOL BUFFER (ACTIVE FILE) 00128000
- * 'R1' = START ADDRESS OF FULL-PAGE VIRTUAL BUFFER 00129000
- * 'R2' = VIRTUAL SPOOL READER ADDRESS 00130000
- * 00131000
- * THE SPECIFIED DEVICE IS CHECKED FOR AN ALREADY ACTIVE FILE, 00132000
- * AND IF THERE IS ONE, THE NEXT FULL-PAGE BUFFER IS MADE 00133000
- * AVAILABLE TO THE VIRTUAL MACHINE VIA A CALL TO DMKRPAGT. 00134000
- * IF THERE IS NO ACTIVE FILE, THE CHAIN OF READER FILES IS 00135000
- * SEARCHED FOR A FILE FOR THE CALLING USER AND CONNECTED TO 00136000
- * THE VIRTUAL DEVICE FOR FURTHER READING. IF NO FILE 00137000
- * IS FOUND, VIRTUAL CONDITION CODE 2 IS SET. WHEN THE END 00138000
- * OF AN ACTIVE FILE IS REACHED, THE DEVICE STATUS SETTINGS 00139000
- * ARE TESTED FOR 'SPOOL CONTINUOUS'. IF NOT SET, VIRTUAL 00140000
- * CONDITION CODE 1 IS SET, INDICATING END OF FILE. IF THE 00141000
- * DEVICE IS SET FOR CONTINUOUS INPUT, THE ACTIVE FILE IS 00142000
- * EXAMINED TO DETERMINE IF IT IS A MULTIPLE-COPY FILE. IF SO, 00143000
- * READING IS RESTARTED AT THE BEGINNING OF THE FILE. IF NOT, 00144000
- * THE FILE IS CLOSED VIA DMKVSPCR AND THE READER CHAIN IS 00145000
- * SEARCHED FOR ANOTHER INPUT FILE. IF NO OTHER FILE IS FOUND, 00146000
- * VIRTUAL CONDITION CODE 1 IS SET. 00147000
- * 00148000
- * CODE = X'004' READ NEXT PRINT SPOOL FILE BLOCK (SFBLOK) 00149000
- * 'R1' = VIRTUAL ADDRESS OF A 13-DBL-WD BUFFER 00150000
- * 'R2' = VIRTUAL SPOOL READER ADDRESS 00151000
- * 00152000
- * IF THE SPECIFIED DEVICE IS IN USE VIA DIAGNOSE, THE VSPLCTL 00153000
- * BLOCK IS CHECKED TO SEE IF THIS IS A REPEATED CALL FOR 00154000
- * PRINTER SFBLOKS. IF YES, THEN THE CHAIN SEARCH CONTINUES 00155000
- * FROM THE POINT WHERE THE LAST SFBLOK WAS GIVEN TO THE VM. 00156000
- * IN THIS CASE, CC = 1 IS SET WHEN THERE ARE NO MORE PRINT 00157000
- * FILES. IF THIS IS THE FIRST CALL FOR AN SFBLOK, OR IF 00158000
- * THERE HAVE BEEN INTERVENING CALLS FOR FILE READING, THE 00159000
- * SPOOL INPUT CHAIN IS SEARCHED FROM THE BEGINNING, AND CC = 2 00160000
- * IS SET IF NO FILES ARE FOUND. 00161000
- * IF A SPOOL FILE IS ALREADY ATTACHED TO THE SPECIFIED @VA12474 00161200
- * VIRTUAL READER, CC = 3, RC = 12 IS SET. @VA12474 00161250
- * NOTE: THE VIRTUAL BUFFER SPECIFIED VIA 'R1' MUST NOT CROSS A 00162000
- * PAGE BOUNDARY OR A SPECIFICATION EXCEPTION WILL RESULT. 00163000
- * 00164000
- * CODE = X'008' READ NEXT PUNCH SPOOL FILE BLOCK (SFBLOK) 00165000
- * 'R1' = VIRTUAL ADDRESS OF A 13-DBL-WD BUFFER 00166000
- * 'R2' = VIRTUAL SPOOL READER ADDRESS 00167000
- * PROCESSING FOR CODE 8 IS THE SAME AS FOR CODE 4, EXCEPT 00168000
- * THAT ONLY CARD-IMAGE INPUT FILES ARE PROCESSED. 00169000
- * NOTE: FOR BOTH CODES 4 AND 8, THE FORMAT DEFINITION FOR A VM/370 00170000
- * SFBLOK CAN BE FOUND IN THE COPY FILE 'SPOOL' IN THE SYSTEM 00171000
- * MACRO LIBRARY. 00172000
- * 00173000
- EJECT 00174000
- * CODE = X'00C' SELECT SPECIFIC FILE BY FILE ID (SFBFILID) 00175000
- * 'R1' = FILE IDENTIFIER OF REQUESTED FILE 00176000
- * 00177000
- * THE SPOOL INPUT CHAIN IS SEARCHED FOR THE FILE SPECIFIED. 00178000
- * IF IT IS NOT FOUND, CC = 2 IS SET. IF IT IS FOUND, THE FILE 00179000
- * IS MOVED TO THE HEAD OF THE CHAIN SUCH THAT IT WILL BE 00180000
- * THE NEXT FILE PROCESSED BY ANY OF THE OTHER FUNCTIONS. 00181000
- * 00182000
- * CODE = X'010' REPEAT ACTIVE FILE 'NNN' TIMES 00183000
- * 'R1' = NEW COPY COUNT FOR THE ACTIVE FILE 00184000
- * 'R2' = VIRTUAL SPOOL READER ADDRESS 00185000
- * 00186000
- * THE SPECIFIED DEVICE IS CHECKED FOR AN ACTIVE FILE. IF NO 00187000
- * FILE IS ACTIVE, CC = 2 IS SET. OTHERWISE, THE COPY CPUNT 00188000
- * FOR THE FILE IS SET TO THE SPECIFIED VALUE, WITH A MAXIMUM 00189000
- * OF 255. IF THE SPECIFIED COUNT IS NOT POSITIVE, A SPECIFI- 00190000
- * CATION EXCEPTION IS GENERATED. IF THE COUNT IS GREATER THAN 00191000
- * 255, IT IS ADJUSTED TO MODULO 256. 00192000
- * 00193000
- * CODE = X'014' RESTART ACTIVE FILE AT BEGINNING 00194000
- * 'R1' = START ADDRESS OF VIRTUAL FULL-PAGE BUFFER 00195000
- * 'R2' = VIRTUAL SPOOL READER ADDRESS 00196000
- * 00197000
- * THE SPECIFIED DEVICE IS CHECKED FOR AN ACTIVE FILE. IF NO 00198000
- * ACTIVE FILE IS FOUND, CC = 2 IS SET. OTHERWISE, THE VSPLCTL 00199000
- * POINTERS ARE RESET TO THE BEGINNING OF THE FILE AND THE 00200000
- * FIRST PAGE RECORD IS GIVEN TO THE USER AS FOR CODE 0. 00201000
- * 00202000
- * CODE = X'018' BACKSPACE ONE RECORD IN ACTIVE FILE 00203000
- * 'R1' = START ADDRESS OF VIRTUAL FULL-APGE BUFFER 00204000
- * 'R2' = VIRTUAL SPOOL READER ADDRESS 00205000
- * 00206000
- * THE SPECIFIED DEVICE IS CHECKED FOR AN ACTIVE FILE. IF NO 00207000
- * ACTIVE FILE IS FOUND, CC = 2 IS SET. OTHERWISE, THE FILE 00208000
- * IS BACKSPACED ONE RECORD AND THE RECORD IS GIVEN TO THE 00209000
- * USER AS IN CODE 0. IF THE FILE IS ALREADY POSITIONED AT 00210000
- * THE FIRST RECORD, THE FIRST RECORD IS GIVEN TO THE USER. 00211000
- * 00212000
- * CODE = X'01C' READ NEXT MONITOR SPOOL FILE BLOCK 00212010
- * 'R1' = VIRTUAL ADDRESS OF 13-DBL-WD BUFFER 00212020
- * 'R2' = VIRTUAL READER ADDRESS 00212030
- * PROCESSING FOR CODE 1C IS THE SAME AS FOR 8 EXCEPT 00212040
- * THAT MONITOR SPOOL FILES ONLY ARE HANDLED (AS 00212050
- * DISTINGUISHED BY THE SFPFLAG2 SFPMON. 00212060
- * 00212070
- * CODE = X'020' READ SELECTED MONITOR SPOOL FILE BLOCK 00212080
- * 'R1' = FILE IDENTIFIER OF SELECTED FILE 00212090
- * 'R2' = VIRTUAL SPOOL READER ADDRESS 00212100
- * PROCESSING FOR CODE 20 IS THE SAME AS FOR CODE C 00212110
- * EXCEPT THAT ONLY SPOOL FILES WITH SFBFLAG2 SET TO 00212120
- * SFBMON ARE HANDLED. 00212130
- * 00212140
- * CODE = X'FFF' SUCCESSOR FILE DESCRIPTOR 00213000
- * 'R1' = VIRTUAL ADDRESS OF A 252 BYTE BUFFER 00214000
- * 'R2' = SPOOL FILE ID NUMBER 00215000
- * 00216000
- * IF 'R2' IS NON-ZERO THE SPOOL INPUT CHAIN IS SEARCHED FOR 00217000
- * A FILE WITH A MATCHING ID NUMBER; IF NONE IS FOUND, OR IF 00218000
- * ONE IS FOUND WHICH IS OWNED BY A DIFFERENT VIRTUAL MACHINE, 00219000
- * CC = 2 IS SET. THE CHAIN SEARCH IS CONTINUED FROM THE 00220000
- * FILE WHICH WAS FOUND, OR FROM THE ANCHOR IF 'R2' IS ZERO, 00221000
- * FOR THE NEXT FILE OWNED BY THE CALLER, INDEPENDENT OF FILE 00222000
- * TYPE, CLASS, 'INUSE' FLAG, ETC. IF NONE IS FOUND, CC = 1 00223000
- * IS SET. OTHERWISE, THE SFBLOK AND THE FIRST RECORD OF THE 00224000
- * FILE (GENERALLY, THE 'TAG') ARE COPIED TO THE CALLER'S 00225000
- * VIRTUAL STORAGE BUFFER. 00226000
- SPACE 00226010
- * WARNING: SINCE THIS SUBCODE DOES NOT CONSIDER THE STATE@VA14052 00226020
- * OF THE "INUSE" FLAG, IT IS POSSIBLE FOR THE @VA14052 00226030
- * FILE FOUND TO BE CHANGED, PURGED, ETC BEFORE DMKDRD @VA14052 00226040
- * FINISHES PROCESSING AND RETURNS THE ABOVE DATA IN A @VA14052 00226050
- * BUFFER. AS A RESULT, THE CONTENTS OF THE BUFFER MAY @VA14052 00226060
- * NOT BE VALID DATA; THE FILE MAY HAVE BEEN CHANGED OR @VA14052 00226070
- * DELETED. 00226080
- *. 00227000
- EJECT 00228000
- DC CL8'DMKDRD' PAGEABLE MODULE IDENTIFIER 00229000
- SPACE 00230000
- DMKDRDER RELOC , SPECIAL SPOOL-BLOCK READER 00231000
- SPACE 2 00232000
- NI VMPSW+4,X'CF' SET CONDITION CODE = 0 00233000
- NI VMPSW+2,X'CF' SET EC-MODE CONDITION CODE = 0 @VA04236 00233100
- MVI SAVEWRK6,X'00' SET TO SKIP DUMP FILES 00234000
- MVI SAVEWRK6+1,X'00' NULL OUT MONITOR INDICATOR @V50A2B5 00234100
- TM SAVER6+3,X'07' DBL-WD ALIGNED = EVEN REGISTER 00235000
- BNZ DRDSPEC NOPE - ERROR 00236000
- L R4,4(,R6) 'R2'+1 = FUNCTION SUB-CODE 00237000
- LTR R4,R4 RUN THROUGH VALIDITY CHECKING 00238000
- BM DRDSPEC SPECIFICATION ERROR 00239000
- CH R4,=AL2(DRDMAXC) CHECK AGAINST MAXIMUM 00240000
- BH DRDHIGH CHECK HIGH SUB-CODE SEQUENCE @V293598 00241000
- TM 7(R6),X'03' CHECK ALIGNMENT 00242000
- BNZ DRDSPEC NO GOOD 00243000
- DRDEVAL EQU * VALIDATE DEVICE ADDRESS SPECIFIED 00244000
- L R1,0(,R6) VIRTUAL READER ADDRESS 00245000
- MAXDV R15 GET HIGHEST VIRTUAL DEVICE 00246000
- CLR R1,R15 CHECK ITS VALIDITY 00247000
- BH DRDEVIC INVALID ADDRESS 00248000
- CALL DMKSCNVU FIND VDEVBLOK 00251000
- BNZ DRDEVIC NOT FOUND 00252000
- CLI VDEVTYPC,CLASURI SPOOL INPUT DEVICE? 00253000
- BNE DRDTYPE NO - INVALID DEVICE TYPE 00254000
- TM VDEVTYPE,TYPRDR IS IT ALSO A CARD-READER? 00255000
- BZ DRDTYPE NO - DON'T SUPPORT PAPER TAPE, ETC. 00256000
- * FUNCTION SUB-CODE IS STILL IN GPR 4 00257000
- B DRDECOD(R4) GO WHERE IT'S AT 00258000
- DRDECOD EQU * FUNCTION SELECTION TABLE 00259000
- B NEXTPAG '000' - GET NEXT DATA BUFFER 00260000
- B PRTSFCB '004' - GET NEXT PRINTER SFBLOK 00261000
- B PCHSFCB '008' - GET NEXT PUNCH SFBLOK 00262000
- B SELECTF '00C' - SELECT SPECIFIC FILE 00263000
- B REPEAT '010' - REPEAT NN TIMES 00264000
- B REREAD '014' - RESTART AT BEGINNING 00265000
- B BACKSPF '018' - BACKSPACE ONE PAGE 00266000
- B PCHSFCB1 '01C' - GET MONITOR PU FILE @V50A2B5 00266100
- B NEXTPAG1 '020' - GET NEXT DATA BUFFER @V50A2B5 00266200
- DRDMAXC EQU *-DRDECOD-4 MAXIMUM DEFINED CODE 00267000
- PCHSFCB1 MVI SAVEWRK6+1,X'44' INDICATE MONITOR DIAGNOSE @V50A2B5 00267100
- B PCHSFCB GO TO NORMAL LOCATION @V50A2B5 00267200
- SPACE 1 00267300
- NEXTPAG1 MVI SAVEWRK6+1,X'44' INDICATE MONITOR DIAGNOSE @V50A2B5 00267400
- B NEXTPAG GO TO NORMAL LOCATION @V50A2B5 00267500
- EJECT 00268000
- DRDHIGH LA R1,X'FFF' ONLY LEGAL HIGH SUB-CODE @V293598 00269000
- CLR R4,R1 IS THIS SUB-CODE X'FFF' @V293598 00270000
- BE SUCCESS IT IS INDEED - DO SUCCESSOR @V293598 00271000
- B DRDSPEC OTHERWISE INVALID SUB-CODE @V293598 00272000
- DRDEXIT EQU * SUCCESSFUL RETURN 00273000
- SLR R1,R1 RETURN CODE ZERO 00274000
- DRDERRX EQU * RETURN WITH ERROR 00275000
- ST R1,SAVER2 RETURN CODE BACK VIA GPR 2 00276000
- EXIT , RETURN TO CALLER 00277000
- SPACE 2 00278000
- ADDCHEK EQU * EXAMINE ADDRESS FOR VALIDITY 00279000
- LA R1,0(,R1) 24 BITS ONLY 00280000
- LRA R0,0(,R1) IS IT A VALID ADDRESS ? @V304635 00281000
- BC 8+2,ADDCHEK1 CONTINUE IF NOT A SEG EXCEPTION @V408246 00282100
- * NOTE: NOBODY ELSE IN DRD USERS SAVEWRK4 AND SAVEWRK5 00282200
- ST R2,SAVEWRK4 SAVE REG. DESTROYED BY PARM PASS @V408246 00282300
- ST R14,SAVEWRK5 SAVE RETURN REG. NOT SAVED BY PTR@V408246 00282400
- CALL DMKPTRAN,PARM=DEFER OTHERWISE LET PTRAN HANDLE @V408246 00282500
- L R2,SAVEWRK4 RESTORE @V408246 00282600
- L R14,SAVEWRK5 @V408246 00282700
- BC 2,DRDADDR ADDRESSING ERROR @V408246 00282800
- ADDCHEK1 DS 0H @V408246 00282900
- LA R15,0(R2,R1) ADDRESS OF END OF FIELD 00283000
- BCTR R15,0 ...PRECISELY 00284000
- L R0,XPAGNUM PAGE NUMBER MASK 00285000
- NR R15,R0 ENDING PAGE ADDRESS 00286000
- NR R0,R1 STARTING PAGE ADDRESS 00287000
- CLR R0,R15 DOES IT CROSS A PAGE BOUNDARY ? 00288000
- BNE DRDSPEC YES - ERROR EXCEPTION 00289000
- BR R14 RETURN - EVERYTHING IS O.K. 00290000
- SPACE 1 00290500
- SETCOD1 LA R2,X'10' ESTABLISH CONDITION CODE = 1 @VA04236 00291000
- B CCSET GO SET CONDITION CODE @VA04236 00291500
- SPACE 1 00292000
- SETCOD2 LA R2,X'20' ESTABLISH CONDITION CODE = 2 @VA04236 00292500
- B CCSET GO SET CONDITION CODE @VA04236 00293000
- SPACE 1 00293500
- SETCOD3 L R2,SAVER6 GPR6 AT ENTRY HAS CODE-REG NUMBER@VA04236 00294000
- ST R1,4(,R2) PASS ERROR IN SUBCODE-REG @VA04236 00294500
- SETCC3 DS 0H @VA08925 00294750
- LA R2,X'30' ESTABLISH CONDITION CODE = 3 @VA04236 00295000
- CCSET LA R1,VMPSW+4 CC POSITION FOR BC-MODE PSW @VA04236 00295500
- TM VMESTAT,VMEXTCM IS THIS VM IN EC-MODE? @VA04236 00296000
- BZ *+8 NO. POSITIONING IS PROPER @VA04236 00296500
- LA R1,VMPSW+2 CC POSITION FOR EC-MODE PSW @VA04236 00297000
- EX R2,DRDSETCC SET CONDITION CODE IN PSW @VA04236 00297500
- B DRDEXIT EXIT @VA04236 00298000
- SPACE 1 00298500
- DRDSETCC OI 0(R1),*-* EXECUTED CONDITION CODE SETTER @VA04236 00299000
- SPACE 1 00299500
- DRDIOER EQU * FATAL I/O ERROR FROM DMKRPAGT 00302000
- LA R1,16(0,0) RETURN CODE = 16 00303000
- B SETCOD3 GO SET CC = 3 00304000
- DRDBUSY EQU * DEVICE IS BUSY 00305000
- LA R1,12(0) ERROR CODE 00306000
- B SETCOD3 SET CC = 3 00307000
- DRDEVIC EQU * INVALID OR NONEXISTENT ADDRESS 00308000
- LA R1,4(0) CODE BACK TO USER 00309000
- B SETCOD3 SET CC = 3 00310000
- DRDTYPE EQU * INVALID DEVICE TYPE 00311000
- LA R1,8(0) CODE BACK TO USER 00312000
- B SETCOD3 SET CC = 3 00313000
- DRDLOCK EQU * DIAG.14 AND PAGE LOCKED FOR I/O @VA07519 00313100
- LA R1,20(0) RETURN CODE = 20 @VA07519 00313200
- B SETCOD3 SET CC = 3 @VA07519 00313300
- DRDSPEC EQU * SPECIFICATION INTERRUPT 00314000
- LA R1,X'06' INTERRUPT CODE 00315000
- ST R1,SAVER0 BACK TO DMKHVC IN GPR 0 00316000
- B DRDERRX ...WITH GPR 2 ALSO NON-ZERO 00317000
- DRDADDR EQU * ADDRESSING EXCEPTION 00318000
- LA R1,X'05' INTERRUPT CODE 00319000
- ST R1,SAVER0 BACK IN GPR 0... 00320000
- B DRDERRX ...WITH GPR 2 ALSO NON-ZERO 00321000
- DRDPROT EQU * PROTECTION EXCEPTION 00322000
- LA R1,X'04' INTERRUPT CODE... 00323000
- ST R1,SAVER0 ...FOR DMKHVC 00324000
- B DRDERRX EXIT WITH GR2 NON-ZERO 00325000
- EJECT 00326000
- *---------------------------------------------------------------------* 00327000
- * PRTSFCB - CODE '004' - GET NEXT PRINT SPOOL FILE BLOCK * 00328000
- *---------------------------------------------------------------------* 00329000
- PRTSFCB EQU * 00330000
- LA R7,TYPPRT THIS IS THE ONE WE WANT 00331000
- B READSFB ...SO GO FIND ONE 00332000
- *---------------------------------------------------------------------* 00333000
- * PCHSFCB - CODE '008' - GET NEXT PUNCH SPOOL FILE BLOCK * 00334000
- *---------------------------------------------------------------------* 00335000
- PCHSFCB EQU * 00336000
- LA R7,TYPPUN THIS VARIETY FROM HERE 00337000
- * B READSFB ...SO GO FIND ONE 00338000
- READSFB EQU * USER WANTS AN SFBLOK 00339000
- L R5,0(,R5) VIRTUAL ADDRESS OF BUFFER 00340000
- LR R1,R5 ...INTO R1 ALSO 00341000
- LA R2,SFBSIZE*8 FIELD LENGTH 00342000
- BAL R14,ADDCHEK CHECK PAGE CROSS, ETC. 00343000
- LA R15,SETCOD2 RETURN IF THERE ARE NO FILES 00344000
- LA R14,READSCH RETURN IF ONE IS FOUND 00345000
- CLI VDEVSTAT,X'00' IS THE DEVICE FREE ? 00346000
- BE SEARCHB YES - FIND AN SFBLOK 00347000
- TM VDEVSFLG,VDEVDIAG IN USE BY DIAGNOSE ?? 00348000
- BZ DRDBUSY NO - CAN'T USE THIS ONE 00349000
- L R9,VDEVSPL GET VSPLCTL BLOCK 00350000
- L R10,VSPCCW ...AND WHERE WE LEFT OFF 00351000
- LTR R10,R10 CHECK TO MAKE SURE 00352000
- BNP SEARCHB WELL... START AT THE BEGINNING 00353000
- BAL R15,READNXT LOOK FOR NEXT SFBLOK 00354000
- L R9,VDEVSPL GET VSPLCTL BLOCK 00355000
- ST R10,VSPCCW SET PTR TO ZERO 00356000
- B SETCOD1 AND SET CC = 1 TO INDICATE SOME FOUND 00357000
- READSCH EQU * 00358000
- EX R7,TESTYPE IS IT THE RIGHT DEVICE TYPE ? 00359000
- BZ READNXT NO - CONTINUE SEARCHING 00360000
- BAL R6,GETVSPL GET VSPLCTL BLOCK 00361000
- ST R10,VSPCCW ...AND REMEMBER WHERE WE STOPPED 00362000
- TRANS 2,5,OPT=(BRING,DEFER) GET USER'S BUFFER 00363000
- CALL DMKPSASP CHECK STORAGE PROTECTION KEYS @V202232 00364000
- BNZ DRDPROT OOPS ... SOME PROBLEM HERE 00365000
- MVC 0(SFBSIZE*8,R2),SFBLOK GIVE IT TO HIM 00366000
- B DRDEXIT SET CONDITION CODE = 0 AND EXIT 00367000
- TESTYPE TM SFBTYPE,*-* EXECUTED FOR TYPE CHECKING 00368000
- EJECT 00369000
- *---------------------------------------------------------------------* 00370000
- * SEARCHB - SEARCH READER-FILE CHAIN FOR SFBLOK * 00371000
- *---------------------------------------------------------------------* 00372000
- SEARCHB EQU * 00373000
- * SEARCH READER-FILE CHAIN FOR SFBLOK FOR THIS USER 00374000
- L R10,ARSPRD ADDRESS OF CHAIN ANCHOR 00375000
- B BEGINB BRANCH FOR BEGINNING SEARCH @VA02787 00376000
- READNXT EQU * 00377000
- L R9,ARSPRD ADDRESS OF CHAIN ANCHOR @VA02787 00378000
- CR R10,R9 AT PLACE OF PREVIOUS SEARCH @VA02787 00379000
- BE BEGINB IF YES, BRANCH AND CONTINUE @VA02787 00380000
- NEXTSF L R9,SFBPNT-SFBLOK(,R9) NEXT SFBLOK IN CHAIN @VA02787 00381000
- LTR R9,R9 ANY MORE? @VA02787 00382000
- BZR R15 IF NO, TAKE EXIT @VA02787 00383000
- CR R9,R10 AT PLACE OF PREVIOUS SEARCH? @VA02787 00384000
- BNE NEXTSF IF NOT, CONTINUE SEARCH @VA02787 00385000
- BEGINB EQU * @VA02787 00386000
- LR R9,R10 PREVIOUS BLOCK ADDR. IN R9 00387000
- L R10,SFBPNT NEXT SFBLOK IN CHAIN 00388000
- LTR R10,R10 ANY MORE? 00389000
- BCR 8,R15 NO - TAKE THE ERROR EXIT 00390000
- CLC SFBUSER(8),VMUSER DOES IT BELONG TO HIM? 00391000
- BNE BEGINB NO - CONTINUE @VA02787 00392000
- TM SFBFLAG,SFBINUSE+SFBUHOLD INUSE OR HOLD ?? @V200930 00393000
- BNZ BEGINB YES, SKIP THIS ONE @VA02787 00394000
- CLI VDEVCLAS,C'*' READ ANY CLASS ?? @V200930 00395000
- BE READCHK YES, TEST TYPE @V200930 00396000
- CLC VDEVCLAS,SFBCLAS CORRECT INPUT CLASS ? 00397000
- BNE BEGINB NO - SKIP THIS ONE @VA02787 00398000
- READCHK DS 0H @V200930 00399000
- CLI SAVEWRK6,X'00' SHOULD WE CHECK FOR DUMP FILES ? 00400000
- BCR 7,R14 NO - GIVE THIS ONE TO USER 00401000
- TM SFBFLAG,SFBDUMP CANNOT USE DUMP FILES 00402000
- BNO CHKMON IF NOT DUMP CONTINUE @V67CAH7 00403000
- CLI SFBMISC1+1,C'V' 'VMDUMP' IS ACCEPTABLE @V67CAH7 00403010
- BNE BEGINB NOPE, IT'S CP DUMP. GETNEXT @V67CAH7 00403020
- CHKMON DS 0H @V67CAH7 00403030
- TM SFBFLAG2,SFBMON IS THIS A MONITOR FILE? @V50A2B5 00403050
- BNO SEEOK NO @V50A2B5 00403100
- CLI SAVEWRK6+1,X'00' DO WE HAVE CORRECT DIAG? @V50A2B5 00403150
- BE BEGINB NO, NOT A MONITOR DIAG @V50A2B5 00403200
- BR R14 YES, USE THIS FILE @V50A2B5 00403250
- SEEOK CLI SAVEWRK6+1,X'00' DO WE HAVE CORRECT DIAG? @V50A2B5 00403300
- BNE BEGINB NO, ONLY WANT MONITOR @V50A2B5 00403350
- BR R14 00404000
- SPACE 2 00405000
- *---------------------------------------------------------------------* 00406000
- * GETVSPL - GET VSPLCTL BLOCK AND CONNECT TO DEVICE * 00407000
- *---------------------------------------------------------------------* 00408000
- GETVSPL EQU * 00409000
- L R9,VDEVSPL IN CASE THERE IS ALREADY A VSPLCTL 00410000
- LTR R9,R9 MAKE SURE IT'S THERE 00411000
- BNP GETVSP1 NO - GET ONE 00412000
- TM VDEVSFLG,VDEVDIAG IN USE BY DIAGNOSE ?? 00413000
- BCR 1,R6 YES - VSPLCTL ALREADY EXISTS 00414000
- L R0,VSPSFBLK IS THERE A SFBLOK ATTACHED @VA12474 00414200
- LTR R0,R0 TO THE VSPLCTL? @VA12474 00414300
- BNZ DRDBUSY YES - RETURN BUSY CONDITION @VA12474 00414400
- GETVSP1 EQU * GET VSPLCTL BLOCK 00415000
- LA R0,VSPSIZE GET VSPLCTL BLOCK 00416000
- CALL DMKFREE ... 00417000
- LR R9,R1 ADDRESS VIA GPR 9 00418000
- MVC VSPLCTL(VSPSIZE*8),ZEROES CLEAR IT 00419000
- OI VDEVSTAT,VDEVBUSY MARK DEVICE BUSY 00420000
- OI VDEVSFLG,VDEVDIAG ...AND IN USE BY DIAGNOSE 00421000
- ST R9,VDEVSPL CONNECT VSPLCTL 00422000
- BR R6 ...AND RETURN 00423000
- EJECT 00424000
- *---------------------------------------------------------------------* 00425000
- * SELECTF - SELECT A PARTICULAR FILE FOR NEXT READING * 00426000
- *---------------------------------------------------------------------* 00427000
- SELECTF EQU * 00428000
- L R6,0(,R5) GPR 6 NOW CONTAINS FILE ID 00429000
- LA R15,SETCOD2 CC = 2 IF NOT FOUND 00430000
- BAL R14,SEARCHB FIND AN SFBLOK 00431000
- CH R6,SFBFILID IS THIS THE RIGHT ONE ? 00432000
- BNE BEGINB NO - KEEP LOOKING @VA06358 00433000
- L R1,SFBPNT UNCHAIN THE SFBLOK... 00434000
- ST R1,SFBPNT-SFBLOK(,R9) ... 00435000
- L R1,ARSPRD ...AND RE-CHAIN AT THE HEAD 00436000
- L R2,0(,R1) ...OF THE SPOOL-FILE LIST 00437000
- ST R10,0(,R1) ...SO IT WILL BE PICKED UP 00438000
- ST R2,SFBPNT ...AT THE NEXT READ 00439000
- B DRDEXIT SET CC = 0 AND EXIT 00440000
- SPACE 2 00441000
- *---------------------------------------------------------------------* 00442000
- * CONNECT - CONNECT SFBLOK TO VSPLCTL BLOCK AND DEVICE * 00443000
- *---------------------------------------------------------------------* 00444000
- CONNECT EQU * 00445000
- ST R14,SAVEWRK2 SAVE RETURN REGISTER 00446000
- BAL R6,GETVSPL GET VSPLCTL BLOCK IF NEEDED @VA12474 00447000
- OI SFBFLAG,SFBINUSE+SFBOPEN INDICATE INUSE AND OPEN@VA12474 00448000
- ST R10,VSPSFBLK CONNECT SFBLOK 00449000
- L R1,SFBSTART FIRST DASD LOCATION 00450000
- ST R1,VSPDPAGE ...INTO VSPLCTL 00451000
- L R14,SAVEWRK2 PICK UP RETURN ADDRESS 00452000
- BR R14 ...AND RETURN 00453000
- SPACE 2 00454000
- *---------------------------------------------------------------------* 00455000
- * CHKBUSY - CHECK DEVICE FOR ACTIVE DIAGNOSE SPOOL FILE * 00456000
- *---------------------------------------------------------------------* 00457000
- CHKBUSY EQU * 00458000
- CLI VDEVSTAT,VDEVBUSY IS THE DEVICE ACTIVE? 00459000
- BCR 7,R15 NO - ERROR EXIT 00460000
- TM VDEVSFLG,VDEVDIAG IN USE BY DIAGNOSE ?? 00461000
- BCR 8,R15 NO - ERROR EXIT 00462000
- L R9,VDEVSPL GET VSPLCTL BLOCK 00463000
- LTR R9,R9 DON'T TAKE UNNECESSARY CHANCES 00464000
- BCR 13,R15 ...IT PAID OFF 00465000
- L R10,VSPSFBLK GET AT THE SFBLOK ALSO 00466000
- LTR R10,R10 ... 00467000
- BCR 13,R15 NO GOOD - ERROR EXIT 00468000
- BR R14 RETURN TO CALLER - DEVICE IS O.K. 00469000
- EJECT 00470000
- *---------------------------------------------------------------------* 00471000
- * NEXTPAG - CODE '000' - GET NEXT PAGE BUFFER IN FILE * 00472000
- *---------------------------------------------------------------------* 00473000
- NEXTPAG EQU * USER WANTS A DATA PAGE 00474000
- L R5,0(,R5) VIRTUAL PAGE ADDRESS 00475000
- LR R1,R5 INTO GPR 1 FOR 'ADDCHEK' 00476000
- L R2,F4096 FIELD = ONE PAGE 00477000
- BAL R14,ADDCHEK VALIDATE ADDRESS 00478000
- LA R15,GETSFCB IF INACTIVE, CONNECT A BLOCK 00479000
- BAL R14,CHKBUSY SEE IF THE DEVICE IS ACTIVE 00480000
- CKACTIVE DS 0H SEE IF THE ACTIVE FILE IS THE RIGHT TYPE @VA14190 00480010
- TM SFBFLAG,SFBDUMP IS IT A DUMP? @VA14190 00480030
- BNO MONCK NO - CHECK FOR MONITOR FILE @VA14190 00480050
- CLI SFBMISC1+1,C'V' YES - IS IT A VMDUMP? @VA14190 00480070
- BNE DRDBUSY CP DUMP - WE CAN'T HANDLE IT @VA14190 00480090
- MONCK TM SFBFLAG2,SFBMON IS THIS A MONITOR FILE? @VA14190 00480110
- BNO NOTMON NO - CHECK FOR SUBCODE '000' @VA14190 00480130
- CLI SAVEWRK6+1,X'00' YES - IS IT SUBCODE '020'? @VA14190 00480150
- BE DRDBUSY WRONG SUBCODE FOR MONITOR FILE @VA14190 00480170
- B FILEOK MON. FILE, SUBCODE '020 IS OK @VA14190 00480190
- NOTMON CLI SAVEWRK6+1,X'00' IS IT SUBCODE '000'? @VA14190 00480210
- BNE DRDBUSY NO - MUST HAVE MONITOR FILE @VA14190 00480230
- FILEOK EQU * ACTIVE FILE MATCHES THE SUBCODE 00480250
- * ISSUED @VA14190 00480270
- TM SFBFLAG,SFBEOF ALREADY AT END OF FILE? 00481000
- BO EXAMINE YES - CHECK COPY COUNT, ETC. 00482000
- CHEKNXT EQU * 00483000
- SLR R1,R1 00484000
- ST R1,VSPCCW CLEAR SFBLOK CHAIN LOCATOR 00485000
- L R0,VSPDPAGE 'CCPD' OF DESIRED PAGE 00486000
- CL R0,SFBLAST IS THIS THE LAST PAGE ? 00487000
- BNE GIVEPAG NO - GIVE IT TO HIM 00488000
- OI SFBFLAG,SFBEOF AT EOF NEXT TIME AROUND 00489000
- GIVEPAG EQU * GIVE PAGE TO THE USER 00490000
- LR R1,R5 VIRTUAL ADDRESS IS IN R5 00491000
- CALL DMKRPAGT,PARM=BRING LOCATE + BRING IN THE PAGE 00492000
- BC 2,DRDPROT OOPS .. TRIED TO OVERLAY A SHARED PAGE 00493000
- BC 1,DRDIOER FATAL I/O ERROR WHILE READING 00494000
- BC 4,DRDLOCK PAGE ALREADY IN USE FOR I/O @VA07519 00494050
- USING SPLINK,R2 REAL ADDRESS BACK VIA GPR 2 00495000
- ICM R4,B'1111',SPRECNUM GET THE RECORD COUNT @VA12226 00495300
- BZ EXAMA IF ZERO GIVE EOF @VA12226 00495600
- L R0,SPPREPAG GET BACK LINKAGE 00496000
- ST R0,VSPCAW USE 'CAW' FOR BACK LINKAGE IN FILE 00497000
- L R4,SPNXTPAG NEXT LINK IN SPOOL FILE 00498000
- ST R4,VSPDPAGE ...UPDATE 'NEXT PAGE' DATA 00499000
- B DRDEXIT ALL DONE -- RETURN TO USER 00500000
- DROP R2 00501000
- EXAMA OI SFBFLAG,SFBEOF SET EOF INDICATOR @VA12226 00501500
- EXAMINE EQU * CHECKING EOF CONDITIONS 00502000
- LH R1,SFBCOPY PICK UP COPY COUNT NOW 00503000
- TM VDEVSFLG,VDEVCONT SPOOL CONTINUOUS ?? 00504000
- BZ EXAM01 NO 00505000
- S R1,F1 DECREMENT COPY COUNT 00506000
- BNP EXAM02 NO - GET NEXT FILE 00507000
- STH R1,SFBCOPY ... 00508000
- L R1,SFBSTART FIRST DASD LOCATION 00509000
- ST R1,VSPDPAGE ...INTO VSPLCTL 00510000
- NI SFBFLAG,X'FF'-SFBEOF NO LONGER AT EOF 00511000
- B CHEKNXT CONTINUE PASSING DATA 00512000
- EJECT 00513000
- EXAM01 EQU * 00514000
- S R1,F1 DECREMENT COPY COUNT 00515000
- BNP SETCOD1 NO - JUST RETURN EOF CONDITION 00516000
- STH R1,SFBCOPY ... 00517000
- L R1,ARSPRD ADDR OF START OF CHAIN 00518000
- SPACE 1 00519000
- SFBLOOP EQU * 00520000
- L R2,SFBPNT-SFBLOK(,R1) GET NEXT SFBLOK ON CHAIN 00521000
- CR R2,R10 NEXT .EQ. CURRENT SFBLOK ? 00522000
- BE SFBFOUND YES 00523000
- LR R1,R2 00524000
- B SFBLOOP SEARCH CHAIN 00525000
- SPACE 1 00526000
- SFBFOUND EQU * 00527000
- L R3,SFBPNT GET NEXT SFBLOK 00528000
- ST R3,SFBPNT-SFBLOK(,R1) REMOVE CURRENT SFBLOK 00529000
- L R1,ARSPRD ADDR OF START OF CHAIN 00530000
- L R2,0(,R1) FIRST SFBLOK IN CHAIN 00531000
- ST R10,0(,R1) PUT THIS ONE FIRST 00532000
- ST R2,SFBPNT ...SO IT WILL COME UP NEXT 00533000
- NI SFBFLAG,X'FF'-(SFBEOF+SFBINUSE) RESET FLAGS @VA11232 00534000
- SLR R1,R1 DISCONNECT VSPLCTL BLOCK 00535000
- ST R1,VSPSFBLK ... 00536000
- ST R1,VSPDPAGE ... 00537000
- ST R1,VSPCAW ... 00538000
- B SETCOD1 RETURN EOF CONDITION 00539000
- EXAM02 EQU * CLOSE THIS FILE AND GET ANOTHER ONE 00540000
- BAL R6,DRDLOSE CLOSE THE SPOOL FILE 00541000
- LA R15,SETCOD1 CC = 1 IF NO MORE FILES 00542000
- B GETSFB1 GO GET ANOTHER SPOOL FILE 00543000
- SPACE 2 00544000
- DRDLOSE EQU * CLOSE THE ACTIVE FILE 00545000
- MVI VDEVSTAT,X'00' FREE UP THE DEVICE FOR CLOSE... 00546000
- NI VDEVSFLG,X'FF'-VDEVDIAG ... 00547000
- LR R7,R10 SFBLOK TO R7 FOR 'VSPCR' 00548000
- SL R8,VMDVSTRT VDEVBLOK DISPLACEMENT @VA01460 00549000
- CALL DMKVSPCR CLOSE READER FILE 00550000
- AL R8,VMDVSTRT VDEVBLOK ADDRESS @VA01460 00551000
- BR R6 ...AND RETURN 00552000
- SPACE 2 00553000
- GETSFCB EQU * FIND ANOTHER SPOOL FILE 00554000
- LA R15,SETCOD2 CC = 2 IF NO FILE FOUND 00555000
- GETSFB1 EQU * ALTERNATE ENTRY 00556000
- LA R14,GETSFB2 RETURN FROM 'SEARCHB' 00557000
- CLI VDEVSTAT,X'00' IS THE DEVICE BUSY? 00558000
- BE SEARCHB NO - JUST FIND AN SFBLOK 00559000
- TM VDEVSFLG,VDEVDIAG IN USE BY DIAGNOSE ?? 00560000
- BZ DRDBUSY NO - ERROR 00561000
- B SEARCHB FIND SFBLOK FOR THIS USER 00562000
- GETSFB2 EQU * 00563000
- BAL R14,CONNECT CONNECT SFBLOK TO DEVICE 00564000
- B CHEKNXT ...AND GIVE HIM THE FIRST PAGE 00565000
- EJECT 00566000
- *---------------------------------------------------------------------* 00567000
- * REPEAT - CODE '010' - REPEAT THE ACTIVE FILE 'NN' TIMES * 00568000
- *---------------------------------------------------------------------* 00569000
- REPEAT EQU * REPEAT THE ACTIVE FILE 00570000
- LA R15,SETCOD2 CC = 2 IF NO ACTIVE FILE 00571000
- BAL R14,CHKBUSY MAKE SURE THE DEVICE IS ACTIVE 00572000
- L R5,0(,R5) REPEAT COUNT IS IN 'R1' 00573000
- LTR R5,R5 CHECK VALIDITY 00574000
- BNP DRDSPEC BAD - INTERRUPT 00575000
- N R5,F255 ARBITRARY, REASONABLE LIMIT 00576000
- STH R5,SFBCOPY ...AND RESET COPY COUNT 00577000
- B DRDEXIT SET CC = 0 AND EXIT 00578000
- SPACE 2 00579000
- *---------------------------------------------------------------------* 00580000
- * REREAD - CODE '014' - RESTART ACTIVE FILE AT BEGINNING * 00581000
- *---------------------------------------------------------------------* 00582000
- REREAD EQU * RESTART THE ACTIVE FILE (REWIND) 00583000
- LA R15,SETCOD2 CC = 2 IF NO ACTIVE FILE 00584000
- BAL R14,CHKBUSY MAKE SURE THE DEVICE IS ACTIVE 00585000
- L R1,SFBSTART 'CCPD' OF FIRST PAGE IN CHAIN 00586000
- ST R1,VSPDPAGE STORE AS NEXT PAGE TO READ 00587000
- SLR R1,R1 00588000
- ST R1,VSPCAW CLEAR THE 'PREVIOUS PAGE' POINTER 00589000
- NI SFBFLAG,X'FF'-SFBEOF NO LONGER AT EOF 00590000
- B DRDEXIT EXIT WITH CC = 0 00591000
- SPACE 2 00592000
- *---------------------------------------------------------------------* 00593000
- * BACKSPF - CODE '018' - BACK UP ONE PAGE IN ACTIVE FILE * 00594000
- *---------------------------------------------------------------------* 00595000
- BACKSPF EQU * BACKSPACE ONE PAGE-RECORD 00596000
- L R5,0(,R5) VIRTUAL PAGE ADDRESS 00597000
- LR R1,R5 INTO GPR 1 FOR 'ADDCHEK' 00598000
- L R2,F4096 FIELD = ONE FULL PAGE 00599000
- BAL R14,ADDCHEK VALIDATE ADDRESS 00600000
- LA R15,SETCOD2 CC = 2 IF NO ACTIVE FILE 00601000
- BAL R14,CHKBUSY MAKE SURE THE DEVICE IS ACTIVE 00602000
- L R0,VSPCAW THIS IS 'CCPD' FOR THE PREVIOUS PAGE 00603000
- LTR R0,R0 AT BEGINNING OF FILE ? 00604000
- BNZ NOTFRST NO - CONTINUE @VA00812 00605000
- L R0,SFBSTART RESTART AT THE BEGINNING OF FILE 00606000
- LA R2,VMPSW+4 ASSUME A BC-MODE PSW @VA04236 00606400
- TM VMESTAT,VMEXTCM IS THIS VM IN EC-MODE? @VA04236 00606800
- BZ *+8 NO, THEN WE ASSUMED CORRECTLY @VA04236 00607200
- LA R2,VMPSW+2 SET UP FOR EC-MODE PSW @VA04236 00607600
- OI 0(R2),X'10' INDICATE CONDITION CODE = 1 @VA04236 00608000
- NOTFRST EQU * @VA04236 00608400
- NI SFBFLAG,X'FF'-SFBEOF NO LONGER AT EOF 00609000
- B GIVEPAG ...GIVE THE DATA TO THE USER 00610000
- EJECT 00611000
- *---------------------------------------------------------------------* 00612000
- * SUCCESS - X'FFF' - RETURN SUCCESSOR FILE DESCRIPTOR * 00613000
- *---------------------------------------------------------------------* 00614000
- SUCCESS EQU * FIND AND RETURN SUCCESSOR SPOOL FILE @V293598 00615000
- L R10,ARSPRD ADDRESS OF SPOOL CHAIN ANCHOR @V293598 00616000
- L R0,0(,R6) 'R2' = SPOOL FILE ID NUMBER @V293598 00617000
- LTR R0,R0 WAS ZERO FILE ID SPECIFIED ? @V293598 00618000
- BZ SUCFIND YES - RETURN FIRST FILE @V293598 00619000
- CL R0,=F'9900' IS THE ID NUMBER LEGAL ? @V293598 00620000
- BH DRDSPEC TOO HIGH -RETURN SPEC EXCEPTION @VA06444 00621000
- SUCPRE EQU * @V293598 00622000
- L R10,SFBPNT NEXT SPOOL FILE BLOCK @V293598 00623000
- LTR R10,R10 IS THERE A NEXT BLOCK ? @V293598 00624000
- BZ SETCOD2 NO - RETURN CC = 2 @V293598 00625000
- CLC SFBUSER(8),VMUSER DOES CALLER OWN IT? @VA03562 00626000
- BNE SUCPRE NO, LOOK AT NEXT ONE @VA03562 00627000
- CH R0,SFBFILID IS THIS THE SPECIFIED FILE? @VA03562 00628000
- BNE SUCPRE NO, LOOK AT NEXT ONE @VA03562 00629000
- SUCFIND EQU * SPECIFIED FILE FOUND @V293598 00630000
- L R10,SFBPNT NEXT SPOOL FILE BLOCK @V293598 00631000
- LTR R10,R10 IS THERE A NEXT BLOCK ? @V293598 00632000
- BZ SETCOD1 NO - SUCCESSOR DOES NOT EXIST @V293598 00633000
- CLC SFBUSER(8),VMUSER DOES CALLER OWN THIS ONE ? @V293598 00634000
- BNE SUCFIND NO - KEEP LOOKING FOR SUCCESSOR @V293598 00635000
- SL R8,VMDVSTRT GET VDEVBLOK DISP @VM01086 00636000
- CALL DMKPGTVG RESERVE A PAGE OF SYS VIRT STORAGE @V293598 00637000
- ST R1,SAVEWRK1 AND SAVE THE ADDRESS @V293598 00638000
- LA R0,SFBSIZE+2+(L'VSPXTAG/8) WORK BUFFER NEEDED @V293598 00639000
- CALL DMKFREE RESERVE FREE STORAGE WORK BUFFER @V293598 00640000
- ST R1,SAVEWRK2 AND SAVE THE WORK BUFFER ADDRESS @V293598 00641000
- L R0,SFBSTART DASD ADDRESS OF FIRST FILE BUFFER@V293598 00642000
- L R1,SAVEWRK1 RESTORE SYS VIRT PAGE ADDRESS @V293598 00643000
- CALL DMKRPAGT,PARM=(BRING+SYSTEM) READ IT IN @V293598 00644000
- BNZ SUCIOER QUIT IF I/O ERROR @V293598 00645110
- EJECT 00646000
- AL R8,VMDVSTRT GET VDEVBLOK ADDR @VM01086 00647000
- L R3,0(,R5) CALLER'S VIRTUAL BUFFER ADDRESS @V293598 00648000
- L R5,SAVEWRK2 FREE STORAGE WORK BUFFER @V293598 00649000
- MVC 0(SFBSIZE*8,R5),SFBLOK MOVE THE ENTIRE SFBLOK @V293598 00650000
- MVC SFBSIZE*8(8,R5),16(R2) MOVE FIRST FILE CCW @V293598 00651000
- LA R5,SFBSIZE*8+8(,R5) UPDATE WORK BUFR LOAD POINT @V293598 00652000
- TM 20(R2),SKIP DOES THIS RECORD HAVE DATA ? @V293598 00653000
- BO SUCTOUSR NO - MOVE IT TO CALLER AS IS @V293598 00654000
- LH R1,22(,R2) DATA COUNT @V293598 00655000
- LA R1,3(,R1) PLUS FOUR FOR THE TIC, -1 @V293598 00656000
- LA R6,252-(SFBSIZE*8+8)-1 REMAINING USER BUFFER -1 @V60B9BA 00657000
- CLR R1,R6 IS THERE TOO MUCH TO MOVE ? @V293598 00658000
- BNH SUCFITOK NO - MOVE WHAT IS THERE @V293598 00659000
- LR R1,R6 TRUNCATE TO MAXIMUM COUNT @V293598 00660000
- SUCFITOK EQU * @V293598 00661000
- EX R1,SUCMOVE MOVE TIC AND DATA TO WORK BUFFER @V293598 00662000
- LA R5,1(R1,R5) UPDATE BUFFER LOAD POINT @V293598 00663000
- SUCTOUSR EQU * @V293598 00664000
- L R7,SAVEWRK2 INITIALIZE FROM ADDR @V293598 00665000
- SLR R5,R7 INITIALIZE MOVE COUNT @V293598 00666000
- SUCPAGE EQU * @V293598 00667000
- SL R8,VMDVSTRT GET VDEVBLOK DISP @VM01086 00668000
- TRANS 2,3,OPT=(BRING,DEFER) GET CALLER'S BUFFER ADDR @V293598 00669000
- BC 2,SUCADDR ADDR EXCEPTION IF NON-EXISTENT @V293598 00670000
- BC 1,SUCIOER CC = 3 IF I/O ERROR @V293598 00671000
- AL R8,VMDVSTRT GET VDEVBLOK ADDR @VM01086 00672000
- LR R6,R2 SET TO ADDR @V293598 00673000
- SUCHPAGE EQU * @V293598 00674000
- CALL DMKPSASP CHECK FOR PROTECTION VIOLATION @V293598 00675000
- BNZ SUCPROT VIRTUAL PROTECTION CHECK @V293598 00676000
- BAL R4,TO2048 MOVE DATA TO NEXT HALF-PAGE BOUNDARY @V293598 00677000
- BZ SUCCOD0 THAT'S ALL - SUCCESSFUL RETURN @V293598 00678000
- LR R2,R6 ASSUME ODD HALF-PAGE FOR NOW @V293598 00679000
- LR R8,R6 NEXT HALF-PAGE ADDR @V293598 00680000
- N R8,XPAGNUM GET PAGE NUMBER FOR NEXT PIECE @V293598 00681000
- CLR R8,R6 DOES THE ADDRESS CHANGE ? @V293598 00682000
- BNE SUCHPAGE YES - IT WAS AN ODD HALF-PAGE @V293598 00683000
- N R3,XPAGNUM GET LAST VIRTUAL PAGE NUMBER @V293598 00684000
- AL R3,F4096 AND BUMP IT UP TO THE NEXT @V293598 00685000
- B SUCPAGE TRANS, VALIDATE, AND CONTINUE @V293598 00686000
- SPACE 2 00687000
- SUCMOVE MVC 0(0,R5),24(R2) MOVE DATA RECORD EXECUTED ABOVE @V293598 00688000
- EJECT 00689000
- SUCIOER EQU * @V293598 00690000
- AL R8,VMDVSTRT GET VDEVBLOK ADDR @VM01086 00691000
- LA R3,DRDIOER EXIT TO I/O ERROR RETURN @V293598 00692000
- B SUCEXIT RELEASE STORAGE AND QUIT @V293598 00693000
- SPACE 00694000
- SUCPROT EQU * @V293598 00695000
- LA R3,DRDPROT EXIT TO PROTECTION CHECK SET @V293598 00696000
- B SUCEXIT RELEASE STORAGE AND QUIT @V293598 00697000
- SPACE 00698000
- SUCADDR EQU * @V293598 00699000
- AL R8,VMDVSTRT GET VDEVBLOK ADDR @VM01086 00700000
- LA R3,DRDADDR EXIT TO ADDRESSING CHECK SET @V293598 00701000
- B SUCEXIT RELEASE STORAGE AND QUIT @V293598 00702000
- SUCCOD0 EQU * @V293598 00703000
- LA R3,DRDEXIT EXIT TO SUCCESSFUL RETURN @V293598 00704000
- SUCEXIT EQU * @V293598 00705000
- LA R0,SFBSIZE+2+(L'VSPXTAG/8) FREE STOR. TO RELSE @V293598 00706000
- L R1,SAVEWRK2 ADDR OF FREE STORAGE WORK BUFFER @V293598 00707000
- CALL DMKFRET RELEASE THE WORK BUFFER @V293598 00708000
- L R1,SAVEWRK1 ADDR OF SYS VIRTUAL PAGE @V293598 00709000
- CALL DMKPGTVR RELEASE THE SYS VIRTUAL PAGE @V293598 00710000
- BR R3 RETURN TO PRESET EXIT ROUTINE @V293598 00711000
- EJECT 00712000
- *---------------------------------------------------------------------* 00713000
- * TO2048 - MOVE DATA TO NEXT HALF-PAGE BOUNDARY * 00714000
- *---------------------------------------------------------------------* 00715000
- TO2048 EQU * @V293598 00716000
- LTR R5,R5 IS REQUESTED COUNT ZERO ? @V293598 00717000
- BCR 8,R4 EASILY DONE IF SO @V293598 00718000
- LA R8,2048(,R6) BUMP UP ONE HALF-PAGE @V293598 00719000
- N R8,X2048BND ADDR OF NEXT HALF-PAGE BOUNDARY @V293598 00720000
- SLR R8,R6 COUNT TO END OF HALF-PAGE @V293598 00721000
- CLR R8,R5 DOES REQUEST CROSS THE BOUNDARY ?@V293598 00722000
- BNH TOBOUND YES - MOVE JUST THAT FAR @V293598 00723000
- LR R8,R5 SET TO MOVE ONLY REQUESTED COUNT @V293598 00724000
- TOBOUND EQU * @V293598 00725000
- SLR R5,R8 SET RESIDUAL COUNT FOR RETURN @V293598 00726000
- BCTR R8,0 COUNT TO BE MOVED -1 @V293598 00727000
- TONEXT EQU * @V293598 00728000
- CL R8,F256 LESS THAN A FULL BLOCK TO GO ? @V293598 00729000
- BL TOFINISH YES - MOVE REMAINDER @V293598 00730000
- MVC 0(256,R6),0(R7) MOVE A FULL BLOCK @V293598 00731000
- LA R6,256(,R6) UPDATE TO ADDRESS @V293598 00732000
- LA R7,256(,R7) UPDATE FROM ADDRESS @V293598 00733000
- SL R8,F256 DECREMENT REMAINING COUNT @V293598 00734000
- BNZ TONEXT AND MOVE ANOTHER PIECE @V293598 00735000
- SPACE 00736000
- TOFINISH EQU * @V293598 00737000
- EX R8,TOMOVE MOVE REMAINDER @V293598 00738000
- LA R6,1(R8,R6) FINAL TO ADDRESS @V293598 00739000
- LA R7,1(R8,R7) FINAL FROM ADDRESS @V293598 00740000
- LTR R5,R5 SET RETURN COND CODE @V293598 00741000
- BR R4 RETURN TO CALLER @V293598 00742000
- SPACE 2 00743000
- TOMOVE MVC 0(0,R6),0(R7) EXECUTED TO MOVE REMAINDER @V293598 00744000
- EJECT 00745000
- *. 00746000
- * SUBROUTINE NAME - 00747000
- * 00748000
- * DMKDRDMP 00749000
- * 00750000
- * FUNCTION - 00751000
- * 00752000
- * TO READ A SYSTEM DUMP SPOOL INPUT FILE VIA DIAGNOSE 00753000
- * CODE X'0034' 00754000
- * 00755000
- * ATTRIBUTES - 00756000
- * 00757000
- * RE-ENTRANT, PAGEABLE, CALLED VIA SVC FROM DMKHVCAL 00758000
- * 00759000
- * ENTRY POINT - 00760000
- * 00761000
- * DMKDRDMP 00762000
- * 00763000
- * ENTRY CONDITIONS - 00764000
- * 00765000
- * GPR 13 = ADDRESS OF STANDARD SAVE-AREA 00766000
- * GPR 12 = ADDRESS OF DMKDRDMP 00767000
- * GPR 11 = ADDRESS OF CALLER'S VMBLOK 00768000
- * GPR 6 = ADDRESS OF DIAGNOSE 'R2' VALUE 00769000
- * GPR 5 = ADDRESS OF DIAGNOSE 'R1' VALUE 00770000
- * 00771000
- * EXIT CONDITIONS - 00772000
- * 00773000
- * GPRS 1,3-15 UNCHANGED 00774000
- * GPR 2 = 0 - CONDITION CODE IS SET FOR VIRTUAL MACHINE 00775000
- * GPR 2 > 0 - SIMULATE PROGRAM INTERRUPT FOR VM, 00776000
- * AND GPR 0 = INTERRUPT CODE FOR SIMULATED PROGRAM INTERRUPT 00777000
- * 00778000
- * CALLS TO OTHER ROUTINES - 00779000
- * 00780000
- * DMKSCNVU - TO LOCATE VIRTUAL DEVICE BLOCKS 00781000
- * DMKRPAGT - TO PROVIDE DATA PAGES TO THE VIRTUAL MACHINE 00782000
- * 00783000
- * EXTERNAL REFERENCES - 00784000
- * 00785000
- * DMKSYSOW - SYSTEM OWNED-VOLUME VOLID LIST 00786000
- * DMKHVCPC - DATA TABLE OF PAGES/CYLINDER ON DASD DEVICES 00787000
- * 00788000
- * TABLES / WORK AREAS - 00789000
- * 00790000
- * VDEVBLOK, VSPLCTL, SFBLOK, VMBLOK 00791000
- * 00792000
- EJECT 00793000
- * REGISTER USAGE - 00794000
- * 00795000
- * GPRS 14, 15 LINKAGE REGISTERS 00796000
- * GPR 13 = SAVE-AREA ADDRESSABILITY 00797000
- * GPR 12 = MODULE BASE ADDRESSABILITY 00798000
- * GPR 11 = VMBLOK ADDRESSABILITY 00799000
- * GPR 10 = SFBLOK ADDRESSABILITY 00800000
- * GPR 9 = VSPLCTL ADDRESSABILITY 00801000
- * GPR 8 = VDEVBLOK ADDRESSABILITY 00802000
- * GPR 7 = WORK REGISTER 00803000
- * GPR 6 = DIAGNOSE 'R2' VALUE ADDRESS 00804000
- * GPR 5 = DIAGNOSE 'R1' VALUE ADDRESS 00805000
- * GPRS 0-4 ARE WORK REGISTERS 00806000
- * 00807000
- * OPERATION - 00808000
- * 00809000
- * DIAGNOSE CODE X'0034', PROCESSED BY DMKDRDMP, REQUIRES 00810000
- * TWO REGISTER VALUES FROM THE VIRTUAL MACHINE, AS FOLLOWS: 00811000
- * 'R1' = START ADDRESS OF A FULL-PAGE VIRTUAL BUFFER 00812000
- * 'R2' = ADDRESS OF A VIRTUAL SPOOL INPUT READER 00813000
- * THE REGISTER VALUES ARE EXAMINED FOR VALIDITY AND THE 00814000
- * SPECIFIED DEVICE IS EXMAINED FOR AVAILABILITY. ERROR 00815000
- * RETURN CONDITIONS ARE THE SAME AS FOR DMKDRDER. 00816000
- * IF ALL CHECKS ARE PASSED, THE DEVICE IS CHECKED FOR AN 00817000
- * ALREADY ACTIVE DUMP FILE. IF ONE IS FOUND, THE NEXT RECORD 00818000
- * IS MADE AVAILABLE VIA A CALL TO DMKRPAGT. IF THE END OF 00819000
- * FILE IS HIT, CC = 1 IS SET. IF NO FILE IS ACTIVE, THE INPUT 00820000
- * SPOOL FILE CHAIN IS SEARCHED FOR A DUMP FILE FOR THE CALLING 00821000
- * USER, CC = 2 SET IF NONE ARE FOUND, AND THE FIRST PAGE IS 00822000
- * MADE AVAILABLE IF ONE IS FOUND. SINCE THE SYSTEM DUMP FILES 00823000
- * ARE NOT CHAINED RECORDS, AS ARE REGULAR SPOOL FILES, EACH 00824000
- * SUCCESSIVE RECORD ADDRESS IS CALCULATED FROM THE PREVIOUS 00825000
- * ADDRESS, USING THE TABLE 'DMKHVCPC' TO DETECT CYLINDER 00826000
- * CROSS-OVERS. 00827000
- * NOTE: DMKDRDMP DOES NOT PERFORM ANY AUTOMATIC CLOSE OF THE DUMP 00828000
- * FILES. THE FILE MUST BE CLOSED VIA THE CONSOLE FUNCTIONS 00829000
- * 'CLOSE' OR 'PURGE', EITHER FROM THE USER'S TERMINAL OR 00830000
- * VIA DIAGNOSE CODE '0008'. 00831000
- *. 00832000
- EJECT 00833000
- DMKDRDMP RELOC , READ SYSTEM-DUMP SPOOL FILE 00834000
- SPACE 2 00835000
- NI VMPSW+4,X'CF' SET CONDITION CODE ZERO 00836000
- NI VMPSW+2,X'CF' SET EC-MODE CONDITION CODE = 0 @VA04236 00836100
- MVI SAVEWRK6,X'44' NON-ZERO => PROCESS DUMP FILES 00837000
- L R1,0(,R5) VIRTUAL ADDRESS TO GPR 1 00838000
- LR R5,R1 ...AND GPR 5 00839000
- L R2,F4096 FULL-PAGE FIELD LENGTH 00840000
- BAL R14,ADDCHEK CHECK VALIDITY OF ADDRESS 00841000
- LA R1,VMGPRS+(4*15) GET ADDRESS OF R15 @VA09560 00841100
- CR R1,R6 IS RY = R15 @VA09560 00841200
- BE DRDSPEC SORRY NOT ALLOWED @VA09560 00841300
- L R1,0(,R6) VIRTUAL READER ADDRESS 00842000
- MAXDV R15 GET HIGHEST VIRTUAL DEVICE 00843000
- CLR R1,R15 CHECK ITS VALIDITY 00844000
- BH DRDEVIC INVALID ADDRESS 00845000
- LTR R1,R1 ... 00846000
- BNP DRDEVIC INVALID ADDRESS 00847000
- CALL DMKSCNVU FIND VDEVBLOK 00848000
- BNZ DRDEVIC NOT FOUND 00849000
- CLI VDEVTYPC,CLASURI SPOOL INPUT DEVICE? 00850000
- BNE DRDTYPE NO - INVALID DEVICE TYPE 00851000
- TM VDEVTYPE,TYPRDR IS IT ALSO A CARD-READER? 00852000
- BZ DRDTYPE NO - DON'T SUPPORT PAPER TAPE, ETC. 00853000
- LA R14,DMPAGET HERE IF ALREADY ACTIVE 00854000
- BAL R15,CHKBUSY SEE IF THERE IS AN OPEN FILE 00855000
- * NOPE - FIND A SYSTEM DUMP FILE 00856000
- LA R15,SETCOD2 CC = 2 IF THERE AREN'T ANY FILES 00857000
- BAL R14,SEARCHB FIND ANY SFBLOK FOR THIS USER 00858000
- TM SFBFLAG,SFBDUMP THIS A DUMP FILE ? 00859000
- BZ BEGINB NO - KEEP LOOKING @VA06358 00860000
- CLI SFBMISC1+1,C'V' * IS THIS A VMDUMP? @V67CAH7 00860300
- BE BEGINB * YES...DON'T ALLOW DIAG X34 @V67CAH7 00860600
- BAL R14,CONNECT CONNECT SFBLOK TO VDEVBLOK 00861000
- B DMPAGET1 NO NEED TO CHECK FILE AGAIN @VA14190 00861010
- DMPAGET DS 0H SEE IF ACTIVE FILE IS CP DUMP @VA14190 00862010
- TM SFBFLAG,SFBDUMP IS IT A DUMP? @VA14190 00862030
- BZ DRDBUSY NO - DIAG34 CAN'T READ IT @VA14190 00862050
- CLI SFBMISC1+1,C'V' IS IT A VMDUMP? @VA14190 00862070
- BE DRDBUSY YES - NOT RIGHT FOR DIAG34 @VA14190 00862090
- DMPAGET1 EQU * GIVE ONE PAGE OF DATA TO USER @VA14190 00862110
- TM SFBFLAG,SFBEOF AT END OF FILE NOW ? 00863000
- BO SETCOD1 YES - RETURN CC = 1 00864000
- L R0,VSPDPAGE NEXT PAGE FROM VSPLCTL BLOCK 00865000
- CL R0,SFBLAST IS THIS THE LAST PAGE ? 00866000
- BNE DMPAGEX NO - GIVE IT TO HIM 00867000
- OI SFBFLAG,SFBEOF AT END OF FILE NEXT TIME 00868000
- DMPAGEX EQU * 00869000
- LR R1,R5 VIRTUAL BUFFER ADDRESS 00870000
- CALL DMKRPAGT,PARM=0 HE'LL GET THE PAGE LATER 00871000
- BC 2,DRDPROT OOPS .. TRIED TO OVERLAY A SHARED PAGE 00872000
- BC 1,DRDIOER FATAL I/O ERROR WHILE READING 00873000
- BC 4,DRDLOCK PAGE LOCKED FOR I/O @VA08925 00873100
- LA R4,VSPDPAGE POINT TO THE 'CCPD' 00874000
- BAL R7,CMPNEXT GO COMPUTE NEXT ADDRESS 00875000
- B DRDEXIT ALL THROUGH FOR NOW 00876000
- EJECT 00877000
- CMPNEXT EQU * COMPUTE NEXT PAGE ADDRESS (CCPD) 00878000
- * GPR 4 = ADDRESS OF 'CCPD' FIELD AT ENTRY 00879000
- * GPR 7 = RETURN ADDRESS 00880000
- * 'CCPD' IS UPDATED IN PLACE 00881000
- * COMPUTE NEXT PAGE REFERENCE 'CCPD' 00882000
- SLR R2,R2 00883000
- IC R2,3(0,R4) GET DEVICE OWNDLIST INDEX BYTE 00884000
- SLL R2,3(0) CONVERT TO INDEX... 00885000
- A R2,=A(DMKSYSOW) ...INTO OWNED LIST 00886000
- LH R8,OWNDRDEV-OWNDLIST(,R2) RDEVBLOK INDEX 00887000
- SLL R8,3(0) CONVERT TO BYTE INDEX @V200820 00888000
- A R8,ARIODV RDEVBLOK ADDRESS 00889000
- USING RDEVBLOK,R8 00890000
- L R3,=A(DMKHVCPC) PAGES/CYLINDER TABLE IN 'HVC' 00891000
- CLI RDEVTYPE,TYP2305 ZEUS ? 00892000
- BE FNDTYPE YES 00893000
- CLI RDEVTYPE,TYP3340 3340 DASD DEVICE ? @V2A2029 00894000
- BE FNDTYPE YES - 24 PAGES/CYLINDER @V2A2029 00895000
- LA R3,2(,R3) JUMP TO 3330 ENTRIES @V200538 00896000
- CLI RDEVTYPE,TYP3330 MERLIN ? 00897000
- BE FNDTYPE YES 00898000
- LA R3,2(,R3) JUMP TO 3350 ENTRY @V304498 00899000
- CLI RDEVTYPE,TYP3350 3350 DASD DEVICE ? @V304498 00900000
- BE FNDTYPE YES - 120 PAGES/CYLINDER @V304498 00901000
- LA R3,1(,R3) Jump to 3375 entry HRC106DK 00901100
- CLI RDEVTYPE,TYP3375 3375 DASD device ? HRC106DK 00901200
- BE FNDTYPE Yes - 96 pages/cylinder HRC106DK 00901300
- LA R3,1(,R3) Jump to 3380 entry HRC106DK 00901400
- CLI RDEVTYPE,TYP3380 3380 DASD device ? HRC106DK 00901500
- BE FNDTYPE Yes - 150 pages/cylinder HRC106DK 00901600
- LA R3,1(,R3) JUMP TO 2314/2319 ENTRY @V304498 00902000
- CLI RDEVTYPE,TYP2319 LAME DUCK ? 00903000
- BE FNDTYPE YES 00904000
- ********* 00905000
- ABEND 1 WOT HOPPEN ? 00906000
- ********* 00907000
- FNDTYPE EQU * DEVICE TYPE IS RECOGNIZABLE 00908000
- SLR R1,R1 00909000
- IC R1,0(,R3) GET MAXIMUM PAGE NUMBER ON CYL 00910000
- SLR R2,R2 00911000
- IC R2,2(0,R4) CURRENT PAGE NUMBER 00912000
- LA R2,1(,R2) INCREMENT... 00913000
- CR R1,R2 BEYOND END OF CYLINDER ? 00914000
- BL NEXTCYL YES - JUMP TO NEXT CYLINDER 00915000
- STC R2,2(0,R4) RESET PAGE NUMBER 00916000
- BR R7 ...RETURN TO CALLER 00917000
- NEXTCYL EQU * ADVANCE TO NEXT CYLINDER 00918000
- MVI 2(R4),X'01' START AT PAGE ONE... 00919000
- LH R2,0(0,R4) ... 00920000
- LA R2,1(,R2) ...ON THE NEXT CYLINDER 00921000
- STH R2,0(0,R4) RESET IN ADDRESS FIELD 00922000
- BR R7 RETURN TO CALLER 00923000
- EJECT 00924000
- *. 00925000
- * SUBROUTINE NAME - 00926000
- * 00927000
- * DMKDRDDD 00928000
- * 00929000
- * FUNCTION - 00930000
- * 00931000
- * TO DELETE A SYSTEM DUMP SPOOL FILE 00932000
- * 00933000
- * ATTRIBUTES - 00934000
- * 00935000
- * RE-ENTRANT, PAGEABLE, CALLED VIA SVC FROM DMKVSPCR 00936000
- * 00937000
- * ENTRY POINT - 00938000
- * 00939000
- * DMKDRDDD 00940000
- * 00941000
- * ENTRY CONDITIONS - 00942000
- * 00943000
- * GPR 13 = ADDRESS OF A STANDARD SAVE-AREA 00944000
- * GPR 12 = ADDRESS OF DMKDRDDD 00945000
- * GPR 11 = ADDRESS OF CALLER'S VMBLOK 00946000
- * GPR 7 = SFBLOK ADDRESS OF FILE TO BE DELETED 00947000
- * 00948000
- * EXIT CONDITIONS - 00949000
- * 00950000
- * FILE HAS BEEN DELETED, REGISTERS ARE UNCHANGED 00951000
- * 00952000
- * CALLS TO OTHER ROUTINES - 00953000
- * 00954000
- * DMKPGTSD - TO RELEASE A SINGLE DASD RECORD 00955000
- * 00956000
- * EXTERNAL REFERENCES - NONE 00957000
- * 00958000
- * TABLES / WORK AREAS - 00959000
- * 00960000
- * SWPTABLE - DUMMY FOR USE BY DMKPGTSD 00961000
- * SFBLOK 00962000
- * 00963000
- * REGISTER USAGE - 00964000
- * 00965000
- * GPRS 14, 15 LINKAGE REGISTERS 00966000
- * GPR 13 = SAVE-AREA ADDRESSABILITY 00967000
- * GPR 12 = MODULE BASE ADDRESSABILITY 00968000
- * GPR 11 = VMBLOK ADDRESSABILITY 00969000
- * GPR 10 = SFBLOK ADDRESSABILITY 00970000
- * GPRS 8, 9 UNUSED 00971000
- * GPR 7 = INTERNAL LINKAGE 00972000
- * GPR 6 = UNUSED 00973000
- * GPR 5 = DUMMY SWPTABLE ENTRY POINTER 00974000
- * GPR 4 = POINTER TO 'CCPD' FOR 'CMPNEXT' ROUTINE 00975000
- * GPRS 0-3 WORK REGISTERS 00976000
- * 00977000
- EJECT 00978000
- * OPERATION - 00979000
- * 00980000
- * EACH RECORD OF THE SYSTEM DUMP FILE IS RELEASED FROM 00981000
- * SECONDARY STORAGE VIA A CALL TO DMKPGTSD. SUCCESSIVE 00982000
- * RECORD ADDRESSES ARE COMPUTED VIA THE 'CMPNEXT' SUBROUTINE 00983000
- * AND THE DMKHVCPC DATA TABLE. WHEN THE LAST RECORD HAS 00984000
- * BEEN DELETED, AN EXIT IS TAKEN VIA SVC 12. 00985000
- *. 00986000
- SPACE 3 00987000
- DMKDRDDD RELOC , DELETE SYSTEM-DUMP SPOOL FILE 00988000
- SPACE 00989000
- LR R10,R7 SFBLOK ADDRESS TO GPR 10 00990000
- SLR R1,R1 USE SAVEWRK2,3 AS DUMMY 'SWPENT' 00991000
- ST R1,SAVEWRK2 ...FOR CALLS TO 'DMKPGTSD' 00992000
- L R1,SFBSTART FIRST PAGE IN FILE 00993000
- ST R1,SAVEWRK3 ... 00994000
- ST R1,SAVEWRK1 SAVE 'CCPD' SAFELY (PGTSD CLEARS IT 00995000
- * FROM THE PSEUDO-SWAP-TABLE) 00996000
- LA R5,SAVEWRK2 POINT AT SWPENT FOR PGTSD 00997000
- CALL DMKPGTSD RELEASE ONE PAGE DASD 00998000
- CLC SFBLAST(4),SAVEWRK1 AT END OF FILE YET ? 00999000
- BE DRDEXIT YES - ALL DONE 01000000
- LA R4,SAVEWRK1 POINT AT 'CCPD' DIRECTLY 01001000
- BAL R7,CMPNEXT ...TO COMPUTE NEXT ADDRESS 01002000
- DMPDELT EQU * LOOP THROUGH THE FILE 01003000
- L R1,SAVEWRK1 PICK UP NEW 'CCPD' 01004000
- ST R1,SAVEWRK3 ...INTO PSEUDO-SWAP TABLE ENTRY 01005000
- CALL DMKPGTSD DELETE ANOTHER PAGE 01006000
- CLC SFBLAST(4),SAVEWRK1 AT END OF FILE YET ? 01007000
- BNE FNDTYPE NO - GET NEXT ( R7 IS STILL SET ) 01008000
- B DRDEXIT ALL DONE - RETURN TO SPL 01009000
- EJECT 01010000
- *. 01011000
- * SUBROUTINE NAME - 01012000
- * 01013000
- * DMKDRDSY 01014000
- * 01015000
- * FUNCTION - 01016000
- * 01017000
- * TO READ THE SYSTEM SYMBOL TABLE CSECT VIA DIAGNOSE 01018000
- * CODE X'0038' 01019000
- * 01020000
- * ATTRIBUTES - 01021000
- * 01022000
- * RE-ENTRANT, PAGEABLE, CALLED VIA SVC FROM DMKHVCAL 01023000
- * 01024000
- * ENTRY POINT - 01025000
- * 01026000
- * DMKDRDSY 01027000
- * 01028000
- * ENTRY CONDITIONS - 01029000
- * 01030000
- * GPR 13 = ADDRESS OF A STANDARD SAVE-AREA 01031000
- * GPR 12 = ADDRESS OF DMKDRDSY 01032000
- * GPR 11 = ADDRESS OF CALLER'S VMBLOK 01033000
- * GPR 6 = ADDRESS OF DIAGNOSE 'R2' VALUE 01034000
- * GPR 5 = ADDRESS OF DIAGNOSE 'R1' VALUE 01035000
- * 01036000
- * EXIT CONDITIONS - 01037000
- * 01038000
- * GPRS 1,3-15 UNCHANGED 01039000
- * GPR 2 = 0 - CONDITION CODE IS SET FOR VIRTUAL MACHINE 01040000
- * GPR 2 > 0 - SIMULATE PROGRAM INTERRUPT 01041000
- * AND GPR 0 = INTERRUPT CODE FOR SIMULATED PROGRAM INTERRUPT 01042000
- * 01043000
- * CALLS TO OTHER ROUTINES - 01044000
- * 01045000
- * DMKRPAGT - TO PROVIDE THE SYMBOL TABLE PAGE TO THE VM 01046000
- * 01047000
- * EXTERNAL REFERENCES - 01048000
- * 01049000
- * DMKSYM - SYSTEM SYMBOL TABLE CSECT 01050000
- * 01051000
- * TABLES / WORK AREAS - 01052000
- * 01053000
- * DMKSYSVM - SYSTEM VMBLOK, SWAPTABLES 01054000
- * 01055000
- EJECT 01056000
- * REGISTER USAGE - 01057000
- * 01058000
- * GPRS 14, 15 LINKAGE REGISTERS 01059000
- * GPR 13 = SAVE-AREA ADDRESSABILITY 01060000
- * GPR 12 = MODULE BASE ADDRESSABILITY 01061000
- * GPR 11 = VMBLOK ADDRESSABILITY 01062000
- * GPR 10 = SYSTEM VMBLOK ADDRESS 01063000
- * GPRS 0-9 ARE WORK REGISTERS 01064000
- * 01065000
- * OPERATION - 01066000
- * 01067000
- * DIAGNOSE CODE X'0038', PROCESSED BY DMKDRDSY, REQUIRES A 01068000
- * SINGLE REGISTER VALUE, AS FOLLOWS: 01069000
- * 'R1' = START ADDRESS OF FULL-PAGE BUFFER 01070000
- * THE ADDRESS IS EXMAINED FOR VALIDITY, AND AN ADDRESSING OR 01071000
- * SPECIFICATION EXCEPTION IS GENERATED IF THE ADDRESS IS 01072500
- * INVALID OR NOT PAGE-BOUNDARY ALIGNED. NEXT, THE SYSTEM 01073000
- * VMBLOK SWAP-TABLE IS REFERENCED TO FIND THE COMPRESSED 01074000
- * DASD ADDRESS (CCPD) OF THE SYMBOL TABLE CSECT (DMKDYM). 01075000
- * IF THE CSECT IS NOT DEFINED, CC = 1 IS SET, INDICATING 01076000
- * THAT NO SYMBOL TABLE IS AVAILABLE. IF THE PAGE BUFFER IS 01077300
- * LOCKED FOR AN I/O OPERATION, CC=3 IS SET. OTHERWISE, THE FULL 01077600
- * PAGE OF DATA IS MADE AVAILABLE TO THE VIRTUAL MACHINE VIA 01078000
- * A CALL TO DMKRPAGT, AND VIRTUAL CC = 0 IS SET. 01079000
- *. 01080000
- EJECT 01081000
- DMKDRDSY RELOC , READ SYSTEM SYMBOL TABLE PAGE 01082000
- SPACE 01083000
- NI VMPSW+4,X'CF' SET CONDITION CODE = 0 01084000
- NI VMPSW+2,X'CF' SET EC-MODE CONDITION CODE = 0 @VA04236 01084100
- L R5,0(,R5) VIRTUAL ADDRESS TO GPR 5 01085000
- LR R1,R5 ...AND GPR 1 ALSO 01086000
- L R2,F4096 FULL-PAGE FIELD 01087000
- BAL R14,ADDCHEK VALIDATE THE ADDRESS 01088000
- L R10,ASYSVM SYSTEM VMBLOK 01089000
- L R10,VMSEG-VMBLOK(,R10) SYSTEM ADDRESS SPACE 01090000
- L R9,=A(DMKSYM) SYMBOL TABLE ADDRESS 01091000
- SLR R8,R8 SET UP A MASK... 01092000
- ICM R8,4,FFS ...TO GET THE SEGMENT NUMBER 01093000
- NR R8,R9 GPR 8 = SEGMENT NUMBER 01094000
- XR R9,R8 GPR 9 = PAGE NUMBER W/IN SEGMENT 01095000
- SRL R8,14(0) CONVERT TO SEGMENT TABLE INDEX 01096000
- SRL R9,9(0) CONVERT TO SWAP-TABLE INDEX 01097000
- LA R7,0(R8,R10) R7 = SEGMENT TABLE ENTRY ADDRESS 01098000
- TM 3(R7),X'01' IS THE SEGMENT AVAILABLE ? 01099000
- BO SETCOD1 NO - CC = 1 01100000
- ICM R7,7,1(R7) GET PAGE TABLE ADDRESS 01101000
- S R7,F8 BACK UP TO PAGETABLE HEADER 01102000
- L R7,4(0,R7) PICK UP SWAPTABLE POINTER 01103000
- LA R7,0(R9,R7) GPR 7 = SWAP-TABLE ENTRY ADDRESS 01104000
- L R0,4(,R7) GPR 0 = 'CCPD' FOR 'DMKSYM' 01105000
- LTR R0,R0 SAFETY CHECK 01106000
- BNP SETCOD1 GOOD THING, TOO 01107000
- LR R1,R5 VIRTUAL ADDRESS TO GPR 1 01108000
- CALL DMKRPAGT,PARM=0 USER WILL GET THE PAGE LATER 01109000
- BC 2,DRDPROT OOPS .. TRIED TO OVERLAY A SHARED PAGE 01110000
- BC 1,DRDIOER FATAL I/O ERROR WHILE READING 01111000
- BC 4,SETCC3 PAGE LOCKED FOR I/O @VA08925 01111500
- B DRDEXIT EXIT WITH CC = 0 01112000
- SPACE 2 01113000
- LTORG 01114000
- EJECT 01115000
- COPY SPOOL 01116000
- COPY VMBLOK 01117000
- COPY SAVE 01118000
- COPY EQU 01119000
- COPY RBLOKS 01120000
- COPY VBLOKS 01121000
- COPY ALLOC 01122000
- COPY DEVTYPES 01123000
- PSA 01124000
- END DMKDRD 01125000
ibm/vm370-lib/cp/dmkdrd.assemble_src.txt ยท Last modified: 2023/08/06 13:36 by Site Administrator