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