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