ibm:vm370-lib:cp:dmkunt.assemble_src
Table of Contents
DMKUNT Source
References
- Fixes Applied : 5
- This Source Date : Thursday, December 7, 1978
- Last Fix ID : [R14280DK]
Source Listing
- DMKUNT.ASSEMBLE.txt
- UNT TITLE 'DMKUNT (CP) VM/370 - RELEASE 6' 00001000
- ISEQ 73,80 VALID SEQUENCING OF SOURCE 00002000
- COPY OPTIONS 00003000
- COPY LOCAL 00004000
- *. 00005000
- * MODULE NAME - 00006000
- * 00007000
- * DMKUNT 00008000
- * 00009000
- * CONTENTS - 00010000
- * 00011000
- * DMKUNTRN - UNTRANSLATE A REAL CSW TO A VIRTUAL CSW 00012000
- * DMKUNTFR - UNLOCK PAGES & RETURN CCW-CHAIN TO FREE STORAGE 00013000
- * DMKUNTRS - RELOCATE SENSE BYTE DATA 00014000
- * DMKUNTIS - UNDO ISAM PATCHES IN RCWTASKS 00015000
- *. 00016000
- EJECT 00017000
- *. 00018000
- * SUBROUTINE NAME - 00019000
- * 00020000
- * DMKUNTRN - UNTRANSLATE A REAL CSW TO A VIRTUAL CSW 00021000
- * 00022000
- * FUNCTION - 00023000
- * 00024000
- * TO UNTRANSLATE A REAL CSW, CONVERTING IT TO A VIRTUAL CSW 00025000
- * 00026000
- * ATTRIBUTES - 00027000
- * 00028000
- * REENTRANT, RESIDENT, CALLED VIA BALR 00029000
- * 00030000
- * ENTRY POINT - 00031000
- * 00032000
- * DMKUNTRN 00033000
- * 00034000
- * ENTRY CONDITIONS - 00035000
- * 00036000
- * GPR 8 = ADDRESS OF VDEVBLOK, WHICH CONTAINS 00037000
- * REAL (UNTRANSLATED) CSW. 00038000
- * GPR 11 = ADDRESS OF USER'S VMBLOK 00039000
- * GPR 14 = RETURN ADDRESS 00040000
- * GPR 15 = ADDRESS OF DMKUNTRN 00041000
- * 00042000
- * EXIT CONDITIONS - 00043000
- * 00044000
- * CORRECT VIRTUAL CSW HAS BEEN COMPUTED IN VCHBLOK. 00045000
- * 00046000
- * CALLS TO OTHER ROUTINES - 00047000
- * 00048000
- * NONE 00049000
- * 00050000
- * EXTERNAL REFERENCES - 00051000
- * 00052000
- * NONE 00053000
- * 00054000
- * TABLES / WORK AREAS - 00055000
- * 00056000
- * RCCWLST 00057000
- EJECT 00058000
- * REGISTER USAGE - 00059000
- * 00060000
- * GPR 0 = CONSTANT X'FFFFFFFF' (-1); ALSO WORK REGISTER 00061000
- * GPR 1 = COUNT OF REAL CCWS (IN MULTIPLES OF 8) 00062000
- * GPR 2 = CONSTANT +8 00063000
- * GPR 3 = WORK REGISTER 00064000
- * GPR 4 = ADDRESS OF LOOP (FOR 'BCR' USE) 00065000
- * GPR 8 = ADDRESS OF VDEVBLOK 00066000
- * GPR 11 = ADDRESS OF USER'S VMBLOK 00067000
- * GPR 14 = RETURN REGISTER 00068000
- * GPR 15 = BASE REGISTER 00069000
- * 00070000
- * ALL OTHER REGISTERS ARE NOT USED 00071000
- * 00072000
- * NOTES - 00073000
- * 00074000
- * NONE 00075000
- * 00076000
- * OPERATION - 00077000
- * 00078000
- * THE APPROPRIATE VIRTUAL CSW, INCLUDING THE CORRECT VIRTUAL 00079000
- * CORE-ADDRESS, IS COMPUTED FROM THE REAL CSW, TAKING INTO 00080000
- * ACCOUNT THE ADDRESS OF THE REAL CCW CHAIN AND OTHER 00081000
- * FACTORS AS NEEDED. 00082000
- *. 00083000
- EJECT 00084000
- DMKUNT CSECT -LOADER CONTROL- 00085000
- SPACE 00086000
- ENTRY DMKUNTF1 CP ASSIST POINTERS @VA14280 00086510
- ENTRY DMKUNTRN "UNTRANS" ENTRY POINT 00087000
- ENTRY DMKUNTFR "FREECCW" ENTRY POINT 00088000
- ENTRY DMKUNTRS RELOCATE SENSE BYTES 00089000
- SPACE 00090000
- USING PSA,R0 (FOR ALL ENTRIES) 00091000
- USING VDEVBLOK,R8 00092000
- USING RCWCCW,R3 00093000
- USING VMBLOK,R11 00094000
- USING DMKUNTRN,R15 00095000
- SPACE 00095400
- *. 00095800
- *********************************************************************** 00096200
- * 00096600
- * 00097000
- * CP ASSIST INSTRUCTION "UNTRN" - UNTRANSLATE A CSW 00097400
- * 00097800
- * 00098200
- * OPERANDS: 00098600
- * 1 = ADDRESS OF 'VDEVCSW' (ADDRESS OF CSW TO UNTRANSLATE) 00099000
- * 2 = NOT USED 00099400
- * 00099800
- * REGISTER INPUT: 00100200
- * GPR 14 = EXIT ADDRESS 00100600
- * 00101000
- * SYSTEM DATA AREAS REFERENCED: 00101400
- * RCWTASK 00101800
- * 00102200
- * 00102600
- * EXITS: 00103000
- * 00103400
- * 1. ADDRESS IN GPR 14 (NORMAL COMPLETION) 00103800
- * 00104200
- * REGISTER OUTPUT: NONE CHANGED BY THIS INSTRUCTION 00104600
- * 00105000
- * 2. NEXT SEQUENTIAL INSTRUCTION (ABNORMAL COMPLETION) 00105400
- * 00105800
- * NOTE: THIS EXIT IS FUNCTIONALLY EQUIVALENT TO A NO-OP. 00106200
- * 00106600
- *********************************************************************** 00107000
- *. 00107400
- SPACE 00107800
- DMKUNTRN DS 0D ENTER "UNTRANS" @V3M4038 00108200
- SPACE 00108600
- DS 0H EXECUTE CP ASSIST "UNTRN" @V3M4038 00109000
- DC X'E610',S(VDEVCSW,0) ***@V3M4038 00109400
- SPACE 00109800
- STM R0,R4,BALRSAVE - SAVE ONLY REGISTERS WE USE %V3M4038 00110200
- LA R2,8 8 INTO R2, %V3M4038 00110600
- L R3,VDEVCSW GET REAL CCW ADDR FROM REAL CSW %V3M4038 00111000
- LA R3,0(,R3) CLEAR HI BYTE %V3M4038 00111400
- SR R3,R2 GET CSW ADDRESS LESS 8 %V3M4038 00111800
- BM UNEXIT IF 0 (ORIG. CSW ADDR=0) EXIT %V3M4038 00112200
- L R0,FFS -1 INTO R0 FOR HEADER TEST %V3M4038 00112600
- SLR R1,R1 CLEAR ADJUSTER BEFORE LOOP START %V3M4038 00113000
- LA R4,TSTSUB SET R4 FOR BCR BELOW (FOR SPEED) %V3M4038 00113400
- SPACE 00113800
- TSTSUB TM RCWCTL,RCWGEN IS THIS A CP-GENERATED CCW ? %V3M4038 00114200
- BO STBK IF YES DON'T COUNT IT. %V3M4038 00114600
- ALR R1,R2 INCREMENT "REAL CCW COUNT" BY 8 %V3M4038 00115000
- STBK SLR R3,R2 BACK UP ONE CCW %V3M4038 00115400
- CH R0,RCWFLAG TEST FOR BACKUP INTO HEADER %V3M4038 00115800
- BCR 7,R4 "BNE TSTSUB" IF NO, REENTER LOOP %V3M4038 00116200
- SPACE 00116600
- SLR R3,R2 BACKUP 8 BYTES TO HEADER START %V3M4038 00117000
- L R0,RCWVCAW-RCWTASK(,R3) GET VIRT. CCW LIST ADDR %V3M4038 00117400
- ALR R0,R1 ADD "REAL CCW CNT" TO GET V. CSW %V3M4038 00117800
- STCM R0,7,VDEVCSW+1 STORE ADDRESS BITS %V3M4038 00118200
- UNEXIT LM R0,R4,BALRSAVE RESTORE ONLY THE REGS WE USED %V3M4038 00118600
- BR R14 AND EXIT. %V3M4038 00119000
- SPACE 2 00120000
- DROP R15 HERE ENDETH DMKUNTRN = "UNTRANS". 00121000
- EJECT 00122000
- *. 00123000
- * SUBROUTINE NAME - 00124000
- * 00125000
- * DMKUNTFR - UNLOCK PAGES & RETURN CCW-CHAIN TO FREE STORAGE 00126000
- * 00127000
- * FUNCTION - 00128000
- * 00129000
- * TO UNLOCK PAGES ASSOCIATED WITH A COMPLETED I/O OPERATION, 00130000
- * AND TO RETURN CCW CHAIN(S) TO FREE STORAGE. 00131000
- * 00132000
- * ATTRIBUTES - 00133000
- * 00134000
- * REENTRANT, RESIDENT, CALLED VIA SVC 00135000
- * 00136000
- * ENTRY POINT - 00137000
- * 00138000
- * DMKUNTFR 00139000
- * 00140000
- * ENTRY CONDITIONS - 00141000
- * 00142000
- * GPR 8 = ADDRESS OF VDEVBLOK 00143000
- * GPR 10 = ADDRESS OF IOBLOK 00144000
- * GPR 12 = ADDRESS OF DMKUNTFR 00145000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00146000
- * 00147000
- * EXIT CONDITIONS - 00148000
- * 00149000
- * LOCKED PAGES ASSOCIATED WITH THE CCW-CHAIN HAVE BEEN UNLOCKED, 00150000
- * AND FREE STORAGE FOR THE CCW-CHAIN HAS BEEN RETURNED. 00151000
- * 00152000
- * CALLS TO OTHER ROUTINES - 00153000
- * 00154000
- * DMKPTRUL - TO UNLOCK A PAGE 00155000
- * DMKFRET - TO RETURN CCW CHAIN(S) TO FREE STORAGE 00156000
- * DMKPTRFT - TO CHAIN A PAGE ON THE FREE-LIST 00157000
- * DMKSTKCP - TO STACK CPEXBLOKS 00157100
- * DMKSCNVD - TO GET THE VIRTUAL DEVICE ADDRESS IN CCU FORM 00157200
- * 00158000
- * EXTERNAL REFERENCES - 00159000
- * 00160000
- * DMKSYSRM - REAL MACHINE STORAGE SIZE 00161000
- * DMKVIOIN - PRESENT DE STATUS FOR MDISKS WHICH DESERVE IT 00161100
- * 00162000
- * TABLES / WORK AREAS - 00163000
- * 00164000
- * RCCWLST 00165000
- * RCWTASK 00166000
- EJECT 00167000
- * REGISTER USAGE - 00168000
- * 00169000
- * GPR 4 = ADDRESS OF CCW-CHAIN HEADER 00170000
- * GPR 7 = ADDRESS OF REAL CCW CHAIN 00171000
- * GPR 8 = ADDRESS OF VDEVBLOK 00172000
- * GPR 9 = STORAGE SIZE OF REAL MACHINE 00173000
- * GPR 10 = ADDRESS OF IOBLOK 00174000
- * GPR 12 = BASE REGISTER = A(DMKUNTFR) 00175000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00176000
- * 00177000
- * OTHER REGISTERS ARE USED FOR WORK REGISTERS 00178000
- * 00179000
- * NOTES - 00180000
- * 00181000
- * NONE 00182000
- * 00183000
- * OPERATION - 00184000
- * 00185000
- * THE ADDRESSES OF PAGES TO BE UNLOCKED ARE COMPUTED FROM 00186000
- * FLAGBITS IN THE REAL CCW CHAIN AND FROM ANY INDIRECT 00187000
- * DATA LISTS INVOLVED; SUCH PAGES ARE UNLOCKED VIA CALLS 00188000
- * TO DMKPTRUL; SIMILARLY, REAL CCW CHAIN(S) ARE 00189000
- * RETURNED TO FREE STORAGE VIA DMKFRET. 00190000
- * FOR I/O TASKS WHICH HAVE BEEN FLAGGED AS CONTAINING 00190100
- * A RELEASE CCW STRING (ONLY SET FOR MINI DISKS WITH 00190200
- * VIRTUAL RESERVE/RELEASE FEATURE REQUESTED), THE VIRTUAL 00190300
- * RESERVE/RELEASE BLOCK AND THE VIRTUAL DEVICE BLOCK ARE 00190400
- * MARKED NO LONGER RESERVED. ANY STACKED EXECUTION REQUESTS 00190500
- * ARE UNSTACKED AND STACKED ON THE DISPATCH CPEXBLOK CHAIN. 00190600
- * AN IOB INDICATING DEVICE END IS BUILT AND STACKED FOR 00190700
- * PROCESSING BY DMKVIOIN FOR EACH VIRTUAL DEVICE BLOCK ON 00190800
- * THE VDEVLINK CHAIN WHICH INDICATES THAT DEVICE END STATUS 00190900
- * IS DUE WHEN THE DEVICE IS RELEASED. 00191000
- *. 00191100
- EJECT 00192000
- * RELEASE THE STORAGE USED FOR THE REAL CCW LISTS 00193000
- * UNLOCK I/O DATA AREA PAGES * 00194000
- * UNTRANSLATE RHA CCW I/O 00195000
- * 00196000
- EXTRN DMKPTRUL,DMKSYSRM @V200820 00197000
- EXTRN DMKPTRFT @V304735 00198000
- EXTRN DMKVIOIN @V407438 00198100
- EXTRN DMKSTKCP @V407438 00198200
- EXTRN DMKSCNVD @V407438 00198300
- EXTRN DMKSTKIO 00198400
- USING RCWTASK,R4 00199000
- USING IOBLOK,R10 00200000
- USING RCWCCW,R7 00201000
- USING VDEVBLOK,R8 00202000
- USING DMKUNTFR,R12 00206000
- USING SAVEAREA,R13 00207000
- SPACE 2 00207150
- *. 00207300
- *********************************************************************** 00207450
- * 00207600
- * 00207750
- * CP ASSIST INSTRUCTION "UNTFR" - FREE CCW STORAGE 00207900
- * 00208050
- * 00208200
- * OPERANDS: 00208350
- * 1 = ADDRESS OF 'DMKUNTF1' (DATA LIST) 00208500
- * 2 = ADDRESS OF 'DMKUNTF2' (EXIT LIST) 00208650
- * 00208800
- * REGISTER INPUT: 00208950
- * GPR 10 = ADDRESS OF THE IOBLOK 00209100
- * GPR 11 = ADDRESS OF THE VMBLOK 00209250
- * GPR 13 = ADDRESS OF THE SAVEAREA 00209400
- * 00209550
- * SYSTEM DATA AREAS REFERENCED: 00209700
- * IOBLOK, RCWTASK, SAVEAREA 00209850
- * 00210000
- * 00210150
- * EXITS TO SPECIFIED OPERAND 2 LIST ADDRESSES: 00210300
- * 00210450
- * +0 'UNREL' (MUST UN-RELOCATE CYLINDER NUMBER OR SENSE DATA) 00210600
- * REGISTER OUTPUT: 00210750
- * GPR 0 = NUMBER OF IDAWS LEFT TO PROCESS 00210900
- * GPR 4 = ADDRESS OF RCWTASK 00211050
- * GPR 5 = DATA ADDRESS FROM THE CCW (EQUALS IDAL ADDRESS) 00211200
- * GPR 6 = NUMBER OF CCW'S LEFT TO UNTRANSLATE 00211350
- * GPR 7 = ADDRESS OF THE CURRENT CCW 00211500
- * GPR 9 = 'DMKPTRRM' - THE REAL MACHINE STORAGE SIZE 00211650
- * GPR 14 = STARTING ADDRESS OF DATA 00211800
- * GPR 15 = ENDING ADDRESS OF DATA 00211950
- * 00212100
- * +4 'UNTFRET' (CP ASSIST "FRET" COULD NOT FRET RCWTASK) 00212250
- * REGISTER OUTPUT: 00212400
- * GPR 0 = NUMBER OF DOUBLEWORDS IN THE RCWTASK 00212550
- * GPR 1 = ADDRESS OF RCWTASK 00212700
- * GPR 4 = VALUE FROM RCWPNT 00212850
- * GPR 6 = UNPREDICTABLE 00213000
- * GPR 9 = 'DMKPTRRM' - THE REAL MACHINE STORAGE SIZE 00213150
- * GPR 14-15 = UNPREDICTABLE 00213300
- * 00213450
- * +8 'PTRUL2' (CP ASSIST "PTRUL" DETECTED ABEND CONDITION) 00213600
- * REGISTER OUTPUT: 00213750
- * GPR 0 = NUMBER OF IDAWS LEFT TO PROCESS 00213900
- * GPR 2 = CURRENT IDAW THAT COULDN'T BE HANDLED 00214050
- * GPR 4 = ADDRESS OF RCWTASK 00214200
- * GPR 5 = ADDRESS OF THE IDAW 00214350
- * GPR 6 = NUMBER OF CCW'S LEFT TO UNTRANSLATE 00214500
- * GPR 7 = ADDRESS OF THE CURRENT CCW 00214650
- * GPR 9 = 'DMKPTRRM' - THE REAL MACHINE STORAGE SIZE 00214800
- * GPR 14-15 = UNPREDICTABLE 00214950
- * 00215100
- * +12 'UNTFRXIT' (MUST EXIT WITHOUT USING CP ASSIST "RETURN") 00215250
- * REGISTER OUTPUT: 00215400
- * GPR 0-11,14-15 = UNPREDICTABLE 00215550
- * 00215700
- * +16 'NXTCCW' (CCW DATA AREA IS IN A SHARED PAGE) 00215850
- * REGISTER OUTPUT: 00216000
- * GPR 4 = ADDRESS OF RCWTASK 00216150
- * GPR 6 = NUMBER OF CCW'S LEFT TO UNTRANSLATE 00216300
- * GPR 7 = ADDRESS OF THE CURRENT CCW 00216450
- * GPR 9 = 'DMKPTRRM' - THE REAL MACHINE STORAGE SIZE 00216600
- * GPR 14-15 = UNPREDICTABLE 00216750
- * 00216900
- * +20 'PTRUL1' (CP ASSIST "PTRUL" DETECTED ABEND CONDITION) 00217050
- * REGISTER OUTPUT: 00217200
- * GPR 2 = CURRENT DATA ADDRESS THAT COULDN'T BE UNLOCKED 00217350
- * GPR 4 = ADDRESS OF RCWTASK 00217500
- * GPR 5 = SAME VALUE AS THAT OF GPR 2 00217650
- * GPR 6 = NUMBER OF CCW'S LEFT TO UNTRANSLATE 00217800
- * GPR 7 = ADDRESS OF THE CURRENT CCW 00217950
- * GPR 9 = 'DMKPTRRM' - THE REAL MACHINE STORAGE SIZE 00218100
- * GPR 14-15 = UNPREDICTABLE 00218250
- * 00218400
- * +24 'ITSAREL' (VIRTUAL RESERVE/RELEASE DETECTED) 00218410
- * REGISTER OUTPUT: 00218420
- * GPR 0 = UNPREDICTABLE 00218430
- * GPR 1 = UNPREDICTABLE 00218440
- * GPR 4 = UNPREDICTABLE 00218450
- * GPR 6 = UNPREDICTABLE 00218460
- * GPR 9 = 'DMKPTRRM' - THE REAL MACHINE STORAGE SIZE 00218470
- * GPR 14-15 = UNPREDICTABLE 00218480
- * 00218490
- * 00218500
- * EXIT TO CALLER: (FULL COMPLETION EXIT VIA CP ASSIST "RETURN") 00218550
- * REGISTER OUTPUT: 00218700
- * GPR 14-15 = UNPREDICTABLE 00218850
- * 00219000
- *********************************************************************** 00219150
- *. 00219300
- SPACE 00219450
- DMKUNTFR DS 0D ENTER "FREECCW" @V3M4038 00219600
- SPACE 00219750
- DS 0H EXECUTE CP ASSIST "UNTFR" @V3M4038 00219900
- DC X'E605',S(DMKUNTF1,DMKUNTF2) ***@V3M4038 00220050
- SPACE 00220200
- STM R0,R11,SAVEREGS SAVE REGS R0 THRU R11 %V3M4038 00220350
- L R9,=A(DMKSYSRM) GET REAL MACHINE STORAGE SIZE %V3M4038 00220500
- L R9,0(,R9) KEEP IN R9 FOR HANDY REFERENCE %V3M4038 00220650
- L R4,IOBCAW GET ADDRESS OF THE FIRST RCWTASK %V3M4038 00220800
- LA R4,0(,R4) STRIP POSSIBLE HIGH ORDER KEY %V3M4038 00220950
- SL R4,F16 BACK OFF 16 TO 1ST HEADER START %V3M4038 00221100
- NXTFRET EQU * HANDLE NEXT CCW LIST: %V3M4038 00221250
- LA R7,16(,R4) POINT R7 TO 1ST CCW IN TASK %V3M4038 00221400
- LH R6,RCWRCNT %V3M4038 00221550
- LTR R6,R6 DON'T GET INTO 'BCT' TROUBLE... %V3M4038 00221700
- BNP FRETRCW ...GLAD WE CHECKED %V3M4038 00221850
- SPACE 00222000
- NXTCCW TM RCWCTL,RCWIO+RCWSHR LOCKED OR 'SHARED' PAGE ? %V3M4038 00222150
- BZ INCR8 NOPE - JUST ADVANCE TO NEXT CCW %V3M4038 00222300
- L R5,RCWADDR YES, GET DATA ADDRESS IN THE CCW %V3M4038 00222450
- TM RCWFLAG,IDA DOES RCCW HAVE IDA ON ? %V3M4038 00222600
- BO IDASET YES - HANDLE VARIOUS SITUATIONS. %V3M4038 00222750
- LA R2,0(,R5) DATA ADDR INTO R2 (MINUS BYTE 0) %V3M4038 00222900
- TM RCWCTL,RCWIO WAS PAGE LOCKED ? %V3M4038 00223050
- BO PTRUL1 IF YES UNLOCK IT. %V3M4038 00223200
- ST R7,SAVEWRK9 SAVE THIS REGISTER @V304735 00228000
- LR R7,R2 CHANGE REGISTERS FOR DMKPTRFT @V304735 00229000
- N R7,XPAGNUM DROP OFF DISPLACEMENT @V304735 00230000
- SRL R7,8 LEAVE INDEX INTO CORTABLE @V304735 00231000
- AL R7,ACORETBL GET THE PROPER TABLE ENTRY @V304735 00232000
- XC CORPGPNT-CORTABLE(4,R7),CORPGPNT-CORTABLE(R7) @V304735 00233000
- CALL DMKPTRFT PUT THIS PAGE ON THE FREE-LIST @V304735 00234000
- L R7,SAVEWRK9 RESTORE R7 @V304735 00235000
- B INCR8 GET THE NEXT REAL CCW @V304735 00236000
- PTRUL1 CALL DMKPTRUL UNLOCK THIS PAGE %V3M4038 00237000
- INCR8 LA R7,8(,R7) ADVANCE TO NEXT REAL CCW %V3M4038 00238000
- BCT R6,NXTCCW AND ITERATE THRU CCW-CHAIN. %V3M4038 00239000
- B FRETRCW GO RELEASE THE RCWTASK WHEN THRU %V3M4038 00240000
- SPACE 00241000
- IDASET SLR R1,R1 RCWIO AND REAL IDA FLAGS SET: %V3M4038 00242000
- * (NOTE: THE 1ST IDAW IS KNOWN TO BE OK) 00243000
- ICM R1,3,RCWCNT GET THE REAL COUNT %V3M4038 00244000
- BCTR R1,0 LESS ONE, PLEASE %V3M4038 00245000
- L R14,0(,R5) GET 1ST IDAW = STARTING ADDRESS %V3M4038 00246000
- LR R15,R14 ALSO IN R15 %V3M4038 00247000
- IC R0,RCWCOMND IS THE CCW A READ-BACKWARD TYPE? %V3M4038 00248000
- N R0,F15 ... %V3M4038 00249000
- CH R0,=H'12' ... %V3M4038 00250000
- BNE IDLFWD NOT TODAY. %V3M4038 00251000
- SR R14,R1 DEC. START ADDR IF BACKWARD READ %V3M4038 00252000
- B IDLCHK FIND HOW MANY HALF-PAGES CROSSED %V3M4038 00253000
- IDLFWD AR R15,R1 SUM TO GIVE LAST ADDR %V3M4038 00254000
- SPACE 00255000
- IDLCHK SRA R14,11 DIVIDE BOTH BY 2048.. %V3M4038 00256000
- SRA R15,11 TO YIELD START & END PAGE ADDR %V3M4038 00257000
- SR R15,R14 DIFF = NO. OF "PAGE" CROSSOVERS %V3M4038 00258000
- LA R0,1(,R15) +1 = NO. OF HALF-PAGES TO UNLOCK %V3M4038 00259000
- TM RCWCTL,RCWHMR+RCW2311 ANY UN-RELOCATING TO DO? %V3M4038 00260000
- BNZ UNREL YES - "DO WHAT'S BEST" FIRST. %V3M4038 00261000
- * 00262000
- * LOOP TO UNLOCK DATA PAGES GIVEN BY IDAWS IN REAL IDAL: 00263000
- * R0 = NUMBER OF HALF-PAGES TO BE UNLOCKED 00264000
- * R5 = ADDRESS OF "NEXT" (OR FIRST) IDAW: 00265000
- * 00266000
- UNLOCK DS 0H @VA12570 00267200
- L R11,SAVER11 BE SURE IT POINTS TO VMBLOK @VA12570 00267400
- L R2,0(,R5) GET THE REAL DATA PAGE ADDRESS @VA12570 00267600
- CLR R2,R9 ADDRESS WITHIN THE REAL MACHINE? %V3M4038 00268000
- BNL INCR8 NO, THEN FINISHED WITH THIS CCW %V3M4038 00269000
- TM RCWCTL,RCWIO WAS PAGE LOCKED ? %V3M4038 00270000
- BO PTRUL2 IF YES UNLOCK IT. %V3M4038 00271000
- ST R7,SAVEWRK9 SAVE THIS REGISTER @V304735 00272000
- LR R7,R2 CHANGE REGISTERS FOR DMKPTRFT @V304735 00273000
- N R7,XPAGNUM DROP OFF DISPLACEMENT @V304735 00274000
- SRL R7,8 LEAVE INDEX INTO CORTABLE @V304735 00275000
- AL R7,ACORETBL GET THE PROPER TABLE ENTRY @V304735 00276000
- CLC CORPGPNT-CORTABLE(4,R7),F0 HAS PAGE BEEN @V304735 00277000
- * RELEASED ? 00278000
- BE NOPTRFT IF YES - DON'T CALL DMKPTRFT @V304735 00279000
- XC CORPGPNT-CORTABLE(4,R7),CORPGPNT-CORTABLE(R7) @V304735 00280000
- CALL DMKPTRFT PUT THIS PAGE ON THE FREE-LIST @V304735 00281000
- NOPTRFT L R7,SAVEWRK9 RESTORE R7 @V304735 00282000
- B NXTIDA GET THE NEXT IDA WORD @V304735 00283000
- PTRUL2 CALL DMKPTRUL UNLOCK THIS PAGE %V3M4038 00283450
- NXTIDA DS 0H PROCESS NEXT IDA WORD %V3M4038 00283900
- LA R5,4(,R5) ADVANCE TO THE NEXT IDAW %V3M4038 00284350
- BCT R0,UNLOCK LOOP THRU ALL IDAW IN THE IDAL %V3M4038 00284800
- LA R7,8(,R7) ADVANCE TO THE NEXT REAL CCW %V3M4038 00285250
- BCT R6,NXTCCW ITERATE THRU CCW-CHAIN. %V3M4038 00285700
- FRETRCW EQU * RELEASE REAL CCW PACKAGE %V3M4038 00286150
- LH R0,RCWCCNT TOTAL WORD-COUNT INTO R0, %V3M4038 00286600
- LR R1,R4 - PUT START ADDR IN R1 %V3M4038 00287050
- L R4,RCWPNT - PICK UP NEXT RCCWLST %V3M4038 00287500
- UNTFRET CALL DMKFRET - FREE THE RCCWLST STORAGE %V3M4038 00287950
- LTR R4,R4 - TEST IF NEXT ADDR IS ZERO %V3M4038 00288400
- BNZ NXTFRET - KEEP AT WORK IF NOT. %V3M4038 00288850
- ST R4,IOBCAW ZERO IOBCAW AFTER STORAGE FREED %V3M4038 00289300
- * IOBUNREL IS ONLY SET FOR MINIDISKS WITH VIRT RES/REL FEATURE 00289775
- TM IOBSPEC2,IOBUNREL WAS THERE A RELEASE IN CHAIN %V407438 00289800
- BZ UNTFRXIT NOPE, DONE, BR. %V407438 00289825
- TM IOBSPEC2,IOBCLN DOING CLEANUP JOB FOR DMKCCW %V407438 00289850
- BO UNTFRXIT YES, THEN DON'T RELEASE MDISK %V407438 00289875
- ITSAREL DS 0H @V4M0156 00289885
- L R2,VDEVRRB GET THE ADDRESS OF THE VRRBLOK @V407438 00289900
- USING VRRBLOK,R2 ADDRESS THE VRRBLOK @V407438 00289925
- NI VDEVFLG2,X'FF'-VDEVRES VIRT DEV NO LONGER RESV @V407438 00289950
- NI VRRSTAT,X'FF'-VRRRES DITTO @V407438 00289975
- NXTCPEX L R1,VRRCPEX GET FIRST/NEXT CPEXBLOK WAITING @V407438 00290000
- LTR R1,R1 IS ANYONE WAITING FOR THE MDISK? @V407438 00290025
- BZ NXTDE NOPE, GO TRY DEVICE END INTS @V407438 00290050
- USING CPEXBLOK,R1 ADDRESS THE CPEXBLOK @V407438 00290075
- L R0,CPEXFPNT GET THE ADDRESS OF THE NEXT ONE @V407438 00290100
- ST R0,VRRCPEX AND MAKE IT FIRST ON CHAIN @V407438 00290125
- CALL DMKSTKCP STACK THE UNCHAINED CPEXBLOK @V407438 00290150
- B NXTCPEX CONTINUE UNTIL ALL UNSTACKED @V407438 00290175
- DROP R1 NO MORE CPEXBLOK @V407438 00290200
- SPACE 00290225
- NXTDE L R8,VDEVLINK GET NEXT VDEVBLOK USING THIS MDSK@V407438 00290250
- CL R8,SAVER8 SAME ONE WE ENTERED ON? @V407438 00290275
- BE UNTFRXIT YUP, WERE DONE, BR. @V407438 00290300
- TM VDEVFLG2,VDEVODE DO WE OWE THIS VDEV A DE INT @V407438 00290325
- BZ NXTDE NOPE, LOOK THROUGH ALL VDEVBLOKS @V407438 00290350
- NI VDEVFLG2,X'FF'-VDEVODE WE DON'T OWE IT ANYMORE @V407438 00290375
- LA R0,IOBSIZE GET AN IOBLOK @V407438 00290400
- CALL DMKFREE FROM FREE STORAGE @V407438 00290425
- LR R10,R1 NORMAL ADDRESSABILITY PLEASE @V407438 00290450
- XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR OUT THE BLOCK @V407438 00290475
- ST R1,IOBLINK AS THOUGH IT CAME FROM IOS @V407438 00290500
- MVI IOBCSW+4,DE ENDING STATUS = DEVICE END @V407438 00290525
- L R0,VDEVUSER GET THE VMBLOK FOR THE VDEVBLOK @V407438 00290550
- ST R0,IOBUSER SAVE IT IN THE IOB @V407438 00290575
- L R0,=A(DMKVIOIN) ADDRESS OF THE INT. HANDLER @V407438 00290600
- ST R0,IOBIRA THATS WHERE WE WANT IT TO GO @V407438 00290625
- L R11,VDEVUSER GET VMBLOK FOR SCN AND IOB @V407438 00290650
- ST R11,IOBUSER IOB BELONGS TO DE RECEIVER @V407438 00290675
- CALL DMKSCNVD GET THE VIRTUAL CCU PLEASE @V407438 00290700
- L R11,SAVER11 RESTORE CALLERS R11 @V407438 00290725
- STH R1,IOBVADD PUT CCU IN THE IOB TOO. @V407438 00290750
- CALL DMKSTKIO THAT SHOULD DO IT... @V407438 00290775
- B NXTDE CONTINUE WITH THE NEXT NOW. @V407438 00290800
- SPACE 00290825
- UNTFRXIT EXIT EXIT TO CALLER WHEN ALL DONE %V407438 00290850
- SPACE 3 00290875
- * THE FOLLOWING TWO DATA LISTS MUST BE KEPT CONTIGUOUS AND IN ORDER 00290900
- * BECAUSE THEY ARE USED BY THE CP ASSIST INSTRUCTION "UNTFR". 00290925
- SPACE 2 00291550
- DMKUNTF1 DS 0F "UNTFR" ASSIST DATA LIST @V3M4026 00292000
- SPACE , 00292450
- * NOTE: THE SECOND WORD IN THIS LIST WILL BE INCREMENTED BY 00292520
- * 4 BY DMKCPI DURING IPL IF THIS CPU HAS ASSIST LEVEL 00292590
- * 18 OR 19. THIS WILL ALLOW USE OF THE "OLD" FRET 00292660
- * ASSIST. 00292730
- SPACE , 00292800
- DC V(DMKPTRPL) +0 FOR USE BY "PTRUL" ASSIST @V3M4026 00292900
- DC V(DMKFREMX) +4 FOR USE BY "FRET" ASSIST @VA14280 00293351
- DC V(DMKFRETL) +8 MORE DATA FOR "FRET" ASSIST @V3M4026 00293800
- SPACE 2 00294250
- DMKUNTF2 DS 0F "UNTFR" ASSIST EXIT LIST @V3M4026 00294700
- SPACE 00295150
- DC A(UNREL) +0 DATA NEEDS TO BE RELOCATED @V3M4026 00295600
- DC A(UNTFRET) +4 MUST DO SOFTWARE 'FRET' @V3M4026 00296050
- DC A(PTRUL2) +8 TROUBLE TRYING TO UNLOCK PAGE @V3M4026 00296500
- DC A(UNTFRXIT) +12 COULDN'T DO THE 'SVC 12' @V3M4026 00296950
- DC A(NXTCCW) +16 CCW DATA AREA IS SHARED @V3M4026 00297400
- DC A(PTRUL1) +20 COULDN'T DO UNLOCK FUNCTION @V3M4026 00297850
- DC A(ITSAREL) +24 RELEASE VIRTUAL DEVICE @V4M0156 00297860
- EJECT 00299000
- * "UN-RELOCATE" CYLINDER NUMBER OR SENSE DATA FOR READ HOME ADDRESS, 00300000
- * READ RECORD R0, OR A SENSE OF A SIMULATED 2311 OR AN EXTENDED 00301000
- * SENSE DASD DEVICE (24 SENSE BYTES), FOR EXAMPLE : 3340 OR 3350. 00302000
- * 00303000
- * NOTE REGISTER USAGE AT THIS POINT: 00304000
- * R0 = NUMBER OF IDAWS TO BE PROCESSED 00305000
- * R1 = BYTE-COUNT-LESS-1 IN THE CCW 00306000
- * R4 = ADDRESS OF RCWTASK 00307000
- * R5 = ADDRESS OF THE FIRST IDAW 00308000
- * R6 = RCWRCNT (COUNT OF REAL CCWS) 00309000
- * R7 = ADDRESS OF CURRENT REAL CCW 00310000
- * R8 = ADDRESS OF VDEVBLOK 00311000
- * R9 = REAL MACHINE SIZE 00312000
- * R10 = ADDRESS OF IOBLOK 00313000
- * R11-R13 = THE USUAL VALUES 00314000
- * 00315000
- UNREL TM IOBFLAG,IOBRES HAS IO BEEN RESET ? 00316000
- BO UNLOCK YES - NO VIRTUAL DEVICE EXISTS 00317000
- TM IOBSTAT,IOBCC3 OR NONZERO CONDITION-CODE ? 00318000
- BNZ UNLOCK YES - LEAVE MEMORY ALONE. 00319000
- SLR R2,R2 OK SO FAR, CLEAR R2 (FOR ICM USE) 00320000
- LA R15,RCWCCW+8 POINT TO END OF THE CCW 00321000
- CLM R15,7,IOBCSW+1 PERCHANCE MATCHES THE REAL CSW ADDRESS ? 00322000
- BNE UNREL1 NOPE - DIDN'T TERMINATE ON THIS CCW. 00323000
- TM IOBCSW+4,UC IF YES, WAS THERE A UNIT CHECK ? 00324000
- BO UNLOCK YES - LEAVE IT ALONE. 00325000
- TM IOBCSW+5,PRGC+PRTC+CDC+CCC+IFCC+CHC BAD CHANNEL ERROR ? 00326000
- BNZ UNLOCK YES - LEAVE IT ALONE. 00327000
- ICM R2,3,IOBCSW+6 GET RESIDUAL COUNT FROM CSW 00328000
- SR R1,R2 COMPUTE EFFECTIVE NO. OF BYTES (LESS 1) 00329000
- BM UNLOCK IF BYTE COUNT NOT AT LEAST 1, FORGET IT 00330000
- BAL R14,UNRELSUB COMPUTE ADD'TL BYTE COUNT & SAVE DATA ETC 00331000
- B UNREL4 AND NOW GO UN-RELOCATE THE DATA. 00332000
- SPACE 00333000
- * END OF CCW DOESN'T MATCH ADDRESS IN IOBCSW - CHECK WHETHER THE DATA 00334000
- * SAVED AFTER THE IDAWS BY DMKCCWTR HAS CHANGED OR NOT: 00335000
- * IF IT HAS CHANGED, ASSUME THAT THE CCW WAS EXECUTED; 00336000
- * IF IT HAS NOT CHANGED, ASSUME THE CCW WAS NOT EXECUTED: 00337000
- * 00338000
- UNREL1 TM RCWFLAG,CD CHAIN-DATA PERCHANCE SET ? 00339000
- BZ UNREL3 NOPE (WHEW). 00340000
- * 00341000
- DROP R7 00342000
- LA R3,8(,R7) POINT AT NEXT CCW TO ACCUMULATE COUNT 00343000
- USING RCWCCW,R3 00344000
- UNREL2 TM RCWFLAG,SKIP SKIP FLAG SET ? 00345000
- BO UNREL3 YES - FORGET IT (NO GAMES PLEASE). 00346000
- ICM R2,3,RCWCNT NO, GET BYTE-COUNT FROM CHAINED-TO CCW 00347000
- AR R1,R2 COMPUTE ACCUMULATED BYTE-COUNT 00348000
- TM RCWFLAG,CD CHAIN DATA SET IN THIS ONE TOO ? 00349000
- BZ UNREL3 NOPE - WE'RE DONE. 00350000
- LA R3,8(,R3) YES - ADVANCE TO NEXT CCW, 00351000
- CLM R3,7,IOBCSW+1 IS THAT THE ENDING CCW ? 00352000
- BNE UNREL2 NOPE - KEEP GOING, MEN. 00353000
- ICM R2,3,IOBCSW+6 YES, PICK UP RESIDUAL COUNT (IF ANY) 00354000
- SR R1,R2 AND SUBTRACT FROM ACCUMULATED COUNT 00355000
- DROP R3 RESTORE NORMAL USAGE 00356000
- USING RCWCCW,R7 ... 00357000
- * 00358000
- UNREL3 BAL R14,UNRELSUB COMPUTE ADD'TL BYTE COUNT & SAVE DATA ETC 00359000
- LR R3,R0 GET THE NUMBER OF IDAWS 00360000
- ALR R3,R3 TIMES 4 PLEASE 00361000
- ALR R3,R3 ... 00362000
- ALR R3,R5 PLUS ADDRESS OF THE 1ST IDAW 00363000
- CLC 0(8,R3),SAVEWRK6 DID THE USER'S DATA CHANGE ? 00364000
- BE UNLOCK NO - FORGET THE WHOLE THING. 00365000
- * 00366000
- UNREL4 DS 0H DATA WAS READ IN; NOW UN-RELOCATE SAME: 00367000
- IC R0,RCWCOMND GET CCW OP-CODE 00368000
- N R0,F15 ISOLATE LOW-ORDER 4 BITS 00369000
- CL R0,F4 IS IT A SENSE COMMAND (OR EQUIVALENT) ? 00370000
- BNE SETRHA IF NOT, SET R5 FOR READ HOME ADDRESS 00371000
- * 00372000
- LA R0,1 BYTE-COUNT 00373000
- A R0,SAVEWRK2 INTO R0, 00374000
- LA R1,SAVEWRK6 LET R1 POINT TO DATA IN SAVE-AREA 00375000
- LA R15,DMKUNTRS SET R15 FOR ADDRESSABILITY NEEDS 00376000
- BAL R2,UNTRSREL CALL INTERNAL SUBR TO RELOCATE SENSE DATA 00377000
- UNREL5 L R5,RCWADDR RESTORE R5 (IN CASE LOST) 00378000
- LA R3,SAVEWRK6 LET R3 POINT TO SAVEWRK6 AREA 00379000
- LM R0,R1,SAVEWRK3 RESTORE R0 AND THE FIRST BYTE COUNT 00380000
- L R2,0(,R5) LET R2 POINT TO THE FIRST DATA-AREA 00381000
- BAL R14,CHKPKEY CHECK FOR POSSIBLE PROTECTION VIOLATION 00382000
- BNZ UNREL6 CC NONZERO - LEAVE WELL ENOUGH ALONE 00383000
- LR R15,R2 CC ZERO, SET R15, AND ... 00384000
- EX R1,UNRELMVC MOVE 1ST CHUNK OF DATA BACK AGAIN 00385000
- UNREL6 LA R3,1(R3,R1) BUMP R3 FOR THE NEXT CHUNK (IF ANY) 00386000
- L R1,SAVEWRK5 GET THE SECOND COUNT LESS ONE 00387000
- LTR R1,R1 ANY MORE DATA ? 00388000
- BM UNLOCK NOPE - WE'RE ALL SET. 00389000
- L R2,4(,R5) GET SECOND ADDRESS 00390000
- CLR R2,R9 IN STORAGE ? 00391000
- BNL UNLOCK NO - FORGET IT. 00392000
- BAL R14,CHKPKEY CHECK FOR POSSIBLE PROTECTION VIOLATION 00393000
- BNZ UNLOCK CC NONZERO - LEAVE WELL ENOUGH ALONE 00394000
- LR R15,R2 CC ZERO, SET R15, AND ... 00395000
- EX R1,UNRELMVC OK - MOVE 2ND CHUNK OF DATA BACK AGAIN 00396000
- B UNLOCK AND GO UNLOCK THE PAGES (WHEW). 00397000
- * 00398000
- SETRHA MVI SAVEWRK1,00 CLEAR FLAG USED BELOW, 00399000
- LH R14,VDEVRELN CYLINDER RELOCATION FACTOR INTO R14 00400000
- SLR R15,R15 CLEAR R15 (FOR "ICM" USE) 00401000
- LA R5,1 SET R5 TO UNRELOCATE 2ND & 3RD BYTES 00402000
- TM RCWCOMND,X'1A' WAS IT A READ HOME ADDRESS (1A/9A) ? 00403000
- BO CFCNT IF YES, R5=1 IS CORRECT (2ND & 3RD BYTES) 00404000
- SLR R5,R5 NO, SET R5=0 FOR THE FIRST TWO BYTES 00405000
- CFCNT C R5,SAVEWRK2 CYL OR HEAD INCLUDED YET ? 00406000
- BNL UNREL5 NO - FORGET IT - FINISH UP. 00407000
- LA R3,SAVEWRK6 GET DATA ADDRESS 00408000
- ALR R3,R5 ADD DISPLACEMENT (FOR CC OR HH BYTES) 00409000
- ICM R15,3,0(R3) GET CYLINDER OR HEAD TO R15 00410000
- CLI VDEVTYPE,TYP3340 IS IS A 334X? @V56BDA8 00410050
- BNE NOT3340C NO, NORMAL PATH @V56BDA8 00410100
- CH R15,=H'696' IS IT AN ALTERNATE? @V56BDA8 00410150
- BNL UNREL5 YES, DONT UNRELOCATE @V56BDA8 00410200
- L R1,VDEVREAL -->RDEVBLOK @V56BDA8 00410250
- TM RDEVFTR-RDEVBLOK(R1),FTR35MB SMALL DISK? @V56BDA8 00410300
- BZ NOT3340C NO, UNRELOCATE @V56BDA8 00410350
- CH R15,=H'348' 35MB ALTERNATE? @V56BDA8 00410400
- BE UNREL5 YES, DONT UNRELOCATE @V56BDA8 00410450
- NOT3340C EQU * @V56BDA8 00410500
- SR R15,R14 RELOCATE 00411000
- * IF MINUS DONT STORE BACK 00412000
- * MAY BE TRYING TO RELOCATE DATA NOT HA 00413000
- * HAPPENS IF DATA READ ON TOP OF HA DATA 00414000
- BM UNREL5 IF MINUS DON'T STORE ANYTHING - FINISH UP 00415000
- STCM R15,3,0(R3) ...AND STORE IT BACK 00416000
- TM VDEVFLAG,VDEV231B BOTTOM HALF OF SIMULATED 2311 ? 00417000
- BZ UNREL5 IF NOT, FORGET IT (FINISH UP). 00418000
- TM SAVEWRK1,X'01' CYL +&HEAD BOTH RELOCATED? 00419000
- BO UNREL5 YES - FINISH UP. 00420000
- LA R5,2(,R5) SET DISPLACEMENT FOR HEAD 00421000
- LA R14,10 SET R14 TO UN-RELOCATE HEAD NUMBER, 00422000
- OI SAVEWRK1,X'01' SET FLAG-BIT 00423000
- B CFCNT 00424000
- SPACE 00425000
- UNRELSUB SLR R2,R2 R2=0 MEANS NO HALF-PAGES CROSSED BY DATA 00426000
- CL R1,F7 BYTE-COUNT-LESS-1 EXCEEDS 7 ? 00427000
- BNH UNRELSB1 NOPE 00428000
- LA R1,7 YES - LIMIT TO 7 00429000
- UNRELSB1 ST R1,SAVEWRK2 REMEMBER THIS COUNT 00430000
- LA R15,2047 NOW COMPUTE END OF HALF-PAGE 00431000
- O R15,0(,R5) ... 00432000
- SL R15,0(,R5) NO. OF BYTES LESS 1 IN THIS HALF-PAGE 00433000
- CLR R15,R1 COMPARE WITH ACTUAL COUNT-LESS-1 00434000
- BNL UNRELSB3 IT'S OK - NO BOUNDARY IS CROSSED 00435000
- CL R0,F1 BEWARE OF POSSIBLE CASE OF JUST ONE IDAW 00436000
- BE UNRELSB2 IF YES, ADJUST R1 BUT LEAVE R2=0. 00437000
- LR R2,R1 TOTAL COUNT (LESS 1) INTO R2 BRIEFLY 00438000
- SR R2,R15 NEW COUNT (> 0) FOR THE NEXT PAGE 00439000
- UNRELSB2 LR R1,R15 NEW COUNT (LESS 1) FOR THE 1ST PAGE 00440000
- UNRELSB3 MVC SAVEWRK6(8),ZEROES CLEAR DBL-WORD AT SAVEWRK6 00441000
- LA R15,SAVEWRK6 LET R15 POINT TO SAVEWRK6 AREA 00442000
- L R3,0(,R5) ADDRESS OF 1ST DATA AREA 00443000
- EX R1,UNRELMVC MOVE 1ST FEW BYTES TO SAVEWRK6 AREA 00444000
- S R2,F1 DECREMENT 2ND COUNT (IF ANY) FOR "EX" USE 00445000
- STM R0,R2,SAVEWRK3 REMEMBER R0 AND THESE TWO COUNTS 00446000
- BCR 4,R14 <BM> IF MINUS RETURN TO CALLER - WE'RE DONE 00447000
- LA R15,1(R15,R1) BUMP R15 FOR NO. OF BYTES OBTAINED 00448000
- L R3,4(,R5) ADDRESS OF 2ND DATA AREA 00449000
- CLR R3,R9 IN REAL MACHINE STORAGE ? 00450000
- BCR 11,R14 <BNL> NO - RETURN TO CALLER. 00451000
- EX R2,UNRELMVC OK - MOVE 2ND BATCH OF BYTES TO SAVEWRK6 00452000
- BR R14 AND RETURN. 00453000
- * 00454000
- UNRELMVC MVC 0(*-*,R15),0(R3) TO MOVE USER DATA TO/FROM SAVEWRK6 AREA 00455000
- EJECT 00456000
- * "CHKPKEY" = SUBROUTINE TO DETERMINE IF SENSE-BYTES OR THE LIKE 00457000
- * CAN BE STORED IN USER'S MEMORY (GIVEN BY REAL ADDRESS FROM A CCW) 00458000
- * AT ENTRY: 00459000
- * GPR 2 = REAL DATA ADDRESS 00460000
- * GPR 14 = RETURN ADDRESS 00461000
- * AT EXIT: 00462000
- * CONDITION CODE 0 = OK TO STORE DATA IN USER'S MEMORY. 00463000
- * CONDITION CODE NONZERO = DO NOT STORE DATA THEREIN. 00464000
- * 00465000
- * NOTE: CODE IS FUNCTIONALLY IDENTICAL TO "CHKPKEY" IN "DMKVCA". 00466000
- * 00467000
- CHKPKEY EQU * CHECK FOR PROTECTION VIOLATION: 00468000
- CLI IOBCAW,X'00' IF HIS CAW KEY IS ZERO... 00469000
- BCR 8,R14 <BE> ... HE CAN STORE ANYWHERE 00470000
- L R15,X2048BND ALIGNMENT MASK 00471000
- NR R15,R2 REAL ADDRESS IS IN GR 2 00472000
- ISK R15,R15 GET REAL STORAGE KEY 00473000
- N R15,F240 REDUCE TO FOUR BIT KEY 00474000
- CLM R15,1,IOBCAW TEST FOR KEY MATCH 00475000
- BR R14 AND RETURN WITH CONDITION CODE SET. 00476000
- SPACE 00477000
- DROP R10,R12 00478000
- EJECT 00479000
- *. 00480000
- * SUBROUTINE NAME - 00481000
- * 00482000
- * DMKUNTRS - RELOCATE SENSE BYTE DATA 00483000
- * 00484000
- * FUNCTION - 00485000
- * 00486000
- * FOR 3330/3340/3350/2305 COMPUTE THE VIRTUAL CYLINDER NUMBER IN 00487000
- * BYTES 5 AND 6 OF THE SENSE BYTE DATA, BY UNRELOCATING THE REAL 00488000
- * CYLINDER NUMBER GIVEN BY THE HARDWARE. 00489000
- * OR: 00490000
- * FOR A PSEUDO 2311 SIMULATED ON A 2314/2319, TO COMPUTE THE 00491000
- * APPROPRIATE STATUS FOR BYTE 3 OF THE SENSE BYTE DATA FROM 00492000
- * THE REAL SENSE DATA GIVEN BY THE HARDWARE. 00493000
- * 00494000
- * ATTRIBUTES - 00495000
- * 00496000
- * REENTRANT, RESIDENT, CALLED VIA BALR 00497000
- * 00498000
- * ENTRY POINT - 00499000
- * 00500000
- * DMKUNTRS 00501000
- * 00502000
- * ENTRY CONDITIONS - 00503000
- * 00504000
- * GPR 2 = ADDRESS OF IOERBLOK CONTINAING SENSE BYTE DATA 00505000
- * GPR 8 = ADDRESS OF VDEVBLOK 00506000
- * GPR 14 = RETURN ADDRESS 00507000
- * GPR 15 = ADDRESS OF DMKUNTRS 00508000
- * 00509000
- * EXIT CONDITIONS - 00510000
- * 00511000
- * APPROPRIATE VIRTUAL SENSE BYTE DATA HAS BEEN 00512000
- * COMPUTED AND STORED IN THE IOERBLOK SENSE DATA; 00513000
- * AND A FLAG-BIT IS SET INDICATING IT HAS BEEN DONE. 00514000
- * 00515000
- * CALLS TO OTHER ROUTINES - 00516000
- * 00517000
- * NONE 00518000
- * 00519000
- * EXTERNAL REFERENCES - 00520000
- * 00521000
- * NONE 00522000
- * 00523000
- * TABLES / WORK AREAS - 00524000
- * 00525000
- * BALRSAVE USED TO SAVE NEEDED REGISTERS 00526000
- EJECT 00527000
- * REGISTER USAGE - 00528000
- * 00529000
- * GPR 0-2 = WORK REGISTERS 00530000
- * GPR 8 = ADDRESS OF VDEVBLOK 00531000
- * GPR 11 = ADDRESS OF USER'S VMBLOK 00532000
- * GPR 14 = RETURN REGISTER 00533000
- * GPR 15 = ADDRESSABILITY 00534000
- * 00535000
- * OTHER REGISTERS ARE NOT USED 00536000
- * 00537000
- * NOTES - 00538000
- * 00539000
- * NONE 00540000
- * 00541000
- * OPERATION - 00542000
- * 00543000
- * 1. CHECKS IF FLAGBIT (IOERCYLR IN IOERFLG2) IN IOERBLOK 00544000
- * IS ALREADY SET (EXIT IMMEDIATELY IF YES). IF NOT, SETS 00545000
- * THE FLAG INDICATING THE SENSE DATA HAS BEEN ADJUSTED. 00546000
- * 00547000
- * 2. SAVES REGISTERS 0-2 (IN BALRSAVE); POINTS TO IOERDATA SENSE 00548000
- * DATA IN IOERBLOK, INDICATES THAT AT LEAST 7 SENSE BYTES ARE 00549000
- * AVAILABLE, AND CALLS 'UNTRSREL' INTERNAL SUBROUTINE (VIA 00550000
- * GPR 2) TO ADJUST THE SENSE BYTES (SEE STEP 3 ETC). THEN 00551000
- * RESTORES REGISTERS 0-2 AND RETURNS TO CALLER VIA GPR 14. 00552000
- * 00553000
- * 3. UNTRSREL SUBROUTINE (CALLED BY EITHER DMKUNTFR OR DMKUNTRS) 00554000
- * CHECK WHETHER DEVICE IS 3330/3340/3350/2305 (STEP 4) OR 00555000
- * PSEUDO 2311 (STEP 5). 00556000
- * 00557000
- * 4. FOR 3330/3340/3350/2305, CHECKS BYTE COUNT; IF LESS THAN 7, 00558000
- * EXITS IMMEDIATELY TO CALLER. IF AT LEAST 7 SENSE BYTES 00559000
- * ARE AVAILABLE, OBTAINS CYLINDER NUMBER FROM BYTES 5 AND 00560000
- * 6 OF THE REAL SENSE DATA, SUBTRACTS THE VIRTUAL RELOCATION 00561000
- * FACTOR, AND STORES THE RESULTANT VIRTUAL CYLINDER NUMBER 00562000
- * IN BYTES 5 AND 6 OF THE SENSE DATA. 00563000
- * 00564000
- * 5. FOR A PSEUDO 2311 SIMULATED ON A 2314/2319, CHECKS THE 00565000
- * BYTE COUNT; IF LESS THAN 4, EXITS IMMEDIATELY TO CALLER. 00566000
- * IF AT LEAST 4, COMPUTES AND STORES THE APPROPRIATE SENSE 00567000
- * DATA (E.G. READY ETC.) FOR SENSE BYTE 3 FROM THE REAL 00568000
- * 2314/2319 SENSE BYTE. 00569000
- *. 00570000
- USING DMKUNTRS,R15 NOTE R15 ADDRESSABILITY REQUIREMENT 00571000
- DMKUNTRS DS 0H AND THAT R14 = RETURN-REGISTER 00572000
- USING IOERBLOK,R2 R2 MUST POINT TO IOERBLOK 00573000
- TM IOERFLG2,IOERCYLR HAS THE DATA ALREADY BEEN RELOCATED ? 00574000
- BCR 1,R14 <BO> YES - EXIT FORTHWITH - DON'T DO IT TWICE 00575000
- OI IOERFLG2,IOERCYLR NO - FLAG IT AS HAVING BEEN RELOCATED 00576000
- STM R0,R3,BALRSAVE SAVE THE REG WE WILL USE 00577000
- LA R1,IOERDATA POINT AT THE ACTUAL DATA 00578000
- LH R0,IOERLEN GET THE LENGTH OF THE SENSE DATA 00579000
- DROP R2 00580000
- BAL R2,UNTRSREL CALL INTERNAL SUBR TO RELOCATE SENSE DATA 00581000
- LM R0,R3,BALRSAVE RESTORE THE REGS USED 00582000
- BR R14 AND EXIT. 00583000
- * 00584000
- USING VDEVBLOK,R8 R8 MUST POINT TO VIRTUAL DEVICE BLOCK 00585000
- UNTRSREL SR R3,R3 SET UP DEVICE INDEX REG 00586000
- TM VDEVTYPE,TYP2305 2305 DEVICE TYPE ? 00587000
- BO DATA2305 YES - BRANCH @VA04740 00588500
- CLI VDEVTYPE,TYP3350 3350 DEVICE TYPE ? @V304498 00589000
- BE UNT3340 YES -- @V304498 00590000
- CLI VDEVTYPE,TYP3340 3340 DEVICE TYPE ? @V2A2029 00591000
- BE UNT3340 YES -- @V2A2029 00592000
- TM VDEVTYPE,TYP3330 3330 DEVICE TYPE ? 00593000
- BNO CHNG2311 NO- BRANCH MUST BE A 2314 00594000
- L R3,VDEVREAL POINT TO THE REAL DEVICE BLOCK 00595000
- CLI RDEVMDL-RDEVBLOK(R3),X'0B' IS IT 3330 MOD11 ? @VA07933 00595500
- BE UNT3340 YES @VA07933 00596500
- LA R3,2 SET UP FOR A STANDARD 3330 00597000
- B *+8 NOT 3330 MOD11 @VA07933 00598000
- UNT3340 LA R3,3 SHIFT NUMBER 'CYLINDER HIGH BITS'@V304498 00599000
- * FOR 3330 MOD 11/3340/3350 00600000
- TM 7(R1),X'A0' * TEST SENSE BYTE 7 BITS 0-3 @VA04633 00601100
- BNZ STEP2 * TO DECODE THE FORMAT OF @VA04633 00601600
- TM 7(R1),X'40' * SENSE BYTES 8-23; BRANCH @VA04633 00602100
- BZ STEP2 * TO STEP2 IF NOT FORMAT 4 OR 5. @VA04633 00602600
- * SENSE INFORMATION FOR 3330/3340 IS EITHER FORMAT 4 OR FORMAT 5 00603200
- DATA2305 TM 0(R1),DATACHK DATA CHECK OF SOME SORT? @VA04740 00603800
- BZ STEP1 NO - OK TO UNRELOCATE BYTES 8-9 @VA04633 00604100
- TM 2(R1),CRCTABLE "CORRECTABLE" DATA CHECK ? @VA04633 00604600
- BO STEP2 YES - LEAVE BYTES 8-9 ALONE. @VA04633 00605100
- * UNRELOCATE CYLINDER NUMBER IN BYTES 8-9 FOR 3330, 3340, AND 2305 00605800
- STEP1 CL R0,F9 MUST HAVE 9 SENSE BYTES FOR STEP1 00607000
- BL STEP2 NO- BRANCH 00608000
- CLI VDEVTYPE,TYP3340 IS THIS A 334X? @V56BDA8 00608100
- BNE NOT3340A NO, SKIP SPECIAL TEST @V56BDA8 00608150
- LA R0,MB35AD 35MB ALTERNATE CYLINDER ADDRESS @V56BDA8 00608200
- TM 2(R1),MB35 35MB 3340? @V56BDA8 00608250
- BO *+8 YES IT IS @V56BDA8 00608300
- LA R0,MB70AD ELSE USE 70MB/3344 CYLINDER @V56BDA8 00608350
- * ADDRESS 00608400
- CH R0,8(,R1) PAST PRIME CYLINDER AREA? @V56BDA8 00608450
- BNH STEP2 YES, SKIP SENSE UPDATE @V56BDA8 00608500
- NOT3340A EQU * END OF ALTERNATE TRACK TEST @V56BDA8 00608550
- LH R0,8(,R1) GET THE CYLINDER NO FROM SENSE BYTES 8-9 00609000
- SH R0,VDEVRELN RELOCATE--- 00610000
- BM NEXT AND IF VALID--- 00611000
- STH R0,8(,R1) SAVE THEM. 00612000
- B NEXT NOW DO THE HARD ONE 00613000
- STEP2 CL R0,F7 IS BYTE-COUNT (IN R0) AT LEAST 7 ? 00614000
- BCR 4,R2 <BL> IF NOT, FORGET IT - EXIT TO CALLER. 00615000
- NEXT IC R0,6(,R1) GET BYTE WITH 'CYLINDER HIGH' BIT(S) 00616000
- SLL R0,0(R3) SHIFT THE CYLINDER HIGH BITS UP @VA06155 00617100
- N R0,=A(256+512) ISOLATE CAR 256 & 512; CYL HIGH BITS 00618000
- IC R0,5(,R1) NOW ADD IN THE LOW-ORDER 8 BITS OF CYL NO 00619000
- CLI VDEVTYPE,TYP3340 IS THIS A 334X? @V56BDA8 00619100
- BNE NOT3340B NO, SKIP SPECIAL TEST @V56BDA8 00619200
- CH R0,=H'696' 70MB ALTERNATE CYLINDER ADDRESS @V56BDA8 00619300
- BNLR R2 NOT IN PRIME DATA AREA @V56BDA8 00619400
- TM 2(R1),MB35 PERHAPS 35MB MODULE? @V56BDA8 00619500
- BZ NOT3340B NO, MUST BE A PRIMARY CYLINDER @V56BDA8 00619600
- CH R0,=H'348' PAST PRIME CYLINDER AREA? @V56BDA8 00619700
- BNLR R2 YES, SKIP SENSE UPDATE @V56BDA8 00619800
- NOT3340B EQU * END OF ALTERNATE TRACK TEST @V56BDA8 00619900
- SH R0,VDEVRELN SUBTRACT THE RELOCATION FACTOR 00620000
- BCR 4,R2 <BM> IF MINUS EXIT - LEAVE DATA UNTOUCHED 00621000
- STC R0,5(,R1) STORE THE LOW ORDER 8 BITS 00622000
- NI 6(R1),X'9F' RESET 'CYLINDER HIGH' BITS IN SENSE BYTE 00623000
- N R0,=A(256+512) ISOLATE CAR 256 & 512; CYL HIGH BITS 00624000
- SRL R0,0(R3) SHIFT CYL HIGH BITS BACK DOWN @VA06155 00625100
- LR R3,R0 MOVE THE CYLINDER HIGH BITS INTO R3 00626000
- EX R3,OI AND REPLACE THEN IN SENSE BYTE 6 00627000
- BR R2 EXIT TO MAIN ROUTINE. 00628000
- SPACE 2 00629000
- OI OI 6(R1),0 REPLACE THE CYL HIGH BITS IN THE SENSE 00632000
- EJECT 00633000
- CHNG2311 DS 0H ADJUST SENSE BYTES FOR SIMULATED 2311: 00634000
- CL R0,F4 IS BYTE-COUNT (IN R0) AT LEAST 4 ? 00635000
- BCR 4,R2 <BL> IF NOT, FORGET IT - EXIT TO CALLER. 00636000
- CLI 3(R1),X'40' IS THE REAL 2314/2319 READY ? 00637000
- BNE SNSBAD NOPE - SIMULATE NOT BUSY=READY 00638000
- OI 3(R1),X'88' MAKE LIKE A 2311 00639000
- BR R2 AND EXIT TO MAIN ROUTINE. 00640000
- SNSBAD XI 3(R1),X'08' NOT BUSY=READY 00641000
- TM 3(R1),X'40' IS THE 2314/2319 ON LINE ? 00642000
- BCR 14,R2 <BNO> NOPE - EXIT TO MAIN ROUTINE. 00643000
- OI 3(R1),X'08' YES - MARK 2311 ON LINE. 00644000
- BR R2 EXIT TO MAIN ROUTINE. 00645000
- SPACE 00646000
- DROP R8,R15 00647000
- EJECT 00648000
- *. 00649000
- * SUBROUTINE NAME 00650000
- * 00651000
- * DMKUNTIS - UNDO ISAM PATCHES TO RCWTASKS 00652000
- * 00653000
- * FUNCTION - 00654000
- * 00655000
- * FIND THE RCWTASKS THAT HAVE BEEN PATCHED TO HANDLE 00656000
- * OS ISAM SELF MODIFYING SEQUENCES AND PUT THEM 00657000
- * BACK THE WAY DMKCCW HAD THEM SO THAT 00658000
- * DMKUNTRN AND DMKUNTFR DONT GET UPSET 00659000
- * 00660000
- * ATTRIBUTES - 00661000
- * 00662000
- * RE-ENTRANT, RESIDENT, ENTERED FROM DMKDSPCH BY IO STACK 00663000
- * 00664000
- * ENTRY POINT - 00665000
- * 00666000
- * DMKUNTIS 00667000
- * 00668000
- * ENTRY CONDITIONS - 00669000
- * 00670000
- * R10 - IOBLOK ADDRESSING 00671000
- * R12 - BASE (DMKUNTIS) ADDRESSING 00672000
- * 00673000
- * EXIT CONDITIONS - 00674000
- * 00675000
- * RCWTASKS RESTORED, VIRTUAL STORAGE RESTORED 00676000
- * SAVE BLOCK FRETED, IOBLOK RE-STACKED FOR NORMAL IRA 00677000
- * 00678000
- * CALLS TO OTHER ROUTINES - 00679000
- * 00680000
- * DMKFRET - FRET SAVE BLOCK 00681000
- * DMKSTKIO - STACK IOBLOK FOR NORMAL IRA 00682000
- * DMKTRKFP - CHECK FOR ALTERNATE TRACK RESTART 00682100
- * 00683000
- * EXTERNAL REFERENCES - 00684000
- * 00685000
- * NONE 00686000
- * 00687000
- * TABLES WORK AREAS - 00688000
- * 00689000
- * RCWTASK - FIND ISAM WORD FOR RESTORE 00690000
- * SAVE BLOCK - TO RESTORE DATA 00691000
- * 00692000
- * REGISTER USAGE 00693000
- * 00694000
- * R4 - RCWTASK 00695000
- * R10 - IOBLOK 00696000
- * R12 - BASE ADDRESSING ( DMKUNTIS ) 00697000
- * 00698000
- * OTHER REGISTERS ARE USED FOR WORK AND SCRATCH 00699000
- EJECT 00700000
- * NOTES - 00701000
- * 00702000
- * NONE 00703000
- * 00704000
- * OPERATION - 00705000
- * 00706000
- * 1. FIND FIRST RCWTASK FROM IOBLOK 00707000
- * 2. LOCATE ISAM WORD AT END OF RCWTASK 00708000
- * 3. IF ISAM WORD IS NON-ZERO IT POINTS TO A SAVE BLOCK 00709000
- * 4. RESTORE THE RCWTASK DATA FROM SAVE BLOCK 00710000
- * 5. RESTORE THE VIRTUAL STORAGE DATA FROM THE SAVE BLOCK 00711000
- * 6. FRET THE SAVE BLOCK 00712000
- * 7. ADJUST THE IOBCSW ADDRESS IF THE CSW ADDRESS IS 00713000
- * IN VIRTUAL STORAGE INSTEAD OF RCWTASK 00714000
- * 8. REPEAT STEPS 3-7 FOR ALL RCWTASKS 00715000
- * 9. RESTORE IOBIRA TO NORMAL RETURN ( USUALLY DMKVIONT) 00716000
- * 10. STACK IOBLOK FOR DMKDSPCH HANDLING 00717000
- * 11. GOTO DMKDSPCH 00718000
- * 00719000
- *. 00720000
- AIF (NOT &ISAM).ENDISAM 00721000
- EXTRN DMKTRKFP @V56BDA8 00722100
- USING DMKUNTIS,R12 00723000
- USING IOBLOK,R10 00724000
- ENTRY DMKUNTIS 00725000
- SPACE 2 00726000
- DMKUNTIS TM IOBSTAT,IOBALTSK ALTERNATE CYLINDER TASK? @V56BDA8 00727100
- BZ NOALTCYL NO, SKIP CALL @V56BDA8 00727200
- CALL DMKTRKFP CHECK FOR POSSIBLE RESTART @V56BDA8 00727300
- NOALTCYL L R4,IOBCAW GET RCWTASK START FROM CCW START @V56BDA8 00727400
- LA R4,0(,R4) CLEAR HI BYTE 00728000
- SL R4,F16 R4 POINTS TO RCWTASK 00729000
- * R4 NOW POINTS TO FIRST RCWTASK 00730000
- FINDISM LR R3,R4 RCWTASK ADDRESS IN R3 00731000
- LH R15,RCWCCNT GET RCWTASK SIZE 00732000
- SLL R15,3 SIZE IN BYTES 00733000
- ALR R3,R15 POINT TO END OF RCWTASK 00734000
- SL R3,F4 POINT TO ISAM WORD 00735000
- L R0,0(,R3) LOAD ISAM WORD 00736000
- LTR R0,R0 TEST FOR ISAM WORD 00737000
- BNZ UNTISAM FIX UP VIRTUAL STORAGE AND CCW'S 00738000
- NXTASK L R4,RCWPNT GET NEXT RCWTASK 00739000
- LTR R4,R4 TEST FOR END 00740000
- BNZ FINDISM GO TEST NEXT RCWTASK 00741000
- L R0,IOBMISC GET ORIGINAL IOBIRA 00742000
- ST R0,IOBIRA RESTORE IOBIRA 00743000
- OC IOBCSW(1),IOBMISC ADD USER'S CAW KEY TO CSW @VA02130 00744000
- CALL DMKSTKIO STACK FOR PROCESSING 00745000
- GOTO DMKDSPCH RETURN 00746000
- EJECT 00747000
- UNTISAM EQU * UNDO ISAM PATCHES IN CCW STRING @VA02130 00748000
- L R9,0(0,R3) ADDRESS OF THE ISMBLOK @VA02130 00749000
- USING ISMBLOK,R9 . . . @VA02130 00750000
- LM R7,R8,ISMRDAD ADDR OF OLD READ AND TIC CCW'S @VA02130 00751000
- MVC 0(8,R7),ISMREAD RESTORE TRANSLATED READ @VA02130 00752000
- MVC 0(8,R8),ISMRTIC RESTORE TRANSLATED TIC @VA02130 00753000
- L R6,0(0,R7) DATA ADDRESS FROM THE READ @VA02130 00754000
- LA R6,0(0,R6) STRIP OFF THE OP-CODE @VA02130 00755000
- TM 4(R7),IDA INDIRECT ADDRESSING USED ? @VA02130 00756000
- BO ISMIDAL YES - A LITTLE TRICKIER @VA02130 00757000
- MVC 0(10,R6),ISMRBUF MOVE DATA TO VIRTUAL STORAGE@VA02130 00758000
- B FRETISM CLEAN UP FOR THE NEXT TASK @VA02130 00759000
- SPACE 00760000
- ISMIDAL EQU * DATA IS IN TWO PIECES @VA02130 00761000
- L R5,0(0,R6) FIRST IDA WORD @VA02130 00762000
- LA R1,4095(0,R5) ROUND UP TO PAGE BOUNDARY @VA02130 00763000
- N R1,XPAGNUM . . . @VA02130 00764000
- SR R1,R5 GR1 = LENGTH IN THE FIRST PAGE @VA02130 00765000
- LR R0,R5 GR0 = DATA START IN THIS PAGE @VA02130 00766000
- LA R14,ISMRBUF START OF DATA IN REAL STORAGE @VA02130 00767000
- LA R15,10(0) LENGTH IS ALWAYS TEN @VA02130 00768000
- MVCL R0,R14 MOVE THE FIRST PIECE OF DATA @VA02130 00769000
- LR R1,R15 SET GR1 = RESIDUAL LENGTH @VA02130 00770000
- L R0,4(0,R6) ADDRESS FROM SECOND IDA WORD @VA02130 00771000
- MVCL R0,R14 MOVE THE REMAINING PIECE @VA02130 00772000
- SPACE 00773000
- FRETISM EQU * CHECK FOR CSW ADDR CONFUSION @VA02130 00774000
- LA R5,ISMNTIC POINT TO PATCHED-IN TIC CCW @VA02130 00775000
- CLM R5,7,IOBCSW+1 IS THAT WHERE WE STOPPED ? @VA02130 00776000
- BNE EXITISM NO -- NO FIXUP REQUIRED @VA02130 00777000
- L R5,ISMRTIC ADDRESS OF SEEK IN 2ND RCWTASK @VA02130 00778000
- LA R5,8(0,R5) POINT PAST IT FOR CSW ADDRESS @VA02130 00779000
- STCM R5,7,IOBCSW+1 PUT THE RIGHT ADDRESS HERE @VA02130 00780000
- EXITISM EQU * RETURN ISMBLOK TO FREE STORAGE @VA02130 00781000
- LA R0,ISMSIZE SIZE IN DOUBLE-WORDS @VA02130 00782000
- LR R1,R9 STARTING ADDRESS @VA02130 00783000
- CALL DMKFRET . . . @VA02130 00784000
- DROP R9 @VA02130 00785000
- SR R0,R0 CLEAR 00786000
- ST R0,0(,R3) CLEAR ISAM WORD 00787000
- B NXTASK LOOP FOR ALL RCWTASKS 00788000
- EJECT 00789000
- ISMBLOK DSECT , WORK AREA FOR ISAM CCW STRINGS @VA02130 00790000
- SPACE 00791000
- ISMRDAD DS 1F ADDRESS OF THE ISAM READ CCW @VA02130 00792000
- ISMTCAD DS 1F ADDRESS OF TIC TO NEXT RCWTASK @VA02130 00793000
- DS XL7 (PADDING) @VA02130 00794000
- ISMRBUF DS 1X START OF 10-BYTE READ BUFFER @VA02130 00795000
- ISMVARG DS XL8 SEEK ARGUMENTS FOR FOLLOWING CCW @VA02130 00796000
- ISMODSK DS 1D CCW WHICH WILL BE MODIFIED @VA02130 00797000
- ISMNTIC DS 1D TIC TO RE-JOIN ORIGINAL STRING @VA02130 00798000
- ISMREAD DS 1D SAVE AREA FOR ORIGINAL READ CCW @VA02130 00799000
- ISMRTIC DS 1D SAVE AREA FOR ORIGINAL TIC CCW @VA02130 00800000
- SPACE 00801000
- ISMSIZE EQU (*-ISMBLOK)/8 BLOCK SIZE IN DOUBLE-WORDS @VA02130 00802000
- SPACE 00803000
- DMKUNT CSECT , RE-ENTER PROGRAM CSECT @VA02130 00804000
- SPACE 00805000
- .ENDISAM ANOP 00806000
- SPACE 00807000
- LTORG 00808000
- SPACE 00808100
- * EQUATE(S) NOT DEFINED ELSEWHERE: 00808200
- CRCTABLE EQU X'40' "CORRECTABLE" DATA-CHECK @VA04633 00808300
- SPACE 1 00808400
- MB35AD EQU 348 3340/44 35MB ALT CYLINDER ADD @V56BDA8 00808500
- MB70AD EQU 696 3340/44 70MB ALT CYLINDER ADD @V56BDA8 00808600
- MB35 EQU X'01' 3340/44 35MB @V56BDA8 00808700
- EJECT 00809000
- COPY SAVE 00810000
- COPY VMBLOK 00811000
- COPY IOBLOKS 00812000
- COPY CORE @V304735 00813000
- COPY VBLOKS 00814000
- COPY IOER 00815000
- COPY EQU 00816000
- COPY DEVTYPES 00817000
- PSA 00818000
- COPY RBLOKS 00819000
- END 00820000
ibm/vm370-lib/cp/dmkunt.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator