ibm:vm370-lib:cp:dmkhve.assemble_src
Table of Contents
DMKHVE Source
References
- Fixes Applied : 2
- This Source Date : Friday, July 25, 1980
- Last Fix ID : [HRC075DK]
Source Listing
- DMKHVE.ASSEMBLE.txt
- 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
ibm/vm370-lib/cp/dmkhve.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator