HVE TITLE 'DMKHVE (CP) VM/370 - RELEASE 6' 00001000 ISEQ 73,80 00002000 COPY OPTIONS 00003000 COPY LOCAL 00004000 *. 00005000 * MODULE NAME - 00006000 * 00007000 * DMKHVE 00008000 * 00009000 * CONTENTS - 00010000 * 00011000 * DMKHVEYL - DATA TABLE - DASD CYLINDERS/DEVICE 00012000 * DMKHVEPC - DATA TABLE - DASD PAGES/CYLINDER 00013000 *. 00014000 SPACE 2 00015000 DMKHVE START 0 @VM03170 00016000 MODID DC CL8'DMKHVE' MODULE IDENTIFIER @VM03170 00017000 SPACE 00018000 ENTRY DMKHVEYL,DMKHVEPC @VM03170 00019000 EXTRN DMKSYSER 00020000 EXTRN DMKSYSCT @V5088AA 00021000 EXTRN DMKIOEFR @V5088AA 00022000 EXTRN DMKIOEHS @V5088AA 00023000 EXTRN DMKIOECT @V5088AA 00024000 EXTRN DMKSCNRU,DMKRPAGT 00025000 EJECT 00026000 *. 00027000 * 00028000 * SUBROUTINE NAME - 00029000 * 00030000 * DMKHVEAL 00031000 * 00032000 * FUNCTION - 00033000 * 00034000 * TO PERFORM SERVICES FOR VIRTUAL MACHINES AS REQUESTED 00035000 * VIA THE DIAGNOSE INSTRUCTION. 00036000 * 00037000 * ATTRIBUTES - 00038000 * 00039000 * REENTRANT, PAGEABLE, CALLED VIA SVC 00040000 * 00041000 * ENTRY POINTS - 00042000 * 00043000 * DMKHVEAL - CALLED VIA SVC FROM DMKHVC 00044000 * 00045000 * 00046000 * ENTRY CONDITIONS - 00047000 * 00048000 * FOR DMKHVEAL: 00049000 * GPR 12 = ADDRESS OF DMKHVEAL 00050000 * GPR 11 = ADDRESS OF VMBLOK 00051000 * 'VMINST' FIELD CONTAINS THE DIAGNOSE INSTRUCTION IMAGE 00052000 * 00053000 * EXIT CONDITIONS - 00054000 * 00055000 * DEPENDENT ON THE SERVICE PERFORMED. CONTROL RETURNS 00056000 * TO THE USER VIA DMKDSPCH. 00057000 * 00058000 * CALLS TO OTHER ROUTINES - 00059000 * 00060000 * DMKDSPCH - TO RE-DISPATCH THE SERVICED USER 00061000 * DMKRPAGT - TO PROVIDE A USER WITH ONE PAGE OF SYSTEM DATA 00062000 * DMKSCNRU - TO LOCATE THE SYSRES RDEVBLOK 00063000 * 00064000 EJECT 00065000 * EXTERNAL REFERENCES - 00066000 * 00067000 * DMKSYSER - DASD START CYLINDER OF ERROR RECORDING AREA 00068000 * DMKIOEFR - INDICATION IF FRAME RECORDS ARE PRESENT 00069000 * ON THE ERROR RECORDING CYLINDERS 00070000 * DMKIOEHS - DASD START OF FIRST ERROR RECORD 00071000 * DMKIOECT - COUNT OF CYLINDERS FOR ERROR RECORDING 00072000 * 00073000 * TABLES / WORK AREAS - 00074000 * 00075000 * VMBLOK, RDEVBLOK 00076000 * 00077000 * REGISTER USAGE - 00078000 * 00079000 * GPR 12 = BASE REGISTER FOR DMKHVEAL 00080000 * GPR 11 = VMBLOK ADDRESSABILITY 00081000 * GPR 9 = INTERNAL LINK REGISTER 00082000 * GPR 6 = ADDRESS OF DIAGNOSE 'R2' VALUE 00083000 * GPR 5 = ADDRESS OF DIAGNOSE 'R1' VALUE 00084000 * 00085000 * NOTES - 00086000 * 00087000 * AN ARTIFICIAL PROGRAM INTERRUPT (PRIVILEGED OPERATION 00088000 * EXCEPTION WHILE IN VIRTUAL SUPERVISOR STATE) IS GENER- 00089000 * ATED BY DMKHVEAL WHENEVER A VIRTUAL MACHINE REQUESTS 00090000 * A SERVICE WHICH IS RESTRICTED TO COMMAND CLASSES OTHER 00091000 * THAN THOSE ALLOWED TO THE VIRTUAL MACHINE. 00092000 * 00093000 * OPERATION - 00094000 * 00095000 * THE FUNCTION CODE CONTAINED IN THE ADDRESS FIELD OF THE 00096000 * DIAGNOSE INSTRUCTION IS EXAMINED FOR VALIDITY. 00097000 * A SPECIFICATION EXECPTION IS REFLECTED TO THE VIRTUAL 00098000 * MACHINE IF THE CODE IS UNRECOGNIZED OR NOT A MULTIPLE 00099000 * OF 4. A PRIVILEGED-OPERATION INTERRUPT IS GENERATED IF A 00100000 * RESTRICTED SERVICE IS REQUESTED BY THE VIRTUAL MACHINE. 00101000 * 00102000 * SERVICES AVAILABLE VIA VIRTUAL DIAGNOSE ARE AS FOLLOWS: 00103000 * 00104000 * CODE = X'002C' 00105000 * SUBCODE = '01' RETURN DASD START ADDRESS OF 00106000 * _______________ ERROR RECORDING DATA AREA PLUS 00107000 * COUNT OF ERROR RECORDING CYLS. 00108000 * (CLASS C, E, OR F) 00109000 * 'R1' = ON RETURN: COMPRESSED DASD ADDRESS (CCPD) OF 00110000 * FIRST RECORD IN ERROR RECORDING AREA. 00111000 * 00112000 * THE COMPRESSED DASD ADDRESS IS CONTRUCTED FROM THE 00113000 * START CYLINDER NUMBER OF THE ERROR RECORDING AREA (FROM 00114000 * DMKSYSER) AND THE DEVICE CODE (RDEVCODE) FROM THE SYSTEM 00115000 * IPL DEVICE RDEVBLOK. THE VIRTUAL CONDITION CODE IS SET 00116000 * TO ZERO AND RETURN IS VIA DMKDSPCH. 00117000 * 00118000 * 'R2' = ON RETURN: NUMBER OF CYLINDERS TO BE USED FOR 00119000 * ERROR RECORDING (IN LOW-ORDER HALF-WORD) 00120000 * 00121000 * SUBCODE = X'02' RETURN THE DASD LOCATION OF 1ST 00122000 * _______________ ERROR RECORD. 00123000 * 00124000 * 'R1' = ON RETURN: DASD LOCATION (IN CB0R FORMAT) OF 00125000 * 1ST ERROR RECORD 00126000 * 00127000 * SUBCODE = X'04' RETURN INDICATION OF WHETHER 00128000 * _______________ THERE ARE FRAME RECORDS ON THE 00129000 * ERROR RECORDING CYLINDERS 00130000 * 00131000 * 'R2' = ON RETURN: X'02' IN HIGH-ORDER BYTE IF FRAME 00132000 * RECORDS ARE PRESENT ON ERROR RECORDING CYLS; 00133000 * X'00' IF NO FRAME RECORDS ARE PRESENT. 00134000 * 00135000 * CODE = X'0030' READ ONE RECORD OF ERROR RECORDING AREA DATA 00136000 * (CLASS C, E, OR F) 00137000 * 'R1' = COMPRESSED DASD ADDRESS (CCPD) OF REQUESTED DATA 00138000 * 'R2' = START ADDRESS OF A VIRTUAL STORAGE FULL-PAGE BUFFER 00139000 * 00140000 * THE DASD ADDRESS IS EXAMINED FOR VALIDITY, AND IF 00141000 * IT IS O.K., THE DATA RECORD IS MADE AVAILABLE VIA A CALL 00142000 * TO DMKRPAGT. THE VIRTUAL CONDITION CODE IS SET AS FOLLOWS: 00143000 * CC = 0 SUCCESSFUL READ, DATA IS AVAILABLE 00144000 * CC = 1 END OF CYLINDER REACHED, NO DATA 00145000 * CC = 2 => FATAL I/O ERROR READING DATA PAGE 00146000 * CC = 3 RY+1 = 4 INVALID CYLINDER, OUTSIDE OF RECORDING AREA 00147000 * CC = 3 RY+1 = 20 PAGE BUFFER LOCKED FOR I/O 00148000 * 00149000 * CODES = X'0088' THRU X'00FC' RESERVED FOR IBM USE 00150000 * CODES = X'0100' THRU X'01FC' RESERVED FOR INSTALLATION USE 00151000 *. 00152000 EJECT 00153000 *---------------------------------------------------------------------* 00154000 * * 00155000 * PROCESS VIRTUAL DIAGNOSE FOR VIRTUAL MACHINES * 00156000 * * 00157000 *---------------------------------------------------------------------* 00158000 USING SAVEAREA,R13 @VM03170 00159000 DMKHVEAL RELOC @VM03170 00160000 USING PSA,0 00161000 USING VMBLOK,R11 00162000 SPACE 2 00163000 TM VMINST+3,X'03' IS CODE MULTIPLE OF 4? 00164000 BNZ SPECERR NO - SPECIFICATION 00165000 IC R5,VMINST+1 GET REGISTERS SPECIFIED 00166000 LR R6,R5 00167000 SLL R6,2(0) USER'S 'R2' NUMBER 00168000 N R6,F60 ... 00169000 SRL R5,2(0) ... 00170000 N R5,F60 REGISTER NO. * 4 00171000 LA R5,VMGPRS(R5) ADDR OF 'R1' IN VMBLOK 00172000 LA R6,VMGPRS(R6) ADDR OF 'R2' IN VMBLOK 00173000 LH R4,VMINST+2 GET FUNCTION CODE FROM INSTRUCTIO@V200820 00174000 CL R4,=A(HVEMAXC) WITHIN SYSTEM SUPPORTED RANGE ? @VM03170 00175000 BH HVEUSER NO -- CHECK FOR INSTALLATION CODE@VM03170 00176000 B HVEODER(R4) JUMP INTO IT @VM03170 00177000 SPACE 2 00178000 HVEODER EQU * DECODING TABLE FOR HVE'S @VM03170 00179000 B HVEEXIT '000' - SUPPORTED BY DMKHVD @VM03170 00180000 B HVEEXIT '004' - SUPPORTED BY DMKHVD 00181000 B HVEEXIT '008' - SUPPORTED BY DMKHVC @VM03170 00182000 B HVEEXIT '00C' - SUPPORTED BY DMKHVC @VM03170 00183000 B HVEEXIT '010' - SUPPORTED BY DMKHVC @VM03170 00184000 B HVEEXIT '014' - SUPPORTED BY DMKHVD @VM03170 00185000 * 00186000 B HVEEXIT '018' - SUPPORTED BY DMKHVC @VM03170 00187000 B HVEEXIT '01C' - SUPPORTED BY DMKHVD @VM03170 00188000 B HVEEXIT '020' - SUPPORTED BY DMKHVC @VM03170 00189000 B HVEEXIT '024' - SUPPORTED BY DMKHVD @VM03170 00190000 B HVEEXIT '028' - SUPPORTED BY DMKHVC @VM03170 00191000 B HVEEREP1 '02C' - GET DASD START OF @VM03170 00192000 * LOGREC AREA 00193000 B HVEEREP2 '030' - READ ONE PAGE OF LOGREC @VM03170 00194000 * DATA 00195000 B HVEEXIT '034' - SUPPORTED BY DMKHVD @VM03170 00196000 * FILE 00197000 B HVEEXIT '038' - SUPPORTED BY DMKHVD @VM03170 00198000 B HVEEXIT '03C' - SUPPORTED BY DMKHVD @VM03170 00199000 B HVEEXIT '040' - RESERVED FOR FUTURE USE @VM03170 00200000 B HVEEXIT '044' - RESERVED FOR FUTURE USE @VM03170 00201000 B HVEEXIT '048' - RESERVED FOR FUTURE USE @VM03170 00202000 B HVEEXIT '04C' - SUPPORTED BY DMKHVD @VM03170 00203000 B HVEEXIT '050' - SUPPORTED BY DMKHVD @VM03170 00204000 B HVEEXIT '054' - SUPPORTED BY DMKHVD @VM03170 00205000 B HVEEXIT '058' - SUPPORTED BY DMKHVC @VM03170 00206000 B HVEEXIT '05C' - SUPPORTED BY DMKHVC @VM03170 00207000 B HVEEXIT '060' - SUPPORTED BY DMKHVC @VM03170 00208000 B HVEEXIT '064' - SUPPORTED BY DMKHVC @VM03170 00209000 B HVEEXIT '068' - SUPPORTED BY DMKHVC @V60B9BA 00210000 B HVEEXIT '06C' - SUPPORTED BY DMKHVC @V60B9BA 00211000 B HVEEXIT '070' - SUPPORTED BY DMKHVC @V60B9BA 00212000 B HVEEXIT '074' - SUPPORTED BY DMKHVD @V60B9BA 00213000 B HVEEXIT RESERVED FOR X'78' @V60C1BD 00214000 B HVEEXIT RESERVED FOR X'7C' @V60C1BD 00215000 B HVEEXIT RESERVED FOR X'80' @V60C1BD 00216000 B HVEEXIT X'84' - SUPPORTED BY DMKHVC @V60C1BD 00217000 HVEMAXC EQU *-HVEODER-4 MAXIMUM CODE NUMBER DEFINED @VM03170 00218000 EJECT 00219000 HVEUSER EQU * DECODING FOR @VM03170 00220000 * INSTALLATION-DEFINED CODES 00221000 S R4,F256 WITHIN INSTALLATION-DEFINED RANGE@V200820 00222000 BM SPECERR NO -- SPECIFICATION EXCEPTION @V200820 00223000 CL R4,=A(USRMAXC) VALID CODE FOR THIS TABLE ? @V200820 00224000 BH SPECERR NO -- SPECIFICATION EXCEPTION @V200820 00225000 B USRCODE(R4) BRANCH TO PROCESSING ROUTINE @V200820 00226000 SPACE 2 00227000 USRCODE EQU * DECODING TABLE FOR INSTALLATION @V200820 00228000 * CODES 00229000 B SPECERR (PROTOTYPE) @V200820 00230000 USRMAXC EQU *-USRCODE-4 HIGHEST INSTALLATION CODE DEFINED@V200820 00231000 SPACE 2 00232000 HVECC1 TM *+1,X'FF' SET CC=1 @VM03170 00233000 ST R0,SAVER0 SAVE PC INTERRUPT CODE FOR DMKHVE@VM03170 00234000 B GENEXIT RETURN TO CALLER @VM03170 00235000 HVEEXIT CLI *+1,0 SET CC=0 @VM03170 00236000 GENEXIT EXIT RETURN TO CALLER @VM03170 00237000 SPACE 2 00238000 HVEDTC1 EQU * SET CONDITION CODE = 1 @VM03170 00239000 LA R2,X'10' CONDITION CODE WILL BE ONE 00240000 B HVECSET GO SET CONDITION CODE @VM03170 00241000 HVEDTC2 EQU * SET CONDITION CODE = 2 @VM03170 00242000 LA R2,X'20' CONDITION CODE WILL BE TWO 00243000 B HVECSET GO SET CONDITION CODE @VM03170 00244000 HVEDTC3 EQU * SET CONDITION CODE = 3 @VM03170 00245000 LA R2,X'30' CONDITION CODE WILL BE THREE 00246000 HVECSET EQU * SET VIRTUAL CONDITION CODE @VM03170 00247000 LA R1,VMPSW+4 POSITION IF IN BC MODE 00248000 TM VMESTAT,VMEXTCM (IT'S DIFFERENT FOR ECMODE) 00249000 BZ *+8 00250000 LA R1,VMPSW+2 POSITION IF IN EC MODE 00251000 NI 0(R1),B'11001111' CLEAR ANY EXITING CC @VM03170 00252000 EX R2,HVESETCC SET THE CONDITION CODE IN VMPSW @VM03170 00253000 B HVEEXIT @VM03170 00254000 SPACE 00255000 HVESETCC OI 0(R1),*-* EXECUTED FOR COND. CODE SETTING @VM03170 00256000 EJECT 00257000 *---------------------------------------------------------------------* 00258000 * DASD START OF LOGREC - CODE '02C' FOR CLASS C,E,F ONLY * 00259000 * PLUS CYLINDER COUNT @V5088AA 00260000 * DASD START OF ERROR RECORDS PLUS FRAME INDICATION @V5088AA 00261000 *---------------------------------------------------------------------* 00262000 HVEEREP1 EQU * PROVIDE DASD START ADDRESS @VM03170 00263000 TM VMCLEVEL,VMCLASSC+VMCLASSE+VMCLASSF ALLOWED ? 00264000 BZ PRIVLGD NO - ERROR 00265000 CLI 3(R5),STRTCNT REQUEST FOR LOGREC START & CT? @V5088AA 00266000 BE ERRSTART GO GET DASD START + NO. CYLS @V5088AA 00267000 TM 3(R5),X'FF'-HDRFRAMS IS REQUEST FOR ANYTHING BUT@V5088AA 00268000 * HDRSTART OR FRAME INDICATOR? @V5088AA 00269000 BNZ SPECERR YES, ERROR @VA10376 00270000 TM 3(R5),HDRFRAMS IS REQUEST AT LEAST '02'/'04'? @V5088AA 00271000 BZ SPECERR NO CODE SPECIFIED ON REQUEST @V5088AA 00272000 B HDRFRAME GO SEE WHICH ONE @V5088AA 00273000 ERRSTART EQU * HRC075DK 00274000 L R1,=A(DMKSYSER) -> ERR area cyls info HRC075DK 00274200 LH R1,4(,R1) Get CUU of ERR area HRC075DK 00274400 LR R2,R6 SAVE R6 ACROSS CALL TO DMKSCNRU@V5088AA 00275000 CALL DMKSCNRU FIND RDEVBLOK 00276000 USING RDEVBLOK,R8 00277000 LR R6,R2 RESTORE REGISTER 6 VALUE @V5088AA 00278000 L R2,=A(DMKSYSER) START CYLINDER FOR LOGREC 00279000 LH R3,RDEVCODE DASD CODE, HIGH-ORDER ZERO 00280000 ICM R3,12,0(R2) CONSTRUCT 'CCPD' FORMAT 00281000 ST R3,0(,R5) BACK VIA USER'S 'R1' 00282000 MVI 2(R5),PAGEONE INDICATE FIRST PAGE ON CYL @V5088AA 00283000 L R2,=A(DMKSYSCT) ADDRESS OF COUNT OF REC. CYLS. @V5088AA 00284000 LH R2,0(R2) GET COUNT OF RECORDING CYLS @V5088AA 00285000 ST R2,0(R6) BACK VIA USER'S 'R2' @V5088AA 00286000 B EREPDONE GO SET CONDITION CODE @V5088AA 00287000 SPACE 2 00288000 * HERE TO CALCULATE HDR INFO 00289000 HDRFRAME TM 3(R5),FRAMES IS REQUEST FOR FRAME INDICATOR @V5088AA 00290000 BZ HDRSTART NO, CHECK FOR HDRSTART REQUEST @V5088AA 00291000 L R2,=A(DMKIOEFR) FRAME INDICATOR @V5088AA 00292000 IC R3,0(R2) RETRIEVE ONE-BYTE INDICATOR @V5088AA 00293000 STC R3,3(R6) RETURN VIA USER'S 'R2' @V5088AA 00294000 HDRSTART TM 3(R5),HDRST IS REQUEST FOR HDRSTART VALUE? @V5088AA 00295000 BZ EREPDONE NO, GO SET CONDITION CODE @V5088AA 00296000 L R2,=A(DMKIOEHS) HDRSTART VALUE (DISK ADDRESS @V5088AA 00297000 * FOR FIRST PAGE BEYOND FRAME @V5088AA 00298000 * RECORDS ON ERROR RECORDING CYLS@V5088AA 00299000 * WHERE ERROR RECORDS CAN BEGIN) @V5088AA 00300000 L R3,0(R2) RETRIEVE HDRSTART ADDRESS @V5088AA 00301000 ST R3,0(R5) RETURN VIA USER'S 'R1' @V5088AA 00302000 EREPDONE NI VMPSW+4,X'CF' SET CONDITION CODE = 0 @V5088AA 00303000 NI VMPSW+2,X'CF' SET CONDITION CODE = 0 00304000 B HVEEXIT ...AND RETURN @VM03170 00305000 DROP R8 00306000 EJECT 00307000 *---------------------------------------------------------------------* 00308000 * READ ONE PAGE OF LOGREC - CODE '030' FOR CLASS C,E,F ONLY * 00309000 *---------------------------------------------------------------------* 00310000 HVEEREP2 EQU * READ LOGREC DATA PAGE @VM03170 00311000 TM VMCLEVEL,VMCLASSC+VMCLASSE+VMCLASSF ALLOWED ? 00312000 BZ PRIVLGD NO - ERROR 00313000 NI VMPSW+4,X'CF' SET CONDITION CODE ZERO 00314000 NI VMPSW+2,X'CF' SET CONDITION CODE = 0 00315000 LA R4,VMGPRS+(4*15) GET ADDR OF SAVED R15 @VA08925 00316000 CR R4,R6 IS RY = R15 ?? @VA08925 00317000 BE SPECERR YES, SORRY BUT THATS NOT ALLOWED @VA08925 00318000 L R5,0(,R5) GET 'CCPD' INTO GPR5 00319000 L R4,0(,R6) VIRTUAL PAGE ADDRESS TO GPR 4 00320000 LR R1,R4 ...AND GPR 1 00321000 L R2,F4096 FULL-PAGE FIELD LENGTH 00322000 LA R9,SPECERR SPECIFICATION ERROR IF UNALIGNED 00323000 BAL R10,ADDCHEK CHECK ADDRESS VALIDITY 00324000 L R1,=A(DMKSYSER) -> ERR area cyls info HRC075DK 00325000 LH R1,4(,R1) Get CUU of ERR area HRC075DK 00325500 CALL DMKSCNRU FIND THE RDEVBLOK 00326000 USING RDEVBLOK,R8 00327000 CLM R5,1,RDEVCODE+1 CHECK THE 'D' CODE 00328000 BNE SPECERR NO GOOD 00329000 LA R1,DMKHVEYL CYLINDERS/DEVICE TABLE @VM03170 00330000 LA R2,DMKHVEPC PAGES/CYLINDER TABLE @VM03170 00331000 CLI RDEVTYPE,TYP2305 ZEUS ? 00332000 BNE CK3330 NOPE, GO CHECK OUT 3330 @V200820 00333000 CLI RDEVMDL,1 IS IT MODEL 1 2305? @V200820 00334000 BE CHKVALID YUP, ALL SET. @V200820 00335000 LA R1,2(,R1) MUST BE MODEL 2, ... @V200820 00336000 LA R2,1(,R2) ... SET UP ACCORDINGLY. @V200820 00337000 B CHKVALID NOW GO CHECK IT OUT. @V200820 00338000 CK3330 LA R1,4(,R1) JUMP TO NEXT CLASS ENTRY @V200820 00339000 LA R2,2(,R2) ... @V200820 00340000 CLI RDEVTYPE,TYP3330 MERLIN ? 00341000 BNE CK3350 NOPE, CHECK FOR 3350 @VM03170 00342000 CLI RDEVMDL,11 YUP, IS IT 3330-11? @V200820 00343000 BNE CHKVALID NOPE, MUST BE VANILLA 3330 @V200820 00344000 LA R1,2(,R1) AIM AT 3330-11 ... @V200820 00345000 LA R2,1(,R2) ... VALUES. @V200820 00346000 B CHKVALID AND GO CHECK THEM OUT. @V200820 00347000 CK3350 LA R1,4(,R1) NEXT CYLINDER LIMIT @VM03170 00348000 LA R2,2(,R2) NEXT PAGE LIMIT (35MB) @VM03170 00349000 CLI RDEVTYPE,TYP3350 3350 ?? @VM03170 00350000 BE CHKVALID VALIDATE PAGE AND CYLINDER @VM03170 00351000 LA R1,2(,R1) Point to 3375 cylinder limit HRC106DK 00352090 LA R2,1(,R2) Point to 3375 page limit HRC106DK 00352180 CLI RDEVTYPE,TYP3375 3375 ?? HRC106DK 00352270 BE CHKVALID Validate page and cylinder HRC106DK 00352360 CLI RDEVTYPE,TYP3380 3380 ?? HRC106DK 00352450 BNE CK2314 Skip to next type HRC106DK 00352540 LA R1,2(,R1) Point to 3380 K cylinder limit HRC106DK 00352630 LA R2,1(,R2) Point to 3380 page limit HRC106DK 00352720 TM RDEVMDL,RDEVMD83 Triple density 3380? HRC106DK 00352810 BO CHKVALID Validate page and cylinder HRC106DK 00352900 LA R1,2(,R1) Point to 3380 E cylinder limit HRC106DK 00352990 TM RDEVMDL,RDEVMD82 Double density 3380? HRC106DK 00353080 BO CHKVALID Validate page and cylinder HRC106DK 00353170 LA R1,2(,R1) Point to 3380 A/D/J cyl. limit HRC106DK 00353260 B CHKVALID Validate page and cylinder HRC106DK 00353350 CK2314 LA R1,8(,R1) Skip 3375/3380 cylinder limits HRC106DK 00353440 LA R2,2(,R2) Skip 3375/3380 page limits HRC106DK 00353530 CLI RDEVTYPE,TYP2319 LAME DUCK ? 00354000 BE CHKVALID YES - CHECK 'CCP' 00355000 LA R1,2(,R1) NEXT CYLINDER LIMIT (3340-35MB) @VM03170 00356000 LA R2,1(,R2) NEXT PAGE LIMIT (35MB) @VM03170 00357000 CLI RDEVTYPE,TYP3340 3340 ?? @VM03170 00358000 BNE ABEND1 NO -- UNKNOWN DEVICE TYPE @VM03170 00359000 TM RDEVFTR,FTR35MB 35MB PACK ? @VM03170 00360000 BO CHKVALID YES -- @VM03170 00361000 LA R1,2(,R1) CYLINDER LIMIT FOR 70MB @VM03170 00362000 LA R2,1(,R2) NEXT PAGE LIMIT FOR 3340(70MB) @VM03170 00363000 B CHKVALID VALIDATE PAGE AND CYLINDER @VM03170 00364000 SPACE 00365000 ****** 00366000 ABEND1 ABEND 1 VERY STRANGE SYSRES DEVICE 00367000 ****** 00368000 CHKVALID EQU * CHECK CYLINDER AND PAGE NUMBERS 00369000 CLM R5,12,0(R1) VALID CYLINDER NUMBER ? 00370000 BH HVECC3R4 NO - SET CC = 3, RETURN CODE = 4 @VA08925 00371000 CLM R5,2,0(R2) VALID PAGE WITHIN CYLINDER ? 00372000 BNH GIVEPAG YES - CHECK FOR LOGREC LIMITS 00373000 B HVEDTC1 SET CC = 1 => END OF CYLINDER @VM03170 00374000 HVECC3R4 DS 0H @VA08925 00375000 LA R1,4 GET ERROR RETURN CODE = 4 @VA08925 00376000 HVESETRT DS 0H @VA08925 00377000 IC R2,VMINST+1 GET REGISTERS SPECIFIED @VA08925 00378000 SLL R2,2(0) USER'S RY REGISTER NUMBER @VA08925 00379000 N R2,F60 ..... @VA08925 00380000 LA R2,VMGPRS(R2) ADDR OF RY IN VMGPRS AREA @VA08925 00381000 ST R1,4(,R2) PASS ERROR CODE IN RY+1 @VA08925 00382000 B HVEDTC3 AND SET CC = 3 @VA08925 00383000 HVELOCK DS 0H @VA08925 00384000 LA R1,20 GET RETURN CODE 20 @VA08925 00385000 B HVESETRT AND SET CC = 3, RETURN CODE 20 @VA08925 00386000 EJECT 00387000 GIVEPAG EQU * CHECK CYLINDER LIMITS 00388000 L R1,=A(DMKSYSER) LOGREC START ADDRESS 00389000 L R2,=A(DMKSYSCT) COUNT OF RECORDING CYLS. @V5088AA 00390000 LH R2,0(R2) RETRIEVE NO. OF RECORDING CYLS @V5088AA 00391000 AH R2,0(R1) ADD START OF ERROR AREA @V5088AA 00392000 BCTR R2,0 SUBTRACT ONE @V5088AA 00393000 CLM R5,B'1100',0(R1) COMPARE INPUT 'CC' & RECORDING @V5088AA 00394000 * AREA START--MUST BE >= START, @V5088AA 00395000 * AND <= RECORDING AREA END @V5088AA 00396000 BL HVECC3R4 NO - SET CC = 3, RETURN CODE = 4 @VA08925 00397000 LR R1,R5 INPUT 'CCPD' ADDRESS @V5088AA 00398000 SRL R1,16 ISOLATE 'CC' PORTION @V5088AA 00399000 CR R1,R2 ENSURE 'CC' IS <= END OF AREA @V5088AA 00400000 BH HVECC3R4 NO - SET CC = 3, RETURN CODE = 4 @VA08925 00401000 GIVEDATA EQU * PASS DATA TO USER 00402000 LR R0,R5 'CCPD' OF PAGE 00403000 LR R1,R4 ...AND ADDRESS OF BUFFER 00404000 CALL DMKRPAGT,PARM=0 ASSIGN PAGE TO USER 00405000 BC 2,PROTERR OOPS...TRIED TO OVERLAY A 00406000 * SHARED PAGE 00407000 BC 1,HVEDTC2 FATAL I/O ERROR => CC = < @VM03170 00408000 BC 4,HVELOCK PAGE IS LOCKED FOR I/O @VA08925 00409000 B HVEEXIT HE WILL GET IT LATER @VM03170 00410000 DROP R8 00411000 SPACE 2 00412000 ADDCHEK EQU * EXAMINE ADDRESS FOR VALIDITY 00413000 LA R1,0(,R1) 24 BITS ONLY 00414000 LCTL C1,C1,VMSEG GET CORRECT SEG TABLE @VA08882 00415000 LRA R0,0(,R1) VALID START ADDRESS ? @VM03170 00416000 BC 8+2,ADDCHEK1 CONTINUE IF NOT A SEG EXCEPTION @V408246 00417000 LR R0,R2 SAVE R2 FOR CALL TO PTRAN @V408246 00418000 CALL DMKPTRAN,PARM=DEFER OTHERWISE LET PTRAN HANDLE @V408246 00419000 BC 2,ADDRERR ADDRESSING EXCEPTION @V408246 00420000 LR R2,R0 RESTORE R2 @V408246 00421000 ADDCHEK1 DS 0H @V408246 00422000 LA R14,0(R2,R1) R2 CONTAINS FIELD LENGTH 00423000 BCTR R14,0 BACK UP TO LAST BYTE OF FIELD 00424000 L R15,XPAGNUM PAGE NUMBER MASK 00425000 NR R14,R15 ENDING PAGE ADDRESS 00426000 LRA R0,0(,R14) IS ENDING ADDRESS VALID ? @VM03170 00427000 BC 8+2,ADDCHEK2 CONTINUE IF NOT A SEG EXCEPTION @V408246 00428000 STM R1,R2,SAVEWRK2 SAVE R1,R2 ACROSS CALL TO PTRAN @VA10736 00429000 LR R1,R14 GET VIRT ADDRESS FOR PTRAN @VA08590 00430000 CALL DMKPTRAN,PARM=DEFER OTHERWISE LET PTRAN HANDLE @V408246 00431000 BC 2,ADDRERR ADDRESSING ERROR @V408246 00432000 LM R1,R2,SAVEWRK2 RESTORE R1,R2 AFTER CALL @VA10736 00433000 B ADDCHEK1 GO TRY AGAIN @V408246 00434000 ADDCHEK2 DS 0H @V408246 00435000 NR R15,R1 STARTING PAGE ADDRESS 00436000 CLR R14,R15 CHECK FOR PAGE BOUNDARY CROSSING 00437000 BCR 7,R9 YUP -- TAKE THE GR9 EXIT 00438000 BR R10 RETURN - EVERYTHING IS O.K. 00439000 EJECT 00440000 SPECERR EQU * @V1D0631 00441000 LA R0,X'06' INTERRUPT CODE 00442000 B PROGINT 00443000 SPACE 00444000 ADDRERR EQU * REFLECT ADDRESSING ERROR 00445000 LA R0,X'05' INTERRUPT CODE 00446000 B PROGINT 00447000 SPACE 00448000 PROTERR EQU * REFLECT PROTECTION CHECK 00449000 LA R0,X'04' INTERRUPT CODE 00450000 B PROGINT 00451000 SPACE 00452000 PRIVLGD EQU * REFLECT PRIVILEGED OPERATION 00453000 LA R0,X'02' INTERRUPT CODE 00454000 SPACE 00455000 PROGINT EQU * 00456000 B HVECC1 REFLECT PROGRAM INTERRUPT @VM03170 00457000 EJECT 00458000 DMKHVEYL DS 0D CYLINDERS PER DEVICE - PAGING + @VM03170 00459000 * SPOOLING 00460000 DC H'47' 2305-1 @VA09958 00461000 DC H'95' 2305-2 00462000 DC H'403' 3330 00463000 DC H'807' 3330-11 @V200538 00464000 DC H'554' CYLINDER LIMIT FOR 3350 @VA09958 00465000 DC H'958' Cylinder limit for a 3375 HRC106DK 00465100 DC H'2654' Cylinder limit for a 3380 (K) HRC106DK 00465200 DC H'1769' Cylinder limit for a 3380 (E) HRC106DK 00465300 DC H'884' Cylinder limit for a 3380 (A/D/J)HRC106DK 00465400 DC H'202' 2314, 2319 00466000 DC H'347' CYLINDER LIMIT FOR 3340 (35MB) @V56BDA8 00467000 DC H'695' CYLINDER LIMIT FOR 3340 (70MB) @V56BDA8 00468000 SPACE 2 00469000 DMKHVEPC DS 0D PAGES PER CYLINDER - PAGING + @VM03170 00470000 * SPOOLING 00471000 DC AL1(24) REC/CYL 2305-1 (SAME AS 2305-2) @V200538 00472000 DC AL1(24) 2305-2 00473000 DC AL1(57) 3330 00474000 DC AL1(57) 3330-11 (SAME AS 3330) @V200538 00475000 DC AL1(120) PAGE LIMIT FOR 3350 @VM03170 00476000 DC AL1(96) Page limit for 3375 HRC106DK 00476100 DC AL1(150) Page limit for 3380 HRC106DK 00476200 DC AL1(32) 2314, 2319 00477000 DC AL1(24) PAGE LIMIT FOR 3340 (35MB) @VM03170 00478000 DC AL1(24) PAGE LIMIT FOR 3340 (70MB) @VM03170 00479000 SPACE 00480000 STRTCNT EQU X'01' REQUEST IS FOR DASD START OF @V5088AA 00481000 * ERROR RECORDING AREA + NO. CYLS@V5088AA 00482000 HDRFRAMS EQU X'06' REQUEST IS FOR HDRSTART VALUE @V5088AA 00483000 * AND/OR FRAME INDICATOR @V5088AA 00484000 FRAMES EQU X'04' REQUEST IS FOR FRAME INDICATOR @V5088AA 00485000 HDRST EQU X'02' REQUEST IS FOR HDRSTART ADDR. @V5088AA 00486000 PAGEONE EQU 1 FIRST PAGE ON A CYLINDER @V5088AA 00487000 LTORG 00488000 EJECT 00489000 COPY EQU 00490000 COPY VMBLOK 00491000 COPY IOBLOKS (R9) @V1D0631 00492000 PSA 00493000 COPY UDIRECT 00494000 COPY ACCOUNT 00495000 COPY RBLOKS 00496000 COPY VBLOKS 00497000 COPY DEVTYPES 00498000 COPY SAVE @VM03170 00499000 COPY NETWORK @VM03170 00500000 COPY NPRTBL @V60B9BA 00501000 END DMKHVEAL 00502000