ibm:vm370-lib:cp:dmkioh.assemble_src
Table of Contents
DMKIOH Source
References
- Fixes Applied : 4
- This Source Date : Thursday, July 5, 1979
- Last Fix ID : [R13122DK]
Source Listing
- DMKIOH.ASSEMBLE.txt
- 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
ibm/vm370-lib/cp/dmkioh.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator