VER TITLE 'DMKVER (CP) VM/370 - RELEASE 6' 00001000 *. 00002000 * 00003000 * MODULE NAME - 00004000 * DMKVER 00005000 * 00006000 * FUNCTION - 00007000 * TO PROCESS ERROR RECORDS PASSED FROM VIRTUAL MACHINES 00008000 * VIA AN SVC 76. 00009000 * 00010000 * ATTRIBUTES - 00011000 * PAGEABLE,REENTRANT,CALLED VIA SVC 00012000 * 00013000 * ENTRY POINTS - 00014000 * DMKVERO - SVC 76 FROM OS, VS/1, VS/2, OR VM/370. 00015000 * DMKVERD - SVC 76 FROM DOS OR DOS/VS. 00016000 * 00017000 * ENTRY CONDITIONS - 00018000 * FOR DMKVERO - 00019000 * GPR0 - 2'S COMPLEMENT OF RECORD LENGTH. 00020000 * GPR1 - ADDRESS OF THE RECORD. 00021000 * FOR DMKVERD - 00022000 * GPR0 - ADDRESS OF THE RECORD. 00023000 * GPR1 - ADDRESS OF CCB(DOS CONTROL BLOCK) 00024000 * COMMON TO BOTH ENTRIES - 00025000 * GPR11 - USERS VMBLOCK ADDRESS. 00026000 * GPR12 - ADDRESS OF ENTRY POINT. 00027000 * GPR13 - ADDRESS OF STANDARD SAVE AREA. 00028000 * 00029000 * EXIT CONDITIONS - 00030000 * 00031000 * NONE 00032000 * 00033000 * CALLS TO OTHER ROUTINES - 00034000 * DMKFREE - TO OBTAIN STORAGE FOR RECORD BUFFER. 00035000 * DMKFRET - TO RETURN STORAGE TO THE SYSTEM. 00036000 * DMKQCNWT - TO SEND MESSAGES TO THE OPERATOR. 00037000 * DMKIOEVR - TO WRITE RECORD TO RECORDING CYLINDER. 00038000 * DMKSCNVU - TO OBTAIN VIRTUAL CANNEL, CONTROL UNIT, AND 00039000 * DEVICE BLOK ADDRESSES. 00040000 * DMKSCNRD - TO OBTAIN REAL DEVICE ADDRESS. 00041000 * DMKCVTBH - TO CONVERT BINARY ADDRESSES TO HEX. 00042000 * 00043000 * EXTERNAL REFERENCES - 00044000 * NONE 00045000 * 00046000 * TABLES / WORKAREAS - 00047000 * NONE 00048000 * 00049000 * REGISTER USAGE - 00050000 * GPR0 - PARAMETER REGISTER 00051000 * GPR1 - PARAMETER REGISTER 00052000 * GPR2 - WORK REGISTER AND PARAMETER REGISTER 00053000 * GPR3 - WORK REGISTER 00054000 * GPR4 - WORK REGISTER 00055000 * GPR5 - WORK REGISTER AND SECONDARY BAL REGISTER 00056000 * GPR6 - WORK REGISTER 00057000 * GPR7 - ADDRESS OF VDEVBLOK 00058000 * GPR8 - ADDRESS OF RDEVBLOK 00059000 * GPR9 - BASE REGISTER FOR ERROR RECORD 00060000 * GPR10 - BAL REGISTER 00061000 * GPR11 - VMBLOK ADDRESS 00062000 * GPR12 - BASE ADDRESS 00063000 * GPR13 - SAVE AREA ADDRESS 00064000 * GPR14 - LINKAGE REGISTER 00065000 * GPR15 - LINKAGE REGISTER 00066000 * 00067000 * NOTES - 00068000 * NONE 00069000 * 00070000 * OPERATION - 00071000 * 00072000 * 1. DMKVERO - ENTRY FOR OS,VS,OR VM TYPE SYSTEM RECORDING. SET 00073000 * A FLAG TO INDICATE AN OS TYPE. CHECK IF THE PASSED RECORD 00074000 * RESIDES WITHIN THE LIMITS OF THE VIRTUAL MACHINE. IF IT 00075000 * DOES, GO TO STEP 3, ELSE RETURN TO DMKPSA TO REFLECT THE 00076000 * SVC BACK TO THE VIRTUAL MACHINE. 00077000 * 2. DMKVERD - ENTRY FROM A DOS TYPE SYSTEM. THE LENGTH OF 00078000 * THE RECORD IS NOT KNOWN IN THIS CASE. IF AT LEAST THE 00079000 * RECORD HEADER RESIDES WITHIN THE LIMITS OF THE VIRTUAL 00080000 * MACHINES STORAGE, A RECORDING WILL BE ATTEMPTED. A RECORD 00081000 * SIZE OF 136 BYTES WILL BE USED IF IT WILL FIT IN USER 00082000 * STORAGE, ELSE A SIZE OF WHATEVER IS LEFT WILL BE USED. 00083000 * 3. CALL DMKFREE TO OBTAIN STORAGE FOR A RECORD BUFFER. MOVE 00084000 * THE RECORD FROM USER STORAGE TO THE BUFFER. 00085000 * 4. IF THE RECORD IS AN OS TYPE, GO TO STEP 5. IF A DOS TYPE, 00086000 * CHECK IF THE RECORD TYPE IS 'OBR'. IF NOT, WE DON'T HAVE 00087000 * A VALID RECORDING. IN THIS CASE - CALL DMKFRET TO RETURN 00088000 * THE BUFFER AND EXIT TO DMKPSA TO REFECT THE SVC TO THE 00089000 * VIRTUAL MACHINE. IF VALID, GO TO STEP 6. 00090000 * 5. USE THE RECORD TYPE TO INDEX INTO A BRANCH TABLE WHICH 00091000 * WILL GIVE CONTROL TO THE APPROPRIATE CONVERSION ROUTINE 00092000 * OR IF INVALID RETURN TO DMKPSA TO REFLECT THE SVC. 00093000 * 6. TYPE30 (OBR) - GO TO STEP 11 TO DO THE COMMON CONVERTS. 00094000 * IF THE DEVICE IS NONDEDICATED DASD, REPLACE THE VOLUME 00095000 * SERIAL, SEEK ADDRESS, AND H. A. WITH THE REAL DATA. ALSO 00096000 * UPDATE SENSE DATA FROM VIRTUAL TO REAL AND THEN GO TO 00097000 * STEP 12. IF THE DEVICE IS DEDICATED, GO RIGHT TO STEP 12. 00098000 * 7. TYPE40 (ABEND) - GO TO STEP 11 TO DO THE COMMON CONVERTS 00099000 * AND THEN GO TO STEP 13. 00100000 * 8. TYPE60 (DDR) - GO TO STEP 11 TO DO THE COMMON CONVERTS. 00101000 * CONVERT THE FROM AND TO CUA'S FROM VIRTUAL TO REAL 00102000 * AND GO TO STEP 13. 00103000 * 9. TYPE70 (MIH) - GO TO STEP 11 FOR COMMON CONVERTS. THEN IF 00104000 * DEVICE IS NONDEDICATED DASD, UPDATE THE VOLUME SERIAL 00105000 * WITH THE REAL VOLUME SERIAL AND GO TO STEP 13. IF DEVICE 00106000 * IS DEDICATED, GO RIGHT TO STEP 13. 00107000 * 10. TYPE90 (MDR) - GO TO STEP 11 TO DO THE COMMON CONVERTS 00108000 * AND THEN GO TO STEP 13. 00109000 * 11. THIS ROUTINE WIIL CONVERT THE FIELDS COMMON TO MORE THAN 00110000 * ONE RECORD TYPE FROM VIRTUAL TO REAL. FAILING CUA'S WILL 00111000 * BE CONVERTED FOR TYPE 30,70, AND 90. THE PROGRAM NAME 00112000 * WILL BE REPLACED WITH THE USERID FOR TYPE 30,40,60,70, 00113000 * AND 90. THE CPUID WILL BE REPLACED WITH THE REAL CPUID 00114000 * FOR ALL RECORDS. 00115000 * 12. SET UP THE DMKVER575I MESSAGE AND CALL DMKQCNWT TO SEND 00116000 * THE MESSAGE TO THE SYSTEMS OPERATOR. 00117000 * 13. RESET THE VMEXWAIT FLAG IN VMRSTAT. THEN CALL DMKIOEVR 00118000 * TO DO THE ACTUAL RECORDING. CALL DMKFRET TO RETURN THE 00119000 * BUFFER TO FREE STORAGE. ISSUE AN SVC 16 TO RETURN THE 00120000 * SAVEAREA TO THE SYSTEM AND GOTO DMKDSPCH. 00121000 *. 00122000 EJECT 00123000 COPY OPTIONS @V1D0226 00124000 COPY LOCAL OPTIONS @V1D0226 00125000 EJECT 00126000 DMKVER CSECT @V1D0226 00127000 SPACE 00128000 DMKVERID DC CL8'DMKVER' MODULE IDENTIFIER @V1D0226 00129000 SPACE 00130000 EXTRN DMKFREE,DMKFRET @V1D0226 00131000 EXTRN DMKQCNWT @V1D0226 00132000 EXTRN DMKIOEVR @V1D0226 00133000 EXTRN DMKSCNVU,DMKSCNRD @V1D0226 00134000 EXTRN DMKCVTBH @V1D0226 00135000 EXTRN DMKSYSTZ @VM08585 00136000 EXTRN DMKVATRN @VM08585 00137000 SPACE 3 00138000 * 00139000 * EQUATES FOR THIS MODULE ONLY 00140000 * 00141000 OS EQU X'80' OS TYPE RECORD @V1D0226 00142000 DOS EQU X'40' DOS TYPE RECORD @V1D0226 00143000 TWOMOVE EQU X'20' RECORD CROSSES PAGE BOUNDARY @V1D0226 00144000 VVADR EQU X'10' PROC. V.M. IN TRANSLATE MODE @VM08585 00145000 * FOLLOWING EQUQTE WILL HAVE TO BE ALTERED FOR ANY NEW RELEASE 00146000 * OF VM370. 00147000 VMSYS EQU X'66' SYSTEM AND RELEASE LEVEL @VA09371 00148110 SPACE 3 00149000 USING PSA,R0 @V1D0226 00150000 USING RDEVBLOK,R8 @V1D0226 00151000 USING VMBLOK,R11 @V1D0226 00152000 USING SAVEAREA,R13 @V1D0226 00153000 EJECT 00154000 DMKVERO RELOC ENTRY FOR OS, VS, OR VM @V1D0226 00155000 MVI SAVEWRK1,OS FLAG AS OS TYPE RECORD @V1D0226 00156000 LR R3,R1 POSSIBLE V-V ADR. @VM08585 00157000 BAL R10,TRNSTEST GO CHECK IT @VM08585 00158000 TM SAVEWRK1,VVADR TRANSLATE MODE V.M. ?? @VM08585 00159000 BO VEROTRN YES --- @VM08585 00160000 LCR R5,R0 BYTE COUNT INTO R5 @VA03323 00161000 CL R1,VMSTOR IS IT A VALID ADDRESS @VM03010 00162000 BNL PSARETRN NO @VA03323 00163000 LA R3,4(R1,R5) ADDRESS + LENGTH + HDR @VA03323 00164000 CL R3,VMSTOR IS IT A VALID RANGE @V304635 00165000 BNL PSARETRN NO @VA03323 00166000 CLR R3,R1 CORE WRAP AROUND? @VA03323 00167000 BNH PSARETRN YES - SORRY @VA03323 00168000 B VERFREE WILL ASSUME FRO NOW THAT IS VALID@V1D0226 00169000 VEROTRN EQU * @VM08585 00170000 L R5,SAVEWRK4 LOAD ORIG. R0 @VM08585 00171000 LCR R5,R5 MAKE POS. @VM08585 00172000 LR R1,R2 REAL ADR TO R1 @VM08585 00173000 B VERFREE @VM08585 00174000 SPACE 4 00175000 DMKVERD RELOC ENTRY FOR DOS, DOS/VS @V1D0226 00176000 MVI SAVEWRK1,DOS FLAG AS DOS TYPE RECORDING @V1D0226 00177000 A R0,F8 ADD 8 TO GET ADR. @VM08564 00178000 LR R3,R0 POSSIBLE V-V ADR. @VM08585 00179000 BAL R10,TRNSTEST GO CHECK IT @VM08585 00180000 TM SAVEWRK1,VVADR TRANSLATE MODE MACHINE ?? @VM08585 00181000 BO DOSTRN YES - - - @VM08585 00182000 LR R1,R0 PUT THE ADDRESS IN GPR1 @V1D0226 00183000 * 00184000 * SINCE THE RECORD SIZE IS NOT KNOWN FOR DOS, WE WILL TRY 00185000 * TO RECORD AS MUCH AS POSSIBLE. IF WE HAVE ENOUGH FOR A 00186000 * HEADER WE WILL RECORD THAT. IF NOT, WILL RETURN TO 00187000 * DMKPSA TO REFLECT THE SVC TO THE VIRTUAL MACHINE. 00188000 * 00189000 L R2,VMSTOR GET VM STORAGE SIZE @V304635 00190000 AH R0,F24+2 BUMP THE ADDRESS PASSED BY 24 @V1D0226 00191000 CR R0,R2 WILL HEADER FIT IN USER STORAGE @V1D0226 00192000 * ??? 00193000 BNL PSARETRN IF NOT, MUST REFLECT THE SVC. @V1D0226 00194000 AH R0,=H'112' ADD MAX SIZE RECORD TO THE @V1D0226 00195000 * ADDRESS 00196000 LTR R0,R0 GO NEGATIVE ??? @VM08500 00197000 BM PSARETRN YES INDEED - SO GET OUT @VM08500 00198000 CR R0,R2 ENOUGH ROOM ???? @V1D0226 00199000 BNL VERSETSM IF NOT - GO SET UP FOR WHAT WE @V1D0226 00200000 * HAVE 00201000 SPACE 00202000 VERSETLG LA R5,136 LOAD MAX RECORD LENGTH @V1D0226 00203000 B VERFREE AND GO TO IT @V1D0226 00204000 DOSTRN EQU * @VM08585 00205000 LR R1,R2 REAL ADDRESS TO R1 @VM08585 00206000 LA R5,136 TRY MAX OBR COUNT @VM08585 00207000 B VERFREE ..... @VM08585 00208000 SPACE 00209000 VERSETSM LR R5,R2 MOVE MAX ADDRESS TO R5 @V1D0226 00210000 SR R5,R1 MAX BYTE COUNT CAN HAVE @V1D0226 00211000 SPACE 00212000 VERFREE EQU * @V1D0226 00213000 * 00214000 * WHEN COME HERE, GPR5 = BYTE COUNT AND GPR1 = RECORD ADDRESS 00215000 * 00216000 LR R0,R5 BYTE COUNT TO GPR0 @V1D0226 00217000 AH R0,F4+2 ADD 4 BYTES FOR SIZE FIELD @V1D0226 00218000 ST R5,SAVEWRK8 SAVE CALLER BYTE COUNT @VA04327 00218500 LA R6,4075 MAX SIZE RECORDING CAN HANDLE @VM08500 00219000 CLR R0,R6 CAN WE DO IT? @VA03679 00220000 BNL PSARETRN NO - SO FORGET IT @VM08500 00221000 A R0,F7 ROUND THE BYTE COUNT UP @V1D0226 00222000 SRL R0,3 DIVIDE BY EIGHT FOR FREE CALL @V1D0226 00223000 ST R0,SAVEWRK9 SAVE THIS FOR LATER FRET @V1D0226 00224000 LR R4,R1 RECORD ADR. TO R4 @VM08585 00225000 CALL DMKFREE GET STORAGE FOR RECORD @V1D0226 00226000 LR R9,R1 POINT GPR9 TO THIS AREA @V1D0226 00227000 LA R9,4(,R9) BUMP R9 PAST RECORD SIZE FIELD @V1D0226 00228000 L R2,F4095 LOAD GPR2 WITH FFF @V1D0226 00229000 OR R2,R4 GET MAX ADDRESS FOR THIS PAGE @V1D0226 00230000 LR R3,R5 BYTE COUNT TO GPR3 @V1D0226 00231000 SL R3,F1 MINUS ONE TO CALC HIGH ADDRESS @V1D0226 00232000 AR R3,R4 HIGHEST ADDRESS NEEDED @VM08585 00233000 * NEEDED 00234000 CR R3,R2 IS IT ALL IN ONE PAGE @V1D0226 00235000 BNH ONEMOVE BRANCH IF IT DOES @V1D0226 00236000 OI SAVEWRK1,TWOMOVE FLAG FOR PAGE BOUNDARY XOVER @VA05851 00237000 LA R2,1(,R2) START ADDRESS OF SECOND PAGE @VA05851 00237750 TM SAVEWRK1,VVADR PROCESS TRANS. MODE V.M. ?? @VA05851 00238500 BO TRNS2MOV MUST HANDLE DIFFERENTLY @VA05851 00239250 ST R2,SAVEWRK3 SAVE FOR LATER @V1D0226 00241000 SR R3,R2 GET COUNT FOR SECOND PAGE @V1D0226 00242000 AL R3,F1 ADD ONE BACK IN @V1D0226 00243000 ST R3,SAVEWRK2 AND SAVE IT FOR LATER @V1D0226 00244000 SR R5,R3 BYTE COUNT FOR FIRST MOVE @V1D0226 00245000 SPACE 00246000 ONEMOVE EQU * @V1D0226 00247000 LR R6,R9 LOAD GPR6 WITH 'TO' ADDRESS @V1D0226 00248000 LR R7,R5 BYTE COUNT FOR THE MOVE @V1D0226 00249000 TM SAVEWRK1,VVADR PROC. TRANSLATE V.M. ?? @VM08585 00250000 BO RECMOVE YEP -- @VM08585 00251000 PAGBRING LR R1,R4 VADDR TO R1 @VA05851 00252000 TRANS 2,1,OPT=(BRING,DEFER) LOAD THE PAGE @VA05851 00252750 LR R4,R2 LOAD THE REAL ADDRESS IN GPR4 @V1D0226 00254000 RECMOVE EQU * @VM08585 00255000 MVCL R6,R4 DO THE MOVE @V1D0226 00256000 TM SAVEWRK1,TWOMOVE DO WE NEED A SECOND MOVE @V1D0226 00257000 BZ BUFFUL NO - GO PROCESS RECORD @V1D0226 00258000 NI SAVEWRK1,X'FF'-TWOMOVE RESET FLAG @V1D0226 00259000 L R4,SAVEWRK3 LOAD NEXT ADDRESS @VA05851 00260000 L R5,SAVEWRK2 AND THE BYTE COUNT FOR THE MVCL @V1D0226 00262000 LR R7,R5 TO GPR7 ALSO @V1D0226 00263000 TM SAVEWRK1,VVADR TRANS MODE V.M. ?? @VM08585 00264000 BO RECMOVE DO THE MOVE @VM08585 00265000 B PAGBRING LOOP BACK FOR NEXT PAGE @V1D0226 00266000 TRNS2MOV EQU * @VM08585 00267000 LR R7,R2 UPPER PAGE ADDR. TO R7 @VM08585 00268000 SR R7,R4 R7 NOW HAS FIRST BYTE COUNT @VM08585 00269000 SR R5,R7 GET SECOND MOVE COUNT @VM08585 00270000 ST R5,SAVEWRK2 AND SAVE IT @VM08585 00271000 LR R5,R7 NOW HAVE COUNT FOR 1ST MOVE @VM08585 00272000 TM SAVEWRK1,DOS DOS V.M. @VM08585 00273000 BO LOADDOS YES --- @VM08585 00274000 L R3,SAVEWRK5 LOAD ORIG OS ADR. @VM08585 00275000 B NEXTPAG .... @VM08585 00276000 LOADDOS EQU * @VM08585 00277000 L R3,SAVEWRK4 LOAD ORIG DOS ADR @VM08585 00278000 NEXTPAG EQU * @VM08585 00279000 O R3,F4095 GET TO END THIS PAGE @VM08585 00280000 A R3,F1 PLUS ONE TO GET NEXT PAGE @VM08585 00281000 CALL DMKVATRN GET NEXT PAGE @VM08585 00282000 LTR R0,R0 GOOD RETURN ??? @VM08585 00283000 BNZ VERERREX NO - CAN'T RECORD @VM08585 00284000 ST R2,SAVEWRK3 SAVE REAL ADDRESS @VM08585 00285000 B ONEMOVE GO DO THE MOVES @VM08585 00287000 SPACE 3 00288000 BUFFUL EQU * @V1D0226 00289000 * 00290000 * COMPLETE RECORD IN FREE STORAGE WITH BYTE COUNT SAVED IN 00291000 * SAVEWRK8, ADDRESS OF RECORD IN GPR9, AND FREE/FRET SIZE 00292000 * IN SAVEWRK9. 00293000 * 00294000 * NOW CHECK IF RECORD IS VALID. 00295000 SPACE 00296000 USING OBRRECN,R9 @V1D0226 00297000 SPACE 00298000 MVI OBRKEYN+1,VMSYS SET VM'S SYSTEM AND RELEASE @VM08585 00299000 SLR R2,R2 ZERO R2 00300000 * NOW CHECK FOR VALID RECORD TYPE. 00301000 * 00302000 SPACE 00303000 TM SAVEWRK1,OS OS TYPE RECORD ??? @V1D0226 00304000 BO OSRECD YES - GO FIND THE TYPE @V1D0226 00305000 CLI OBRKEYN,X'30' DOS CAN HAVE ONLY OBRS' @V1D0226 00306000 BNE VERERREX SO IF NOT OBR, HAVE ERROR @V1D0226 00307000 B VER30 IF OBR, GO TO IT @V1D0226 00308000 SPACE 00309000 OSRECD EQU * @V1D0226 00310000 IC R2,OBRKEYN LOAD THE RECORD TYPE @V1D0226 00311000 SRL R2,4 CLEAN OUT THE LOW BITS @V1D0226 00312000 SLL R2,2 SHIFT TO GET INDEX VALUE @V1D0226 00313000 B RECVECT(R2) GO INTO BRANCH VECTORS @V1D0226 00314000 RECVECT EQU * @V1D0226 00315000 B VERERREX INVALID @V1D0226 00316000 B VERERREX DITTO @V1D0226 00317000 B VERERREX DITTO AGAIN @V1D0226 00318000 B VER30 OBR RECORDING @V1D0226 00319000 B VER40 ABEND RECORDING @V1D0226 00320000 B VERERREX INVALID @V1D0226 00321000 B VER60 DDR RECORDING @V1D0226 00322000 B VER70 MIH RECORDING @V1D0226 00323000 B VERERREX INVALID @V1D0226 00324000 B VER90 MDR RECORDING @V1D0226 00325000 B VERERREX INVALID @V1D0226 00326000 B VERERREX THIS TOO IS INVALID @V1D0226 00327000 B VERERREX AND THIS ALSO. @V1D0226 00328000 B VERERREX AND THIS @V1D0226 00329000 B VERERREX AND ONE FINAL INVALID BRANCH. @V1D0226 00330000 SPACE 00331000 VERERREX EQU * @V1D0226 00332000 L R0,SAVEWRK9 COUNT FOR THE FRET @V1D0226 00333000 SL R9,F4 BACK UP TO START OF BUFFER @V1D0226 00334000 LR R1,R9 AND THE BUFFER ADDRESS @V1D0226 00335000 CALL DMKFRET GET RID OF THE BUFFER @V1D0226 00336000 SPACE 00337000 PSARETRN EQU * @V1D0226 00338000 NI VMRSTAT,X'FF'-VMEXWAIT RESET WAIT FLAG @V1D0226 00339000 EXIT RETURN TO DMKPSA @V1D0226 00340000 EJECT 00341000 VER30 EQU * @V1D0226 00342000 SPACE 00343000 USING OBRRECN,R9 @V1D0226 00344000 SPACE 00345000 CLI OBRKEYN,X'30' MAKE SURE IS TYPE 30 @VM08500 00346000 BNE VERERREX IF NOT GET OUT @VM08500 00347000 BAL R10,CKOBRLEN GO CHECK CALLER LENGTH @VA04327 00347500 BAL R10,COMCVT30 GO CONVERT COMMON FIELDS @V1D0226 00348000 L R0,SAVEWRK5 LOAD DEVICE ADDRESS @VM08506 00349000 TM OBRSWSN+1,X'20' IS THIS A SHORT OBR RECORD @VA03358 00350000 BZ *+12 NO, BYPASS SHORT OBR SUPPORT @VA03358 00351000 STCM R0,7,OBRCUA SAVE CUA IN SHORT OBR RECORD @VA03358 00352000 B VERRSTEX NO MORE CONVERSION FOR SHORT OBR @VA03358 00353000 STCM R0,7,OBRCUAPR STORE INTO PHYS ADDRESS @VM08506 00354000 CLI RDEVTYPC,CLASDASD DASD TYPE DEVICE @VM08506 00355000 BNE VERDEDCK NO - DEV ADDR STORED IS OK @VM08506 00356000 TM RDEVTYPE,TYP3330 IS DASD A 3330 DEVICE ? @V304498 00357000 BZ CHK2314 IF NOT, GO CHK FOR 2314 @V2A2029 00358000 IC R1,OBR33SNS+4 LOAD PHYSICAL ADDR FROM SENSE @VM08506 00359000 TM OBR33SNS+2,X'08' TEST FOR EMULATED 3330 DEVICE @V304498 00360000 BZ VERPHA NO, BYPASS EMULATION CODE CONV @VA04586 00361500 BAL R7,EMULCODE YES, CODE 1 OF 8 AS 3 OF 6 @V304498 00362000 VERPHA N R1,F7 ZAP ALL BUT LOW 3 BITS @VA04586 00362100 TM OBR33SNS+4,X'40' IS THIS 2ND OR 4TH CONTROL @VA04586 00362200 * UNIT? 00362300 BNO VERSETPR IF NOT, BRANCH @VA04586 00362400 A R1,F8 BUMP ADDRESS IF 2ND OR 4TH @VA04586 00362500 * CONTROL UNIT 00362600 B VERSETPR GO SET PHYSICAL ADDR @VM08506 00363000 CHK2314 EQU * @VM08506 00364000 CLI RDEVTYPE,TYP2314 IS IT 2314 ??? @VM08506 00365000 BNE VERDEDCK NO - ADDRESS OK @VM08506 00366000 IC R1,OBRSENSN+4 LOAD 2314 PHYSICAL ADDR @VM08506 00367000 N R1,F15 ZAP ALL EXCEPT LOW 4 BITS @VA04586 00367500 VERSETPR EQU * @VM08506 00368000 N R0,=X'00FFFFF0' SAVE ALL BUT LOW 4 @VM08506 00370000 OR R1,R0 PUT THE TWO TOGETTHER @VM08506 00371000 STCM R1,7,OBRCUAPR STORE PROPER DEV ADDR @VM08506 00372000 VERDEDCK EQU * @VM08506 00373000 TM RDEVSTAT,RDEVDED DEDICATED DEVICE @V1D0226 00374000 BO VERMSGOP YES - NO MORE CONVERSION TO DO @V1D0226 00375000 SPACE 00376000 VERNOTDD EQU * @V1D0226 00377000 * 00378000 * ON A NON-DEDICATED / NON-DASD DEVICE, GO AHEAD 00379000 * WITH RECORDING. FOR DASD - CONVERT THE SEEK AND HOME ADDRESS 00380000 * TO THE REAL ADDRESS AND MOVE THE VOLUME SERIAL 00381000 * FROM RDEVBLOK TO THE RECORD. FOR 3330/3340/3350/2305 ADJUST 00382000 * CYLINDER NUMBER IN THE SENSE BYTE TO THE REAL CYLINDER. 00383000 * FOR A 2311 BEING SIMULATED ON A 2314, ALTER THE SENSE IN 00384000 * SENSE BYTE 3 TO REFLECT A 2314. 00385000 * 00386000 SPACE 00387000 CLI RDEVTYPC,CLASDASD DASD DEVICE @V1D0226 00388000 BNE VERMSGOP IF NOT - GO RECORD @V1D0226 00389000 MVC OBRVOLN(6),RDEVSER MOVE THE REAL VOL SER @V1D0226 00390000 L R7,SAVEWRK4 LOAD THE VDEVBLOK ADDRESS @V1D0226 00391000 SPACE 00392000 USING VDEVBLOK,R7 @V1D0226 00393000 SPACE 00394000 SLR R2,R2 ZIP A WORK REG @V1D0226 00395000 ICM R2,3,OBRLSKN+3 CLYINDER NUMBER OF LAST SEEK @V1D0226 00396000 CLI RDEVTYPE,TYP3340 IS IT A 3340 OR 3344? @V56BDA8 00396100 BNE NOT334X NO, JUST CONTINUE @V56BDA8 00396200 CH R2,=H'696' ALTERNATE OR CE CYLINDER? @V56BDA8 00396300 BNL VERMSGOP YES, LEAVE UNCHANGED @V56BDA8 00396400 TM RDEVFTR,FTR35MB IS IT A SMALL DISK? @V56BDA8 00396500 BZ NOT334X NO, MUST RELOCATE @V56BDA8 00396600 CH R2,=H'348' 35MB ALTERNATE OR CE CYLINDER? @V56BDA8 00396700 BNL VERMSGOP YES, LEAVE UNCHANGED @V56BDA8 00396800 NOT334X EQU * @V56BDA8 00396900 AH R2,VDEVRELN ADD THE RELOCATION FACTOR @V1D0226 00397000 STCM R2,3,OBRLSKN+3 REAL CLYNDER TO RECORD @V1D0226 00398000 LH R2,OBRHAN+2 NOW UPDATE HOME ADDRESS @VA02834 00399000 AH R2,VDEVRELN ADD RELOCATION @V1D0226 00400000 STH R2,OBRHAN+2 AND STORE INTO RECORD @VA02834 00401000 CLI RDEVTYPE,TYP2314 IS IT A 2314 ??? @V1D0226 00402000 BE VER2314 GO CHECK FOR 2311 IF IT IS @V1D0226 00403000 CLI RDEVTYPE,TYP3330 3330 ???? @V1D0226 00404000 BE VERCYL YEP ---- @V1D0226 00405000 CLI RDEVTYPE,TYP2305 COULD BE 2305 DRUM @V1D0226 00406000 BE VERCYL IF IT IS - GO ADJUST SENSE @V1D0226 00407000 TM RDEVTYPE,TYP3340+TYP3350 3340 OR 3350 DEVICE ? @V304498 00408000 BZ VERMSGOP NO - GO RECORD RECORD @V304498 00409000 IC R2,OBR33SNS+6 GET HIGH CYL BYTE @V2A2029 00410000 LR R1,R2 SAVE FOR LATER @V2A2029 00411000 SLL R2,3 SHIFT CYLINDER TO NEXT BYTE @V2A2029 00412000 N R2,=A(256+512) ISOLATE CYL 512 AND 256 @V2A2029 00413000 IC R2,OBR33SNS+5 AND LOAD CYL BYTE ALONG WITH IT @V2A2029 00414000 AH R2,VDEVRELN ADD THE RELOCATION FACTOR @V2A2029 00415000 CLI RDEVTYPE,TYP3350 3350 ???? @V304498 00416000 BE VER3350 CHECK CYLINDER LIMIT @V304498 00417000 SETCYL STC R2,OBR33SNS+5 STORE LOW CYL VALUE @V2A2029 00424000 N R2,=A(256+512) ISOLATE CYL 512 AND 256 @V2A2029 00425000 SRL R2,3 SHIFT TO HARDWARE VALUE @V2A2029 00426000 N R1,=A(16+8+4+2+1) ISOLATE LOGICAL TRACK @V304498 00427000 OR R2,R1 COMBINE CYL AND HEAD BITS @V2A2029 00428000 STC R2,OBR33SNS+6 STORE HIGH CYL AND HEAD VALUE @V2A2029 00429000 TM OBR33SNS+7,X'40' CHECK FOR FORMAT 4 OR 5 @VA11762 00429010 BZ VERMSGOP NO CONTINUE NO UPDATE CYL @VA11762 00429020 TM OBR33SNS+7,X'20' CHECK FOR FORMAT 6 ? @VA11762 00429030 BO VERMSGOP YES DONT UPDATE 8 AND 9 @VA11762 00429040 VERFMT4 DS 0H @VA11762 00429050 SR R2,R2 ZERO OUT WORK REG @VA09156 00429100 ICM R2,B'0011',OBRLSKN+3 GET LAST SEEK CYLINDER @VA09156 00429200 AH R2,VDEVRELN ADD RELOCATION FACTOR @VA09156 00429300 STH R2,OBR33SNS+8 STORE INTO SENSE @VA09156 00429400 B VERMSGOP IF NOT - OK TO RECORD @V1D0226 00430000 SPACE 1 00431000 VER3350 CH R2,=H'559' EXCEEDED CYL LIMIT - 560 CYL'S @V304498 00432000 BH VERMSGOP YES - LEAVE AS IS @V304498 00433000 B SETCYL YES - STORE CYLINDER NUMBER @V304498 00434000 SPACE 00435000 VER2314 EQU * @V1D0226 00436000 TM VDEVTYPE,FTR2311T+FTR2311B SIMULATING 2311 ???? @V1D0226 00437000 BZ VERMSGOP NO - GO RECORD @V1D0226 00438000 CLI OBRSENSN+3,X'C8' 2311 SENSE SAY READY AND @V1D0226 00439000 * ONLINE ??? 00440000 BNE VERCKOL NO - GO CHECK FURTHER @V1D0226 00441000 NI OBRSENSN+3,X'40' LEAVE ONLINE SENSE BIT FOR 2314@V1D0226 00442000 B VERMSGOP NOW CAN SAFELY RECORD @V1D0226 00443000 SPACE 00444000 VERCKOL EQU * @V1D0226 00445000 TM OBRSENSN+3,X'48' IF 2311 ONLINE BITS BOTH 1'S, @V1D0226 00446000 BO VERMSGOP LEAVE AS IS. @V1D0226 00447000 TM OBRSENSN+3,X'40' IF BIT 1 ON ALONE, @V1D0226 00448000 BO SETPCHG GO SET PACK CHANGE FOR 2314 @V1D0226 00449000 XI OBRSENSN+3,X'08' INVERT PACK CHANGE BIT @V1D0226 00450000 B VERMSGOP . . . @V1D0226 00451000 SETPCHG OI OBRSENSN+3,X'08' FORCE PACK CHANGE ON @V1D0226 00452000 B VERMSGOP . . . @V1D0226 00453000 SPACE 00454000 VERCYL EQU * @V1D0226 00455000 * 00456000 * COME HERE TO ADJUST CYLINDER ADDRESS IN THE SENSE 00457000 * 00458000 SPACE 00459000 IC R2,OBR33SNS+6 LOAD BYTE CONTAINING CYL. HIGH @V1D0226 00460000 * BIT 00461000 SLL R2,2 GET IT UP TO NEXT BYTE @V1D0226 00462000 N R2,F256 SAVE ONLY THAT BIT @V1D0226 00463000 IC R2,OBR33SNS+5 AND LOAD CYL BYTE ALONG WITH IT @V1D0226 00464000 AH R2,VDEVRELN ADD THE RELOCATION FACTOR @V1D0226 00465000 CH R2,=H'400' DID WE GO OVER THE LIMIT ???? @V1D0226 00466000 BH VERMSGOP IF WE DID, MEANS DMKUNTR DIDN'T @V1D0226 00467000 * CHG 00468000 STC R2,OBR33SNS+5 STORE NEW CYL NUMBER @V1D0226 00469000 C R2,F256 OVER 256 ??? @V1D0226 00470000 BL VERMSG1 @VA09156 00471100 OI OBR33SNS+6,X'40' SET CYL HIGH BIT @V1D0226 00472000 VERMSG1 EQU * @VA09156 00472100 CLI RDEVTYPE,TYP2305 2305 ?? @VA11762 00472110 BE TYPOK YES GO UPDATE SENSE 8 AND 9 @VA11762 00472120 TM OBR33SNS+7,X'40' CHECK FOR FORMAT 4 OR 5 @VA11762 00472130 BZ VERMSGOP NO IT IS UPDATE @VA11762 00472140 TM OBR33SNS+7,X'20' CHECK FOR FORMAT 6 ? @VA11762 00472150 BO VERMSGOP YES DONT UPDATE SENSE BYTES @VA11762 00472160 TYPOK DS 0H @VA11762 00472170 SR R2,R2 ZERO OUT WORK REG @VA09156 00472200 ICM R2,B'0011',OBRLSKN+3 GET LAST SEEK CYLINDER @VA09156 00472300 AH R2,VDEVRELN ADD RELOCATION FACTOR @VA09156 00472400 STH R2,OBR33SNS+8 STORE INTO SENSE @VA09156 00472500 SPACE 00473000 DROP R7 @V1D0226 00474000 SPACE 00475000 SPACE 00476000 VERMSGOP EQU * @V1D0226 00477000 TM OBRSWSN+1,OBRDEMNT VOLUME DISMOUNT? HRC024DK 00477100 BNZ VERRSTEX YES - NO NEED TO BOTHER OPERATOR HRC024DK 00477200 L R1,SAVEWRK5 LOAD REAL DEVICE ADDRESS @V1D0226 00478000 CALL DMKCVTBH CONVERT TO PRINTABLE FORM @V1D0226 00479000 STCM R1,7,MSG575AD STUFF INTO MESSAGE @V1D0226 00480000 MVC MSG575ID(8),VMUSER STUFF THIS IN MESSAGE @V1D0226 00481000 LA R0,MSG575LN MESSAGE LENGTH @V1D0226 00482000 LA R1,MSG575 AND THE ADDRESS @V1D0226 00483000 LA R2,NORET+ALARM+OPERATOR @V1D0226 00484000 CALL DMKQCNWT @V1D0226 00485000 SPACE 00486000 VERRSTEX EQU * @V1D0226 00487000 TM SAVEWRK1,DOS DOS TYPE RECORDING ?? @VM08506 00488000 BO DOSRET GIVE DOS RETURN CODE @VA03448 00489000 XC VMGPRS+15*4(4),VMGPRS+15*4 R15=0 FOR OS/VS @VA03448 00490000 B VEROSEX CONTINUE @VA03448 00491000 DOSRET XC VMGPRS+4(4),VMGPRS+4 R1=0 FOR DOS/VS @VA03448 00492000 VEROSEX EQU * @VM08506 00493000 NI VMRSTAT,X'FF'-VMEXWAIT RESET THE WAIT BIT @V1D0226 00494000 S R9,F4 BACK UP TO START OF BUFFER @V1D0226 00495000 LR R1,R9 PASS THE RECORD ADDRESS TO IOE @V1D0226 00496000 L R0,SAVEWRK9 GET SIZE OF RECORD IN DOUBLEWORDS@VA03358 00497000 LR R3,R0 GET NUMBER OF DOUBLEWORDS @VA03358 00498000 SLL R3,3 GET ACTUAL LENGTH OF RECORD @VA03358 00499000 S R3,F4 SUBTRACT LENGTH FIELD FROM RECORD@VA03358 00500000 ST R3,0(,R1) SAVE RECORD SIZE IN RECORD @VA03358 00501000 CALL DMKIOEVR GET IT RECORDED @V1D0226 00502000 SPACE 00503000 SPACE 00504000 L R15,ADSPCH ADDRESS OF DISPATCH @V1D0226 00505000 ST R15,SAVERETN RETURN TO DISPATCH INSTEAD OF PSA@V1D0226 00506000 ST R15,SAVER12 THIS TO SET DISPATCHERS BASE @V1D0226 00507000 EXIT @V1D0226 00508000 EJECT 00509000 VER40 EQU * @V1D0226 00510000 CLI OBRKEYN,X'43' IS IT 40,41,OR 42 ?? @VM08500 00511000 BL VER40OK YEP - OK TO RECCRD @VM08500 00512000 CLI OBRKEYN,X'4F' 4F IS LEGAL @VM08500 00513000 BE VER40OK .... @VM08500 00514000 CLI OBRKEYN,X'44' SO IS 44 @VM08500 00515000 BE VER40OK .... @VM08500 00516000 CLI OBRKEYN,X'48' AND 48 @VM08500 00517000 BE VER40OK ..... @VM08500 00518000 B VERERREX ALL ELSE IS BAD .. @VM08500 00519000 VER40OK EQU * 00520000 SLR R1,R1 ZERO R1 @VA04327 00520200 LA R1,OBRHSIZE+8 GET STANDARD HEADER SIZE @VA07880 00520500 CL R1,SAVEWRK8 HEADER SIZE > CALLER SIZE ? @VA04327 00520600 BH VERERREX YES, CAN'T RECORD @VA04327 00520800 BAL R10,COMCVT60 DO COMMON CONVERTS @VA05286 00521000 B VERRSTEX AND GO RECORD @V1D0226 00522000 EJECT 00523000 VER60 EQU * @V1D0226 00524000 SPACE 00525000 USING DDRREC,R9 @V1D0226 00526000 SPACE 00527000 CLI DDRKEYN,X'60' 60 IS ONLY CODE ALLOWED @VM08500 00528000 BNE VERERREX ELSE CAN'T RECORD @VM08500 00529000 SLR R1,R1 ZERO R1 @VA04327 00529200 LA R1,DDRSIZE GET LENGTH OF DDR RECORD @VA04327 00529400 CL R1,SAVEWRK8 RECORD SIZE > CALLER SIZE ? @VA04327 00529600 BH VERERREX YES, CAN'T RECORD @VA04327 00529800 BAL R10,COMCVT60 GO DO COMMON CONVERTS @V1D0226 00530000 ICM R1,7,DDRCUA1 LOAD 'FROM' DEVICE ADDRESS @V1D0226 00531000 LA R1,0(,R1) ZERO THE HIGH BYTE @V1D0226 00532000 BAL R5,CNVTVR CONVERT VIRTUAL TO REAL @V1D0226 00533000 STCM R1,7,DDRCUA1 STORE REAL INTO RECORD @V1D0226 00534000 ICM R1,7,DDRCUA2 LOAD 'TO' ADDRESS @V1D0226 00535000 LA R1,0(,R1) ZIP THE HIGH BYTE @V1D0226 00536000 BAL R5,CNVTVR CONVERT THIS TO REAL @V1D0226 00537000 STCM R1,7,DDRCUA2 AND STORE INTO RECORD @V1D0226 00538000 B VERRSTEX GO RECORD @V1D0226 00539000 EJECT 00540000 VER70 EQU * @V1D0226 00541000 SPACE 00542000 USING MIHREC,R9 @V1D0226 00543000 SPACE 00544000 CLI MIHKEYN,X'70' ONLY 70 TYPE ALLOWED @VM08500 00545000 BNE VERERREX ELSE CAN'T RECORD @VM08500 00546000 SLR R1,R1 ZERO R1 @VA04327 00546200 LA R1,MIHSIZE GET MIH RECORD LENGTH @VA04327 00546400 CL R1,SAVEWRK8 RECORD LENGTH > CALLER LENGTH@VA04327 00546600 BH VERERREX YES, CAN'T RECORD @VA04327 00546800 BAL R10,COMCVT70 DO THE COMMON CONVERTS @V1D0226 00547000 TM RDEVSTAT,RDEVDED DEDICATED DEVICE ???? @V1D0226 00548000 BO VERRSTEX YES - OK TO RECORD @V1D0226 00549000 CLI RDEVTYPC,CLASDASD DASD DEVICE ???? @V1D0226 00550000 BNE VERRSTEX NO - DON'T HAVE VOL SER TO @V1D0226 00551000 * CONVERT 00552000 MVC MIHVOL(6),RDEVSER MOVE REAL SERIAL IN @V1D0226 00553000 B VERRSTEX AND GO RECORD @V1D0226 00554000 EJECT 00555000 VER90 EQU * @V1D0226 00556000 USING MDRREC,R9 @VM08500 00557000 SPACE 00558000 CLI MDRKEYN,X'91' VALID MDR TYPE ?? @VM08500 00559000 BNE VERERREX NO - CAN'T RECORD @VM08500 00560000 SLR R1,R1 ZERO R1 @VA04327 00560200 LA R1,MRDSIZE GET MRD RECORD SIZE @VA04327 00560400 CL R1,SAVEWRK8 RECORD SIZE > CALLER SIZE ? @VA04327 00560600 BH VERERREX YES, CAN'T RECORD @VA04327 00560800 BAL R10,COMCVT90 CONVERT THE COMMON STUFF @V1D0226 00561000 CLI RDEVTYPC,CLASDASD DASD CLASS DEVICE @VA06101 00561050 BNE NOTDASD NO, HANDLE NON-DASD DEVICE @VA06101 00561070 MVC MDRVOL(6),RDEVSER MOVE REAL VOLSER INTO RECORD @VA06101 00561090 CLI RDEVTYPE,TYP3330 IS DEVICE 3330-1 OR 3330-11 ? @VA06101 00561110 BNE DEV2314 NO, CHECK FOR 2314 TYPE @VA06101 00561130 DEV3330 SR R10,R10 CLEAR R10 FOR WORK REG @VA06101 00561150 IC R10,MDRSENS+4 GET DRIVE ID OF 3330 @VA06101 00561170 TM MDRSENS+2,X'08' EMULATED 3330 ? @VA06101 00561190 BZ NOTEMUL NO,BYPASS EMULATED CONV CODE @VA06101 00561210 BAL R7,EMULCODE YES,CODE 1 OF 8 AS 3 OF 6 @VA06101 00561230 NOTEMUL N R10,F7 ISOLATE 3-BIT ID FROM SENSE @VA06101 00561250 TM MDRSENS+4,X'40' IS THIS 2ND OR 4TH CONTROL @VA06101 00561270 * UNIT ? 00561290 BNO GETADDR NO, BYPASS ADDRESS INCREMENT @VA06101 00561310 A R10,F8 YES, BUMP ADDRESS BY 8 @VA06101 00561330 B GETADDR GO SET PHYSICAL ADDRESS @VA06101 00561350 DEV2314 CLI RDEVTYPE,TYP2314 IS DEVICE 2314 ? @VA06101 00561370 BNE NOTDASD NO, HANDLE OTHER DEVICE TYPE @VA06101 00561390 SR R10,R10 CLEAR R10 FOR WORK REG @VA06101 00561410 IC R10,MDRSENS+4 YES, GET DRIVE ID FROM SENSE @VA06101 00561430 N R10,F15 ISOLATE 4-BIT ID FROM SENSE @VA06101 00561450 GETADDR EQU * @VA06101 00561470 N R1,=X'0000FFF0' CLEAR MODULE/DRIVE ID @VA06101 00561490 OR R1,R10 GET PHYSICAL DEVICE ADDRESS @VA06101 00561510 STCM R1,3,MDRCUA1 SAVE PHYSICAL ADDRESS IN MDR @VA06101 00561530 NOTDASD EQU * @VA06101 00561550 B VERRSTEX NO MORE TO DO @V1D0226 00562000 EJECT 00563000 COMCVT30 EQU * @V1D0226 00564000 SPACE 00565000 USING OBRRECN,R9 @V1D0226 00566000 SLR R1,R1 ZERO WORK REG @V1D0226 00567000 ICM R1,7,OBRCUAIN LOAD CUA OF FAILING DEVICE @V1D0226 00568000 TM OBRSWSN+1,X'20' IS THIS A SHORT OBR RECORD @VA03358 00569000 BZ *+8 NO, BYPASS @VA03358 00570000 ICM R1,7,OBRCUA GET CUA FROM RECORD @VA03358 00571000 BAL R5,CNVTVR CONVERT TO REAL ADDRESS @V1D0226 00572000 TM OBRSWSN+1,X'20' IS THIS A SHORT OBR RECORD @VA03358 00573000 BO COMCVT40 YES, BYPASS SAVING CUA @VA03358 00574000 STCM R1,7,OBRCUAIN AND STORE INTO RECORD @V1D0226 00575000 B COMCVT60 DO REST OF COMMON CONVERTS @VM08506 00576000 SPACE 00577000 COMCVT90 EQU * @V1D0226 00578000 COMCVT70 EQU COMCVT90 @V1D0226 00579000 TM OBRKEYN,X'90' MDR ??? @V1D0226 00580000 BO MDRPRIM YES - GO CONVERT PRIM DEV ADR @V1D0226 00581000 SPACE 00582000 MIHPRIM EQU * @V1D0226 00583000 SPACE 00584000 USING MIHREC,R9 @V1D0226 00585000 SPACE 00586000 ICM R1,7,MIHCUA1 LOAD PRIMARY ADDRESS @V1D0226 00587000 LA R1,0(,R1) ZIP THE HIGH BYTE @V1D0226 00588000 BAL R5,CNVTVR CONVERT TO REAL @V1D0226 00589000 STCM R1,7,MIHCUA1 AND STORE BACK @V1D0226 00590000 B COMCVT60 . .. . @V1D0226 00591000 SPACE 00592000 MDRPRIM EQU * @V1D0226 00593000 SPACE 00594000 USING MDRREC,R9 @V1D0226 00595000 SPACE 00596000 LH R1,MDRCUA1 LOAD DEVICE ADDRESS @V1D0226 00597000 BAL R5,CNVTVR AND CONVERT TO REAL @V1D0226 00598000 STH R1,MDRCUA1 AND STORE BACK TO THE RECORD @V1D0226 00599000 B COMCVT40 BRANCH TO CONVERT CPUID @V1D0226 00600000 SPACE 00601000 COMCVT60 EQU * @V1D0226 00602000 SPACE 00603000 USING OBRRECN,R9 @V1D0226 00604000 SPACE 00605000 MVC OBRPGMN(8),VMUSER MOVE USER ID TO RECORD @V1D0226 00606000 SPACE 00607000 COMCVT40 EQU * @V1D0226 00608000 SWITCH SWITCH TO MAIN PROCESSOR @VA12116 00608100 MVC OBRCPIDN(8),CPUID MOVE REAL CPUID TO RECORD @V1D0226 00609000 NI OBRSWSN,(X'FF'-X'08') RESET TIME MACRO @VM08585 00610000 OI OBRSWSN,X'40' AND SET NS CLOCK @VM08585 00611000 BR R10 RETURN TO CALLER @V1D0226 00612000 EJECT 00613000 CNVTVR EQU * @V1D0226 00614000 CALL DMKSCNVU GET ADDRESSES OF VDEVBLOK @V1D0226 00615000 BNZ VERERREX IF CAN'T FIND - DON'T RECORD @V1D0226 00616000 SPACE 00617000 USING VDEVBLOK,R8 @V1D0226 00618000 SPACE 00619000 ST R8,SAVEWRK4 SAVE VDEVBLOK ADDRESS FOR LATER @V1D0226 00620000 TM VDEVSTAT,VDEVDED DEDICATED VIRTUAL DEVICE ? @VM08839 00621000 BO GETREAL YES - VDEVREAL IS VALID @VM08839 00622000 CLI VDEVTYPC,CLASDASD SHARED VIRTUAL DASD ? @VM08839 00623000 BNE VERERREX NO -- CAN'T RECORD FAKE DEV @VM08839 00624000 GETREAL EQU * @V1D0226 00625000 L R8,VDEVREAL LOAD RDEVBLOK ADDRESS @V1D0226 00626000 CALL DMKSCNRD GET REAL DEVICE ADDRESS @V1D0226 00627000 ST R1,SAVEWRK5 SAVE THE REAL ADDRESS FOR LATER @V1D0226 00628000 BR R5 AND RETURN TO CALLER @V1D0226 00629000 EJECT 00630000 TRNSTEST EQU * @VM08585 00631000 TM VMSPMFLG,VMCPVIRT SVC76 FROM CP VIRTUAL MACH @VA09952 00631010 BZ CONT NO, PROCESS THIS SVC76 @VA09952 00631020 TM VMSPMFLG,VMCPSV76 ISSUED BY THIS CP VIRTUAL MACH@VA09952 00631030 BZ PSARETRN NO, REFLECT SVC76 TO CP VIRTUAL @VA09952 00631040 NI VMSPMFLG,X'FF'-VMCPSV76 RESET SVC76 FLAG @VA09952 00631050 CONT DS 0H AND PROCESS THE REQUEST @VA09952 00631060 TM VMPSW+1,EXTMODE ECMODE V.M. ?? @VM08585 00632000 BCR 8,R10 IF NOT RETURN @VM08585 00633000 TM VMPSW,TRANMODE IN TRANSLATE MODE ?? @VM08585 00634000 BCR 8,R10 RETURN IF NOT @VM08585 00635000 STM R0,R2,SAVEWRK4 SAVE THE PARM REGS. @VM08585 00636000 CALL DMKVATRN BRING IN THE RECORD @VM08585 00637000 LTR R0,R0 BETTER BE ZERO @VM08585 00638000 BNZ PSARETRN IF NOT CAN'T RECORD @VM08585 00639000 OI SAVEWRK1,VVADR FLAG AS V-V PROCESSING @VM08585 00640000 ST R2,SAVEWRK7 SAVE REAL ADDRESS OF RECORD @VM08585 00641000 BR R10 AND RETURN @VM08585 00642000 SPACE 1 00643000 EMULCODE LA R14,1 INITIAL SHIFT COUNTER @V304498 00644000 LR R15,R1 OBTAIN 1 OF 8 2ODE (EMUL 3330) @V304498 00645000 SHIFT SRA R15,1 START TO COUNT NO OF SHIFTS @V304498 00646000 BZ EMULDONE FINISHED SHIFT COUNT @V304498 00647000 LA R14,1(0,R14) INCREASE SHIFT COUNT BY ONE @V304498 00648000 B SHIFT CONTINUE TO COUNT 1 OF 8 CODE @V304498 00649000 EMULDONE LA R15,7 INITIALIZE TO CREATE 3 OF 6 CODE @V304498 00650000 MR R14,R14 CREATE 3 OF 6 CODE @V304498 00651000 LR R1,R15 CONTINUE WITH 3 OUT 0F 6 CODE @V304498 00652000 BR R7 RETURN TO DEVICE ADDRESS PROCESS @V304498 00653000 USING OBRRECN,R9 @VA04327 00653050 CKOBRLEN EQU * @VA04327 00653100 TM SAVEWRK1,OS THIS A OS TYPE OBR RECORD ? @VA04327 00653150 BNOR R10 NO, DON'T DO LENGTH CHECKING @VA04327 00653200 SLR R1,R1 YES, START BY ZEROING R1 @VA04327 00653250 LA R1,OBRLSIZE GET LENGTH OF BASE RECORD @VA04327 00653300 TM OBRSWSN+1,X'20' SHORT OBR RECORD ? @VA04327 00653350 BZ CKOBRBAS NO @VA04327 00653400 LA R1,OBRSSIZE YES, USE SHORT BASE LENGTH @VA04327 00653450 CKOBRBAS EQU * @VA04327 00653500 CL R1,SAVEWRK8 BASE LENGTH > CALLER SIZE ? @VA04327 00653550 BH VERERREX YES, CAN'T RECORD @VA04327 00653600 TM OBRSWSN+1,X'20' SHORT OBR RECORD ? @VA04327 00653650 BOR R10 YES, NO MORE CHECKING NEEDED @VA04327 00653700 SLR R1,R1 NO, MORE CHECKING BY DEVICE @VA04327 00653750 ICM R1,7,OBRCUAIN LOAD CUA OF FAILING DEVICE @VA04327 00653800 TM OBRSWSN+1,X'20' SHORT OBR RECORD ? @VA04327 00653850 BZ GETRDEV1 NO, GET REAL DEVICE BLOCK @VA04327 00653900 ICM R1,7,OBRCUA YES, THIS IS CUA OF DEVICE @VA04327 00653950 GETRDEV1 EQU * @VA04327 00654000 BAL R5,CNVTVR GO GET REAL DEV. BLOCK @VA04327 00654050 USING RDEVBLOK,R8 @VA04327 00654100 CLI RDEVTYPC,CLASDASD IS IT DASD TYPE ? @VA04327 00654150 BNER R10 NO, DONE LENGTH CHECKING @VA04327 00654200 SLR R1,R1 ZERO R1 AGAIN @VA04327 00654250 CLI RDEVTYPE,TYP2314 2314 TYPE ? @VA04327 00654300 BNE COMP33XX NO, GO CHECK OTHER DASD @VA04327 00654350 LA R1,OBR2SIZE YES, GET 2314 LENGTH @VA04327 00654400 B COMPDASD GO DO COMPARE @VA04327 00654450 COMP33XX EQU * @VA04327 00654500 LA R1,OBR3SIZE GET OTHER DASD LENGTH @VA04327 00654550 COMPDASD EQU * @VA04327 00654600 CL R1,SAVEWRK8 LENGTH > CALLER LENGTH ? @VA04327 00654650 BH VERERREX YES, CAN'T RECORD @VA04327 00654700 BR R10 NO, RETURN TO OBR PROCESSING @VA04327 00654750 EJECT @VA04327 00654800 * 00655000 * CONSTANT AREA 00656000 * 00657000 MSG575 EQU * @V1D0226 00658000 DC C'DMKVER575I I/O ERROR ADD=' @V1D0226 00659000 MSG575AD DC C' ' @V1D0226 00660000 DC C', USERID=' @V1D0226 00661000 MSG575ID DC CL8' ' @V1D0226 00662000 MSG575LN EQU *-MSG575 MESSAGE LENGTH @V1D0226 00663000 SPACE 00664000 EJECT 00665000 LTORG @V1D0226 00666000 EJECT 00667000 COPY OBRRECN @V1D0226 00668000 COPY MDRREC @V1D0226 00669000 COPY MIHREC @V1D0226 00670000 COPY DDRREC @V1D0226 00671000 PSA @V1D0226 00672000 COPY EQU @V1D0226 00673000 COPY SAVE @V1D0226 00674000 COPY VMBLOK @V1D0226 00675000 COPY VBLOKS @V1D0226 00676000 COPY RBLOKS @V1D0226 00677000 COPY DEVTYPES @V1D0226 00678000 COPY IOBLOKS @V1D0226 00679000 END 00680000