CFH TITLE 'DMKCFH (CP) VM/370 - RELEASE 6' 00001000 ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000 *. 00003000 * MODULE NAME - 00004000 * 00005000 * DMKCFHSV 00006000 * 00007000 * FUNCTION - 00008000 * 00009000 * TO SAVE A PAGE FORM VERSION OF A SYSTEM'S VIRTUAL STORAGE SPAC 00010000 * INCLUDING REGISTERS AND PSW AS THEY CURRENTLY EXIST. THE NAME 00011000 * OF THE SYSTEM AND THE DASD LOCATION AT WHICH IT IS TO BE SAVED 00012000 * IS DEFINED IN THE CP MODULE DMKSNT. 00013000 * 00014000 * ATTRIBUTES - 00015000 * 00016000 * REENTRANT, PAGEABLE, CALLED VIA SVC 00017000 * 00018000 * COMMAND LINE FORMAT - 00019000 * 00020000 * +---------+-------------+ 00021000 * | | | 00022000 * | SAVESYS | SYSTEM-NAME | 00023000 * | | | 00024000 * +---------+-------------+ 00025000 * 00026000 * ENTRY CONDITIONS - 00027000 * 00028000 * GPR9 = ADDRESS OF COMMAND LINE BUFFER 00029000 * GPR11 = ADDRESS OF CALLER'S VMBLOK 00030000 * GPR12 = ADDRESS OF ENTRY POINT 00031000 * GPR13 = ADDRESS OF SAVEAREA 00032000 * 00033000 * EXIT CONDITIONS 00034000 * 00035000 * NORMAL - 00036000 * GPR2 = 0 00037000 * 00038000 * ERROR - 00039000 * GPR2 = ERROR MESSAGE CODE NUMBER 00040000 * 00041000 * CALLS TO OTHER ROUTINES - 00042000 * 00043000 * DMKCVTBH - TO CONVERT BINARY TO HEX 00044000 * DMKERMSG - TO SEND ERROR MESSAGES TO TERMINAL 00045000 * DMKFREE - TO OBATIN BUFFER SPACE FOR STORAGE KEYS 00046000 * DMKFRET - TO RETURN FREE STORAGE USED FOR BUFFER SPACE 00047000 * DMKPTRAN - LOCATE AND FETCH A PAGE OF VIRTUAL STORAGE 00048000 * DMKPTRLK - TO LOCK A PAGE IN CORE 00049000 * DMKPTRUL - TO UNLOCK A PAGE 00050000 * DMKQCNRD - TO READ RESPONSE FROM A CONSOLE 00051000 * DMKQCNWT - TO WRITE A MESSAGE TO CONSOLE 00052000 * DMKRPAGT - TO GET A PAGE FROM BACKING DEVICE 00053000 * DMKRPAPT - TO WRITE A PAGE TO BACKING DEVICE 00054000 * DMKSCNFD - LOCATE THE NEXT ARGUMENT ON THE COMMAND LINE 00055000 * DMKSCNVS - TO FIND A VOLUME 00056000 * DMKSCNVU - TO FIND A VIRTUAL UNIT 00057000 * 00058000 * EXTERNAL REFERENCES - 00059000 * 00060000 * DMKVMAS1 - ANCHOR FOR SHARED SYSTEMS (SHRTABLE POINTER) 00061000 * 00062000 * TABLES / WORKAREAS - 00063000 * 00064000 * DMKSNTBL - SYSTEM NAME TABLE 00065000 * 00066000 * MACROS - 00067000 * 00068000 * CALL - TO TRANSFER CONTROL TO OTHER SYSTEM ROUTINES 00069000 * ENTRY - TO ESTABLISH ENTRY CONVENTIONS AND ADDRESSIBILITY 00070000 * EXIT - TO RETURN CONTROL TO CALLING ROUTINE 00071000 * MSG - TO SEND MESSAGES TO THE CALLERS CONSOLE 00072000 * TRANS - TO BRING PAGEABLE PAGES BACK INTO MAIN STORAGE 00073000 * 00074000 * REGISTER USAGE - 00075000 * 00076000 * GPR0 = LENGTH OF ARGUMENT (RETURNED BY DMKSCNFD) 00077000 * GPR1 = ADDRESS OF ARGUMENT (RETURNED BY DMKSCNFD) 00078000 * GPR2 = PARMS PASSED TO CALLED ROUTINES 00079000 * GPR3 = LENGTH FOR EXECUTED MOVES AND COMPARES 00080000 * GPR4 = INTERNAL LINKAGE (2ND LEVEL) 00081000 * GPR5 = INTERNAL LINKAGE (2ND LEVEL) 00082000 * GPR6-8 NOT USED 00083000 * GPR9 = ADDRESS OF COMMAND LINE BUFFER 00084000 * GPR10 = IOBLOK BASE 00085000 * GPR11 = VMBLOK BASE 00086000 * GPR12 = MODULE BASE 00087000 * GPR13 = SAVEAREA BASE 00088000 * GPR14 = EXTERNAL LINKAGE 00089000 * GPR15 = EXTERNAL LINKAGE 00090000 * 00091000 * OPERATION - 00092000 * 00093000 * 1. CALL DMKSCNFD TO GET THE SYSTEM-NAME ARGUMENT. IF 00094000 * NONE IS FOUND, CALL DMKERMSG TO SEND ERROR MESSAGE 00095000 * DMKCFH026E. 00096000 * 2. TRANS IN AND LOCK THE SYSTBL. THEN SCAN THE SYSTBL TO 00097000 * FIND THE ENTRY FOR THE SPECIFIED NAME. IF NONE IS FOUND, 00098000 * CALL DMKERMSG TO SEND ERROR MESSAGE DMKCFH044E. 00099000 * 3. IF THE VIRTUALSTORAGE IS NOT LARGE ENOUGH TO CONTAIN 00100000 * THE NAMED SYSTEM, CALL DMKERMSG TO SEND ERROR MESSAGE 00101000 * DMKCFH170E. 00102000 * 4. CALL DMKSCNVS TO FIND THE VOLUME CONTAINING THE VIRTUAL 00103000 * SYSRES. IF NOT FOUND, CALL DMKERMSG TO SEND ERROR MESSAGE 00104000 * DMKCFH171E. 00105000 * 5. CALL DMKSCNVU TO GET THE VIRTUAL DEVICE BLOKS FOR THE 00106000 * VIRTUAL SYSRES. IF NOT FOUND, CALL DMKERMSG TO SEND ERROR 00107000 * MESSAGE DMKCFH173E. IF HAVE THE DEVICE BLOKS, BUT THE 00108000 * MINI DISK IS NOT AT THE CYLINDER SPECIFIED IN THE SYSTBL, 00109000 * CALL DMKERMSG TO SEND ERROR MESSAGE DMKCFH172E. 00110000 * 6. CALL DMKSCNVS TO FIND THE VOLUME THAT IS TO CONTAIN THE 00111000 * SAVED SYSTEM. IF NOT FOUND, CALL DMKERMSG TO SEND ERROR 00112000 * MESSAGE DMKCFH171E. IF THIS VOLUME IS NOT A CP OWNED 00113000 * VOLUME, CALL DMKERMSG TO SEND ERROR MESSAGE 00114000 * DMKCFH179E. IF ALL OK, CHECK FOR ANY 00115000 * PENDING INTERRUPTS IN THE VIRTUAL MACHINE. IF NONE ARE 00116000 * FOUND, GO TO STEP 9. 00117000 * 7. CALL DMKQCNWT TO SEND THE INTERRUPT PENDING MESSAGE. 00118000 * THEN CALL DMKQCNRD TO READ THE REPLY. 00119000 * 8. IF THE REPLY WAS YES, CONTINUE - ELSE GO TO STEP 13. 00120000 * 9. SET UP THE NEXT GROUP OF PAGES (SPECIFIED IN THE SYSTBL) 00121000 * TO BE SAVED. CALL DMKFREE TO OBTAIN FREE STORAGE 00122000 * FOR A STORAGE KEY BUFFER. 00123000 * 10.TRANS IN THE NEXT PAGE TO BE SAVED. CALL DMKRPAPT TO 00124000 * WRITE THE PAGE TO THE SYSVOL. SAVE THE STORAGE KEYS FOR 00125000 * THIS PAGE. 00126000 * 11.IF ALL THE PAGES IN THIS GROUP HAVE BEEN PROCESSED, GO TO 00127000 * STEP 12. ELSE - BUMP TO THE NEXT PAGE AND GO BACK TO 00128000 * STEP 10. 00129000 * 12.IF THERE ARE MORE PAGE GROUPS TO PROCESS, GO BACK TO 00130000 * STEP 9. IF NOT, TRANS IN USER PAGE ZERO. STORE THE VIRTUAL 00131000 * PSW,REGISTERS, AND KEYS IN THIS PAGE. THEN CALL DMKRPAPT 00132000 * TO WRITE THIS PAGE OUT TO THE SYSVOL. 00133000 * 13.CALL DMKPTRUL TO UNLOCK THE SYSTBL. IF THE SAVE WAS NOT 00134000 * COMPLETED DUE TO AN ERROR - EXIT. IF IT WAS A GOOD 00135000 * SAVE, CALL DMKQCNWT TO SEND THE 'SYSTEM SAVED' MESSAGE 00136000 * AND EXIT. 00137000 * 00138000 * RESPONSES - 00139000 * SYSTEM SAVED 00140000 * 00141000 * ERROR MESSAGES - 00142000 * DMKCFH026E OPERAND MISSING OR INVALID 00143000 * DMKCFH044E SYSTEM (NAME) DOES NOT EXIST 00144000 * DMKCFH170E SYSTEM (NAME) EXCEEDS STORAGE 00145000 * DMKCFH171E SYSTEM (NAME) VOLID (VOLID) NOT MOUNTED 00146000 * DMKCFH172E SYSTEM (NAME) DASD (VADDR) INCOMPATIBLE SYSRES 00147000 * DMKCFH173E SYSTEM (NAME) REQUIRES DASD (VADDR) 00148000 * DMKCFH179E SYSTEM (NAME) VOLID (VOLID) NOT CP-OWNED 00149000 * DMKCFH300E SAVE REQUEST BEYOND VIRTUAL MACHINE SIZE 00150000 * DMKCFH435E PAGING ERROR WRITING SAVED SYSTEM 00151000 * 00152000 *. 00153000 EJECT 00154000 COPY OPTIONS 00155000 COPY LOCAL 00156000 DMKCFH CSECT 00157000 MODID DC CL8'DMKCFH' MODULE NAME @VM03098 00158000 SPACE 3 00159000 USING PSA,R0 00160000 USING VMBLOK,R11 00161000 USING SAVEAREA,R13 00162000 SPACE 2 00163000 EXTRN DMKSCNFD 00164000 EXTRN DMKPTRUL 00165000 EXTRN DMKCVTBH 00166000 EXTRN DMKSNTBL 00167000 EXTRN DMKSCNVS 00168000 EXTRN DMKSCNVU 00169000 EXTRN DMKQCNRD,DMKQCNWT 00170000 EXTRN DMKRPAPT 00171000 EXTRN DMKRPAGT 00172000 EXTRN DMKERMSG 00173000 EXTRN DMKVMAS1 00174000 EJECT 00175000 SPACE 00176000 DMKCFHSV RELOC 00177000 XC SAVEWRK1,SAVEWRK1 CLEAR FLAG BYTES @V304635 00178000 XC SAVEWRK2(SAVEWRK9-SAVEWRK2+4),SAVEWRK2 CLEAR @VM03100 00179000 * SAVEWRK2-9 00180000 MVC SAVEWRK2(L'SAVEWRK2+L'SAVEWRK3),BLANKS BLANKS @VM03100 00181000 * TO SAVEWRK2/3 00182000 CALL DMKSCNFD LOCATE SYSTEM NAME 00183000 BNZ CFH026 MISSING ARGUMENT 00184000 LR R3,R0 LENGTH OF NAME TO R3 00185000 CL R3,F8 MORE THAN EIGHT CHARACTERS 00186000 BH CFH026 INVALID ARGUMENT 00187000 BCTR R3,0 MINUS ONE 00188000 EX R3,SAVENAME SAVE NAME IN SAVEWRK2/3 00189000 TM VMRSTAT,VMLOGOFF OTHER ACTIVITY STARTED? @V408246 00190000 BO CFHEXIT YES, GET OUT AS FAST AS POSSIBLE @V408246 00191000 BAL R5,GETSNTBL GET SYSNAME TABLE @V304635 00192000 SPACE 00193000 USING SYSTBL,R4 00194000 SPACE 00195000 NAMECHEK CLC SAVEWRK2(L'SYSNAME),SYSNAME IS THIS CORRECT @VM03100 00196000 * ENTRY ? 00197000 BE SIZECHK BRANCH IF YES 00198000 L R3,SYSPNT LOAD DISPLACEMENT TO NEXT ENTRY 00199000 AR R4,R3 ADDRESS OF NEXT ENTRY TO R4 00200000 LTR R3,R3 LAST ENTRY ??? 00201000 BNZ NAMECHEK BRANCH IF NOT 00202000 B CFH044 INVALID NAME 00203000 SPACE 00204000 SIZECHK L R0,VMSTOR GET VIRTUAL STORAGE SIZE @V304635 00205000 CL R0,SYSSIZE WILL THE SYSTEM FIT IN THIS MACHINE 00206000 BL CFH170 NOPE !!!! 00207000 SPACE 00208000 LH R1,SYSVADDR GET VIRTUAL ADDRESS @V304635 00209000 LTR R1,R1 IS NAMESYS FLAGGED 'IGNORE' @V304635 00210000 BM NOVOLCHK IF YES - SKIP FOR MOUNT CHECK. @V304635 00211000 LA R1,VSYSRES ADDRESS OF VOL. SER. FOR VIRT. @V304635 00212000 * SYSRES. 00213000 LA R0,L'VSYSRES LENGTH OF 6 BYTES @VM03100 00214000 CALL DMKSCNVS SEARCH FOR THIS VOLUME 00215000 BNZ NOSYSRES BRANCH IF NOT FOUND 00216000 SPACE 00217000 LR R5,R1 RDEVBLOK ADDRESS TO R5 00218000 LH R1,SYSVADDR LOAD VIRTUAL ADDRESS FROM SYSTABLE 00219000 CALL DMKSCNVU SEE IF THERE 00220000 BNZ BLD173 NOT PROPER ADR. 00221000 USING VDEVBLOK,R8 00222000 SPACE 00223000 CL R5,VDEVREAL PROPER LINK-UP ??? 00224000 BNE BLD172 NO - NO 00225000 SPACE 00226000 CLC VDEVRELN(L'SYSCYL),SYSCYL PROPER CYLINDER ON @VM03100 00227000 * DISK ?? 00228000 BNE BLD172 NOT PROPER CYLINDER 00229000 SPACE 00230000 NOVOLCHK LA R0,L'SYSVOL VOLUME SERIAL LENGTH @VM03100 00231000 LA R1,SYSVOL NOW LET US SEE IF RIGHT SYSVOL SPECIFIED 00232000 CALL DMKSCNVS ... 00233000 BNZ NOSYSVOL CAN'T SAVE A SYSTEM WITHOUT A DISK 00234000 SPACE 00235000 LR R10,R1 RDEVBLOK TO R10 00236000 USING RDEVBLOK,R10 00237000 TM RDEVFLAG,RDEVOWN OWNED VOLUME ???? 00238000 BZ NOSYSOWN ALMOST MADE IT -- NOT CP OWNED @V200820 00239000 LA R0,PAGE2314 MAXIMUM PAGES/CYL ON 2314 @VM03100 00240000 TM RDEVTYPE,TYP2314 IS THIS A 2314 ???? 00241000 BO STOMAXPG YES ----- 00242000 LA R0,PAGE3330 MAXIMUM PAGES/CYL ON 3330 @VM03100 00243000 TM RDEVTYPE,TYP3330 IS IT ???? 00244000 BO STOMAXPG YES ---- 00245000 LA R0,PAGE3350 MAXIMUM PAGES/CYL ON 3350 @VM03100 00246000 CLI RDEVTYPE,TYP3350 IS IT ???? @V304498 00247000 BE STOMAXPG YES ----- @V304498 00248000 LA R0,PAGE3375 Maximum pages/cyl on 3375 HRC106DK 00248100 TM RDEVTYPE,TYP3375 Is it ???? HRC106DK 00248200 BO STOMAXPG Yes ----- HRC106DK 00248300 LA R0,PAGE3380 Maximum pages/cyl on 3380 HRC106DK 00248400 TM RDEVTYPE,TYP3380 Is it ???? HRC106DK 00248500 BO STOMAXPG Yes ----- HRC106DK 00248600 LA R0,PAGE2305 MAXIMUM PAGES/CYL ON 3340/2305 @VM03100 00249000 TM RDEVTYPE,TYP2305+TYP3340 2305 OR 3340 ? @V2A2029 00250000 BNZ STOMAXPG YES - @V2A2029 00251000 LA R2,EMSG006 LOAD ERROR CODE FOR WRONG @VM03100 00252000 * DEVICE TYPE 00253000 B NOVAR GO SEND ERROR MESSAGE 00254000 SPACE 00255000 STOMAXPG SLL R0,8 SHIFT UP EIGHT 00256000 ST R0,SAVEWRK7 SAVE FOR LATER USE 00257000 SPACE 00258000 ****************************************************************** 00259000 * NOW CHEK FOR PENDING INTERUPTS - IF ANY FOUND - GIVE 00260000 * REQUESTOR A CHANCE TO BACK OUT... 00261000 ****************************************************************** 00262000 TM VMPEND,X'FF'-EXTMASK CHECK ALL BUT EXTERNAL @VM03100 00263000 BZ DOSAVE BRANCH IF NONE FOUND 00264000 SPACE 00265000 INTPEND MSG 'DMKCFH436E INTERRUPT PENDING. TO PROCEED TYPE YES, TO EX00266000 ND TYPE NO.' @VM08919 00267000 L R2,=A(NOTRESP) SIGNAL NOT A COMMAND RESPONSE @V60C2B8 00268100 CALL DMKQCNWT,PARM=NORET+ERRMSG(,R2) @V60C2B8 00268120 LA R1,SAVEWRK4 READ IT INTO HERE @V304635 00269000 LA R0,3 MAXIMUM LENGTH 00270000 CALL DMKQCNRD,PARM=UCASE+EDIT 00271000 BNZ CFHEXIT SOMETHING HAPPENED -FORGET IT @V304635 00272000 CH R0,F2+2 2 CHARACTERS IN? @VM08919 00273000 BH CHKYES MORE, MAYBE YES. @VM08919 00274000 BL INTPEND LESS, BAD NEWS, TRY AGAIN. @VM08919 00275000 CLC =C'NO',SAVEWRK4 WAS IT NO ? @VM03100 00276000 BNE INTPEND NOPE, BAD NEWS, TRY AGAIN. @VM08919 00277000 BE CFHEXIT IT WAS NO - SO FORGET IT. @V304635 00278000 SPACE 1 00279000 CHKYES CH R0,F3+2 ENTER 3 CHARACTERS? @VM08919 00280000 BNE INTPEND NOPE, THEN CAN'T BE YES @VM08919 00281000 CLC =C'YES',SAVEWRK4 WAS IT YES ? @VM03100 00282000 BNE INTPEND NOPE, SO SAD, TRY AGAIN. @VM08919 00283000 SPACE 00284000 DOSAVE XC SAVEWRK4(L'SAVEWRK4+L'SAVEWRK5),SAVEWRK4 CLEAR @VM03100 00285000 * SAVEWRK4/5 00286000 L R0,SYSPAGCT LOAD NUMBER OF PAGES SAVED 00287000 SRL R0,2 DIVIDE NUM. OF PAGES BY 4 00288000 AH R0,F1+2 ADD ONE TO ADJUST FOR LOST BITS 00289000 ST R0,SAVEWRK9 SAVE SIZE FOR FRET 00290000 CALL DMKFREE ... 00291000 ST R1,SAVEWRK4 SAVE BUFFER ADDRESS 00292000 L R5,SYSSTART LOAD CCPD FROM SYSTABLE 00293000 IC R5,RDEVCODE+1 INSERT DEVICE CODE 00294000 ST R5,SAVEWRK2 SAVE STARTING CCPD FOR FUTURE USE 00295000 L R10,F4096 LOAD CONSTANT FOR BUMPING PAGES 00296000 LH R6,SYSPAGLN LOAD NUMBER OF SAVEPAG ENTRIES 00298000 BAL R14,NEXTCCPD GET NEXT PAGE SLOT @VA12886 00299100 SR R3,R3 ZERO GPR3 00300000 **************************************************************** 00301000 * REGISTER USAGE DURING SAVE LOOP 00302000 * R3 - INDEX COUNT TO STEP THRU SYSPAGNM OF SYSTABLE ENTRY. 00303000 * R4 - ADDRESS OF SYSTABLE ENTRY. 00304000 * R5 - CCPD OF CURRENT PAGE ON SYSVOL. 00305000 * R6 - COUNT OF NUMBER OF SYSPAGNM ENTRIES LEFT TO PROCESS. 00306000 * R7 - CONSTANT USED TO INCREMENT CCPD IN R5. 00307000 * R8 - CURRENT PAGE ADDRESS. 00308000 * R9 - ENDING ADDRESS OF THE SYSPAGNM ENTRY BEING PROCESSED. 00309000 * R10- CONSTANT USED TO INCREMENT ADDRESS IN R8. 00310000 * 00311000 ******************************************************************* 00312000 SAVELOOP L R8,SYSPAGNM(R3) LOAD ENTRY 00313000 SRDL R8,16 LOW PAGE NUM TO LOW ORDER OF R8 00314000 SRL R9,16 HIGH PAG NUM TO LOW ORDER OF R9 00315000 SLL R8,12 FORM ADDRESS OF CURRENT PAGE 00316000 SLL R9,12 FORM ADDRESS OF HIGH PAGE 00317000 CL R9,VMSIZE GREATER THAN VIRTUAL MACH SIZE @VA02004 00318000 BNL CFH300 YES, WRITE ERROR MSG @VA02004 00319000 SPACE 00320000 TRANLOOP LR R1,R8 ADDRESS OF PAGE TO R1 00321000 TRANS 2,1,OPT=(BRING,DEFER),ADEX=CFH300,IOER=CFH435 @VA12197 00322500 LR R1,R8 LOAD ADDRESS 00323000 LR R0,R5 LOAD CCPD 00324000 ST R2,SAVEWRK1 SAVE THE REAL ADDRESS FOR LATER 00325000 SLR R2,R2 ZIP THE PARM REG 00326000 CALL DMKRPAPT WRITE PAGE OUT TO SYSVOL 00327000 BNZ CFH435 GET OUT ON ERROR FROM WRITE 00328000 * 00329000 * NOW GET KEYS FOR PAGE AND SAVE IN BUFFER 00330000 * 00331000 RSTRT DS 0H 00332000 L R15,SAVEWRK1 LOAD THE REAL ADDRESS 00333000 L R2,VMSEG GET SEGTABLE ADDRESS 00334000 LR R0,R8 LOAD VIRT ADDRESS 00335000 SRDL R0,16 SEGMENT TO LOW ORDER OF R0, PAG TO R1 00336000 SLL R0,2 INDEX INTO SEGTABLE 00337000 AR R2,R0 R2 NOW POINTS TO ADDRESS OF PAGETABLE 00338000 TM 3(R2),SEGINV VALID SEGMENT @V408246 00339000 BZ SEGVAL YES @V408246 00340000 TRANS 2,8,OPT=DEFER CLEAR SEQMENT INVALID @V408246 00341000 B RSTRT START AGAIN @V408246 00342000 SEGVAL DS 0H 00343000 L R2,0(,R2) NOW CONTAINS ADDRESS OF PAGTABLE 00344000 SRL R1,28 SHIFT PAGE TO LOWORDER OF R1 00345000 SLL R1,3 INDEX INTO SWPTABLE 00346000 LA R2,16*2+8(R1,R2) NOW POINT TO CORRECT SWAPTABLE @V408246 00347000 LH R0,SWPKEY1-SWPFLAG(,R2) LOAD KEYS FOR PAGE @VM03100 00348000 SLR R14,R14 ZIP THE KEY REG 00349000 ISK R14,R15 GET THE PRESENT KEY 00350000 SLL R14,8 SHIFT IT DOWN THE LINE 00351000 A R15,=F'2048' GET ADDRESS OF SECOND HALF OF PAGE 00352000 ISK R14,R15 GET PRESENT KEY FOR THAT HALF 00353000 OR R0,R14 'OR' THE OLD AND THE NEW 00354000 LM R1,R2,SAVEWRK4 LOAD ADDRESS OF BUFFER AND NO. KEYS SAVED 00355000 STH R0,0(R2,R1) STORE KEYS IN BUFFER 00356000 A R2,F2 BUMP COUNT OF KEYS(ALSO INDEXINTO BUFFER) 00357000 ST R2,SAVEWRK5 STORE IT 00358000 SPACE 00359000 BAL R14,NEXTCCPD GET NEXT PAGE SLOT @VA12886 00360100 SPACE 00367000 PAGBUMP EQU * . . . 00368000 AR R8,R10 BUMP PAGE 00369000 CR R8,R9 END OF THIS ENTRY 00370000 BH CHKPAGLN YES - GO SEE IF ANY MORE ENTRIES 00371000 B TRANLOOP NO - GO PROCESS NEXT PAGE 00372000 SPACE 00373000 CHKPAGLN A R3,F4 BUMP R3 TO NEXT PAGNM ENTRY 00374000 BCT R6,SAVELOOP BRANCH IF MORE ENTRIES 00375000 SPACE 00376000 L R5,SAVEWRK2 RESTORE ORIGINAL CCPD 00377000 LH R1,SYSPAGNM FIRST PAGE SAVED @V408246 00378000 SLL R1,12 VIRT. ADDRESS OF FIRST PAGE SAVED@V408246 00379000 TRANS 2,1,OPT=(BRING,DEFER) @V408246 00380000 USING SAVTABLE,R2 00381000 MVC SAVPSW,VMPSW SAVE PSW 00382000 MVC SAVGREGS(L'SAVGREGS*16),VMGPRS SAVE GENERAL @VM03100 00383000 * PURPOSE REGS. 00384000 MVC SAVFPRES(L'SAVFPRES*4),VMFPRS SAVE FLOATING @VM03100 00385000 * POINT REGS 00386000 SPACE 00387000 TM VMPSTAT,VMV370R IS THIS AN EC MACHINE? 00388000 BO SAVECRS BR., WE HAVE EC MACH. 00389000 XC SAVCREGS(L'SAVCREGS*16),SAVCREGS SET THE CREGS @VM03100 00390000 * ... 00391000 MVC SAVCREGS,VMVCR0 .... TO CORRECT @VM03100 00392000 MVC SAVCREGS+C2*4(L'SAVCREGS*2),FFS ... VALUES @VM03100 00393000 MVI SAVCREGS+C14*4,HEXC4 SET CR14 @VM03100 00394000 MVI SAVCREGS+C15*4+2,HEX02 SET SAVCR15 @VM03100 00395000 B KEYSAVE NOW GO SAVE THE KEYS. 00396000 SAVECRS EQU * 00397000 L R10,VMECEXT ADDRESS OF ECBLOK 00398000 USING ECBLOK,R10 00399000 MVC SAVCREGS(L'SAVCREGS*16),EXTCR0 SAVE CREGS @VM03100 00400000 DROP R10 00401000 SPACE 00402000 KEYSAVE EQU * 00403000 LM R8,R9,SAVEWRK4 ADDRESS AND LENGTH OF KEY FIELD 00404000 LR R7,R8 SAVE THE BUFFER ADDRESS 00405000 LR R3,R9 LENGTH TO R3 FOR LONG MOVE 00406000 LA R2,SAVKEYS ADDRESS OF KEYS IN THE SAVETABLE 00407000 MVCL R2,R8 MOVE THE KEYS 00408000 LR R0,R5 LOAD CCPD FOR FIRST DASD PAGE 00409000 LH R1,SYSPAGNM STARTING PAGE NO. @V408246 00410000 SLL R1,12 STARTING VIRTUAL ADDRESS @V408246 00411000 CALL DMKRPAPT,PARM=0 @V408246 00412000 BNZ CFH435 GET OUT ON ERROR FROM WRITE @VA10709 00412100 L R0,SAVEWRK9 LOAD SIZE OF BUFFER 00413000 LR R1,R7 ADDRESS OF BUFFER 00414000 CALL DMKFRET RELEASE BUFFER 00415000 SR R0,R0 CLEAR REGISTER @VA10709 00415100 ST R0,SAVEWRK9 CLEAR SAVEWRK9 TO INDICATE @VA10709 00415200 * BUFFER HAS BEEN FRETTED 00415300 LH R1,SYSPAGNM FIRST PAGE SAVED @V408246 00416000 SLL R1,12 VIRT. ADDRESS OF FIRST PAGE SAVE @V408246 00417000 BAL R14,NEXTCCPD GET NEXT PAGE SLOT @VA12886 00418100 LR R0,R5 SAVE ADDRESS @VA12886 00418300 CALL DMKRPAGT,PARM=0 @V408246 00422000 BNZ CFH435 GET OUT ON ERROR FROM READ @VA10709 00422100 SPACE 1 00423000 SAVEFINI MSG 'SYSTEM SAVED' SEND CONFIRMATION MESSAGE 00424000 CALL DMKQCNWT,PARM=NORET SEND THE MSG 00425000 SPACE 1 00426000 * CHECK IF NAMED SYSTEM IS ALREADY ACTIVE 00427000 L R2,=A(DMKVMAS1) GET ANCHOR OF SHARED SYSTEMS @VM03171 00428000 L R5,0(,R2) GET FIRST SHRTABLE (IF ANY) @V304735 00429000 USING SHRTABLE,R5 ADDRESSABILITY @V304735 00430000 EXAMSHR CR R5,R2 IS IT END OF THE CHAIN ? @V304735 00431000 BE CFHEXIT IF YES - SHRTABLE NOT BEING USED @V304735 00432000 CLC SYSNAME,SHRNAME DO NAMES MATCH ? @VM03100 00433000 BE EXAMSHR1 YES @V304735 00434000 L R5,SHRFPNT GET NEXT ONE IN CHAIN @V304735 00435000 LA R5,0(,R5) CLEAR FLAG BYTE @V60BC11 00435100 B EXAMSHR KEEP SEARCHING @V304735 00436000 EXAMSHR1 LM R1,R2,SHRFPNT UNCHAIN THE SHRTABLE @V304735 00437000 STCM R1,B'0111',SHRFPNT+1-SHRTABLE(R2) FROM THE @V60BC11 00438000 ST R2,SHRBPNT-SHRTABLE(,R1) ACTIVE LIST @V304735 00439000 STCM R5,B'0111',SHRFPNT+1 CHAIN THIS ONE @V60BC11 00440000 ST R5,SHRBPNT TO ITSELF...... @V304735 00441000 B CFHEXIT EXIT @V304735 00442000 DROP R5 @V304735 00443000 EJECT 00444000 NOSYSOWN EQU * VOLID NOT CP OWNED @V200820 00445000 MVC SAVEWRK4+1(L'SYSVOL),SYSVOL MOVE IN VOLID @VM03100 00446000 MVI SAVEWRK4,SEP00 MOVE IN FIELD DELIMITER @VM03100 00447000 LA R0,LEN15 LOAD LENGTH OF ERROR MSG PARM @VM03100 00448000 LA R1,SAVEWRK2 LOAD PARM REG WITH ADDRESS OF MSG@VM03100 00449000 B CFH179 GO WRITE ERROR MSG DMKCFH179 @VM03100 00450000 NOSYSVOL MVC SAVEWRK4+1(L'SYSVOL),SYSVOL VOL SER FOR ERR MSG @VM03100 00451000 B LOADLEN GO SET UP LENGTH PARM REG @VM03100 00452000 NOSYSRES MVC SAVEWRK4+1(L'VSYSRES),VSYSRES VIRT SYSRES VOL @VM03100 00453000 * SER FOR MSG 00454000 LOADLEN MVI SAVEWRK4,SEP00 MOVE IN FIELD SEPARATOR @VM03100 00455000 LA R0,LEN15 LOAD PARM REG LENGTH OF PARMS @VM03100 00456000 LA R1,SAVEWRK2 LOAD ADDRESS OF ERROR MSG PARMS @VM03100 00457000 B CFH171 GO TO WRITE ERROR MSG ROUTINE @VM03100 00458000 BLD172 EQU * INCOMPATIBLE VSYSRES 00459000 BAL R10,GETVADDR BUILD VADDR 00460000 B CFH172 GO TO WRITE ERROR MSG ROUTINE @VM03100 00461000 SPACE 00462000 BLD173 EQU * VADDR REQUIRED 00463000 BAL R10,GETVADDR BUILD VADDR 00464000 B CFH173 GO TO WRITE ERROR MSG ROUTINE @VM03100 00465000 SPACE 00466000 GETVADDR LH R1,SYSVADDR LOAD VADDR FROM SYSTBL 00467000 CALL DMKCVTBH CONVERT IT 00468000 ICM R1,8,F0 INSERT THE SEPARATER 00469000 ST R1,SAVEWRK4 STORE DEV ADDRESS IN MSG TEXT 00470000 LA R0,12 FIELD LENGTH 00471000 LA R1,SAVEWRK2 FIELD ADDRESS 00472000 BR R10 RETURN 00473000 DROP R2,R4,R8 00474000 EJECT 00475000 CFHEXIT BAL R10,SYSTUNLC UNLOCK SYSTEM NAME TABLE(DMKSNT) @V304635 00476000 EXIT RETURN TO CALLER @V304635 00477000 SPACE 2 00478000 SPACE 00479000 GETSNTBL L R4,SAVEWRK6 IS SYSNAME TABLE ALLREADY IN @V304635 00480000 * STORAGE 00481000 LTR R4,R4 ..... @V304635 00482000 BNZR R5 IF IT IS - RETURN TO CALLER @V304635 00483000 L R1,=A(DMKSNTBL) ADDRESS OF SYSNAME TABLE @V304635 00484000 TRANS 2,1,OPT=(BRING,DEFER,LOCK,SYSTEM) @V304635 00485000 LR R4,R2 ADDRESS OF SYSTABLE TO R4 @V304635 00486000 ST R2,SAVEWRK6 SAVE ADDRESS OF SYSNAME TABLE @V304635 00487000 BR R5 RETURN TO CALLER @V304635 00488000 NEXTCCPD EQU * HERE TO INCREMENT PAGE NUMBER @VA12886 00488100 AL R5,F256 INCREMENT PAGE NUMBER FIRST @VA12886 00488110 CLM R5,B'0010',SAVEWRK7+2 TEST PAGE # TO PAGE/CYL @VA12886 00488120 BNHR R14 NOT CYL BOUNDARY RETURN @VA12886 00488130 AL R5,=F'65536' INCREMENT CYLINDER NUMBER @VA12886 00488140 ICM R5,B'0010',F256+2 RESET PAGE # TO ONE @VA12886 00488150 BR R14 RETURN @VA12886 00488160 EJECT 00489000 SYSTUNLC ST R2,SAVEWRK9 SAVE ERROR CODE REGISTER @V304635 00490000 L R2,SAVEWRK6 TEST IF DMKSNT TABLE IN STORAGE @V304635 00491000 LTR R2,R2 IS IT ? @V304635 00492000 BNZ PTRUL IF IS - UNLOCK IT. @V304635 00493000 L R2,SAVEWRK9 RESTORE R2 @V304635 00494000 BR R10 RETURN TO CALLER @V304635 00495000 PTRUL CALL DMKPTRUL UNLOCK THE SYSNAME TABLE @V304635 00496000 XC SAVEWRK6,SAVEWRK6 ZERO OUT ADDRESS OF SYSNAME @V304635 00497000 * TABLE 00498000 L R2,SAVEWRK9 RESTORE ERROR CODE REGISTER @V304635 00499000 BR R10 RETURN TO CALLER @V304635 00500000 SPACE 2 00501000 FREEKBUF L R0,SAVEWRK9 BUFFER LENGTH 00502000 LTR R0,R0 IS THERE A BUFFER TO FRET? @VA10709 00502100 BZ NOVAR NO,THEN CONTINUE WITHOUT FRET @VA10709 00502200 L R1,SAVEWRK4 BUFFER ADDRESS 00503000 CALL DMKFRET FRET THE BUFFER 00504000 BR R10 RETURN 00505000 SPACE 2 00506000 SAVENAME MVC SAVEWRK2(0),0(R1) @V304635 00507000 EJECT 00508000 CFH026 LA R2,EMSG026 LOAD ERROR CODE 00509000 B NOVAR GO SET UP ERROR MSG DMKCFH026 00510000 CFH044 LA R0,L'SYSNAME LOAD LENGTH OF FIELD 00511000 LA R1,SAVEWRK2 FIELD ADDRESS 00512000 LA R2,EMSG044 LOAD ERROR CODE @VM03100 00513000 B CALLERM GO SET UP ERROR MSG DMKCFH044 @VM03099 00514000 SPACE 1 00515000 SPACE 00516000 CFH170 LA R0,L'SYSNAME LOAD LENGTH OF FIELD @VM03201 00517000 LA R1,SAVEWRK2 FIELD ADDRESS @VM03201 00518000 LA R2,EMSG170 LOAD ERROR CODE @VM03201 00519000 B CALLERM ..... 00520000 SPACE 00521000 CFH171 LA R2,EMSG171 LOAD ERROR CODE @VM03100 00522000 B CALLERM GO SET UP ERROR MSG DMKCFH171 @VM03099 00523000 SPACE 00524000 CFH172 LA R2,EMSG172 LOAD ERROR CODE @VM03100 00525000 B CALLERM GO SET UP ERROR MSG DMKCFH172 @VM03099 00526000 SPACE 00527000 CFH173 LA R2,EMSG173 LOAD ERROR CODE @VM03100 00528000 B CALLERM GO SET UP ERROR MSG DMKCFH173 @VM03099 00529000 SPACE 1 00530000 CFH179 LA R2,EMSG179 LOAD ERROR CODE @VM03100 00531000 B CALLERM GO SET UP ERROR MSG DMKCFH179 @VM03099 00532000 SPACE 1 00533000 CFH300 LA R2,EMSG300 LOAD ERROR CODE @VM03100 00534000 BAL R10,FREEKBUF GO RELEASE THE KEY BUFFER @VA04160 00535000 B CALLERM GO SET UP ERROR MSG DMKCFH300 @VM03099 00536000 SPACE 00537000 CFH435 LA R2,EMSG435 LOAD ERROR CODE @VM03100 00538000 BAL R10,FREEKBUF GO RELEASE THE KEY BUFFER @VA04160 00539000 SPACE 3 00540000 NOVAR SLR R1,R1 ZIP THE PARM REG 00541000 CALLERM BAL R10,SYSTUNLC UNLOCK SYSNAME TABLE @V304635 00542000 ICM R0,B'1110',MODID+3 INSERT MODULE IDENT. @VM03100 00543000 ERMSG CALL DMKERMSG SEND THE ERROR MESSAGE @V304635 00544000 ***************************************************************** 00545000 * ERMSG WILL RETURN DIRECTLY TO DMKCFM -- NOT HERE -- 00546000 ***************************************************************** 00547000 EJECT 00548000 ********************************************************** 00549000 * * 00550000 * MODULE EQUATES * 00551000 ********************************************************** 00552000 SPACE 1 00553000 PAGE2314 EQU 32 NUMBER OF PAGES PER CYLINDER @VM03100 00554000 * (2314/2319). 00555000 PAGE3330 EQU 57 NUMBER OF PAGES PER CYLINDER @VM03100 00556000 * (3330). 00557000 PAGE3350 EQU 120 NUMBER OF PAGES PER CYLINDER @VM03100 00558000 * (3350). 00559000 PAGE3375 EQU 96 Number of pages per cylinder HRC106DK 00559100 * (3375) HRC106DK 00559200 PAGE3380 EQU 150 Number of pages per cylinder HRC106DK 00559300 * (3380) HRC106DK 00559400 PAGE2305 EQU 24 NUMBER OF PAGES PER CYLINDER @VM03100 00560000 * (2305/3340). 00561000 * 00562000 LEN0 EQU 0 LENGTH VALUE OF 0 @VM03100 00563000 LEN3 EQU 3 LENGTH VALUE OF 3 @VM03100 00564000 LEN4 EQU 4 LENGTH VALUE OF 4 @VM03100 00565000 LEN15 EQU 15 LENGTH VALUE OF 15 @VM03100 00566000 * 00567000 CC0 EQU X'00' VALUE FOR CONDITION CODE 0 @VM03100 00568000 CC1 EQU X'10' VALUE FOR CONDITION CODE 1 @VM03100 00569000 CC2 EQU X'20' VALUE FOR CONDITION CODE 2 @VM03100 00570000 CC3 EQU X'30' VALUE FOR CONDITION CODE 3 @VM03100 00571000 * 00572000 ONE EQU 1 VALUE OF ONE @VM03100 00573000 * 00574000 SEGINDEX EQU 1 SEGMENT INDEX VALUE OF 1 @VM03100 00575000 * 00576000 INDEX1 EQU 1 INDEXING BY 1 @VM03100 00577000 INDEX4 EQU 4 INDEXING BY 4 @VM03100 00578000 * 00579000 RETPLUS4 EQU 4 VALUE USED FOR RETURNING PLUS 4 @VM03100 00580000 * 00581000 SEP00 EQU X'00' SEPARATOR CHARACTER @VM03100 00582000 * 00583000 HEX00 EQU X'00' VALUE OF X'00' @VM03100 00584000 HEXC4 EQU X'C4' HEX VALUE OF X'C4' @VM03100 00585000 HEX02 EQU X'02' HEX VALUE OF X'02' @VM03100 00586000 * 00587000 PAGHDR EQU 2 LENGTH OF PAGHDR @VM03100 00588000 SWPHDR EQU 8 LENGTH OF SWPHDR @VM03100 00589000 * 00590000 EMSG006 EQU 6 ERROR MESSAGE NUMBER 006 @VM03100 00591000 EMSG026 EQU 26 ERROR MESSAGE NUMBER 026 @VM03100 00592000 EMSG044 EQU 44 ERROR MESSAGE NUMBER 044 @VM03100 00593000 EMSG170 EQU 170 ERROR MESSAGE NUMBER 170 @VM03100 00594000 EMSG171 EQU 171 ERROR MESSAGE NUMBER 171 @VM03100 00595000 EMSG172 EQU 172 ERROR MESSAGE NUMBER 172 @VM03100 00596000 EMSG173 EQU 173 ERROR MESSAGE NUMBER 173 @VM03100 00597000 EMSG179 EQU 179 ERROR MESSAGE NUMBER 179 @VM03100 00598000 EMSG300 EQU 300 ERROR MESSAGE NUMBER 300 @VM03100 00599000 EMSG435 EQU 435 ERROR MESSAGE NUMBER 435 @VM03100 00600000 SPACE 2 00601000 LTORG * @VM03100 00602000 SPACE 00603000 USERSTOR DSECT @VM03100 00604000 CYLAREA DS XL2 FILLER @VM03100 00605000 DEVAREA DS XL2 PLACE FOR DEVICE ADDRESS @VM03100 00606000 DS 4X FILLER @VM03100 00607000 MSGBYTE DS XL2 PLACE FOR MESSAGE INFORMATION @VM03100 00608000 STOPBYTE DS 1X STOP FLAG @VM03100 00609000 * 00610000 * BITS DEFINED IN STOPBYTE 00611000 NOSTOP EQU X'00' NO STOP ON IPL @VM03100 00612000 IPLSTOP EQU X'80' STOP ON IPL @VM03100 00613000 SPACE 00614000 COPY SHRTABLE @VM03100 00615000 PSA , @V306638 00616000 COPY CORE @V306638 00617000 COPY DEVTYPES @V306638 00618000 COPY EQU @V306638 00619000 COPY RBLOKS @V306638 00620000 COPY SAVE @V306638 00621000 COPY SAVTABLE @V306638 00622000 COPY SYSTBL @V306638 00623000 COPY VBLOKS @V306638 00624000 COPY VMBLOK @V306638 00625000 END 00626000