ibm:vm370-lib:cp:dmkvch.assemble_src
Table of Contents
DMKVCH Source
References
- Fixes Applied : 7
- This Source Date : Thursday, December 7, 1978
- Last Fix ID : [HRC040DK]
Source Listing
- DMKVCH.ASSEMBLE.txt
- VCH TITLE 'DMKVCH (CP) VM/370 - RELEASE 6' 00001000
- ISEQ 73,80 VALIDATE SEQUENCING OF INPUT @V200820 00002000
- *. 00003000
- * MODULE NAME - 00004000
- * 00005000
- * DMKVCH 00006000
- * 00007000
- * FUNCTION - 00008000
- * 00009000
- * TO 'ATTACH' OR 'DETACH' A REAL CHANNEL AND ALL DEVICES 00010000
- * ON IT TO A SPECIFIED USER. 00011000
- * 00012000
- * +--------+----------------------------+ 00013000
- * | ATTACH | CHANNEL X <TO> USERID | 00014000
- * |--------+----------------------------+ 00015000
- * | DETACH | CHANNEL X <FROM> <USERID> | 00016000
- * +--------+----------------------------+ 00017000
- * 00018000
- * THE ACTUAL COMMAND LINE IS DECODED BY DMKVDC. 00019000
- * 00020000
- * ATTRIBUTES - 00021000
- * 00022000
- * RE-ENTRANT, PAGEABLE, CALLED VIA SVC 00023000
- * 00024000
- * ENTRY POINT - 00025000
- * 00026000
- * DMKVCHDC 00027000
- * 00028000
- * ENTRY CONDITIONS - 00029000
- * 00030000
- * GPR 1 = FLAGS BUILT BY DMKVDA/DMKVDD 00031000
- * GPR 2 = CHANNEL NUMBER IN BYTE 3 00032000
- * GPR 3 = FIRST HALF OF USERID 00033000
- * GPR 4 = SECOND HALF OF USERID 00034000
- * GPR 10 = ADDRESS OF VMBLOK FOR ATTACH TO; DETACH FROM USERID 00035000
- * 00036000
- * EXIT CONDITION - 00037000
- * 00038000
- * NORMAL 00039000
- * 00040000
- * CALLS TO OTHER ROUTINES - 00041000
- * 00042000
- * DMKERMSG- TO WRITE MESSAGES 00043000
- * DMKSCNRA - TO OBTAIN THE HEX REAL DEVICE ADDRESS 00044000
- * DMKSCNVU- TO LOCATE VIRTUAL CONTROL BLOKS 00045000
- * DMKSCNRU- TO LOCATE REAL DEVICE CONTROL BLOKS 00046000
- * DMKSCNRD - TO OBTAIN THE HEX REAL DEVICE ADDRESS 00047000
- * DMKVDSAT - TO BUILD VIRTUAL DEVICE BLOCKS FOR ATTACH 00048000
- * DMKVDREL - TO RELEASE VIRTUAL BLOCKS FOR DETACH 00049000
- * DMKFREE - TO OBTAIN STORAGE 00050000
- * DMKFRET - TO RELEASE STORAGE 00051000
- * DMKQCNWT - SEND MESSAGES TO THE TERMINAL 00052000
- * 00053000
- * EXTERNAL REFERENCES - 00054000
- * 00055000
- * NONE 00056000
- * 00057000
- * TABLES / WORK AREAS 00058000
- * 00059000
- * SAVEVCH - AREA USED TO SAVE DEVICE ADDRESS AND TYPE 00060000
- * 00061000
- * REGISTER USAGE - 00062000
- * 00063000
- * GPR 0 = SCRATCH 00064000
- * GPR 1 = CONTAINS CHANNEL OR DEVICE ADDRESS 00065000
- * GPR 2 = WORK REGISTER 00066000
- * GPR 3 = WORK REGISTER 00067000
- * GPR 4 = WORK REGISTER 00068000
- * GPR 5 = WORK REGISTER 00069000
- * GPR 6 = ADDRESS OF RCHBLOK/VCHBLOK 00070000
- * GPR 7 = ADDRESS OF RCUBLOK/VCUBLOK 00071000
- * GPR 8 = ADDRESS OF RDEVBLOK/VDEVBLOK 00072000
- * GPR 9 = ADDRESS OF SAVEVCH 00073000
- * GPR 10 = ADDRESS OF VMBLOK FOR THE ATTACH TO USER 00074000
- * GPR 11 = ADDRESS OF THE VMBLOK DOING THE ATTACHING/DETACHING 00075000
- * GPR 12 = BASE REGISTER 00076000
- * GPR 13 = ADDRESS OF A STANDARD SAVE AREA 00077000
- * 00078000
- * NOTES - 00079000
- * 00080000
- * NONE 00081000
- * 00082000
- * OPERATION - 00083000
- * 00084000
- * DMKVCHDC IS CALLED BY DMKVDA (ATTACH) OR DMKVDD (DETACH) A 00085000
- * REAL DEVICE AND ALL DEVICES ON THE CHANNEL TO A SPECIFIED 00086000
- * USERID. THE ATTACH/DETACH COMMAND HAS BEEN PROCESSED BY 00087000
- * DMKVDA/DMKVDD AND FLAGS SET IN GPR1, REPRESENTING THE FUNCTION 00088000
- * REQUESTED. THE FOLLOWING CONDITIONS ARE TESTED BEFORE 00089000
- * A CHANNEL CAN BE DEDICATED. 00090000
- * 00091000
- * 1. MUST NOT BE CHANNEL 0 00092000
- * 2. VIRTUAL CHANNEL CANNOT ALREADY EXIST. 00093000
- * 3. REAL CHANNEL MUST BE ON THE SYSTEM 00094000
- * 4. CHANNEL MUST NOT BE DEDICATED TO ANOTHER USER 00095000
- * 5. THERE MUST BE NO CP-VOLUMES ON THE CHANNEL 00096000
- * 6. SPOOLING DEVICES MUST BE IN A DRAINED CONDITION 00097000
- * 7. DEVICES ON THE CHANNEL CANNOT BE ALREADY ATTACHED 00098000
- * TO ANY USER'S. 00099000
- * 00100000
- * IF ALL OF THE ABOVE CONDITIONS ARE SATISFIED; VIRTUAL 00101000
- * CHANNEL, CONTROL UNITS, AND DEVICE BLOKS ARE BUILT. THEY ARE 00102000
- * MAPPED 1 FOR 1 AGAINST THE REAL CHANNEL, CONTROL UNITS, AND 00103000
- * DEVICES. THE DEDICATE BITS ARE TURNED ON. A RESPONSE IS 00104000
- * ISSUED TO THE USER THAT THE CHANNEL HAS BEEN ATTACHED. 00105000
- * 00106000
- * TO DETACH A CHANNEL THE FOLLOWING CONDITIONS MUST BE MET; 00107000
- * 00108000
- * 1. MUST NOT BE CHANNEL 0 00109000
- * 2. THE REAL CHANNEL MUST EXIST 00110000
- * 3. THE CHANNEL MUST HAVE ALREADY BEEN DEDICATED TO 00111000
- * THIS USER. 00112000
- * 00113000
- * IF THE ABOVE CONDITIONS ARE MET; VIRTUAL CHANNEL, CONTROL 00114000
- * UNITS, AND DEVICE BLOKS ARE MARKED UNAVAILABLE. THE DEDICATE 00115000
- * BITS ARE RESET IN THE REAL CONTROL BLOKS. CONTROL REGISTER 2 00116000
- * IS CHANGED IF NECCESSARY TO ALLOW THE CHANNEL TO 00117000
- * BECOME ACTIVE. 00118000
- * 00119000
- * RESPONSES - 00120000
- * 00121000
- * CHAN X ATTACH TO USERID X 00122000
- * CHAN X DETACHED USERID X 00123000
- * 00124000
- * ERROR MESSAGES - 00125000
- * 00126000
- * DMKVCH034E CHANNEL MISSING OR INVALID 00127000
- * DMKVCH040E DEV ADDR DOES NOT EXIST @VA13060 00127500
- * DMKVCH048E CHANNEL X DOES NOT EXIST 00128000
- * DMKVCH129E CHANNEL X DEVICES IN USE 00129000
- * DMKVCH130E CHANNEL X <PROC NN> NOT ATTACHED TO USERID @VA13060 00129500
- * DMKVCH132E CHANNEL X ALREADY DEFINED BY USERID 00130000
- * DMKVCH138E CHANNEL X NOT ATTACHED; INSUFFICIENT FREE STORAGE 00131000
- * DMKVCH153E DEVICE VADDR EXCEEDS MAX NO. OF VIRTUAL DEVICES 00131500
- *. 00132000
- COPY OPTIONS @V407510 00133000
- EJECT 00134000
- SPACE 2 00135000
- DMKVCH CSECT 00136000
- EXTRN DMKSCNVU 00137000
- EXTRN DMKSCNRU 00138000
- EXTRN DMKVDSAT @VA01382 00139000
- EXTRN DMKVDREL @V200820 00140000
- EXTRN DMKERMSG 00141000
- EXTRN DMKCVTBH 00142000
- EXTRN DMKSCNAU @V407466 00143000
- EXTRN DMKFRERC @V407466 00144000
- EXTRN DMKLOCKQ @V407466 00145000
- EXTRN DMKLOCKD @V407466 00146000
- EXTRN DMKSCNRA @V407466 00147000
- SPACE 00148000
- USING PSA,R0 00149000
- USING RCHBLOK,R6 00150000
- USING RCUBLOK,R7 00151000
- USING RDEVBLOK,R8 00152000
- USING VMBLOK,R11 00153000
- USING SAVEAREA,R13 00154000
- SPACE 00155000
- * EYE CATCHER FOR STORAGE DUMPS 00156000
- MODID DC CL8'DMKVCH' 00157000
- EJECT 00158000
- DMKVCHDC RELOC 00159000
- * 00160000
- ST R1,VDBITS FLAGS PASSED FROM DMKVDA/DMKVDD 00161000
- MVI DEDBITS,X'00' CLEAR BIT SWITCHES 00162000
- LA R0,9 Get 9 doublewords of storage HRC040DK 00163100
- CALL DMKFREE 00164000
- LR R9,R1 00165000
- USING SAVEVCH,R9 00166000
- BAL R5,YOURVMBK GET ATTACHEE'S VMBLOK @V407510 00167000
- XC SAVEVCH(64),SAVEVCH CLEAR THE ENTIRE AREA 00168000
- MVC CHANUSER(8),VMUSER USERID WANTING THE CHANNEL 00169000
- ST R2,CHANADDR AND SAVE ALSO, THE CHANNEL NUMBER 00170000
- SPACE 00172000
- SLA R2,8(0) SHIFT AND TEST CHANNEL ADDRESS @VA01382 00173000
- BZ VCH034 CHANNEL ZERO IS NOT VALID @VA01382 00174000
- STH R2,DEVADDR CHANNEL NUMBER - HIGH ORDER BYTE @VA07711 00174100
- LR R1,R2 PUT CHANNEL INTO GPR-1. 00175000
- CALL DMKSCNRU DOES REAL CHANNEL EXIST ? 00176000
- BC 4,VCH048 ERROR IF CHANNEL BLOCK NOT FOUND 00177000
- ST R6,SAVERCH SAVE THE RCHBLOK ADDRESS @VA13280 00178000
- TM VDBITS+1,DETACH DETACH COMMAND ISSUED ? @VA01382 00179000
- BO CHANDET YES - CHECK VIRTUAL CHANNEL @VA01382 00180000
- STM R1,R2,SAVEWRK2 SAVE REGS ACROSS 'TRANS' @VA01382 00181000
- L R1,=A(DMKVDSAT) MAKE SURE DMKVDS IS IN CORE @VA01382 00182000
- TRANS 2,1,OPT=(BRING,DEFER,SYSTEM) . . .FOR THE SCAN @VA01382 00183000
- SPACE 00184000
- LM R1,R2,SAVEWRK2 RESTORE CHANNEL ADDR REGS @VA01382 00185000
- CALL DMKSCNVU DOES VIRTUAL CHANNEL EXISTS 00186000
- BC 11,VCH132 YES - ERROR IF CHANNEL BLOK FOUND 00187000
- L R6,SAVERCH RESTORE RCHBLOK ADDRESS @VA13280 00188000
- SLR R10,R10 CLEAR R10 @V407466 00189000
- SPACE 00190000
- STRTSCAN B PASS1 FIRST PASS FOR 'ATTACH CHANNEL' @V407466 00191000
- B PASS2 SEC. PASS FOR 'ATTACH CHANNEL' @V407466 00192000
- B PASS3 THIRD PASS FOR 'ATTACH CHANNEL' @V407466 00193000
- B PASS4 4TH PASS FOR 'ATTACH CHANNEL' @V407466 00194000
- B PASS5 5TH PASS FOR 'ATTACH CHANNEL' @V407466 00195000
- EJECT 00196000
- CHANDET EQU * CHECK FOR CHANNEL ATTACHED @VA01382 00197000
- CALL DMKSCNVU SCAN FOR VIRTUAL BLOCKS @VA01382 00198000
- BC 4,VCH130 CHANNEL NOT ATTACHED @VA02709 00199000
- TM VCHSTAT-VCHBLOK(R6),VCHDED DEDICATED CHAN ? @VA01382 00200000
- BZ VCH130 NO -- ERROR @VA01382 00201000
- L R6,SAVERCH BACK TO THE RCHBLOK FOR SCAN @VA13280 00202000
- SPACE 2 00203000
- EJECT 00204000
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00205000
- * PASS1 COUNTS THE NUMBER OF VCUBLOKS FOR WHICH STORAGE * 00206000
- * SHOULD BE ACQUIRED IN ADVANCE; THIS ROUTINE ALSO * 00207000
- * VERIFIES THAT EACH DEVICE ON THE CHANNEL CAN BE ATTACHED. * 00208000
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00209000
- SPACE 2 00210000
- PASS1 LA R4,2 INCREMENT FACTOR FOR SCAN @V407466 00211000
- SLR R2,R2 INDEX FOR CONTROL UNIT SEARCH. 00212000
- SLR R14,R14 CLEAR R14 @V407466 00213000
- SPACE 00214000
- CHKCU EQU * SCAN ALL REAL CONTROL UNITS @VA01382 00215000
- LH R7,RCHCUTBL(R2) CONTROL UNIT DISPLACEMENT @VA01382 00216000
- LTR R7,R7 IS CONTROL UNIT ON THE SYSTEM ? 00217000
- BM INCRCU NO, GET NEXT C.U. TABLE ENTRY 00218000
- A R7,ARIOCU LOAD ABSOLUTE ADDRESS OF RCUBLOK. 00219000
- SLR R3,R3 INDEX REG. FOR DEVICE TABLE SEARCH 00220000
- SPACE 00221000
- CHKDEV EQU * SCAN ALL REAL DEVICE BLOCKS @VA01382 00222000
- LH R8,RCUDVTBL(R3) REAL DEVICE DISPLACEMENT @VA01382 00223000
- LTR R8,R8 DOES DEVICE EXIST ? 00224000
- BM INCRDEV NO, GET NEXT DEVICE ENTRY 00225000
- OI DEDBITS,DEVIND RDEVICE INDEX FOUND IN RCUBLOK @V407466 00226000
- SLL R8,3(0) CONVERT TO BYTE INDEX @V200820 00227000
- A R8,ARIODV YES, GET ABSOLUTE ADDR. OF RDEVBLOK. 00228000
- SPACE 00229000
- TM VDBITS+1,DETACH DETACHING THE CHANNEL 00230000
- BO DETCHAN YES -- RELEASE EACH DEVICE @VA01382 00231000
- SPACE 00232000
- DEVCHEK EQU * CHECK FOR DEVICES IN USE @V407466 00233000
- SWITCH SWITCH TO MAIN PROCESSOR @V407510 00234000
- TM RDEVSTAT,RDEVBUSY+RDEVSCED+RDEVDED IN USE ? @V407466 00235000
- BNZ VCH129 YES, CAN'T DO CHANNEL ATTACH THEN@V407466 00236000
- TM RDEVTYPC,CLASDASD+CLASTAPE TAPE OR DASD? @V407466 00237000
- BZ NODASTAP NOPE @V407466 00238000
- TM RDEVFLAG,RDEVSYS+RDEVOWN SYSTEM OR OWNED? @V407466 00239000
- BNZ VCH129 YES, CAN'T HAVE IT THEN @V407466 00240000
- B INCRDEV THIS DEVICE IS O.K. @V407466 00241000
- SPACE 00242000
- NODASTAP TM RDEVTYPC,CLASURI+CLASURO UNIT RECORD IN OR OUT? @V407466 00243000
- BZ NOTUR NOPE @V407466 00244000
- TM RDEVFLAG,RDEVDRAN YES, IS IT DRAINED? @V407466 00245000
- BZ VCH129 NOPE, THEN CAN'T HAVE IT. @V407466 00246000
- ICM R15,B'0111',RDEVSPL IS THERE AN ACTIVE SPOOL @V407466 00247000
- * FILE? 00248000
- BNZ VCH129 YES, CAN'T HAVE IT THEN. @V407466 00249000
- B INCRDEV THIS DEVICE IS O.K. @V407466 00250000
- SPACE 00251000
- NOTUR TM RDEVTYPC,CLASTERM+CLASGRAF GRAPHIC OR TERMINAL? @V407466 00252000
- BZ NOTERM NOPE @V407466 00253000
- TM RDEVFLAG,RDEVENAB CP ENABLED? @V407466 00254000
- BO VCH129 YES, CAN'T HAVE IT THEN. @V407466 00255000
- B INCRDEV THIS DEVICE IS O.K. @V407466 00256000
- SPACE 00257000
- NOTERM CLI RDEVTYPC,CLASSPEC SPECIAL TYPE? @V407466 00258000
- BNE INCRDEV NOPE - THIS DEVICE IS O.K. @V407466 00259000
- CLI RDEVTYPE,TYP3705 IS IT A 3705 TYPE? @V407466 00260000
- BNE INCRDEV NOPE - THIS DEVICE IS O.K. @V407466 00261000
- TM RDEVSTAT,RDEVRSVD SYSTEM RESERVED? @V407466 00262000
- BO VCH129 YES, CAN'T HAVE IT THEN @V407466 00263000
- TM RDEVFLAG,RDEVRCVY IN RECOVERY PROCESS NOW ? @V407466 00264000
- BO VCH129 YES - IT'S REALLY IN USE @V407466 00265000
- SPACE 00266000
- INCRDEV EQU * ADVANCE TO NEXT RDEVBLOK SLOT @V407466 00267000
- LA R5,30(0) SIXTEEN DEVICE SLOTS PER RCUBLOK @V407466 00268000
- BXLE R3,R4,CHKDEV GET THE NEXT DEVICE @V407466 00269000
- SPACE 00270000
- TM DEDBITS,DEVIND RDEVICE FOUND ON RCUBLOK @V407466 00271000
- BZ INCRCU ADVANCE TO NEXT RCUBLOK SLOT @V407466 00272000
- LA R14,1(,R14) ADD 1 TO NO. VCUBLOKS TO BE ACQ. @V407466 00273000
- NI DEDBITS,X'FF'-DEVIND RESET DEVICE FOUND BIT @V407466 00274000
- INCRCU EQU * ADVANCE TO NEXT RCUBLOK SLOT @V407466 00275000
- LA R5,62(0) 32 RCUBLOK SLOTS PER RCHBLOK @V407466 00276000
- BXLE R2,R4,CHKCU GET THE NEXT CONTROL UNIT @V407466 00277000
- SPACE 00278000
- TM VDBITS+1,DETACH DETACHING THE CHANNEL @V407466 00279000
- BO ALLDET YES, ALL DEVICES DETACHED @VA07711 00280000
- STH R14,CUNUM NO. VCUBLOKS TO BE ACQUIRED @V407466 00281000
- LOOP LA R10,4(,R10) INCREM FOR SECOND PASS @V407466 00282000
- B STRTSCAN(R10) 2ND PASS RTN FOR 'ATTACH CHANNEL'@V407466 00283000
- EJECT 00284000
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00285000
- * PASS2 COUNTS THE NUMBER OF VDEVBLOKS FOR WHICH STORAGE MUST BE * 00286000
- * ACQUIRED IN ADVANCE; EACH RDEVBLOK IS ONLY COUNTED ONCE. * 00287000
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00288000
- SPACE 2 00289000
- PASS2 EQU * SECOND PASS FOR 'ATTACH CHANNEL' @V407466 00290000
- LA R4,2 INCREM FACTOR FOR SCAN @V407466 00291000
- SLR R14,R14 ZERO R14 @V407466 00292000
- SLR R2,R2 ... @V407466 00293000
- CHKCU2 LH R7,RCHCUTBL(R2) CONTROL UNIT DISPLACEMENT @V407466 00294000
- LTR R7,R7 IS CONTROL UNIT ON THE SYSTEM? @V407466 00295000
- BM INCRCU2 NO, GET NEXT C.U. TABLE ENTRY @V407466 00296000
- A R7,ARIOCU ABSOLUTE ENTRY ADDRESS OF RCUBLOK@V407466 00297000
- SLR R3,R3 INDEX REG. FOR DEV. TABLE SEARCH @V407466 00298000
- CHKDEV2 EQU * SCAN ALL REAL DEVICE BLOKS @V407466 00299000
- LH R8,RCUDVTBL(R3) REAL DEVICE DISPLACEMENT @V407466 00300000
- LTR R8,R8 DOES DEVICE EXIST? @V407466 00301000
- BM INCRDEV2 NO, GET NEXT DEVICE ENTRY @V407466 00302000
- SLL R8,3(0) CONVERT TO BYTE INDEX @V407466 00303000
- A R8,ARIODV YES, GET ABSOLUTE RDEVBLOK ADDR @V407466 00304000
- TM RDEVADD,DEVCOUNT RDEVBLOK COUNTED PREVIOUSLY? @V407466 00305000
- BO INCRDEV2 YES, PROCEED TO NEXT DEVICE @V407466 00306000
- OI RDEVADD,DEVCOUNT IND. RDEVBLOK COUNTED @V407466 00307000
- LA R14,1(,R14) UP COUNT OF NO. UNIQUE RDEVBLOKS @V407466 00308000
- * MUST RESET MY 'DEVCOUNT' MARK IN 'RDEVADD' (OF A 2305) FOR ALL 00308100
- * THE RDEVBLOKS EXCEPT THE FIRST ONE. DMKVDS ATTACHES ALL 8 OF THEM 00308200
- * WITH ONE CALL. (FIRST ONE IS RESET WHEN I CALL DMKVDS). 00308300
- CLC RDEVTYPC(2),=AL1(CLASDASD,TYP2305) @VA12940 00308400
- BNE INCRDEV2 NOT A 2305; WE'RE OK @VA12940 00308500
- TM RDEVADD+1,7 IS THE ADDRESS 1-7 OR 9-F? @VA12940 00308600
- BZ INCRDEV2 ADDRESS IS 0 OR 8: MARK IS OK @VA12940 00308700
- NI RDEVADD,X'FF'-DEVCOUNT RESET 'MARK' @VA12940 00308800
- INCRDEV2 LA R5,30(0) 16 DEVICE SLOTS PER RCUBLOK @V407466 00309000
- BXLE R3,R4,CHKDEV2 GET NEXT DEVICE @V407466 00310000
- INCRCU2 LA R5,62(0) 32 CONTROL UNIT SLOTS PER RCHBLOK@V407466 00311000
- BXLE R2,R4,CHKCU2 GET NEXT CONTROL UNIT @V407466 00312000
- STH R14,DEVNUM NUMBER OF VDEVBLOKS TO ACQUIRE @V407466 00313000
- B LOOP PREP FOR PASS3 OF 'ATT CHANNEL' @V407466 00314000
- EJECT 00315000
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00316000
- * PASS3 SCANS THE RDEVBLOKS RESETTING THE BIT IN THE HIGH ORDER * 00317000
- * BYTE WHICH WAS SET AS A PART OF PASS2 PROCESSING. * 00318000
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00319000
- SPACE 2 00320000
- PASS3 EQU * @V407466 00321000
- LA R4,2 INCREM FACTOR FOR SCAN @V407466 00322000
- SLR R2,R2 ... @V407466 00323000
- CHKCU3 LH R7,RCHCUTBL(R2) CONTROL UNIT DISPLACEMENT @V407466 00324000
- LTR R7,R7 IS CONTROL UNIT ON THE SYSTEM? @V407466 00325000
- BM INCRCU3 NO, GET NEXT C.U. TABLE ENTRY @V407466 00326000
- A R7,ARIOCU ABSOLUTE ENTRY ADDRESS OF RCUBLOK@V407466 00327000
- SLR R3,R3 INDEX FOR RCUBLOK DEV. TABLE SRCH@V407466 00328000
- CHKDEV3 EQU * SCAN ALL REAL DEVICE BLOKS @V407466 00329000
- LH R8,RCUDVTBL(R3) REAL DEVICE DISPLACEMENT @V407466 00330000
- LTR R8,R8 DOES DEVICE EXIST? @V407466 00331000
- BM INCRDEV3 NO, GET NEXT DEVICE ENTRY @V407466 00332000
- SLL R8,3(0) CONVERT TO BYTE INDEX @V407466 00333000
- A R8,ARIODV YES, GET ABSOLUTE RDEVBLOK ADDR @V407466 00334000
- NI RDEVADD,X'FF'-DEVCOUNT RESET INDICATOR @V407466 00335000
- INCRDEV3 LA R5,30(0) 16 DEVICE SLOTS PER RCUBLOK @V407466 00336000
- BXLE R3,R4,CHKDEV3 GET NEXT DEVICE @V407466 00337000
- INCRCU3 LA R5,62(0) 32 CONTROL UNIT SLOTS PER RCHBLOK@V407466 00338000
- BXLE R2,R4,CHKCU3 GET NEXT CONTROL UNIT @VA07240 00339000
- B LOOP PREP FOR PASS3 OF 'ATT CHANNEL' @V407466 00340000
- EJECT 00341000
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00342000
- * PASS4 ACQUIRES ONE VCHBLOK IN ADVANCE IF NECESSARY, AS MANY * 00343000
- * VCUBLOKS AS NECESSARY AFTER NUMBER OF EMPTY SLOTS IN EXISTING * 00344000
- * TABLE OF VCUBLOKS ARE SUBTRACTED FROM NUMBER REQUIRED AND AS MANY * 00345000
- * VDEVBLOKS AS ARE NECESSARY AFTER A SIMILAR CALCULATION IS PERFORMED.* 00346000
- * ALL BLOCKS ACQUIRED ARE MADE TO LOOK LIKE EMPTY SLOTS. * 00347000
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00348000
- SPACE 2 00349000
- PASS4 EQU * @V407466 00350000
- STM R6,R9,SAVEWRK6 SAVE REGS FOR LATER @V407466 00351000
- BAL R5,LOKUSER THROW A LOCK ON DEVICE BLOCKS @V407466 00352000
- SLR R7,R7 CLEAR R7 FOR NEXT COUNTER @VA13217 00352050
- LA R0,VDEVSIZE SIZE OF VDEVBLOK @VA13217 00352100
- L R1,VMDVSTRT POINT TO VDEVBLOK TABLE @VA13217 00352150
- LH R2,VMDVCNT NUMBER OF VDEVBLOKS IN TABLE @VA13217 00352200
- BAL R5,EMPSLOT FIND EMPTY SLOTS IN VDEVBLOKS @VA13217 00352250
- STH R7,SAVEWRK2 REMEMBER THIS FOR LATER @VA13217 00352300
- LH R1,DEVNUM WILL THE REQ'D NO. OF VDEVBLOKS @VA13217 00352350
- AH R1,VMDVCNT FIT IN THE HALFWORD OFFSET @VA13217 00352400
- SLR R1,R7 ALLOWED? @VA13217 00352450
- MH R1,=Y(VDEVSIZE*8) @VA13217 00352500
- CL R1,=A(X'8000') @VA13217 00352550
- BH ERR153 .. NO, VIRT DEV MAX EXCEEDED @VA13217 00352600
- LA R0,VCHSIZE SIZE OF VCHBLOK @V407466 00353000
- SLR R2,R2 MAKE SURE R2 ZERO TO START @V407466 00354000
- L R1,VMCHSTRT VCHBLOK TABLE POINTER @V407466 00355000
- LH R2,VMCHCNT NUMBER BLOCKS IN TABLE @V407466 00356000
- SLR R7,R7 CLEAR R7 @V407466 00357000
- OI DEDBITS,CHBLD BUILDING VCHBLOK @VA07711 00357100
- BAL R5,EMPSLOT SEE IF EMPTY SLOTS @V407466 00358000
- LTR R7,R7 ANY EMPTY SLOTS - ONLY NEED ONE @V407466 00359000
- BZ ACQVCH ACQUIRE ONE VCHBLOK @V407466 00360000
- LR R1,R8 PTR TO EMPTY VCHBLOK @VA07711 00360100
- SLR R6,R6 IN. NO FREE STORAGE ACQUIRED @VA07711 00360200
- * FOR BLK 00360300
- B FORMVCH CONSTRUCT VCHBLOK @VA07711 00360400
- EMPVCU SLR R7,R7 CLEAR R7 FOR NEXT COUNTER @V407466 00361000
- LA R0,VCUSIZE SIZE OF VCUBLOK @V407466 00362000
- L R1,VMCUSTRT VCUBLOK TABLE POINTER @V407466 00363000
- LH R2,VMCUCNT NUMBER OF VCUBLOKS @V407466 00364000
- BAL R5,EMPSLOT FIND EMPTY SLOTS IN VCUBLOKS @V407466 00365000
- LH R6,CUNUM NO. OF VCUBLOKS REQUIRED @V407466 00366000
- SR R6,R7 SUBT NO. EMPTY FROM NO. REQUIRED @V407466 00367000
- BC 12,EMPVDEV < OR = 0; ACQUIRE NO VCUBLOKS @V407466 00368000
- SLR R3,R3 ... @V407466 00369000
- LH R2,VMCUCNT NO. EXISTING VCUBLOKS @V407466 00370000
- LA R9,VCUSIZE VCUBLOK SIZE IN DBL. WORDS @V407466 00371000
- LA R1,VCUSIZE VCUBLOK SIZE IN DBL. WORDS @V407466 00372000
- L R8,VMCUSTRT PTR. TO TABLE OF VCUBLOKS @V407466 00373000
- OI DEDBITS,CUBLD BUILDING CU BLOCKS @VA07711 00373100
- BAL R5,BLDBLOK CREATE TAB. OF VCUBLOKS (OLD+NEW)@V407466 00374000
- NI DEDBITS,X'FF'-CUBLD RESET VCUBLOK INDICATOR @VA11369 00374100
- SLR R8,R8 CLEAR R8 FOR 'LH' @V407466 00375000
- LA R7,VCUSIZE SIZE OF VCUBLOK IN DBL. WDS. @V407466 00376000
- LH R8,VMCUCNT NUMBER VCUBLOKS IN OLD TABLE @V407466 00377000
- MR R6,R8 NUMBER DBL. WDS. IN OLD TABLE @V407466 00378000
- LR R5,R1 SAVE NEW TABLE POINTER @V407466 00379000
- L R1,VMCUSTRT POINTER TO OLD TABLE @V407466 00380000
- LR R0,R7 TABLE LENGTH TO R0 FOR FRET @V407466 00381000
- CALL DMKFRET RETURN THE STORAGE @V407466 00382000
- ST R5,VMCUSTRT STORE POINTER TO NEW TABLE @V407466 00383000
- STH R3,VMCUCNT STORE NO. OF VCUBLOKS IN TABLE @V407466 00384000
- EMPVDEV DS 0H @VA13217 00385100
- LH R6,DEVNUM GET NO. OF REQUIRED VDEVBLOKS @VA07240 00390000
- SH R6,SAVEWRK2 ACTUAL NO. VDEVBLOKS TO ACQUIRE @VA13217 00391100
- BNP ENDPASS4 IF .LE. 0, THIS PASS DONE @VA13217 00392100
- SLR R3,R3 R3 ZERO TO START @V407466 00393000
- LH R2,VMDVCNT NO. EXISTING VDEVBLOKS @V407466 00394000
- LA R9,VDEVSIZE VDEVBLOK SIZE IN DBL. WORDS @V407466 00395000
- LA R1,VDEVSIZE ...SAME @V407466 00396000
- L R8,VMDVSTRT PTR. TO EXISTING VDEVBLOK TABLE @V407466 00397000
- OI DEDBITS,DEVBLD BUILDING VDEVBLOKS @VA07711 00397100
- BAL R5,BLDBLOK CREATE NEW VDEVBLOK TAB (OLD+NEW)@V407466 00398000
- NI DEDBITS,X'FF'-DEVBLD RESET VDEVBLOK INDICATOR @VA11369 00398100
- SLR R8,R8 CLEAR R8 @V407466 00399000
- LA R7,VDEVSIZE SIZE OF VDEVBLOK IN DBL.WDS. @V407466 00400000
- LH R8,VMDVCNT NUMBER VDEVBLOKS IN OLD TABLE @V407466 00401000
- MR R6,R8 NO. DBL. WDS. IN OLD TABLE @V407466 00402000
- LR R0,R7 INTO R0 FOR FRET @V407466 00403000
- LR R5,R1 SAVE NEW TABLE PTR TEMP. @V407466 00404000
- L R1,VMDVSTRT OLD TABLE PTR @V407466 00405000
- CALL DMKFRET RELEASE OLD TABLE @V407466 00406000
- ST R5,VMDVSTRT STORE NEW TABLE POINTER @V407466 00407000
- STH R3,VMDVCNT TOT. NO. VDEVBLOKS IN NEW TABLE @V407466 00408000
- ENDPASS4 LM R6,R9,SAVEWRK6 RESTORE REGISTERS @V407466 00409000
- OI VCHMODE,VCHW SET 'W' MODE IN DUMMY UDEVBLOK @V407466 00410000
- B LOOP GO TO PASS5 OF 'ATTACH CHANNEL' @V407466 00411000
- SPACE 00412000
- ACQVCH LA R6,1 SINGLE VCHBLOK TO BE ACQUIRED @V407466 00413000
- SLR R3,R3 ... @V407466 00414000
- LH R2,VMCHCNT NO. OF EXISTING VCHBLOKS @V407466 00415000
- LA R9,VCHSIZE VCHBLOK SIZE IN DBL. WORDS @V407466 00416000
- LR R1,R9 VCHBLOK SIZE IN DBL. WORDS @VA07711 00417000
- L R8,VMCHSTRT PTR TO EXISTING VCHBLOK TABLE @V407466 00418000
- BAL R5,BLDBLOK CREATE NEW VCHBLOK TAB. (OLD+NEW)@V407466 00419000
- SLR R8,R8 CLEAR R8 FOR 'LH' @V407466 00420000
- LA R7,VCHSIZE SIZE OF VCHBLOK IN DBL. WDS. @V407466 00421000
- LH R8,VMCHCNT NO. OF VCHBLOKS IN OLD TABLE @V407466 00422000
- MR R6,R8 R7 - NO. DBL. WDS. IN OLD TABLE @V407466 00423000
- LR R0,R7 ...TO R0 FOR FRET @V407466 00424000
- LR R5,R1 SAVE PTR TO NEW TABLE TEMP. @V407466 00425000
- L R1,VMCHSTRT BEGINNING OF OLD TABLE @V407466 00426000
- CALL DMKFRET RELEASE STORAGE @V407466 00427000
- ST R5,VMCHSTRT STORE NEW TABLE PTR IN VMBLOK @V407466 00428000
- STH R3,VMCHCNT NO. OF VCHBLOKS IN NEW TABLE @V407466 00429000
- B EMPVCU DETERMINE NO. VCUBLOKS TO ACQUIRE@V407466 00430000
- SPACE 00431000
- EMPSLOT SLL R0,3 CONVERT BLOCK SIZE TO BYTES @VA07711 00432000
- LTR R8,R1 ANY ENTRIES IN TABLE? @VA07711 00432100
- BCR 13,R5 NO TAB. ENTRIED; ZERO EMPTY SLOTS@V407466 00433000
- USING VDEVBLOK,R8 VDEVBLOK ADDRESSABILITY @V407466 00435000
- TSTEMP TM VDEVADD,X'80' EMPTY SLOT? @V407466 00436000
- BC 1,UPDSLOT YES, UPDATE EMPTY SLOTS @V407466 00437000
- NEXTSLOT AR R8,R0 NEXT BLOCK @V407466 00438000
- BCT R2,TSTEMP CONTINUE TO LOOK FOR EMPTY SLOTS @V407466 00439000
- BR R5 RETURN TO MAINLINE @V407466 00440000
- UPDSLOT AH R7,F1+2 ADD ONE MORE EMPTY SLOTWS @V407466 00441000
- TM DEDBITS,CHBLD ARE WE BUILDING VCHBLOK @VA07711 00441100
- BCR 1,R5 YES, PT TO EMPTY SLOT @VA07711 00441200
- B NEXTSLOT CONTINUE SEARCH FOR EMPTY SLOTS @V407466 00442000
- DROP R8 @VA07711 00442100
- SPACE 00443000
- BLDBLOK AR R3,R2 R3=NO. OF EXISTING BLOCKS @V407466 00444000
- AR R3,R6 PLUS NUMBER OF NEW BLOCKS 00445000
- SRL R0,3 CONVERT TO DLB. WDS. @VA07711 00445100
- MR R0,R3 NO. DLB. WDS. (R3*R1 INTO R0-R1) @V407466 00446000
- LR R0,R1 NO. OF DOUBLEWORDS TO ACCUIRE 00447000
- CALL DMKFRERC ACQUIRE STORAGE @V407466 00448000
- BNZ VCH138 INSUFFICIENT FREE STORAGE @V407466 00449000
- ST R1,SAVEWRK5 SAVE PTR TO NEW STORAGE TEMP. @V407466 00450000
- SLL R9,3 SIZE OF BLOCK TO BYTES @V407466 00451000
- BCTR R9,0 SUBTRACE ONE FOR EXECUTED MVC @V407466 00452000
- NEXTMVC EX R9,BLDMVC MOVE OLD BLOCK TO NEW @V407466 00453000
- TM DEDBITS,DEVBLD ARE WE BUILDING VDEVBLOKS? 00454000
- BO VLNK YES, TAKE CARE OF VDEVLINK FIELD 00455000
- BLDNEXT LA R1,1(R9,R1) POINT TO NEXT BLOCK IN EACH TAB. 00456000
- LA R8,1(R9,R8) ADDING 1 TO MAKE UP FOR SUBTRACT @V407466 00457000
- BCT R2,NEXTMVC MOVE NEXT BLOCK @V407466 00458000
- LH R8,FFS R8=FFFF @V407466 00459000
- NEXTSTOR STH R8,0(R1) STORE FFS IN EMPTY SLOTS @V407466 00460000
- TM DEDBITS,DEVBLD ARE WE BUILDING VDEVBLOKS 00461000
- BO CLRDEV YES, CLEAR EMPTY VDEVBLOK 00462000
- TM DEDBITS,CUBLD BUILDING VCUBLOKS?? 00463000
- BO CLRCU YES, CLEAR EMPTY VCUBLOKS 00464000
- *OTHERWISE MUST BE BUILDING VCHBLOKS 00465000
- USING VCHBLOK,R1 ADDRESSABILITY 00466000
- FORMVCH MVC VCHBLOK(VCHCUTBL-VCHBLOK),ZEROES CLEAR @VA07711 00467000
- MVC VCHCUTBL(8),FFS ... 00468000
- MVC VCHCUTBL+8(24),VCHCUTBL ... 00469000
- TM DEDBITS,CHBLD ARE WE BUILDING VCHBLOK? @VA07711 00469050
- BZ NEXTBLK NO, GO TO NEXT BLOCK @VA07711 00469075
- NI DEDBITS,X'FF'-CHBLD CLEAR VCHBLOK FLAG @VA07711 00469100
- L R9,SAVEWRK9 CHANNEL ADDR X'C00' @VA07711 00469125
- LH R2,DEVADDR GET CHANNEL ADDRESS @VA07711 00469150
- STH R2,VCHADD STORE IN VCHBLOK @VA07711 00469175
- OI VCHTYPE,VCHSEL FLAG CHANNELS 1-6 AS SELECTOR @VA07711 00469200
- TM VMFSTAT,VMFBMX USER WANT BMX CHANNEL? @VA07711 00469225
- BZ *+8 NO, LEAVE THEM AS SELECTOR @VA07711 00469250
- MVI VCHTYPE,VCHBMX YES,CHANGE THEM TO BMX @VA07711 00469275
- SRL R2,7 MULTIPLY CH ADDR BY 2 @VA07711 00469300
- L R7,VMCHSTRT GET OLD TABLE ADDRESS @VA07711 00469325
- LTR R6,R6 DID WE ACQUIRE NEW TABLE @VA07711 00469350
- BZ VCHORIG YES, GO GET ADDRESS @VA07711 00469375
- L R7,SAVEWRK5 GET NEWLY ACQUIRED TABLE @VA07711 00469400
- VCHORIG LR R0,R1 ADDR OF BLK JUST CREATED TO R0 @VA07711 00469425
- SR R0,R7 DISP OF NEW VCHBLOK IN TABLE @VA07711 00469450
- STH R0,VMCHTBL(2) STORE DISP IN VMBLOK @VA07711 00469475
- LTR R6,R6 WAS VCH STORAGE ACQ THIS RUN? @VA07711 00469500
- BZ EMPVCU NO, GO SEE ABOUT CONTROL UNIT @VA07711 00469525
- * BLKS 00469550
- NEXTBLK LA R1,1(R9,R1) POINT TO NEXT EMPTY BLOCK 00470000
- BCT R6,NEXTSTOR STOR FFS IN NEXT BLOCK @V407466 00471000
- L R1,SAVEWRK5 RESTORE PTR TO BEGINNING OF TAB. @V407466 00472000
- BR R5 RETURN TO MAINLINE @V407466 00473000
- SPACE 00474000
- BLDMVC MVC 0(0,R1),0(R8) MOVE OLD BLOCK TO NEW STORAGE @V407466 00475000
- SPACE 00476000
- USING VDEVBLOK,R1 ADDRESSABILITY 00477000
- VLNK CLC VDEVADD(2),FFS EMPTY SLOT?? @V407466 00478000
- BE BLDNEXT YES, DON'T WORRY ABOUT VDEVLINK @V407466 00479000
- CLI VDEVTYPC,CLASDASD DASD DEVICE?? @V407466 00480000
- BNE BLDNEXT NO, MOVE & BUILD NEXT BLOK @V407466 00481000
- TM VDEVFLAG,VDEVTDSK T-DISK?? @V407466 00482000
- BO BLDNEXT .... @V407466 00483000
- L R14,VDEVLINK PTR TO VDEVBLOK FOR SAME MINIDISK@V407466 00484000
- * SAME MINIDISK LINKED BY SAME OR DIFFERENT USER 00485000
- LTR R14,R14 SAME MINIDISK LINKED BY SOMEONE ELSE @V407466 00486000
- BZ BLDNEXT NO, MOVE & BUILD NEXT BLOCK @V407466 00487000
- LR R15,R1 R15 POINTS TO NEW BLOCK @V407466 00488000
- B BLDCHCK SEE IF VDEVBLOK POINTS TO OLD BLOK @V407466 00489000
- BLDLOOP LR R15,R14 SAVE PREVIOUS VDEVBLOK ADDRESS @V407466 00490000
- L R14,VDEVLINK-VDEVBLOK(,R14) NEXT VDEVBLOK ADDR @V407466 00491000
- BLDCHCK CR R8,R14 DOES IT PT TO OLD BLOK?? @V407466 00492000
- BNE BLDLOOP NO, KEEP LOOKING @V407466 00493000
- ST R1,VDEVLINK-VDEVBLOK(,R15) POINT IT TO NEW ONE @V407466 00494000
- B BLDNEXT MOVE & BUILD NEXT BLOCK @V407466 00495000
- SPACE 00496000
- CLRDEV DS 0H @VA11369 00498100
- XC VDEVADD+2(VDEVSIZE*8-2),VDEVADD+2 CLEAR VDEVBLOK@V407466 00499000
- B NEXTBLK CLEAR NEXT EMPTY SLOT @V407466 00500000
- SPACE 00501000
- USING VCUBLOK,R1 ADDRESSABILITY 00502000
- CLRCU DS 0H @VA11369 00503100
- MVC VCUBLOK+2(6),ZEROES CLEAR VCUBLOK @V407466 00504000
- MVC VCUDVTBL(8),FFS FFS @V407466 00505000
- MVC VCUDVTBL+8(24),VCUDVTBL FFS ... @V407466 00506000
- B NEXTBLK CLEAR NEXT EMPTY BLOCK @V407466 00507000
- DROP R1 00508000
- EJECT 00512000
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00513000
- * PASS5 PERFORMS THE ACTUAL 'ATTACH CHANNEL' FUNCTION BY CALLING * 00514000
- * DMKVDSAT TO ATTACH EACH DEVICE ON THE THE CHANNEL. * 00515000
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 00516000
- SPACE 2 00517000
- PASS5 EQU * @V407466 00518000
- USING RDEVBLOK,R8 ADDRESSABILITY @V407466 00519000
- LA R4,2 INCREMENT FACTOR FOR SCAN @V407466 00520000
- SLR R2,R2 INDEX FOR CONTROL UNIT SEARCH @V407466 00521000
- CHKCU5 EQU * SCAN ALL REAL CONTROL UNITS @V407466 00522000
- LH R7,RCHCUTBL(R2) CONTROL UNIT DISPLACEMENT @V407466 00523000
- LTR R7,R7 IS CONTROL UNIT ON THE SYSTEM? @V407466 00524000
- BM INCRCU5 NO, GET NEXT C.U. TABLE ENTRY @V407466 00525000
- A R7,ARIOCU LOAD ABSOLUTE ADDRESS OF RCUBLOK @V407466 00526000
- SLR R3,R3 INDEX FOR DEVICE TABLE SEARCH @V407466 00527000
- CHKDEV5 EQU * SCAN ALL REAL DEVICE BLOCKS @V407466 00528000
- LH R8,RCUDVTBL(R3) REAL DEVICE DISPLACEMENT @V407466 00529000
- LTR R8,R8 DOES DEVICE EXIST? @V407466 00530000
- BM INCRDEV5 NO, GET NEXT DEVICE ENTRY @V407466 00531000
- SLL R8,3(0) CONVERT TO BYTE INDEX @V407466 00532000
- A R8,ARIODV YES, GET ADDRESS OF RDEVBLOK @V407466 00533000
- ATTCHAN EQU * DEDICATE EACH REAL DEVICE @V407466 00534000
- STM R2,R8,SAVEWRK2 SAVE CURRENT REGISTERS @V407466 00535000
- LA R1,RCUCHA ADDRESS OF THE FIRST CHANNEL @V407438 00536000
- LA R2,4 INCREMENT @V407438 00537000
- LA R3,RCUCHD ADDRESS OF THE LAST CHANNEL @V407438 00538000
- NEXTCH CL R6,0(R1) R6 REPRESENT THIS CU -> CH PATH? @V407438 00539000
- BE *+8 YES, PATH FOUND, BR. @V407438 00540000
- BXLE R1,R2,NEXTCH NOPE, LOOK AT ALL CHANNEL PATHS @V407438 00541000
- LA R2,RCUCHA ADDRESS OF THE BEGINNING AGAIN @V407438 00542000
- SLR R1,R2 FIND HOW FAR DOWN WE FOUND IT @V407438 00543000
- SRL R1,2 CONVERT TO INDEX FROM 0 TO 3 @V407438 00544000
- IC R3,ENABTBL(R1) GET PTH BIT, PUT CU->CH PTH ONLIN@V407438 00545000
- EX R3,CUCHENAB (NI RCUSTAT,X'FF'-RCUCHXOF) @V407438 00546000
- NI RCUSTAT,X'FF'-RCUDISA PUT THE CONTROL UNIT ONLIN@V407438 00547000
- NI RDEVSTAT,X'FF'-RDEVDISA PUT THE DEVICE ON LINE @V407438 00548000
- CALL DMKSCNRA REAL DEVICE ADDRESS VIA THIS PATH@V407438 00549000
- STH R1,DEVADDR PASS IT ON TO DMKVDS @V407466 00550000
- LH R0,RDEVTYPC REAL DEVICE TYPE, CLASS @V407466 00551000
- STH R0,VDSTYPC PASS IT ALONG, ALSO @V407466 00552000
- LA R2,DEVADDR POINT TO 'UDEVBLOK' FOR VDS @V407466 00553000
- LR R1,R8 RDEVBLOK ADDRESS TO GR1 FOR VDS @V407466 00554000
- CALL DMKVDSAT,AFFINITY ATTACH THIS DEVICE @V407510 00555000
- CH R2,=H'124' EXCEEDED MAX VIRTUAL DEVICES? @VA13217 00555300
- BE ERR153 YES, WE MUST'VE GOOFED--ABEND @VA13217 00555600
- LM R2,R8,SAVEWRK2 RESTORE SCAN REGISTERS @V407466 00556000
- SPACE 00557000
- INCRDEV5 EQU * ADVANCE TO NEXT RDEVBLOK SLOT @V407466 00558000
- LA R5,30(0) SIXTEEN DEVICE SLOTS PER RCUBLOK @V407466 00559000
- BXLE R3,R4,CHKDEV5 GET THE NEXT DEVICE @V407466 00560000
- SPACE 00561000
- INCRCU5 EQU * ADVANCE TO NEXT RCUBLOK SLOT @V407466 00562000
- LA R5,62(0) 32 RCUBLOK SLOTS PER RCHBLOK @V407466 00563000
- BXLE R2,R4,CHKCU5 GET THE NEXT CONTROL UNIT @V407466 00564000
- SPACE 00565000
- ATCHCOMP EQU * CHANNEL HAS BEEN DEDICATED @V407466 00566000
- LH R1,DEVADDR PICK UP DEVICE NUMBER @V407466 00567000
- CALL DMKSCNVU NOW GET THE VIRTUAL BLOCKS @V407466 00568000
- USING VCHBLOK,R6 @V407466 00569000
- OI VCHSTAT,VCHDED INDICATE VIRTUAL CHANNEL ALSO DED@V407466 00570000
- MVC VCHRCHAD,SAVERCH SAVE RCHBLOK ADDRESS @VA13280 00570500
- USING RCHBLOK,R6 BACK TO STANDARD ABBRESSABILITRY @V407466 00571000
- CALL DMKSCNRU GET REAL DEVICE ADDRESS BACK @V407466 00572000
- BAL R5,FREUSER UNLOCK USER'S BLOCKS @V407466 00573000
- B CMDCOMP SEND MSG TO USER @V407438 00574000
- SPACE 00575000
- * RCU TO RCH BLOCK PATH AVAILABLE BITS IN RCUSTAT 00576000
- ENABTBL DC AL1(X'FF'-RCUCHAOF,X'FF'-RCUCHBOF) @V407438 00577000
- DC AL1(X'FF'-RCUCHCOF,X'FF'-RCUCHDOF) @V407438 00578000
- CUCHENAB NI RCUSTAT,0 ENABLE RCU -> RCH PATH @V407438 00579000
- EJECT 00580000
- DETCHAN EQU * DETACH DEDICATED CHANNEL DEVICES @VA01382 00581000
- STM R2,R8,SAVEWRK2 SAVE REGISTERS 00582000
- LH R1,RDEVATT LOAD VIRTUAL DEVICE ADDRESS. 00583000
- CALL DMKSCNVU GET VIRTUAL CONTROL BLOCKS 00584000
- BC 7,VCH040 BRANCH IF CC=1, 2, OR 3 @VA13060 00584150
- SPACE 00585000
- USING VCHBLOK,R6 @VA01382 00586000
- USING VCUBLOK,R7 ADDRESS THE VIRTUAL BLOCKS @VA01382 00587000
- USING VDEVBLOK,R8 @VA01382 00588000
- SPACE 00589000
- CALL DMKVDREL RELEASE THE VIRTUAL DEVICE @VA01382 00590000
- SPACE 00591000
- L R2,FFS MASK FIELD 00592000
- SLR R3,R3 CLEAR INDEX REGISTER 00593000
- LA R4,4 LOAD INCREMENT REGISTER 00594000
- LA R5,28 LOAD COMPARAND REGISTER 00595000
- LH R1,VDEVADD LOAD VIRTUAL DEVICE ADDRESS 00596000
- AR R1,R1 MULTIPLY IT BY 2 00597000
- STH R2,VDEVADD INDICATE DEVICE NO LONGER PRESENT 00598000
- STH R2,VCUDVTBL(R1) REMOVE DEVICE FROM C.U. TABLE 00599000
- SPACE 00600000
- DETCULP CL R2,VCUDVTBL(R3) ANY MORE DEVICES ON THIS C.U. 00601000
- BNE DETDONE BRANCH IF YES. 00602000
- BXLE R3,R4,DETCULP BRANCH IF MORE TABLE ENTRIES. 00603000
- LH R1,VCUADD LOAD VIRTUAL C.U. ADDRESS 00604000
- SRL R1,3 MULTIPLY IT BY 2 00605000
- STH R2,VCUADD INDICATE C.U. NO LONGER EXISTS 00606000
- STH R2,VCHCUTBL(R1) REMOVE VCUBLOK FROM TABLE 00607000
- SLR R3,R3 ZERO INDEX REGISTER 00608000
- SPACE 00609000
- DETCHLP CL R2,VCHCUTBL(R3) ANY MORE C.U. ON THIS CHANNEL ? 00610000
- BNE DETDONE BRANCH IF YES. 00611000
- BXLE R3,R4,DETCHLP BRANCH IF MORE TABLE ENTRIES. 00612000
- LH R1,VCHADD LOAD VIRTUAL CHANNEL ADDRESS 00613000
- SRL R1,7 MULTIPLY IT BY 2 00614000
- STH R2,VCHADD INDICATE CHANNEL NO LONGER EXISTS 00615000
- STH R2,VMCHTBL(R1) REMOVE VCHBLOK INDEX FROM TABLE 00616000
- SPACE 00617000
- DETDONE LM R2,R8,SAVEWRK2 RESTORE REGISTERS 00618000
- USING RCHBLOK,R6 00619000
- USING RCUBLOK,R7 00620000
- USING RDEVBLOK,R8 00621000
- B INCRDEV GET NEXT REAL DEVICE TO DETACH. 00622000
- EJECT 00623000
- ALLDET EQU * @VA07711 00624000
- USING VCHBLOK,R6 ADDRESSABILITY @VA07711 00624100
- LTR R14,R14 ANY DEVICES DETACHED? @VA07711 00624200
- BNZ CMDCOMP YES, USE REGULAR LOGIC @VA07711 00624300
- LR R0,R6 SAVE RCHBLOK ADDRESS @VA07711 00624400
- LH R1,DEVADDR GET CHANNEL X'C00' @VA07711 00624500
- CALL DMKSCNVU GET VIRTUAL BLOCKS @VA07711 00624600
- LR R6,R0 RESTORE RCHBLOK ADDRESS @VA07711 00624700
- L R0,FFS ... @VA07711 00624800
- LH R1,VCHADD CHANNEL ADDRESS @VA07711 00624900
- SRL R1,7 TIMES 2 @VA07711 00625000
- STH R0,VCHADD CLEAR VCHADD @VA07711 00625100
- STH R0,VMCHTBL(R1) AND VMBLOK INDEX @VA07711 00625200
- USING RCHBLOK,R6 ADDRESSABILITY @VA07711 00625300
- CMDCOMP EQU * CHANNEL IS ATTACHED/DETACHED @VA01382 00626000
- OI RCHSTAT,RCHDED MARK CHANNEL DEDICATED @V508690 00626100
- TM VDBITS+1,DETACH IS THIS A DETACH ?? @V508690 00626200
- BNO CMDCOMP1 NO, LEAVE CHANNEL BLOK ALONE @V508690 00626300
- NI RCHSTAT,X'FF'-RCHDED BETTER CLEAR DEDICATE BIT @V508690 00626400
- CMDCOMP1 EQU * @V508690 00626500
- MVC SAVEVCH(26),=C'CHAN X DETACHED USERIDXX' 00627000
- MVC SAVEVCH+18(8),CHANUSER STORE USERID 00628000
- LH R1,CHANADDR+2 GET CHANNEL ADDRESS 00629000
- CALL DMKCVTBH AND CONVERT TO HEX 00630000
- STC R1,SAVEVCH+5 SAVE CONVERTED ADDRESS 00631000
- LA R1,SAVEVCH LOAD ADDRESS OF FREE STORAGE 00632000
- LA R0,26 SIZE IN BYTES OF THE RESPONSE 00633000
- TM VDBITS+1,DETACH IS THE USER DETACHING THE CHANNEL 00634000
- BO *+10 YES - MESSAGE ALL SET 00635000
- MVC SAVEVCH+8(9),=C'ATTACH TO' CHANGE IT TO ATTACH 00636000
- CALL DMKQCNWT,PARM=NORET SEND RESPONSE TO ATTACHEE 00637000
- BAL R5,MINEVMBK GET ATTACHER'S VMBLOK @V407510 00638000
- SR R3,R3 CLEAR R3 FOR RETURNING THE "RETURN CODE" 00639000
- L R2,ASYSOP GET VMBLOK OF SYSTEM OPERATOR 00640000
- CL R2,SAVER10 IS SYSTEM OPERATOR SAME AS ATTACHEE ? 00641000
- BE OPERATEE YES - 00642000
- CALL DMKQCNWT,PARM=NORET+OPERATOR NO - TELL HIM ALSO 00643000
- SPACE 00644000
- OPERATEE CL R11,SAVER10 IS ATTACHER ALSO THE ATTACHEE ? 00645000
- BE FRETMSG YES - NO NEED TO TELL HIM AGAIN 00646000
- CL R11,ASYSOP IS ATTACHER THE SYSTEM'S OPERATOR ? 00647000
- BE FRETMSG YES - NO NEED TO TELL HIM AGAIN 00648000
- B SENDMSG ISSUE THE RESPONSE 00649000
- SPACE 00650000
- LOKUSER EQU * THROW A LOCK ON DEVICE BLOCKS @V407466 00651000
- LA R1,VMUSER POINT TO USERID @V407466 00652000
- CALL DMKLOCKQ ... AND LOCK IT @V407466 00653000
- LA R0,8 LENGTH OF USERID IN R0 @V407466 00654000
- CALL DMKSCNAU USER STILL LOGGED ON @V407466 00655000
- BNZ NOTLOGD NO, ERROR @V407466 00656000
- BR R5 RETURN TO MAINLINE @V407466 00657000
- SPACE 00658000
- NOTLOGD EQU * USERID NOT LOGGED ON @V407466 00659000
- LA R1,VMUSER USERID @V407466 00660000
- LA R0,8 LENGTH @V407466 00661000
- LA R2,045(,0) DMKVCH045E @V407466 00662000
- B NODATA ISSUE MESSAGE @V407466 00663000
- SPACE 00664000
- EJECT 00665000
- VCH034 SLR R0,R0 NO PARM'S BEING PASSED 00666000
- SLR R1,R1 ... 00667000
- LA R2,34 MESSAGE NUMBER DMKVCH034 00668000
- B NODATA 00669000
- VCH040 DS 0H @VA09651 00669100
- LA R2,40 MESSAGE NUMBER DMKVCH040E @VA09651 00669500
- CALL DMKCVTBH @VA09651 00669600
- SR R0,R0 R0, BYTE 3 = 0 => DATA IN R1 @VA13217 00669610
- B NODATA @VA09651 00669700
- SPACE 00670000
- VCH048 LA R2,48 MESSAGE NUMBER DMKVCH048 00671000
- B CALLERM 00672000
- SPACE 1 00672100
- ERR153 LA R2,EMSG153 MSG ID @VA13217 00672200
- L R1,CHANADDR GET CHANNEL NUMBER @VA13217 00672300
- CALL DMKCVTBH CONVERT TO EBCDIC @VA13217 00672400
- ICM R1,B'1110',=C'CH ' DATA IS "CH N" @VA13217 00672500
- SR R0,R0 R0 LOW ORDER=0:DATA IN R1 @VA13217 00672600
- B NODATA GO SET UP OTHER THINGS @VA13217 00672700
- SPACE 00673000
- VCH129 LA R2,129 MESSAGE NUMBER DMKVCH129 00674000
- B CALLERM 00675000
- SPACE 00676000
- VCH130 LA R2,130 MESSAGE NUMBER DMKVCH130 00677000
- B CALLERM 00678000
- SPACE 00679000
- VCH132 LA R2,132 MESSAGE NUMBER DMKVCH132 00680000
- B CALLERM 00681000
- SPACE 00682000
- VCH138 LA R2,MSG138 MESSAGE NUMBER DMKVCH138 @V407466 00683000
- B CALLERM ... @V407466 00684000
- SPACE 00685000
- CALLERM LH R1,CHANADDR+2 GET CHANNEL NUMBER AND 00686000
- CALL DMKCVTBH CONVERT IT TO HEX 00687000
- STC R1,CHANADDR+3 STORE THE RESULT 00688000
- LA R1,CHANADDR ADDRESS OF THE DATA TO PASS 00689000
- LA R0,16 LENGTH OF THE DATA TO PASS 00690000
- SPACE 00691000
- NODATA ICM R0,B'1110',MODID+3 MODULE IDENTIFICATION 00692000
- ICM R2,B'1000',=X'40' FLAG AREA TO BE FRETTED 00693000
- LR R3,R9 ADDRESS OF THE AREA TO BE FRETTED 00694000
- ICM R3,B'1000',=X'09' Size of area to be fretted HRC040DK 00695100
- LR R4,R1 SAVE REG 1 ACROSS CALL 00696000
- BAL R5,FREUSER RELEASE USER'S BLOCKS @V407466 00697000
- LR R1,R4 RESTORE REG 1 TO POINT CORRECTLY 00698000
- BAL R5,MINEVMBK GET ATTACHER'S VMBLOK @V407510 00699000
- CALL DMKERMSG OUTPUT THE MESSAGE 00700000
- * RETURN WILL BE MADE DIRECTLY TO DMKVDA FROM DMKERM 00701000
- EJECT 00702000
- SENDMSG CALL DMKQCNWT,PARM=NORET 00703000
- FRETMSG LA R0,9 Size in double words HRC040DK 00704100
- LR R1,R9 RETURN "SAVEVCH" STORAGE 00705000
- CALL DMKFRET 00706000
- ST R3,SAVER2 RETURN THE "RETURN CODE" TO THE CALLER 00707000
- EXIT 00708000
- SPACE 00709000
- YOURVMBK DS 0H @V407510 00710000
- L R1,SAVER10 GET ATTACHEE'S VMBLOK @V407510 00711000
- SWTCHVM SWITCH TO ATTACHEE'S @V407510 00712000
- BR R5 RETURN TO CALLER @V407510 00713000
- FREUSER LA R1,VMUSER USERID @V407466 00714000
- CALL DMKLOCKD UNLOCK USER'S BLOCKS @V407466 00715000
- BR R5 RETURN TO MAINLINE @V407466 00716000
- SPACE 00717000
- MINEVMBK DS 0H @V407510 00718000
- STM R0,R1,SAVEWRK8 DO NOT DESTROY NEEDED REGS @VA07769 00719500
- L R1,SAVER11 GET CALLER'S VMBLOK @V407510 00720000
- SWTCHVM SWITCH TO ATTACHER @V407510 00721000
- LM R0,R1,SAVEWRK8 RESTORE SWITCHVM WORK REGS @VA07769 00722500
- BR R5 RETURN TO CALLER @V407510 00723000
- SPACE 00724000
- * 00725000
- * FLAGS DEFINED IN VDBITS 00726000
- * 00727000
- CHANNEL EQU X'80' DEDICATED CHANNEL OPTION SPECIFIED 00728000
- NSYSOP EQU X'40' CALLER IS NOT SYSTEM OPERATOR 00729000
- VDETACH EQU X'20' DETACH VIRTUAL DEVICE 00730000
- ATTSYST EQU X'10' ATTACH/DETACH TO/FROM "SYSTEM" 00731000
- ATTREAD EQU X'08' ATTACH "R/O" 00732000
- NOTREDY EQU X'04' DASD DEVICE NOT READY 00733000
- SPACE 2 00734000
- * 00735000
- * FLAGS DEFINED IN VDBITS + 1 00736000
- * 00737000
- NSLABEL EQU X'80' NON-STANDARD LABEL FORMAT 00738000
- BADLABL EQU X'40' READ FAILED FOR DASD LABEL 00739000
- CPOWND EQU X'20' ALLOCATION DATA PRESENT ON VOLUME 00740000
- ALLOCN EQU X'10' READING ALLOCATION DATA 00741000
- DETACH EQU X'08' 'DETACH REAL' IN PROGRESS 00742000
- DASENSE EQU X'04' SENSE IN PROGRESS 00743000
- SPACE 00744000
- SPACE 00745000
- * 00746000
- * FLAGS DEFINED IN DEDBITS 00747000
- * 00748000
- DEVIND EQU X'80' RDEVICE FOUND ON RCUBLOK @V407466 00749000
- DEVBLD EQU X'40' BUILDING VDEVBLOKS @VA07711 00749100
- CUBLD EQU X'20' BUILDING VCUBLOKS @VA07711 00749200
- CHBLD EQU X'10' BUILDING VCHBLOK @VA07711 00749300
- SPACE 00750000
- * MISCELLANEOUS EQUATES 00751000
- DEVCOUNT EQU X'80' RDEVBLOK COUNTED PREVIOUSLY IND. @V407466 00752000
- EMSG153 EQU 153 EXCEEDED MAX VIRTUAL DEVICES @VA13217 00752500
- MSG138 EQU 138 DMKVCH138E @V407466 00753000
- SPACE 2 00754000
- LTORG 00755000
- SPACE 2 00756000
- SAVEVCH DSECT 00757000
- DS 0CL68 @VA13280 00758000
- DEVADDR DS 1H 00759000
- ORG SAVEVCH+9 @VA03957 00760000
- VCHMODE DS 1X DUMMY UDEVMODE FIELD @VA03957 00761000
- VCHW EQU X'08' DEVICE IS TO BE IN 'W' MODE @VA03957 00762000
- ORG SAVEVCH+10 00763000
- VDSTYPC DS 1H 00764000
- ORG SAVEVCH+48 00765000
- CHANADDR DS 1F CHANNEL ADDRESS - LOW BYTE 00766000
- DS 1F BINARY ZEROES 00767000
- CHANUSER DS 1D USERID WANTING THIS CHANNEL (DET/ATT) 00768000
- SAVERCH DS 1F RCHBLOK ADDRESS @VA13280 00768500
- SPACE 2 00769000
- COPY SAVE 00770000
- VDBITS EQU SAVEWRK1 00771000
- DEDBITS EQU SAVEWRK1+2 00772000
- CUNUM EQU SAVEWRK4 NO. VCUBLOKS TO BE ACQUIRED @V407466 00773000
- DEVNUM EQU SAVEWRK4+2 NO. VDEVBLOKS TO BE ACQUIRED @V407466 00774000
- COPY EQU 00775000
- COPY DEVTYPES 00776000
- COPY NETWORK @VA01656 00777000
- PSA 00778000
- COPY VMBLOK 00779000
- COPY RBLOKS 00780000
- COPY VBLOKS 00781000
- END 00782000
ibm/vm370-lib/cp/dmkvch.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator