IOG TITLE 'DMKIOG (CP) VM/370 - RELEASE 6' 00001000 ISEQ 73,80 00002000 *. 00003000 * MODULE NAME - DMKIOG 00004000 * 00005000 * 00006000 * FUNCTION - 00007000 * PAGABLE ERROR RECORDING MODULE. CALLED AT INITIALIZATION 00008000 * TIME TO LOCATE THE ERROR RECORDING DEVICE,LOCATE THE 00009000 * LAST RECORDINGS MADE ON THE CYLINDERS, 00010000 * AND SET THE IN-CORE POINTERS TO THE PROPER VALUES. 00011000 * INITIALIZATION FOR 'RMS' FUNCTIONS IS PERFORMED 00012000 * AFTER FIRST MAKING A TEST TO DETERMINE IF WE ARE 00013000 * CP RUNNING UNDER CP. RMS FUNCTIONS WILL NOT BE 00014000 * ACTIVATED FOR A VIRTUAL CP ENVIRONMENT. 00015000 * THE MODULE IS ALSO USED TO ERASE THE RECORDING AREAS. 00016000 * 00017000 * ATTRIBUTES - 00018000 * PAGABLE,SERIAL-REUSABLE,CALLED VIA SVC. 00019000 * 00020000 * 00021000 * ENTRY POINTS - 00022000 * 00023000 * DMKIOGF1 - INITIALIZATION ENTRY, RMS INIT AND 00024000 * LOCATOR FOR STARTING PAGE ON RECORDING 00025000 * DMKIOGAP - INITIALIZATION ENTRY, RMS INIT 00026000 * FOR ATTACHED PROCESSOR 00027000 * DMKIOGF2 - TO ERASE EITHER THE ERROR RECORDS OR 00028000 * BOTH THE ERROR AND FRAME RECORDS FROM 00029000 * THE ERROR RECORDING AREA. 00030000 * 00034000 * ENTRY CONDITIONS - 00035000 * DMKIOGF1 -NONE 00036000 * DMKIOGAP -NONE 00037000 * DMKIOGF2 - GPR2 = ERASE REQ PARAMATER. 00038000 * 00040000 * EXIT CONDITIONS - RETURN TO CALLER. 00041000 * 00042000 * CALLS TO OTHER ROUTINES - 00043000 * DMKPGTVG - TO GET VIRTUAL PAGES. 00044000 * DMKPGTVR - TO RELEASE VIRTUAL PAGES. 00045000 * DMKSCNRU - TO GET IPL DEV. RDEVBLOK ADDRESS. 00046000 * DMKQCNWT - TO WRITE MSGS. TO THE OPERATOR. 00047000 * DMKRPAGT - TO READ A PAGE INTO CORE. 00048000 * DMKRPAPT - TO WRITE A PAGE TO RECORDING CYLINDER. 00049000 * DMKERMSG - TO WRITE OUT ERROR MESSAGES 00050000 * DMKPTRLK - TO LOCK A PAGE. 00051000 * DMKPTRUL - TO UNLOCK A PAGE. 00052000 * DMKIOHFR - TO INITIALIZE FRAME RECORDS ON A 303X. 00052100 * 00053000 * EXTERNAL REFERENCES - 00054000 * DMKIOERP - 'RECORDING IN PROCESS' SWITCH. 00055000 * DMKIOEEP - RECORDING AREA IN-CORE POINTER (CCP). 00056000 * DMKIOEMX - MAXIMUM NO. OF PAGES PER CYL . 00057000 * DMKIOENI - 90 FULL PAGE CNT ON IPL DEV TYP. 00058000 * DMKIOEES - 'RECORDING AREA FULL' FLAG. 00059000 * DMKIOEHS - DASD START OF ERROR RECORDS ON 00060000 * RECORDING CYLINDERS (CCPD FORMAT). 00061000 * DMKIOEFR - 'FRAME RECORDS ON CYLINDERS' FLAG. 00062000 * DMKIOHIF - DMKIOH'S INFOFLAG. 00062100 * 00063000 * REGISTER USAGE - 00064000 * GPR0-1 SCRATCH 00065000 * GPR2 ERASE PARAMATERS 00066000 * GPR3-9 SCRATCH 00067000 * GPR 10 IOBLOK POINTER 00068000 * GPR11 VMBLOK POINTER 00069000 * GPR12 BASE 00070000 * GPR13 SAVE AREA POINTER 00071000 * GPR14-15 LINK REGS 00072000 * 00073000 * NOTES - 00074000 * IF THE ERROR RECORDING CYLINDERS ARE FOUND TO BE 00075000 * UNFORMATTED AT IPL TIME, A MSG IS SENT TO THE 00076000 * OPERATOR AND THE CYLINDERS ARE FORMATTED . 00077000 * 00077100 * IF THE PROCESSOR IS A 4331 OR 4341, THEN THERE ARE 00077200 * NO EXTENDED LOGOUT AREAS OR REGION CODE. 00077300 * 00078000 * OPERATION - DMKIOGF1 00079000 * 1. DETERMINE IF WE ARE RUNNING AS A VIRTUAL CP, IF WE 00080000 * ARE PUT 'WAIT' BIT ON IN THE MCH NEW PSW AND SKIP 00081000 * TO STEP 4. 00082000 * 2. CALL DMKFREE TO RESERVE CORE STORAGE FOR LOGOUT, 00083000 * MCHAREA, AND CPEXBLOK FOR EACH PROCESSOR. 00084000 * 3. INITIALIZE THE MCH LOGOUT POINTERS AND CONTROL 00085000 * REGISTERS 14 AND 15. 00086000 * 4. FIND STARTING CYL FOR ERROR RECORDING SPECIFIED 00087000 * AT SYSGEN IN DMKSYSER. 00088000 * 5. DETERMINE THE IPL DEVICE (SYSIPLDV). 00089000 * 6. CALL DMKSCNRU TO GET RDEVBLOK ADDRESS FOR IPL DEVICE 00090000 * 7. SET THE VALUES FOR 'MAXPAGES' AND 'NINETY PRCNT FULL' 00091000 * AS DETERMINED FROM RDEVTYPE. 00092000 * 8. CALL DMKPGTVG TO GET A VIRTUAL PAGE. 00093000 * 9. CALL DMKRPAGT TO READ A PAGE INTO CORE. 00094000 * 10.IF THE FORMAT OF THE PAGE IS NOT VALID, GO TO 00095000 * STEP 14. 00096000 * 11. IF THE PAGE IS NOT FULL, GO TO THE NEXT STEP. IF 00097000 * IT IS FULL, BUMP THE PAGE NUMBER IN THE CCPD TO 00098000 * THE NEXT PAGE. IF END OF THE RECORDING CYLS 00099000 * IS REACHED, GO TO STEP 19. IF NOT, READ IN 00100000 * THE PAGE & REPEAT THIS STEP UNTIL A USABLE 00101000 * PAGE IS FOUND OR END OF REC. AREA IS REACHED 00102000 * 12. SET THE PAGE IN USE FLAG AND WRITE THE PAGE BACK 00103000 * OUT TO THE DASD. 00104000 * SET UP THE IN-STORAGE POINTERS AND EXIT. 00105000 * 14. SET UP THE FLAGS IN THE FIRST PAGE TO INDICATE A 00106000 * FORMAT IS IN PROCESS AND WRITE THE FIRST PAGE 00107000 * BACK TO THE DASD. 00108000 * 15. READ IN THE REST OF THE PAGES FROM REC. CYLS 00109000 * INITIALIZE, AND WRITE BACK OUT. 00110000 * 16. READ THE FIRST PAGE BACK IN AND INITIALIZE WITH THE 00111000 * NORMAL FORMAT, AND WRITE BACK OUT TO THE DASD. 00112000 * 17. IF THIS IS A 'CLEARF' OPERATION, OR IF THIS 00113000 * IS INITIAL FORMATTING WHEN INITIALIZING A 00114000 * 3033/3032/3031 PROCESSOR, CALL DMKIOGFR TO 00115000 * FORMAT FRAME RECORDS. 00116000 * 18. IF THIS IS A CLEAR OPERATION, GO TO STEP 3 00117000 * IN THE DESCRIPTION FOR DMKIOGF2. IF NOT, 00118000 * SET UP THE IN STORAGE POINTERS AND EXIT. 00119000 * AND EXIT. 00120000 * 19. SET UP RECORDING AREA FULL MSG;CALL DMKQCNWT 00121000 * TO SEND THE MSG. SET THE AREA FULL FLAG 00122000 * IN DMKIOE. EXIT. 00123000 * 00124000 * OPERATION - DMKIOGAP 00125000 * 1. CALL DMKFREE TO RESERVE CORE STORAGE FOR LOGOUT, 00126000 * MCHAREA, AND CPEXBLOK FOR EACH PROCESSOR. 00127000 * 2. INITIALIZE THE MCH LOGOUT POINTERS AND CONTROL 00128000 * REGISTERS 14 AND 15. 00129000 * 00130000 * 00131000 * OPERATION - DMKIOGF2 00132000 * 00133000 * 1. CHECK THE PARAMETERS. IF THEY ARE NOT VALID, EXIT. 00134000 * 2. SET UP THE CCPD FOR THE 1ST PAGE OF RECORDING 00135000 * AREA AND READ IT IN. FLAG THE PAGE TO 00136000 * INDICATE A FORMAT IN PROCESS AND WRITE IT 00137000 * BACK OUT. IF 'CLEAR' WAS SPECIFIED, USER 00138000 * MEANS TO CLEAR ONLY ERROR RECORDS FROM THE 00139000 * RECORDING CYLINDERS. CHECK FOR FRAME RECORDS 00140000 * ON THE CYLS; IF SO, READ PAGES LOOKING FOR 00141000 * 1ST RECORDING PAGE WHICH DOES NOT CONTAIN 00142000 * FRAME RECORDS. WHEN SUCH A PAGE IS FOUND, 00143000 * OR IF 'CLEARF' HAD BEEN SPECIFIED, 00144000 * GO TO STEP 15 OF THE DESCRIPTION OF DMKIOGF1 TO 00145000 * FORMAT THE REST OF THE CYLINDER. 00146000 * 3. TURN OFF 'FORMATTING' FLAG IN 1ST RECORDING 00147000 * PAGE; SET UP IN-STORAGE POINTERS AND EXIT. 00148000 * 00149000 * 00150000 * 00229000 * MESSAGES - 00230000 * 00231000 * DMKIOG551E ERROR RECORDING AREA FULL; RUN CPEREP 00232000 * 00233000 * DMKIOG552I FORMATTING ERROR RECORDING AREA 00234000 * 00235000 * DMKIOG553I ERROR RECORDING AREA CLEARED; USER 'USER' 00236000 * 00237000 * DMKIOG558I FATAL I/O ERROR; ERROR RECORDING DISABLED 00238000 * 00239000 * DMKIOG550I ERROR RECORDING AREA 90 PERCENT FULL; RUN CPEREP 00240000 * 00241000 *. 00250000 COPY OPTIONS @V407510 00251000 EJECT 00252000 DMKIOG CSECT 00253000 MODULEID DC CL8'DMKIOG' 00254000 EXTRN DMKSCNRU,DMKPGTVG 00255000 EXTRN DMKPGTVR,DMKRPAPT,DMKRPAGT 00256000 EXTRN DMKIOERP 00257000 EXTRN DMKERMSG @V305435 00258000 EXTRN DMKIOEFR @V5088AA 00259000 EXTRN DMKIOECT @V5088AA 00260000 EXTRN DMKIOEES @V5088AA 00261000 EXTRN DMKIOEHS @V5088AA 00262000 EXTRN DMKIOEEP @V5088AA 00263000 EXTRN DMKIOECE @VA10241 00263100 EXTRN DMKIOEIF @VA10241 00263200 EXTRN DMKSYSCT @V5088AA 00264000 EXTRN DMKPTRLK @V5088AA 00267000 EXTRN DMKIOETY 00268000 EXTRN DMKIOEMX 00269000 EXTRN DMKIOENI 00270000 EXTRN DMKSIX60 00271000 EXTRN DMKSEV70 00272000 EXTRN DMKEIG80 00273000 EXTRN DMKCCHCF 00274000 EXTRN DMKCCH60 00275000 EXTRN DMKCCHSZ 00276000 EXTRN DMKCCHMX 00277000 EXTRN DMKPTRAN @V407510 00278000 EXTRN DMKIOSQR @V5088AA 00279000 EXTRN DMKPTRUL @V5088AA 00280000 EXTRN DMKCVTAB @V5088AA 00281000 EXTRN DMKIOHFR @V60B7AA 00281100 USING VMBLOK,R11 00282000 USING PSA,R0 00283000 USING SAVEAREA,R13 00284000 USING *,R12 00285000 SPACE 3 00286000 ********************************************************************** 00287000 * * 00288000 * ROUTINE TO LOCATE LAST RECORDING ON CE CYLINDER * 00289000 * AND SET THE IN-CORE POINTERS TO PROPER VALUES. * 00290000 * IF THE ERROR RECORDING AREA IS NOT PROPERLY FORMATTED@V5088AA 00291000 * A MSG. WILL BE SENT TO THE OPERATOR AND THE AREA WILL @V5088AA 00292000 * BE FORMATTED. THE FIRST EIGHT BYTES OF EACH BLOCK CONTAIN * 00293000 * THE CONTROL INFO AND ARE THE ONLY BYTES FORMATTED. * 00294000 * RECORDING IS DONE IN 4096 BYTE BLOCKS. RECORDS ARE VARIABLE * 00295000 * LENGTH WITHIN THE BLOCK. * 00296000 * * 00297000 * CALLED BY DMKCPI * 00298000 * * 00299000 * * 00300000 ********************************************************************** 00301000 SPACE 2 00302000 DMKIOGF1 RELOC 00303000 STIDP CPUID SAVE THE CPU MODEL AND SERIAL NO. 00304000 CLI CPUVERSN,X'FF' IS THIS A VIRTUAL MACHINE ? 00305000 BNE NOTVIRT NO, LETS GET ON WITH IT @V508690 00306000 OI MCNPSW+1,WAIT TURN ON THE WAIT BIT IN @V508690 00307000 * MACHINE CHECK NEW PSW. 00308000 NOTVIRT EQU * @V508690 00309000 LA R5,16 SETUP TO EXERCISE 15 CHANNELS 00310000 ISSUEINS EQU * 00311000 LR R4,R5 R5 IS CHANNEL NUMBER PLUS 1 ... @VMD0103 00312000 BCTR R4,0 AND R4 IS CHANNEL NUMBER. @VMD0103 00313000 LA R7,0(R4,R4) CHANNEL NUMBER * 2. @VMD0103 00314000 A R7,ARIOCT R7 IS INDEX INTO CHANNEL TABLE. @VMD0103 00315000 LH R7,0(0,R7) PICK UP HALFWD OFFSET TO RCHBLOK.@VMD0103 00316000 LTR R7,R7 OFFSET INDICATES NO RCHBLOK? @VMD0103 00317000 BM NORCH1 NO RCHBLOK. @VMD0103 00318000 A R7,ARIOCH OFFSET + ORIGIN = RCHBLOK ADDR. @VMD0103 00319000 NORCH1 EQU * FROM HERE ON, R7 IS ADDR OF @VMD0103 00320000 * RCHBLOK OR IS -1. 00321000 LA R6,CONF(R4) GET THE PTR TO THE CHANNEL TABLE.@VMD0103 00322000 MVI 0(R6),X'FF' TENTATIVELY SET NO CHANL SUPPORT.@VMD0103 00323000 L R0,FFS TENTATIVELY SET FLAG INDICATING @VMD0103 00324000 * STIDC FAILS. 00325000 SLL R4,8 ADJUST CHANL NUMBER FOR STIDC. @VMD0103 00326000 STIDC 0(R4) STORE CHANNEL IDENTIFICATION. @VMD0103 00327000 SRL R4,8 CHANNEL AGAIN IN LOW ORDER BYTE. @VMD0103 00328000 BNZ STIDCSAV STIDC FAILED, LEAVE FFS IN R0. @VMD0103 00329000 L R0,CHANID GET CHANNEL ID LEFT BY STIDC. @VMD0103 00330000 IC R8,CHANID GET THE CHANNEL TYPE 00331000 IC R9,CHANID+1 GET THE CHANNEL MODEL 00332000 N R8,=X'000000F0' CLEAR ALL BITS EXCEPT TYPE 00333000 N R9,=X'0000000F' CLEAR ALL BITS EXCEPT MODEL 00334000 AR R8,R9 GET THE INDEX VALUE FOR TABLE 00335000 LA R8,CHAN(R8) GET CHANNEL TYPE ID. 00336000 MVC 0(1,R6),0(R8) SAVE THE CHANNEL TYPE ID. 00337000 CLI 0(R8),X'F5' IS THIS A 2860 SELECTOR ? 00338000 BNE TEST2880 NO, GO TEST FOR 2880 00339000 OI TYPEM,X'40' INDICATE 2860 SUPPORT 00340000 B RESET370 GO RESET 370 CHANNEL FLAG 00341000 TEST2880 EQU * 00342000 CLI 0(R8),X'F8' IS THIS A 2880 SELECTOR ? 00343000 BNE TEST2881 NO, GO TEST FOR 2880 00344000 OI TYPEM,X'80' INDICATE 2880 SUPPORT 00345000 TEST2881 EQU * 00346000 CLI 0(R8),X'F7' IS THIS A 2880 BLOCK MULTIPLEX ? 00347000 BNE TEST2870 NO, GO TEST FOR 2870 00348000 OI TYPEM,X'80' INDICATE 2880 SUPPORT 00349000 TEST2870 EQU * 00350000 CLI 0(R8),X'F6' IS THIS A 2870 BYTE MULTIPLEX ? 00351000 BNE STIDCSAV NO. @VMD0103 00352000 OI TYPEM,X'20' INDICATE 2870 SUPPORT 00353000 RESET370 LTR R7,R7 DOES THE RCHBLOK EXIST? @VMD0103 00354000 BM NORCH2 NO, NO RCHBLOK. @VMD0103 00355000 USING RCHBLOK,R7 @VMD0103 00356000 NI RCHTYPE,X'FF'-RCH370 RESET THE CHANNEL'S 370 @VMD0103 00357000 * INSTRUCTION FLAG. 00358000 STIDCSAV LTR R7,R7 DOES THE RCHBLOK EXIST? @VMD0103 00359000 BM NORCH2 NO, NO RCHBLOK. @VMD0103 00360000 ST R0,RCHSTIDC PUT ID FROM STIDC OR F'S INTO @VMD0103 00361000 * RCHBLOK. 00362000 DROP R7 @VMD0103 00363000 NORCH2 EQU * @VMD0103 00364000 CHANGEID EQU * 00365000 BCT R5,ISSUEINS GO GET NEXT CHANNEL 00366000 MVZ CONF(16),CONF-1 CHANGE THE HIGH ORDER FOUR BITS 00367000 L R4,=V(DMKCCHCF) GET THE POINTER TO THE CONFIGURATION 00368000 * TABLE POINTER 00369000 MVC 0(16,R4),CONF SAVE THE CHANNEL ID. TYPES IN 00370000 * CCH CONTROL PROGRAM 00371000 MVI PARMSAVE,X'00' WILL BE USED TO INDICATE WHETHER @V5088AA 00372000 * FRAME RECORDS REQUIRE INIT'ZATION@V5088AA 00373000 BAL R7,IOGMCHIN INITIALIZE MACHINE CHECK AREA @V407510 00374000 * FOR MAIN PROCESSOR @V407510 00375000 * CHECK HANDLER COMMUNICATION AREA 00376000 L R6,=V(DMKCCHMX) GET THE ADDRESS OF THE CCH RECORD LENGTH 00377000 * SAVE AREA 00378000 B MCH004(R3) GO TO MODEL DEPENDED CODE 00379000 B PASTDAVE GO INITIALIZE CP 00380000 MCH004 EQU * 00381000 B MC158155 GO GET SPACE FOR CCH RECORD @V407510 00382000 B MC135138 GO TO THE 135/138 SUPPORT @V386298 00383000 B MC145148 GO TO THE 145/148 SUPPORT @V386298 00384000 B MC158155 GO TO THE 155 & 158 SUPPORT 00385000 B MC168165 GO TO THE 165 & 168 SUPPORT 00386000 B MC303X GOTO THE COMMON 3033/3032/3031 @V5088AA 00387000 * SUPPORT ROUTINE @V5088AA 00388000 B MC331341 GO TO 4331/4341 PROCESSING @V60A6B6 00388100 MC135138 EQU * SUPPORT FOR 135/138 @V386298 00389000 LA R0,X'6C' LENGTH OF THE CCH RECORD @V5088AA 00390000 STH R0,0(R6) SAVE LENGTH @V5088AA 00391000 * AND I/O EXTENDED LOGOUT AREA 00392000 LA R1,X'100' GET THE ADDRESS OF THE I/O EXTENDED 00393000 * LOGOUT AREA 00394000 LA R4,22 GET THE LENGTH OF THE I/O LOGOUT AREA 00395000 B INTECSW GO INITIALIZE THE ECSW 00396000 MC145148 EQU * SUPPORT FOR THE 145/148 @V386298 00397000 LA R0,X'B4' LENGTH OF THE CCH RECORD @V5088AA 00398000 STH R0,0(R6) SAVE LENGTH @V5088AA 00399000 * AND I/O EXTENDED LOGOUT AREA 00400000 LA R0,96 GET THE LENGTH OF THE EXTENDED LOGOUT 00401000 BAL R3,FREE GO GET THE SPACE FOR THE LOGOUT 00402000 B INTECSW GO INITIALIZE THE ECSW 00403000 MC158155 EQU * 00404000 LA R0,X'54' LENGTH OF THE CCH RECORD @V5088AA 00405000 STH R0,0(R6) SAVE LENGTH @V5088AA 00406000 SR R1,R1 CLEAR THE I/O EXTENDED LOGOUT POINTER 00407000 B INTECSW GO INITIALIZE THE ECSW @V5088AA 00408000 MC303X EQU * COMMON 3033/3032/3031 SUPPORT @V5088AA 00409000 LA R0,X'2D4' LENGTH OF THE CCH RECORD @V5088AA 00410000 STH R0,0(R6) SAVE LENGTH @V5088AA 00411000 LA R0,640 GET LENGTH OF EXTENDED LOGOUT @V5088AA 00412000 BAL R3,FREE GO GET SPACE FOR LOGOUT AREA @V5088AA 00413000 OI PARMSAVE,INITYES FRAMES NEED TO BE INITIALIZED @V5088AA 00414000 INTECSW EQU * 00415000 MVI ECSWLOG,X'FF' INITIALIZE THE ECSW 00416000 B PASTDAV1 GO SAVE THE I/O EXTENDED LOGOUT POINTER 00417000 MC168165 EQU * 00418000 TM TYPEM,X'80' IS THIS A 2880 CHANNEL ? 00419000 BZ C287060 NO, GO TO 2870 &2860 SUPPORT 00420000 LA R0,X'C0' LENGTH OF THE CCH RECORD + IOEL@V5088AA 00421000 STH R0,0(R6) SAVE LENGTH @V5088AA 00422000 LA R0,112 GET THE LENGTH OF THE I/O EXTENDED 00423000 * LOGOUT AREA 00424000 BAL R3,FREE GO GET THE SPACE THE THE I/O EXTENDED 00425000 * LOGOUT 00426000 B PASTDAV1 GO SAVE THE I/O EXTENDED LOGOUT POINTER 00427000 MC331341 EQU * PROCESS 4331/4341 @V60A6B6 00427100 LA R0,X'54' LENGTH OF THE CCH RECORD @VA10477 00427110 STH R0,0(R6) SAVE LENGTH @VA10477 00427130 SR R1,R1 CLEAR I/O EXTENDED LOGOUT PTR. @VA10477 00427150 MVI ECSWLOG,X'FF' INITIALIZE THE ECSW @V60A6B6 00427200 B PASTDAVE GO SETUP RECORDING CYLINDERS @V60A6B6 00427300 SPACE 2 00428000 ********************************************************************** 00429000 FREE EQU * 00430000 LR R4,R0 SAVE THE LENGTH OF THE AREA 00431000 A R0,F7 PUT LENGTH ON A DOUBLEWORD @VA00881 00432000 * BOUNDARY 00433000 SRL R0,3 DIVIDE BY 8 00434000 CALL DMKFREE GO GET THE STORAGE 00435000 BR R3 RETURN TO IN LINE CODE 00436000 ********************************************************************** 00437000 EJECT 00438000 ***************************************************************@V407510 00439000 * @V407510 00440000 * ROUTINE TO OBTAIN STORAGE FOR MACHINE CHECK @V407510 00441000 * RECORD, EXTENDED LOGOUT AREA, AND CPEXBLOK. @V407510 00442000 * THE MACHINE CHECK COMMUNICATION AREA IS ALSO @V407510 00443000 * INITIALIZED. @V407510 00444000 * @V407510 00445000 ***************************************************************@V407510 00446000 IOGMCHIN DS 0H MACHINE CHECK INITIALIZATION @V407510 00447000 USING MCHAREA,R5 SETUP ADDRESSABILITY FOR MACHINE @V407510 00448000 * CHECK HANDLER COMMUNICATION AREA @V407510 00449000 LH R9,CPUMCELL GET THE LENGTH OF THE EXTENDED @V407510 00450000 * LOGOUT AREA @V407510 00451000 LA R6,MCHLEN1 GET LN OF DAMAGE ASSESSMENT AREA @V407510 00452000 LA R0,MCHFIX(R9,R6) CALCULATE THE TOTAL LENGTH @V407510 00453000 BAL R3,FREE GO GET THE SPACE FOR THE RECORD @V407510 00454000 SLL R0,X8 MULTIPLY LENGTH BY 8 @V407510 00455000 LR R2,R1 SET UP STARTING ADDRESS @V407510 00456000 LR R3,R0 SET UP LENGTH @V407510 00457000 LR R4,R2 SET UP FOR OVERLAP @V407510 00458000 SR R5,R5 SET UP TO ZERO STORAGE @V407510 00459000 MVCL R2,R4 CLEAR STORAGE JUST OBTAINED @V407510 00460000 LA R5,MCHFIX(R9,R1) GET ADDRESS OF DAMAGE @V407510 00461000 * ASSESSMENT AREA @V407510 00462000 ST R5,AMCHAREA SAVE ADDRESS OF DAMAGE @V407510 00463000 * ASSESSMENT AREA @V407510 00464000 STH R6,MCHDAMLN SAVE LENGTH OF DAMAGE @V407510 00465000 * ASSESSMENT AREA @V407510 00466000 MVC MCHPROCA,IPUADDR SAVE PROCESSOR ADDRESS @V407510 00467000 LTR R9,R9 ANY EXTENDED LOGOUT AREA? @V407510 00468000 BZ LOGOUT NO, SET ADDRESS TO ZERO @V407510 00469000 LA R9,MCHFIX(R1) GET THE BEGINNING ADDRESS OF @V407510 00470000 * THE EXTENDED LOGOUT AREA WILL @V407510 00471000 LOGOUT DS 0H @V407510 00472000 ST R9,SAVEWRK7 SAVE THE BEGINNING ADDRESS @V407510 00473000 LCTL R15,R15,SAVEWRK7 RESTORE CONTROL REGISTER 15 @V407510 00474000 ST R1,MCHREC SAVE THE POINTER TO THE MACHINE C@V407510 00475000 * RECORD @V407510 00476000 LA R0,8*CPEXSIZE GET THE SIZE OF THE CPEXBLOK @V407510 00477000 BAL R3,FREE GO GET THE SPACE FOR THE CPEXBLOK@V407510 00478000 SLL R0,X8 MULTIPLY LENGTH BY 8 @V407510 00479000 LR R2,R0 GET LENGTH @V407510 00480000 BCTR R2,0 SUBTRACT ONE FROM LENGTH @V407510 00481000 EX R2,CLEAR CLEAR CPEXBLOK @V407510 00482000 ST R1,MCHCPEX SAVE THE CPEXBLOK POINTER @V407510 00483000 LH R2,CPUMODEL GET THE MODEL NUMBER @V407510 00484000 SR R3,R3 CLEAR REGISTER 3 @V407510 00485000 LH R4,NOTSUPPD GET THE ID STOPPER @V407510 00486000 MCH002 EQU * @V407510 00487000 CH R2,MODMODEL(R3) COMPARE MODEL NUMBER WITH @V407510 00488000 BE MCH003 YES, GO SAVE MODEL ID @V407510 00489000 LA R3,TABSZ(R3) UPDATE MODEL NUMBER TABLE PTR @V407510 00490000 CH R4,MODMODEL(R3) COMPARE MODEL NO. WITH STOPPER @V407510 00491000 BNE MCH002 NO, GO COMPARE NEXT MODEL NO. @V407510 00492000 MCH003 EQU * @V407510 00493000 LH R3,MODMODID(R3) GET THE MODEL ID. @V407510 00494000 STC R3,MCHMODEL SAVE THE MODEL ID IN THE MACHINE @V407510 00495000 * CHECK HANDLER COMMUNICATION AREA @V407510 00496000 CH R2,MO155 IS THIS MODEL 155? @V407510 00497000 BE SETMODE YES, RECORD SOFT ERRORS @V407510 00498000 CH R2,MO165 IS THIS MODEL 165? @V407510 00499000 BNE IOGMCHEX NO, DO NOT RECORD SOFT ERRORS @V407510 00500000 SETMODE DS 0H RECORD SOFT ERRORS @V407510 00501000 OI APSTAT4,RECMODE SET RECORDING INDICATOR FOR REC.@VA09862 00502100 IOGMCHEX DS 0H @V407510 00503000 BR R7 RETURN TO CALLER @V407510 00504000 CLEAR XC ZERO(ZERO,R1),ZERO(R1) CLEAR STORAGE @V407510 00505000 ZERO EQU 0 CONSTANT OF 0 @V407510 00506000 TABSZ EQU 4 SIZE OF MODEL NO. ENTRIES @V407510 00507000 X8 EQU 3 SHIFT VALUE TO MULTIPLY BY 8 @V407510 00508000 ***************************************************************@V407510 00509000 SPACE 00510000 ***************************************************************@V407510 00511000 * @V407510 00512000 * THIS ENTRY POINT IS INVOKED TO INITIALIZE @V407510 00513000 * THE MACHINE CHECK RECORD, EXTENDED LOGOUT AREA, @V407510 00514000 * CPEXBLOK, AND MCHAREA FOR THE ATTACHED PROCESSOR. @V407510 00515000 * @V407510 00516000 ***************************************************************@V407510 00517000 DMKIOGAP RELOC @V407510 00518000 STIDP CPUID SAVE THE CPU MODEL & SERIAL NO. @V407510 00519000 BAL R7,IOGMCHIN INITIALIZE MACHINE CHECK AREA @V407510 00520000 * FOR ATTACHED PROCESSOR @V407510 00521000 LM R0,R11,SAVEREGS RESTORE CALLERS REGS @V407510 00522000 SVC RETURN EXIT @V407510 00523000 RETURN EQU 12 RETURN SVC NUMBER @V407510 00524000 SPACE 00525000 C287060 EQU * 00526000 SR R1,R1 CLEAR THE I/O EXTENDED LOGOUT POINTER 00527000 TM TYPEM,X'60' IS THIS A 2860 OR 2870 CHANNEL ? 00528000 BZ PASTDAV1 NO, GO SAVE I/O EXTENDED LOGOUT POINTER 00529000 MVI 0(R6),X'68' SAVE THE LENGTH OF THE CCH RECORD AND 00530000 * I/O EXTENDED LOGOUT AREA 00531000 LA R1,X'130' GET THE POINTER TO THE I/O EXTENDED 00532000 * LOGOUT 00533000 LA R4,22 GET THE LENGTH OF THE I/O LOGOUT AREA 00534000 PASTDAV1 EQU * 00535000 ST R1,IOELPNTR SAVE THE POINTER TO THE I/O EXTENDED 00536000 LTR R1,R1 IS THE ADDRESS ZERO ? 00537000 BZ PASTDAV2 YES, GO GET DEPENDENT MODULE 00538000 L R15,=V(DMKCCHSZ) GET ADDRESS OF IOEL SIZE FIELD @V5088AA 00539000 STH R4,0(,R15) SAVE I/O EXTENDED LOGOUT LENGTH @V5088AA 00540000 LR R2,R1 'TO' ADDRESS (IOEL) @V5088AA 00541000 LR R3,R4 LENGTH TO MOVE @V5088AA 00542000 LR R4,R2 'FROM' ADDRESS FOR MOVE @V5088AA 00543000 L R5,F255 PAD CHARACTER @V5088AA 00544000 SLL R5,24 PAD CHAR. = X'FF'; LENGTH=0 @V5088AA 00545000 MVCL R2,R4 PROPAGATE X'FF'S THRUOUT IOEL @V5088AA 00546000 L R5,AMCHAREA RESTORE MCH AREA BASE @V5088AA 00547000 PASTDAV2 EQU * 00548000 CLI MCHMODEL,MODEL165 IS THIS A 165 OR 168 ? 00549000 BNE PASTDAVE NO, GO FIND STARTING CYL FOR RECORDING 00550000 L R3,=V(DMKCCH60) GET THE ADDRESS OF THE SAVE AREA FOR 00551000 * CHANNEL ADDRESSES 00552000 LA R6,3 SETUP COUNT VALUE 00553000 SR R4,R4 CLEAR WORK REGISTER 00554000 INTERG EQU * 00555000 L R1,MOD1658C(R4) GET ADDRESS OF CHANNEL MODULE 00556000 LTR R1,R1 IS THERE AN ADDRESS FOR CHANNEL MODULE ? 00557000 BZ CCHCHAN NO, GO GET NEXT ADDRESS 00558000 * GET CHANNEL SUPPORT MODULE @V407510 00559000 TRANS 2,1,OPT=(BRING,LOCK,DEFER,SYSTEM),AFFINITY @V407510 00560000 ST R2,0(R4,R3) SAVE THE ADDRESS IN CCH CONTROL 00561000 * ROUTINE 00562000 CCHCHAN EQU * 00563000 LA R4,4(R4) UPDATE THE SAVE AREA 00564000 BCT R6,INTERG GO GET NEXT MODULE 00565000 DROP R5 DROP THE BASE REGISTER FOR MCH 00566000 B PASTDAVE GO SET UP RECORDING CYLINDERS 00567000 SPACE 00568000 PASTDAVE L R15,=V(DMKSYSER) FIND STARTING CYL FOR RECORDING 00569000 LH R1,4(,R15) Get CUU of ERR area HRC075DK 00569500 LH R15,0(R15) ERRORS. 00570000 STH R15,CECYL SET RECORDING AREA IN-CORE PTR @V5088AA 00571000 CALL DMKSCNRU CALLSCANNER TO GET RDEVBLOK PTR 00573000 ********************************************************************** 00574000 * SCANNER RETURNS PTR TO RDEVBLOK IN GPR8 * 00575000 ********************************************************************** 00576000 USING RDEVBLOK,R8 00577000 LH R15,RDEVCODE R8 POINTS TO RDEVBLOK-PICK UP RDEVCODE 00578000 STC R15,CECYLTYP ONLY 1 BYTE IS USED AT PRESENT. 00579000 STC R15,WORKTYP 00580000 L R4,=V(DMKIOETY) ADDRESS OF 'D' PART OF ERROR @VMV0030 00580100 * RECORDING AREA CCPD 00580200 STC R15,0(R4) SAVE DEVICE TYPE @VMV0030 00580300 CLI RDEVTYPE,TYP3330 IS IT A 3330 ? 00581000 BE SET3330 YES 00582000 CLI RDEVTYPE,TYP3350 IS IT A 3350 ? @V304498 00583000 BE SET3350 YES - @V304498 00584000 CLI RDEVTYPE,TYP3375 Is it a 3375 ? HRC106DK 00584100 BE SET3375 Yes - HRC106DK 00584200 CLI RDEVTYPE,TYP3380 Is it a 3380 ? HRC106DK 00584300 BE SET3380 Yes - HRC106DK 00584400 CLI RDEVTYPE,TYP2305 IS IT A 2305 ? 00585000 BE SET2305 YES 00586000 CLI RDEVTYPE,TYP3340 IS IT A 3340 ? @V2A2029 00587000 BE SET3340 YES - @V2A2029 00588000 MVI MAXPAGE,MAX2314 SET MAX NO. PAGES PER CYL 2314/2319 00589000 B NINETYPC @V5088AA 00590000 SET3350 MVI MAXPAGE,MAX3350 SET MAX NO. PAGES PER CYL 3350 @V304498 00591000 B NINETYPC @V5088AA 00592000 SET3375 MVI MAXPAGE,MAX3375 Set max no. pages per cyl 3375 HRC106DK 00592100 B NINETYPC HRC106DK 00592200 SET3380 MVI MAXPAGE,MAX3380 Set max no. pages per cyl 3380 HRC106DK 00592300 B NINETYPC HRC106DK 00592400 SET3330 MVI MAXPAGE,MAX3330 SET MAX NO. PAGES PER CYL 3330 00593000 B NINETYPC @V5088AA 00594000 SET3340 EQU * SET MAX NO. PAGES PER CYL 3340 @V2A2029 00595000 SET2305 MVI MAXPAGE,MAX2305 SET MAX NO. PAGES PER CYL 2305 00596000 EJECT 00597000 NINETYPC EQU * @V5088AA 00598000 L R2,=V(DMKSYSCT) COUNT OF RECORDING CYLINDERS @V5088AA 00599000 LH R2,0(R2) RETRIEVE COUNT OF RECORDING CYLS @V5088AA 00600000 L R4,=V(DMKIOECT) ADDRESS TO SAVE CYL COUNT @V5088AA 00601000 STH R2,0(R4) SAVE CYLINDER COUNT @V5088AA 00602000 LR R4,R2 MOVE COUNT FOR MANIPULATION @V5088AA 00603000 AH R4,CECYL ADD START CYL OF RECORDING AREA @V5088AA 00604000 BCTR R4,0 SUBTRACT ONE FOR END ADDRESS @V5088AA 00605000 STH R4,MAXCYL SAVE END 'CC' OF RECORDING AREA @V5088AA 00606000 STH R4,LASTCYL SAVE ENDING 'CC' FOR 90% CHECK @V5088AA 00607000 SRDL R2,32 PREPARE FOR MULTIPLICATION @V5088AA 00608000 SLR R4,R4 CLEAR THE REGISTER @V5088AA 00609000 IC R4,MAXPAGE NUMBER OF PAGES PER CYLINDER +1 @V5088AA 00610000 BCTR R4,0 SUBTRACT 1 FOR NO. PAGES PER CYL @V5088AA 00611000 MR R2,R4 MULTIPLY PAGES/CYL BY NO. OF CYLS@V5088AA 00612000 LA R4,10 FIND 10% OF TOTAL NO. OF PAGES @V5088AA 00613000 DR R2,R4 DIVIDE TOTAL NUMBER OF PAGES IN @V5088AA 00614000 * RECORDING AREA BY 10 @V5088AA 00615000 LTR R2,R2 IS REMAINDER ZERO? @V5088AA 00616000 BZ *+8 IF YES, OK @V5088AA 00617000 LA R3,1(R3) IF NOT, ROUND UP THE 10% VALUE @V5088AA 00618000 IC R4,MAXPAGE NO. OF PAGES ON ONE CYLINDER @V5088AA 00619000 SR R4,R3 SUBTRACT IN ORDER TO GET THE @V5088AA 00620000 * PAGE WHICH, ON THE LAST RECORDING@V5088AA 00621000 * CYL, WILL MEAN AREA IS 90% FULL. @V5088AA 00622000 STC R4,PAGE90PC SAVE FOR USE BY RECORDING RTNS @V5088AA 00623000 L R4,=V(DMKIOEMX) PICK UP MAX PAGE PTR IN RES CODE@V60B7AA 00623100 MVC 0(1,R4),MAXPAGE MOVE IN MAX NO. OF PAGES FOR @V60B7AA 00623200 * DEVICE 00623300 L R4,=V(DMKIOENI) PICK UP ADDRESS OF 90% FULL LIM.@V60B7AA 00623400 MVC 0(1,R4),PAGE90PC MOVE IN CORRECT COUNT @V60B7AA 00623500 FINDIOR LA R4,SETOBRS ADDRESS OF 'FIND' RETURN POINT @V5088AA 00624000 ST R4,FINDRET SET RETURN POINT FROM SEARCH 00625000 MVC WORKCYL(3),CECYL PUT IO-OBR PARMS IN WORK AREA 00626000 DROP R8 00627000 SPACE 2 00628000 ********************************************************************** 00629000 * LOCATE THE FIRST RECORD ON DESIGNATED RECORDING CYLINDER * 00630000 * AND CHECK THAT IT IS IN THE CORRECT FORMAT * 00631000 ********************************************************************** 00632000 SPACE 1 00633000 FINDREC EQU * 00634000 CALL DMKPGTVG GET A VIRTUAL MEMORY PAGE ADDRESS 00635000 ********************************************************************** 00636000 * ADDRESS WILL BE RETURNED IN REG 1 * 00637000 ********************************************************************** 00638000 ST R1,IOEVMPAD SAVE VIRT MEM PAGE ADDRESS 00639000 FIND2 EQU * 00640000 BAL R14,FMTREAD GO READ A 4096 BYTE RECORD 00641000 ********************************************************************** 00642000 * * 00643000 * ON RETURN REGISTER 2 CONTAINS REAL ADDRESS OF BUFFER * 00644000 * * 00645000 ********************************************************************** 00646000 ST R2,IOEREALA SAVE REAL ADDRESS OF BUFFER 00647000 USING RECPAG,R2 00648000 CLC WORKCYL(4),RECCCPD CORRECT CCPD FOR PAGE ?? 00649000 BNE FORMAT IF NOT - GO FORMAT 00650000 TM RECFLAG2,RECPAGFM IN A FORMAT OPERATION 00651000 BO FORMAT YES - DO IT ALL OVER AGAIN 00652000 TM RECFLAG1,RECPAGIU+RECPAGFR+RECPAGFL SHOULD HAVE ONE 00653000 BZ FORMAT CAUSE IF WE DON'T , WE FORMAT 00654000 MVI INFOFLAG,X'00' CLEAR OUT FLAG BYTE @VD00160 00655000 TM RECFLAG1,RECPAGFA ARE FRAME RECORDS ON THIS PAGE@VD00160 00656000 BZ FINDLOOP OK IF NOT @VD00160 00657000 OI INFOFLAG,YESFRAME REMEMBER FRAMES ARE PRESENT @VD00160 00658000 MVC SAVELAST,WORKCYL SAVE THIS FIRST CCPD VALUE @VA07861 00658100 SPACE 00659000 FINDLOOP EQU * 00660000 TM INFOFLAG,YESFRAME WERE FRAME RECORDS FOUND ON @VD00160 00665000 * THE RECORDING CYLINDERS? 00666000 BZ FIND3 NO --CONTINUE @VD00160 00667000 TM RECFLAG1,RECPAGFA ARE THERE FRAMES ON THIS PAGE?@VD00160 00668000 * (WE ARE LOOKING FOR THE FIRST 00669000 * NON-FRAME RECORD IN ORDER TO FILL 00670000 * IN DMKIOEHS.) 00671000 BNZ FIND3 YES -- THEN THIS IS NOT A PAGE @VD00160 00672000 * THAT CONTAINS ERROR RECORDS. 00673000 L R2,=V(DMKIOEFR) ADDRESS OF FRAME INDICATOR @VD00160 00674000 MVI 0(R2),YESFRAME INDICATE FRAMES ARE ON REC. CYLS @VD00160 00675000 L R2,=V(DMKIOEHS) ADDRESS OF CCPD OF 1ST ERROR REC@VD00160 00676000 MVC 0(4,R2),SAVELAST SAVE CCPD OF LAST FRAME RECORD @VA07861 00677100 * (EREP WILL USE THIS TO READ THE 1ST 00678100 * ERROR RECORD.) 00678125 MVI INFOFLAG,X'00' TURN OFF FLAG SO THAT WE DON'T @VD00160 00679000 * COME THROUGH HERE AGAIN. 00680000 L R2,IOEREALA LOAD REAL PAGE ADDRESS @VA08278 00680050 FIND3 TM RECFLAG1,RECPAGFR CLEARED PAGE? @VA07861 00680100 BO FINDEXIT YES - LET'S USE IT @VA07861 00680120 TM RECFLAG1,RECPAGFL IN USE BUT NOT FULL? @VA07861 00680140 BZ FINDEXIT YES - OK TO USE THIS ONE @VA07861 00680160 SLR R2,R2 ZERO REGISTER 2 @VA07861 00681100 ICM R2,B'0111',WORKCYL LOAD LAST CYL & PAGE NUMBER @V5088AA 00682000 STCM R2,B'0111',SAVELAST SAVE THIS CCPD - IT MAY BE @VA07861 00682100 * THE LAST PAGE TO CONTAIN FRAME RECORDS. 00682125 LA R2,1(R2) BUMP PAGE NUMBER BY ONE @V5088AA 00683000 STC R2,WORKPAGE AND STORE IT 00684000 CLC WORKPAGE(1),MAXPAGE HAVE WE REACHED THE END 00685000 BL FINDREAD OK--NOT AT END OF CYLINDER @V5088AA 00686000 CLC WORKCYL(3),MAXCYL ARE WE AT END OF LAST CYL? @V5088AA 00687000 BNL CYLFULL YES, RECORDING AREA IS FULL @V5088AA 00688000 SRL R2,8 ISOLATE 'CC' PART OF CURRENT ADDR@V5088AA 00689000 LA R2,1(R2) INCREMENT CYL NUMBER @V5088AA 00690000 STH R2,WORKCYL STORE UPDATED WORK ADDRESS @V5088AA 00691000 MVI WORKPAGE,X'01' RESET 'P' TO 1ST PAGE ON NEW CYL @V5088AA 00692000 FINDREAD BAL R14,FMTREAD READ PAGE IN @V5088AA 00693000 B FINDLOOP GO BACK AND LOOK AT THIS ONE 00694000 SPACE 00695000 FINDEXIT EQU * 00696000 MVI RECFLAG1,RECPAGIU SET PAGE IN USE 00697000 BAL R3,FMTWRITE OUTPUT THE PAGE 00698000 L R3,FINDRET LOAD RETURN ADDRESS 00699000 BR R3 AND GO BACK 00700000 SPACE 00701000 ********************************************************************** 00702000 * * 00703000 * SET RECORDING AREA STARTING CYLINDER AND PAGE @V5088AA 00704000 * CECYL POINTS TO FIRST AVAILABLE ERROR RECORD 'CCP' @V5088AA 00705000 * * 00706000 ********************************************************************** 00707000 SPACE 2 00708000 SETOBRS MVC CECYL(3),WORKCYL LET IT BE DONE 00709000 L R15,=V(DMKIOECE) ADD. OF CECYL @VA10241 00709100 MVC 0(3,R15),CECYL MOVE IN CECYL @VA10241 00709200 B IOEXIT ALL DONE 00710000 EJECT 00711000 ********************************************************************** 00712000 * * 00713000 * FORMAT WILL WRITE A 12 BYTE CONTROL FIELD AS THE FIRST 12 * 00714000 * BYTES IN EVERY 4096 BYTE BLOCK. * 00715000 * BYTES 1-2=CYLINDER * 00716000 * BYTE 3 =PAGE NO. (BLOCK OR PHYSICAL RECORD NUMBER) * 00717000 * BYTE 4 =DEVICE CODE * 00718000 * BYTE 5-6=NEXT AVAIL. SPACE THAT CAN BE USED IN BLOCK * 00719000 * BYTE 7 =PAGE 'IN-USE' IND (00=EMPTY, 80=IN-USE@V5088AA 00720000 * BYTE 8 = PAGE SKIPPED INDICATOR. * 00721000 * BYTES 9-12=LAST RECORD IND OR SIZE OF VARIABLE RECORD * 00722000 * * 00723000 * * 00724000 ********************************************************************** 00725000 SPACE 2 00726000 FORMAT EQU * 00727000 MVI RECFLAG2,RECPAGFM SET FORMATTING FLAG 00728000 MVC RECCCPD(4),WORKCYL SET CCPD 00729000 MVC RECNXT(2),INITFMT PAGE ONE STUFF 00730000 MVI RECFLAG1,0 ZIP USE FLAGS 00731000 SLR R0,R0 NO VARIABLE MESSAGE TEXT @V5088AA 00732000 SLR R1,R1 NO VARIABLE MESSAGE TEXT @V5088AA 00733000 LA R2,552 MESSAGE DMKIOG552I @V305435 00734000 ICM R2,B'0100',=C'I' INFORMATION MESSAGE @V305435 00735000 FORMSGOK BAL R3,CALLERM CALL MESSAGE WRITTER @V305435 00736000 LA R14,FMTFINI GET RETURN ADDRESS @V305435 00737000 ST R14,FMTEXIT SAVE IT @V305435 00738000 B FMTWRTPG OUTPUT FIRST PAGE @V305435 00739000 SPACE 3 00740000 ********************************************************************** 00741000 * * 00742000 * ROUTINE TO FORMAT ERROR RECORDING AREA @V5088AA 00743000 * * 00744000 ********************************************************************** 00745000 SPACE 2 00746000 FMTLOOP MVC 0(4,R2),WORKCYL MOVE IN CCPD 00747000 MVC 4(8,R2),INITFMT MOVE IN THE GOODIES 00748000 BAL R3,FMTWRITE WRITE IT OUT 00749000 FMTPGINC EQU * 00750000 ICM R2,B'0111',WORKCYL PICK UP CYL AND PAGE POINTER @V5088AA 00751000 LA R2,1(R2) BUMP IT BY 1 00752000 STC R2,WORKPAGE SAVE PTR 00753000 CLC WORKPAGE(1),MAXPAGE DID WE HIT END OF CYL ? 00754000 BNE FMTRD NOT AT END OF A CYLINDER @V5088AA 00755000 CLC WORKCYL(3),MAXCYL AT END OF LAST CYLINDER? @V5088AA 00756000 BE FMTOUT YES, AT END OF RECORDING AREA @V5088AA 00757000 SRL R2,8 ISOLATE 'CC' PART OF CURRENT ADDR@V5088AA 00758000 LA R2,1(R2) INCREMENT CYLINDER TO NEXT ONE @V5088AA 00759000 STH R2,WORKCYL STORE UPDATED CYLINDER NUMBER @V5088AA 00760000 MVI WORKPAGE,X'01' UPDATE 'P' TO 1ST PAGE ON NEW CYL@V5088AA 00761000 FMTRD BAL R14,FMTREAD GO READ ANOTHER PAGE @V5088AA 00762000 B FMTLOOP FORMAT THIS PAGE 00763000 SPACE 5 00764000 ********************************************************************** 00765000 * * 00766000 * RETURN HERE WHEN FORMAT OF AREA IS COMPLETE @V5088AA 00767000 * * 00768000 ********************************************************************** 00769000 FMTOUT L R2,=V(DMKIOEFR) ADDR. OF FRAME RECORD INDICATOR @V5088AA 00770000 MVI 0(R2),NOFRAMES NO FRAME RECS ARE IN REC. AREA @V5088AA 00771000 TM PARMSAVE,INITYES MUST WE INITIALIZE FRAME RECS? @V5088AA 00772000 BZ EXITFMT NO, DONE WITH FORMATTING @V5088AA 00773000 L R15,=V(DMKIOEHS) ADDRESS OF HDRSTART FIELD -- @V5088AA 00774000 * SLOT FOR FIRST ERROR RECORD TO GO@V5088AA 00775000 MVC 0(4,R15),F0 ZERO THIS FIELD--WILL BE UPDATED @V5088AA 00776000 * BY DMKIOGFR AS APPROPRIATE @V5088AA 00777000 CALL DMKIOHFR GO INITIALIZE FRAME RECORDS @V60B7AA 00778100 EXITFMT L R14,FMTEXIT CALLER'S RETURN ADDRESS @V5088AA 00779000 BR R14 00780000 * 00781000 FMTFINI EQU * 00782000 L R3,=V(DMKSYSER) ADDR. OF START OF REC. AREA @V5088AA 00783000 * NOTE: MUST USE DMKSYSER VALUE @V5088AA 00784000 * SINCE CECYL MAY HAVE BEEN UPDATED@V5088AA 00785000 * BY DMKIOGFR AND IF WE CHANGE IT @V5088AA 00786000 * THEN DMKIOEEP WILL BE WRONG. @V5088AA 00787000 LH R3,0(R3) RETRIEVE 'CC' PART OF ADDRESS @V5088AA 00788000 STH R3,WORKCYL UPDATE CURRENT 'CC' ADDRESS @V5088AA 00789000 MVI WORKPAGE,X'01' RESET PAGE NUMBER TO ONE 00790000 BAL R14,FMTREAD READ PAGE ONE IN 00791000 TM RECFLAG1,RECPAGFA ARE FRAME RECS ON THIS PAGE? @V5088AA 00792000 BZ FMTPAGDN NO, GO INITIALIZE PAGE HDR @V5088AA 00793000 MVI RECFLAG2,RECPAGDN TURN OFF 'FORMATTING' FLAG. @V5088AA 00794000 * THE REST OF THE HDR WAS INIT. @V5088AA 00795000 * BY DMKIOGFR. @V5088AA 00796000 B *+10 @V5088AA 00797000 FMTPAGDN MVC RECNXT(8),INITFMT SET FLAGS AND FENCE @V5088AA 00798000 BAL R3,FMTWRITE WRITE IT BACK OUT 00799000 DROP R2 00800000 IOEXIT SR R0,R0 00801000 ST R0,IOEREALA 00802000 ST R0,IOEVMPAD 00803000 SR R2,R2 CLEAR PARM REG 00804000 CALL DMKRPAGT,PARM=SYSTEM CLEAR PAGE REF 00805000 CALL DMKPGTVR RELEASE THE VIRTUAL MEMORY SPACE 00806000 L R4,=V(DMKIOEEP) GET RECORDING ADDRESS CCPD @V5088AA 00807000 MVC 0(3,R4),CECYL MOVE CYL, PAGE, AND TYPE FOR @V60B7AA 00808100 * RECORDING AREA 1ST AVAIL. SPACE @V5088AA 00809000 EXIT RETURN TO CALLER @V305435 00814000 SPACE 1 00815000 FMTREAD ST R14,SAVE14 00816000 L R0,WORKCYL SET RECORD CCPD 00817000 CALL DMKRPAGT,PARM=SYSTEM+BRING,AFFINITY @V407510 00818000 L R14,SAVE14 00819000 BC 8,0(R14) RETURN IF OK 00820000 GIVENEWS SLR R0,R0 INDICATE NO VARIBLE DATA @V305435 00821000 SLR R1,R1 ... @V305435 00822000 LA R2,558 MESSAGE DMKIOG558I @V305435 00823000 ICM R2,B'0100',=C'I' INFORMATION MESSAGE @V305435 00824000 BAL R3,CALLERM OUTPUT THE ERROR MESSAGE @V305435 00825000 B LIGHTOUT TURN OFF RECORDING AND EXIT. 00826000 * DMKFREE - TO OBTAIN A BLOCK OF STORAGE 00827000 FMTWRITE EQU * 00828000 L R1,IOEVMPAD 00829000 L R0,WORKCYL 00830000 CALL DMKRPAPT,PARM=SYSTEM,AFFINITY @V407510 00831000 BC 8,0(R3) RETURN IF NO ERRORS 00832000 B GIVENEWS GO SEND ERROR MSG 00833000 * 00834000 CYLFULL SLR R0,R0 NO VARIABLE MESSAGE TEXT @V5088AA 00835000 SLR R1,R1 NO VARIABLE MESSAGE TEXT @V5088AA 00836000 LA R2,551 MESSAGE DMKIOG551E @V305435 00837000 ICM R2,B'0100',=C'E' ERROR MESSAGE @V5088AA 00838000 L R4,=V(DMKIOEES) I/O SWITCH @V305435 00839000 CYLMSGOK BAL R3,CALLERM CALL MESSAGE WRITTER @V305435 00840000 MVI 0(R4),X'FF' TURN OFF (OBR|MCH) SWITCH @V305435 00841000 B IOEXIT NO - RETURN TO CALLER @V305435 00842000 SPACE 00843000 FMTWRTPG EQU * 00844000 BAL R3,FMTWRITE OUTPUT PAGE ONE 00845000 B FMTPGINC NOW GO DO THE REST 00846000 EJECT 00847000 ********************************************************************** 00848000 * * 00849000 * THIS ENTRY POINT IS INVOKED TO RESET OR CLEAR THE ERROR * 00850000 * RECORDING CYLINDERS TO CONTAIN BYTE COUNTS OF RESET VALUES. * 00851000 * AN IN-CORE POINTER IS THEN UPDATED TO POINT TO THE * 00852000 * START OF THE RECORDING AREAS. * 00853000 * * 00854000 * PARAMETER IS PASSED TO THIS ROUTINE IN REGISTER 2. * 00855000 * R2=01 ERROR RECORDS ONLY @V5088AA 00856000 * R2=02 ERROR RECORDS AND FRAME RECORDS @V5088AA 00857000 * * 00858000 ********************************************************************** 00859000 SPACE 2 00860000 DMKIOGF2 RELOC 00861000 SWITCH @V407510 00862000 STC R2,PARMSAVE SAVE ERASE PARAMETERS @V60B7AA 00863100 TM PARMSAVE,CLR+CLEARF VALID ERASE PARAMETER? @V5088AA 00864000 BNZ ERASE YES @V5088AA 00865000 LM R0,R11,SAVEREGS RESTORE CALLERS REGS 00866000 SVC 12 EXIT 00867000 SPACE 1 00868000 ********************************************************************** 00869000 * SET SWITCH 'RECORDING IN PROCESS' IS ON WHILE ERASE IS * 00870000 * BEING DONE TO ELIMINATE LOST RECORDINGS. * 00871000 * THIS WILL ALLOW ERRORS TO BE QUED UNTIL ERASE IS COMPLETE * 00872000 ********************************************************************** 00873000 ERASE L R10,=V(DMKIOEFR) ADDRESS OF FRAME INDICATOR @V5088AA 00874000 IC R10,0(R10) PICK UP THE IOEFR VALUE @V5088AA 00875000 STC R10,IOEFRSAV SAVE THE PRESENT INDICATION @V5088AA 00876000 L R10,=V(DMKSYSER) ADDR. OF START OF REC. AREA @V5088AA 00877000 LH R10,0(R10) RETRIEVE 'CC' PART OF ADDRESS @V5088AA 00878000 STH R10,CECYL START OF ERROR RECORDING AREA @V5088AA 00879000 L R15,=V(DMKIOECE) ADD. OF CECYL @VA10241 00879100 MVC 0(3,R15),CECYL MOVE IN CECYL @VA10241 00879200 MVI CEPAGE,X'01' INITIALIZE THE CURRENT 'P' @V5088AA 00880000 MVC WORKCYL(3),CECYL INITIALIZE THE CURRENT 'CC' @V5088AA 00881000 BAL R10,ERASINIT 00882000 LA R14,ERASDONE PICK UP RETURN ADDRESS @V5088AA 00883000 ST R14,FMTEXIT STOW IT 00884000 B FMTLOOP 00885000 ********************************************************************** 00886000 * * 00887000 * * 00888000 * RECORDING CYLINDERS ARE FORMATTED AT THIS POINT @V5088AA 00889000 * * 00890000 * * 00891000 ********************************************************************** 00892000 ERASDONE L R4,=V(DMKIOEIF) ADD. OF INFOFLAG @VA10241 00893120 TM 0(R4),FULLNOW IS AREA NOW FILLED WITH FRAME @V60B7AA 00893300 * RECORDS? 00893400 BO FMTFINI DON'T CLEAR 'FULL' FLAG IF SO @V5088AA 00894000 TM PARMSAVE,CLR WAS THIS A 'CLEAR' OPERATION? @V5088AA 00895000 BZ CLRIOEES 00896000 L R4,=V(DMKIOEFR) ADDRESS OF FRAME INDICATOR @V5088AA 00897000 MVC 0(1,R4),IOEFRSAV IF THIS IS A 'CLEAR' OPERATION,@V5088AA 00898000 * THEN THERE MAY STILL BE FRAMES @V5088AA 00899000 * ON THE REC. CYLS. RESTORE FRAME @V5088AA 00900000 * INDICATOR TO ITS VALUE AT ENTRY @V5088AA 00901000 * TO 'CLEAR' FUNCTION. @V5088AA 00902000 CLRIOEES EQU * @V5088AA 00903000 L R4,=V(DMKIOEES) PICK UP SWITCH 00904000 MVI 0(R4),X'00' CLEAR CYL FULL INDICATOR 00905000 XC SAVEWRK2(L'SAVEWRK2*2),SAVEWRK2 CLEAR MSG. AREA @VMD0156 00906000 LA R0,L'SAVEWRK2*2 LENGTH OF VARIABLE MSG. TEXT @V5088AA 00907000 LA R1,SAVEWRK2 AND ITS ADDRESS @V305435 00908000 LA R2,553 MESSAGE DMKIOG553I @V305435 00909000 ICM R2,B'0100',=C'I' INFORMATION MESSAGE @V305435 00910000 MVC SAVEWRK2(L'SAVEWRK2*2),VMUSER SHOW WHO CLEARED @V5088AA 00911000 BAL R3,CALLERM WRITE OUT MESSAGE @V305435 00912000 B FMTFINI FINISH UP FORMATTING @V5088AA 00913000 SPACE 3 00914000 SPACE 4 00915000 ERASINIT CALL DMKPGTVG GET A VIRTUAL MEMORY PAGE ADDRESS. 00916000 ********************************************************************** 00917000 * * 00918000 * ADDRESS RETURNED IN REGISTER 1 * 00919000 * * 00920000 ********************************************************************** 00921000 ST R1,IOEVMPAD SAVE IT 00922000 BAL R14,FMTREAD 00923000 ********************************************************************** 00924000 * * 00925000 * REGISTER 2 CONTAINS ADDRESS OF BUFFER ON RETURN FROM READ. * 00926000 * * 00927000 ********************************************************************** 00928000 ST R2,IOEREALA SAVE IT 00929000 USING RECPAG,R2 BASE ADDRESS FOR RECORDING PAGE @V5088AA 00930000 MVC RECCCPD(4),WORKCYL PAGE ONE CCPD 00931000 MVI RECFLAG2,RECPAGFM FLAG CYLINDER FORMATTING 00932000 TM PARMSAVE,CLR CLEAR ONLY ERROR RECORDS? @V5088AA 00933000 BNO ERASFRMS NO, CLEAR ALL RECORDS @V5088AA 00934000 TM RECFLAG1,RECPAGFA REQUEST IS TO CLR ERR. RECS-- @V5088AA 00935000 * ARE FRAMES IN THIS 1ST PAGE? @V5088AA 00936000 BO ERASWRT YES, DON'T DESTROY RECFLAG1 @V5088AA 00937000 ERASFRMS MVI RECFLAG1,X'00' ZIP THE USE FLAGS. EITHER WE ARE @V5088AA 00938000 * CLEARING ALL RECORDS OR THERE @V5088AA 00939000 * WERE NO FRAME RECS. ON CYL ANYWAY@V5088AA 00940000 MVC RECNXT(2),INITFMT AND INITIALIZE THE REST 00941000 ERASWRT BAL R3,FMTWRITE NOW WRITE IT OUT @V5088AA 00942000 MVI WORKPAGE,X'02' POINT TO PAGE TWO 00943000 BAL R14,FMTREAD AND READ IT IN 00944000 TM PARMSAVE,CLEARF CLEARF SPECIFIED? @V5088AA 00945000 BOR R10 YES, START FORMAT WITH 2ND PAGE @V5088AA 00946000 * @V5088AA 00947000 * WE ARE HERE IF 'CLEAR' WAS SPECIFIED. LEAVE ANY FRAME @V5088AA 00948000 * RECORDS ON RECORDING CYLINDERS INTACT. ANY PAGES WHICH @V5088AA 00949000 * CONTAIN FRAME RECORDS WILL NOT CONTAIN ERROR RECORDS-- @V5088AA 00950000 * DMKIOEFR SEES TO THAT. SO FIND 1ST PAGE WHICH DOESN'T @V5088AA 00951000 * CONTAIN FRAME RECORDS AND START FORMAT THERE. @V5088AA 00952000 ERASLOOP TM RECFLAG1,RECPAGFA ANY FRAMES ON THIS 1ST PAGE? @V5088AA 00953000 * (IF NOT, NONE ON RECORDING CYLS.)@V5088AA 00954000 BZR R10 START FORMATTING WITH THIS PAGE @V5088AA 00955000 ICM R0,B'0111',WORKCYL GET CURRENT 'CCP' VALUE @V5088AA 00956000 A R0,F1 INCREMENT 'P' NUMBER @V5088AA 00957000 STC R0,WORKPAGE SAVE IN CURRENT PAGE VALUE @V5088AA 00958000 CLC WORKPAGE(1),MAXPAGE ON LAST PAGE OF A CYLINDER? @V5088AA 00959000 BL ERASRD NO, OK GO READ THIS CURRENT PAGE @V5088AA 00960000 CLC WORKCYL(3),MAXCYL ON LAST PAGE OF LAST CYLINDER?@V5088AA 00961000 BE CYLFULL PUT OUT AREA FULL MESSAGE @V5088AA 00962000 SRL R0,8 ISOLATE 'CC' PART OF ADDRESS @V5088AA 00963000 A R0,F1 INCREMENT TO NEXT CYLINDER @V5088AA 00964000 STH R0,WORKCYL SAVE IN CURRENT 'CC' VALUE @V5088AA 00965000 MVI WORKPAGE,X'01' SET CURRENT 'P' TO 1ST PG. OF CYL@V5088AA 00966000 ERASRD BAL R14,FMTREAD GO READ THIS CURRENT PAGE @V5088AA 00967000 MVC CECYL(3),WORKCYL UPDATE CECYL VALUE TO POINT TO @V5088AA 00968000 * PAST THE FRAME RECORDS @V5088AA 00969000 L R14,=V(DMKIOECE) ADD. OF CECYL @VA10241 00969100 MVC 0(3,R14),CECYL @VA10241 00969200 B ERASLOOP CHECK FOR FRAMES ON THIS PAGE @V5088AA 00970000 DROP R2 @V5088AA 00971000 SPACE 1 00972000 CALLERM ICM R2,B'1000',ERMPARMS PARMS=OPERATOR+ALARM+RETURN @V305435 00973000 ICM R0,B'1110',MODULEID+3 MODULE IDENTIFIER @V305435 00974000 CALL DMKERMSG,AFFINITY CALL MESSAGE WRITTER @V407510 00975000 L R2,IOEREALA RESTORE REAL PAGE ADDRESS @V305435 00976000 L R1,IOEVMPAD RESTORE VIRTUAL PAGE ADDRESS @V305435 00977000 BR R3 RETURN TO LINE CODE @V305435 00978000 SPACE 1 00979000 LIGHTOUT L R4,=V(DMKIOEES) ADDR. OF RECORDING AREA FULL FLG@V5088AA 00980000 MVI 0(R4),X'FF' TURN OFF OBR RECORDING 00981000 B IOEXIT 00982000 EJECT 00983000 DS 0F 01475000 INITFMT DC X'00084000FFFFFFFF' COUNT OF 8 AND PAGE FREE 01476000 FMTEXIT DS 1F 01477000 FINDRET DS 1F 01478000 IOEVMPAD DS 1F 01479000 IOEREALA DS 1F 01480000 CECYL DC H'00' 01481000 CEPAGE DC X'01' 01482000 CECYLTYP DC X'00' 01483000 WORKCYL DC H'00' 01484000 WORKPAGE DC X'01' 01485000 WORKTYP DC X'00' 01486000 SAVE14 DS 1F 01487000 SAVELAST DC F'0' SAVE AREA FOR LAST CCPD-USED TO DETERMINE@VA07861 01487100 * CCPD OF LAST FRAME RECORD 01487150 MAXREC DC H'126' 01488000 MODMODEL DS H 01489000 MODMODID DS H 01490000 ORG MODMODEL 01491000 MO135 DC X'0135',AL2(MODEL135) MODEL NUMBER AND ID FOR 135 01492000 MO138 DC X'0138',AL2(MODEL138) MOD NUMBER AND ID FOR 138 @V386298 01493000 MO145 DC X'0145',AL2(MODEL145) MODEL NUMBER AND ID FOR 145 01494000 MO148 DC X'0148',AL2(MODEL148) MOD NO. AND ID FOR 148 @V386298 01495000 MO155 DC X'0155',AL2(MODEL155) MODEL NUMBER AND ID FOR 155 01496000 MO158 DC X'0158',AL2(MODEL158) MODEL NUMBER AND ID FOR 158 01497000 MO165 DC X'0165',AL2(MODEL165) MODEL NUMBER AND ID FOR 165 01498000 MO168 DC X'0168',AL2(MODEL168) MODEL NUMBER AND ID FOR 168 01499000 MO3031 DC X'3031',AL2(MOD3031) MODEL NO. AND ID FOR 3031 @V5088AA 01500000 MO3032 DC X'3032',AL2(MOD3032) MODEL NO. AND ID FOR 3032 @V5088AA 01501000 MO3033 DC X'3033',AL2(MOD3033) MODEL NO. AND ID FOR 3033 @V5088AA 01502000 MO4331 DC X'4331',AL2(MOD4331) MOD NO AND ID FOR 4331 @V60A6B6 01502200 MO4341 DC X'4341',AL2(MOD4341) MOD NO. AND ID FOR 4341 @V60A6B6 01502300 NOTSUPPD DC H'-1',AL2(NOMODEL) NO MACHINE SUPPORT 01503000 * NOTE: LASTCYL AND PAGE90PC MUST REMAIN CONTIGUOUS @V5088AA 01504000 * AS THEY ARE REFERENCED AS A UNIT @V5088AA 01505000 AREA90PC DS 0X @V5088AA 01506000 LASTCYL DC H'0000' ENDING 'CC' OF RECORDING AREA @V5088AA 01507000 PAGE90PC DC X'00' 01508000 * NOTE: MAXCYL AND MAXPAGE MUST REMAIN CONTIGUOUS AS @V5088AA 01509000 * THEY ARE REFERENCED AS A UNIT @V5088AA 01510000 MAXCYL DC H'0000' ENDING 'CC' OF RECORDING AREA @V5088AA 01511000 MAXPAGE DC X'00' 01512000 PARMSAVE DC X'00' 01513000 TYPEM DC X'00' INDICATE DEPENDENT CHANNEL MODULES 01514000 MVZINST DC X'00' ONLY USE FOR THE MVZ INSTR. 01515000 CONF DC XL17'0' SAVE CHANNEL IDENTIFICATION 01516000 SPACE 2 01517000 ********************************************************************** 01518000 CHAN DC X'F2F5FFF8FFFFFFFFFFFFFAFFFFFFFFFF' 01519000 DC X'F1FFF6FFFFFFFFFFFFFFFFFFFFFFFFFF' 01520000 DC X'F3FFFFF7FFFFFFFFFFFFFFFFFFFFFFFF' 01521000 DC X'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF' 01522000 ********************************************************************** 01523000 SPACE 2 01524000 ********************************************************************** 01525000 MOD1658C DC A(DMKSIX60) GET THE ADDRESS OF THE 2860 CHANNEL 01526000 * MODULE 01527000 DC A(DMKSEV70) GET THE ADDRESS OF THE 2870 CHANNEL 01528000 * MODULE 01529000 DC A(DMKEIG80) GET THE ADDRESS OF THE 2880 CHANNEL 01530000 * MODULE 01531000 ********************************************************************** 01532000 * DMKIOHFR 01532200 IOEFRSAV DS XL1 SAVE AREA FOR DMKIOEFR VALUE @V5088AA 01536000 INFOFLAG DC X'00' AREA FILLED WITH FRAME RECORDS @V5088AA 01537000 FULLNOW EQU X'80' INDICATES AREA FILLED WITH FRAMES@V5088AA 01538000 INITYES EQU X'02' INITIALIZE FRAME RECORDS @V5088AA 01540000 CLR EQU X'01' 'CLEAR' SPECIFIED @V5088AA 01541000 CLEARF EQU X'02' 'CLEARF' SPECIFIED @V5088AA 01542000 NOFRAMES EQU X'00' NO FRAME RECS. ON RECORDING CYLS @V5088AA 01543000 YESFRAME EQU X'20' FRAME RECORDS ARE ON REC. CYLS @V5088AA 01544000 ERMPARMS DC X'B0' PARMS= OPERATOR+ALARM+RETURN @V305435 01545000 MAX2314 EQU X'21' 01546000 MAX2305 EQU X'19' 01547000 MAX3330 EQU X'3A' 01548000 MAX3350 EQU X'79' 3350 MAX PAGES (PLUS 1) = 121 @V304498 01549000 MAX3375 EQU X'61' 3375 max pages (plus 1) = 97 HRC106DK 01549100 MAX3380 EQU X'97' 3380 max pages (plus 1) = 151 HRC106DK 01549200 NIN2314 EQU X'1C' 01550000 NIN2305 EQU X'15' 01551000 NIN3330 EQU X'33' 01552000 SPACE 1 01577000 LTORG 01578000 EJECT 01579000 COPY MCHAREA 01580000 COPY EQU 01581000 COPY RBLOKS 01582000 PSA 01583000 COPY SAVE 01584000 COPY IOBLOKS @V306638 01585000 COPY VMBLOK 01586000 COPY DEVTYPES 01587000 COPY IOER 01588000 COPY RECPAG 01589000 END 01622000