IOH TITLE 'DMKIOH (CP) VM/370 - RELEASE 6' 00001000
ISEQ 73,80 00002000
*. 00003000
* MODULE NAME - DMKIOH 00004000
* 00005000
* 00006000
* FUNCTION - 00007000
* PAGABLE FRAME RECORD INITIALIZATION MODULE. CALLED AT 00008000
* CP INITIALIZATION TIME IF THE ERROR RECORDING CYLINDERS 00009000
* HAVE BEEN FORMATTED. IF RUNNING ON A 303X PROCESSOR, 00010000
* DMKIOH WILL READ FRAMES FROM ALL SRF DEVICES SPECIFIED 00011000
* ON THE 'SRF=' KEYWORD OF THE RIOGEN MACRO; THE 00012000
* FRAMES WILL BE FORMATTED AS RECORDS AND WRITTEN 00013000
* TO THE BEGINNING OF THE VM/370 ERROR RECORDING 00014000
* CYLINDERS. 00015000
* DMKIOH IS ALSO CALLED DURING CPEREP 'CLEARF' PROCESSING 00016000
* TO REINITIALIZE FRAME RECORDS WHEN RUNNING ON A 303X 00017000
* PROCESSOR. 00018000
* 00019000
* ATTRIBUTES - 00020000
* PAGABLE,SERIAL-REUSABLE,CALLED BY DMKIOGF1 VIA SVC. 00021000
* 00022000
* 00023000
* ENTRY POINTS - 00024000
* 00025000
* DMKIOHFR - TO READ FRAMES FROM THE SRF DEVICE OF 00026000
* A 3033/3032/3031 PROCESSOR AND FORMAT 00027000
* THEM AS RECORDS ON THE RECORDING CYLS 00028000
* 00029000
* ENTRY CONDITIONS - 00030000
* DMKIOHFR - NONE 00031000
* 00032000
* EXIT CONDITIONS - RETURN TO CALLER. 00033000
* 00034000
* CALLS TO OTHER ROUTINES - 00035000
* DMKPGTVG - TO GET VIRTUAL PAGES. 00036000
* DMKPGTVR - TO RELEASE VIRTUAL PAGES. 00037000
* DMKQCNWT - TO WRITE MSGS. TO THE OPERATOR. 00038000
* DMKRPAGT - TO READ A PAGE INTO CORE. 00039000
* DMKRPAPT - TO WRITE A PAGE TO RECORDING CYLINDER. 00040000
* DMKERMSG - TO WRITE OUT ERROR MESSAGES 00041000
* DMKPTRLK - TO LOCK A PAGE. 00042000
* DMKPTRUL - TO UNLOCK A PAGE. 00043000
* 00044000
* EXTERNAL REFERENCES - 00045000
* DMKIOERP - 'RECORDING IN PROCESS' SWITCH. 00046000
* DMKIOEEP - RECORDING AREA IN-CORE POINTER (CCP). 00047000
* DMKIOEMX - MAXIMUM NO. OF PAGES PER CYL . 00048000
* DMKIOENI - 90 FULL PAGE CNT ON IPL DEV TYP. 00049000
* DMKIOEES - 'RECORDING AREA FULL' FLAG. 00050000
* DMKIOEHS - DASD START OF ERROR RECORDS ON 00051000
* RECORDING CYLINDERS (CCPD FORMAT). 00052000
* DMKIOEFR - 'FRAME RECORDS ON CYLINDERS' FLAG. 00053000
* DMKIOGCE - 'CECYL' VALUE TO PASS BACK TO DMKIOGF1. 00054000
* 00055000
* REGISTER USAGE - 00056000
* GPR0 SCRATCH 00057000
* GPR1 VIRTUAL ADDRESS OF BUFFER PAGE 00058000
* GPR2 REAL ADDRESS OF BUFFER PAGE 00059000
* GPR3-7 SCRATCH 00060000
* GPR8 RDEVBLOK POINTER 00061000
* GPR9 SCRATCH 00062000
* GPR10 IOBLOK POINTER 00063000
* GPR11 VMBLOK POINTER 00064000
* GPR12 BASE 00065000
* GPR13 SAVE AREA POINTER 00066000
* GPR14-15 LINK REGS 00067000
* 00068000
* NOTES - 00069000
* IF DMKIOH FINDS THAT WE ARE NOT PROCESSING ON A 303X 00070000
* PROCESSOR, RETURN IS MADE IMMEDIATELY TO CALLER. 00071000
* 00072000
* THIS MODULE WAS SPLIT FROM DMKIOG IN RELEASE 6. 00073000
* 00074000
* OPERATION - DMKIOHFR 00075000
* 00076000
* 1. CHECK FOR ANY SRF DEVICES BY EXAMINING THE LIST 00077000
* LOCATED BY DMKRIOSF. IF NONE, WRITE MESSAGE TO 00078000
* OPERATOR AND RETURN TO DMKIOGF1 AT STEP 18. 00079000
* CALL DMKFREE TO OBTAIN SPACE FOR AN IOBLOK 00080000
* PLUS CCW'S, AND INITIALIZE THE IOBLOK. 00081000
* 2. PREPARE TO READ FRAMES: 00082000
* - CALL DMKFREE TO OBTAIN SPACE FOR A 2K 00083000
* BUFFER 00084000
* - BUILD A STANDARD RECORD HEADER TO BE USED 00085000
* IN CONSTRUCTING ALL FRAME RECORDS 00086000
* 3. CALL DMKPGTVG TO OBTAIN A VIRTUAL PAGE TO USE 00087000
* IN CONSTRUCTING BLOCKED FRAME RECORDS. 00088000
* 4. CALL DMKRPAGT AND DMKPTRLK TO BRING THE FIRST 00089000
* RECORDING PAGE INTO STORAGE AND LOCK IT THERE. 00090000
* IF AN ERROR OCCURS ON THIS READ OPERATION, 00091000
* DISABLE RECORDING AND RETURN TO DMKIOGF1. 00092000
* 5. ISSUE 'ENABLE' COMMAND TO THE FIRST SRF. IF THE 00093000
* SRF IS INACCESSIBLE (OR IF IT WAS NOT SYS GEN'ED) 00094000
* WRITE ERROR MESSAGE TO THE OPERATOR AND GO TO 00095000
* STEP 11 TO CHECK FOR ANOTHER SRF. 00096000
* 6. IF THE SRF IS AVAILABLE, ISSUE A 'VERBAGE' COMMAND TO 00097000
* THE SRF TO INDICATE THAT CPU FRAMES ARE TO BE READ, 00098000
* FOLLOWED BY A 'RDVERB' COMMAND TO OBTAIN THE 00099000
* FIRST CPU FRAME. 00100000
* 7. MOVE THE FRAME TO THE RECORDING PAGE AS 00101000
* FOLLOWS: 00102000
* - MOVE THE LENGTH OF THE FRAME RECORD 00103000
* (LENGTH OF HEADER + LENGTH OF FRAME) INTO 00104000
* THE 1ST FULLWORD OF THE RECORD 00105000
* - MOVE THE 24-BYTE STANDARD RECORD HEADER 00106000
* - MOVE THE FRAME 00107000
* - UPDATE THE INDEX IN THE PAGE HEADER TO 00108000
* THE NEXT AVAILABLE FREE SPACE IN THE PAGE 00109000
* WHEN THE PAGE IS FULL, WRITE IT BACK TO THE 00110000
* RECORDING CYLINDERS, AND READ IN THE NEXT 00111000
* RECORDING PAGE TO CONTINUE THE FRAME RECORD 00112000
* CONSTRUCTION. 00113000
* 8. CONTINUE READING FROM THE SRF UNTIL ONE OF 00114000
* THE FOLLOWING OCCURS: 00115000
* (A) CHANNEL END, DEVICE END, UNIT EXCEPTION 00116000
* STATUS RECEIVED - END OF CPU FRAMES; GO 00117000
* TO STEP 9 TO READ DIRECTOR FRAMES NOW. 00118000
* (B) MORE THAN 50 CPU FRAMES READ - WRITE 00119000
* ERROR MESSAGE TO OPERATOR; CONTINUE TO 00120000
* FORMAT AS IF ONLY 50 FRAMES READ. 00121000
* (C) ERROR STATUS (NON-CE,DE) RECEIVED FROM 00122000
* RDVERB - IF ANY FRAME RECORDS ARE ON 00123000
* THE RECORDING CYLS, TURN ON FRMLAST IN 00124000
* LAST FRAME RECORD WRITTEN, SET DMKIOEFR 00125000
* TO INDICATE FRAMES PRESENT, AND GO TO 00126000
* STEP 11 TO CLEAN UP. IF NO FRAME RECORDS HAVE 00127000
* BEEN WRITTEN TO THE RECORDING CYLINDERS, 00128000
* GO TO STEP 11. 00129000
* 9. ISSUE A 'VERBAGE' COMMAND TO THE SRF TO 00130000
* RETRIEVE DIRECTOR FRAMES. PROCEED AS IN STEPS 00131000
* 6-8, EXCEPT WHEN CE,DE,UE STATUS IS DETECTED, 00132000
* GO TO STEP 10. 00133000
* 10. TURN ON 'LAST FRAME' FLAG IN THE LAST FRAME 00134000
* RECORD WRITTEN. SET DMKIOEFR TO INDICATE FRAME 00135000
* RECORDS EXIST ON THE RECORDING CYLINDERS. 00136000
* 11. IF THIS IS THE LAST SRF DEVICE IN THE 00137000
* LIST, INDICATE THIS RECORDING PAGE 00138000
* IS FULL (TO PREVENT ERROR RECORDS FROM BEING 00139000
* PLACED ON THE SAME PAGE WITH FRAME RECORDS), 00140000
* AND WRITE THE PAGE BACK TO THE RECORDING 00141000
* CYLINDERS. 00142000
* 12. ISSUE A 'DISABLE' COMMAND TO DETACH FROM THE SRF. 00143000
* CHECK FOR ANOTHER SRF DEVICE BY EXAMINING THE LIST 00144000
* LOCATED BY DMKRIOSF. IF NO MORE SRF'S, GO TO 00145000
* STEP 13. IF ANOTHER SRF IS FOUND, RETURN TO 00146000
* STEP 5 TO ATTEMPT TO READ FRAMES FROM THIS SRF. 00147000
* 13. CALCULATE DMKIOEHS VALUE FOR USE BY CPEREP 00148000
* PROCESSING. THIS FIELD IS THE DASD START OF 00149000
* THE ERROR RECORDS (I.E., FIRST RECORDING PAGE 00150000
* AFTER ALL FRAME RECORDS) IN CCPD FORMAT. 00151000
* 14. CALL DMKPGTVR TO FREE THE VIRTUAL PAGE 00152000
* GOTTEN IN STEP 3. 00153000
* 15. CALL DMKFRET TO RELEASE THE IOBLOK, CCW'S, 00154000
* AND 2K BUFFER SPACE. 00155000
* 16. RETURN TO DMKIOGF1 AT STEP 18. 00156000
* 00157000
* 00158000
* MESSAGES - 00159000
* 00160000
* DMKIOH551E ERROR RECORDING AREA FULL; RUN CPEREP 00161000
* 00162000
* DMKIOH558I FATAL I/O ERROR; ERROR RECORDING DISABLED 00163000
* 00164000
* DMKIOH550I ERROR RECORDING AREA 90 PERCENT FULL; RUN CPEREP 00165000
* 00166000
* DMKIOH559W SRF 'ADDR' NOT ACCESSIBLE; FRAMES NOT ON ERROR 00167000
* CYLINDERS 00168000
* 00169000
* DMKIOH560W ERRORS ON SRF 'ADDR'; FRAMES NOT ON ERROR 00170000
* CYLINDERS 00171000
* 00172000
* DMKIOH561W MORE THAN 50 MCH OR CCH FRAMES WERE READ 00173000
* FROM SRF 'ADDR' 00174000
* 00175000
*. 00176000
COPY OPTIONS @V407510 00177000
EJECT 00178000
DMKIOH CSECT 00179000
MODULEID DC CL8'DMKIOH' 00180000
EXTRN DMKPGTVG 00181000
EXTRN DMKPGTVR,DMKRPAPT,DMKRPAGT 00182000
EXTRN DMKIOERP 00183000
EXTRN DMKERMSG @V305435 00184000
EXTRN DMKIOEFR @V5088AA 00185000
EXTRN DMKIOECT @V5088AA 00186000
EXTRN DMKIOEES @V5088AA 00187000
EXTRN DMKIOEHS @V5088AA 00188000
EXTRN DMKIOEEP @V5088AA 00189000
EXTRN DMKRIOSF @V5088AA 00190000
EXTRN DMKRIODV @V5088AA 00191000
EXTRN DMKPTRLK @V5088AA 00192000
EXTRN DMKIOEMX 00193000
EXTRN DMKIOENI 00194000
EXTRN DMKPTRAN @V407510 00195000
EXTRN DMKIOSQR @V5088AA 00196000
EXTRN DMKPTRUL @V5088AA 00197000
EXTRN DMKCVTAB @V5088AA 00198000
EXTRN DMKCVTBH @V60B7AA 00199000
EXTRN DMKSCNRU @VA13122 00199500
EXTRN DMKIOECE @VA10241 00200100
EXTRN DMKIOEIF @VA10241 00200200
USING VMBLOK,R11 00202000
USING PSA,R0 00203000
USING SAVEAREA,R13 00204000
USING *,R12 00205000
SPACE 3 00206000
DMKIOHFR RELOC @V5088AA 00207000
L R10,AMCHAREA ADDRESS OF MCH AREA @V5088AA 00208000
USING MCHAREA,R10 ADDRESSABILITY FOR MCH AREA @V5088AA 00209000
CLI MCHMODEL,MOD3033 ARE WE PROCESSING ON A 3033/ @V5088AA 00210000
* 3032/3031 PROCESSOR? (WE COULD 00211000
* HAVE GOTTEN HERE IF A CLEARF WAS 00212000
* SPECIFIED ON A PROCESSOR OTHER 00213000
* THAN A 303X.) 00214000
BE MOD303X CONTINUE IF ON A 303X PROCESSOR @V5088AA 00215000
EXIT RETURN TO CALLER @V5088AA 00216000
DROP R10 @V5088AA 00217000
MOD303X MVI INFOFLAG,X'00' INITIALIZE INDICATORS TO ZERO @V60B7AA 00218000
XC IOEREALP(4),IOEREALP CLEAR OUT ADDRESS FIELD @V60B7AA 00219000
LA R0,BLOKSIZE SIZE OF IOBLOK AND CCW'S @V5088AA 00220000
CALL DMKFREE GET SPACE FOR IOBLOK AND CCW'S @V5088AA 00221000
LR R10,R1 SAVE ADDRESS IN IOBLOK BASE @V5088AA 00222000
MVC SRFADDR(DEVADDSZ),BLANKADD BLANK OUT SRF ADDR. @V60B7AA 00223000
XC SRFCOUNT(4),SRFCOUNT ZERO COUNT OF SRF DEVICES @V60B7AA 00224000
L R1,=V(DMKRIOSF) ADDRESS OF SRF RDEVBLOK LIST @V60B7AA 00225000
LTR R1,R1 IS THERE AN SRF RDEVBLOK? @VMD0148 00226000
BZ NOSRF NO, ERROR -- SRF NOT GEN'ED @V5088AA 00227000
L R8,0(R1) ACCESS COUNT OF SRF DEVICES @V60B7AA 00228000
LTR R8,R8 WERE ANY SRFS SPECIFIED IN RIOGEN@V60B7AA 00229000
BZ NOSRF NO SRF DEVICES SPECIFIED @V60B7AA 00230000
LA R8,1(R8) INCREMENT SRFCOUNT BY ONE SO THAT@V60B7AA 00231000
* FIRST PASS THRU 'NEXTSRF' LOOP WILL 00232000
* BE ACCURATE.(SRFCOUNT IS DECREMENTED 00233000
* AT BEGINNING OF THE LOOP.) 00234000
ST R8,SRFCOUNT SAVE COUNT OF SRF DEVICES @V60B7AA 00235000
ST R1,CURRSRF SAVE ADDRESS OF CURRENT ENTRY IN @V60B7AA 00236000
* LIST 00237000
USING IOBLOK,R10 @V5088AA 00238000
XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR WHOLE IOBLOK @V5088AA 00239000
MVC ENABLE(40),ENABCCW MOVE 'ENABLE', 'RDCPUID', @V60B7AA 00240000
* 'VERBAGE', 'RDVERB', AND 'DISABLE' 00241000
* COMMANDS INTO CHANNEL PROGRAM. 00242000
LA R2,CPUIDENT ADDRESS OF BUFFER WHERE RDCPUID @V60B7AA 00243000
* IS TO PUT CPU ID 00244000
STCM R2,B'0111',CPUIDBUF PUT ADDRESS IN CCW @V60B7AA 00245000
LA R2,ENABLE ADDRESS OF CHANNEL PROGRAM @V5088AA 00246000
ST R2,IOBCAW SAVE IN IOBLOK @V5088AA 00247000
ST R10,IOBLINK IN CASE NEW IOB GETS CHAINED 1ST @V5088AA 00248000
ST R11,IOBUSER CURRENT VMBLOK ADDRESS @VMD0148 00249000
************************************************************** 00250000
* BUILD A STANDARD RECORD HEADER TO BE USED FOR ALL * 00251000
* FRAME RECORDS. * 00252000
************************************************************** 00253000
LA R3,STDHDR ADDRESS OF STANDARD RECORD HDR @V5088AA 00254000
USING FRAMEHDR,R3 @V5088AA 00255000
MVI FRMTYPE,CPUTYPE RECORD TYPE IS CPU RECORD @V5088AA 00256000
MVI FRMCNT,X'00' INITIALIZE RECORD SEQUENCE NUMBER@VA07860 00257000
* 00258000
* GET DATE AND TIME VALUE. ALL FRAME RECORDS MUST HAVE 00259000
* THE SAME DATE AND TIME IN THEIR HEADERS. 00260000
STCK OSDATE GET DATE AND TIME VALUES @V5088AA 00261000
BC 12,CLOCKOK CLOCK FUNCTIONING OK @V5088AA 00262000
GOTO DMKCVTAB CLOCK DAMAGED--ABEND CVT001 @V5088AA 00263000
CLOCKOK LM R4,R5,OSDATE GET CLOCK VALUE @V5088AA 00264000
SRDL R4,12 SHIFT DOWN FOR ADJUST @V5088AA 00265000
L R14,=V(DMKSYSTZ) @ OF GMT DIFFERENCE @V5088AA 00266000
L R15,0(,R14) GET GMT DIFFERENCE @V5088AA 00267000
LCR R15,R15 MAKE VALUE POSITIVE @V5088AA 00268000
SR R14,R14 CLEAR WORK REGISTER @V5088AA 00269000
M R14,=F'1000000' CONVERT GMT DIFF. TO MICROSECS. @V5088AA 00270000
SLR R5,R15 ADJUST TIME VALUE @V5088AA 00271000
BC 11,*+8 BRANCH NOT MINUS @V5088AA 00272000
SL R4,F1 @V5088AA 00273000
SLR R4,R14 GET TIME VALUE @V5088AA 00274000
SLDL R4,12 SHIFT IT BACK @V5088AA 00275000
STM R4,R5,FRMDATE SAVE CLOCK VALUE IN HEADER @V5088AA 00276000
MVC FRMCPID(8),CPUID CPU ID AND MCEL LENGTH -- CPU @V5088AA 00277000
* SERIAL NUMBER AND MODEL NUMBER WILL 00278000
* BE OVERLAYED BY DATA FROM RDCPUID 00279000
* COMMAND. 00280000
DROP R3 @V5088AA 00281000
SPACE 00282000
************************************************************** 00283000
* OBTAIN BUFFERS TO BE USED TO READ FROM * 00284000
* AND TO WRITE TO THE ERROR RECORDING CYLINDERS * 00285000
************************************************************** 00286000
LA R0,FRAMSIZE SIZE OF 2K BUFFER IN D'WORDS @V60B7AA 00287000
CALL DMKFREE GET A 2K BUFFER TO READ FRAMES @V60B7AA 00288000
STCM R1,B'0111',RDVBUFF SAVE BUFFER @ IN RDVERB CCW @V60B7AA 00289000
L R2,=V(DMKSYSER) ADDRESS OF START OF REC. AREA @V5088AA 00290000
LH R2,0(R2) GET 'CC' PART OF AREA ADDRESS @V5088AA 00291000
STH R2,WORKCYL SAVE IN CURRENT 'CC' VALUE @V5088AA 00292000
MVI WORKPAGE,X'01' WANT 1ST PAGE OF RECORDING AREA @V5088AA 00293000
L R3,=V(DMKIOETY) POINTER TO DEVICE TYPE OF @V60B7AA 00294000
* SYSRES DEVICE 00295000
IC R3,0(R3) RETRIEVE THE DEVICE TYPE @V60B7AA 00296000
STC R3,WORKTYP SAVE TYPE IN WORK 'CCPD' VALUE @V60B7AA 00297000
CALL DMKPGTVG GET A VIRTUAL PAGE ADDRESS @V5088AA 00298000
ST R1,IOEVMPAG SAVE THE VIRTUAL PAGE ADDRESS @V5088AA 00299000
L R0,WORKCYL 'CCPD' OF RECORD @V5088AA 00300000
CALL DMKRPAGT,PARM=(SYSTEM+BRING),AFFINITY BRING IN @V5088AA 00301000
* FIRST PAGE 00302000
BC 8,REALRDOK NO ERROR-- CONTINUE @V5088AA 00303000
BAL R9,DISABREC ERROR--GO DISABLE RECORDING @V5088AA 00304000
B NEXTSRF CLEAN UP AND RETURN @V5088AA 00305000
REALRDOK CALL DMKPTRLK LOCK PAGE IN @V5088AA 00306000
ST R2,IOEREALP SAVE REAL ADDRESS OF PAGE @V5088AA 00307000
USING RECPAG,R2 BASE FOR RECORDING PAGE @V5088AA 00308000
MVI RECFLAG1,RECPAGFA THIS PAGE CONTAINS FRAME RECS.@V5088AA 00309000
DROP R2 00310000
XC FRAMECTR(2),FRAMECTR INITIALIZE COUNTER TO 0 @V5088AA 00311000
SPACE 00312000
* CALCULATE VALUES TO BE USED TO DETERMINE IF THE 00313000
* ERROR RECORDING AREA IS FULL OR 90% FULL. 00314000
LH R2,WORKCYL STARTING CYL. OF ERROR REC. AREA @V60B7AA 00315000
L R3,=V(DMKSYSCT) ADDRESS OF COUNT OF ERROR CYLS. @V60B7AA 00316000
LH R3,0(R3) GET COUNT OF ERROR CYLINDERS @V60B7AA 00317000
AR R3,R2 ADD COUNT TO STARTING CYLINDER @V60B7AA 00318000
BCTR R3,0 SUBTRACT ONE TO GET ENDING CYL. @V60B7AA 00319000
STH R3,LASTCYL SAVE ENDING CYLINDER NUMBER @V60B7AA 00320000
STH R3,MAXCYL SAVE ENDING CYLINDER NUMBER @V60B7AA 00321000
L R3,=V(DMKIOEMX) ADDR. OF NUMBER OF PAGES PER CYL@V60B7AA 00322000
IC R3,0(R3) GET NUMBER OF PAGES PER CYLINDER @V60B7AA 00323000
STC R3,MAXPAGE SAVE MAX. NUMBER OF PAGES PER CYL@V60B7AA 00324000
L R3,=V(DMKIOENI) ADDR. OF 90% FULL LIMIT @V60B7AA 00325000
IC R3,0(R3) GET VALUE FOR 90% OF 1 CYL FULL @V60B7AA 00326000
STC R3,PAGE90PC SAVE VALUE FOR LATER USE @V60B7AA 00327000
B NEXTSRF EQUIVALENT OF 'DO WHILE' LOOP TO @V60B7AA 00328000
* HANDLE ALL SRF DEVICES 00329000
SPACE 00330000
************************************************************** 00331000
* LOOP THROUGH SRFS READING FRAMES * 00332000
************************************************************** 00333000
SRFLOOP MVI FIRSTRET,X'00' INITIALIZE RETURN COUNTER TO 0 @V60B7AA 00334000
ST R11,IOSSAVE SAVE VMBLOK ADDRESS @V5088AA 00335000
STM R13,R9,IOSSAVE+4 SAVE REGS ACROSS CALL TO IOSQR @V5088AA 00336000
CALL DMKIOSQR GO ISSUE 'ENABLE' TO SRF @V5088AA 00337000
GOTO DMKDSPCH GO 'WAIT' FOR ENABLE TO COMPLETE @V5088AA 00338000
ENABRTRN EQU * @V5088AA 00339000
USING *,R12 @V5088AA 00340000
SL R12,=A(*-DMKIOH) RE-ESTABLISH ADDRESSABILITY-- @V5088AA 00341000
* R12 CONTAINS ADDRESS OF IOBIRA 00342000
USING DMKIOH,R12 @V5088AA 00343000
L R11,IOSSAVE RESTORE VMBLOK ADDRESS @V5088AA 00344000
LM R13,R9,IOSSAVE+4 RESTORE REGISTER VALUES @V5088AA 00345000
TM IOBSTAT,IOBFATAL+IOBCC2 FATAL I/O ERROR, OR CC2?@V5088AA 00346000
BNZ NOSRF2 SRF NOT AVAILABLE IF SO @V60B7AA 00347000
TM IOBCSW+4,X'D3' IS CE (OR CE+CUE) ON BY ITSELF? @V5088AA 00348000
BNZ NOSRF2 NO, MUST BE SOME EXCEPTION @V60B7AA 00349000
CLI IOBCSW+5,X'00' IS THERE ANY BAD CHANNEL STATUS? @V5088AA 00350000
BNE NOSRF2 ERROR IF SO @V60B7AA 00351000
TM IOBCSW+4,CE+DE CHANNEL END & DEVICE END? @V5088AA 00352000
BO ENABOK YES, GOOD @V5088AA 00353000
CLI FIRSTRET,X'00' FIRST RETURN FROM DISPATCHER? @V5088AA 00354000
BNE ENRTRN2 NO, GO SEE IF DEVICE END NOW @V5088AA 00355000
MVI FIRSTRET,X'01' INDICATE THIS IS FIRST RETURN @V5088AA 00356000
LR R1,R10 ADDRESS OF COPIED IOB TO FRET @V5088AA 00357000
LA R0,IOBSIZE LENGTH OF COPIED IOB TO FRET @V5088AA 00358000
CALL DMKFRET FREE UP THE COPIED IOBLOK @V5088AA 00359000
GOTO DMKDSPCH GO WAIT FOR UNIT STATUS @V5088AA 00360000
ENRTRN2 TM IOBCSW+4,DE DEVICE END RECEIVED? @V5088AA 00361000
BZ NOSRF2 ONLY GOOD IF HAVE RECEIVED BOTH @V60B7AA 00362000
* CE AND DE 00363000
************************************************************** 00364000
* SRF IS AVAILABLE. SET UP TO READ FRAMES. * 00365000
************************************************************** 00366000
ENABOK EQU * @V5088AA 00367000
SR R4,R4 CLEAR OUT INCREMENT REGISTER @V60B7AA 00368000
SR R2,R2 CLEAR OUT REG TO BUILD CPU SERIAL@V60B7AA 00369000
BUILDSER SR R3,R3 CLEAR OUT SHIFT REGISTER @V60B7AA 00370000
IC R3,CPUIDENT(R4) INSERT NEXT CHARACTER OF CPU @V60B7AA 00371000
* SERIAL RETURNED BY RDCPUID COMMAND 00372000
SLL R3,28 REMOVE THE LEADING 4 BITS OF ZERO@V60B7AA 00373000
SLDL R2,4 SAVE THE SIGNIFICANT 4 BITS @V60B7AA 00374000
LA R4,1(R4) INCREMENT TO POINT TO NEXT BYTE @V60B7AA 00375000
C R4,F6 CPU SERIAL IS ONLY 3 BYTES LONG @V60B7AA 00376000
BNE BUILDSER CONTINUE UNTIL 3 BYTES BUILT @V60B7AA 00377000
LA R3,STDHDR ADDRESS OF STANDARD RECORD HEADER@V60B7AA 00378000
USING FRAMEHDR,R3 00379000
STCM R2,B'0111',FRMCSER STORE CPUID OF CURRENT FRAME @V60B7AA 00380000
* SET INTO RECORD HEADER 00381000
DROP R3 00382000
SLR R2,R2 CLEAR OUT REG TO BUILD CPU MODEL @V60B7AA 00383000
BUILDMOD SLR R3,R3 CLEAR OUT SHIFT REGISTER @V60B7AA 00384000
IC R3,CPUIDENT(R4) INSERT NEXT CHARACTER OF CPU @V60B7AA 00385000
* MODEL NUMBER RETURNED BY RDCPUID 00386000
SLL R3,28 REMOVE LEADING 4 BITS OF ZEROES @V60B7AA 00387000
SLDL R2,4 SAVE THE SIGNIFICANT 4 BITS @V60B7AA 00388000
LA R4,1(R4) INCREMENT TO POINT TO NEXT BYTE @V60B7AA 00389000
C R4,F10 CPU MODEL NO. IS 4 BYTES LONG @V60B7AA 00390000
BNE BUILDMOD CONTINUE UNTIL 2 BYTES BUILT @V60B7AA 00391000
LA R3,STDHDR ADDRESS OF STANDARD RECORD HEADER@V60B7AA 00392000
USING FRAMEHDR,R3 @V60B7AA 00393000
STCM R2,B'0011',FRMMDL STORE CPU MODEL OF CURRENT @V60B7AA 00394000
* FRAME SET INTO RECORD HEADER 00395000
DROP R3 @V60B7AA 00396000
LA R2,VERBAGE ADDRESS OF VERBAGE CCW @V5088AA 00397000
ST R2,IOBCAW SAVE IN IOBLOK @V5088AA 00398000
LA R2,VRBAGRET RETURN FROM 1ST VERBAGE/RDVERB @V5088AA 00399000
ST R2,IOBIRA SAVE IN IOBLOK @V5088AA 00400000
LA R3,CPUFRAME ADDR. OF 1-BYTE BUFFER @V5088AA 00401000
STCM R3,B'0111',VERBBUFF SAVE IN VERBAGE CCW @V5088AA 00402000
************************************************************** 00403000
* END OF INITIALIZATION. BEGIN TO READ FROM THE SRF. * 00404000
************************************************************** 00405000
FRMLOOP EQU * @V5088AA 00406000
XC IOBCSW(8),IOBCSW CLEAR OUT THE CSW FOR RE-USE @V5088AA 00407000
MVI IOBFLAG,X'00' CLEAR OUT FIELD FOR REUSE @VMV0005 00407100
MVI IOBSTAT,X'00' CLEAR OUT FIELD FOR REUSE @VMV0005 00407200
MVI FIRSTRET,X'00' INITIALIZE RETURN COUNTER @V5088AA 00408000
ST R11,IOSSAVE SAVE VMBLOK ADDRESS @V5088AA 00409000
STM R13,R9,IOSSAVE+4 SAVE REGS ACROSS CALL TO IOSQR @V5088AA 00410000
CALL DMKIOSQR GO ISSUE VERBAGE/RDVERB TO SRF @V5088AA 00411000
GOTO DMKDSPCH GO 'WAIT' FOR I/O TO COMPLETE @V5088AA 00412000
READRTRN EQU * @V5088AA 00413000
USING *,R12 @V5088AA 00414000
SL R12,=A(*-DMKIOH) RE-ESTABLISH ADDRESSABILITY -- @V5088AA 00415000
* R12 CONTAINS IOBIRA ADDRESS 00416000
USING DMKIOH,R12 @V5088AA 00417000
L R11,IOSSAVE RESTORE VMBLOK ADDRESS @V5088AA 00418000
LM R13,R9,IOSSAVE+4 RESTORE REGISTER VALUES @V5088AA 00419000
TM IOBSTAT,IOBFATAL+IOBCC2 FATAL I/O ERROR, OR CC2?@V5088AA 00420000
BNZ SRFERR SRF ERRORS IF SO @V5088AA 00421000
TM IOBCSW+4,CE+DE+UE CHANNEL END, DEVICE END, AND @V5088AA 00422000
* UNIT EXCEPTION MEAN END OF FRAMES 00423000
BO DIRFRAMS GO READ DIRECTOR FRAMES NOW @V5088AA 00424000
CLI FIRSTRET,X'00' FIRST RETURN FROM DISPATCHER? @V5088AA 00425000
BNE RDRTRN2 IF NOT, SEE IF DE OR DE+UE ALONE @V5088AA 00426000
MVI FIRSTRET,X'01' SET COUNTER TO FIRST RETURN @V5088AA 00427000
TM IOBCSW+4,X'D3' CE (OR CE+CUE) ON BY ITSELF? @V5088AA 00428000
BNZ SRFERR ERROR IF SOME EXCEPTION ALSO @V5088AA 00429000
CLI IOBCSW+5,X'00' CHECK CHANNEL STATUS FOR ERRORS @V5088AA 00430000
BNE SRFERR ERROR IF ANY ON @V5088AA 00431000
TM IOBCSW+4,CE+DE DID READ COMPLETE OK? @V5088AA 00432000
BO COUNTCHK HAVE WE READ TOO MANY FRAMES? @V5088AA 00433000
LR R1,R10 ADDRESS OF COPIED IOB TO FRET @V5088AA 00434000
LA R0,IOBSIZE SIZE OF COPIED IOB TO FRET @V5088AA 00435000
CALL DMKFRET FRET THE COPIED IOBLOK @V5088AA 00436000
GOTO DMKDSPCH GO WAIT FOR UNIT STATUS @V5088AA 00437000
RDRTRN2 TM IOBCSW+4,X'D2' ANYTHING BESIDES DE,UE,OR CUE? @V5088AA 00438000
BNZ SRFERR ERROR IF SOME EXCEPTION @V5088AA 00439000
TM IOBCSW+4,DE+UE DEVICE END + UNIT EXCEPTION? @V5088AA 00440000
BO DIRFRAMS YES, END OF THIS TYPE OF FRAMES @V5088AA 00441000
TM IOBCSW+4,DE DEVICE END RECEIVED? @V5088AA 00442000
BO COUNTCHK YES, READ COMPLETED OK @V5088AA 00443000
SRFERR LA R2,560 ERROR IF NOT CE AND DE @V5088AA 00444000
ICM R2,B'0100',=C'W' WARNING MESSAGE @V5088AA 00445000
BAL R5,SRFERMSG GO WRITE ERROR MESSAGE @V60B7AA 00446000
LA R3,STDHDR STANDARD RECORD HEADER ADDRESS @V5088AA 00447000
USING FRAMEHDR,R3 @V5088AA 00448000
SR R4,R4 CLEAR OUT REGISTER FOR COMPARE @V5088AA 00449000
CLM R4,B'0001',FRMCNT IS SEQUENCE NUMBER OF CURRENT @V5088AA 00450000
* RECORD EQUAL TO ZERO? 00451000
BNE FRFINISH NO, SOME FRAMES ARE ON CYLS. GO @V5088AA 00452000
* TURN ON 'FRAMES' INDICATION AND 00453000
* 'LAST FRAME' FLG BEFORE RETURNING 00454000
CLI FRMTYPE,CPUTYPE HAVE WE JUST READ CPU FRAMES? @V5088AA 00455000
BE FINISH1 IF SO, AND SEQUENCE NUMBER IS 0, @V5088AA 00456000
* NO FRAMES ARE ON CYLS. CLEAN UP 00457000
* AND RETURN TO CALLER. 00458000
B FRFINISH IF SEQ. NO. IS 0 BUT WE JUST READ@V5088AA 00459000
* DIRECTOR FRAMES, THEN CPU FRAMES 00460000
* ARE ON CYLS. TURN ON 'LAST' FLAG. 00461000
COUNTCHK LH R4,FRAMECTR RETRIEVE COUNT OF FRAMES READ @V5088AA 00462000
LA R4,1(R4) INCREMENT BY ONE @V5088AA 00463000
STH R4,FRAMECTR SAVE COUNT OF FRAMES READ @V5088AA 00464000
CLI FRAMECTR+1,MAXFRAME HAVE WE READ MORE THAN 50? @V5088AA 00465000
BNH KEEPON IF NOT, CONTINUE @V5088AA 00466000
LA R2,561 ERROR IF MORE THAN 50 FRAMES READ@V5088AA 00467000
* JUST FORMAT THE 1ST 50 FRAMES ON 00468000
* THE RECORDING CYLINDERS. 00469000
ICM R2,B'0100',=C'W' WARNING MESSAGE @V5088AA 00470000
BAL R5,SRFERMSG GO WRITE MESSAGE @V60B7AA 00471000
B DIRFRAMS GO READ DIRECTOR FRAMES NOW @V5088AA 00472000
KEEPON EQU * @V5088AA 00473000
LA R3,STDHDR POINT TO STANDARD RECORD HEADER @V5088AA 00474000
IC R4,FRMCNT SEQUENCE NUMBER OF THE RECORD @V5088AA 00475000
LA R4,1(R4) INCREMENT FOR THIS RECORD @V5088AA 00476000
STC R4,FRMCNT STORE UPDATED SEQUENCE NO. IN HDR@V5088AA 00477000
BAL R4,MOVEREC GO MOVE FRAME INTO RECORDING PAGE@V5088AA 00478000
B FRMLOOP CONTINUE TO READ FRAMES @V5088AA 00479000
DIRFRAMS EQU * @V5088AA 00480000
LA R3,STDHDR ADDRESS OF STANDARD RECORD HDR @V5088AA 00481000
CLI FRMTYPE,CPUTYPE DID WE JUST READ CPU FRAMES? @V5088AA 00482000
BNE FRFINISH IF NOT, WE HAVE READ DIR. FRAMES @V5088AA 00483000
SPACE 00484000
* NOW WE WILL READ DIRECTOR FRAMES. 00485000
* FIRST, TURN ON THE 'LAST' FLAG IN 00486000
* THE LAST CPU RECORD WRITTEN. 00487000
L R2,IOEREALP ADDRESS OF RECORDING PAGE @V5088AA 00488000
USING RECPAG,R2 @V5088AA 00489000
LH R4,RECNXT INDEX INTO PAGE OF AVAIL. SPACE @V5088AA 00490000
LA R4,0(R2,R4) ADDRESS OF AVAILABLE SPACE @V5088AA 00491000
LA R9,FRHDRLEN+FRRECLEN LENGTH OF LAST FRAME AND @V5088AA 00492000
* ITS HEADER 00493000
SR R4,R9 BACK UP TO LAST RECORD'S HEADER @V5088AA 00494000
USING FRAMEHDR,R4 @V5088AA 00495000
TM VMMCR6,VMM360 IS THIS 360 MODE @VA09528 00495100
BO DROP2 YES-DONT TURN ON 370 TOD FLAG @VA09528 00495300
OI FRMSW0,TOD370 EC MODE TURN ON 370TOD FLAG @VA09528 00495500
DROP2 EQU * @VA09528 00495700
MVI FRMSW0,FRMLAST INDICATE THIS IS LAST CPU RECORD @V5088AA 00496000
DROP R2 @V5088AA 00497000
DROP R4 @V5088AA 00498000
MVI FRMTYPE,DIRTYPE RECORD TYPE IS NOW DIR. FRAMES @V5088AA 00499000
MVI FRMCNT,X'00' RESET SEQUENCE NUMBER @V5088AA 00500000
LA R5,DIRFRAME ADDRESS OF 1-BYTE BUFFER @V5088AA 00501000
STCM R5,B'0111',VERBBUFF PUT BUFFER @ IN VERBAGE CCW @V5088AA 00502000
LA R5,VRBAGRET RETURN FROM 1ST DIR. VB/RDVERB @V5088AA 00503000
ST R5,IOBIRA SAVE IN IRA ADDRESS @V5088AA 00504000
LA R5,VERBAGE ADDRESS OF VERBAGE/RDVERB CCW'S @V5088AA 00505000
ST R5,IOBCAW SAVE @ OF CHANNEL PGM IN IOB @V5088AA 00506000
XC FRAMECTR(2),FRAMECTR RE-INITIALIZE FRAME COUNTER@V5088AA 00507000
B FRMLOOP GO READ CPU FRAMES @V5088AA 00508000
DROP R3 @V5088AA 00509000
SPACE 2 00510000
VRBAGRET EQU * RETURN FROM VERBAGE/RDVERB @V5088AA 00511000
USING *,R12 @V5088AA 00512000
SL R12,=A(*-DMKIOH) RE-ESTABLISH ADDRESSABILITY -- @V5088AA 00513000
* R12 CONTAINS IOBIRA ADDRESS 00514000
USING DMKIOH,R12 @V5088AA 00515000
L R11,IOSSAVE RESTORE VMBLOK ADDRESS @V5088AA 00516000
LM R13,R9,IOSSAVE+4 RESTORE REGISTER VALUES @V5088AA 00517000
TM IOBCSW+4,X'D3' IS STATUS ANYTHING BUT CE,CUE,DE?@V5088AA 00518000
BNZ SRFERR VERBAGE ERROR IF SO @V5088AA 00519000
LA R2,READRTRN ADDRESS OF RDVERB RETURN POINT @V5088AA 00520000
ST R2,IOBIRA STORE IN THE IOBLOK FOR NEXT RDVB@V5088AA 00521000
LA R2,RDVERB RDVERB CCW ADDRESS @V5088AA 00522000
ST R2,IOBCAW CHANNEL PROGRAM ADDRESS--DON'T @V5088AA 00523000
* ISSUE VERBAGE MORE THAN ONCE FOR 00524000
* A PARTICULAR TYPE OF FRAME. 00525000
B FRMLOOP GO ISSUE RDVERB @V5088AA 00526000
SPACE 2 00527000
************************************************************** 00528000
* THIS ROUTINE WILL FORMAT THE FRAME JUST READ INTO A * 00529000
* STANDARD RECORD AND MOVE IT INTO THE CURRENT * 00530000
* RECORDING PAGE. * 00531000
************************************************************** 00532000
MOVEREC EQU * @V5088AA 00533000
SPACE 1 00534000
* CHECK FOR ENOUGH ROOM ON CURRENT RECORDING PAGE @V5088AA 00535000
SPACE 1 00536000
L R2,IOEREALP GET ADDRESS OF RECORDING PAGE @V5088AA 00537000
USING RECPAG,R2 @V5088AA 00538000
LH R5,RECNXT INDEX TO NEXT AVAILABLE SPACE @V5088AA 00539000
LA R6,4095-L'INITFMT MAX. SPACE ON RECORDING PAGE @V5088AA 00540000
LA R5,4(R5) UPDATE INDEX FOR LENGTH FIELD @V5088AA 00541000
SR R6,R5 GET SPACE REMAINING @V5088AA 00542000
LA R7,FRHDRLEN+FRRECLEN LENGTH REQUIRED @V5088AA 00543000
CR R7,R6 CAN FRAME RECORD FIT ON THIS PAGE@V5088AA 00544000
BNH FILLPAGE YES, GO MOVE IT @V5088AA 00545000
OI RECFLAG1,RECPAGFL TURN ON 'PAGE FULL' FLAG @V5088AA 00546000
MVC SAVECCP(3),WORKCYL SAVE CURRENT CCP @V5088AA 00547000
* WE WILL WRITE FULL PAGE OUT LATER 00548000
* AFTER WE HAVE MADE SURE THAT THE 00549000
* AREA IS NOT FULL. THIS IS SO THAT 00550000
* IF WE HAVE FILLED THE LAST PAGE, 00551000
* WE CAN TURN ON THE 'LAST' FRAME 00552000
* FLAG IN THE LAST RECORD ON THIS 00553000
* PAGE BEFORE WE WRITE IT OUT. 00554000
UPPAG ICM R14,B'0111',WORKCYL RETRIEVE CURRENT PAGE 'CCP' @V5088AA 00555000
LA R14,1(R14) INCREMENT TO NEXT PAGE @V5088AA 00556000
STC R14,WORKPAGE SAVE UPDATED PAGE NUMBER @V5088AA 00557000
CLM R14,B'0111',AREA90PC IS AREA 90% FULL? @V5088AA 00558000
BNE UPPAGMAX NO, CHECK FOR AREA FULL @V5088AA 00559000
LA R2,550 '90% FULL' MESSAGE @V5088AA 00560000
ICM R2,B'0100',=C'E' ERROR MESSAGE @V5088AA 00561000
BAL R5,FRERRMSG GO WRITE MESSAGE @V5088AA 00562000
B UPPAGOK GO READ IN THIS PAGE @V5088AA 00563000
UPPAGMAX CLC WORKPAGE(1),MAXPAGE LAST PAGE ON A CYLINDER? @V5088AA 00564000
BNE UPPAGOK NO, READ IN THIS PAGE @V5088AA 00565000
CLC WORKCYL(3),MAXCYL ON LAST RECORD OF LAST CYL? @V5088AA 00566000
BNE UPCYL NO, INCREMENT TO NEXT CYL NUMBER @V5088AA 00567000
SPACE 00568000
* ERROR RECORDING AREA IS FULL ALREADY 00569000
SPACE 00570000
CYLSFULL L R2,=V(DMKIOEES) ADDRESS OF 'AREA FULL' FLAG @V5088AA 00571000
OI 0(R2),X'FF' INDICATE AREA FULL @V5088AA 00572000
OI INFOFLAG,FULLNOW FRAMES HAVE FILLED WHOLE AREA @V5088AA 00573000
L R2,=V(DMKIOEIF) ADD OF INFOFLAG @VA10241 00573100
MVC 0(,R2),INFOFLAG MOVE IN INFOFLAG @VA10241 00573200
LA R2,551 'RECORDING AREA FULL' MESSAGE @V5088AA 00574000
ICM R2,B'0100',=C'E' ERROR MESSAGE @V5088AA 00575000
SLR R0,R0 INDICATE NO VARIABLE TEXT @V5088AA 00576000
SLR R1,R1 NO VARIABLE TEXT @V5088AA 00577000
BAL R3,CALLERM GO WRITE MESSAGE @V5088AA 00578000
MVC WORKCYL(3),SAVECCP RESTORE THE UN-UPDATED CCP @V5088AA 00579000
* SO THAT WE WILL WRITE OUT THE 00580000
* CORRECT PAGE. 00581000
XC SRFCOUNT(4),SRFCOUNT ZERO COUNT OF SRF'S @V60B7AA 00582000
* REMAINING TO BE PROCESSED. ERROR 00583000
* RECORDING AREA IS FULL. 00584000
B FRFINISH CLEAN UP AND RETURN @V5088AA 00585000
UPCYL SRL R14,8 ISOLATE 'CC' PART OF ADDRESS @V5088AA 00586000
LA R14,1(R14) INCREMENT TO NEXT CYLINDER @V5088AA 00587000
STH R14,WORKCYL SAVE UPDATED 'CC' POINTER @V5088AA 00588000
MVI WORKPAGE,X'01' WANT 1ST PAGE ON NEW CYLINDER @V5088AA 00589000
UPPAGOK EQU * @V5088AA 00590000
ICM R3,B'0111',WORKCYL SAVE UPDATED WORKCYL VALUE @V5088AA 00591000
MVC WORKCYL(3),SAVECCP RESTORE UN-UPDATED CCP VALUE @V5088AA 00592000
BAL R9,REALWRIT GO WRITE OUT THE FULL PAGE @V5088AA 00593000
TM INFOFLAG,WRITERR DID ERROR OCCUR ON WRITE? @V5088AA 00594000
BO DISABREC YES, GO DISABLE RECORDING @V5088AA 00595000
STCM R3,B'0111',WORKCYL RESTORE UPDATED CCP VALUE @V5088AA 00596000
L R0,WORKCYL RETRIEVE CURRENT PAGE 'CCPD' @V5088AA 00597000
L R1,IOEVMPAG GET VIRTUAL ADDRESS OF PAGE @V5088AA 00598000
CALL DMKRPAGT,PARM=(SYSTEM+BRING),AFFINITY @V5088AA 00599000
BC 8,PAGRDOK NO ERROR--CONTINUE @V5088AA 00600000
BAL R9,DISABREC ERROR--GO DISABLE RECORDING @V5088AA 00601000
MVC WORKCYL(3),SAVECCP RESTORE UN-UPDATED CCP VALUE @V5088AA 00602000
* SO WE WILL WRITE OUT CORRECT PAGE 00603000
L R0,WORKCYL GET CCPD OF PAGE JUST WRITTEN OUT@V5088AA 00604000
L R1,IOEVMPAG RESTORE VIRTUAL ADDRESS OF PAGE @V5088AA 00605000
CALL DMKRPAGT,PARM=(SYSTEM+BRING),AFFINITY GO REREAD @V5088AA 00606000
* THE LAST PAGE TO BE WRITTEN ON 00607000
* THE RECORDING CYLS. SINCE FRAME 00608000
* RECORDS EXIST ON THIS PAGE, WE 00609000
* MUST TURN ON THE 'LAST FRAME' 00610000
* FLAG IN THE LAST RECORD ON THIS 00611000
* PAGE. 00612000
BC 7,FINISH2 ERROR -- CLEAN UP AND RETURN @V5088AA 00613000
CALL DMKPTRLK LOCK THE PAGE IN STORAGE @V5088AA 00614000
ST R2,IOEREALP SAVE REAL ADDRESS OF PAGE @V5088AA 00615000
XC SRFCOUNT(4),SRFCOUNT ZERO COUNT OF SRF DEVICES @V60B7AA 00616000
* REMAINING TO BE PROCESSED. RECORDING 00617000
* HAS BEEN DISABLED. 00618000
B FRFINISH GO CLEAN UP AND RETURN @V5088AA 00619000
PAGRDOK CALL DMKPTRLK LOCK PAGE IN STORAGE @V5088AA 00620000
ST R2,IOEREALP SAVE REAL ADDRESS OF PAGE @V5088AA 00621000
MVI RECFLAG1,RECPAGFA FRAMES ARE IN THIS PAGE @V5088AA 00622000
FILLPAGE LH R5,RECNXT GET INDEX TO 1ST AVAILABLE SPACE @V5088AA 00623000
AR R5,R2 00624000
LA R7,FRHDRLEN+FRRECLEN LENGTH OF HEADER + FRAME @V5088AA 00625000
ST R7,0(R5) SAVE LENGTH OF RECORD IN 1ST @V5088AA 00626000
* FULLWORD OF SPACE 00627000
LA R5,4(R5) UPDATE PAST LENGTH FIELD @V5088AA 00628000
MVC 0(FRHDRLEN,R5),STDHDR MOVE STD HDR INTO RECORD @V5088AA 00629000
LA R5,FRHDRLEN(R5) UPDATE AVAILABLE SPACE POINTER @V5088AA 00630000
ICM R6,B'0111',RDVBUFF FRAME RECORD BUFFER ADDRESS @V5088AA 00631000
LA R7,FRRECLEN LENGTH OF FRAME RECORD @V5088AA 00632000
LR R14,R5 'TO' ADDRESS FOR MOVE @V5088AA 00633000
LR R15,R7 LENGTH TO MOVE @V5088AA 00634000
MVCL R14,R6 MOVE FRAME TO RECORD @V5088AA 00635000
LA R5,FRRECLEN(R5) ADD RECORD LENGTH TO AVAILABLE @V5088AA 00636000
* SPACE POINTER 00637000
SR R5,R2 SUBTRACT START ADDRESS @V5088AA 00638000
STH R5,RECNXT SAVE UPDATED PTR TO AVAIL.SPACE @V5088AA 00639000
BR R4 RETURN TO INLINE CODE @V5088AA 00640000
SPACE 1 00641000
************************************************************** 00642000
* WRITE A RECORDING PAGE BACK TO THE RECORDING CYLINDERS 00643000
************************************************************** 00644000
REALWRIT EQU * @V5088AA 00645000
L R1,IOEVMPAG GET VIRTUAL ADDRESS OF PAGE @V5088AA 00646000
L R0,WORKCYL DASD 'CCPD' OF PAGE @V5088AA 00647000
CALL DMKRPAPT,PARM=SYSTEM,AFFINITY GO WRITE PAGE @V5088AA 00648000
BC 8,*+8 ERROR? GO DISABLE RECORDING @V5088AA 00649000
OI INFOFLAG,WRITERR REMEMBER ERROR @V5088AA 00650000
L R2,=V(DMKIOEIF) ADD. OF INFOFLAG @VA10241 00650100
MVC 0(,R2),INFOFLAG MOVE IN INFOFLAG @VA10241 00650200
L R2,IOEREALP REAL ADDRESS OF PAGE @V5088AA 00651000
CALL DMKPTRUL UNLOCK THE VIRTUAL PAGE @V5088AA 00652000
SR R0,R0 FORCE SWAP CCPD ENTRY TO ZERO @V5088AA 00653000
CALL DMKRPAGT,PARM=SYSTEM RELEASE BACK-UP PAGE @V5088AA 00654000
BR R9 RETURN TO INLINE CODE @V5088AA 00655000
SPACE 1 00656000
DISABREC EQU * @V5088AA 00657000
LA R2,558 'RECORDING DISABLED' MESSAGE @V5088AA 00658000
ICM R2,B'0100',=C'I' INFORMATION MESSAGE @V5088AA 00659000
BAL R5,FRERRMSG GO WRITE ERROR MESSAGE @V5088AA 00660000
L R2,=V(DMKIOEES) ADDR. OF AREA FULL FLAG @V5088AA 00661000
MVI 0(R2),X'FF' TURN AREA FULL FLAG ON @V5088AA 00662000
OI INFOFLAG,FULLNOW DON'T LET LATER PROCESSING @V5088AA 00663000
* CLEAR OUT THE 'AREA FULL' FLAG 00664000
L R7,=V(DMKIOEIF) ADD. OF INFOFLAG @VA10241 00664100
MVC 0(,R7),INFOFLAG MOVE IN INFOFLAG @VA10241 00664200
TM INFOFLAG,WRITERR DID WE COME BECAUSE OF AN @V5088AA 00665000
* ERROR IN REALWRIT ROUTINE? 00666000
BO FINISH2 YES, GO CLEAN UP AND RETURN @V5088AA 00667000
BR R9 RETURN TO IN-LINE CODE @V5088AA 00668000
SPACE 1 00669000
FRERRMSG EQU * @V5088AA 00670000
SLR R0,R0 INDICATE NO VARIABLE TEXT @V5088AA 00671000
SLR R1,R1 NO VARIABLE MESSAGE TEXT @V5088AA 00672000
BAL R3,CALLERM GO WRITE MESSAGE @V5088AA 00673000
BR R5 RETURN TO IN-LINE CODE @V5088AA 00674000
SPACE 00675000
SRFERMSG EQU * @V60B7AA 00676000
LH R1,SRFADDR GET DEVICE ADDRESS ON GR1 @V60B7AA 00677000
CH R1,BLANKADD IS ADDRESS ALREADY SET TO BLANKS?@V60B7AA 00678000
BE NOCONVRT NO CONVERT NECESSARY IF SO @V60B7AA 00679000
CALL DMKCVTBH CONVERT DEVICE ADDRESS @V60B7AA 00680000
ICM R1,B'1000',BLANKADD BLANK OUT FIRST BYTE OF @ @V60B7AA 00681000
NOCONVRT SR R0,R0 LENGTH OF VARIABLE TEXT (TEXT @V60B7AA 00682000
* IS IN REGISTER 1) 00683000
BAL R3,CALLERM GO WRITE MESSAGE @V60B7AA 00684000
BR R5 RETURN TO IN-LINE CODE @V60B7AA 00685000
SPACE 1 00686000
CALLERM ICM R2,B'1000',ERMPARMS PARMS=OPERATOR+ALARM+RETURN @V60B7AA 00687000
ICM R0,B'1110',MODULEID+3 MODULE IDENTIFIER @V60B7AA 00688000
CALL DMKERMSG,AFFINITY CALL MESSAGE WRITER @V60B7AA 00689000
BR R3 RETURN TO IN-LINE CODE @V60B7AA 00690000
SPACE 1 00691000
FRFINISH EQU * @V5088AA 00692000
L R4,=V(DMKIOEFR) ADDRESS FRAME INDICATOR @V5088AA 00693000
MVI 0(R4),YESFRAME INDICATE FRAMES EXIST ON ERROR @V5088AA 00694000
* RECORDING CYLINDERS. THIS WILL BE 00695000
* USED BY CPEREP PROCESSING. 00696000
L R2,IOEREALP ADDRESS OF RECORDING PAGE @V5088AA 00697000
LH R4,RECNXT INDEX INTO PAGE OF AVAIL. SPACE @V5088AA 00698000
LA R4,0(R2,R4) ADDRESS OF AVAILABLE SPACE @V5088AA 00699000
LA R9,FRHDRLEN+FRRECLEN LENGTHS OF LAST RECORD AND @V5088AA 00700000
* ITS HEADER 00701000
SR R4,R9 BACK UP TO LAST RECORD'S HEADER @V5088AA 00702000
USING FRAMEHDR,R4 @V5088AA 00703000
MVI FRMSW0,FRMLAST INDICATE THIS IS LAST FRAME REC. @V5088AA 00704000
TM VMMCR6,VMM360 IS THIS 360 MODE @VA09528 00704100
BO DROP1 YES-DONT TURN ON 370 TOD FLAG @VA09528 00704300
OI FRMSW0,TOD370 EC MODE TURN ON 370 TOD FLAG @VA09528 00704500
DROP1 EQU * @VA09528 00704700
DROP R4 @V5088AA 00705000
FINISH1 EQU * @V60B7AA 00706000
L R2,SRFCOUNT COUNT OF SRF'S TO BE PROCESSED @V60B7AA 00707000
C R2,F1 IS THIS THE LAST SRF TO BE @V60B7AA 00708000
* PROCESSED? 00709000
BH FINISH2 IF NOT, GO AHEAD TO FINISH2 @V60B7AA 00710000
L R2,IOEREALP REAL ADDRESS OF PAGE @V60B7AA 00711000
OI RECFLAG1,RECPAGFL INDICATE THE LAST PAGE IS FULL@V5088AA 00712000
* DO THIS EVEN IF THE PAGE IS NOT 00713000
* FULL, SO THAT ERROR RECORDS ARE 00714000
* NOT PUT ON THE SAME PAGE AS FRAME 00715000
* RECORDS (EASIER TO CLEAR). 00716000
BAL R9,REALWRIT GO WRITE LAST PAGE TO REC. CYLS. @V5088AA 00717000
TM INFOFLAG,WRITERR DID ERROR OCCUR ON WRITE? @V5088AA 00718000
BO DISABREC GO DISABLE RECORDING IF SO @V5088AA 00719000
FINISH2 EQU * @V60B7AA 00720000
LTR R8,R8 DOES THE RDEVBLOK FOR THE SRF @V60B7AA 00721000
* EXIST? IF NOT, A DISABLE SHOULD 00722000
* NOT BE ISSUED 00723000
BZ NEXTSRF CURRENT SRF NOT GEN'ED -- BYPASS @V60B7AA 00724000
* DISABLE 00725000
LA R4,DISABLE ADDRESS OF DISABLE CCW @V5088AA 00726000
ST R4,IOBCAW SAVE IN IOBLOK @V5088AA 00727000
LA R4,DISABRTN RETURN POINT FROM DISABLE @V5088AA 00728000
ST R4,IOBIRA SAVE IN IOBLOK @V5088AA 00729000
XC IOBCSW(8),IOBCSW CLEAR CSW FOR RE-USE @V5088AA 00730000
MVI IOBFLAG,X'00' CLEAR OUT FIELD FOR REUSE @VMV0005 00730100
MVI IOBSTAT,X'00' CLEAR OUT FIELD FOR REUSE @VMV0005 00730200
ST R11,IOSSAVE SAVE VMBLOK ADDRESS @V5088AA 00731000
STM R13,R9,IOSSAVE+4 SAVE REGS ACROSS CALL TO IOSQR @V5088AA 00732000
CALL DMKIOSQR GO ISSUE DISABLE TO SRF @V5088AA 00733000
GOTO DMKDSPCH GO 'WAIT' FOR DISABLE TO COMPLETE@V5088AA 00734000
DISABRTN EQU * @V5088AA 00735000
USING *,R12 @V5088AA 00736000
SL R12,=A(*-DMKIOH) RE-ESTABLISH ADDRESSABILITY -- @V5088AA 00737000
* R12 CONTAINS IOBIRA ADDRESS 00738000
USING DMKIOH,R12 @V5088AA 00739000
L R11,IOSSAVE RESTORE VMBLOK ADDRESS @V5088AA 00740000
LM R13,R9,IOSSAVE+4 RESTORE REGISTER VALUES @V5088AA 00741000
NEXTSRF L R1,=V(DMKIOEES) POINTER TO 'AREA FULL' INDICATOR@V60B7AA 00742000
CLI 0(R1),X'FF' HAS RECORDING BEEN DISABLED? @V60B7AA 00743000
BE SETIOEHS IF SO, DON'T HANDLE ANY MORE SRFS@V60B7AA 00744000
L R1,SRFCOUNT COUNT OF SRF'S REMAINING @V60B7AA 00745000
BCTR R1,0 SUBTRACT 1 FOR SRF JUST HANDLED @V60B7AA 00746000
LTR R1,R1 HAVE WE PROCESSED ALL SRF'S? @V60B7AA 00747000
BZ SETIOEHS IF DONE, BRANCH @V60B7AA 00748000
ST R1,SRFCOUNT UPDATED COUNT OF SRF DEVICES @V60B7AA 00749000
L R1,CURRSRF PTR TO CURRENT SRF RDEVBLOK INFO @V60B7AA 00750000
LA R1,4(R1) INCREMENT TO POINT TO NEXT SRF @V60B7AA 00751000
ST R1,CURRSRF SAVE UPDATED POINTER @V60B7AA 00752000
MVC SRFADDR(DEVADDSZ),2(R1) SAVE SRF DEVICE ADDRESS @V60B7AA 00753000
LH R8,0(R1) OFFSET OF SRF'S RDEVBLOK FROM @V60B7AA 00754000
* DMKRIODV 00755000
LTR R8,R8 DOES A RDEVBLOK EXIST? @V60B7AA 00756000
BNZ SRFOK @VA11817 00757100
LH R1,2(,R1) GET RADDR OF SRF DEVICE @VA13122 00757250
CALL DMKSCNRU CHECK IF RDEVBLOK EXISTS @VA13122 00757275
BNZ NOSRF BRANCH IF WE COULDN'T FIND ONE @VA13122 00757300
*********************************************************************** 00757325
* WE NOW HAVE A DISPLACEMENT OF ZERO INTO THE RDEV TABLE AND THE DEVICE 00757350
* IS A VALID DEVICE FROM SCNRU (I.E. IT WAS THE FIRST RDEVICE MACRO) 00757375
* NOW LETS MAKE SURE IT WAS AN SRF DEVICE. DMKRIODV SHOULD POINT RIGHT 00757400
* TO IT IF THE ABOVE IS CORRECT 00757425
*********************************************************************** 00757450
L R2,=V(DMKRIODV) GET RDEV TABLE POINTER @VA13122 00757475
CLC 6(2,R2),=AL1(CLASSPEC,TYPSRF) IS FIRST AN SRF @VA11817 00757500
BNE NOSRF THIS TRICK DIDNT WORK EITHER @VA11817 00757600
L R1,CURRSRF RESTORE CURRENT SRF POINTER @VA13122 00757625
L R8,0(R1) RESTORE OFFSET OF SRF RDEVBLOK @VA13122 00757650
SRFOK DS 0H 'S OK @VA11817 00757700
SLL R8,3 MULTIPLY VALUE BY 8 @V60B7AA 00758000
L R2,=V(DMKRIODV) ADDRESS OF RDEVBLOK TABLE @V60B7AA 00759000
AR R8,R2 ADD OFFSET OF SRF'S RDEVBLOK TO @V60B7AA 00760000
* START OF RDEVBLOK TABLE. R8 NOW HAS 00761000
* POINTER TO SRF'S RDEVBLOK. 00762000
LH R2,2(R1) SRF DEVICE ADDRESS @V60B7AA 00763000
STH R2,IOBRADD SAVE SRF ADDRESS IN IOBLOK @V60B7AA 00764000
LA R2,ENABRTRN RETURN ADDRESS FROM 'ENABLE' @V60B7AA 00765000
ST R2,IOBIRA SAVE RETURN ADDRESS IN IOBLOK @V60B7AA 00766000
LA R2,ENABLE ADDRESS OF CHANNEL PROGRAM @V60B7AA 00767000
ST R2,IOBCAW SAVE IN IOBLOK @V60B7AA 00768000
XC IOBCSW(8),IOBCSW ZERO OUT CSW FOR RE-USE @V60B7AA 00769000
MVI IOBFLAG,X'00' CLEAR OUT FIELD FOR RE-USE @VMV0009 00769100
MVI IOBSTAT,X'00' CLEAR OUT FIELD FOR RE-USE @VMV0009 00769200
LA R3,STDHDR ADDRESS OF STANDARD RECORD HEADER@V60B7AA 00770000
USING FRAMEHDR,R3 @V60B7AA 00771000
MVI FRMTYPE,CPUTYPE INDICATE FRAMES ARE CPU FRAMES @V60B7AA 00772000
MVI FRMCNT,X'00' INITIALIZE FRAME SEQUENCE NO. @V60B7AA 00773000
DROP R3 @V60B7AA 00774000
XC FRAMECTR(2),FRAMECTR INITIALIZE COUNTER TO ZERO @V60B7AA 00775000
MVI INFOFLAG,X'00' INITIALIZE INDICATORS TO ZERO @V60B7AA 00776000
L R7,=V(DMKIOEIF) ADD. OF INFOFLAG @VA10241 00776100
MVC 0(,R7),INFOFLAG MOVE IN INFOFLAG @VA10241 00776200
B SRFLOOP GO BACK AND PROCESS THIS SRF @V60B7AA 00777000
SETIOEHS L R4,=V(DMKIOECE) ADD. OF CECYL @VA10241 00778100
MVC 0(3,R4),WORKCYL UPDATE CECYL TO LAST RECORD @V60B7AA 00780000
L R4,=V(DMKIOEHS) @V60B7AA 00781000
MVC 0(4,R4),WORKCYL THIS IS THE ADDRESS @V5088AA 00782000
* FOR THE FIRST ERROR RECORD ON THE 00783000
* RECORDING CYLINDERS. THE VALUE 00784000
* WILL BE FILLED INTO THE PSEUDO 00785000
* LOGREC HEADER SET UP FOR EREP 00786000
* PROCESSING, AND IT WILL BE USED 00787000
* DURING EREP'S SEQUENTIAL READ OF 00788000
* THE RECORDING AREA. (THE ADDRESS 00789000
* ACTUALLY POINTS TO THE LAST REC. 00790000
* BEFORE THE ERROR RECORDS, SINCE 00791000
* EREP READS WITH COUNT, KEY, AND 00792000
* DATA.) 00793000
L R1,IOEVMPAG GET VIRTUAL ADDRESS OF PAGE @V5088AA 00794000
CALL DMKPGTVR RELEASE VIRTUAL PAGE @V5088AA 00795000
ICM R1,B'0111',RDVBUFF ADDRESS OF 2K BUFFER @V5088AA 00796000
LA R0,FRAMSIZE LENGTH OF AREA TO FRET @V5088AA 00797000
CALL DMKFRET FRET THE 2K BUFFER @V5088AA 00798000
LA R0,BLOKSIZE SIZE OF AREA TO FRET @V5088AA 00799000
LR R1,R10 ADDRESS OF IOBLOK + CCW'S @V5088AA 00800000
CALL DMKFRET FREE IOBLOK + CCW'S @V5088AA 00801000
SPACE 1 00802000
EXIT RETURN TO CALLER OF DMKIOHFR @V5088AA 00803000
SPACE 00804000
NOSRF EQU * 00805000
LR R1,R10 GET ADDRESS OF IOBLOK + CCW'S @V60B7AA 00806000
LA R0,BLOKSIZE SIZE OF AREA TO FRET @V60B7AA 00807000
CALL DMKFRET FRET IOBLOK + CCW'S @V60B7AA 00808000
NOSRF2 LA R2,559 'SRF UNAVAILABLE' MESSAGE @V60B7AA 00809000
ICM R2,B'0100',=C'W' WARNING MESSAGE @V60B7AA 00810000
BAL R5,SRFERMSG GO WRITE MESSAGE @V60B7AA 00811000
L R1,SRFCOUNT COUNT OF SRF'S REMAINING TO BE @V60B7AA 00812000
* PROCESSED 00813000
LTR R1,R1 ANY SRF'S? @V60B7AA 00814000
BZ EXIT1 NO -- RETURN TO CALLER @V60B7AA 00815000
B FINISH1 IF HERE, ENABLE OR RDCPUID @V60B7AA 00816000
* FAILED. GO ISSUE DISABLE AND GO ON TO 00817000
* NEXT SRF IF THERE IS ONE. 00818000
EXIT1 EXIT RETURN TO CALLER OF DMKIOHFR @V60B7AA 00819000
EJECT 00820000
DS 0F 00821000
INITFMT DC X'00084000FFFFFFFF' COUNT OF 8 AND PAGE FREE 00822000
WORKCYL DC H'00' 00823000
WORKPAGE DC X'01' 00824000
WORKTYP DC X'00' 00825000
SPACE 00826000
* NOTE: LASTCYL AND PAGE90PC MUST REMAIN CONTIGUOUS 00827000
* AS THEY ARE REFERENCED AS A UNIT 00828000
AREA90PC DS 0X @V5088AA 00829000
LASTCYL DC H'0000' ENDING 'CC' OF RECORDING AREA @V5088AA 00830000
PAGE90PC DC X'00' 00831000
SPACE 00832000
* NOTE: MAXCYL AND MAXPAGE MUST REMAIN CONTIGUOUS AS 00833000
* THEY ARE REFERENCED AS A UNIT 00834000
MAXCYL DC H'0000' ENDING 'CC' OF RECORDING AREA @V5088AA 00835000
MAXPAGE DC X'00' 00836000
DS 0F @V60B7AA 00837000
IOSSAVE DS XL56 SAVE AREA FOR REGS 11 AND 13-9 @V5088AA 00838000
FIRSTRET DS XL1 FLAG FOR RETURNS FROM DSPCH @V5088AA 00839000
SAVECCP DS XL3 SAVE AREA FOR CURRENT WORKCYL @V5088AA 00840000
INFOFLAG DC X'00' AREA FILLED WITH FRAME RECORDS @V5088AA 00841000
FULLNOW EQU X'80' INDICATES AREA FILLED WITH FRAMES@V5088AA 00842000
WRITERR EQU X'40' ERROR OCCURRED CALLING DMKRPAPT @V5088AA 00843000
YESFRAME EQU X'20' FRAME RECORDS ARE ON REC. CYLS @V5088AA 00844000
DS 0H 00845000
SRFADDR DC XL2'4040' SAVE AREA FOR SRF DEVICE ADDRESS @V60B7AA 00846000
BLANKADD DC X'4040' TO BLANK SRF DEVICE @ SAVE AREA @V60B7AA 00847000
ERMPARMS DC X'B0' PARMS= OPERATOR+ALARM+RETURN @V305435 00848000
DEVADDSZ EQU 2 SIZE OF DEVICE ADDRESS @V60B7AA 00849000
* THE FOLLOWING CCW'S MUST REMAIN CONTIGUOUS AS ONE MOVE 00850000
* COMMAND MOVES THEM ALL. 00851000
* 00852000
ENABCCW DS 0D ENABLE CCW FOR SRF @V5088AA 00853000
DC X'A300000060000001' @V5088AA 00854000
CPUIDCCW DS 0D RDCPUID CCW FOR SRF @V60B7AA 00855000
DC X'FE0000002000000A' @V60B7AA 00856000
VERBRDV DS 0D VERBAGE & RDVERB CCWS FOR SRF @V5088AA 00857000
DC X'6900000020000001' @V5088AA 00858000
DC X'3200000020000780' @V5088AA 00859000
DISABCCW DS 0D DISABLE CCW FOR SRF @V5088AA 00860000
DC X'C300000020000001' @V5088AA 00861000
OSDATE DC XL4'00000000',XL2'0006',PL2'1' AREA FOR STCK @V5088AA 00862000
CPUIDENT DS XL10 BUFFER FOR RDCPUID TO STORE CPUID@V60B7AA 00863000
IOEVMPAG DS 1F VIRTUAL ADDRESS OF PAGE @V5088AA 00864000
IOEREALP DC F'0' REAL ADDRESS OF PAGE @V60B7AA 00865000
FRAMECTR DC X'0000' COUNTER OF NO. OF FRAMES READ @V5088AA 00866000
DIRFRAME DC X'01' 1-BYTE BUFFER FOR VERBAGE CCW @V5088AA 00867000
CPUFRAME DC X'02' 1-BYTE BUFFER FOR VERBAGE CCW @V5088AA 00868000
STDHDR DS 0F STANDARD LOGREC RECORD HEADER @V5088AA 00869000
DC XL2'0065' SYSTEM/RELEASE INFO. @V5088AA 00870000
DC XL1'C0' FRAME SW1 @VA09528 00871100
DC XL21'0' @V5088AA 00872000
FRHDRLEN EQU 24 LENGTH OF FRAME RECORD HEADER @V5088AA 00873000
FRRECLEN EQU 1920 LENGTH OF A SRF FRAME @V5088AA 00874000
DIRTYPE EQU X'B0' DIRECTOR FRAME RECORD TYPE @V5088AA 00875000
CPUTYPE EQU X'A0' CPU FRAME RECORD TYPE @V5088AA 00876000
MAXFRAME EQU 50 MAXIMUM NO. OF FRAMES OF ANY ONE @V5088AA 00877000
* TYPE WHICH SHOULD BE READ 00878000
FRAMSIZE EQU 2048/8 2K BUFFER SIZE IN D'WORDS @V5088AA 00879000
SRFCOUNT DS XL4 COUNT OF SRF DEVICES SPECIFIED BY@V60B7AA 00880000
* RIOGEN MACRO. FRAMES MUST BE READ 00881000
* FROM ALL OF THESE SRF'S. 00882000
CURRSRF DS XL4 POINTER TO INFO. IN LIST LOCATED @V60B7AA 00883000
* BY DMKRIOSF ASSOCIATED WITH THE SRF 00884000
* DEVICE CURRENTLY BEING PROCESSED. 00885000
SPACE 1 00887000
LTORG 00888000
EJECT 00889000
COPY MCHAREA 00890000
COPY EQU 00891000
COPY RBLOKS 00892000
PSA 00893000
COPY SAVE 00894000
COPY IOBLOKS @V306638 00895000
COPY VMBLOK 00896000
COPY DEVTYPES 00897000
COPY IOER 00898000
COPY RECPAG 00899000
IOBLOK DSECT @V5088AA 00900000
ORG , @V5088AA 00901000
FRAMCCWS DS 5D @V60B7AA 00902000
ORG FRAMCCWS @V5088AA 00903000
ENABLE DS D @V5088AA 00904000
RDCPUID DS D @V60B7AA 00905000
ORG *-7 @V60B7AA 00906000
CPUIDBUF DS 3X ADDRESS OF 10-BYTE BUFFER FOR @V60B7AA 00907000
* RDCPUID COMMAND 00908000
ORG *+4 @V60B7AA 00909000
VERBAGE DS D @V5088AA 00910000
ORG *-7 @V5088AA 00911000
VERBBUFF DS 3X ADDRESS OF 2K BUFFER FOR RDVERB @V5088AA 00912000
ORG *+4 @V5088AA 00913000
RDVERB DS D @V5088AA 00914000
ORG *-7 @V5088AA 00915000
RDVBUFF DS 3X ADDRESS OF 1-BYTE BUFFER FOR @V5088AA 00916000
* VERBAGE CCW 00917000
ORG *+4 @V5088AA 00918000
DISABLE DS D @V5088AA 00919000
BLOKSIZE EQU (*-IOBLOK)/8 SIZE IN D'WORDS OF IOBLOK + CCWS @V5088AA 00920000
SPACE 5 00921000
FRAMEHDR DSECT @V5088AA 00922000
FRMTYPE DS X TYPE OF RECORD @V5088AA 00923000
FRMSYS DS X SYSTEM/RELEASE LEVEL @V5088AA 00924000
FRMSW0 DS X RECORD INDEPENDENT SWITCHES @V5088AA 00925000
FRMMORE EQU X'80' MORE RECORDS FOLLOW @V5088AA 00926000
FRMLAST EQU X'00' LAST FRAME RECORD @V5088AA 00927000
TOD370 EQU X'40' 370 TIME OF DAY FLAG @VA09528 00927100
FRMSW1 DS 3X LENGTH OF FRAME DATA @V5088AA 00928000
FRMCNT DS X RECORD COUNT @V5088AA 00929000
DS X RESERVED @V5088AA 00930000
FRMDATE DS 4X SYSTEM DATE @V5088AA 00931000
FRMTIME DS 4X SYSTEM TIME @V5088AA 00932000
FRMCPID DS X UNUSED @V5088AA 00933000
FRMCSER DS 3X CPU SERIAL NUMBER @V5088AA 00934000
FRMMDL DS 2X CPU MODEL NUMBER @V5088AA 00935000
FRMMCEL DS 2X CPU MCEL LENGTH @V5088AA 00936000
END 00937000
SPACE 00938000
LTORG 00939000
SPACE 00940000