ibm:vm370-lib:cp:dmkmon.assemble_src
Table of Contents
DMKMON Source
References
- Fixes Applied : 13
- This Source Date : Thursday, December 14, 1978
- Last Fix ID : [HRC106DK]
Source Listing
- DMKMON.ASSEMBLE.txt
- MON TITLE 'DMKMON (CP) VM/370 - RELEASE 6' 00001000
- ISEQ 73,80 VALIDATE SEQUENCING OF INPUT @V2B2638 00002000
- COPY OPTIONS @V2B2638 00003000
- COPY LOCAL @V2B2638 00004000
- SPACE 4 00005000
- DMKMON CSECT @V2B2638 00006000
- MODID DC CL8'DMKMON' IDENTIFICATION FOR DUMPS @V2B2638 00007000
- USING SAVEAREA,R13 @V2B2638 00008000
- USING PSA,R0 @V2B2638 00009000
- EJECT 00010000
- *. 00011000
- * 00012000
- * MODULE NAME - 00013000
- * 00014000
- * DMKMON 00015000
- * 00016000
- * FUNCTION - 00017000
- * 00018000
- * TO PROCESS COMMANDS AND REQUESTS ASSOCIATED WITH THE 00019000
- * MONITOR, INCLUDING MONITOR CALL INTERRUPTS WITHIN THE 00020000
- * CONTROL PROGRAM. 00021000
- * 00022000
- * ATTRIBUTES - 00023000
- * 00024000
- * REENTRANT, PAGABLE, 00025000
- * 00026000
- * CALLED VIA: 00027000
- * BRANCH FROM DMKPRG 00028000
- * 00029000
- * RE-ENTERED VIA: 00030000
- * IOBLOK IRA AFTER MONITOR TAPE I/O INTERRUPT. 00031000
- * TRQBLOK IRA AFTER TIME LAPSE EXPIRATION. 00032000
- * 00033000
- * ENTRY POINTS - 00034000
- * 00035000
- * DMKMONMI - TO PROCESS A MONITOR CALL PROGRAM INTERRUPT 00036000
- * DMKMON00 - TO WRITE CLASS 0 RECORDS WHEN MON IS STARTED 00037000
- * DMKMON40 - TO WRITE CLASS 4 RECORDS WHEN MON IS STARTED 00038000
- * DMKMONPR - TO ALLOCATE A MONITOR RECORD 00039000
- * DMKMONIO - TO PROCESS TAPE INTERRUPTS RETURNED BY DMKIOS 00040000
- * DNKMONTI - TO HANDLE TIMER REQUEST INTERRUPTS 00041000
- * 00042000
- * ENTRY CONDITIONS - 00043000
- * 00044000
- * REFER TO THE PROLOG ASSOCIATED WITH EACH ENTRY POINT 00045000
- * 00046000
- * EXIT CONDITIONS - 00047000
- * 00048000
- * REFER TO THE PROLOG ASSOCIATED WITH EACH ENTRY POINT 00049000
- * 00050000
- * EXTERNAL REFERENCES / CALLS TO OTHER ROUTINES - 00051000
- * 00052000
- * THE FOLLOWING ARE FUNCTIONAL EXTERNAL REFERENCES 00053000
- * OR ROUTINES WHICH ARE CALLED BY THE MONITOR. 00054000
- * REFER TO THE DATA COLLECTION TABLE FOR ALL DATA 00055000
- * EXTERNAL REFERENCES PERTAINING TO COUNTERS, ETC. 00056000
- * 00057000
- EXTRN DMKQCNWT WRITE A LINE TO THE CONSOLE @V2B2638 00058000
- EXTRN DMKIOSQR REQUEST CP I/O TO A DEVICE @V2B2638 00059000
- EXTRN DMKDSPCH FIND SOME OTHER WORK TO BE DONE @V2B2638 00060000
- EXTRN DMKFREE OBTAIN A BLOCK OF FREE STORAGE @V2B2638 00061000
- EXTRN DMKFRET RETURN A BLOCK OF FREE STORAGE @V2B2638 00062000
- EXTRN DMKSTKCP STACK A CPEXBLOK @V2B2638 00063000
- EXTRN DMKPRGC8 ENABLED CLASSES OF MONITOR EVENTS@V2B2638 00064000
- EXTRN DMKPRGMI ADDRESS OF MONITOR INT HANDLER @V2B2638 00065000
- EXTRN DMKPRGMC ADDRESS OF COMMUNICATIONS AREA @V2B2638 00066000
- EXTRN DMKPRGTI INT BETWEEN TIMER COLLECTIONS @V2B2638 00067000
- EXTRN DMKERMSG SEND AN ERROR MESSAGE @V2B2638 00068000
- EXTRN DMKPTRUL UNLOCK A PAGE @V2B2638 00069000
- EXTRN DMKPTRFT OBTAIN A PAGE OF FREE STORAGE @V2B2638 00070000
- EXTRN DMKSCHST STACK A TIMER REQUEST BLOCK @V2B2638 00071000
- EXTRN DMKSCHRT REMOVE A STACKED TIMER REQ BLOCK @V2B2638 00072000
- EXTRN DMKMIAWO,DMKSYSMX @V50A2B5 00073000
- EXTRN DMKPGTVR @V50A2B5 00074000
- EXTRN DMKMIAX1,DMKMIAX2,DMKMIAY1,DMKMIAY2,DMKMIA @V50A2B5 00075000
- EXTRN DMKCVTDT OBTAIN DATE AND TIME IN EBCDIC @V2B2638 00076000
- EXTRN DMKCVTAB ABEND CVT001 IF CLOCK DAMAGED @VA04301 00077000
- EXTRN DMKMNITR ROUTINE TO WRITE TRAILER RECORD @V4075A4 00078000
- EXTRN DMKMNIFI ROUTINE TO CLOSE DOWN MONITOR @V4075A4 00079000
- AIF (NOT &AP).LOKCT4 00079500
- EXTRN DMKLOKCT LOCK COUNTERS @V4075A4 00080000
- EXTRN DMKLOKSY SYSTEM LOCK COUNTERS @V4M0153 00081000
- EXTRN DMKLOKFR DMKFRE LOCK COUNTERS @V4M0153 00082000
- .LOKCT4 ANOP 00082500
- EXTRN DMKFRENP ADDTIONAL DMKFRE LOCK COUNTERS @V4M0153 00083000
- AIF (NOT &AP).LOKRL4 00083500
- EXTRN DMKLOKRL RUNLIST LOCK COUNTERS @V4M0153 00084000
- EXTRN DMKLOKTR TIMER REQUEST QUEUE COUNTERS @V4M0153 00085000
- EXTRN DMKLOKDS DISPATCHER QUEUES COUNTERS @V4M0153 00086000
- .LOKRL4 ANOP 00086100
- EXTRN DMKIOSNM ALTERNATE PATH COUNTERS @V60BEBC 00086200
- EXTRN DMKENTUT I/O UTILIZATION INTERVAL @V60BEBC 00086300
- EXTRN DMKFREST ANCHOR FOR SUBPOOL SPLITS @V60BEBC 00086400
- EXTRN DMKSYSAT MONITOR LIMIT FLAG @V60BEBC 00086500
- EXTRN DMKENT62 ROUTINE TO GATHER I/O UTILIZATION@V60BEBC 00086600
- EXTRN DMKMIACC MONITOR CLOSE SPOOL FILE RTN @V60BEBC 00086700
- * 00087000
- * REGISTER USAGE IN THIS MODULE - 00088000
- * 00089000
- * R0 - WORK REG 00090000
- * R1 - WORK REG 00091000
- * R2 - WORK REG 00092000
- * R3 - WORK REG 00093000
- * R4 - WORK REG 00094000
- * R5 - BAL REG FOR PREPREC (AND FROM THERE TO SIO) ROUTINE 00095000
- * R6 - RCHBLOK / RETURN ADDRESS FOR TIMER COLLECTION ROUTINES 00096000
- * R7 - RCUBLOK / WORKREG 00097000
- * R8 - RDEVBLOK / WORKREG 00098000
- * R9 - MONCOM ADDRESS 00099000
- * R10 - IOB ADDRESS WITHIN I/O ROUTINES AND I/O DATA COLLECTION 00100000
- * R11 - VMBLOK ADDRESS 00101000
- * R12 - BASE ADDRESS 00102000
- * R13 - FOR MI ENTRY, R13 OF ISSUER 00103000
- * R14 - BALR LINKAGE 00104000
- * R15 - BALR LINKAGE 00105000
- * 00106000
- *. 00107000
- EJECT 00108000
- *. 00109000
- * 00110000
- * ENTRY POINT - 00111000
- * 00112000
- * DMKMONMI - MONITOR CALL PROGRAM INTERRUPT HANDLER 00113000
- * 00114000
- * ENTRY CONDITIONS - 00115000
- * 00116000
- * GPR12 - ENTRY POINT ADDRESS 00117000
- * MONITOR CALL PROGRAM OLD PSW IN LOCATION X'28' 00118000
- * MONITOR CALL CLASS HALFWORD IN MONCLASS X'94' 00119000
- * MONITOR CALL CODE FULLWORD IN MONCODE X'9C' 00120000
- * 00121000
- * EXIT CONDITIONS 00122000
- * 00123000
- * NONE 00124000
- * 00125000
- * CALLS TO OTHER ROUTINES 00126000
- * 00127000
- * DMKIOSQR - TO INITIATE I/O FOR JUST FILLED DATA PAGE 00128000
- * 00129000
- * EXTERNAL REFERENCES 00130000
- * 00131000
- * REFER TO THE DATA COLLECTION TABLE FOR ALL EXTERNAL 00132000
- * REFERENCES PERTAINING TO DATA COUNTERS, ETC. 00133000
- * 00134000
- * REGISTER USAGE - 00135000
- * 00136000
- * GPR0 - WORK REG. 00137000
- * GPR1 - ADDRESS OF CURRENT BUFFER DATA ENTRY 00138000
- * GPR2-4 WORK REGISTERS 00139000
- * GPR5 - LINK TO THE BUFFER MANAGEMENT ROUTINE (PREPREC) 00140000
- * GPR6 - RETURN REG FOR TIMER DATA COLLECTION ROUTINE 00141000
- * GPR7 - WORK REG. 00142000
- * GPR8 - ADDRESS OF RDEVBLOK (WHERE APPLICABLE) 00143000
- * GPR9 - ADDRESS OF MONCOM 00144000
- * GPR10 - ADDRESS OF IOBLOK (WHERE APPLICABLE) 00145000
- * GPR11 - ADDRESS OF VMBLOK 00146000
- * GPR12 - BASE REG. 00147000
- * GPR13 - NOT USED 00148000
- * GPR14 - WORK REG. 00149000
- * GPR15 - WORK REG. 00150000
- * 00151000
- * OPERATION - 00152000
- * 00153000
- * MONITOR CALL INTERRUPT PROCESSING 00154000
- * 00155000
- * DMKMONMI: 00156000
- * 00157000
- * THE MONITOR CALL CLASS AND CODE ARE RETREIVED FROM 00158000
- * PSA AND A BRANCH IS MADE TO THE APPROPRIATE MONITOR 00159000
- * CLASS ROUTINE. 00160000
- * 00161000
- * FROM THE APPROPRIATE MONITOR CLASS ROUTINE A BRANCH 00162000
- * IS MADE TO THE APPROPRIATE MONITOR CODE ROUTINE 00163000
- * (THE DATA COLLECTION ROUTINE). 00164000
- * 00165000
- * EACH ROUTINE COLLECTING DATA CALLS THE BUFFER 00166000
- * MANAGEMENT ROUTINE FOR THE AMOUNT OF SPACE NEEDED 00167000
- * TO CONTAIN THE SPECIFIC RECORD. 00168000
- * 00169000
- * THE FOLLOWING IS A SUMMARY OF WHAT DATA EACH OF THE 00170000
- * VARIOUS ROUTINES COLLECTS, AND THE COLLECTION 00171000
- * VEHICLE. 00172000
- * 00173000
- * CLASS 0 - PERFORM (TIMER DRIVEN) 00174000
- * CODE 0 - COLLECT SYSTEM CLOCKS AND 00175000
- * COUNTERS. 00176000
- * CODE 1 - COLLECT APU CLOCKS AND COUNTERS. 00177000
- * CODE 97 - MONITOR TAPE HEADER RECORD, 00178000
- * CREATED BY DMKMONTH. 00179000
- * CODE 98 - MONITOR TAPE TRAILER RECORD, 00180000
- * CREATED BY DMKMONIO. 00181000
- * CODE 99 - MONITOR SUSPENSION DUE TO TAPE 00182000
- * BUSY, CREATED BY DMKMONIO. 00183000
- * 00184000
- * CLASS 1 - RESPONSE (MONITOR CALL) 00185000
- * CODE 0 - BEGIN A CONSOLE READ. 00186000
- * CODE 1 - CONSOLE OUTPUT. 00187000
- * CODE 2 - END A CONSOLE READ. 00188000
- * CODE 3 - BEGIN SLEEP WITH TIME OUT. 00189000
- * CODE 4 - USER LOGON 00190000
- * CODE 5 - USER LOGOFF 00191000
- * 00192000
- * CLASS 2 - SCHEDULER (MONITOR CALL) 00193000
- * CODE 2 - DROP USER FROM Q. 00194000
- * CODE 3 - ADD USER TO Q. 00195000
- * CODE 4 - ADD USER TO ELIGABLE LIST. 00196000
- * 00197000
- * CLASS 3 - RESERVED (MONITOR CALL) 00198000
- * 00199000
- * CLASS 4 - USER (TIMER DRIVEN) 00200000
- * CODE 0 - COLLECT VIRT. MACH STATISTICS. 00201000
- * 00202000
- * CLASS 5 - INSTRUCTION SIMULATION (MONITOR CALL) 00203000
- * CODE 0 - BEGIN INSTRUCTION. 00204000
- * 00205000
- * CLASS 6 - DASTAP (TIMER DRIVEN) 00206000
- * CODE 0 - INITIALIZE AND CREATE DASTAP 00207000
- * HEADER, CALLED FROM DMKMONTH. 00208000
- * CODE 1 - COLLECT DEVICE INFORMATION. 00209000
- * 00210000
- * CLASS 7 - SEEKS (MONITOR CALL) 00211000
- * CODE 0 - DASD SEEK CHANNEL PROGRAM ISSUED. 00212000
- * 00213000
- * CLASS 8 - SYSPROF (MONITOR CALL - VIA CLASS 2) 00214000
- * CODE 2 - COLLECT DEVICE I/O COUNTS AND 00215000
- * SYSTEM CLOCKS. 00216000
- * 00217000
- * AFTER THE APPROPRIATE MONITOR DATA IS COLLECTED THE 00218000
- * GENERAL REGISTERS ARE RESTORED FROM DMKPRG AND 00219000
- * SYSTEM PROCESSING RESUMES FROM THE PROGRAM OLD 00220000
- * PSW. 00221000
- * 00222000
- * BUFFER MANAGEMENT: 00223000
- * THE BUFFER MANAGEMENT ROUTINE MAINTAINS A POINTER 00224000
- * TO THE BUFFER CURRENTLY COLLECTING DATA. IF A RECORD 00225000
- * IS REQUESTED WHICH OVERFLOWS THE BUFFER, OR IF ONLY ONE 00226000
- * BUFFER IS BEING USED AND THE NEXT RECORD WOULD OVERFLOW 00227000
- * THE BUFFER, THEN A POINTER TO THE NEXT AVAILABLE BUFFER 00228000
- * IS GOTTEN, AND CONTROL IS PASSED TO THE TAPE MANAGEMENT 00229000
- * ROUTINE TO WRITE OUT THE BUFFER. 00230000
- * 00231000
- * TAPE I/O MANAGEMENT: 00232000
- * THE TAPE MANAGEMENT ROUTINE KEEPS TRACK OF THE 00233000
- * CURRENT STATUS OF THE TAPE. IF THE TAPE IS NOT 00234000
- * BUSY THEN A CPEXBLOK IS STACKED WHICH WILL CALL 00235000
- * DMKIOSQR TO WRITE THE BUFFER TO TAPE. AFTER THE 00236000
- * CPEXBLOK IS STACKED, RETURN IS MADE FROM WHENCE WE 00237000
- * CAME. 00238000
- * IF THE TAPE IS BUSY, INDICATION IS MADE THAT I/O IS 00239000
- * PENDING, SO THAT THE I/O INTERRUPT HANDLER WILL RE-START 00240000
- * THE TAPE WHEN THE CURRENT I/O FINISHES. 00241000
- * 00242000
- * NOTE: WHEN THE CPEXBLOK IS UNSTACKED BY THE 00243000
- * DISPATCHER A CALL IS MADE TO DMKFREE TO REPLACE THE 00244000
- * BACK POCKET CPEXBLOK. THIS WILL NOT CAUSE AN 00245000
- * EXTEND SINCE THE DISPATCHER JUST UNSTACKED AND 00246000
- * FRETED THE CPEXBLOK. ALTHOUGH THE DISPATCHER FRET 00247000
- * MAY HAVE CAUSED A DIS-EXTEND, RESULTING IN AN 00248000
- * EXTEND ON THIS CALL; THIS EXTEND WOULD NOT INVOLVE 00249000
- * I/O. 00250000
- * 00251000
- * SUSPENSION: 00252000
- * IF NO BUFFERS ARE AVAILABLE THEN MONITORING IS SUSPENDED. 00253000
- * IN THIS CASE, EACH BUFFER IS EITHER BEING WRITTEN TO 00254000
- * TAPE, OR WAITING TO BE WRITTEN. A COUNT IS MAINTAINED 00255000
- * IN THIS CASE, THERE ARE 2 FULL BUFFERS OF DATA. 00256000
- * ONE HAS BEEN SCHEDULED TO GO TO TAPE BUT THE TAPE 00257000
- * I/O HAS NOT COMPLETED AND THE OTHER BUFFER IS FULL 00258000
- * AND WAITING TO GO TO TAPE. A COUNT IS MAINTAINED 00259000
- * OF THE NUMBER OF TIMES THAT THIS CONDITION 00260000
- * OCCURRS. A NOTE IS MADE THAT THE MONITOR IS 00261000
- * SUSPENDED, ALONG WITH THE CURRENT TOD CLOCK VALUE. 00262000
- * 00263000
- * AT THIS POINT THE REASON FOR ENTRY INTO DMKMON IS 00264000
- * IGNORED AND EXIT IS MADE BACK TO DMKPRG IF ENTRY 00265000
- * WAS VIA AN MC INSTRUCTION OR TO THE DISPATCHER IF 00266000
- * ENTRY WAS MADE VIA A TIMER INTERRUPT. THE MONITOR 00267000
- * IS LEFT DISABLED FOR MC INTERRUPTS. IF A MONITOR 00268000
- * TIMER INTERRUPT SHOULD OCCUR, THEN THE TIMER 00269000
- * ROUTINE WILL BE DECEIVED INTO THINKING THAT THERE 00270000
- * ARE NO EVENTS TO MONITOR. HOWEVER, THE NEXT TIMER 00271000
- * INTERRUPT IS SET UP BEFORE HE EXITS TO THE 00272000
- * DISPATCHER, SO THE TIMER INTERRUPT PROCESS IS NOT 00273000
- * FORGOTTEN. 00274000
- * 00275000
- * THE MONITOR I/O INTERRUPT HANDLER WILL DETECT THE 00276000
- * SUSPEND CONDITION AND DO WHAT IS NECESSARY TO 00277000
- * RESUME MONITORING. SEE THE I/O INTERRUPT HANDLER 00278000
- * FOR DETAILS OF THAT FUNCTION. 00279000
- * 00280000
- *. 00281000
- EJECT 00282000
- ENTRY DMKMONMI @V2B2638 00283000
- DMKMONMI DS 0H @V2B2638 00284000
- USING *,R12 @V2B2638 00285000
- SL R12,=A(DMKMONMI-DMKMON) COMMON BASE ADDRESS @V2B2638 00286000
- USING DMKMON,R12 @V2B2638 00287000
- USING SAVEAREA,R13 @V2B2638 00288000
- USING VMBLOK,R11 @V4075A4 00289000
- USING MONCOM,R9 COMMUNICATIONS AREA DSECT @V2B2638 00290000
- L R9,=A(DMKPRGMC) GET ADDR OF MONCOM @V2B2638 00291000
- L R9,0(R9) ... @V2B2638 00292000
- LTR R9,R9 HAS MONITOR BEEN SHUT DOWN? @V4075A4 00293000
- BZ EXIT2 YES, MONCOM GONE, EXIT @V4075A4 00294000
- TM MONFLAG1,CFSTOP TRYING TO SHUTDOWN MONITOR? @V4075A4 00295000
- BNZ EXIT2 YES, EXIT @V4075A4 00296000
- L R3,MONCODE MC INTERRUPT CODE FROM PSA @V2B2638 00297000
- SLL R3,2 TIMES 4 FOR CODE BRANCH TABLE @V2B2638 00298000
- LH R5,MONCLASS MC INTERRUPT CLASS FROM PSA @V2B2638 00299000
- SLL R5,2 TIMES 4 FOR CLASS BRANCH TABLE @V2B2638 00300000
- B MONBRTBL(R5) OFF TO CORRESPONDING BRANCH INST @V2B2638 00301000
- SPACE 1 00302000
- MONBRTBL B EXIT2 CLASS 0, TIMER, PERFORM @V2B2638 00303000
- B MONCL1 CLASS 1, EVENT, RESPONSE @V2B2638 00304000
- B MONCL2 CLASS 2, EVENT, SCHEDULER @V2B2638 00305000
- B MONCL3 CLASS 3, EVENT, TIMING @V2B2638 00306000
- B EXIT2 CLASS 4, TIMER, USER @V2B2638 00307000
- B MONCL5 CLASS 5, EVENT, INSTSIM @V2B2638 00308000
- B EXIT2 CLASS 6, TIMER, DASTAP @V2B2638 00309000
- B MONCL7 CLASS 7, EVENT, SEEKS @V2B2638 00310000
- B EXIT2 CLASS 8, EVENT, SYSTEM PROFILE @V2B2638 00311000
- B EXIT2 RESERVED @V2B2638 00312000
- B EXIT2 RESERVED @V2B2638 00313000
- B EXIT2 RESERVED @V2B2638 00314000
- B EXIT2 RESERVED @V2B2638 00315000
- B EXIT2 RESERVED @V2B2638 00316000
- B EXIT2 RESERVED @V2B2638 00317000
- B EXIT2 RESERVED @V2B2638 00318000
- EJECT 00319000
- MONCL1 LA R1,ENDCL1-MONCODS1 GET LENGTH OF CL 1 BR TABLE @V2B2638 00320000
- CR R3,R1 WILL BRANCH FALL WITHIN IT @V2B2638 00321000
- BNL EXIT2 NO, NO DATA COLLECTION @V2B2638 00322000
- B MONCODS1(R3) GO TO APPROPRIATE CLASS 1 RTN. @V2B2638 00323000
- SPACE 1 00324000
- MONCODS1 B MONCOD10 BEGIN CONSOLE READ OPERATION @V2B2638 00325000
- B MONCOD11 CONSOLE OUTPUT LINE @V2B2638 00326000
- B MONCOD12 END OF CONSOLE READ OPERATION @V2B2638 00327000
- B MONCOD13 BEGIN SLEEP WITH TIMEOUT @V2B2638 00328000
- B MONCOD14 USER LOGON 00329000
- B MONCOD15 USER LOGOFF 00330000
- ENDCL1 EQU * @V2B2638 00331000
- SPACE 5 00332000
- MONCL2 LA R1,ENDCL2-MONCODS2 GET LENGTH OF CL 2 BR TABLE @V2B2638 00333000
- CR R3,R1 WILL BRANCH FALL WITHIN IT @V2B2638 00334000
- BNL EXIT2 NO, NO DATA COLLECTION @V2B2638 00335000
- B MONCODS2(R3) GO TO APPROPRIATE ROUTINE @V2B2638 00336000
- SPACE 1 00337000
- MONCODS2 B EXIT2 RESERVED @V2B2638 00338000
- B EXIT2 RESERVED @V2B2638 00339000
- B MONCOD22 DROP USER FROM Q @V2B2638 00340000
- B MONCOD23 ADD USER TO Q @V2B2638 00341000
- B MONCOD24 ADD USER TO ELIGABLE LIST @V2B2638 00342000
- ENDCL2 EQU * @V2B2638 00343000
- SPACE 5 00344000
- MONCL3 LA R1,ENDCL3-MONCODS3 GET LENGTH OF CL 3 BR TABLE @V2B2638 00345000
- CR R3,R1 WILL BRANCH FALL WITHIN IT @V2B2638 00346000
- BNL EXIT2 NO, NO DATA COLLECTION @V2B2638 00347000
- B MONCODS3(R3) BRANCH FOR CLASS 3 (TIMING) @V2B2638 00348000
- SPACE 1 00349000
- MONCODS3 B MONCOD30 BEGIN TIMING @V2B2638 00350000
- B MONCOD31 END TIMING @V2B2638 00351000
- ENDCL3 EQU * @V2B2638 00352000
- SPACE 5 00353000
- MONCL5 LA R1,ENDCL5-MONCODS5 GET LENGTH OF CL 5 BR TABLE @V2B2638 00354000
- CR R3,R1 WILL BRANCH FALL WITHIN TABLE @V2B2638 00355000
- BNL EXIT2 NO, NO DATA COLLECTION @V2B2638 00356000
- B MONCODS5(R3) GO TO APPROPRIATE ROUTINE @V2B2638 00357000
- SPACE 1 00358000
- MONCODS5 B MONCOD50 BEGIN INSTRUCTION SIMULATION @V2B2638 00359000
- ENDCL5 EQU * @V2B2638 00360000
- SPACE 5 00361000
- MONCL7 LA R1,ENDCL7-MONCODS7 GET LENGTH OF CL 7 BR TABLE @V2B2638 00362000
- CR R3,R1 WILL BRANCH FALL WITHIN TABLE @V2B2638 00363000
- BNL EXIT2 NO, NO DATA COLLECTION @V2B2638 00364000
- B MONCODS7(R3) GO TO APPROPRIATE ROUTINE @V2B2638 00365000
- SPACE 1 00366000
- MONCODS7 B MONCOD70 COLLECT DATA ON DASD SEEKS @V2B2638 00367000
- ENDCL7 EQU * @V2B2638 00368000
- SPACE 5 00369000
- EXIT2 LM R0,R15,MONREGS REST REGS AT MC TIME @V4M0117 00370000
- LPSW PROPSW RETURN FROM WHENCE WE CAME..... @V2B2638 00371000
- EJECT 00372000
- *. 00373000
- * 00374000
- * ENTRY POINT - 00375000
- * DMKMON00 - COLLECT CLASS 0, CODE 0 & 1 PERFORM DATA 00376000
- * 00377000
- * ENTRY CONDITIONS - 00378000
- * 00379000
- * R12 - ENTRY POINT ADDRESS 00380000
- * R13 - SAVE AREA ADDRESS 00381000
- * 00382000
- * EXIT CONDITIONS - 00383000
- * 00384000
- * R0 - ADDRESS OF DMKMONIO 00385000
- * 00386000
- * CALLS TO OTHER ROUTINES - 00387000
- * 00388000
- * NONE 00389000
- * 00390000
- * EXTERNAL REFERENCES 00391000
- * 00392000
- * REFER TO THE DATA COLLECTION TABLE FOR ALL EXTERNAL 00393000
- * REFERENCES PERTAINING TO DATA COUNTERS, ETC. 00394000
- * 00395000
- * REGISTER USAGE - 00396000
- * 00397000
- * GPR0 - WORK REG 00398000
- * GPR1 - ADDRESS OF CURRENT BUFFER DATA ENTRY 00399000
- * GPR2-4 - WORK REGS 00400000
- * GPR5 - LINK TO THE BUFFER MANAGEMENT ROUTINE (PREPREC) 00401000
- * GPR6 - ADDRESS OF RETURN POINT 00402000
- * GPR7 - WORK REG 00403000
- * GPR8 - ADDRESS OF RDEVBLOK 00404000
- * GPR9 - ADDRESS OF MONCOM 00405000
- * GPR10-11 - WORK REGS 00406000
- * GPR12 - BASE REG 00407000
- * GPR13 - SAVE AREA 00408000
- * GPR14-15 - WORK REGS 00409000
- * 00410000
- * OPERATION - 00411000
- * 00412000
- * THIS ROUTINE IS NORMALLY CALLED INTERNALLY, VIA BAL 00413000
- * TO MONCOD00. THE EXTERNAL ENTRY POINT IS PROVIDED 00414000
- * SO THAT DMKMNITH (TAPE HEADER ROUTINE) CAN WRITE THE 00415000
- * INITIAL PERFORM RECORDS, IF NECESSARY. PERFORMANCE 00416000
- * RELATED COUNTERS IN VARIOUS SYSTEM MODULES ARE COLLECTED 00417000
- * AND WRITTEN IN A CLASS 0 CODE 0 RECORD. IF THE ATTACHED 00418000
- * PROCESSOR IS ACTIVE, CARE MUST BE TAKEN TO FETCH THOSE 00419000
- * COUNTERS CONTAINED IN THE PSA FROM THE CPU'S PSA, AND, 00420000
- * IT IS NECESSARY TO WRITE A CLASS 0 CODE 1 RECORD FOR 00421000
- * COUNTERS CONTAINED IN THE ATTACHED PROCESSOR'S PSA, AND 00422000
- * SPECIAL COUNTERS OF INTEREST IN THE AP ENVIRONMENT. 00423000
- * 00424000
- *. 00425000
- ******* 00426000
- * 00427000
- * CLASS 0 CODE 0, PERFORM, TIMER DRIVEN COUNTER DATA COLLECTION 00428000
- * 00429000
- ******* 00430000
- SPACE 00431000
- DMKMON00 RELOC ENTRY FOR DMKMNITH @V4075A4 00432000
- LA R6,EXITP SET R6 WITH RET ADDR FOR COMPAT @V4075A4 00433000
- MONCOD00 EQU * @V50A2B5 00434000
- L R1,=A(DMKMIA) ADDRESS OF DMKMIA @V50A2B5 00435000
- TRANS 2,1,OPT=(SYSTEM,BRING,DEFER,LOCK) BRING IN @V50A2B5 00436000
- LA R0,MNCLPERF SIMULATE EFFECTS @VMD0140 00437000
- STH R0,MONCLASS OF A MONITOR @VMD0140 00438000
- LA R0,MNCOSYS CALL CLASS ZERO, @VMD0140 00439000
- ST R0,MONCODE CODE ZERO @VMD0140 00440000
- LA R0,MN000LEN GET LENGTH OF THE RECORD @V50A2B5 00441000
- BAL R5,PREPREC OBTAIN THE NECESSARY SPACE @V2B2638 00442000
- BAL R5,TSTSUSP1 @VA10215 00442500
- USING MN000,R1 ADDRESS THE RECORD @V2B2638 00443000
- TM APSTAT1,APUOPER AM I RUNNING IN AP MODE? @V4075A4 00444000
- BNO CPUDATA NO, NO NEED FOR SPECIAL PREFIX @V4075A4 00445000
- TM APSTAT1,PROCIO AM I THE APU? @V4075A4 00446000
- BO CPUDATA NO, NO NEED FOR SPECIAL PREFIX @V4075A4 00447000
- L R2,PREFIXB APU MUST ADDRESS CPU'S PREFIX @V4075A4 00448000
- * TO GATHER CPU PERFORM DATA 00449000
- B PREFXOK1 GO GET THE DATA @V4075A4 00450000
- CPUDATA SR R2,R2 ZERO PREFIX POINTER @V4075A4 00451000
- PREFXOK1 LM R3,R4,IDLEWAIT-IPLPSW(R2) IDLE WAIT TIME @V4075A4 00452000
- STM R3,R4,MN000WID SAVE VALUE IN RECORD @V4075A4 00453000
- LM R3,R4,PAGEWAIT-IPLPSW(R2) PAGE WAIT TIME @V4075A4 00454000
- STM R3,R4,MN000WPG SAVE VALUE IN RECORD @V4075A4 00455000
- LM R3,R4,IONTWAIT-IPLPSW(R2) IONT WAIT TIME @V4075A4 00456000
- STM R3,R4,MN000WIO SAVE VALUE IN RECORD @V4075A4 00457000
- LM R3,R4,PROBTIME-IPLPSW(R2) PROBLEM TIME @V4075A4 00458000
- STM R3,R4,MN000PRB SAVE VALUE IN RECORD @V4075A4 00459000
- LR R7,R2 SAVE PSA POINTER @V4075A4 00460000
- SPACE 00461000
- LA R1,MN000PSI-MN000(R1) READJUST BUFFER POINTER @V2B2638 00462000
- L R15,ASYSVM GET CORRECT SEG PAGES @V50A2B5 00463000
- LCTL C1,C1,VMSEG-VMBLOK(R15) @V50A2B5 00464000
- L R3,=A(DMKMIAX1) GET BEGINNING OF TABLE @V50A2B5 00465000
- LRA R3,0(0,R3) TRANSLATE ADDRESS @V50A2B5 00466000
- LA R4,4 INCREMENT VALUE @V2B2638 00467000
- L R5,=A(DMKMIAX2) GET THE END OF THE TABLE @V50A2B5 00468000
- LRA R5,0(0,R5) TRANSLATE ADDRESS @V50A2B5 00469000
- COLLECTA L R2,0(R3) GET DATA ADDRESS @V2B2638 00470000
- C R2,F4096 IS THIS A PSA FIELD? @V4075A4 00471000
- BNL ADDOK NO, NO NEED FOR PREFIXING @V4075A4 00472000
- AR R2,R7 YES, POINT TO APPROPRIATE PSA @V4075A4 00473000
- ADDOK EQU * @V4075A4 00474000
- MVC 0(4,R1),0(R2) MOVE DATA TO BUFFER @V2B2638 00475000
- LA R1,4(R1) INCREMENT THE DATA FIELD PTR @V2B2638 00476000
- BXLE R3,R4,COLLECTA AGAIN UNTIL DONE @V2B2638 00477000
- SPACE 00478000
- LM R3,R5,=A(DMKSCHW1,DMKSCHW2,DMKPRGTI) @V2B2638 00479000
- DROP R1 @V2B2638 00480000
- USING MN000Q1E,R1 RE-ESTABLISH THE BASE @V2B2638 00481000
- MVC MN000Q1E,0(R3) NO. OF USERS WAITING TO ENTER Q1 @V2B2638 00482000
- MVC MN000Q2E,0(R4) NO. OF USERS WAITING TO ENTER Q2 @V2B2638 00483000
- MVC MN000INT,0(R5) INTVAL BETWEEN DATA COLLECTIONS @V2B2638 00484000
- L R7,ARIODV GET START OF REAL DEVICES @V2B2638 00485000
- L R2,=A(DMKSYSOC) GET COUNT OF SYSTEM ... @V2B2638 00486000
- L R2,0(R2) ... OWNED VOLUMES @V2B2638 00487000
- L R3,=A(DMKSYSOW) START OF SYS OWNED LIST @V2B2638 00488000
- SLR R0,R0 CLEAR FOR FOLLOWING CALCULATIONS @VA03723 00489000
- LR R4,R0 ... @VA03723 00490000
- LR R14,R0 ... @VA03723 00491000
- LR R15,R0 ... @VA03723 00492000
- B NEXTENT NOW GO CHECK OUT FIRST ENTRY @V2B2638 00493000
- SPACE 00494000
- INDEX LA R3,8(R3) BUMP TO NEXT SYSTEM OWNED ENTRY @V2B2638 00495000
- NEXTENT LH R8,6(R3) PICK UP INDEX @V2B2638 00496000
- LTR R8,R8 IS THERE ONE? @V2B2638 00497000
- BM NXTSYS NOPE, NO DEVICE HERE @V2B2638 00498000
- SLL R8,3 CONVERT TO BYTE DISPLACEMENT @V2B2638 00499000
- AR R8,R7 CREATE RDEVBLOK ADDRESS @V2B2638 00500000
- USING RDEVBLOK,R8 ADDRESS IT... @V2B2638 00501000
- IC R4,RDEVTYPE GET THE DEVICE TYPE CODE @VA03723 00502000
- L R8,RDEVALLN GET PRIMARY ALLOCATION BLOCK @VA03723 00503000
- DROP R8 NO MORE RDEVBLOK @VA03723 00504000
- USING ALOCBLOK,R8 ADDRESS ALOCBLOK @VA03723 00505000
- LTR R8,R8 IS THERE AN ALOCBLOK? @VA03723 00506000
- BZ NXTSYS NOPE, THEN SKIP THIS DEVICE @VA03723 00507000
- SRL R4,1 SHIFT DOWN BY ONE, SMALLER INDEX @VA03723 00508000
- CLM R4,B'0001',F8+3 BIT IN THE HIGHER HALF ? @VA03723 00509000
- BL LOWBITS NOPE, LOWER HALF, BR. @VA03723 00510000
- SRL R4,4 SHIFT BIT IN UPPER HALF TO LOWER @VA03723 00511000
- IC R0,TBLHIGH(R4) PICK UP MULTIPLIER (PAGES/CYL) @VA03723 00512000
- B *+8 AND CONTINUE @VA03723 00513000
- LOWBITS IC R0,TBLLOW(R4) PICK UP MULTIPLIER (PAGES/CYL) @VA03723 00514000
- LH R5,ALOCMAX GET DEVICE CYL COUNT @VA03723 00515000
- SH R5,ALOCNTMP REMOVE NON-TEMP CYLINDERS @VA03723 00516000
- MR R4,R0 CYL * (PAGES/CYL) = PAGES @VA03723 00517000
- AR R14,R5 ADD PAGES THIS DEVICE TO TOTAL @VA03723 00518000
- LH R5,ALOCUSED GET NO CYLS CURRENTLY USED @VA03723 00519000
- SH R5,ALOCNTMP REMOVE NON-TEMP CYLINDERS @VA03723 00520000
- MR R4,R0 CYL * (PAGES/CYL) = PAGES @VA03723 00521000
- AR R15,R5 ADD PAGES USED THIS DEV TO TOTAL @VA03723 00522000
- DROP R8 NO MORE ALOCBLOK @VA03723 00523000
- NXTSYS BCT R2,INDEX LOOK AT ALL OWNED DEVICES @VA03723 00524000
- LTR R3,R14 GET TOTAL PAGES AVAILABLE @VA03723 00525000
- BZ AVAIL0 NONE AVAILABLE (!?), BR @VA03723 00526000
- LA R0,100 NO. OF PAGES PER PSEUDO CYLINDER @VA03723 00527000
- DR R2,R0 CALC NO OF PSEUDO CYLINDERS AVAIL@VA03723 00528000
- AVAIL0 STH R3,MN000PPC SAVE PSEUDO CYL. CAPACITY @VA03723 00529000
- LTR R3,R15 GET TOTAL PAGES USED @VA03723 00530000
- BZ ALOC0 NONE ALLOCATED (!?), BR. @VA03723 00531000
- SLR R2,R2 CLEAR FOR DIVIDE @VA03723 00532000
- DR R2,R0 CALC NO OF PSEUDO CYLINDERS USED @VA03723 00533000
- ALOC0 STH R3,MN000PPA SAVE PSEUDO CYL USED COUNT @VA03723 00534000
- ALTPCTRS L R2,=A(DMKIOSNM) GET ADDR ALT PATH COUNTERS @V60BEBC 00534100
- MVC MN000ISD(16),0(R2) MOVE ALT PATH COUNTERS @V60BEBC 00534200
- STUTCTRS L R2,=A(DMKFRENP) GET ADDR OF STORAGE COUNTERS @V60BEBC 00534300
- MVC MN000EXT(8),0(R2) GET EXTEND,UNEXTEND COUNT @V60BEBC 00534400
- L R2,=A(DMKFREST) GET ADDR OF SPLIT COUNTERS @V60BEBC 00534500
- MVC MN000ATT(8),40(R2) GET ATTEMPTED + ACTUAL SPLITS@V60BEBC 00534600
- TM APSTAT1,APUOPER ARE WE RUNNING AP? @V4075A4 00535000
- BNO UNLOCK @VA08204 00536000
- EJECT 00537000
- ******* 00538000
- * 00539000
- * CLASS 0 CODE 1 PERFORM APU DATA 00540000
- * 00541000
- ******* 00542000
- SPACE 2 00543000
- MONCOD01 L R0,F1 SET UP TO CHANGE CODE @V4075A4 00544000
- ST R0,MONCODE SAVE IT @V4075A4 00545000
- LA R0,MN001LEN GET LENGTH OF RECORD @V4075A4 00546000
- BAL R5,PREPREC GO GET A BUFFER @V4075A4 00547000
- BAL R5,TSTSUSP1 @VA10215 00547500
- TM APSTAT1,PROCIO AM I THE APU? @V4075A4 00548000
- BZ APUDATA YES, NO NEED FOR SPECIAL PREFIX @V4075A4 00549000
- L R2,PREFIXB NO, ADDRESS THE APU'S PSA @V4075A4 00550000
- B PREFXOK2 GO GET THE DATA @V4075A4 00551000
- APUDATA LA R2,0 CLEAR OUT R2 FOR APU CASE @V4075A4 00552000
- USING MN001,R1 @V4075A4 00553000
- PREFXOK2 LM R3,R4,IDLEWAIT-IPLPSW(R2) SYSTEM IDLE TIME @V4075A4 00554000
- STM R3,R4,MN001WID @V4075A4 00555000
- LM R3,R4,PAGEWAIT-IPLPSW(R2) SYSTEM PAGE WAIT @V4075A4 00556000
- STM R3,R4,MN001WPG SAVE IT IN RECORD @V4075A4 00557000
- LM R3,R4,IONTWAIT-IPLPSW(R2) SYSTEM I/O WAIT @V4075A4 00558000
- STM R3,R4,MN001WIO SAVE IT IN RECORD @V4075A4 00559000
- LM R3,R4,PROBTIME-IPLPSW(R2) SYSTEM PROBLEM TIME @V4075A4 00560000
- STM R3,R4,MN001PRB SAVE IT IN RECORD @V4075A4 00561000
- LA R1,MN001NXR-MN001(R1) POINT PAST TOD VALUES @V4075A4 00562000
- L R15,ASYSVM GET CORRECT SEG TABLE @V50A2B5 00563000
- LCTL C1,C1,VMSEG-VMBLOK(R15) @V50A2B5 00564000
- L R3,=A(DMKMIAY1) GET BEGINNING OF THE TABLE @V50A2B5 00565000
- LRA R3,0(0,R3) @V50A2B5 00566000
- LA R4,4 LOAD INDEX INCREMENT @V4075A4 00567000
- L R5,=A(DMKMIAY2) GET THE END OF THE TABLE @V50A2B5 00568000
- LRA R5,0(0,R5) TRANSLATE IT @V50A2B5 00569000
- COLLECTB L R7,0(R3) GET ADDRESS OF A COUNTER @V4075A4 00570000
- C R7,F4096 IS IT IN THE PSA? @V4075A4 00571000
- BNL ADDOK2 NO, NO PREFIX NEEDED @V4075A4 00572000
- AR R7,R2 IN PSA, ADD IN PREFIX VALUE @V4075A4 00573000
- ADDOK2 MVC 0(4,R1),0(R7) MOVE COUNTER VALUE INTO RECORD @V4075A4 00574000
- LA R1,4(R1) POINT TO NEXT LOCATION IN RECORD @V4075A4 00575000
- BXLE R3,R4,COLLECTB CHECK FOR END OF TABLE AND LOOP @V50A2B5 00576000
- UNLOCK DS 0H @VA08204 00576500
- L R2,=A(DMKMIA) GET ADDRESS OF PAGE TO UNLOCK @VA09228 00577000
- LRA R2,0(0,R2) @VA08204 00577500
- CALL DMKPTRUL @V50A2B5 00578000
- BR R6 END OF APU COUNTER TABLE @V50A2B5 00579000
- SPACE 5 00580000
- * 10 20 40 XX 80 RDEVTYPE BIT POSITION 00581000
- TBLHIGH DC AL1(057,150,032,000,000) 3330,3380,2314,X,0 HRC106DK 00582100
- SPACE 00583000
- * 01 02 04 XX 08 RDEVTYPE BIT POSITION 00584000
- TBLLOW DC AL1(024,024,096,000,120) 3340,2305,3375,X,3350 HRC106DK 00585100
- EJECT 00586000
- ******* 00587000
- * 00588000
- * CLASS 1 CODE 0, RESPONSE, BEGIN CONSOLE READ 00589000
- * 00590000
- * CLASS 1 CODE 3, RESPONSE, BEGIN SLEEP WITH TIME OUT 00591000
- * 00592000
- * CLASS 1 CODE 4, RESPONSE, USER LOGON 00593000
- * 00594000
- * CLASS 1 CODE 5, RESPONSE, USER LOGOFF 00595000
- * 00596000
- ******* 00597000
- SPACE 00598000
- MONCOD10 EQU * @V2B2638 00599000
- MONCOD14 EQU * 00600000
- MONCOD15 EQU * 00601000
- MONCOD13 LA R0,MN10XLEN RECORD LENGTH @V2B2638 00602000
- BAL R5,PREPREC GET SPACE AND CREATE HEADER @V2B2638 00603000
- BAL R5,TSTSUSP @VA10215 00603500
- USING MN10X,R1 ADDRESS THE RECORD @V2B2638 00604000
- BAL R5,USADD GET USER ID AND DEVICE ADDR @V2B2638 00605000
- B EXIT2 DONE. @V2B2638 00606000
- SPACE 5 00607000
- ******* 00608000
- * 00609000
- * CLASS 1 CODE 1, RESPONSE, WRITE A LINE TO THE CONSOLE 00610000
- * 00611000
- * CLASS 1 CODE 2, RESPONSE, CONSOLE READ COMPLETE 00612000
- * 00613000
- ******* 00614000
- SPACE 00615000
- MONCOD11 EQU * @V2B2638 00616000
- MONCOD12 L R6,MONREGS+R6*4 GET R6 AT MC TIME (CONTASK) @V4M0117 00617000
- USING CONTASK,R6 00618000
- LH R1,CONCNT GET BYTE COUNT FOR I/O LINE 00619000
- C R1,=F'128' MAX OF 128 CHAR (3277 MAY BE MORE@V2B2638 00620000
- BNH ADD11 NOT EXCEEDING MAX, OK AS IS @V2B2638 00621000
- LA R1,128 TOO BIG , SET DEFAULT @V2B2638 00622000
- ADD11 LA R0,MN10YLEN(,R1) ADJ FOR USERID, ADDR, CNT @V2B2638 00623000
- BAL R5,PREPREC GET SPACE AND CREATE HEADER @V2B2638 00624000
- BAL R5,TSTSUSP @VA10215 00624500
- BAL R5,USADD GET USERID AND DEVICE ADDR @V2B2638 00625000
- LH R2,CONCNT READ/WRITE COUNT 00626000
- L R3,CONADDR DATA ADDRESS 00627000
- DROP R6 00628000
- C R2,=F'128' RESTRICT MAX LINE RECORDED TO 128@V2B2638 00629000
- BNH STCOUNT WITHIN BOUNDS, COUNT OK AS IS @V2B2638 00630000
- LA R2,128 TOO BIG SET MAX. @V2B2638 00631000
- STCOUNT STC R2,MN10YCNT STORE IN MONITOR RECORD @V2B2638 00632000
- LTR R2,R2 IS THERE ANY DATA? @V2B2638 00633000
- BZ EXIT2 NOPE, DROP OUT IF NULL LINE @V2B2638 00634000
- BCTR R2,0 LESS 1 FOR EXECUTE @V2B2638 00635000
- EX R2,MOVEDATA COLLECT THE DATA @V2B2638 00636000
- B EXIT2 DONE. @V2B2638 00637000
- SPACE 5 00638000
- MOVEDATA MVC MN10YIO(0),0(R3) CONSOLE INPUT/OUTPUT DATA @V2B2638 00639000
- EJECT 00640000
- USADD MVC MN10XUID,VMUSER MOVE USERID TO MONITOR BUFFER @V2B2638 00641000
- L R8,VMTERM GET RDEVICE ADDR FOR THE TERMINAL@V2B2638 00642000
- LTR R8,R8 IS THERE ONE? (DISCONNECTED?) @V2B2638 00643000
- BZ DISCONN YES, DISCONNECTED, USE DUMMY @V2B2638 00644000
- LR R4,R6 SAVE POSSIBLE CONTASK ADDR @VA03543 00645000
- BAL R14,RDHEX GET THE DEVICE ADDR IN HEX @VA03543 00646000
- STH R2,MN10XADD PUT DEV ADDR IN MONITOR RECORD @VA03543 00647000
- LR R6,R4 RESTORE POSSIBLE CONTASK ADDR @VA03543 00648000
- BR R5 RETURN TO CALLER @VA03543 00649000
- SPACE 3 00650000
- DISCONN MVC MN10XADD,F0 MAKE LINE ADDR 0 FOR DISC USER @V2B2638 00651000
- BR R5 AND NOW RETURN @V2B2638 00652000
- DROP R1 00653000
- EJECT 00654000
- ******* 00655000
- * 00656000
- * CLASS 2, CODE 2, SCHEDULE, DROP USER FROM QUEUE 00657000
- * 00658000
- ******* 00659000
- SPACE 00660000
- MONCOD22 LA R0,MN202LEN LENGTH OF THE RECORD @V2B2638 00661000
- BAL22 BAL R5,PREPREC GET SPACE AND CREATE HEADER @V2B2638 00662000
- BAL R5,TSTSUSP @VA10215 00662500
- USING MN20X,R1 ADDRESS THE DSECT @V2B2638 00663000
- LM R2,R7,=A(DMKDSPNP,DMKSCHPU,DMKSCHW1,DMKSCHW2,DMKSCHN1,DMX00664000
- KSCHN2) 00665000
- MVC MN20XUID,VMUSER USERID BEING ADDED/DROPPED @V2B2638 00666000
- MVC MN20XNPP,0(R2) NO. OF PAGABLE PAGES @V2B2638 00667000
- MVC MN20XSWS,0(R3) SUM OF WORKING SETS OF IN Q USERS@V2B2638 00668000
- MVC MN20XQ1N,0(R6) NO. OF USERS IN Q1 @V2B2638 00669000
- MVC MN20XQ2N,0(R7) NO. OF USERS IN Q2 @V2B2638 00670000
- MVC MN20XQ1E,0(R4) NO. OF USERS WAITING TO ENTER Q1 @V2B2638 00671000
- MVC MN20XQ2E,0(R5) NO. OF USERS WAITING TO ENTER Q2 @V2B2638 00672000
- MVC MN20XWSS,VMWSPROJ PROJECTED WSS FOR THIS USER @V2B2638 00673000
- IC R2,TRACPROC GET CP TRACE PROCESSOR ID @V4075A4 00674000
- STC R2,MN20XPRC SAVE IT IN RECORD @V4075A4 00675000
- CLC MONCODE(4),F3 WAS IT CODE 2,3, OR 4 @V2B2638 00676000
- BE COD23 ITS MC CODE 3 FOR ADD Q @V2B2638 00677000
- SPACE 00678000
- MVC MN20YTTI,VMTTIME GET SUPERVISORY TIME @V2B2638 00679000
- MVC MN20YVTI,VMVTIME GET VIRT MACHINE TIME @V2B2638 00680000
- CLC MONCODE,F4 CODE 4? @V2B2638 00681000
- BE COD24 YUP, BR @V2B2638 00682000
- SPACE 00683000
- MVC MN202PRI,VMQPRIOR PRIORITY TO RE-ENTER Q @V2B2638 00684000
- L R2,=A(DMKSCHAL) CODE 2 DROP Q, NOW WHICH ONE @V2B2638 00685000
- TM 0(R2),Q1DROP WAS HE DROPPED FROM Q1 ? @V2B2638 00686000
- MVI MN20XQNM,X'01' SET INDICATOR IN RECORD @V2B2638 00687000
- BO *+8 YES, NO CHANGES @V2B2638 00688000
- MVI MN20XQNM,X'02' NO, SHOW DROP FROM Q2 @V2B2638 00689000
- TM 0(R2),X'20' WAS USER TIME SLICE ENDED? @V2B2638 00690000
- BZ *+8 NO, SKIP FLAG SETTING @V2B2638 00691000
- OI MN20XQNM,X'64' ADD 100 TO 'QUEUE' VARIABLE @V2B2638 00692000
- L R2,VMPGREAD TOTAL PAGE READS @V2B2638 00693000
- S R2,VMRDINQ LESS NUMBER STORED AT ENTRY @V2B2638 00694000
- STH R2,MN202PGR IS PAGE READS WHILE IN Q. @V2B2638 00695000
- MVC MN202APR,VMPGRINQ+2 SUM OF PAGES RES @ PAGE READ@VA03126 00696000
- XC MN202REF,MN202REF FIELD RESERVED FOR IBM USE @VA09337 00697700
- MVC MN202RES,VMPAGES PAGES RESIDENT @V2B2638 00699000
- MVC MN202PST,VMSTEALS NO. OF WAITS FOR STOLEN PGS @V2B2638 00700000
- MVC MN202IOC,VMIOCNT USER NON-SPOOLED IO CNT @V2B2638 00701000
- MVC MN202PNC,VMPNCH USER CARDS PUNCHED @V2B2638 00702000
- MVC MN202LIN,VMLINS USER LINES PRINTED @V2B2638 00703000
- MVC MN202CRD,VMCRDS USER CARDS READ @V2B2638 00704000
- MVC MN202LPR,VMLSTPRC LAST PROBLEM STATE PU @V60BEBC 00704500
- TM CPCREG8+3,SPROFCL SYSTEM PROFILE CLASS ACTIVE? @V2B2638 00705000
- BO MONCOD82 YES, MORE DATA TO COLLECT @V2B2638 00706000
- B EXIT2 FINISHED WITH IT FOR THIS LAP @V2B2638 00707000
- EJECT 00708000
- ******* 00709000
- * 00710000
- * CLASS 2 CODE 3, SCHEDULE, ADD USER TO QUEUE 00711000
- * 00712000
- ******* 00713000
- SPACE 00714000
- MONCOD23 LA R0,MN203LEN LENGTH OF THIS RECORD @V2B2638 00715000
- B BAL22 JOIN DROP QUEUE DATA COLLECTION @V2B2638 00716000
- SPACE 3 00717000
- COD23 L R2,MONREGS+R15*4 R15 AT MC TIME = A(QUEUE) @V4M0117 00718000
- L R3,=A(DMKSCHQ1) ADDRESS OF Q1 @V2B2638 00719000
- CR R2,R3 WAS USER ADDED TO Q1? @V2B2638 00720000
- MVI MN20XQNM,X'01' ASSUME SO @V2B2638 00721000
- BE NOTQ2AD ASSUMPTION CORRECT. @V2B2638 00722000
- MVI MN20XQNM,X'02' INDICATE ADD TO Q2 @V2B2638 00723000
- NOTQ2AD EQU * @V4075A4 00724000
- TM CPCREG8+3,SPROFCL SYSTEM PROFILE CLASS ACTIVE? @V2B2638 00725000
- BO MONCOD82 YES, MORE DATA TO COLLECT @V2B2638 00726000
- B EXIT2 NO, DONE WITH THIS LAP @V2B2638 00727000
- SPACE 5 00728000
- ******* 00729000
- * 00730000
- * CLASS 2 CODE 4, SCHEDULE, ADD USER TO ELIGABLE LIST 00731000
- * 00732000
- ******* 00733000
- SPACE 00734000
- MONCOD24 LA R0,MN204LEN LENGTH OF THIS RECORD @V2B2638 00735000
- B BAL22 JOIN COMMON CODE @V2B2638 00736000
- SPACE 1 00737000
- COD24 MVC MN204PRI,VMEPRIOR ELIGABLE LIST PRIORITY @V2B2638 00738000
- TM VMQLEVEL,VMQ1 TO BE ADDED TO Q1 ELIG. LIST? @V2B2638 00739000
- MVI MN20XQNM,X'01' ASSUME YES. @V2B2638 00740000
- BO EXIT2 ASSUMPTION CORRECT, DONE. @V2B2638 00741000
- MVI MN20XQNM,X'02' NO, Q2 ELIG. LIST @V2B2638 00742000
- TM VMQLEVEL,VMAEX HIGH PRIOR. Q2? @V2B2638 00743000
- BZ EXIT2 NO, DONE @V2B2638 00744000
- OI MN20XQNM,X'64' YES, 'OR' DEC 100 @V2B2638 00745000
- B EXIT2 DONE. @V2B2638 00746000
- EJECT 00747000
- ******* 00748000
- * 00749000
- * CLASS 3 CODE 0-1, TIMING, RECORD TIMING EVENTS 00750000
- * 00751000
- ******* 00752000
- SPACE 00753000
- MONCOD30 EQU * BEGIN AND END OF TIMING ARE SAME @V2B2638 00754000
- MONCOD31 LA R0,4 BASE REG DATA ONLY HERE. @V2B2638 00755000
- BAL R5,PREPREC GET SPACE & CREATE HEADER @V2B2638 00756000
- BAL R5,TSTSUSP @VA10215 00756500
- MVC 0(4,R1),MONREGS+R12*4 GET BASE REG AT MC TIME @V4M0117 00757000
- B EXIT2 DONE @V2B2638 00758000
- EJECT 00759000
- *. 00760000
- * 00761000
- * ENTRY POINT - 00762000
- * 00763000
- * DMKMON40 - COLLECT USER STATISTICS 00764000
- * 00765000
- * ENTRY CONDITIONS - 00766000
- * 00767000
- * GPR12 - ENTRY POINT 00768000
- * GPR13 - SAVE AREA 00769000
- * 00770000
- * EXIT CONDITIONS - 00771000
- * 00772000
- * NONE 00773000
- * 00774000
- * CALLS TO OTHER ROUTINES - 00775000
- * 00776000
- * NONE 00777000
- * 00778000
- * REGISTER USAGE - 00779000
- * 00780000
- * R0 - WORK REG 00781000
- * R1 - ADDRESS OF CURRENT BUFFER DATA ENTRY 00782000
- * R2-R4 - WORK REGS 00783000
- * R5 - LINK TO PREPREC 00784000
- * R6 - RETURN ADDRESS 00785000
- * R7 - WORK REG 00786000
- * R8 - VMBLOK 00787000
- * R9 - MONCOM 00788000
- * R10 - VMBLOK 00789000
- * R11 - NOT USED 00790000
- * R12 - ADDRESS OF DMKMON 00791000
- * R13 - SAVE AREA 00792000
- * R14-R15 - WORK REGS 00793000
- * 00794000
- * OPERATION - 00795000
- * 00796000
- * LIKE DMKMON00, THIS ENTRY POINT IS PROVIDED SO THAT 00797000
- * DMKMNITH CAN INVOKE THE USER DATA COLLECTION ROUTINE 00798000
- * WHEN THE MONITOR IS STARTED. BEGINNING WITH THE SYSTEM 00799000
- * VMBLOK, A RECORD IS WRITTEN FOR THE STATISTICS IN EACH 00800000
- * VMBLOK IN THE SYSTEM. 00801000
- * 00802000
- *. 00803000
- ******* 00804000
- * 00805000
- * CLASS 4 CODE 0, USER, COLLECT USER STATISTICS 00806000
- * 00807000
- ******* 00808000
- SPACE 00809000
- DMKMON40 RELOC EXTERNAL ENTRY FOR DMKMNITH @V4075A4 00810000
- LA R6,EXITP SET R6 WITH RET ADDR FOR COMPAT @V4075A4 00811000
- MONCOD40 OI MONFLAG1,MONSYSVM IND WORKING WITH SYS VMBLOK @V4075A4 00812000
- L R8,ASYSVM START WITH THE SYSTEM VMBLOK @V2B2638 00813000
- LR R0,R11 SAVE R11 VALUE @V4M0203 00814000
- LR R11,R8 SET UP R11 TEMPORARILY @V4M0203 00815000
- CHARGE SYNC SYNCHRONIZE TIMER @V4M0203 00816000
- LR R11,R0 RESTORE R11 @V4M0203 00817000
- B DOSYS COLLECT SYSTEM WITHOUT CHECK @V2B2638 00818000
- DROP R11 @V2B2638 00819000
- USING VMBLOK,R8 @V2B2638 00820000
- MOVUDATA DS 0H @V2B2638 00821000
- TM VMRSTAT,VMLOGON IS USER REALLY ON? @V2B2638 00822000
- BO SKIPUSER ONLY HALF THERE, SKIP HIM. @V2B2638 00823000
- DOSYS LA R0,MN400LEN LENGTH OF RECORD TO BE COLLECTED @V2B2638 00824000
- BAL R5,PREPREC GET SPACE & CREATE HEADER @V2B2638 00825000
- BAL R5,TSTSUSP1 @VA10215 00825500
- USING MN400,R1 ADDRESS THE BLOCK @V2B2638 00826000
- MVC MN400UID,VMUSER OBVIOUSLY WE NEED HIS ID @V2B2638 00827000
- MVC MN400TTI,VMTTIME SUPERVISOR TIME @V2B2638 00828000
- MVC MN400VTI,VMVTIME PROBLEM TIME @V2B2638 00829000
- MVC MN400PGR,VMPGREAD NO. OF PAGE READS @V2B2638 00830000
- MVC MN400PGW,VMPGWRIT NO. OF PAGE WRITES @V2B2638 00831000
- MVC MN400IOC,VMIOCNT VIRTUAL NON SPOOLED SIO CNT @V2B2638 00832000
- MVC MN400PNC,VMPNCH NO. OF CARDS PUNCHED @V2B2638 00833000
- MVC MN400LIN,VMLINS NO. OF LINES PRINTED @V2B2638 00834000
- MVC MN400CRD,VMCRDS NO. OF CARDS READ @V2B2638 00835000
- MVC MN400RST(4),VMRSTAT RSTAT, DSTAT, OSTAT, QSTAT @V2B2638 00836000
- MVC MN400PST(4),VMPSTAT PSTAT, ESTAT, TCNTL, MLEVL @V2B2638 00837000
- MVC MN400QLV(4),VMQLEVEL QLVL, CLEVL, TLEVL, PEND @V2B2638 00838000
- MVC MN400UPR,VMUPRIOR DIRECTORY OR 'SET' PRIORITY @V2B2638 00839000
- MVI MN4RSV1,X'00' RESERVED FIELD = 0 @V2B2638 00840000
- MVC MN400RES,VMPAGES NO. OF PAGES RESIDENT @V2B2638 00841000
- MVC MN400WSS,VMWSPROJ ESTIMATED WORKING SET SIZE @V2B2638 00842000
- MVC MN400PDR,VMPDRUM DRUM ALLOCATED PAGE FRAMES @V2B2638 00843000
- MVC MN400PDK,VMPDISK DISK ALLOCATED PAGE FRAMES @V2B2638 00844000
- L R2,=A(DMKPRGTI) ADDRESS OF THE INTERVAL @V2B2638 00845000
- MVC MN400INT,0(R2) INTERVAL BETWEEN DATA COLLECTIONS@V2B2638 00846000
- MVC MN400LPR,VMLSTPRC LAST PROBLEM STATE PU @V60BEBC 00846500
- SKIPUSER TM MONFLAG1,MONSYSVM WORKING WITH SYSTEM VMBLOK? @V4075A4 00847000
- BO SETEND YES, GO GET POINTER TO LAST USER @V4075A4 00848000
- CR R8,R10 NO RELOAD, USUAL CASE. DONE YET? @V2B2638 00849000
- BER R6 YUP, EXIT THEN. @V2B2638 00850000
- L R8,VMPNT NEXT, PLEASE. @V2B2638 00851000
- B MOVUDATA GO EXAMINE THIS USER. @V2B2638 00852000
- SPACE 00853000
- SETEND NI MONFLAG1,255-MONSYSVM NOT USING SYS VMBLOK @V4075A4 00854000
- L R10,VMPNT SYSTEM IS USER 0, LAST IS USER 1 @V4075A4 00855000
- LTR R10,R10 IS THE SYSTEM THE ONLY ONE ON? @V2B2638 00856000
- BZR R6 YES, THEN DONE NOW. @V2B2638 00857000
- L R8,VMPNT-VMBLOK(R10) AIM AT USER NO. 2 @V2B2638 00858000
- B MOVUDATA AND GO EXAMINE HIM. @V2B2638 00859000
- DROP R1,R8 @V2B2638 00860000
- USING VMBLOK,R11 @V2B2638 00861000
- EJECT 00862000
- ******* 00863000
- * 00864000
- * CLASS 5 CODE 0, INSTSIM, INSTRUCTION SIMULATION 00865000
- * 00866000
- ******* 00867000
- MONCOD50 LA R0,MN500LEN LENGTH OF THE RECORD @V2B2638 00868000
- BAL R5,PREPREC GET SPACE & CREATE HEADER @V2B2638 00869000
- BAL R5,TSTSUSP @VA10215 00869500
- USING MN500,R1 ADDRESS THE RECORD @V2B2638 00870000
- MVC MN500UID,VMUSER USERID ISSUING INSTRUCTION @V2B2638 00871000
- MVC MN500INS,VMINST GET THE INSTRUCTION @V2B2638 00872000
- MVC MN500VAD,VMPSW+4 GET THE VIRT INST. ADDR @V2B2638 00873000
- MVI MN500VAD,X'00' CLEAR TOP BYTE @V2B2638 00874000
- STPT MONCLOCK GET USERS CURRENT TOTAL TIME @V2B2638 00875000
- MVC MN500OVH,MONCLOCK MOVE IT INTO DATA RECORD @V2B2638 00876000
- B EXIT2 @V2B2638 00877000
- DROP R1 @V2B2638 00878000
- EJECT 00879000
- ******* 00880000
- * 00881000
- * CLASS 6 CODE 1, DASTAP, COLLECT DEVICE STATISTICS 00882000
- * 00883000
- * REGISTER USAGE IN THIS ROUTINE: 00884000
- * 00885000
- * R0 - DEVICE COUNT 00886000
- * R1 - CHANNEL INDEX 00887000
- * R2 - CONTROL UNIT INDEX 00888000
- * R3 - DEVICE INDEX 00889000
- * R4 - BXLE INCREMENT CONSTANT 00890000
- * R5 - BXLE COMPARAND VALUE 00891000
- * R6 - CHANNEL BLOCK ADDRESS / DEVICE TYPE BYTE 00892000
- * R7 - CONTROL UNIT BLOCK ADDRESS 00893000
- * R8 - DEVICE BLOCK ADDRESS 00894000
- * R9 - MONCOM ADDRESS 00895000
- * R10 - POINTER WITHIN DEVICE LIST FOR PASS 2 00896000
- * R11 - VMBLOCK ADDRESS 00897000
- * R12 - BASE REGISTER 00898000
- * R13 - NOT USED 00899000
- * R14 - DEVICE TYPE CHECK BYTE / BALR TO DMKFREE 00900000
- * R15 - POINTER WITHIN MN600 RECORD FOR PASS 2 00901000
- * 00902000
- ******* 00903000
- USING RDEVBLOK,R8 @V2B2638 00904000
- MONCOD61 LH R1,MONDVNUM GET THE NUMBER OF DEVICES @V2B2638 00905000
- MH R1,=AL2(MN600DLN) LENGTH OF EACH RECORD @V2B2638 00906000
- LA R0,MN600HLN(R1) PLUS LENGTH OF HDR -> R0 @V2B2638 00907000
- BAL R5,PREPREC GET SPACE AND CREATE REC HEADER @V2B2638 00908000
- BAL R5,TSTSUSP1 @VA10215 00908500
- USING MN600HDR,R1 @V4075A4 00909000
- LH R3,MONDVNUM GET THE NUMBER OF DEVICES @V2B2638 00910000
- STH R3,MN600NUM PUT IN THE BUFFER/USE IT FOR BCT @V2B2638 00911000
- LA R1,MN600HLN(R1) REPOSITION FIELD POINTER @V2B2638 00912000
- DROP R1 DROP HEADER DSECT @V2B2638 00913000
- USING MN600DEV,R1 SWITCH TO RECORD DSECT @V2B2638 00914000
- L R2,MONDVLST ADDRESSS OF DEVICE LIST @V2B2638 00915000
- USING RCUBLOK,R7 @V2B2638 00916000
- USING RCHBLOK,R5 @V2B2638 00917000
- MOVEADD L R8,0(R2) NEXT DEVICE BLOCK POINTER @V2B2638 00918000
- L R7,RDEVCUA PICK UP CONTROL UNIT ADDRESS @V2B2638 00919000
- MVC MN600ADD,RDEVADD GET THE DEVICE ADDRESS @V2B2638 00920000
- OC MN600ADD+1(1),RCUADD+1 AND CONTROL UNIT ADDR @V2B2638 00921000
- TM RCUTYPE,RCUSUB IS THIS A SUB-CONTROL BLOCK? @V2B2638 00922000
- BZ *+8 NOPE, CU BLOCK PTR IS OK AS IS @V2B2638 00923000
- L R7,RCUPRIME PICK UP ADDR OF THE PRIME CU @V2B2638 00924000
- L R5,RCUCHA PICK UP ADDR OF THE CH BLOCK @V2B2638 00925000
- OC MN600ADD(1),RCHADD ADD CHANNEL ADDRESS @V2B2638 00926000
- MVC MN600TY,RDEVTYPC DEVICE TYPE CODE @V2B2638 00927000
- MVC MN600SER,RDEVSER VOLUME SERIAL NUMBER @V2B2638 00928000
- MVC MN600CNT,RDEVIOCT I/O COUNT FOR THIS DEVICE @V2B2638 00929000
- LA R2,MNDEVLEN(R2) NEXT DEVICE BLOCK @V60BEBC 00930000
- LA R1,MN600DLN(R1) NEXT MONITOR RECORD FIELD @V2B2638 00931000
- BCT R3,MOVEADD GO DO THE NEXT DEVICE @V2B2638 00932000
- L R2,MONUTRB UTILIZATION ACTIVE?? @V60BEBC 00933000
- LTR R2,R2 WAS IT SPECIFIED? @V60BEBC 00933100
- BZR R6 NO, DON'T COLLECT DATA @V60BEBC 00933200
- L R3,MONCHPTR GET NUMBER OF SAMPLES @V60BEBC 00933300
- LH R3,0(R3) SAMPLES TO REG 3 @V60BEBC 00933400
- LTR R3,R3 ANY SAMPLES TAKEN SINCE LAST TIM@V60BEBC 00933500
- BZR R6 NO, DON'T COLLECT DATA @V60BEBC 00933600
- DROP R1,R5,R7,R8 @V2B2638 00934000
- EJECT 00935000
- *** @V60BEBC 00935070
- * @V60BEBC 00935140
- * CLASS 6, CODE 2, DASTAP, I/O UTILIZATION @V60BEBC 00935210
- * @V60BEBC 00935280
- *** @V60BEBC 00935350
- MONCOD62 LH R1,MONDVNUM GET NUMBER OF DEVICES @V60BEBC 00935420
- MH R1,=AL2(MN602DLN) LENGTH OF EACH RECORD @V60BEBC 00935490
- LA R0,2 SIMULATE CODE 2 @V60BEBC 00935560
- ST R0,MONCODE MONITOR CALL FOR DASTAP @V60BEBC 00935630
- LA R0,MN602HLN(R1) REC LENGTH PLUS HDR LENGTH TO R0@V60BEBC 00935700
- BAL R5,PREPREC GET SPACE AND CREATE HEADER @V60BEBC 00935770
- BAL R5,TSTSUSP1 @VA10215 00935810
- CALL DMKENT62 COLLECT UTILIZATION DATA @V60BEBC 00935840
- BR R6 RETURN @V60BEBC 00935910
- ******* 00936000
- * 00937000
- * CLASS 7 CODE 0, SEEKS, COLLECT DASD ARM MOVEMENT STATISTICS 00938000
- * 00939000
- ******* 00940000
- SPACE 00941000
- MONCOD70 LA R0,MN700LEN LENGTH OF THE RECORD @V2B2638 00942000
- BAL R5,PREPREC GET SPACE & CREATE HEADER @V2B2638 00943000
- BAL R5,TSTSUSP @VA10215 00943500
- USING MN700,R1 ADDRESS THE BLOCK @V2B2638 00944000
- MVC MN700UID,VMUSER REQUESTOR @V2B2638 00945000
- USING RCHBLOK,R6 @V2B2638 00946000
- USING RCUBLOK,R7 @V2B2638 00947000
- USING RDEVBLOK,R8 @V2B2638 00948000
- USING IOBLOK,R10 @V2B2638 00949000
- L R8,MONREGS+R8*4 RESTORE R8 TO VALUE AT MC TIME @V4M0117 00950000
- L R10,MONREGS+R10*4 RESTORE R10 AS WELL @V4M0117 00951000
- BAL R14,RDHEX GET REAL DEV ADDR IN HEX @VA03543 00952000
- STH R2,MN700ADD PUT REAL DEV ADDR IN THE RECORD @VA03543 00953000
- MVC MN700CYL,IOBCYL CYL SEEK ADD. @V2B2638 00954000
- TM IOBFLAG,IOBPAG IS THIS A PAGING OPERATION @VA09047 00954100
- BNO NOTPAGSK NO NOT PAGING OPERATION @VA09047 00954200
- MVC MN700CYL,PAGECYL CYL SEEK ADDRESS @VA09047 00954300
- NOTPAGSK DS 0H @VA09047 00954400
- MVC MN700CCY,RDEVCYL CURRENT ARM POSITION @V2B2638 00955000
- MVC MN700QDV,RDEVQCNT DEVICE QUEUED TASK COUNT @V2B2638 00956000
- MVC MN700QCU,RCUQCNT+1 C.U. QUEUED TASK COUNT @V2B2638 00957000
- MVC MN700QCH,RCHQCNT+1 CHANNEL QUEUED TASK CNT @V2B2638 00958000
- TM RDEVFLAG,RDEVSKUP TEST SEEK DIRECTION FLAG @V2B2638 00959000
- BZ SEKNOTUP GOING DOWN THE VOLUME @V2B2638 00960000
- MVI MN700DIR,X'01' SET SEEK UP FLAG IN DATA RECORD @V2B2638 00961000
- B EXIT2 DONE @V2B2638 00962000
- SEKNOTUP MVI MN700DIR,X'00' SET SEEK DOWN FLAG @V2B2638 00963000
- B EXIT2 DONE @V2B2638 00964000
- SPACE 3 00965000
- RDHEX EQU * CONVERT RDEVBLOK PTR TO HEX @VA03543 00966000
- * REAL DEV ADDR 00967000
- LH R2,RDEVADD GET DEVICE ADDRESS @VA03543 00968000
- L R7,RDEVCUA ADDRESS OF CU BLOCK @VA03543 00969000
- LH R3,RCUADD GET CU ADDRESS @VA03543 00970000
- OR R2,R3 ADD CU ADDRESS TO DEV ADDRESS @VA03543 00971000
- TM RCUTYPE,RCUSUB IS THIS A SUB CONTROL UNIT ? @VA03543 00972000
- BZ *+8 NOPE, BRANCH @VA03543 00973000
- L R7,RCUPRIME GET ADDRESS OF PRIME CU @VA03543 00974000
- L R6,RCUCHA NOW GET ADDRESS OF CH BLOCK @VA03543 00975000
- LH R3,RCHADD GET CHANNEL ADDRESS @VA03543 00976000
- OR R2,R3 ADD IN CH ADDRESS @VA03543 00977000
- BR R14 RETURN TO CALLER @VA03543 00978000
- DROP R1,R6,R7,R8,R10 @VA03543 00979000
- EJECT 00980000
- ******* 00981000
- * 00982000
- * CLASS 8 CODE 2, SYSPROF, DEVICE STATISTICS AND SYSTEM CNTRS 00983000
- * 00984000
- ****** 00985000
- SPACE 00986000
- MONCOD82 LA R0,MNCLSYS SIMULATE SYSTEM PROFILE CLASS @VM01017 00987000
- STH R0,MONCLASS ... @V2B2638 00988000
- LA R0,MNCODA ... @VM01017 00989000
- ST R0,MONCODE ... @V2B2638 00990000
- LH R1,MONDVNUM NUMBER OF DEVICES @V2B2638 00991000
- LR R6,R1 SAVE FOR BCT LOOP @V2B2638 00992000
- SLL R1,2 4 BYTES PER DEVICE @V2B2638 00993000
- LA R0,MN802DLN+MN802CLN(R1) XTRA DATA LEN -> R0 @V2B2638 00994000
- BAL R5,PREPREC GET SPACE AND CREATE HEADER @V2B2638 00995000
- BAL R5,TSTSUSP @VA10215 00995500
- USING MN802DEV,R1 ADDRESS THE DEVICE PORTION @V2B2638 00996000
- STH R6,MN802NUM NUMBER OF DEV. INTO THE REC @V2B2638 00997000
- L R2,MONDVLST START OF DEVICE ADD. LIST @V2B2638 00998000
- MOVEADDR L R8,0(R2) PICK UP RDEVBLOK ADDRESS @V2B2638 00999000
- USING RDEVBLOK,R8 ADDRESS THE RDEVBLOK @V2B2638 01000000
- MVC MN802CNT,RDEVIOCT COUNT OF I/O TO THIS DEVICE @V2B2638 01001000
- LA R1,4(,R1) BUMP TO NEXT DATA SLOT @V2B2638 01002000
- LA R2,MNDEVLEN(R2) BUMP TO NEXT DEVICE @V60BEBC 01003000
- BCT R6,MOVEADDR DO THE NEXT DEVICE @V2B2638 01004000
- LA R1,MN802DLN(R1) READJUST BUFFER POINTER @V2B2638 01005000
- DROP R1,R8 @V2B2638 01006000
- SPACE 3 01007000
- USING MN802CTR,R1 ADDRESS THE REMAINDER OF THE REC @V2B2638 01008000
- L R2,=A(DMKSYSNM) @V2B2638 01009000
- MVC MN802NAU,0(R2) NO. OF LOGGED ON USERS @V2B2638 01010000
- MVC MN802PGR,PGREAD NO. OF SYSTEM PAGE READS @V2B2638 01011000
- MVC MN802PGW,PGWRITE NO. OF SYSTEM PAGE WRITES @V2B2638 01012000
- L R2,=A(DMKDSPNP) @V2B2638 01013000
- MVC MN802NPP,0(R2) NO. OF SYSTEM PAGABLE PAGES @V2B2638 01014000
- MVC MN802WID,IDLEWAIT SYSTEM IDLE WAIT TIME @V2B2638 01015000
- MVC MN802WPG,PAGEWAIT SYSTEM PAGE WAIT TIME @V2B2638 01016000
- MVC MN802WIO,IONTWAIT SYSTEM I/O WAIT TIME @V2B2638 01017000
- MVC MN802PRB,PROBTIME SYSTEM PROBLEM TIME @V2B2638 01018000
- B EXIT2 @V2B2638 01019000
- DROP R1 @V2B2638 01020000
- EJECT 01021000
- *. 01022000
- * 01023000
- * THE FOLLOWING TABLE IS FOR THE TABLE DRIVEN MONITOR 01024000
- * DATA COLLECTOR. 01025000
- * 01026000
- * IT IS IMPERATIVE THAT THE ORDER OF THIS TABLE REMAIN 01027000
- * INTACT. 01028000
- * CHANGING THE TABLE WILL AFFECT THE TAPE RECORD 01029000
- * FORMAT, THEREBY AFFECTING ANY AND ALL DATA REDUCTION 01030000
- * PROGRAMS DEPENDENT UPON THE TAPE FORMAT. 01031000
- * 01032000
- * THE FOLLOWING EXTRNS IDENTIFY OTHER EXTERNAL REFERENCES 01033000
- * WHICH CONTAIN MONITOR DATA, BUT THE DATA COLLECTION 01034000
- * IS NOT TABLE DRIVEN. 01035000
- SPACE 01036000
- EXTRN DMKDSPNP NUMBER OF SYSTEM PAGABLE PAGES @V2B2638 01037000
- EXTRN DMKSCHPU SUM OF WORKING SETS OF IN Q USERS@V2B2638 01038000
- EXTRN DMKSCHW1 NUMBER OF USERS ELIGABLE FOR Q1 @V2B2638 01039000
- EXTRN DMKSCHW2 NUMBER OF USERS ELIGABLE FOR Q2 @V2B2638 01040000
- EXTRN DMKSCHN1 NUMBER OF USERS IN Q1 @V2B2638 01041000
- EXTRN DMKSCHN2 NUMBER OF USERS IN Q2 @V2B2638 01042000
- EXTRN DMKSCHQ1 ADDRESS OF Q1 USER BEING ADDED @V2B2638 01043000
- EXTRN DMKSCHAL QUEUE DROP FLAG (REASON FOR DROP)@V2B2638 01044000
- EXTRN DMKCPEID SOFTWARE SYSTEM LEVEL @V2B2638 01045000
- EXTRN DMKSYSOC SYSTEM OWNED VOLUME COUNT @V2B2638 01046000
- EXTRN DMKSYSOW SYSTEM OWNED VOLUME LIST @V2B2638 01047000
- EXTRN DMKSYSNM NO. OF USERS LOGGED ON THE SYSTEM@V2B2638 01048000
- SPACE 5 01049000
- EJECT 01050000
- *. 01051000
- * 01052000
- * ENTRY POINT - 01053000
- * 01054000
- * DMKMONPR - ALLOCATE A MONITOR RECORD IN THE CURRENT BUFFER 01055000
- * 01056000
- * ENTRY CONDITIONS - 01057000
- * 01058000
- * GPR0 - LENGTH OF REQUESTED RECORD 01059000
- * GPR9 - ADDRESS OF MONCOM 01060000
- * GPR12 - ADDRESS OF ENTRY POINT 01061000
- * GPR13 - ADDRESS OF STANDARD SAVE AREA 01062000
- * 01063000
- * EXIT CONDITIONS - 01064000
- * 01065000
- * GPR0 - ADDRESS OF DMKMONIO 01066000
- * GPR1 - POINTER TO ALLOCATED RECORD 01067000
- * OR AS A CONDITION CODE, 0 ON SUSPEND 01067500
- * GPR5 - CONTENTS NOT SAVED BY DMKMONPR 01068000
- * 01069000
- * CALLS TO OTHER ROUTINES 01070000
- * 01071000
- * DMKIOSQR - TO INITIATE I/O FOR JUST FILLED DATA PAGE 01072000
- * 01073000
- * REGISTER USAGE - 01074000
- * 01075000
- * OPERATION - 01076000
- * 01077000
- * MONITOR RECORD ALLOCATION 01078000
- * 01079000
- * DMKMONPR IS CALLED EXTERNALLY VIA SVC, AND INTERNALLY, VIA 01080000
- * BAL AS ROUTINE 'PREPREC' IN ORDER TO ALLOCATE A MONITOR 01081000
- * RECORD FROM THE CURRENT BUFFER. 01082000
- * R0 - WORK REG 01083000
- * R1 - WORK REG 01084000
- * R2 - RECORD LENGTH + HEADER 01085100
- * R3 - WORK REG 01086000
- * R4 - WORK REG 01087000
- * R5 - RETURN ADDRESS 01088000
- * R6 - LINK TO PAGEFULL SUBROUTINE 01089000
- * R7 - RETURN CODE FROM PAGEFULL 01090000
- * R8 - ADDRESS OF ABSOLUTE PSA 01091000
- * R9 - ADDRESS OF MONCOM 01092000
- * R10 - ADDRESS OF IOB 01093000
- * R11 - USED TO SAVE ADDR OF CURRENT RECORD FOR USE LATER 01094000
- * R12 - ADDRESS OF DMKMON 01095000
- * R13 - ADDRESS OF SAVEAREA 01096000
- * R14 - WORK REG 01097000
- * R15 - WORK REG 01098000
- * 01099000
- * 01100000
- * ALL ENTRIES TO DMKMON ARE UNDER THE SYSTEM LOCK, EXCEPT ONE, 01101000
- * WHICH IS THE SEEKS CLASS MONITOR CALL. THE ONLY SERIALIZATION 01102000
- * PROBLEM IS IN ALLOCATING A RECORD FROM THE CURRENT BUFFER AND 01103000
- * SCHEDULING A BUFFER TO BE WRITTEN TO TAPE. 01104000
- * 01105000
- * THE PROBLEM OF ALLOCATING A RECORD IS SOLVED BY USING COMPARE- 01106000
- * AND-SWAP TO UPDATE MONNEXT TO POINT TO THE NEXT FREE BYTE 01107000
- * IN THE CURRENT BUFFER. IF BOTH PROCESSORS TRY TO ALLOCATE 01108000
- * A RECORD AT THE SAME TIME, ONLY ONE PROCESSOR'S CS WILL 01109000
- * SUCCEED. THE OTHER WILL FAIL, CAUSING THE PROCESSOR TO 01110000
- * START OVER THE PROCESS, WHICH WILL CAUSE IT TO PICK UP THE 01111000
- * NEW VALUE OF MONNEXT SET BY THE OTHER PROCESSOR. 01112000
- * 01113000
- * THE PROBLEM OF SCHEDULING A BUFFER TO BE WRITTEN TO TAPE IS 01114000
- * SOLVED BY USING COMPARE-AND-SWAP TO SET AN INDICATION THAT 01115000
- * THE CURRENT BUFFER IS BEING SCHEDULED FOR I/O. IF BOTH 01116000
- * PROCESSOR'S TRY TO DO THIS AT THE SAME TIME, ONE WILL SUCCEED 01117000
- * AND CONTINUE ON WITH SCHEDULE I/O PROCESSING. THE OTHER WILL 01118000
- * FAIL AND GO BACK TO RETRY ALLOCATING A RECORD. THE FIELDS IN 01119000
- * MONCOM RELATING TO WHICH BUFFER IS CURRENT AND THE BUFFER 01120000
- * STATE BITS CAN BE UPDATED WITHOUT COMPARE-AND-SWAP BECAUSE THE 01121000
- * INITIAL CS WILL ONLY PERMIT ONE PROCESSOR TO TAKE THE PATH 01122000
- * WHICH UPDATES THESE FIELDS. 01123000
- * 01124000
- * THE FIELD MONIOBF IS ZERO IF NO MONITOR I/O IS ACTIVE, 01125000
- * A POSITIVE ADDRESS IF I/O IS ACTIVE, AND A NEGATIVE ADDRESS 01126000
- * IF I/O IS PENDING AS WELL AS ACTIVE. BECAUSE ONE PROCESSOR 01127000
- * CAN BE CAUSING A BUFFER TO BE SCHEDULED FOR I/O WHILE AN I/O 01128000
- * INTERRUPT FROM ANOTHER BUFFER IS BEING PROCESSED ON THE OTHER 01129000
- * PROCESSOR, MONIOBF MUST BE UPDATED VIA COMPARE-AND-SWAP. 01130000
- * IF A CS FAILS, THE OTHER PROCESSOR HAS CAUSED THE I/O STATUS 01131000
- * TO CHANGE, SO THAT STATUS MUST BE RE-EVALUATED. 01132000
- * 01133000
- * DMKMONPR: 01134000
- * 01135000
- * SET R5 TO POINT TO AN EXIT MACRO. R5 IS THE RETURN 01136000
- * ADDRESS TO BE COMPATIBLE WITH INTERNAL USE OF 01137000
- * PREPREC. GO TO PREPRECR (PREPREC MAINLINE). 01138000
- * 01139000
- * PREPREC: 01140000
- * 01141000
- * PREPREC IS INTERNAL ENTRY POINT. GET ADDRESS OF 01142000
- * A SAVE AREA, (THERE'S ONE FOR EACH PROCESSOR), SAVE 01143000
- * CALLER'S R13 IN IT, AND PUT ADDRESS OF SAVE AREA IN R13. 01144000
- * 01145000
- * PREPRECR: 01146000
- * 01147000
- * THIS IS WHERE EXTERNAL AND INTERNAL ENTRY POINTS JOIN. 01148000
- * IF NOT SPECIAL 1-BUFFER CASE, GO TO CHKROOM. OTHERWISE 01149000
- * MAKE SURE TAPE IS NOT BUSY. IF ONLY 1 BUFFER IS BEING 01150000
- * USED AND TAPE IS STILL WRITING IT OUT, MONITOR 01151000
- * SUSPENSION IS NECESSARY SO GO TO SUSPEND1. 01152000
- * 01153000
- * CHKROOM: 01154000
- * 01155000
- * ADD LENGTH OF RECORD REQUESTED TO MONNEXT TO SEE IF 01156000
- * REQUESTED RECORD LENGTH WILL FIT IN THE CURRENT BUFFER. 01157000
- * IF IT WILL, GO TO PREPCOM TO ALLOCATE IT. IF NOT, GO 01158000
- * TO CLPGFULL TO INVOKE THE PAGE FULL ROUTINE. FOR THE 01159000
- * 1-BUFFER CASE, AN ADDITIONAL CHECK IS MADE TO ENSURE 01160000
- * THAT ANOTHER PERFORM RECORD CAN FIT. IF IT CANNOT, 01161000
- * PAGEFULL IS INVOKED NOW TO MAKE ROOM FOR IT. 01162000
- * 01163000
- * CLPGFULL: 01164000
- * 01165000
- * MAKE SURE OTHER PROCESSOR HAS NOT CAUSED SUSPENSION, 01166000
- * IF IT HAS, GO TO SUSPEXIT TO EXIT. MAKE SURE OTHER 01167000
- * PROCESSOR IS NOT IN THE PROCESS OF SCHEDULING I/O, IF 01168000
- * IT IS, GO BACK TO CHKROOM TO RETRY. BRANCH AND LINK 01169000
- * TO PAGEFULL. IF PAGEFULL RETURNS A NON-ZERO RETURN 01170000
- * CODE, THE OTHER PROCESSOR SCHEDULED THE I/O ALREADY, 01171000
- * SO RETURN TO CHKROOM TO RETRY. 01172000
- * 01173000
- * PREPCOM: 01174000
- * 01175000
- * CLAIM THE SLOT THAT'S BEEN ALLOCATED IN THE BUFFER 01176000
- * BY SETTING A NEW VALUE OF MONNEXT JUST BEYOND IT. 01177000
- * IN THE AP CASE, A COMPARE-AND-SWAP IS USED TO DO THIS. 01178000
- * IF THE CS FAILS, THE OTHER PROCESSOR HAS CLAIMED THE 01179000
- * SAME SLOT THAT THIS PROCESSOR THOUGHT WAS AVAILABLE, 01180000
- * AND SO IT IS NECESSARY TO GO BACK TO CHKROOM TO 01181000
- * START OVER. OTHERWISE, THE STANDARD HEADER IS FILLED 01182000
- * IN, THE REGISTERS ARE RESTORED, AND CONTROL IS RETURNED 01183000
- * TO THE CALLER, EITHER VIA BR OR SVC 12. 01184000
- * 01185000
- * PAGEFULL: 01186000
- * 01187000
- * FOR AP, TO FORCE ALL OTHER ATTEMPTS TO GET SPACE 01188000
- * IN THIS BUFFER TO FAIL, AND TO INDICATE THAT THE 01189000
- * BUFFER IS BEING SCHEDULED FOR I/O, USE COMPARE-AND-SWAP 01190000
- * TO PUT THE CURRENT VALUE OF PAGEND (THE LAST BYTE 01191000
- * IN THE BUFFER) INTO MONNEXT. IF THE CS FAILS, THE 01192000
- * OTHER PROCESSOR IS SCHEDULING THE I/O, SO SET THE 01193000
- * RETRY CONDITION CODE AND RETURN TO THE CALLER. 01194000
- * OTHERWISE CONTINUE. 01195000
- * 01196000
- * CHKTAPE: 01197000
- * 01198000
- * GET THE CURRENT VALUE OF MONIOBF, THE POINTER TO THE 01199000
- * BUFFER CURRENTLY BEING WRITTEN, IF ANY. IF MONIOBF IS 01200000
- * ZERO, THEN NO I/O IS CURRENTLY ACTIVE, AND THIS I/O CAN 01201000
- * BE SCHEDULED WITHOUT FEAR OF AN I/O INTERRUPT COMING 01202000
- * FROM THE TAPE. IF MONIOBF IS A POSITIVE ADDRESS, THEN 01203000
- * I/O IS ACTIVE, BUT NO FURTHER I/O IS PENDING. AN AP 01204000
- * INTERACTION IS POSSIBLE IF THE INTERRUPT FROM THIS I/O 01205000
- * COMES IN ON THE OTHER PROCESSOR WHILE THE I/O IS BEING 01206000
- * MADE POSSIBLE ON THIS PROCESSOR. IF MONIOBF IS 01207000
- * NEGATIVE, THE COMPLEMENT OF THE ADDRESS OF THE BUFFER 01208000
- * BEING WRITTEN OUT, THEN AT LEAST ONE BUFFER IS WAITING 01209000
- * TO BE WRITTEN OUT, AS WELL AS THE ONE BEING WRITTEN OUT. 01210000
- * IN THIS CASE, NOTHING NEEDS TO BE DONE WITH THE TAPE. 01211000
- * WHEN THE TWO BUFFERS ALREADY WAITING ARE WRITTEN OUT, 01212000
- * THIS ONE WILL BE PICKED UP AND WRITTEN AUTOMATICALLY. 01213000
- * 01214000
- * IF MONIOBF = 0, THEN GO TO SCHEDIO TO SCHEDULE THE 01215000
- * BUFFER TO BE WRITTEN OUT. 01216000
- * 01217000
- * IF MONIOBF > 0 THEN COMPLEMENT MONIOBF AND TRY TO 01218000
- * SWAP COMPLEMENTED VALUE BACK IN, TO INDICATE THAT I/O 01219000
- * IS NOW PENDING. IF THIS SUCCEEDS, GO TO GTNXTBUF. 01220000
- * OTHERWISE, I/O INTERRUPT HAS COME IN, MONIOBF IS NOW 01221000
- * ZERO, GO BACK TO TAPECS TO RE-EVALUATE. 01222000
- * 01223000
- * IF MONIOBF < 0 THEN GO TO GTNXTBUF. 01224000
- * 01225000
- * SCHEDIO: 01226000
- * 01227000
- * SET NEW VALUE OF MONIOBF TO INDICATE THAT TAPE IS BUSY. 01228000
- * SET UP IOB FOR BUFFER WRITE. CALL IOS VIA A CPEXBLOK. 01229000
- * 01230000
- * GTNXTBUF: 01231000
- * 01232000
- * GET THE ADDRESS OF THE NEXT BUFFER, WRAPPING TO THE 01233000
- * FIRST BUFFER IF NECESSARY. IF THE BUFFER IS 01234000
- * AVAILABLE, MARK IT AS THE ACTIVE COLLECTOR, SET 01235000
- * UP THE NEW MONCRBUF, MONNEXT, AND PAGEND VALUES, AND 01236000
- * THEN RETURN TO THE CALLER OF PAGEFULL. IF THE BUFFER 01237000
- * IS NOT AVAILABLE, THEN CHECK IF THIS IS THE ONE-BUFFER 01238000
- * CASE. IF IT IS, LACK OF AN AVAILABLE BUFFER IS OKAY, SO 01239000
- * RETURN. OTHERWISE, GO TO SUSPEND1 TO SUSPEND THE 01240000
- * MONITOR. 01241000
- * 01242000
- * SUSPEND1: 01243000
- * 01244000
- * SET THE SUSPEND FLAG, ZERO OUT MC MASKS IN BOTH PSAS, 01245000
- * INCREMENT THE SUSPEND COUNT, RECORD THE TOD OF SUSPEND. 01246000
- * IF ENTERED FROM TIMER INTERRUPT, RETURN TO CALLER OF 01247000
- * PREPREC. OTHERWISE EXIT TO DISPATCHER. 01248000
- * 01249000
- SPACE 01250000
- DMKMONPR RELOC @V4075A4 01251000
- LA R5,EXITP GET RETURN ADD FOR EXT ENTRY @V4075A4 01252000
- ST R5,SAVER5 PUT RETURN ADDR IN SAVE AREA @V4075A4 01253000
- ST R13,SAVEWRK1 SAVE R13 @V4075A4 01254000
- LA R1,DMKMONIO GET ADDRESS OF I/O INT HANDLER @V4M0118 01255000
- ST R1,R0*4+SAVEREGS RETURN IT TO EXT CALLER @V4M0118 01256000
- B PREPRECR SKIP AROUND SAVE AREA MANIP @V4075A4 01257000
- PREPREC TM APSTAT1,PROCIO AM I THE APU? @V4075A4 01258000
- BZ APUSAVE YES, SAVE REGS IN APU SAVE AREA @V4075A4 01259000
- LA R15,MONSAVE1 GET ADDRESS OF CPU'S SAVE AREA @V4075A4 01260000
- B STOREGS CONTINUE WITH PREPREC PROCESSING @V4075A4 01261000
- APUSAVE LA R15,MONSAVE2 GET ADDRESS OF APU'S SAVE AREA @V4075A4 01262000
- STOREGS STM R0,R11,16(R15) SAVE REGS IN APPROP SAVE AREA @V4075A4 01263000
- ST R13,12(R15) SAVE CALLER'S R13 @V4075A4 01264000
- LR R13,R15 TRANSFER SAVE AREA ADDR TO R13 @V4075A4 01265000
- PREPRECR TM MONFLAG1,MON1BUF SPECIAL 1-BUFFER CASE? @V4075A4 01266000
- BZ CHKROOM NO, SKIP SPECIAL CHECK @V4075A4 01267000
- L R2,MONIOBF IF 1-BUFFER CASE AND I/O IS @V4075A4 01268000
- LTR R2,R2 STILL ACTIVE, @V4075A4 01269000
- BNZ SUSPEND1 THEN ABANDON ALL HOPE @V4075A4 01270000
- CHKROOM LR R2,R0 LENGTH OF RECORD REQ'D TO R2 @V4075A4 01271000
- LA R2,MNHDRLEN(R2) ADD IN STD HEADER LENGTH @V4075A4 01272000
- CHKROOM1 DS 0H @VA09843 01272500
- L R8,PREFIXA GET ADDRESSABILITY TO ABS PSA @V4075A4 01273000
- L R3,MONNEXT(R8) POINT TO NEXT AVAIL BUFFER SLOT @V4075A4 01274000
- LR R11,R3 SAVE ADDR OF CURR REC FOR LATER @V4M0153 01275000
- LA R4,0(R2,R3) R4 -> FUTURE NEXT AVAIL SLOT @V4075A4 01276000
- C R4,PAGEND(R8) DOES RECORD FIT IN BUFFER? @V4075A4 01277000
- BNL CLPGFULL NO, CALL PAGE FULL ROUTINE @V4075A4 01278000
- TM MONFLAG1,MON1BUF IS THIS 1-BUFFER CASE? @V4075A4 01279000
- BZ PREPCOM NO, NO SPECIAL TEST NEEDED @V4075A4 01280000
- LA R1,MNHDRLEN+MN000LEN(R4) IS THERE ROOM FOR @V4075A4 01281000
- * ANOTHER PERFORM RECORD? 01282000
- TM APSTAT1,APUOPER IS THERE THE APU RECORD @V4M0135 01283000
- BZ NOAPU TO WORRY ABOUT? @V4M0135 01284000
- LA R1,MNHDRLEN+MN001LEN(R1) YES, ADD IT IN @V4M0135 01285000
- NOAPU EQU * @V4M0135 01286000
- C R1,PAGEND(R8) IF NOT, SCHEDULE I/O NOW @V4075A4 01287000
- BNH PREPCOM IT WILL FIT, XFER TO NORM PATH @V4075A4 01288000
- CLPGFULL TM MONFLAG2,SUSPEND HAS OTHER PU CAUSED SUSP? @V4075A4 01289000
- BNZ SUSPEXIT YES, IGNORE THIS MONITOR CALL @V4075A4 01290000
- TM MONFLAG3,CLSUS+SPOOLED SPOOLING AND CLOSE SUSP @V50A2B5 01291000
- BO SUSPEXIT YES @V50A2B5 01292000
- CLC PAGEND-IPLPSW(4,R8),MONNEXT-IPLPSW(R8) DOES @V4075A4 01293000
- * MONNEXT INDICATE THAT OTHER PU 01294000
- * IS SCHEDULING I/O ? 01295000
- BE CHKROOM1 YES, RETURN @VA09843 01296100
- BAL R6,PAGEFULL GO SCHED I/O AND GET NEXT BUFF @V4075A4 01297000
- LTR R7,R7 CHECK RESULTS OF PAGEFULL @V4075A4 01298000
- BNZ CHKROOM1 OTHER PU INTERFERRED. TRY AGAIN @VA09843 01299100
- TM MONFLAG1,CFSTOP WAS MONITOR STOPPED ? @V4M0238 01300000
- BO PRRET YES - MONITOR WILL NOT USE THIS @V4M0238 01301000
- * RECORD NOW. TRAILER RCD WILL BE @V4M0238 01302000
- * WRITTEN IN THIS BUFFER WHEN I/O @V4M0238 01303000
- * COMPLETES FOR THE LAST RECORD. @V4M0238 01304000
- LA R4,0(R2,R3) COMPUTE FUTURE VALUE OF MONNEXT @V4075A4 01305000
- PREPCOM TM APSTAT1,APUOPER IS APU OPERATIONAL? @V4075A4 01306000
- BZ NOCS1 NO, NO COMPARE-AND-SWAP NEEDED @V4075A4 01307000
- CS R3,R4,MONNEXT-IPLPSW(R8) CLAIM THE SLOT @V4075A4 01308000
- BNZ CHKROOM1 OTHER PU GOT IT. GO GET ANOTHER @VA09843 01309100
- B NOST1 BRANCH AROUND STORE @V4075A4 01310000
- NOCS1 ST R4,MONNEXT SET NEW MONNEXT VALUE (UP MODE) @V4075A4 01311000
- NOST1 EQU * @V4075A4 01312000
- LA R1,MNHDRLEN(R3) SET R1 PAST HEADER FOR CALLER @V2B2638 01313000
- USING MNHDR,R3 DSECT FOR HEADER @V2B2638 01314000
- SLL R2,16 RECORD SIZE TO TOP HALF @V2B2638 01315000
- ST R2,MNHRECSZ RECORD SIZE AND ZERO @V2B2638 01316000
- MVC MNHCLASS,MONCLASS+1 CLASS AND CODE FROM ... @V2B2638 01317000
- MVC MNHCODE,MONCODE+2 ... LOW CORE @V2B2638 01318000
- STCK MONCLOCK GET TIME OF DAY @V2B2638 01319000
- BC 3,DOWNWEGO CLOCK NOT FUNCTIONING @VA04301 01320000
- MVC MNHTOD(5),MONCLOCK+1 5 BYTES = 16 U-SEC ACCUR @V2B2638 01321000
- ST R1,SAVER1 SET RETURN R1 VALUE @V4075A4 01322000
- PRRET EQU * NO DATA WRITTEN TO NEW BUFFER @V4M0238 01323000
- LM R0,R11,16(R13) REST REGS FROM APPROP SAVE AREA @V4075A4 01324000
- L R13,SAVEWRK1 RESTORE R13 @V4075A4 01325000
- BR R5 RETURN TO CALLER @V2B2638 01326000
- DROP R3 @V2B2638 01327000
- EXITP EXIT RETURN TO EXTERNAL CALLER @V4075A4 01328000
- SPACE 1 01329000
- EJECT 01330000
- ****** 01331000
- * 01332000
- * PAGEFULL - THIS ROUTINE CALLS IOS TO WRITE OUT BUFFER, 01333000
- * AND UPDATES THE BUFFER CONTROL POINTERS 01334000
- * 01335000
- * REGS ON ENTRY - 01336000
- * R2 - RECORD LENGTH + HEADER 01336100
- * R3 - CURRENT VALUE OF MONNEXT 01337000
- * R5 - PREPREC'S RETURN ADDRESS 01338000
- * R6 - PAGEFULL'S RETURN ADDRESS 01339000
- * R8 - ADDRESS OF ABSOLUTE PSA 01340000
- * R9 - ADDRESS OF MONCOM 01341000
- * 01342000
- * REGS ON EXIT - 01343000
- * R2 - MUST REMAIN AS IS RECORD LENGTH + HEADER 01343100
- * R7 - RETURN CODE 01344000
- * 0 - I/O SCHEDULED AND NEXT BUFFER OBTAINED 01345000
- * 4 - OTHER PROCESSOR SCHEDULED I/O, RETRY 01346000
- * 01347000
- ****** 01348000
- SPACE 01349000
- PAGEFULL L R4,PAGEND(R8) R4 -> LAST BYTE IN CUR BUFF @V4075A4 01350000
- TM APSTAT1,APUOPER APU OPERATIONAL? @V4075A4 01351000
- BZ NOCS2 NO, USE STORE INSTEAD OF CS @V4075A4 01352000
- CS R3,R4,MONNEXT-IPLPSW(R8) SWAP IT IN TO MONNEXT @V4075A4 01353000
- * INDICATE THAT SCHEDULE OF 01354000
- * I/O IS IN PROGRESS 01355000
- BZ PREPWRIT CS SUCCESSFUL, CONTINUE @V4075A4 01356000
- LA R7,4 OTHER PROCESSOR DID IT, SO @V4075A4 01357000
- * RETURN RETRY INDICATION 01358000
- BR R6 RETURN TO CALLER @V4075A4 01359000
- NOCS2 ST R4,MONNEXT IND THAT I/O IS BEING SCHED (UP) @V4075A4 01360000
- PREPWRIT L R4,MONCURBF GET ADDRESS OF CURRENT BUFFER @V4075A4 01361000
- TM MONFLAG3,SPOOLED ARE WE SPOOLED @V50A2B5 01362000
- BNO NOSPL004 NO @V50A2B5 01363000
- NI 8(R4),MONBUFIO FLAG BUF 'SCHEDULED FOR IO'@V50A2B5 01364000
- B NOSPL005 @V50A2B5 01365000
- NOSPL004 NI 2(R4),MONBUFIO FLAG BUF 'SCHEDULED FOR IO'@V50A2B5 01366000
- NOSPL005 EQU * @V50A2B5 01367000
- SR R3,R4 CALC RECORD LENGTH TO BE WRITTEN @V4075A4 01368000
- TM MONFLAG1,MON1BUF SPECIAL ONE-BUFFER CASE? @V4075A4 01369000
- BZ CHKTAPE NO, LENGTH COMPUTED IS CORRECT @V4075A4 01370000
- AR R3,R2 YES, ADD IN LENGTH OF @V4075A4 01371000
- * CURRENT PERF RECORD 01372000
- CHKTAPE TM MONFLAG3,SPOOLED IS THIS IO TO BE SPOOLED? @V50A2B5 01373000
- BNO NOSPLCHK NO SPECIAL PROCESSING @V50A2B5 01374000
- LA R7,X'10'(R0) COMPUTE THE LENGTH @V50A2B5 01375000
- SR R3,R7 @V50A2B5 01376000
- STH R3,0(R7,R4) PUT IN THE RECORD @V50A2B5 01377000
- B RESMCOM @V50A2B5 01378000
- NOSPLCHK STH R3,0(R4) @V50A2B5 01379000
- * (STD VB FORMAT) 01380000
- RESMCOM EQU * @V50A2B5 01381000
- TAPECS L R1,MONIOBF GET ADDR OF BUFF BEING WRITTEN @V4075A4 01382000
- LTR R1,R1 IS THERE I/O GOING ON ALREADY? @V4075A4 01383000
- BZ SCHEDIO NO, GO AHEAD AND CALL IOS @V4075A4 01384000
- BM GTNXTBUF ADDRESS IN TWO'S COMPLEMENT @V4075A4 01385000
- * FORM, I/O ALREADY PENDING, 01386000
- * NO NEED TO DO ANYTHING 01387000
- * FALL THROUGH, I/O ALREADY ACTIVE, INDICATE THAT I/O IS NOW PENDING 01388000
- LCR R0,R1 MAKE ADDRESS OF BUFFER NEGATIVE @V4075A4 01389000
- TM APSTAT1,APUOPER IS APU OPERATIONAL? @V4075A4 01390000
- BZ NOCS3 NO, NO COMPARE-SWAP NECESSARY @V4075A4 01391000
- CS R1,R0,MONIOBF INDICATE I/O PENDING @V4075A4 01392000
- BNZ TAPECS SOMETHING HAPPENED ON OTHER @V4075A4 01393000
- * PROCESSOR, TRY AGAIN 01394000
- B GTNXTBUF IT WENT OK, GET NEXT AVAIL BUFF @V4075A4 01395000
- NOCS3 ST R0,MONIOBF SET I/O PDG INDICATOR IN MONIOBF @V4075A4 01396000
- B GTNXTBUF GO GET NEXT AVAIL BUFFER @V4075A4 01397000
- SPACE 01398000
- SCHEDIO ST R4,MONIOBF SAVE ADDR OF BUFF BEING WRITTEN, @V4075A4 01399000
- * ALSO INDICATES THAT TAPE IS BUSY 01400000
- MVC MONIOSLT(4),MONCRSLT UPDATE THE I/O SLOT @V4075A4 01401000
- L R10,MONAIOB ADDRESS THE IOB @V2B2638 01402000
- USING IOBLOK,R10 @V2B2638 01403000
- LA R0,IOBSIZE*8(R10) ADDRESS OF THE WRITE CCW @V2B2638 01404000
- ST R0,IOBCAW SET THE CAW FOR THE WRITE @V2B2638 01405000
- ST R4,IOBSIZE*8(R10) PUT DATA ADDR IN THE CCW @V2B2638 01406000
- MVI IOBSIZE*8(R10),X'01' PUT THE OP CODE BACK IN @V2B2638 01407000
- STH R3,IOBSIZE*8+6(R10) PUT BYTE COUNT INTO THE CCW @V4075A4 01408000
- EJECT 01409000
- ****** 01410000
- * 01411000
- * NOW IT IS TIME TO START THE TAPE, BUT TO AVOID CONFLICTS 01412000
- * IF THE CALL TO IOS SHOULD FIELD AN ERROR, AN ASYNCHRONOUS 01413000
- * CALL IS MADE TO IOS VIA A CPEXBLOK. 01414000
- * WE NOW SET UP THE CPEXBLOK SUCH THAT IOS WILL BE CALLED 01415000
- * WHEN IT IS UNSTACKED, NEXT TIME (OR SO) THROUGH THE 01416000
- * DISPATCHER. WE CAN THEN CONTINUE TO MONITOR THE SYSTEM 01417000
- * WITHOUT TEMPORARILY SUSPENDING IT FOR THE CALL, ETC. 01418000
- * 01419000
- ****** 01420000
- SPACE 1 01421000
- L R1,IOBMISC GET THE BACK POCKET CPEXBLOK @V2B2638 01422000
- USING CPEXBLOK,R1 @V2B2638 01423000
- STM R0,R15,CPEXR0 SAVE THE REGS @V2B2638 01424000
- LA R0,GETCPEX RETURN ADDRESS ... @V2B2638 01425000
- ST R0,CPEXADD ... INTO THE CPEXBLOK @V2B2638 01426000
- L R0,ASYSVM ADDRESS OF THE SYSTEM VMBLOK @V2B2638 01427000
- ST R0,CPEXR0+R11*4 SYS IS CHARGED FOR THE IO @V2B2638 01428000
- LA R0,GOTO ADDRESS OF THE RETURN POINT @V2B2638 01429000
- TM MONFLAG3,SPOOLED ARE WE SPOOLED @V50A2B5 01430000
- BNO NOSPL006 NO @V50A2B5 01431000
- LA R0,CLEANIO GO TO MON PROCESSING @V50A2B5 01432000
- NOSPL006 EQU * @V50A2B5 01433000
- ST R0,CPEXR0+R5*4 SAVE IN R5 @V2B2638 01434000
- CALL DMKSTKCP STACK THE CPEXBLOK ON THE DSP Q @V2B2638 01435000
- DROP R1 @V2B2638 01436000
- GTNXTBUF EQU * @V50A2B5 01437000
- TM MONFLAG3,SPOOLED ARE WE SPOOLED @V50A2B5 01438000
- BNO STDPATH NO @V50A2B5 01439000
- L R1,MONSPLCT BUMP UP SPOOL COUNT @V50A2B5 01440000
- LA R1,1(R1) HERE @V50A2B5 01441000
- ST R1,MONSPLCT STORE IT @V50A2B5 01442000
- L R1,=A(DMKSYSAT) CHECK FOR REAL TIME MONITOR @V60BEBC 01442250
- TM 0(R1),MONSLMT ACTIVE? @V60BEBC 01442500
- BO STDPATH YES, DON'T CHECK RECORD COUNT @V60BEBC 01442750
- L R1,=A(DMKSYSMX) COMPARE COUNT AGAINST MAX @V50A2B5 01443000
- L R1,0(R1) LOAD IT IN @V50A2B5 01444000
- C R1,MONSPLCT COMPARE IT @V50A2B5 01445000
- BH STDPATH NOT OVER YET @V50A2B5 01446000
- MVC CPCREG8(4),ZEROES DISABLE MONITOR @V50A2B5 01447000
- L R1,PREFIXB TURN OFF OTHER PREFIX @V50A2B5 01448000
- MVC CPCREG8-IPLPSW(4,R1),ZEROES @V50A2B5 01449000
- LCTL C8,C8,ZEROES TURN OF CREG 8 @V50A2B5 01450000
- OI MONFLAG3,CLSUS SUSPEND UNTIL ALL IO DONE @V50A2B5 01451000
- OI 9(R4),TRAP TRAP THIS IO @V50A2B5 01452000
- B SUSPEXIT EXIT IMMEDIATELY @V50A2B5 01453000
- STDPATH EQU * @V50A2B5 01454000
- L R1,MONCRSLT GET ADDRESS OF CURRENT BUF @V50A2B5 01455000
- LA R1,8(R1) POINT TO NEXT BUFFER SLOT @V50A2B5 01456000
- CLI 0(R1),X'FF' HAVE WE WRAPPED? @V4075A4 01457000
- BNE NOWRAP NO, WE'RE OK @V4075A4 01458000
- LA R1,MONBUF1 WRAP TO THE FIRST OF THE SLOTS @V4075A4 01459000
- NOWRAP L R4,0(R1) POINT TO NEXT BUFFER @V4075A4 01460000
- SR R7,R7 SET ZERO RETURN CODE-NO RETRY @V4075A4 01461000
- TM MONFLAG3,SPOOLED SEE IF SPOOLED @V50A2B5 01462000
- BNO OLDCHK NO @V50A2B5 01463000
- TM 8(R4),MONBUFAV SEE IF BUFFER AVAILABLE @V50A2B5 01464000
- BZ POSSSUSP @V50A2B5 01465000
- OI 8(R4),MONBUFAC FLAG BUFF 'ACTIVE COLLECTOR' @V50A2B5 01466000
- B RESME1 @V50A2B5 01467000
- OLDCHK TM 2(R4),MONBUFAV SEE IF BUFFER AVAILABLE @V50A2B5 01468000
- BZ POSSSUSP @V50A2B5 01469000
- OI 2(R4),MONBUFAC FLAG BUFFER ACTIVE COLLECTOR @V50A2B5 01470000
- RESME1 EQU * @V50A2B5 01471000
- ST R4,MONCURBF UPDATE CURRENT BUFFER POINTER @V4075A4 01472000
- ST R1,MONCRSLT UPDATE CURR BUFFER SLOT POINTER @V4075A4 01473000
- LA R3,4(R4) POINT TO FIRST RECORD IN BUFFER @V4075A4 01474000
- TM MONFLAG3,SPOOLED SEE IF WE ARE SPOOLING @V50A2B5 01475000
- BNO *+8 NO @V50A2B5 01476000
- LA R3,16(R3) YES, BUMP IN BY 16 @V50A2B5 01477000
- LA R4,4088(R4) @VA09843 01478100
- LA R8,MONNEXT-PSA(R8) @VA09843 01478600
- STM R3,R4,0(R8) @VA09843 01479100
- L R8,PREFIXA @VA09843 01479600
- BR R6 RETURN TO CALLER OF PAGEFULL @V4075A4 01482000
- POSSSUSP TM MONFLAG1,MON1BUF IS THIS 1-BUFFER CASE? @V4075A4 01483000
- BZ SUSPEND1 NO, NO FREE BUFFS, MUST SUSPEND @V4075A4 01484000
- LR R3,R11 YES, LACK OF FREE BUFFERS IS OK, @V4075A4 01485000
- * GET ADDRESS OF CUR RECORD 01486000
- ST R3,MONNEXT(R8) SAVE IT IN APPROPRIATE PLACE @V4075A4 01487000
- BR R6 RETURN TO CALLER @V4075A4 01488000
- EJECT 01489000
- ******** 01490000
- * 01491000
- * ARRIVE HERE TO MAKE A CALL TO IOS. 01492000
- * 01493000
- * 'GETCPEX' - REPLACE THE BACKPOCKET CPEXBLOK ADDRESSED 01494000
- * BY IOBMISC. 01495000
- * 'CALLIOS' - TO CALLIOS AND RETURN. 01496000
- * 01497000
- * R5 - RETURN ADDRESS 01498000
- * R9 - ADDRESS OF MONCOM 01499000
- * R10 - ADDRESS OF THE IOB 01500000
- * 01501000
- ******** 01502000
- SPACE 01503000
- GETCPEX LA R0,CPEXSIZE SIZE OF CPEXBLOK @V2B2638 01504000
- CALL DMKFREE GET A NEW BACK POCKET CPEXBLOK @V2B2638 01505000
- ST R1,IOBMISC SAVE ITS ADDRESS @V2B2638 01506000
- CALLIOS XC IOBFLAG(2),IOBFLAG CLEAR THE IOB FOR REUSE @V2B2638 01507000
- L R8,MONARDB ADDRESS OF THE REAL DEVICE BLOK @V2B2638 01508000
- TM MONFLAG3,SPOOLED IS THIS SPOOLED MONITORING @V50A2B5 01509000
- BO CALLMIA @V50A2B5 01510000
- CALL DMKIOSQR QUEUE THE I/O REQUEST @V2B2638 01511000
- BR R5 RETURN TO LOCAL CALLER @V2B2638 01512000
- CALLMIA EQU * @V50A2B5 01513000
- L R1,IOBSIZE*8(R10) GET THE DATA ADDRESS @V50A2B5 01514000
- CALL DMKMIAWO WRITE OUT THE PAGE @V50A2B5 01515000
- C R1,F2 SEE IF SHUTDOWN SCHEDULED @V50A2B5 01516000
- BE GOTO YES, LEAVE @V50A2B5 01517000
- BR R5 @V50A2B5 01518000
- SPACE 1 01519000
- CALLIOS1 L R1,IOBSIZE*8(R10) GET THE DATA ADDRESS @V50A2B5 01520000
- CALL DMKMIAWO WRITE OUT THE BUFFER @V50A2B5 01521000
- C R1,F2 SEE IF SHUTDOWN SCHEDULED @V50A2B5 01522000
- BE GOTO YES, JUST EXIT @V50A2B5 01523000
- LA R0,CPEXSIZE START OFF A CPEXBLOK @V50A2B5 01524000
- CALL DMKFREE GET THE STORAGE FOR IT @V50A2B5 01525000
- USING CPEXBLOK,R1 01526000
- STM R0,R15,CPEXR0 STORE THE REGISTERS @V50A2B5 01527000
- LA R0,CLEANIO GET RETURN ADDRESS @V50A2B5 01528000
- ST R0,CPEXADD STORE IT @V50A2B5 01529000
- CALL DMKSTKCP STACK IT @V50A2B5 01530000
- BR R5 DO NORMAL RETURN @V50A2B5 01531000
- DROP R1 01532000
- SPACE 5 01533000
- SUSPEND1 OI MONFLAG2,SUSPEND SET SUSPEND STATUS @V4075A4 01534000
- MVC CPCREG8(4),ZEROES DON'T FORGET THE PSA FIELD @V2B2638 01535000
- L R8,PREFIXB ADDRESS OTHER PROCESSOR'S PSA @V4075A4 01536000
- MVC CPCREG8-IPLPSW(4,R8),ZEROES ZERO OUT OTHER @V4075A4 01537000
- * PROCESSOR'S MC MASK 01538000
- LA R0,1 ADD ONE TO THE COUNT OF @V2B2638 01539000
- AL R0,MONSUSCT SUSPENDS @V2B2638 01540000
- ST R0,MONSUSCT ... @V2B2638 01541000
- LCTL C8,C8,ZEROES DISABLE FURTHER INTERRUPTS @V4075A4 01542000
- STCK MONSUSCK RECORD TOD OF SUSPENSION @V2B2638 01543000
- BC 3,DOWNWEGO CLOCK NOT FUNCTIONING @VA04301 01544000
- SUSPEXIT SR R1,R1 ZERO R1 -- NO BUFFER SPACE @VA10215 01545200
- ST R1,SAVER1 PASS R1 TO CALLER @VA10215 01545300
- LM R0,R11,16(R13) REST REGS FROM APPROP SAVE AREA @V4075A4 01547000
- L R13,12(R13) AND R13 AT BAL TO PREPREC @VA07862 01547500
- BR R5 R5 RETURN TO CALLER @VA10215 01548100
- TSTSUSP LTR R1,R1 TEST BUFFER SPACE @VA10215 01548200
- BZ EXIT2 NO SPACE - LEAVE @VA10215 01548300
- BR R5 CONTINUE @VA10215 01548400
- TSTSUSP1 LTR R1,R1 TEST BUFFER SPACE @VA10215 01548500
- BZR R6 NO SPACE - RETURN TO CALLER @VA10215 01548600
- BR R5 CONTINUE @VA10215 01548700
- EJECT 01549000
- *. 01550000
- * 01551000
- * ENTRY POINT - 01552000
- * 01553000
- * DMKMONIO - HANDLE I/O INTERRUPTS FOR THE MONITOR TAPE 01554000
- * 01555000
- * ENTRY CONDITIONS - 01556000
- * 01557000
- * GPR10 - ADDRESS OF IOB ASSOCIATED WITH THE INTERRUPT 01558000
- * GPR12 - ADDRESS OF ENTRY POINT 01559000
- * 01560000
- * CALLS TO OTHER ROUTINES - 01561000
- * 01562000
- * DMKFRET - RETURN A BLOCK OF STORAGE TO THE SYSTEM 01563000
- * DMKERMSG - WRITE AN ERROR MESSAGE TO A USER 01564000
- * DMKSCHRT - DEQUEUE A TIMER REQUEST BLOCK 01565000
- * DMKPTRFR - RETURN A PAGE TO FREE STORAGE 01566000
- * DMKPTRUL - UNLOCK A PAGE FRAME 01567000
- * DMKDSPCH - RETURN CONTROL TO THE DISPATCHER 01568000
- * DMKIOSQR - TO SCHEDULE AN I/O REQUEST 01569000
- * 01570000
- * EXTERNAL REFERENCES - 01571000
- * 01572000
- * DMKPRGMC - ADDR OF THE MONITOR COMMUNICATIONS BLOCK 01573000
- * DMKPRGTI - ADDR OF THE MONITOR INTERVAL 01574000
- * DMKPRGC8 - ADDR OF THE ENABLED CLASS MASK 01575000
- * DMKPRGMI - ADDR OF THE ADDR OF THE MONITOR INTERRUPT HANDLER 01576000
- * 01577000
- * OPERATION - 01578000
- * 01579000
- * MONITOR I/O INTERRUPT PROCESSING 01580000
- * 01581000
- * DMKMONIO: 01582000
- * 01583000
- * IF FINAL TAPE STATUS IS NOT BEING RETURNED, THEN 01584000
- * THE COPIED I/O BLOCK IS FRETED AND CONTROL IS 01585000
- * PASSED TO THE DISPATCHER. 01586000
- * 01587000
- * IF THERE IS AN IOERBLOK, FRET IT. 01588000
- * 01589000
- * IF THE I/O WAS NOT 'FATAL' THEN GO TO STEP 01590000
- * 'CHKUC'. 01591000
- * 01592000
- * FATAL: 01593000
- * IF THE 'ERROR' FLAG HAS ALREADY BEEN SET THEN GO TO 01594000
- * STEP 'ERRONERR'. 01595000
- * 01596000
- * SET THE 'ERROR' FLAG. 01597000
- * 01598000
- * ERRONERR: 01599000
- * IF THE 'TRUN' FLAG HAS NOT BEEN SET THEN GO TO STEP 01600000
- * 'EOT'. OTHERWISE CALL DMKERMSG TO SEND MESSAGE 220 01601000
- * TO THE OPERATOR AND TO GO STEP 'FINISHUP'. 01602000
- * 01603000
- * CHKUC: 01604000
- * IF A UNIT CHECK DID NOT OCCUR THEN GO TO STEP 01605000
- * 'CHKUE'. IF A UC DID OCCUR AND THE 'TRUN' FLAG IS 01606000
- * OFF THEN GO TO STEP 'FATAL'. IF THE 'TRUN' FLAG IS 01607000
- * ON AND THE INTERRUPT CAME WITH CUE AND DE THEN: 01608000
- * 01609000
- * IF THE 'CFSTOP' FLAG IS ON THEN GO TO STEP 01610000
- * 'FINISHUP'. 01611000
- * 01612000
- * OTHERWISE SEND MESSAGE 219 TO THE OPERATOR 01613000
- * FIRST AND THEN GO TO STEP 'FINISHUP'. 01614000
- * 01615000
- * CHKUE: 01616000
- * IF THE IOB CAME WITHOUT UE THEN GO TO STEP 01617000
- * 'CLEANIO'. 01618000
- * 01619000
- * EOT: 01620000
- * INDICATE THAT THE SYSTEM IS STOPPING THE MONITOR. 01621000
- * CLEAR THE IOBLOK FOR REUSE; STOP ALL MONITOR 01622000
- * ACTIVITY BY DISABLEING MC INTERRUPTS; READJUST THE 01623000
- * CCW'S TO WRITE A TAPE MARK AND REWIND/UNLOAD THE 01624000
- * TAPE; SET THE 'TRUN' FLAG TO INDICATE THAT TAPE 01625000
- * FINAL PROCESSING HAS BEEN PERFORMED; LINK TO THE 01626000
- * TAPE I/O MANAGER TO INITIATE THE TAPE I/O; GO TO 01627000
- * THE DISPATCHER. 01628000
- * 01629000
- * CLEANIO: 01630000
- * FLAG THE BUFFER THAT WAS JUST WRITTEN AS 'AVAILABLE'. 01631000
- * IF THIS IS ONE-BUFFER CASE, FLAG IT AS THE 'ACTIVE 01632000
- * COLLECTOR', STORE ZEROS IN MONIOBF TO INDICATE TAPE FREE, 01633000
- * GO TO REACTVAT TO REACTIVATE THE MONITOR IF IT'S BEEN 01634000
- * SUSPENDED, OTHERWISE GO TO CHKSTOP. FOR NON-ONE-BUFFER 01635000
- * CASE, FALL THROUGH TO CHKIOPDG. 01636000
- * 01637000
- * CHKIOPDG: 01638000
- * POINT TO NEXT BUFFER, WRAPPING TO FIRST ONE IF NECESSARY. 01639000
- * IF IT IS NOT WAITING FOR I/O, THEN GO TO NOIOPDG. 01640000
- * IT IS WAITING FOR I/O, IT IS NOW NECESSARY TO DETERMINE 01641000
- * WHETHER TO SET ITS ADDRESS IN MONIOBF AS POSITIVE OR 01642000
- * NEGATIVE. POINT TO YET THE NEXT BUFFER. IF IT IS 01643000
- * WAITING FOR I/O, COMPLEMENT THE ADDRESS OF THE FIRST 01644000
- * BUFFER. 01645000
- * 01646000
- * SETIOBUF: 01647000
- * USE COMPARE-AND-SWAP TO SET THE NEW VALUE OF MONIOBF. 01648000
- * IF THE CS FAILS, THEN WHILE THIS PROCESSOR FOUND NO 01649000
- * FURTHER I/O PENDING, SUCH I/O HAS JUST BECOME PENDING 01650000
- * ON THE OTHER PROCESSOR, SO GO BACK TO CKNXTBUF TO 01651000
- * RE-EVALUATE IT. 01652000
- *. 01653000
- SPACE 01654000
- ENTRY DMKMONIO @V2B2638 01655000
- DMKMONIO EQU * @V2B2638 01656000
- USING *,R12 @V2B2638 01657000
- SL R12,=A(DMKMONIO-DMKMON) ESTABLISH ADDR @V2B2638 01658000
- USING MONCOM,R9 @V2B2638 01659000
- USING DMKMON,R12 @V2B2638 01660000
- L R9,=A(DMKPRGMC) GET ADDR OF MONCOM @V2B2638 01661000
- L R9,0(R9) ... @V2B2638 01662000
- L R1,MONAIOB ADDRESS OF BASE IOB @V2B2638 01663000
- CR R1,R10 SAME IOB? @V2B2638 01664000
- LA R5,GOTO SET RETURN ADDRESS AFTER FRET @V2B2638 01665000
- BNE FRETIOB NOPE, NOT FINAL INT. IGNORE @V2B2638 01666000
- BAL R5,FRETIOER IN ANY CASE, RETURN THE IOERBLOK @V2B2638 01667000
- TM IOBSTAT,IOBFATAL WAS THAT FATAL? @V2B2638 01668000
- BZ CHKUC NOPE, MAYBE IT WAS UC @V2B2638 01669000
- CHKERR TM MONFLAG1,ERROR FATAL, BEEN HERE BEFORE? @V2B2638 01670000
- BO ERRONERR YES, ERROR ON ERROR @V2B2638 01671000
- OI MONFLAG1,ERROR NO, INDICATE WEVE BEEN HERE ONCE @V2B2638 01672000
- TM MONFLAG1,TRUN BEEN THROUGH EOT BEFORE? @V2B2638 01673000
- LA R2,IOBSIZE*8+8*1(R10) SET FOR EOT CAW = WTM1 @V2B2638 01674000
- BZ EOT NOPE, THEN DO SHUTDOWN NOW @V2B2638 01675000
- * OTHERWISE, ERROR STOPPING MONITOR ON EOT, SO QUIT NOW. 01676000
- SPACE 2 01677000
- ERRONERR LA R2,220 MSG220, TAPE ERR, MON SHUTDOWN @V2B2638 01678000
- MSGCOMM O R2,=X'B0C90000' RETURN HERE + ALARM + @V2B2638 01679000
- * OPERATOR + INFORMATION MSG 01680000
- SLR R1,R1 ZIP R1 = NO SUBSTITUTABLES @V2B2638 01681000
- ICM R0,B'1110',MODID+3 ISSUEING MODULE ID @V2B2638 01682000
- CALL DMKERMSG GO PUT OUT THE MESSAGE @V2B2638 01683000
- L R15,PRGMC ADDRESS OF DMKPRGMC (MONCOM PTR) @V4M0238 01684000
- L R15,0(R15) ADDRESS MONCOM @V4M0238 01685000
- LTR R15,R15 IF ZERO, DMKMNIFI ALREADY CALLED @V4M0238 01686000
- BZ GOTO EXIT TO DISP WHEN MNIFI COMPLETE @V4M0238 01687000
- B FINISHUP DONE ALL WE CAN, SHUTDOWN MON. @V2B2638 01688000
- SPACE 3 01689000
- CHKUC TM IOBCSW+4,UC DID WE GET A UC? @V2B2638 01690000
- BZ CHKUE NOPE, GO CHECK UNIT EXCEPTION @V2B2638 01691000
- TM MONFLAG1,TRUN UC AFTER WTM, RUN SEQUENCE? @V2B2638 01692000
- BZ CHKERR NO, BAD NEWS, STOP THE MONITOR @V2B2638 01693000
- TM IOBCSW+4,CUE+DE DID IT COME WITH CUE AND DE @V2B2638 01694000
- BNO ERRONERR NOPE, SOMETHING WENT HAYWIRE @V2B2638 01695000
- TM MONFLAG1,CFSTOP STOPPING BY REQUEST? @V2B2638 01696000
- BO FINISHUP YUP, THEN BE EXPIDITIOUS @V2B2638 01697000
- TM MONFLAG1,ERROR ERROR OR EOT? @V2B2638 01698000
- BO ERRONERR TAPE ERROR, MSG 220. @V2B2638 01699000
- LA R2,219 MSG NO 219, EOT, MON SHUTDOWN @V2B2638 01700000
- B MSGCOMM JOIN COMMON MSG CODE @V2B2638 01701000
- SPACE 3 01702000
- CHKUE TM IOBCSW+4,UE DID WE GET UE ? @V2B2638 01703000
- BZ CLEANIO NOPE, INTERRUPT IS GOOD @V2B2638 01704000
- L R1,IOBCSW GET THE ENDING CCW ADDR @V2B2638 01705000
- LA R1,0(R1) CLEAR ANY UNDUE GARBAGE @V2B2638 01706000
- LA R2,IOBSIZE*8+8*1(R10) END OF WRITE CCW @V2B2638 01707000
- CR R1,R2 IS THAT WHERE WE STOPPED? @V2B2638 01708000
- BNE NOTONWR NOPE, BR @V2B2638 01709000
- EOT MVC MONUSER(8),=CL8'SYSTEM' SYSTEM CAUSED THE STOP @V2B2638 01710000
- LCTL C8,C8,ZEROES QUICK, SHUT OFF ALL MONITORING @V2B2638 01711000
- MVC CPCREG8(4),ZEROES STOP ALL MONITORING @V2B2638 01712000
- L R8,PREFIXB ADDRESS THE OTHER PSA @V4075A4 01713000
- MVC CPCREG8-IPLPSW(4,R8),ZEROES ZERO OUT OTHER @V4075A4 01714000
- * PROCESSOR'S MC MASK 01715000
- OI MONFLAG1,TRUN INDICATE TAPE RUN CMD BEEN DONE @V2B2638 01716000
- TM MONFLAG1,ERROR FLAG ON OR OFF @VA13418 01717000
- BZ RESETCAW IF OFF, PROCESS NORMALLY @VA13418 01717200
- ST R2,IOBCAW SET THE PROPER CAW ADDRESS @VA13418 01717400
- BAL R5,CALLIOS GET THE TAPE MOVING AGAIN @VA13418 01717600
- B ERRONERR UNRECOVERABLE ERROR ON TAPE @VA13418 01717800
- SPACE 01718000
- NOTONWR LA R2,IOBSIZE*8+8*2(R10) END OF WTM1 CCW @V2B2638 01719000
- CR R1,R2 IS THAT WHERE WE STOPPED? @V2B2638 01720000
- BE RESETCAW YES, SET FOR WTM2 AND RESTART @V2B2638 01721000
- LA R2,IOBSIZE*8+8*3(R10) SET FOR RUN AND RESTART @V2B2638 01722000
- RESETCAW ST R2,IOBCAW SET THE PROPER CAW ADDR @V2B2638 01723000
- BAL R5,CALLIOS GET THE TAPE MOVING AGAIN @V2B2638 01724000
- B GOTO GET LOST TILL 'RUN' IS DONE @V2B2638 01725000
- SPACE 3 01726000
- CLEANIO L R3,MONIOBF GET ADDR OF BUFFER WRITTEN OUT @V4075A4 01727000
- LPR R2,R3 R3 MAY BE NEG, GET POS VALUE @V4075A4 01728000
- TM MONFLAG3,SPOOLED SEE IF WE ARE SPOOLING @V50A2B5 01729000
- BNO NOSPL007 @V50A2B5 01730000
- OI 8(R2),MONBUFAV TURN ON AVAILABLE BIT @V50A2B5 01731000
- B NOSPL008 @V50A2B5 01732000
- NOSPL007 OI 2(R2),MONBUFAV TURN ON AVAILABLE BIT @V50A2B5 01733000
- NOSPL008 EQU * @V50A2B5 01734000
- L R8,PREFIXA GET POINTER TO ABSOLUTE PREFIX @V4075A4 01735000
- L R4,MONIOSLT GET ADDR OF SLOT OF BUFF WRITTEN @V4075A4 01736000
- TM MONFLAG1,MON1BUF IS THIS 1-BUFFER CASE? @V4075A4 01737000
- BZ CHKIOPDG NO, SKIP SPECIAL LOGIC @V4075A4 01738000
- TM MONFLAG3,SPOOLED SEE IF WE ARE SPOOLING @V50A2B5 01739000
- BNO NOSPL009 @V50A2B5 01740000
- OI 8(R2),MONBUFAC TURN ON ACCEPTING BIT @V50A2B5 01741000
- LA R5,20(R2) GET ADDRESS OF 1ST RECORD @V50A2B5 01742000
- B NOSPL010 @V50A2B5 01743000
- NOSPL009 OI 2(R2),MONBUFAC TURN ON ACCEPTING BIT @V50A2B5 01744000
- LA R5,4(R2) GET ADDRESS OF 1ST RECORD @V50A2B5 01745000
- NOSPL010 EQU * @V50A2B5 01746000
- ST R5,MONNEXT(R8) SAVE IT IN PSA @V4075A4 01747000
- SR R1,R1 CLEAR A REG @V4075A4 01748000
- ST R1,MONIOBF INDICATE TAPE NO LONGER BUSY @V4075A4 01749000
- TM MONFLAG2,SUSPEND HAS MONITOR BEEN SUSPENDED? @V4075A4 01750000
- BNZ REACTVAT YES, GO REACTIVATE IT @V4075A4 01751000
- B CHKSTOP GO CHECK FOR STOP PROCESSING @V4075A4 01752000
- CHKIOPDG LA R6,8(R4) POINT TO NEXT SLOT @V50A2B5 01753000
- CLI 0(R6),X'FF' SHOULD WE WRAP? @V4075A4 01754000
- BNE NOWRAPI NO, ALL SET @V4075A4 01755000
- LA R6,MONBUF1 YES, WRAP @V4075A4 01756000
- NOWRAPI L R5,0(R6) GET ADDRESS OF NEXT BUFFER @V4075A4 01757000
- TM MONFLAG3,SPOOLED ARE WE SPOOLING @V50A2B5 01758000
- BNO NOSPL011 @V50A2B5 01759000
- TM 8(R5),255-MONBUFIO TEST FOR IO PENDING @V50A2B5 01760000
- BNZ NOIOPDG @V50A2B5 01761000
- B NOSPL012 @V50A2B5 01762000
- NOSPL011 TM 2(R5),255-MONBUFIO TEST FOR IO PENDING @V50A2B5 01763000
- BNZ NOIOPDG @V50A2B5 01764000
- NOSPL012 EQU * @V50A2B5 01765000
- ST R6,MONIOSLT YES, SAVE SLOT ADDRESS @V4075A4 01766000
- LH R2,0(R5) GET LENGTH OF REC TO BE WRITTEN @V4075A4 01767000
- * 01768000
- * GO TO NEXT BUFFER TO SEE IF I/O WILL STILL BE PENDING 01769000
- * 01770000
- LA R6,8(R6) POINT TO NEXT SLOT @V50A2B5 01771000
- CLI 0(R6),X'FF' SHOULD WE WRAP? @V4075A4 01772000
- BNE NOWRAPJ NO, ALL SET @V4075A4 01773000
- LA R6,MONBUF1 YES, WRAP @V4075A4 01774000
- NOWRAPJ L R1,0(R6) POINT TO NEXT BUFFER @V4075A4 01775000
- CKNXTBUF LPR R5,R5 IF R5 IS COMPLEMENTED, RESET @V4075A4 01776000
- TM MONFLAG3,SPOOLED ARE WE SPOOLING @V50A2B5 01777000
- BNO NOSPL013 @V50A2B5 01778000
- TM 8(R1),255-MONBUFIO TEST FOR IO PENDING @V50A2B5 01779000
- BNZ SETIOBUF @V50A2B5 01780000
- B NOSPL014 @V50A2B5 01781000
- NOSPL013 TM 2(R1),255-MONBUFIO TEST FOR IO PENDING @V50A2B5 01782000
- BNZ SETIOBUF @V50A2B5 01783000
- NOSPL014 EQU * @V50A2B5 01784000
- LCR R5,R5 YES, COMPLEMENT BUFF ADDR @V4075A4 01785000
- SETIOBUF TM APSTAT1,APUOPER IS APU OPERATIONAL? @V4075A4 01786000
- BZ NOCS4 NO, USE STORE INSTEAD OF CS @V4075A4 01787000
- CS R3,R5,MONIOBF SET NEW MONIOBF VALUE WITH CS @V4075A4 01788000
- BNZ CKNXTBUF INTERFERENCE, TRY AGAIN @V4075A4 01789000
- B NOST4 BRANCH AROUND STORE INST @V4075A4 01790000
- NOCS4 ST R5,MONIOBF SET NEW MONIOBF VALUE @V4075A4 01791000
- NOST4 EQU * @V4075A4 01792000
- LA R1,IOBSIZE*8(R10) ADDRESS OF THE WRITE CCW @V2B2638 01793000
- ST R1,IOBCAW STORE IN THE CAW @V2B2638 01794000
- LPR R5,R5 ENSURE POSITIVE VALUE @V4M0152 01795000
- ST R5,IOBSIZE*8(R10) SET UP THE CCW DATA ADDRESS @V4075A4 01796000
- MVI IOBSIZE*8(R10),X'01' RESTORE THE OP CODE @V2B2638 01797000
- STH R2,IOBSIZE*8+6(R10) SET CCW DATA LENGTH @V2B2638 01798000
- TM MONFLAG3,SPOOLED ARE WE SPOOLING @V50A2B5 01799000
- BNO DOIOS NO @V50A2B5 01800000
- BAL R5,CALLIOS1 CALL SPECIAL ROUTINE @V50A2B5 01801000
- B DONEIOS @V50A2B5 01802000
- DOIOS BAL R5,CALLIOS DO REGULAR CALL @V50A2B5 01803000
- DONEIOS EQU * @V50A2B5 01804000
- L R8,PREFIXA RESTORE PTR TO FORCE TO ABS 0 @V4M0153 01805000
- * NOTE THAT RETURN HERE MAY BE ON 01806000
- * THE OTHER PROCESSOR. 01807000
- TM MONFLAG2,SUSPEND WAS MONITOR SUSPENDED? @V4075A4 01808000
- BZ GOTO NO, GO EXIT @V4075A4 01809000
- LPR R3,R3 ENSURE POSITIVE VALUE @V4M0152 01810000
- TM MONFLAG3,CLSUS DO WE HOLD OFF ON UNSUSPEND@V50A2B5 01811000
- BO GOTO YES @V50A2B5 01812000
- TM MONFLAG3,SPOOLED ARE WE SPOOLING @V50A2B5 01813000
- BNO NOSPL001 @V50A2B5 01814000
- OI 8(R3),MONBUFAC FLAG BUFF 'ACTIVE COLLECTOR'@V50A2B5 01815000
- B NOSPL002 @V50A2B5 01816000
- NOSPL001 OI 2(R3),MONBUFAC FLAG BUFFER ACTIVE @V50A2B5 01817000
- NOSPL002 EQU * @V50A2B5 01818000
- ST R3,MONCURBF SET CURR BUFF POINTER IN MONCOM @V4075A4 01819000
- ST R4,MONCRSLT @V4075A4 01820000
- LA R5,4(R3) R5 -> FIRST AVAIL REC IN BUFF @V4075A4 01821000
- TM MONFLAG3,SPOOLED ARE WE SPOOLING @V50A2B5 01822000
- BNO NOSPL003 @V50A2B5 01823000
- LA R5,16(R5) YES, BUMP BY 16 @V50A2B5 01824000
- NOSPL003 EQU * @V50A2B5 01825000
- ST R5,MONNEXT(R8) SAVE IT IN ABSOLUTE PSA @V4075A4 01826000
- O R5,=F'4088' CREATE ADDRESS OF LAST BYTE @V50A2B5 01827000
- ST R5,PAGEND(R8) SAVE IT IN ABSOLUTE PSA @V4075A4 01828000
- REACTVAT TM MONFLAG3,CLSUS DO I KEEP SUSPENDED @V50A2B5 01829000
- BO GOTO YES @V50A2B5 01830000
- NI MONFLAG2,255-SUSPEND RESET SUSPEND STATUS @V50A2B5 01831000
- L R1,=A(DMKPRGC8) GET THE MONITOR MASK @V2B2638 01832000
- MVC CPCREG8(4),0(R1) MOVE TO PSA @V2B2638 01833000
- L R8,PREFIXB ADDRESS THE OTHER PSA @V4075A4 01834000
- MVC CPCREG8-IPLPSW(4,R8),0(R1) PROPAGATE MC MASK @V4075A4 01835000
- LCTL C8,C8,CPCREG8 RESTORE WHATEVER MON WAS BEFORE @V2B2638 01836000
- LA R0,MNCLPERF DUMMY A SUSPEND CALL, CL 0... @VM01017 01837000
- STH R0,MONCLASS ... @VM01017 01838000
- LA R0,MNCOSUS SUSPEND CODE @VM01017 01839000
- ST R0,MONCODE ... @V2B2638 01840000
- LA R0,MN099LEN LENGTH OF SUSPENSION RECORD @V2B2638 01841000
- BAL R5,PREPREC GET SPACE & CREATE HDR @V2B2638 01842000
- LTR R1,R1 TEST FOR BUFFER SPACE @VA10215 01842300
- BZ GOTO NO SPACE -- DISPATCH @VA10215 01842600
- USING MN099,R1 ADDRESS THE RECORD @V2B2638 01843000
- MVC MN099TOD,MONSUSCK+1 TOD AT SUSPENSION @V2B2638 01844000
- MVC MN099CNT,MONSUSCT COUNT OF SUSPENSIONS @V2B2638 01845000
- TM MONFLAG1,MONLSTBK HANDLING "LAST BLOCK" ? @VA04526 01846000
- BO TRAILER YES (SUSPENDED ON THE LAST BLK)..@VA04526 01847000
- * TRY IT AGAIN. 01848000
- B GOTO OFF TO THE DISPATCHER @VA03658 01849000
- SPACE 01850000
- NOIOPDG SR R1,R1 CLEAR R1 FOR USE IN CS @V4075A4 01851000
- TM APSTAT1,APUOPER IS APU OPERATIONAL? @V4075A4 01852000
- BZ NOCS5 NO, USE STORE INSTEAD OF CS @V4075A4 01853000
- CS R3,R1,MONIOBF SWAP IN TAPE FREE INDICATION @V4075A4 01854000
- BNZ CLEANIO I/O IS NOW PENDING, GO GET IT @V4075A4 01855000
- B NOST5 BRANCH AROUND STORE INST @V4075A4 01856000
- NOCS5 ST R1,MONIOBF INDICATE THAT TAPE IS FREE @V4075A4 01857000
- NOST5 EQU * @V4075A4 01858000
- CHKSTOP TM MONFLAG1,CFSTOP DID SOMEBODY SAY STOP ON US? @V2B2638 01859000
- BZ GOTO NOPE, ALL DONE. @V2B2638 01860000
- TM MONFLAG1,TRUN HAS THIS BEEN DONE ONCE? @V2B2638 01861000
- BO FINISHUP YES, THEN BEATIT @V2B2638 01862000
- TRAILER CALL DMKMNITR EXIT TO TRAILER ROUTINE @V4075A4 01863000
- B GOTO EXIT TO DISPATCHER 01864000
- SPACE 01865000
- FINISHUP CALL DMKMNIFI EXIT TO FINISHUP ROUTINE @V4075A4 01866000
- FRETIOB ST R5,IOBMISC2 SAVE THE RETURN ADDRESS @V2B2638 01867000
- BAL R5,FRETIOER DROP THE IOERBLOK IF ONE EXISTS @V2B2638 01868000
- L R5,IOBMISC2 RELOAD THE RETURN ADDRESS @V2B2638 01869000
- LA R1,0(R10) CLEAR HI BYTE AND MOVE TO R1 @V2B2638 01870000
- LA R0,IOBSIZE GET SIZE OF STANDARD IOB @V2B2638 01871000
- C R1,MONAIOB IS THIS THE MONITOR BASE IOB? @V2B2638 01872000
- BNE STDIOB NO, STANDARD IOB SIZE @V2B2638 01873000
- LA R0,IOBSIZE+4 SET FOR IOB + CCW'S @V2B2638 01874000
- STDIOB CALL DMKFRET RETURN THE STORAGE @V2B2638 01875000
- BR R5 RETURN TO CALLER @V2B2638 01876000
- SPACE 3 01877000
- FRETIOER L R1,IOBIOER GET THE IOER ADDRESS @V2B2638 01878000
- LTR R1,R1 IS THERE ONE? @V2B2638 01879000
- BZR R5 NOPE, RETURN @V2B2638 01880000
- LA R0,IOERSIZE GET THE CORRECT SIZE @V2B2638 01881000
- CALL DMKFRET FRET THE IOERBLOK @V2B2638 01882000
- SLR R1,R1 CLEAR THE IOB POINTER @V2B2638 01883000
- ST R1,IOBIOER ... @V2B2638 01884000
- BR R5 RETURN TO CALLER @V2B2638 01885000
- EJECT 01886000
- *. 01887000
- * 01888000
- * ENTRY POINT - 01889000
- * 01890000
- * DMKMONTI - HANDLE A TIMER INTERRUPT 01891000
- * 01892000
- * ENTRY CONDITIONS - 01893000
- * 01894000
- * GPR10 - ADDRESS OF THE TRQBLOK 01895000
- * GPR12 - ADDRESS OF THE ENTRY POINT 01896000
- * 01897000
- * EXIT CONDITIONS - 01898000
- * 01899000
- * NONE 01900000
- * 01901000
- * CALLS TO OTHER ROUTINES - 01902000
- * 01903000
- * DMKSCHST - TO RE-ESTABLISH A TIMER REQUEST AFTER INTERRUPT 01904000
- * DMKDSPCH - RETURN CONTROL TO 01905000
- * 01906000
- * EXTERNAL REFERENCES - 01907000
- * 01908000
- * DMKPRGMC - ADDR OF THE MONITOR COMMUNICATIONS BLOCK 01909000
- * DMKPRGTI - ADDR OF THE MONITOR INTERVAL 01910000
- * 01911000
- * OPERATION - 01912000
- * 01913000
- * MONITOR TIMER INTERRUPT PROCESSING 01914000
- * 01915000
- * DMKMONTI: 01916000
- * 01917000
- * INDICATE THAT A TIMER INTERRUPT IS BEING HANDLED. 01918000
- * 01919000
- * REINITIALIZE THE TRQBLOK FOR THE NEXT INTERVAL. 01920000
- * 01921000
- * CALL DMKSCHST TO ENQUEUE THE NEXT REQUEST. 01922000
- * 01923000
- * CHECK THE MONITOR MASK IN CPCREG8 (IN PSA), IF 01924000
- * PERFORM IS ACTIVE THEN SIMULATE A CLASS 0 CODE 0 01925000
- * MONITOR CALL INTERRUPT. 01926000
- * 01927000
- * CHECK THE MONITOR MASK IN CPCREG8; IF USER IS 01928000
- * ACTIVE THEN SIMULATE A CLASS 4 CODE 0 MONITOR CALL 01929000
- * INTERRUPT. 01930000
- * 01931000
- * CHECK THE MONITOR MASK IN CPCREG8; IF DASTAP IS 01932000
- * ACTIVE THEN SIMULATE A CLASS 6 CODE 1 MONITOR CALL 01933000
- * INTERRUPT. 01934000
- * 01935000
- * RESET THE TIMER INTERRUPT ACTIVE FLAG AND GO TO THE 01936000
- * DISPATCHER. 01937000
- * 01938000
- *. 01939000
- ENTRY DMKMONTI @V2B2638 01940000
- DMKMONTI DS 0H @V2B2638 01941000
- USING *,R12 @V2B2638 01942000
- SL R12,=A(DMKMONTI-DMKMON) ESTAB. BASE ADDR @V2B2638 01943000
- USING DMKMON,R12 @V2B2638 01944000
- LR R1,R10 TRQBLOK IN R1 FOR TRB PROCESS @V2B2638 01945000
- USING TRQBLOK,R1 @V2B2638 01946000
- L R9,=A(DMKPRGMC) GET ADDR OF MONCOM @V2B2638 01947000
- L R9,0(,R9) ... @V2B2638 01948000
- L R3,=A(DMKPRGTI) GET POINTER TO TIME INCREMENT @VA10057 01948200
- LH R3,0(R3) GET TIME INCREMENT @VA10057 01948400
- LTR R3,R3 IS THERE ONE? @VA10057 01948600
- BZ GOTO NO-NO MORE MONITOR PERF @VA10057 01948800
- USING MONCOM,R9 @V2B2638 01949000
- OI MONFLAG1,MONTIINT FLAG TIMER INTERRUPT HANDLER @V2B2638 01950000
- STCK TRQBTOD TIME OF DAY FOR REQUEST (NOW) @V2B2638 01951000
- BC 12,CLOCKOK IS CLOCK FUNCTIONING? @VA04301 01952000
- DOWNWEGO GOTO DMKCVTAB CLOCK DAMAGED...ABEND CVT001 @VA04301 01953000
- CLOCKOK EQU * @VA04301 01954000
- SLR R2,R2 CLEAR FOR MULTIPLICATION @V2B2638 01957000
- M R2,=F'1000000' CALCULATE IN UNITS OF U-SECONDS @V2B2638 01958000
- SLDL R2,12 ALIGN WITH TOD FORMAT @V2B2638 01959000
- AL R3,TRQBTOD+4 ADD IN TOD LOW ORDER BITS @V2B2638 01960000
- BC 12,*+8 SKIP IF NO OVERFLOW @V2B2638 01961000
- AL R2,F1 ADD 1 SEC. TO HIGH ORDER TOD @V2B2638 01962000
- AL R2,TRQBTOD ADD IN HIGH ORDER TOD BITS @V2B2638 01963000
- STM R2,R3,TRQBVAL NEXT INTERRUPT DUE AT THIS TIME @V2B2638 01964000
- CALL DMKSCHST INSERT TRB IN REQUEST BLOCK CHAIN@V2B2638 01965000
- DROP R1 @V2B2638 01966000
- TM CPCREG8+2,PERFCL MUST WE DO PERF COLLECTION @V2B2638 01967000
- BZ CHKDASD NO, MAY BE DASD CLASS @VM01054 01968000
- * CLASS X CODE SETUP DEFERRED UNTIL DMKMIA BROUGHT IN (THIS PU 01969000
- * MIGHT LOOSE CONTROL) 01970000
- BAL R6,MONCOD00 GO COLLECT DATA @V2B2638 01971000
- CHKDASD TM CPCREG8+2,DASDCL MUST WE DO DASTAP COLLECTION? @VM01054 01972000
- BZ CHKUSER NOPE, CHECK USER @VM01054 01973000
- LA R0,MNCLDAST SIMULATE DASTAP CLASS @VM01054 01974000
- STH R0,MONCLASS @VM01054 01975000
- LA R0,MNCODAS AND CODE @VM01054 01976000
- ST R0,MONCODE @VM01054 01977000
- BAL R6,MONCOD61 COLLECT THE DATA @VM01054 01978000
- CHKUSER TM CPCREG8+2,USERCL MUST WE DO USER COLLECTION? @VM01054 01979000
- BZ NOMORE NOPE, DONE @VM01054 01980000
- LA R0,MNCLUSER YES, SIMULATE USER CLASS @VM01054 01981000
- STH R0,MONCLASS @VM01054 01982000
- LA R0,MNCOUSER AND USER CODE @VM01054 01983000
- ST R0,MONCODE @VM01054 01984000
- BAL R6,MONCOD40 GO COLLECT THE DATA @VM01054 01985000
- NOMORE NI MONFLAG1,255-MONTIINT TIMER INT. PROCESSING DONE@VM01054 01986000
- SPACE 01987000
- L R1,MONSACT GET SAMPLE COUNT @V60BEBC 01988000
- LA R1,1(R1) INCREMENT IT @V60BEBC 01988080
- ST R1,MONSACT SAVE IT BACK @V60BEBC 01988160
- L R2,=A(DMKSYSAT) GET LIMIT FLAG @V60BEBC 01988240
- TM 0(R2),MONSLMT CLOSE ON SAMPLE LIMIT?? @V60BEBC 01988320
- BZ GOTO NO, GET OUT @V60BEBC 01988400
- L R2,=A(DMKSYSMX) YES, SO COMPARE @V60BEBC 01988480
- C R1,0(R2) FOR EQUAL @V60BEBC 01988560
- BL GOTO LIMIT NOT REACHED @V60BEBC 01988640
- XC MONSACT,MONSACT CLEAR SAMPLE COUNT @V60BEBC 01988720
- CALL DMKMIACC CLOSE THE FILE AND @V60BEBC 01988800
- GOTO GOTO DMKDSPCH GO TO THE DISPATCHER @V60BEBC 01988880
- EJECT 01989000
- *********************************************************************** 01990000
- * 01991000
- * CONSTANTS AND WORK AREAS 01992000
- * 01993000
- *********************************************************************** 01994000
- DS 0F @V2B2638 01995000
- SPACE 1 01996000
- Q1DROP EQU X'40' QUEUE DROP INDICATOR @V2B2638 01997000
- PRGMC DC A(DMKPRGMC) ADDRESS OF MONCOM POINTER @V4M0238 01998000
- LTORG @V2B2638 01999000
- COPY SPOOL @V50A2B5 02000000
- EJECT 02001000
- COPY EQU @V2B2638 02002000
- COPY ALLOC @V2B2638 02003000
- PSA @V2B2638 02004000
- COPY MONBLOKS @V2B2638 02005000
- COPY VMBLOK @V2B2638 02006000
- COPY SAVE @V2B2638 02007000
- COPY IOBLOKS @V2B2638 02008000
- COPY IOER @V2B2638 02009000
- COPY CORE @V2B2638 02010000
- COPY DEVTYPES @V2B2638 02011000
- COPY RBLOKS @V2B2638 02012000
- IOBLOK DSECT CONTINUE THE DSECT @VA09047 02012010
- * ANY CHANGES IN PAGESIZE MUST ALSO BE REFLECTED 02012020
- * IN DMKUSO AND DMKPAG 02012030
- ORG , MAKE SURE WE'RE AT THE END @VA09047 02012040
- PAGECCWS DS 6D SPACE FOR PAGING CCWS @VA09047 02012050
- ORG PAGECCWS CCW DEFINITIONS @VA09047 02012060
- PAGESK DS D SPACE FOR SEEK @VA09047 02012070
- PAGESS DS D SPACE FOR SET SECTOR @VA09047 02012080
- PAGESRCH DS D SPACE FOR SEARCH @VA09047 02012090
- PAGESTIC DS F SPACE FOR TIC @VA09047 02012100
- PAGEIOB DS F POINTER TO SLOT SORTED IOBLOK @VA09047 02012110
- PAGERW DS D SPACE FOR READ/WRITE @VA09047 02012120
- PAGEPRI EQU PAGERW+5 SPACE FOR REQUEST PRIORITY @VA09047 02012130
- PAGESNS DS D SPACE FOR SENSE/TIC @VA09047 02012140
- ORG PAGESNS+7 @VA09047 02012150
- PAGESRCD DS X SPACE FOR SLOT NUMBER @VA09047 02012160
- PAGESEEK DS D SPACE FOR SEEK ARGUMENT AND @VA09047 02012170
- * SECTOR 02012180
- ORG PAGESEEK+2 @VA09047 02012190
- PAGECYL DS H SPACE FOR CYLINDER ADDRESS @VA09047 02012200
- PAGEHEAD DS H SPACE FOR HEAD ADDRESS @VA09047 02012210
- PAGERCD DS X SPACE FOR RECORD NUMBER @VA09047 02012220
- PAGESECT DS X SECTOR NUMBER @VA09047 02012230
- PAGESIZE EQU (*-IOBLOK)/8 SIZE OF EXTENDED IOBLOK IN @VA09047 02012240
- * DOUBLE WORDS 02012250
- EJECT 02012260
- COPY TIMER @V2B2638 02013000
- END 02014000
ibm/vm370-lib/cp/dmkmon.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator