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