PAG TITLE 'DMKPAG (CP) VM/370 - RELEASE 6' 00001000 ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000 *. 00003000 * MODULE NAME - 00004000 * 00005000 * DMKPAG 00006000 * 00007000 * FUNCTION - 00008000 * 00009000 * TO CONSTRUCT THE IOBLOKS AND SCHEDULE THE TASKS THAT MOVE 00010000 * VIRTUAL MEMORY PAGES BETWEEN AUXILIARY DASD STORAGE AND REAL 00011000 * MAIN STORAGE, AND TO CALCULATE TOTAL SYSTEM PAGING LOAD AT 00012000 * USER SPECIFIED INTERVALS 00013000 * 00014000 * ATTRIBUTES - 00015000 * 00016000 * SERIALLY REUSABLE, RESIDENT, ENTERED VIA GOTO 00017000 * 00018000 * ENTRY POINTS - 00019000 * 00020000 * DMKPAGIO - ENTERED TO START PAGING OPERATIONS 00021000 * 00022000 * ENTRY POINTS - NON-EXECUTABLE 00023000 * 00024000 * DMKPAGPS - COUNT OF PAGING SIO'S 00025000 * DMKPAGCC - COUNT OF CALLS TO THIS ROUTINE 00026000 * DMKPAGQ - ANCHOR FOR LIST OF CPEXBLOKS FOR IN-TRANSIT PAGES 00027000 * DMKPAGIC - NUMBER OF PAGING SIO'S OVER WHICH TO MEASURE LOAD 00028000 * DMKPAGQR - MAINTAIN PAGE I/O FOR QUERY PAGING COMMAND 00029000 * DMKPAGST - START OF PAGE LOAD MEASUREMENT PERIOD 00030000 * DMKPAGSP - END OF PAGE LOAD MEASUREMENT PERIOD 00031000 * DMKPAGLO - "DMKFRELO" MINUS LENGTH OF ONE PAGING IOBLOK 00032000 * DMKPAGHI - "DMKFREHI" 00033000 * DMKPAGSK - ANCHOR OF AVAILABLE PAGE I/O BLOCKS 00034000 * DMKPAGDP - FLAG FOR SETTING PCI ON ALL 2305 REQUESTS 00035000 * DMKPAGWS - SAVE AREA FOR THE PAGE WAIT TIME FOR THE ATTACHED 00036000 * PROCESSOR 00037000 * 00038000 * ENTRY CONDITIONS - 00039000 * 00040000 * THE ANCHORS DMKPTRRQ AND DMKPTRWQ ARE POINTERS TO PUSH DOWN 00041000 * STACKS OF CPEXBLOKS FOR PAGES TO BE MOVED. IN EACH CPEXBLOK 00042000 * CPEXR0+3 CONTAINS THE DASD OP-CODE FOR THE OPERATION, CPEXR5 00043000 * POINTS TO THE SWPTABLE ENTRY, CPEXR7 POINTS TO THE CORTABLE 00044000 * ENTRY, AND CPEXR11 POINTS TO THE OWNER'S VMBLOK. 00045000 * GPR12 = ADDRESS OF DMKPAGIO 00046000 * 00047000 * EXIT CONDITIONS - 00048000 * 00049000 * NONE 00050000 * 00051000 * CALLS TO OTHER ROUTINES - 00052000 * 00053000 * DMKFREE - TO OBTAIN STORAGE FOR PAGING IOBLOKS 00054000 * DMKIOSQR - TO SCHEDULE THE I/O OPERATION ON THE REAL DEVICE 00055000 * DMKDSPCH - EXIT VIA GOTO TO WAIT FOR INTERRUPTS 00056000 * DMKOPRWT - WRITE ERROR MESSAGE DMKPAG415E TO OPERATOR 00057000 * DMKCVTBH - BINARY TO HEX CONVERT ROUTINE 00058000 * DMKSTKCP - TO STACK FOR EXECUTION CPEXBLOKS QUEUED ON PAGES 00059000 * DMKFRET - TO RETURN PAGING IOBLOK IN DYNAMIC PAGING AREA 00060000 * DMKSCNRD - FIND 'CUU' DEV ADDRESS GIVEN RDEVBLOK 00061000 * 00062000 * EXTERNAL REFERENCES - 00063000 * 00064000 * DMKSYSOW - ADDRESS OF THE SYSTEM OWNED VOLUME LIST 00065000 * DMKPTRRQ - PAGE READ REQUEST QUEUE 00066000 * DMKPTRWQ - PAGE WRITE REQUEST QUEUE 00067000 * DMKPTRFF - TOTAL NUMBER OF FLUSHED PAGES 00068000 * DMKPTRSS - TOTAL NUMBER OF STOLEN PAGES 00069000 * DMKSLC - HIGH END OF V=R AREA (IF ANY) - OR 0 00070000 * 00071000 * TABLES / WORKAREAS - 00072000 * 00073000 * 1. SWPTABLE - ENTRIES CONTAIN DASD ADDRESSES FOR PAGES 00074000 * 00075000 * REGISTER USAGE - 00076000 * 00077000 * GPR0 = SCRATCH 00078000 * GPR1 = CPEXBLOK BASE 00079000 * GPR2 = SCRATCH 00080000 * GPR3 = SCRATCH 00081000 * GPR4 = SCRATCH 00082000 * GPR5 = SWPTABLE ENTRY BASE 00083000 * GPR7 = CORTABLE ENTRY BASE 00084000 * GPR8 = RDEVBLOK BASE 00085000 * GPR10 = IOBLOK BASE 00086000 * GPR11 = VMBLOK BASE 00087000 * GPR12 = DMKPAG BASE 00088000 * GPR14 = EXTERNAL LINKAGE 00089000 * GPR15 = EXTERNAL LINKAGE 00090000 * 00091000 * NOTES - 00092000 * 00093000 * NONE 00094000 * 00095000 * OPERATION - 00096000 * 00097000 * A. PROCESSING FOR CALL TO DMKPAGIO 00098000 * 1. IF A PREFORMATTED PAGING IOBLOK EXISTS, GET ITS ADDRESS AND 00099000 * SKIP TO STEP 2; OTHERWISE, CALL DMKFREE FOR FREE STORAGE 00100000 * AND FORMAT A SKELETON IOBLOK 00101000 * A. EXAMPLE OF A PAGING IOBLOK 00102000 * 00103000 * PAGESK X'07',PAGESEEK,CC,6 SEEK CCW 00104000 * PAGESS X'23',PAGESECT,CC,1 SET SECTOR CCW 00105000 * PAGESRCH X'31',PAGESEEK+2,CC,5 SEARCH ID EQUAL CCW 00106000 * PAGESTIC X'08',PAGESRCH TIC *-8 (4 BYTES) 00107000 * PAGEIOB X'00000000' POINTER TO SLOT SORTED IOBLOK 00108000 * X'06'/X'05',DATA ADDRESS,CC,4096 RD/WR CCWS 00109000 * PAGESNS X'04'/X'08',0,SILI+SKIP,1 SENSE CCW OR 00110000 * TIC CCW TO THE NEXT SORTED IOBLOK 00111000 * 00112000 * 2. INSERT THE CORRECT PAGE FRAME ADDRESS AND DASD OPCODE INTO 00113000 * THE PAGING IOBLOK AND INSERT THE DASD ADDRESS INFORMATION 00114000 * FROM THE SWPTABLE ENTRY INTO THE SEEK ARGUMENT FIELD 00115000 * 3. USE THE VOLUME INDEX IN THE COMPRESSED DASD ADDRESS TO IN- 00116000 * DEX INTO THE SYSTEM OWNED VOLUME LIST, LOCATE THE DEVICE 00117000 * INDEX AND POINT TO THE RDEVBLOK FOR THE PAGING DEVICE 00118000 * 4. SEARCH THE QUEUE OF IOBLOKS ON THE RDEVBLOK FOR A PAGING 00119000 * IOBLOK FOR THE SAME CYLINDER AS THE NEW REQUEST; IF ONE 00120000 * IS FOUND, GO TO STEP 5, OTHERWISE GO TO STEP 7. 00121000 * 5. IOBLOK SORT ROUTINES BY DEVICE TYPE: 00122000 * 00123000 * 5A. 2314/2319 - THE IOBLOKS FOR 2314/2319 ARE SORTED BY 00124000 * SLOTS, USING SLOT VALUES 0 TO 7, REPRESENTING PAGES 00125000 * 1 TO 8, 9 TO 16, 17 TO 24, AND 25 TO 32. 00126000 * 00127000 * SLOTS 00128000 * 0 1 2 3 4 5 6 7 00129000 * 00130000 *TRACK/PAGE 0/1 0/2 1/3 1/4 2/5 3/6 3/7 4/8 00131000 * 5/9 5/10 6/11 6/12 7/13 8/14 8/15 9/16 00132000 * 10/17 10/18 11/19 11/20 12/21 13/22 13/23 14/24 00133000 * 15/25 15/26 16/27 16/28 17/29 18/30 18/31 19/32 00134000 * 00135000 * A. IOBLOKS FOR RECORDS ON THE SAME TRACK ARE CHAINED 00136000 * TOGATHER BY THE TIC ADDRESS IN THE PREVIOUS IOBLOK 00137000 * POINTING TO THE SEARCH ID EQUAL CCW OF THE 00138000 * NEXT IOBLOK, BYPASSING THE SEEK AND NO-OP CCWS. 00139000 * B. ALL OTHER IOBLOKS ARE CHAINED TOGATHER BY THE TIC 00140000 * ADDRESS IN THE PREVIOUS IOBLOK POINTING TO THE 00141000 * SEEK CCW OF THE NEXT IOBLOK. 00142000 * 00143000 EJECT 00144000 * 5B. 2305 - THE IOBLOKS FOR THE 2305-1 AND 2305-2 ARE SORTED 00145000 * BY SLOTS (3 SLOTS PER REVOLUTION), AND DISREGARDING 00146000 * CYLINDER AND TRACK/HEAD ADDRESSES. 00147000 * 00148000 * NOTE: ON 2305-1 AND 2305-2 DRUM, YOU CAN INCLUDE A SEEK 00149000 * (OR SEEK HEAD) BETWEEN CONSECUTIVE CCWS IN A STRING, 00150000 * WITHOUT AN EXTRA REVOLUTION, WHETHER THE HEAD CHANGES 00151000 * OR NOT. A SET SECTOR CCW BETWEEN ADJACENT RECORDS OR 00152000 * SLOTS WILL CAUSE AN EXTRA REVOLUTION TO BE TAKEN. 00153000 * 00154000 * TRACK/ SLOTS 00155000 * HEAD 1 2 3 00156000 * 00157000 * 0 1 2 3 00158000 * 1 4 5 6 00159000 * 2 7 8 9 00160000 * 3 10 11 12 00161000 * 4 13 14 15 00162000 * 5 16 17 18 00163000 * 6 19 20 21 00164000 * 7 22 23 24 00165000 * |------PAGES-----| 00166000 * 00167000 * 00168000 * A. IOBLOKS FOR RECORDS ON THE SAME TRACK ARE CHAINED 00169000 * TOGATHER BY THE TIC ADDRESS IN THE PREVIOUS IOBLOK 00170000 * POINTING TO THE SEARCH ID EQUAL CCW OF THE NEXT IOBLOK 00171000 * BYPASSING THE SEEK AND SET SECTOR CCWS (EX. PAGES 00172000 * 22,23,24). 00173000 * B. IOBLOKS WHICH ARE ADJACENT (SLOT WISE) AND NOT ON THE 00174000 * SAME TRACK ARE CHAINED TOGATHER BY THE TIC IN 00175000 * THE PREVIOUS IOBLOK POINTING TO THE SET SECTOR CCW 00176000 * IN THE NEXT IOBLOK. THE SET SECTOR CCW IS REPLACED BY 00177000 * THE SEEK CCW. (EX. PAGES 1 5 9). 00178000 * C. IOBLOKS FOR THE LAST RECORD OF ONE TRACK AND THE FIRST 00179000 * RECORD OF AN OTHER TRACK ARE CHAINED TOGATHER BY THE 00180000 * TIC ADDRESS IN THE PREVIOUS IOBLOK POINTING TO THE 00181000 * SET SECTOR CCW IN THE NEXT IOBLOK. THE SET SECTOR 00182000 * CCW IS REPLACED BY THE SEEK CCW. (EX. PAGE 3 TO 10). 00183000 * D. ALL OTHER IOBLOKS ARE CHAINED TOGATHER BY THE TIC 00184000 * ADDRESS OF PREVIOUS IOBLOK POINTING TO THE SEEK CCW 00185000 * OF THE NEXT IOBLOK, WITH THE SET SECTOR CCW 00186000 * FOLLOWING THE SEEK CCW. 00187000 * (EX. PAGE 1 TO 3). 00188000 * 00189000 * E. EXAMPLE OF CALLS TO DMKPAG FOR PAGE IO. 00190000 * PAGES - 57,24,20,16,8,5,3,6,43,1 00191000 * SORTED BY DMKPAG -- 00192000 * PAGES - 16,20,57,43,8,24,1,5,3,6 00193000 * 00194000 EJECT 00195000 * 5C. 3330 - THE IOBLOKS FOR THE 3330 AND 3330-11 ARE SORTED 00196000 * BY TRACK. 00197000 * 00198000 * NOTE: ON A 3330-1 AND 3330-11 DISK, YOU CAN NOT INCLUDE 00199000 * A SEEK (OR SEEK HEAD) BETWEEN THE CCWS IN A STRING 00200000 * (EVEN THOUGH THE HEAD NUMBER DOSEN'T CHANGE) WITHOUT 00201000 * IT COSTING AN EXTRA REVOLUTION. A DUMMY RECORD OF 110 00202000 * BYTES IS REQUIRED TO ALLOW SEEKS BETWEEN CCWS, BUT 00203000 * HARDWARE SPEC. LIMITS THE DUMMY RECORD SIZE TO 101 00204000 * BYTES. CP DMKFMT PROGRAM FORMATS CP DISK WITH 50 00205000 * BYTE DUMMY RECORDS. 00206000 * 00207000 * TRACK/ TRK RCD NUMBER TRACK/ TRK RCD NUMBER 00208000 * HEAD 1 2 3 HEAD 1 2 3 00209000 * 00210000 * 0 1 2 3 10 31 32 33 00211000 * 1 4 5 6 11 34 35 36 00212000 * 2 7 8 9 12 37 38 39 00213000 * 3 10 11 12 13 40 41 42 00214000 * 4 13 14 15 14 43 44 45 00215000 * 5 16 17 18 15 46 47 48 00216000 * 6 19 20 21 16 49 50 51 00217000 * 7 22 23 24 17 52 53 54 00218000 * 8 25 26 27 18 55 56 57 00219000 * 9 28 29 30 |------PAGES-----| 00220000 * |------PAGES-----| 00221000 * 00222000 * A. IOBLOKS FOR RECORDS ON THE SAME TRACK ARE CHAINED 00223000 * TOGATHER BY THE TIC ADDRESS IN THE PREVIOUS IOBLOK 00224000 * POINTING TO THE SEARCH ID EQUAL CCW OF THE NEXT IOBLOK 00225000 * BYPASSING THE SEEK AND SET SECTOR CCWS (EX. PAGES 00226000 * 22 23 24). 00227000 * B. IOBLOKS FOR THE LAST RECORD OF ONE TRACK AND THE FIRST 00228000 * RECORD OF AN OTHER TRACK ARE CHAINED TOGATHER BY THE 00229000 * TIC ADDRESS IN THE PREVIOUS IOBLOK POINTING TO THE 00230000 * SET SECTOR CCW IN THE NEXT IOBLOK. THE SET SECTOR 00231000 * CCW IS REPLACED BY THE SEEK CCW. (EX. PAGE 3 TO 10). 00232000 * C. ALL OTHER IOBLOKS ARE CHAINED TOGATHER BY THE TIC 00233000 * ADDRESS OF PREVIOUS IOBLOK POINTING TO THE SEEK CCW 00234000 * OF THE NEXT IOBLOK, WITH THE SET SECTOR CCW 00235000 * FOLLOWING THE SEEK CCW. 00236000 * (EX. PAGE 1 TO 3). 00237000 * 00238000 * D. EXAMPLE OF CALLS TO DMKPAG FOR PAGE IO. 00239000 * PAGES - 51,9,4,6,18,49,17,16,50,8,7 00240000 * SORTED BY DMKPAG -- 00241000 * PAGES - 49,50,51,7,8,9,4,6,16,17,18 00242000 * 00243000 EJECT 00244000 * 5D. 3340 - THE IOBLOKS FOR 3340 ARE SORTED BY 00245000 * LOGICAL TRACKS (2 RECORDS PER LOGICAL TRACK) AND 00246000 * IN AN EVEN/ODD TRACK SEQUENCE. 00247000 * 00248000 * NOTE: ON 3340 DISK, YOU CAN NOT INCLUDE A SEEK (OR SEEK 00249000 * HEAD) BETWEEN THE CCWS IN A STRING (EVEN THOUGH THE 00250000 * HEAD NUMBER DOESN'T CHANGE) WITHOUT IT COSTING AN 00251000 * EXTRA REVOLUTION, WITH EXCEPTION OF CCWS CROSSING 00252000 * INDEX POINT (HOME ADDRESS AND RECORD ZERO). 00253000 * 00254000 * | PAGE OR RECORD NUMBER | 00255000 * TRACK OR HEAD |EVEN TRACKS | ODD TRACKS| TRACK OR HEAD 00256000 * 0 | 1 | 2 | 3 | 4 | 1 00257000 * 2 | 5 | 6 | 7 | 8 | 3 00258000 * 4 | 9 | 10 | 11 | 12 | 5 00259000 * 6 | 13 | 14 | 15 | 16 | 7 00260000 * 8 | 17 | 18 | 19 | 20 | 9 00261000 * 10 | 21 | 22 | 23 | 24 | 11 00262000 * 00263000 * SECTOR VALUES | 2 | 32 | 2 | 32 | 00264000 * |LOGICAL TRK |LOGICAL TRK| 00265000 * | ONE PHYSICAL TRACK | 00266000 * 00267000 * IOBLOKS ARE CHAINED TOGATHER WITH TICS IN THE 00268000 * FOLLOWING WAY: 00269000 * A. IOBLOKS FOR RECORDS ON THE SAME LOGICAL TRACK 00270000 * WILL BE CHAINED TOGATHER BY THE TIC ADDRESS IN THE 00271000 * PREVIOUS IOBLOK POINTING TO THE SEARCH ID EQUAL 00272000 * COMMAND OF THE NEXT IOBLOK, BYPASSING THE SEEK 00273000 * AND SET SECTOR COMMANDS. (EX. PAGES - 1 2 7 8 9 10) 00274000 * B. IOBLOKS FOR THE LAST RECORD OF ONE EVEN/ODD TRACK 00275000 * AND THE FIRST RECORD OF ANOTHER ODD/EVEN TRACK ARE 00276000 * CHAINED TOGATHER BY THE TIC ADDRESS IN THE FIRST 00277000 * IOBLOK POINTING TO THE SET SECTOR COMMAND IN THE 00278000 * SECOND IOBLOK, AND THE SET SECTOR COMMAND OF THE 00279000 * SECOND IOBLOK IS REPLACED BY A SEEK COMMAND. 00280000 * (EXAMPLE - PAGE 2 TO 7 PAGE 20 TO 9). 00281000 * C. ALL OTHER IOBLOKS ARE CHAINED TOGATHER BY THE 00282000 * TIC ADDRESS IN THE PREVIOUS IOBLOK POINTING TO THE 00283000 * SEEK COMMAND OF THE NEXT IOBLOK, WITH THE SET SECTOR 00284000 * COMMAND FOLLOWING THE SEEK COMMAND. 00285000 * (EX. PAGES - 1 7 9 15 18 21) 00286000 * D. IOBLOKS FOR EVEN/ODD CYLINDERS ON THE 3340 70MB 00287000 * DATA MODULE ARE TREATED AS SAME CYLINDER FOR THE SORT 00288000 * (EXAMPLE-(0,1),(2,3),(4,5),(6,7),(694,695),(696,697)) 00289000 * E. EXAMPLE OF CALLS TO DMKPAGIO FOR PAGE IO. 00290000 * PAGES - 2 11 16 15 9 17 12 10 1 (6 REVOLUTIONS) 00291000 * SORTED BY DMKPAG -- 00292000 * PAGES - 1 2 11 12 9 10 15 16 17 (2.24 REVOLUTIONS) 00293000 EJECT 00294000 * 6. FOR REQUESTS FOR THE SAME SLOT, SORT BY REQUEST 00295000 * PRIORITY. 00296000 * 00297000 * REQUEST PRIORITY 00298000 * Q1, READ 0 00299000 * Q2, READ 2 00300000 * Q1, WRITE 4 00301000 * Q2, WRITE 6 00302000 * E1, READ 8 00303000 * ¬E1, READ 10 00304000 * E1, WRITE 12 00305000 * ¬E1, WRITE 14 00306000 * 00307000 * 6A. CONTINUE WITH STEP 8. 00308000 * 7. CALL DMKIOSQR TO INITIATE THE I/O 00309000 * 8. DECREMENT AND TEST THE PAGEIO COUNT; IF IT IS ZERO, BAL TO 00310000 * THE OVERHEAD CALCULATION SUBROUTINE DESCRIBED BELOW IN 00311000 * SECTION C. 00312000 * 9. GET THE NEXT CPEXBLOK ON THE QUEUE. IF ONE EXISTS, RESTART 00313000 * WITH STEP 1; OTHERWISE, EXIT VIA A GOTO TO DISPATCH 00314000 * 00315000 * 5E. 3350 - THE IOBLOKS FOR THE 3350 ARE SORTED BY SLOTS 00316000 * (4 SLOTS PER REVOLUTION) WITHIN A CYLINDER. 00317000 * 00318000 * NOTE: ON 3350 DISK, YOU CAN INCLUDE A SEEK HEAD COMMAND 00319000 * BETWEEN CONSECUTIVE CCWS IN A STRING, WITHOUT THE LOSS 00320000 * OF A DISK REVOLUTION WHEN A HEAD SWITCH OCCURS. 00321000 * 00322000 * TRACK/ SLOTS TRACK/ SLOTS 00323000 * HEAD 1 2 3 4 HEAD 1 2 3 4 00324000 * 00325000 * 0 1 2 3 4 15 61 62 63 64 00326000 * 1 5 6 7 8 16 65 66 67 68 00327000 * 2 9 10 11 12 17 69 70 71 72 00328000 * 3 13 14 15 16 18 73 74 75 76 00329000 * 4 17 18 19 20 19 77 78 79 80 00330000 * 5 21 22 23 24 20 81 82 83 84 00331000 * 6 25 26 27 28 21 85 86 87 88 00332000 * 7 29 30 31 32 22 89 90 91 92 00333000 * 8 33 34 35 36 23 93 94 95 96 00334000 * 9 37 38 39 40 24 97 98 99 100 00335000 * 10 41 42 43 44 25 101 102 103 104 00336000 * 11 45 46 47 48 26 105 106 107 108 00337000 * 12 49 50 51 52 27 109 110 111 112 00338000 * 13 53 54 55 56 28 113 114 115 116 00339000 * 14 57 58 59 60 29 117 118 119 120 00340000 * |-------PAGES------| |-------PAGES-------| 00341000 * 00342000 * 00343000 * A. IOBLOKS FOR RECORDS ON THE SAME TRACK ARE CHAINED 00344000 * TOGETHER BY THE TIC ADDRESS IN THE PREVIOUS IOBLOK 00345000 * POINTING TO THE SEARCH ID EQUAL CCW OF THE NEXT IOBLOK 00346000 * BYPASSING THE SEEK AND SET SECTOR CCWS (EX. PAGES 00347000 * 33,34,36). 00348000 * B. IOBLOKS WHICH ARE ADJACENT (SLOT WISE) AND NOT ON THE 00349000 * SAME TRACK ARE CHAINED TOGETHER BY THE TIC IN 00350000 * THE PREVIOUS IOBLOK POINTING TO THE SET SECTOR CCW 00351000 * IN THE NEXT IOBLOK. THE SET SECTOR CCW IS REPLACED BY 00352000 * THE SEEK CCW. (EX. PAGES 5,46,115). 00353000 * C. IOBLOKS FOR THE LAST RECORD OF ONE TRACK AND THE FIRST 00354000 * RECORD OF AN OTHER TRACK ARE CHAINED TOGETHER BY THE 00355000 * TIC ADDRESS IN THE PREVIOUS IOBLOK POINTING TO THE 00356000 * SET SECTOR CCW IN THE NEXT IOBLOK. THE SET SECTOR 00357000 * CCW IS REPLACED BY THE SEEK CCW. (EX. PAGE 72 TO 101). 00358000 * D. ALL OTHER IOBLOKS ARE CHAINED TOGETHER BY THE TIC 00359000 * ADDRESS OF PREVIOUS IOBLOK POINTING TO THE SEEK CCW 00360000 * OF THE NEXT IOBLOK, WITH THE SET SECTOR CCW 00361000 * FOLLOWING THE SEEK CCW. 00362000 * (EX. PAGE 1 TO 3). 00363000 * 00364000 * E. EXAMPLE OF CALLS TO DMKPAG FOR PAGE IO. 00365000 * PAGES - 103,14,40,88,5,50,3,11,70,21 00366000 * SORTED BY DMKPAG -- 00367000 * PAGES - 5,14,103,40,21,50,3,88,70,11 00368000 * 00369000 SPACE 1 00370000 * ERROR MESSAGE - 00371000 * 00372000 * DMKPAG415E CONTINUOUS PAGING ERRORS FROM DASD XXX 00373000 * 00374000 * THE ABOVE MESSAGE WILL BE ISSUED IF 5 CONSECTIVE 00375000 * ERRORS HAVE OCCURED ON A PAGING DEVICE. THE SYSTEM 00376000 * WILL THEN ENTER A DISABLED WAIT STATE. (CODE 00F) 00377000 * 00378000 *. 00379000 EJECT 00380000 COPY OPTIONS 00381000 COPY LOCAL OPTIONS @V306638 00382000 SPACE 2 00383000 DMKPAG CSECT 00384000 SPACE 3 00385000 EXTRN DMKPTRRQ,DMKPTRWQ 00386000 EXTRN DMKIOSQR 00387000 EXTRN DMKSTKCP 00388000 EXTRN DMKSTKMP @V407594 00389000 EXTRN DMKSTKOP @V407594 00390000 EXTRN DMKSTKIO @V408246 00391000 EXTRN DMKCVTBH 00392000 EXTRN DMKSCNRD @VA03787 00393000 EXTRN DMKSYSOW 00394000 EXTRN DMKMCHST @V407510 00395000 EXTRN DMKCVTAB @VA04301 00396000 EXTRN DMKPTRSS @V408246 00397000 EXTRN DMKSCNRU @VA07455 00398000 ENTRY DMKPAGSK @V408246 00399000 ENTRY DMKPAGDP @V408246 00400000 AIF (NOT &AP).NOAP10 @VA10137 00400100 EXTRN DMKDSPRU @VA10805 00400310 .NOAP10 ANOP @VA10137 00400500 ENTRY DMKPAGQ 00401000 ENTRY DMKPAGIO 00402000 ENTRY DMKPAGQR @VA08859 00403000 ENTRY DMKPAGST 00404000 ENTRY DMKPAGPS,DMKPAGCC 00405000 ENTRY DMKPAGWS @VMH0012 00406000 ENTRY DMKPAGLO 00407000 ENTRY DMKPAGHI 00408000 EJECT 00409000 USING PSA,R0 00410000 USING CPEXBLOK,R1 00411000 USING SWPFLAG,R5 00412000 USING CORTABLE,R7 00413000 USING RDEVBLOK,R8 00414000 USING IOBLOK,R10 00415000 USING VMBLOK,R11 00416000 SPACE 00417000 USING *,R12 00418000 SPACE 00419000 DMKPAGIO EQU * ENTERED VIA GOTO 00420000 AIF (NOT &AP).NOAP1 **AIF*** 00421000 TM APSTAT1,APUOPER RUNNING AS AP @V407594 00422000 BZ NOUNLK NO @V407594 00423000 CL R11,LASTUSER IS THIS LASTUSER @V407594 00424000 BE NOUNLK YES, DO NOT UNLOCK @V407594 00425000 CLC VMLOCK+2(2),LPUADDR LOCKED BY THIS PROCESSOR @V407594 00426000 BNE NOUNLK NO, BYPASS UNLOCK @V407594 00427000 LR R1,R11 VMBLOK TO R1 FOR UNLOCK @V407594 00428000 LOCK RELEASE,TYPE=VMBLOK UNLOCK R11 AT ENTRY @V407594 00429000 NOUNLK DS 0H @V407594 00430000 .NOAP1 ANOP **ANOP** 00431000 L R13,=A(DMKPTRRQ) POINT TO Q OF PAGE READ REQUESTS 00432000 GETQ L R1,PREFIXA ACCESS ABSOLUTE PSA @V407594 00433000 CLI XTNDLOCK-PSA(R1),0 SYSTEM EXTENDING @V407594 00434000 BE CKQ NO -- PROCEED AS USUAL 00435000 L R13,=A(DMKPTRWQ) POINT TO WRITE QUEUE 00436000 L R1,0(,R13) GET 1ST REQUEST 00437000 LTR R1,R1 ANY ?? 00438000 BNP EXITX NO -- ONE COMING SOON, HOPEFULLY 00439000 B DOIO YES -- START IT OUT -- 00440000 SPACE 00441000 CKQ L R1,0(,R13) GET NEXT REQUEST 00442000 LTR R1,R1 ANYTHING THERE 00443000 BP DOIO YES -- SET UP FOR I/O 00444000 BM EXITX END OF THE LINE -- EXIT NOW 00445000 LA R13,4(,R13) FINISHED WITH THIS QUEUE - TEST NEXT 00446000 B GETQ .... 00447000 SPACE 00448000 DOIO EQU * START UP I/O FOR THIS PAGE 00449000 L R2,DMKPAGCC COUNT PAGE I/O REQUESTS 00450000 AL R2,F1 ... 00451000 ST R2,DMKPAGCC .. 00452000 L R0,CPEXFPNT POINT TO NEXT QUEUED REQUEST 00453000 ST R0,0(,R13) AND MAKE IT 1ST IN LINE 00454000 CHARGE SWITCH,CPEXR11 CHARGE I/O TO CORRECT USER @V407594 00455000 L R2,DMKPAGQ POINT TO FIRST ENTRY IN IN-TRANSIT QUEUE 00456000 LA R3,DMKPAGQ POINT TO QUEUE ANCHOR 00457000 ST R1,DMKPAGQ MAKE NEW ENTRY FIRST ON QUEUE 00458000 ST R1,CPEXBPNT-CPEXBLOK(,R2) UPDATE BACKCHAIN OF OLD 1ST E 00459000 STM R2,R3,CPEXFPNT PLACE NEW ENTRY IN CHAIN 00460000 SLR R0,R0 CLEAR OUT 00461000 ST R0,CPEXMISC RELATED TASK CHAIN 00462000 L R10,IOBSTACK GET A PREFORMATTED IOBLOK 00463000 LTR R10,R10 HAVE ANY ?? 00464000 BNP GETIOBLK NO -- MAKE UP A NEW ONE @V2A2029 00465000 LM R5,R6,MODELSS GET MODEL SET SECTOR CCW @V2A2029 00466000 ALR R5,R10 ADJUST DATA ADDRESS @V2A2029 00467000 STM R5,R6,PAGESS AND STORE IN PAGE IOBLOK @V2A2029 00468000 B SETRWCCW GO SET UP READ/WRITE CCW @V2A2029 00469000 DROP R10 NO -- MAKE UP A NEW ONE 00470000 EJECT 00471000 GETIOBLK LR R10,R1 SAVE ADDRESS OF CPEXBLOK @V2A2029 00472000 LA R0,PAGESIZE FIRST, GET SOME 00473000 CALL DMKFREE FREE STORAGE 00474000 LR R14,R1 AND USE R14 FOR TEMPORARY 00475000 USING IOBLOK,R14 ADDRESSABILITY 00476000 LR R15,R10 SAVE ADDRESS OF CPEXBLOK .. 00477000 XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR ENTIRE IOBLOK 00478000 LA R4,WAITPAGE GET ADDRESS FOR IOBIRA 00479000 LA R5,PAGECCWS GET ADDRESS OF CHANNEL PROGRAM FOR IOBCAW 00480000 ST R4,IOBIRA SET UP IRA RETURN ADDRESS 00481000 ST R5,IOBCAW STORE CAW ADDRESS FOR PAGING CHAN. PROG. 00482000 ST R14,IOBLINK IN CASE NEW IOB GETS CHAINED 1ST @V407438 00483000 SPACE 00484000 LM R0,R11,MODELCCW GET PROTOTYPE PAGING CCWS 00485000 ALR R0,R14 ADJUST ADDRESS IN SEEK 00486000 ALR R2,R14 IN SET SECTOR 00487000 ALR R4,R14 IN SEARCH 00488000 ALR R6,R14 AND IN TIC 00489000 STM R0,R11,PAGECCWS AND SAVE IN IOBLOK EXTENSION 00490000 LR R1,R15 RESTORE ADDRESSABILITY FOR CPEXBLOK 00491000 L R11,CPEXR11 AND FOR USER'S VMBLOK 00492000 DROP R14 ABANDON TEMPORARY ADDRESSABILITY 00493000 LR R10,R14 AND REESTABLISH STANDARD 00494000 USING IOBLOK,R10 00495000 EJECT 00496000 SETRWCCW EQU * HERE DIRECTLY TO SET UP CCW IN FORMATTED IOBLOK 00497000 L R5,CPEXR5 GET ADDRESS OF SWPTABLE ENTRY 00498000 L R7,CPEXR7 AND OF CORTABLE ENTRY 00499000 OI SWPFLAG,SWPTRANS FLAG VIRTUAL PAGE IN TRANSIT 00500000 L R0,IOBMISC GET NEXT IOBLOK IN STACK 00501000 ST R0,IOBSTACK AND MAKE IT FIRST 00502000 ST R1,IOBMISC SAVE POINTER TO TRANSIT CPEXBLOK 00503000 SL R7,ACORETBL GET PAGE FRAME ADDRESS/256 00504000 SLL R7,8 GET PAGE FRAME ADDRESS 00505000 ICM R7,B'1000',CPEXR0+3 GET DASD OP-CODE FROM SAVED GPR0 00506000 ST R7,PAGERW AND SET 1ST HALF OF R/W CCW 00507000 MVI PAGERW+4,CC MAKE SURE FLAGS ARE CORRECT @V408246 00508000 MVC IOBUSER,ASYSVM CHARGE IOB UNSTACK TO SYSTEM @VA07397 00509000 SLR R0,R0 CLEAR OUT 00510000 ST R0,IOBRADD ADDRESS, FLAGS AND STATUS 00511000 OI IOBFLAG,IOBPAG+IOBCP FLAG AS PAGING IOBLOK 00512000 ST R0,IOBCYL CLEAR CYLINDER AND RETRY COUNT 00513000 SLR R8,R8 CLEAR DEVICE REGISTER @V408246 00514000 IC R8,SWPCODE GET VOLUME CODE @V408246 00515000 SLL R8,3 CONVERT TO INDEX FOR OWNDLIST @V408246 00516000 AL R8,=A(DMKSYSOW) INDEX TO CORRECT ENTRY @V408246 00517000 LH R8,OWNDRDEV-OWNDLIST(,R8) GET INDEX TO RDEVBLOK @V408246 00518000 LTR R8,R8 IS IT STILL THERE? @V408246 00519000 BNM CHKWRIT YES @V408246 00520000 MVI IOBSTAT,IOBFATAL+IOBCC3 NO, FLAG FATAL I/O @V408246 00521000 OI SWPFLAG,SWPRECMP BYPASS SYSTEM FALURE @V408246 00522000 SR R0,R0 @V408246 00523000 ST R0,PAGEIOB CLEAR CHAINING FIELD @V408246 00524000 LR R1,R10 GET IOBLOK POINTER @V408246 00525000 CALL DMKSTKIO AND STACK BLOCK @V408246 00526000 B GETQ LOOK FOR MORE REQUESTS @V408246 00527000 SPACE 3 00528000 CHKWRIT DS 0H @V408246 00529000 MVI PAGEPRI,0 INITIALIZE PRIORITY @V408246 00530000 CLI PAGERW,X'05' PAGE WRITE ?? 00531000 BNE GETRDEV NO -- 00532000 L R3,PAGESOUT COUNT PENDING SWAPS 00533000 LA R3,1(,R3) ... 00534000 ST R3,PAGESOUT ... 00535000 OI PAGEPRI,4 SET-UP WRITE PRIORITY @V408246 00536000 SPACE 00537000 GETRDEV EQU * 00538000 TM VMQLEVEL,VMQ1 FOR Q1? @V408246 00539000 BO *+8 YES @V408246 00540000 OI PAGEPRI,2 NO, ADD IN Q2 PRIORITY @V408246 00541000 TM VMDSTAT,VMINQ IN-Q? @V408246 00542000 BO *+8 YES @V408246 00543000 OI PAGEPRI,8 NO, ADD IN NOT IN-Q PRIORITY @V408246 00544000 SLL R8,3(0) CONVERT TO BYTE INDEX @V200820 00545000 AL R8,ARIODV POINT TO CORRECT RDEVBLOK 00546000 AIF (NOT &AP).NOAP2 **AIF*** 00547000 LA R1,RDEVIOBL POINT TO RDEV LOCK WORD @V407594 00548000 LOCK OBTAIN,TYPE=PRIVATE,SPIN=YES LOCK RDEVBLOK @V407594 00549000 .NOAP2 ANOP **ANOP** 00550000 SPACE 00551000 SR R3,R3 CLEAR INDEX REGISTER 00552000 IC R3,SWPDPAGE AND GET PAGE NUMBER 00553000 SR R2,R2 CLEAR FOR DIVIDE 00554000 BCTR R3,0 AND GET PAGE NUMBER-1 00555000 CLI RDEVTYPE,TYP2314 PAGING ON 2314/2319 ? @VM01167 00556000 BE PAG2314 YES -- 00557000 SPACE 00558000 CLI RDEVTYPE,TYP3340 PAGING ON 3340 ? @VM01167 00559000 BE PAG3340 YES - BRANCH @V2A2029 00560000 SPACE 00561000 CLI RDEVTYPE,TYP3350 PAGING ON 3350 ? @V304498 00562000 BE PAG3350 YES, CALCULATE HEAD NUMBER @V304498 00563000 SPACE 1 00564000 CLI RDEVTYPE,TYP3375 Paging on 3375 ? HRC106DK 00564100 BE PAG3375 Yes, calculate head number HRC106DK 00564200 SPACE 1 HRC106DK 00564300 CLI RDEVTYPE,TYP3380 Paging on 3380 ? HRC106DK 00564400 BE PAG3380 Yes, calculate head number HRC106DK 00564500 SPACE 1 HRC106DK 00564600 D R2,F3 CALCULATE HEAD NUMBER 00565000 LA R1,SECT3330 SECTOR TABLE FOR 3330 @VM01167 00566000 CLI RDEVTYPE,TYP2305 IS IT A 2305 00567000 BNE GETSECTR NO -- GO CALCULATE SECTOR 00568000 LA R1,SEC23052 SECTOR TABLE FOR 2305 M2 @VM01167 00569000 CLI RDEVMDL,MODEL1 2305 MODEL 1 ?? 00570000 BNE GETSECTR NO -- TO CALCULATE SECTOR @VM01167 00571000 LA R1,SEC23051 SECTOR TABLE FOR 2305 M1 @VM01167 00572000 B GETSECTR GO SET SECTOR @V2A2029 00573000 SPACE 00574000 PAG3340 D R2,F2 CALCULATE HEAD NUMBER @V2A2029 00575000 LA R1,SECT3340 SECTOR TABLE FOR 3340 @VM01167 00576000 LA R14,ONE SLOT NUMBER FOR 1ST EVEN HEAD @VM01167 00577000 TM SWPDPAGE,BIT6+BIT7 IS THIS A EVEN HEAD NUMBER ? @VM01167 00578000 BM SORTSLOT YES - LEAVE AS ONE @VM01167 00579000 AR R14,R14 SET SLOT NUMBER FOR 1ST ODD HEAD @V2A2029 00580000 SORTSLOT STC R14,PAGESRCD AND SAVE FOR SORTING @VM01167 00581000 B GETSECTV GET SECTOR VALUE @VM01167 00582000 SPACE 00583000 PAG3350 D R2,F4 CALCULATE HEAD NUMBER @V304498 00584000 LA R1,SECT3350 SECTOR TABLE 3350 @V304498 00585000 SPACE 1 00586000 B GETSECTR HRC106DK 00586050 SPACE 1 HRC106DK 00586100 PAG3375 D R2,F8 Calculate head number HRC106DK 00586150 LA R1,SECT3375 Sector table 3375 HRC106DK 00586200 B GETSECTR HRC106DK 00586250 SPACE 1 HRC106DK 00586300 PAG3380 D R2,F10 Calculate head number HRC106DK 00586350 LA R1,SECT3380 Sector table 3380 HRC106DK 00586400 SPACE 1 HRC106DK 00586450 GETSECTR LA R9,1(,R2) GET SLOT NUMBER @VA04482 00587000 STC R9,PAGESRCD AND SAVE FOR SORTING @VM01167 00588000 GETSECTV SLL R3,16 HEAD NUMBER TO HIGH BYTES @VM01167 00589000 IC R3,0(R2,R1) GET SECTOR VALUE FOR THIS RECORD @VM01167 00590000 ICM R3,B'0010',SWPDPAGE INSERT RECORD NUMBER 00591000 B SETADDR GO JOIN COMMON CODE BELOW 00592000 SPACE 00593000 PAG2314 EQU * HERE FOR 2314 CHANNEL PROGRAM 00594000 MVI PAGESS,NOPCODE NOP THE SET SECTOR COMMAND @VM01167 00595000 LA R1,HDTABLE(R3) POINT TO HEAD NUMBER FOR PAGE 00596000 D R2,F8 GET SLOT NUMBER (REMAINDER IN GPR 2) 00597000 LR R3,R2 SAVE IN GPR3 00598000 ICM R3,B'0100',0(R1) INSERT HEAD NUMBER IN BYTE 1 00599000 ICM R3,B'0010',SWPDPAGE INSERT RECORD NUMBER IN BYTE 2 00600000 SPACE 00601000 SETADDR LH R2,SWPCYL GET CYLINDER NUMBER 00602000 STM R2,R3,PAGESEEK STORE SEEK ADDRESS IN TASK 00603000 STH R2,IOBCYL SET CYLINDER IN IOBLOK 00604000 CLI RDEVTYPE,TYP3340 PAGING ON 3340 ? @VM01167 00605000 BNE CK2305 NO, CHECK 2305 @VM01167 00606000 TM RDEVFTR,FTR70MB 2 LOGICAL CYLINDERS/PHYSICAL ? @VM01167 00607000 BZ SLOTSORT NO, MUST BE 35MB @VM01167 00608000 NI IOBCYL+1,X'FF'-BIT7 FORCE SORT ON EVEN CYLINDERS@VM01167 00609000 B SLOTSORT GO LOCATE IOBLOK FOR THIS CYL @VM01167 00610000 CK2305 CLI RDEVTYPE,TYP2305 PAGING ON 2305? @VA03430 00611000 BNE SLOTSORT NO -- DO CYLINDER ORIENTED SLOT SORT 00612000 SLR R1,R1 FORCE CYLINDER 0 00613000 STH R1,IOBCYL ... 00614000 SPACE 00615000 SLOTSORT LR R2,R8 SAVE ADDRESS OF RDEVBLOK 00616000 LH R1,IOBCYL GET CYLINDER NUMBER FOR COMPARE HALF 00617000 SPACE 00618000 FINDIOB L R3,IOBFPNT-IOBLOK(,R2) LOOK FOR AN IOBLOK FOR SAME CYL 00619000 CR R3,R8 ANY MORE ON CHAIN 00620000 BE QUEUEIO NO -- NEED A SEPARATE SIO 00621000 TM IOBFLAG-IOBLOK(R3),IOBPAG PAGING I/O TASK ?? 00622000 BZ FINDIOB2 NO -- KEEP LOOKING 00623000 TM IOBSTAT-IOBLOK(R3),IOBMINI IS THIS A MINI IOB? @V407438 00624000 BO FINDIOB2 YES, THEN SKIP IT TOO... @V407438 00625000 CH R1,IOBCYL-IOBLOK(,R3) IO FOR SAME CYLINDER ?? 00626000 BE SORTIT YES -- GO DO SLOT SORTING 00627000 BL QUEUEIO NO -- LOOK NO FARTHER 00628000 FINDIOB2 LR R2,R3 SAVE BACK CHAIN POINTER 00629000 B FINDIOB AND KEEP LOOKING 00630000 SPACE 00631000 SORTIT SR R2,R2 CLEAR BACKCHAIN POINTER 00632000 SR R6,R6 CLEAR OLD BACK POINTER @V408246 00633000 CLI RDEVTYPE,TYP2305 2305 DEVICE TYPE ? @VM01167 00634000 BE PAGE2305 YES - @VM01167 00635000 CLI RDEVTYPE,TYP3350 3350 DEVICE ? @V304498 00636000 BE SORT3350 YES, SLOT SORT WITHIN CYLINDER(S)@V304498 00637000 CLI RDEVTYPE,TYP3375 3375 device ? HRC106DK 00637100 BE SORT3375 Yes, slot sort within cylinder(s)HRC106DK 00637200 CLI RDEVTYPE,TYP3380 3380 device ? HRC106DK 00637300 BE SORT3380 Yes, slot sort within cylinder(s)HRC106DK 00637400 CLI RDEVTYPE,TYP3330 3330 DEVICE TYPE ? @VM01167 00638000 BE PAGE3330 YES - @VM01167 00639000 CLI RDEVTYPE,TYP3340 3340 DEVICE TYPE ? @VM01167 00640000 BE PAGE3340 YES - @VM01167 00641000 CLI RDEVTYPE,TYP2314 2314/2319 DEVICE TYPE ? @VM01167 00642000 BNE QUEUEIO NO - GO QUEUE IOBLOK @VM01167 00643000 LA R15,CCW2314 YES, GET ADDRESS OF CHAIN ROUTINE@VM01167 00644000 B PAGE2314 ENTER 2314 SORT ROUTINE @VM01167 00645000 SPACE 00646000 * CHAIN TIC IN IOBLOK(R2) TO CORRECT CCW IN NEXT IOBLOK(R10) 00647000 SPACE 00648000 CCW2314 LA R5,PAGESRCH ADDR OF SEARCH ID EQUAL CCW(R10) @VM01167 00649000 CLC PAGEHEAD,PAGEHEAD-IOBLOK(R2) SAME TRACK/HEAD ? @VM01167 00650000 BNE SK2314 NO, MUST TIC TO SEEK @VA03674 00651000 CLC PAGERCD,PAGERCD-IOBLOK(R2) ASCENDING RECORDS? @VA03674 00652000 BH TIC2314 YES, TIC TO SEARCH ID EQUAL CCW @VA03674 00653000 SK2314 LA R5,PAGESS NO, TIC TO SET SECTOR CCW SLOT @VA03674 00654000 MVC PAGESS,PAGESK OVERLAY SET SECTOR WITH SEEK CCW @VM01167 00655000 TIC2314 ST R5,PAGESNS-IOBLOK(,R2) INSERT 'TIC TO' ADDRESS @VM01167 00656000 MVI PAGESNS-IOBLOK(R2),TICOP MOVE IN TIC OP-CODE(08)@VM01167 00657000 BR R14 RETURN TO CALLER @VM01167 00658000 SPACE 00659000 SORT3350 LA R15,CCW3350 3350 CHAIN IOBLOK ROUTINE @V304498 00660000 MVI LASTSLOT,4 Highest slot number for 3350 HRC106DK 00660100 B SORT2305 PERFORM 3350 SLOT SORT @V304498 00661000 SORT3375 LA R15,CCW3350 3350/75/80 chain IOBLOK routine HRC106DK 00661100 MVI LASTSLOT,8 Highest slot number for 3375 HRC106DK 00661200 B SORT2305 Perform 3375 slot sort HRC106DK 00661300 SORT3380 LA R15,CCW3350 3350/75/80 chain IOBLOK routine HRC106DK 00661400 MVI LASTSLOT,10 Highest slot number for 3380 HRC106DK 00661500 B SORT2305 Perform 3380 slot sort HRC106DK 00661600 PAGE2305 LA R15,CCW2305 2305 CHAIN IOBLOK ROUTINE @VM01167 00662000 PAGE2314 EQU * 2314/2319 CHAIN IOBLOK ROUTINE @VM01167 00663000 SORT2305 CLC PAGESECT,PAGESECT-IOBLOK(R3) COMPARE SECTORS @VM01167 00664000 BL INIOB LOW, SORT IN ASENDING ORDER @VM01167 00665000 BE CHKPRI EQUAL, CHECK PRIORITY ORDER @V408246 00666000 LR R2,R3 SAVE BACKCHAIN ADDRESS @VM01167 00667000 L R3,PAGEIOB-IOBLOK(R2) GET NEXT IOBLOK @V408246 00668000 LTR R3,R3 IS THERE ONE? @V408246 00669000 BZ ENDIOB END OF CHAIN - INSERT HERE @VM01167 00670000 CLC PAGESECT-IOBLOK(,R2),PAGESECT-IOBLOK(R3) @VM01167 00671000 BNL INIOB BREAK IN ORDER, INSERT IOBLOK @VM01167 00672000 B SORT2305 TRY AGAIN @VM01167 00673000 SPACE 00674000 CHKPRI DS 0H @V408246 00675000 CLC PAGEPRI(1),PAGEPRI-IOBLOK(R3) BETTER PRIORITY? @V408246 00676000 BNL SKIPIT NO @V408246 00677000 LR R6,R3 YES, SAVE OLD BLOCK @V408246 00678000 LTR R2,R2 REORDERING 1ST REQUEST? @V408246 00679000 BNZ PRIODRA NO @V408246 00680000 L R3,PAGEIOB-IOBLOK(R3) NEXT POINTER @V408246 00681000 LTR R3,R3 IS THERE ONE ? @V408246 00682000 BZ PRIODR NONE @V408246 00683000 MVC IOBFPNT-IOBLOK(8,R3),IOBFPNT-IOBLOK(R6) VALID @V408246 00684000 * UNCHAINING INFO 00685000 B INIOB UNCHAIN AND RECHAIN @V408246 00686000 PRIODR DS 0H REPLACING 1ST AND ONLY REQUEST @V408246 00687000 LR R3,R6 RESTORE ONLY POINTER @V408246 00688000 SR R6,R6 CLEAR REPLACED POINTER @V408246 00689000 B INIOB MEARGE IN @V408246 00690000 PRIODRA DS 0H @V408246 00691000 L R3,PAGEIOB-IOBLOK(R3) NEXT POINTER @V408246 00692000 LTR R3,R3 IS TEHERE ONE ? @V408246 00693000 BNZ INIOB OK, CHAIN IN @V408246 00694000 B ENDIOB LAST REQUEST @V408246 00695000 * 00696000 SKIPIT LR R2,R3 SAVE BACKCHAIN ADDRESS @VM01167 00697000 L R3,PAGEIOB-IOBLOK(R2) GET NEXT IOBLOK @V408246 00698000 LTR R3,R3 IS THERE ONE ? @V408246 00699000 BZ ENDIOB END OF CHAIN - INSERT HERE @VM01167 00700000 CLC PAGESECT-IOBLOK(,R3),PAGESECT-IOBLOK(R2) @VM01167 00701000 BNH SORT2305 BREAK IN ORDER - SORT @VM01167 00702000 B SKIPIT TRY NEXT IOBLOK @VM01167 00703000 SPACE 00704000 * CHAIN TIC IN IOBLOK(R2) TO CORRECT CCW IN NEXT IOBLOK(R10) 00705000 SPACE 00706000 CCW2305 LA R5,PAGESK ADDRESS OF SEEK CCW @VM01167 00707000 CLI DMKPAGDP,X'FF' PCI DRUM FLAG SET ? @VA07060 00708000 BE *+8 YES @VA07060 00709000 OI PAGESK+4,8 YES, PCI ON ALL 2305 REQUESTS @V408246 00710000 CLI PAGESRCD,ONE IS THIS RECORD ONE ? @VM01167 00711000 BE RCDONE YES, CHECK PREVIOUS RECORD @VM01167 00712000 CLC PAGESRCD,PAGESRCD-IOBLOK(R2) ADJACENT RECORDS @VM01167 00713000 BNH TIC2305 NO,CHAIN IN SEEK AND SECTOR CCWS @VM01167 00714000 CLC PAGECYL,PAGECYL-IOBLOK(R2) SAME CYLINDER ? @VM01167 00715000 BNE SK2305 NO-ADJACENT RECORDS-DIFFERENT CYL@VM01167 00716000 LA R5,PAGESRCH ADDRESS OF SEARCH ID EQUAL CCW @VM01167 00717000 CLC PAGEHEAD-IOBLOK(,R2),PAGEHEAD SAME TRACK/HEAD ? @VM01167 00718000 BE TIC2305 YES, SAME TRACK AND ADJACENT @VM01167 00719000 * RECORDS - TIC TO SEARCH ID EQUAL CCW 00720000 B SK2305 CHAIN TO SEEK WITHOUT SET SECTOR @VM01167 00721000 SPACE 00722000 RCDONE DS 0H @V408246 00723000 OI PAGESK+4,8 PCI START OF SLOT 1 REQUEST @V408246 00724000 CLI PAGESRCD-IOBLOK(R2),THREE PRIOR IOB FOR SLOT 3? @V408246 00725000 BNE TIC2305 NO,CHAIN IN SEEK AND SECTOR CCWS @VM01167 00726000 SK2305 LA R5,PAGESS ADDRESS OF SET SECTOR CCW @VM01167 00727000 MVC PAGESS,PAGESK OVERLAY SET SECTOR WITH SEEK CCW @VM01167 00728000 TIC2305 ST R5,PAGESNS-IOBLOK(,R2) STORE 'TIC TO' ADDRESS @VM01167 00729000 MVI PAGESNS-IOBLOK(R2),TICOP MOVE IN TIC OP-CODE @VM01167 00730000 BR R14 RETURN TO CALLER @VM01167 00731000 SPACE 00732000 PAGE3330 LA R15,CCW3330 3330 CHAIN IOBLOK ROUTINE @VM01167 00733000 SORT3330 CLC PAGEHEAD,PAGEHEAD-IOBLOK(R3) SAME TRACK/HEAD ? @VM01167 00734000 BE EQ3330 YES - SORT BY RECORD NUMBER @VM01167 00735000 NXT3330 LR R2,R3 SAVEBACK CHAIN ADDRESS @VM01167 00736000 L R3,PAGEIOB-IOBLOK(R2) GET NEXT IOBLOK @V408246 00737000 LTR R3,R3 IS THERE ONE ? @V408246 00738000 BZ ENDIOB END OF CHAIN - INSERT @VM01167 00739000 B SORT3330 SORT WITH THIS TASK @VM01167 00740000 SPACE 00741000 EQ3330 CLC PAGERCD,PAGERCD-IOBLOK(R3) COMPARE RECORDS @VM01167 00742000 BL INIOB LOW - INSERT IOBLOK HERE @VM01167 00743000 LR R2,R3 SAVE BACK CHAIN ADDRESS @VM01167 00744000 L R3,PAGEIOB-IOBLOK(R2) GET NEXT IOBLOK @V408246 00745000 LTR R3,R3 IS THERE ONE ? @V408246 00746000 BZ ENDIOB END OF CHAIN - INSERT HERE @VM01167 00747000 CLC PAGEHEAD,PAGEHEAD-IOBLOK(R3) SAME TRACK/HEAD ? @VM01167 00748000 BE EQ3330 YES - SAME TRACK/HEAD @VM01167 00749000 B INIOB HIGH - INSERT IOBLOK HERE @VM01167 00750000 SPACE 00751000 * CHAIN TIC IN IOBLOK(R2) TO CORRECT CCW IN NEXT IOBLOK(R10) 00752000 SPACE 00753000 CCW3330 LA R5,PAGESK ADDRESS OF SEEK CCW @VM01167 00754000 OI PAGESK+4,8 PCI START OF FOLLOWING REQUEST @V408246 00755000 CLC PAGEHEAD,PAGEHEAD-IOBLOK(R2) SAME TRACK/HEAD ? @VM01167 00756000 BNE UNEQHD NO, CHECK FOR SLOT 3 TO SLOT 1 @VA04482 00757000 IC R4,PAGERCD-IOBLOK(,R2) GET RECORD NUMBER @VM01167 00758000 LA R4,1(,R4) UPDATE BY ONE @VM01167 00759000 CLM R4,B'0001',PAGERCD ADJACENT RECORDS ? @VM01167 00760000 BNE TICSETS NO, TIC TO SET SECTOR @VA04482 00761000 LA R5,PAGESRCH YES, TIC TO SEARCH ID EQUAL CCW @VM01167 00762000 B CHAINTIC GO STORE TIC ADDRESS @VM01167 00763000 UNEQHD CLI PAGESRCD-IOBLOK(R2),THREE PRIOR IOB FOR SLOT 3? @VA04482 00764000 BNE CHAINTIC NO - TIC TO SEEK AND SET SETOR @VM01167 00765000 CLI PAGESRCD,ONE IS THIS REQUEST FOR SLOT 1 @VA04482 00766000 BNE CHAINTIC NO - TIC TO SEEK AND SET SECTOR @VM01167 00767000 MVC PAGESS,PAGESK OVERLAY SET SECTOR WITH SEEK @VM01167 00768000 TICSETS LA R5,PAGESS SET TIC ADDRESS TO SET SECTOR @VA04482 00769000 CHAINTIC ST R5,PAGESNS-IOBLOK(,R2) STORE 'TIC TO' ADDRESS @VM01167 00770000 MVI PAGESNS-IOBLOK(R2),TICOP MOVE IN TIC OP-CODE(08)@VM01167 00771000 BR R14 RETURN TO CALLER @VM01167 00772000 SPACE 00773000 PAGE3340 LA R15,CCW3340 3340 CHAIN IOBLOK ROUTINE @VM01167 00774000 SPACE 00775000 SORT3340 CLC PAGESRCD,PAGESRCD-IOBLOK(R3) COMPARE @VM01167 00776000 * 3340 SLOT NUMBERS 00777000 BL INIOB LOW- SORT IN ASCENDING ORDER @VM01167 00778000 BE EQ3340 SLOT EQUAL - CHECK FOR EQUAL HEAD@V2A2029 00779000 NXT3340 LR R2,R3 SAVE BACKCHAIN ADDRESS @V2A2029 00780000 L R3,PAGEIOB-IOBLOK(R2) NEXT SORTED TASK @V408246 00781000 LTR R3,R3 END OF CHAIN ? @V408246 00782000 BZ ENDIOB END OF CHAIN - INSERT IOBLOK @VM01167 00783000 B SORT3340 TRY NEXT TASK @V2A2029 00784000 SPACE 00785000 EQ3340 CLC PAGECYL,PAGECYL-IOBLOK(R3) SAME CYLINDER ? @VM01167 00786000 BNE UPDT3340 NO, UPDATE SLOT VALUE @VM01167 00787000 CLC PAGEHEAD,PAGEHEAD-IOBLOK(R3) COMPARE LOGICAL @VM01167 00788000 * HEADS ? 00789000 BE EQHEADS BRANCH - HEADS EQUAL @V2A2029 00790000 UPDT3340 IC R4,PAGESRCD GET SLOT NUMBER @VM01167 00791000 LA R4,2(,R4) AND UPDATE TO NEXT SLOT (PLUS 2) @V2A2029 00792000 STC R4,PAGESRCD AND SAVE @VM01167 00793000 B NXT3340 TRY NEXT 3340 TASK @V2A2029 00794000 SPACE 00795000 EQHEADS CLC PAGESECT,PAGESECT-IOBLOK(R3) COMPARE SECTORS @VM01167 00796000 BL INIOB LOWER- INSERT BEFORE R3 @VM01167 00797000 LR R2,R3 SAVE BACKCHAIN ADDRESS @V2A2029 00798000 L R3,PAGEIOB-IOBLOK(R2) NEXT TASK ADDRESS @V408246 00799000 LTR R3,R3 END OF CHAIN ? @V408246 00800000 BZ ENDIOB END OF CHAIN - INSERT IT @VM01167 00801000 B INIOB CORRECT SLOT - INSERT HERE @VM01167 00802000 SPACE 00803000 * CHAIN TIC IN IOBLOK(R2) TO CORRECT CCW IN NEXT IOBLOK(R10) 00804000 SPACE 00805000 CCW3340 DS 0H @V408246 00806000 OI PAGESK+4,8 PCI START OF FOLLOWING REQUEST @V408246 00807000 CLC PAGECYL(2),PAGECYL-IOBLOK(R2) SAME CYLINDER? @V408246 00808000 BNE SK3340 NO, MUST HAVE SEEK CCW @VM01167 00809000 LA R5,PAGESRCH ADDRESS OF SEARCH ID EQUAL @VM01167 00810000 CLC PAGESRCD,PAGESRCD-IOBLOK(R2) SAME TRACK ? @VM01167 00811000 BE TIC3340 YES, SET TIC ADDRESS TO SEARCH @V2A2029 00812000 * ID EQ BYPASSING SEEK AND SET SECTOR CCWS 00813000 SK3340 LA R5,PAGESK ADDRESS OF SEEK COMMAND CCW @VM01167 00814000 IC R4,PAGESRCD-IOBLOK(,R2) GET PREVIOUS SLOT @VM01167 00815000 LA R4,1(,R4) NUMBER AND UPDATE BY ONE @V2A2029 00816000 CLM R4,B'0001',PAGESRCD IS THIS THE NEXT SLOT ? @VM01167 00817000 BNE TIC3340 NO - LEAVE SEEK AND SET SECTOR IN@V2A2029 00818000 CLC PAGESECT-IOBLOK(,R2),PAGESECT RECORD 2 OF ONE @VM01167 00819000 * EVEN/ODD TRACK TO RECORD ONE OF NEXT ODD/EVEN TRACK ? 00820000 BNH TIC3340 NO - LEAVE SEEK AND SET SECTOR IN@V2A2029 00821000 * RECORD 2 VALUE (20) TO RECORD ONE VALUE (02) 00822000 MVC PAGESS,PAGESK OVERLAY SET SECTOR WITH SEEK CCW @VM01167 00823000 LA R5,PAGESS POINT TO SEEK CCW @VM01167 00824000 TIC3340 ST R5,PAGESNS-IOBLOK(,R2) STORE TIC TO ADDRESS @VM01167 00825000 MVI PAGESNS-IOBLOK(R2),TICOP MOVE IN TIC OP-CODE @VM01167 00826000 BR R14 RETURN TO CALLER @VM01167 00827000 SPACE 00828000 INIOB LTR R2,R2 REPLACING 1ST IOBLOK ? @VM01167 00829000 BNZ TWOIOBS NO - @VM01167 00830000 LM R1,R2,IOBFPNT-IOBLOK(R3) UNCHAIN 1ST IOBLOK @VM01167 00831000 STM R1,R2,IOBFPNT AND CHAIN IN NEW IOBLOK @VM01167 00832000 ST R10,IOBFPNT-IOBLOK(,R2) AND CHAIN IN @VM01167 00833000 ST R10,IOBBPNT-IOBLOK(,R1) NEW 1ST IOBLOK @VM01167 00834000 B ONEIOB DO NOT UPDATE OLD IOBLOK @VM01167 00835000 SPACE 00836000 TWOIOBS BALR R14,R15 UPDATE TIC ADDRESS @VM01167 00837000 ST R10,PAGEIOB-IOBLOK(,R2) CHAIN IN NEW IOBLOK @VM01167 00838000 ONEIOB LR R2,R10 NEW IOBLOK ADDRESS @VM01167 00839000 LR R10,R3 ADDRESS OF THE NEXT IOBLOK @VM01167 00840000 SPACE 00841000 ENDIOB BALR R14,R15 ADJUST TIC ADDRESS TO NEXT IOBLOK@VM01167 00842000 ST R10,PAGEIOB-IOBLOK(,R2) CHAIN IN NEW IOBLOK @VM01167 00843000 LTR R10,R6 REPLACED TASK? @V408246 00844000 BNZ ENDIOBA YES @V407594 00845000 AIF (NOT &AP).NOAP3 **AIF*** 00846000 LA R1,RDEVIOBL PT TO RDEV LOCK @V407594 00847000 LOCK RELEASE,TYPE=PRIVATE UNLOCK RDEVBLOK @V407594 00848000 .NOAP3 ANOP **ANOP** 00849000 B EXIT DONE WITH THIS REQUEST @V407594 00850000 ENDIOBA DS 0H HERE IF REPLACED TASK @V407594 00851000 MVC PAGESNS(7),MODELNOP RESTORE SENSE @V408246 00852000 LM R2,R3,MODELSS PROTO-TYPE SET SECTOR @V408246 00853000 ALR R2,R10 FILL IN CORRECT ADDRESS @V408246 00854000 STM R2,R3,PAGESS @V408246 00855000 SR R6,R6 CLEAR . . @V408246 00856000 ST R6,PAGEIOB . . NEXT REQUEST POINTER @V408246 00857000 B SLOTSORT REORDER IN CHAIN @V408246 00858000 SPACE 00859000 QUEUEIO LA R1,RDEVIOBL PT TO RDEV LOCK @V407594 00860000 LOCK RELEASE,TYPE=PRIVATE UNLOCK RDEVBLOK @V407594 00861000 CALL DMKIOSQR SCHEDULE PAGING I/O @V407594 00862000 L R1,DMKPAGPS ADD 1 TO COUNT OF 00863000 AL R1,F1 PAGING START I/O'S 00864000 ST R1,DMKPAGPS AND RESTORE 00865000 EXIT EQU * UPDATE I/O COUNT FOR OVERHEAD, AND EXIT 00866000 L R15,PAGIOCTR GET PAGE I/O COUNT 00867000 BCT R15,*+8 DECREMENT AND TEST 00868000 BAL R14,OVERHEAD WHEN 0, GO RE-CALCULATE PAGE OVERHEAD 00869000 ST R15,PAGIOCTR UPDATE PAGE I/O COUNT 00870000 L R1,DMKPAGQR GET PAGE I/O FOR QUERY COMMAND @VA08859 00871000 AL R1,F1 ADD 1 TO IT AND SAVE @VA08859 00872000 ST R1,DMKPAGQR ..... @VA08859 00873000 B GETQ GO LOOK FOR MORE REQUESTS 00874000 SPACE 00875000 EXITX CHARGE SWITCH,ASYSVM SET R11 TO ASYSVM FOR DISPATCH @V407594 00876000 AIF (NOT &AP).NOAP11 @VA10805 00876010 TM APSTAT1,APUOPER RUNNING AP? @VA09257 00876100 BNO NORMEXT NOT AP EXIT NORMALLY. @VA09257 00876200 L R15,PREFIXA ACCESS OTHER PSA @VA09257 00876300 CLI XTNDLOCK-PSA(R15),0 IS SYSTEM EXTENDING? @VA09257 00876400 BE NOEXTEN NO NOT EXTENDING FREE STORAGE. @VA09257 00876500 NORMEXT DS 0H @VA09257 00876600 .NOAP11 ANOP 00876610 GOTO DMKDSPCH ALL DONE -- LEAVE @V407594 00877000 AIF (NOT &AP).NOAP12 @VA10805 00877010 NOEXTEN DS 0H @VA09257 00877100 L R15,PREFIXB ACCESS OTHER PSA @VA09257 00877200 TM XCPEND-PSA(R15),XCDISP DISPATCH PENDING? @VA09257 00877300 BZ NORMEXT NO DISPATCH PENDING. @VA09257 00877400 LOCK RELEASE,TYPE=SYS YES,RELEASE THE LOCK @VA09257 00877500 GOTO DMKDSPRU UNLOCKED ENTRY TO DSP @VA09257 00877600 .NOAP12 ANOP 00877610 SPACE 00878000 PRINT DATA 00879000 HDTABLE DS 0H TABLE OF HEAD NUMBERS FOR 2314 PAGES 00880000 DC AL1(00,00,01,01,02,03,03,04) 00881000 DC AL1(05,05,06,06,07,08,08,09) 00882000 DC AL1(10,10,11,11,12,13,13,14) 00883000 DC AL1(15,15,16,16,17,18,18,19) 00884000 PRINT NODATA 00885000 CCW3350 LA R5,PAGESK ADDRESS OF SEEK CCW @V304498 00886000 OI PAGESK+4,8 PCI START OF FOLLOWING REQUEST @V408246 00887000 CLI PAGESRCD,ONE IS THIS SLOT ONE? @VA04482 00888000 BE RCDON50 YES, CHECK PREVIOUS SLOT @VA04482 00889000 IC R4,PAGESRCD-IOBLOK(R2) GET PRIOR IOB SLOT NO. @VA04482 00890000 LA R4,1(R4) BUMP SLOT NUMBER BY ONE @VA04482 00891000 CLM R4,B'0001',PAGESRCD ADJACENT SLOTS? @VA04482 00892000 BNE TIC3350 NO, CHAIN TO SEEK AND SET SECTOR @VA04482 00893000 CLC PAGECYL,PAGECYL-IOBLOK(R2) SAME CYLINDER ? @V304498 00894000 BNE SK3350 NO-ADJACENT RECORDS-DIFFERENT CYL@V304498 00895000 LA R5,PAGESRCH ADDRESS OF SEARCH ID EQUAL CCW @V304498 00896000 CLC PAGEHEAD-IOBLOK(,R2),PAGEHEAD SAME TRACK/HEAD ? @V304498 00897000 BE TIC3350 YES, SAME TRACK AND ADJACENT @V304498 00898000 * RECORDS - TIC TO SEARCH ID EQUAL 00899000 B SK3350 CHAIN TO SEEK WITHOUT SET SECTOR @V304498 00900000 SPACE 00901000 RCDON50 CLC PAGESRCD-IOBLOK(1,R2),LASTSLOT Highest slot? HRC106DK 00902100 BNE TIC3350 NO,CHAIN IN SEEK AND SECTOR CCWS @V304498 00903000 SK3350 LA R5,PAGESS ADDRESS OF SET SECTOR CCW @V304498 00904000 MVC PAGESS,PAGESK OVERLAY SET SECTOR WITH SEEK CCW @V304498 00905000 TIC3350 ST R5,PAGESNS-IOBLOK(,R2) STORE 'TIC TO' ADDRESS @V304498 00906000 MVI PAGESNS-IOBLOK(R2),TICOP MOVE IN TIC OP-CODE @V304498 00907000 BR R14 RETURN TO CALLER @V304498 00908000 SPACE 00909000 EJECT 00910000 *. 00911000 * B. OPERATION OF THE PAGING INTERRUPT HANDLER - 00912000 * 1. LOCATE THE CPEXBLOK FOR THE TASK THAT INITIATED THE PAGING 00913000 * OPERATION AND UNCHAIN IT FROM THE INTRANSIT QUEUE 00914000 * 2. IF NO ERRORS OCCURED FOR THE OPERATION, CALL DMKSTKCP TO 00915000 * STACK THE DEFERED REQUESTS FOR EXECUTION, RETURN THE USED 00916000 * IOBLOK TO THE STACK, AND EXIT VIA A GOTO TO DMKDSPCH 00917000 * 3. IF ERRORS OCCURED IN A CHANNEL PROGRAM, FLAG THE CPEXBLOKS 00918000 * TO BE UNSTACKED SO THAT DMKDSPCH WILL TRANSFER CONTROL TO 00919000 * TO THE CALLING ROUTINE WITH A CONDITION CODE OF 4 00920000 * 4. IF 5 CONSECTIVE ERRORS OCCUR ON A PAGING DEVICE; ERROR 00921000 * MESSAGE DMKPAG415E WILL BE ISSUED TO THE SYSTEMS OPERATOR 00922000 * AND THE SYSTEM WILL THEN ENTER A DISABLED WAIT STATE. 00923000 *. 00924000 SPACE 00925000 WAITPAGE EQU * 00926000 USING *,R12 ADDRESSABILITY ON ENTRY 00927000 L R12,=A(DMKPAG) STANDARD ADDRESSABILITY 00928000 USING DMKPAG,R12 00929000 SPACE 00930000 SR R6,R6 CLEAR PCI SWITCH @V408246 00931000 SLR R9,R9 CLEAR ERROR SWITCH 00932000 TM IOBCSW+5,IL INCORRECT LENGTH ERROR @VM08726 00933000 BO WTPGERR YES, FORCE FATAL ERROR CONDITION @V408246 00934000 TM IOBSTAT,IOBFATAL UNRECOVERABLE ERROR ? @VM08726 00936000 BO WTPGERR YES, ANYLIZE FURTHER @V408246 00937000 STC R9,PGERCTR ZERO PAGE ERROR COUNT @V408246 00938000 TM IOBCSW+4,X'FF'-(CUE+CE+DE) MUST BE ZERO @V408246 00939000 BNZ WTPGERR ERROR @V408246 00940000 TM IOBCSW+4,CE+DE MUST BE ONE @V408246 00941000 BO GETCPEX YES,OK @V408246 00942000 CLI IOBCSW+5,PCI JUST PCI? @V408246 00943000 BNE WTPGERR NO,ASSUME ERRORS THEN @V408246 00944000 L R6,IOBCSW @V408246 00945000 LA R6,0(,R6) LAST CCW POINTER @V408246 00946000 LR R1,R10 SAVE COPIED IOBLOK @V408246 00947000 L R10,IOBCAW POINT TO PAGECCWS @V408246 00948000 SH R10,=Y(PAGECCWS-IOBLOK) BACK-UP TO START OF @V408246 00949000 * ORIGINAL 00950000 LA R0,IOBSIZE GET RID OF COPIED BLOCK @V408246 00951000 CALL DMKFRET @V408246 00952000 GETCPEX DS 0H PROCESS NEXT IOBLOK @V408246 00953000 LTR R6,R6 PCI? @V408246 00954000 BZ GETCPEXA NO @V408246 00955000 LA R1,PAGESK 1ST CCW @V408246 00956000 CR R6,R1 IN THIS TASK? @V408246 00957000 BL GETCPEXA NO @V408246 00958000 LA R1,PAGESNS+8 LAST CCW @V408246 00959000 CR R6,R1 IN THIS TASK? @V408246 00960000 BNH WTPGXIT YES, DONE @V408246 00961000 GETCPEXA DS 0H @V408246 00962000 CLI PAGERW,X'05' PAGE WRITE ?? 00963000 BNE UNTRANS NO --- 00964000 L R2,PAGESOUT GET PENDING WRITE COUNT 00965000 BCTR R2,0 DECREMENT 00966000 ST R2,PAGESOUT AND SAVE 00967000 SPACE 00968000 UNTRANS EQU * 00969000 L R4,PAGEIOB SAVE NEXT POINTER @V408246 00970000 ICM R1,B'1111',IOBMISC ANY STACKED REQUESTS? @V408246 00971000 BZ UNSTCKA NO (PCI MUST HAVE CLEARED) @V408246 00972000 XC IOBMISC,IOBMISC YES, MAKE SURE CLEARED NOW @V408246 00973000 OI PAGERW+4,SKIP AVOID ANY PROBLEMS WITH RETRY @V408246 00974000 LM R2,R3,CPEXFPNT AND UNCHAIN CPEXBLOK FROM TRANSIT QUEUE 00975000 ST R2,CPEXFPNT-CPEXBLOK(,R3) --- 00976000 ST R3,CPEXBPNT-CPEXBLOK(,R2) --- 00977000 SPACE 2 00978000 UNSTACK L R3,CPEXMISC SAVE POINTER TO NEXT CPREQUEST 00979000 AIF (NOT &AP).NOAP4 **AIF*** 00980000 CLI CPEXADD,0 DID DMKPTR INDICATE AFFINITY @V407594 00981000 BE CALLSTK NO, STACK FOR EITHER PROCESSOR @V407594 00982000 CLC CPEXADD(1),LPUADDR+1 AFFINITY FOR THIS PROC'R @V407594 00983000 STC R9,CPEXADD INSERT POSSIBLE ERROR FLAG @V407594 00984000 BNE STKOTHER NO- STACK FOR OTHER PROCESSOR @V407594 00985000 CALL DMKSTKMP STACK FOR CURRENT PROCESSOR ONLY @V407594 00986000 B NXTSTK LOOK FOR CHAINED CPEXBLOK @V407594 00987000 STKOTHER CALL DMKSTKOP STACK FOR OTHER PROCESSOR ONLY @V407594 00988000 B NXTSTK LOOK FOR CHAINED CPEXBLOK @V407594 00989000 CALLSTK DS 0H STACK CPEXBLOCK FOR EITHER PROCR @V407594 00990000 .NOAP4 ANOP **ANOP** 00991000 STC R9,CPEXADD INSERT POSSIBLE ERROR FLAG 00992000 CALL DMKSTKCP STACK THE CURRENT BLOK 00993000 NXTSTK DS 0H @V407594 00994000 LTR R1,R3 ANY MORE BLOKS ?? 00995000 BNZ UNSTACK YES -- GO UNSTACK THEM 00996000 UNSTCKA DS 0H @V408246 00997000 LTR R6,R6 PCI? @V408246 00998000 BNZ UNSTACK2 YES, FOREGO RELEASE UNTIL END @V408246 00999000 UNSTACK1 DS 0H @VA10137 01000100 L R0,IOBSTACK GET TOP OF IOBSTACK @VA10137 01000425 ST R10,IOBSTACK AND PUSH IT 01001000 ST R0,IOBMISC DOWN 01002000 LM R2,R3,MODELNOP CLEAR OUT 01003000 STM R2,R3,PAGESNS THE TIC @VM01167 01004000 ST R1,PAGEIOB CLEAR POINTER TO SLOT-SORTED IOBLOKS 01005000 MVI PAGESK+4,CC MAKE SURE PCI IS CLEARED @V408246 01006000 UNSTACK2 LTR R10,R4 WERE THERE ANY SLOT-SORTED IOBLOK(S) ? 01007000 BNZ GETCPEX YES -- GO PROCESS 01008000 WTPGXIT DS 0H @V408246 01009000 GOTO DMKDSPCH OTHERWISE, LEAVE 01010000 EJECT 01011000 * 01012000 * HANDLE SERIOUS PAGING I/O ERRORS 01013000 * 01014000 * 01015000 WTPGERR DS 0H @V408246 01016000 CL R10,IOBLINK LAST IOBLOK ? @VA11208 01017000 BE WTPGERRX YES @VA11208 01018000 LA R0,IOBSIZE NO,RETURN @VA11208 01019000 LR R1,R10 COPIED IOBLOCK @V408246 01020000 CALL DMKFRET @V408246 01021000 B WTPGXIT EXIT @V408246 01022000 WTPGERRX DS 0H @V408246 01023000 ICM R4,B'1111',PAGEIOB CHAINED IOBLOK POINTER @VA09024 01024100 BZ WTPGERRB NONE @V408246 01025000 LH R1,IOBRADD GET THE REAL DEVIVE ADDRESS @VA09024 01026100 CALL DMKSCNRU GET RDEVBLOK ADDRESS FOR IOS @VA09024 01026200 BNZ WTPGERRC SOMETHING IS SICK, RETURN @VA09024 01026300 WTPGERRA DS 0H @VA09024 01026400 MVC PAGESNS(7),MODELNOP NOP CCW @V408246 01036000 MVI PAGESS,NOPCODE CHANGE POSSIBLE SK,SK TO SK,NOP @V408246 01037000 NI PAGESK+4,255-8 RESET POSSIBLE PCI FLAG @V408246 01038000 NI PAGESS+4,255-8 . . @V408246 01039000 NI IOBSTAT,255-IOBFATAL RESET FATAL FLAG @V408246 01040000 ST R9,PAGEIOB @V408246 01041000 CALL DMKIOSQR AND RESCHEDULE INDIVIDUALLY @V408246 01042000 LTR R10,R4 NEXT ON CHAIN? @V408246 01043000 BZ WTPGXIT NONE @V408246 01044000 L R4,PAGEIOB SAVE CHAIN POINTER @V408246 01045000 B WTPGERRA REPEAT UNTIL END OF CHAIN @V408246 01046000 WTPGERRB DS 0H @V408246 01047000 L R1,IOBMISC CPEXBLOK POINTER FOR REQUEST @V408246 01048000 L R5,CPEXR5 SWAPTABLE POINTER @V408246 01049000 TM SWPFLAG,SWPRECMP NORMAL PAGING AREA? @V408246 01050000 BNZ WTPGERRC NO, BYPASS FATAL SYSTEM ERROR @V408246 01051000 * TESTING 01052000 IC R9,PGERCTR INCREMENT @V408246 01053000 LA R9,1(,R9) FATAL PAGE I/O COUNTER @V408246 01054000 STC R9,PGERCTR @V408246 01055000 C R9,F5 HAVE FIVE CONSECATIVE ERRORS @V408246 01056000 * OCCURED? 01057000 BH PERMERR YES - ISSUE DMKPAG415E MESSAGE @V408246 01058000 WTPGERRC DS 0H @V408246 01059000 SLR R9,R9 SET-UP I/O ERROR INDICATOR FOR @V408246 01060000 * RETURN 01061000 BCTR R9,0 I/O ERROR RETURN = -1 @V408246 01062000 B GETCPEX REJOIN NORMAL CODE @V408246 01063000 * 01064000 * UNACCEPTABLE PAGING I/O ERROR ACTIVITY 01065000 * 01066000 * HERE IF PERMANENT PAGING ERROR CONDITION 01067000 * ASSUME THAT INFO. IN 'IOBRADD' IS NOT VALID 01068000 PERMERR EQU * @VA03787 01069000 L R1,IOBMISC GET CPEXBLOK POINTER @VA03787 01070000 L R5,CPEXR5 THEN GET SWPTABLE ENTRY @VA03787 01071000 SR R8,R8 CLEAR REG 8 @VA03787 01072000 IC R8,SWPCODE GET VOLUME CODE @VA03787 01073000 SLL R8,3 MAKE IT INDEX FOR OWNED LIST @VA03787 01074000 AL R8,=A(DMKSYSOW) POINT TO PROPER ENTRY @VA03787 01075000 LH R8,OWNDRDEV-OWNDLIST(,R8) GET RDEVBLOK INDEX@VA03787 01076000 SLL R8,3 CONVERT IT TO BYTES @VA03787 01077000 AL R8,ARIODV NOW POINT TO THE RDEVBLOK @VA03787 01078000 CALL DMKSCNRD GO FIND 'CUU' ADDRESS @VA03787 01079000 CALL DMKCVTBH CONVERT IT TO HEX 01080000 STCM R1,B'0111',PAGEDEV PUT DEVICE ADDR. IN THE MESSAGE 01081000 LA R0,MSG415LN SIZE OF MESSAGE INTO R0 01082000 LA R1,MSG415 ADDRESS OF MESSAGE INTO R1 01083000 LA R2,PSW415 GET PAG WAIT STATE CODE @V407510 01084000 GOTO DMKMCHST TERMINATE SYSTEM @V407510 01085000 EJECT 01086000 *. 01087000 * C. OPERATION OF THE PAGING LOAD CALCULATOR 01088000 * 1. STORE TOD CLOCK AND COMPUTE LENGTH OF RECORDING INTERVAL 01089000 * 2. CONVERT THE TIME TO MICROSECONDS, INSURING THAT IT FITS IN 01090000 * ONE WORD (31 BITS PLUS SIGN) 01091000 * 3. OBTAIN PAGE-WAIT TIME OVER THE INTERVAL 01092000 * 4. PROJECT PAGE-WAIT PERCENTAGE FOR NEXT INTERVAL 01093000 * 5. CALCULATE THE PAGING RATE IN PAGES/SECOND, SAVE IN PSA 01094000 * 6. CALCULATE THE RATIO OF STOLEN TO FLUSHED PAGES, AND STORE 01095000 * IN PGSRATIO IN DMKPSA. 01096000 * 7. RESET COUNTERS AND VALUES FOR THE START OF A NEW MEASURE- 01097000 * MENT INTERVAL, AND RETURN TO MAINLINE CODE 01098000 *. 01099000 SPACE 2 01100000 OVERHEAD EQU * HERE TO RE-CALCULATE PAGING OVERHEAD 01101000 STM R10,R13,PAGSAVRG SAVE REGS @VM40121 01102000 STCK DMKPAGSP REMEMBER END OF RECORDING PERIOD 01103000 BC 3,DOWNWEGO CLOCK NOT FUNCTIONING @VA04301 01104000 LM R0,R3,DMKPAGST GET START AND END OF RECORDING PERIOD 01105000 LA R4,1 GET CONSTANT FOR ARITHMETIC 01106000 SR R6,R6 CLEAR SHIFT COUNTER 01107000 LA R7,100 GET CONSTANT FOR PERCENTAGE CALCULATIONS 01108000 SLR R3,R1 CALCULATE LENGTH OF RECORDING PERIOD 01109000 BC 11,*+6 ... 01110000 SLR R2,R4 ... 01111000 SLR R2,R0 ... 01112000 SRDL R2,12 AND CONVERT TO MICROSECONDS 01113000 LR R0,R2 SAVE THE ELAPSED TIME 01114000 LR R1,R3 ... 01115000 D R0,=F'10000' CONVERT TO 1/100'S OF A SECOND 01116000 LTR R15,R1 SAVE AND TEST THE RESULT 01117000 BP *+8 OK TO USE -- 01118000 LA R15,1 SET MAXIMUM RATE 01119000 L R1,DMKPAGIC GET NUMBER OF PAGIO'S DONE 01120000 MR R0,R7 TIMES 100 01121000 DR R0,R15 AND GET PAGING RATE 01122000 L R15,PREFIXA OBTAIN CURRENT REAL PSA VALUE @VM40121 01123000 STH R1,PAGERATE(R15) PAGE RATE TO ABSOLUTE 0 @V4M0121 01124000 BAL R15,SHIFTER MAKE SURE THAT IT FITS IN ONE REGISTER 01125000 SR R10,R10 INDEX TO MAIN PROC WAITSAVE VALUE@V4M0121 01126000 SR R11,R11 PREFIX VALUE FOR REAL PSA @V4M0121 01127000 LA R13,1 COUNTER - ONE FOR UP MODE @V4M0121 01128000 TM APSTAT1,APUOPER APU OPERATIONAL ? @V4M0121 01129000 BNO COMPSTAT NO - ONLY 1 PASS THRU CODE BELOW @V4M0121 01130000 LA R13,2 YES - MAKE 2 PASSES THRU CODE @V4M0121 01131000 * BELOW TO COMPUTE STATISTICS FOR 01132000 * BOTH PROCESSORS. 01133000 COMPSTAT DS 0H @VM00029 01133100 TM APSTAT1,PROCIPL IS THIS THE IPL'ED PROCESSOR? @VMV0008 01134100 BO COMPSTA2 YES, BRANCH @VM00029 01135100 LA R10,8 NO - BEFORE COMPUTE PAGEING STATS@V4M0121 01136000 * SET INDEX TO AP WORKSAVE VALUE. 01137000 COMPSTA2 DS 0H @VM00029 01138100 L R0,DMKPAGWS(R10) 1ST WORD OF SAVED PG WT TIME @VMH0012 01139000 L R1,DMKPAGWS+N4(R10) 2ND WD OF SAVED PG WT TIME @VMH0012 01140000 L R8,PAGEWAIT(R11) 1ST WORD OF CURRENT PG WT TOTAL@V4M0121 01141000 L R9,PAGEWAIT+N4(R11) 2ND WORD OF PAGE WAIT TOTAL @V4M0121 01142000 ST R8,DMKPAGWS(R10) SAVE PAGEWAIT FOR @VMH0012 01143000 ST R9,DMKPAGWS+N4(R10) NEXT TIME @VMH0012 01144000 SPACE 01145000 SLR R1,R9 COMPUTE PAGE WAIT OVER INTERVAL 01146000 BC 8+2+1,*+6 ... 01147000 SLR R0,R4 .. 01148000 SLR R0,R8 . 01149000 SRDL R0,12 AND CONVERT TO MICROSECONDS 01150000 SPACE 01151000 LTR R1,R1 REMEMBER SETTING OF HIGH ORDER 01152000 BALR R15,R0 BIT IN LOW ORDER REGISTER 01153000 SPACE 01154000 N R1,=XL4'7FFFFFFF' CLEAR HIGH ORDER BIT 01155000 LR R5,R0 SAVE HIGH ORDER WORD 01156000 MR R0,R7 MULTIPLY BY 100 FOR PERCENTAGE 01157000 MR R4,R7 MULTIPLY HIGH ORDER WORD 01158000 ALR R0,R5 AND ADD IN OVERFLOW 01159000 SPM R15 WAS HIGH ORDER BIT ON ? 01160000 BNM ALIGN NO -- 01161000 SRL R7,1 ALIGN MULTIPLIER WITH MISSING BIT 01162000 ALR R0,R7 AND ADD IN PARTIAL SUM 01163000 ALIGN SRDL R0,0(R6) ALIGN WITH DIVISOR 01164000 DR R0,R3 GET PAGING OVERHEAD PERCENTAGE 01165000 LH R0,PAGELOAD(R11) GET PREVIOUS PAGE LOAD VALUE. @V4M0121 01166000 ALR R0,R0 TIMES 2 01167000 AH R0,PAGELOAD(R11) TIMES 3 @V4M0121 01168000 ALR R1,R0 PLUS RECENT LOAD 01169000 SRL R1,2 /4 FOR SMOOTHED AVERAGE 01170000 STH R1,PAGELOAD(R11) AND SAVE IN EACH REAL PSA. @V4M0121 01171000 X R10,F08 INVERT WAITSAVE INDEX @V4M0121 01172000 L R11,PREFIXB ADDR OF OTHER PREFIX AREA @V4M0121 01173000 BCT R13,COMPSTA2 COMPUTE PAGING STATISTICS FOR @VM00036 01174100 * THE OTHER PROCESSOR. 01175000 LM R10,R13,PAGSAVRG RESTORE CALLERS REQUIRED REGS @V4M0121 01176000 SR R0,R0 CLEAR OUT 01177000 STCK DMKPAGST REMEMBER START OF NEXT RECORDING PERIOD 01178000 BC 12,CLOCKOK IS CLOCK FUNCTIONING? @VA04301 01179000 DOWNWEGO GOTO DMKCVTAB CLOCK DAMAGED...ABEND CVT001 @VA04301 01180000 CLOCKOK EQU * @VA04301 01181000 L R15,DMKPAGIC GET NEXT RECORDING PERIOD 01182000 BR R14 AND RETURN TO CALLER 01183000 SPACE 01184000 SHIFTER EQU * HERE TO TRUNCATE DIVISOR TO ONE WORD 01185000 LTR R2,R2 ANY DATA IN HIGH ORDER WORD ?? 01186000 BZ SHIFTER1 NO - INSURE NON-NEGATIVE 01187000 SRDL R2,1 SHIFT ONE 01188000 ALR R6,R4 AND COUNT NUMBER OF SHIFTS 01189000 B SHIFTER CONTINUE 01190000 SHIFTER1 LTR R3,R3 INSURE NON-NEGATIVE VALUE -- 01191000 BCR 11,R15 IF NOT MINUS, EXIT 01192000 SRL R3,1 OTHERWISE, SHIFT ONE MORE 01193000 ALR R6,R4 BUMP SHIFT COUNT 01194000 BR R15 AND EXIT 01195000 SPACE 01196000 PAGSAVRG DS 4F OVERHEAD REG SAVEAREA @V4M0121 01197000 F08 DC F'08' BIT TO INVERT WAITSAVE INDEX @V4M0121 01198000 SPACE 01199000 DMKPAGWS DS 0F @VMH0012 01200000 DC X'7FFFFFFF' WAITSAVE VALUE FOR MAIN PROC @V4M0121 01201000 DC X'FFFFF000' @V4M0121 01202000 DC X'7FFFFFFF' WAITSAVE VALUE FOR THE APU @V4M0121 01203000 DC X'FFFFF000' @V4M0121 01204000 EJECT 01205000 MODELCCW DS 0D PROTOTYPE PAGING CCWS 01206000 CCW 7,PAGESEEK-IOBLOK,CC,6 SEEK 01207000 MODELSS CCW 35,PAGESECT-IOBLOK,CC,1 SET SECTOR @V2A2029 01208000 CCW 49,PAGESEEK+2-IOBLOK,CC,5 SEARCH ID EQUAL 01209000 CCW 8,PAGESRCH-IOBLOK,0,0 TIC *-8 01210000 MODELRD CCW 0,0,CC,4096 READ/NOP PROTOTYPES 01211000 MODELNOP CCW 4,0,SILI+SKIP,1 DUMMY SENSE TO END THE CHAIN 01212000 SPACE 01213000 * NOTE THAT A SENSE IS USED INSTEAD OF A NOP SO THAT RPS DEVICES WILL 01214000 * NOT LOSE TRACK OF THE SECTOR 01215000 SPACE 01216000 MSG415 DC C'DMKPAG415E CONTINUOUS PAGING ERRORS FROM DASD XXX' 01217000 MSG415LN EQU *-MSG415 LENGTH OF MESSAGE 01218000 ORG *-3 01219000 PAGEDEV DC X'000000' DASDI DEVICE CAUSING THE ERROR CONDITION 01220000 ORG 01221000 PGERCTR DC X'00' PAGE ERROR COUNTER. 01222000 DS 0D 01223000 PSW415 EQU X'0F' PAG WAIT STATE CODE @V407510 01224000 SPACE 01225000 SPACE 3 01226000 MODEL1 EQU X'01' 2305 MODEL 1 01227000 MODEL2 EQU X'02' 2305 MODEL 2 01228000 PAGCYL24 EQU 24 24 PAGES PER CYLINDER (2305/3340)@VM01167 01229000 PAGCYL32 EQU 32 32 PAGES PER CYLINDER (2314/2319)@VM01167 01230000 PAGCYL57 EQU 57 57 PAGES PER CYLINDER (3330) @VM01167 01231000 ONE EQU 1 @VM01167 01232000 THREE EQU 3 @VM01167 01233000 FOUR EQU 4 @V304498 01234000 NOPCODE EQU 3 @VM01167 01235000 TICOP EQU 8 @VM01167 01236000 BIT7 EQU X'01' @VM01167 01237000 BIT6 EQU X'02' @VM01167 01238000 N4 EQU 4 INDEX TO 2ND WORD @V4M0121 01239000 SPACE 2 01240000 DMKPAGQ DC 2A(DMKPAGQ) QUEUE OF CPEXBLOKS FOR IN-TRANSIT PAGES 01241000 SPACE 3 01242000 SPACE 01243000 DMKPAGST DC D'0' START OF PAGE LOAD MEASUREMENT PERIOD 01244000 DMKPAGSP DC D'0' END OF PAGE LOAD MEASUREMENT PERIOD 01245000 SPACE 01246000 DMKPAGQR DC F'0' PAGE I/O COUNT FOR QUERY COMMAND @VA08859 01247000 DMKPAGIC DC F'200' NUMBER OF PAGE I/O'S TO MEASURE 01248000 PAGIOCTR DC F'200' NUMBER OF PAGE IO'S LEFT IN CURRENT PERIOD 01249000 DMKPAGPS DC F'0' COUNT OF PAGING START I/O'S 01250000 DMKPAGCC DC F'0' COUNT OF CALLS TO DMKPAG 01251000 SPACE 01252000 IOBSTACK DC A(0) STACK OF PRE-FORMATTED IOBLOKS 01253000 DMKPAGSK EQU IOBSTACK ALLOW LOG-OFF TO REDUCE NUMBERS @V408246 01254000 DMKPAGDP DC X'FF' SWITCH FOR PCI ON ALL 2305 @VA07060 01255000 * REQUESTS 01256000 SPACE 01257000 LASTSLOT DS XL1 Highest slot number on 3350/75/80HRC106DK 01257100 DYNFRET DC F'0' NO OF CALLS TO DMKFRET FOR IOBLOKS 01258000 * WHICH WERE IN THE DYNAMIC PAGING AREA 01259000 SPACE 01260000 DMKPAGLO DC A(*-*) "DMKFRELO" MINUS LENGTH OF ONE PAGING IOBLOK 01261000 DMKPAGHI DC A(*-*) "DMKFREHI" 01262000 SPACE 01263000 PAGESOUT DC F'0' COUNT OF PENDING PAGE WRITES 01264000 SEC23051 DC AL1(2,32,62) SECTOR VALUES FOR 2305 M1 @VM01167 01265000 SEC23052 DC AL1(3,57,111) SECTOR VALUES FOR 2305 M2 @VM01167 01266000 SECT3330 DC AL1(2,44,86) SECTOR VALUES FOR 3330 @VM01167 01267000 SECT3340 DC AL1(2,32) SECTOR VALUES FOR 3340 @VM01167 01268000 SECT3350 DC AL1(2,33,63,94) SECTOR VALUES FOR 3350 @V304498 01269000 SECT3375 DC AL1(4,27,51,75,98,122,145,169) HRC106DK 01269100 SECT3380 DC AL1(5,26,46,67,87,108,128,149,170,190) HRC106DK 01269200 EJECT 01270000 LTORG 01271000 EJECT 01272000 COPY IOBLOKS 01273000 COPY RBLOKS 01274000 COPY CORE 01275000 COPY SAVE 01276000 COPY ALLOC 01277000 IOBLOK DSECT CONTINUE THE DSECT 01278000 * ANY CHANGES IN PAGESIZE MUST ALSO BE REFLECTED 01279000 * IN DMKUSO AND DMKMON 01280000 ORG , MAKE SURE WE'RE AT THE END @V200820 01281000 PAGECCWS DS 6D SPACE FOR PAGING CCWS 01282000 ORG PAGECCWS CCW DEFINITIONS 01283000 PAGESK DS D SPACE FOR SEEK 01284000 PAGESS DS D SPACE FOR SET SECTOR 01285000 PAGESRCH DS D SPACE FOR SEARCH 01286000 PAGESTIC DS F SPACE FOR TIC @V2A2029 01287000 PAGEIOB DS F POINTER TO SLOT SORTED IOBLOK 01288000 PAGERW DS D SPACE FOR READ/WRITE 01289000 PAGEPRI EQU PAGERW+5 SPACE FOR REQUEST PRIORITY @V408246 01290000 PAGESNS DS D SPACE FOR SENSE/TIC @VM01167 01291000 ORG PAGESNS+7 @VM01167 01292000 PAGESRCD DS X SPACE FOR SLOT NUMBER @VA04482 01293000 PAGESEEK DS D SPACE FOR SEEK ARGUMENT AND SECTOR 01294000 ORG PAGESEEK+2 @VM01167 01295000 PAGECYL DS H SPACE FOR CYLINDER ADDRESS @VM01167 01296000 PAGEHEAD DS H SPACE FOR HEAD ADDRESS @VM01167 01297000 PAGERCD DS X SPACE FOR RECORD NUMBER @VM01167 01298000 PAGESECT DS X SECTOR NUMBER 01299000 PAGESIZE EQU (*-IOBLOK)/8 SIZE OF EXTENDED IOBLOK IN DOUBLE WORDS 01300000 EJECT 01301000 PSA 01302000 COPY VMBLOK 01303000 COPY DEVTYPES 01304000 COPY EQU 01305000 END 01306000