ibm:vm370-lib:cp:dmkcfh.assemble_src
Table of Contents
DMKCFH Source
References
- Fixes Applied : 6
- This Source Date : Thursday, December 7, 1978
- Last Fix ID : [HRC106DK]
Source Listing
- DMKCFH.ASSEMBLE.txt
- 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
ibm/vm370-lib/cp/dmkcfh.assemble_src.txt ยท Last modified: 2023/08/06 13:36 by Site Administrator