CFG TITLE 'DMKCFG (CP) VM/370 - RELEASE 6' 00001000 ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000 *. 00003000 * MODULE NAME - 00004000 * 00005000 * DMKCFG 00006000 * 00007000 * FUNCTION - 00008000 * 00009000 * TO HANDLE GENERAL COMMANDS 00010000 * 00011000 * ATTRIBUTES - 00012000 * 00013000 * REENTRANT, PAGEABLE, CALLED VIA SVC 00014000 * 00015000 * CONTENTS - 00016000 * 00017000 * DMKCFGCL - TO HANDLE DIAGNOSE CODE X'64' 00018000 * DMKCFGII - ENTRY TO IPL FROM LOGON (DMKLOG) 00019000 * DMKCFGIP - ENTRY TO IPL FROM COMMAND LINE (DMKCFM) 00020000 * 00021000 * ENTRY CONDITIONS FOR DMKCFGIP 00022000 * 00023000 * GPR9 = ADDRESS OF COMMAND LINE BUFFER 00024000 * GPR11 = ADDRESS OF CALLER'S VMBLOK 00025000 * GPR12 = ADDRESS OF ENTRY POINT 00026000 * GPR13 = ADDRESS OF SAVEAREA 00027000 * 00028000 * ENTRY CONDITIONS FOR DMKCFGII 00029000 * 00030000 * GPR0 = LENGTH OF INPUT ARGUMENT 00031000 * GPR1 = ADDRESS OF INPUT ARGUMENT 00032000 * GPR11 = ADDRESS OF CALLER'S VMBLOK 00033000 * GPR12 = ADDRESS OF ENTRY POINT 00034000 * GPR13 = ADDRESS OF SAVEAREA 00035000 * 00036000 * ENTRY CONDITIONS FOR DMKCFGCL - 00037000 * GPR 1-2 = NAME OF THE NAMED SYSTEM ISSUED FOR DIAG, X'64' 00038000 * GPR3 = CODE FUNCTION BYTE 00039000 * 00040000 * EXIT CONDITIONS FOR DMKCFGII & DMKCFGIP 00041000 * 00042000 * NORMAL - 00043000 * THE USERS VMBLOK HAS BEEN UPDATED TO RESUME EXECUTION 00044000 * AT THE SAVE POINT IN THE NEWLY IPL'D SYSTEM 00045000 * 00046000 * ERROR - 00047000 * DMKERMSG HAS BEEN CALLED TO SEND AN ERROR MESSAGE 00048000 * 00049000 * EXIT CONDITIONS FOR DMKCFGCL - 00050000 * 00051000 * NORMAL - 00052000 * THE USERS CONDITION CODE IN THE PSW IS SET TO ZERO 00053000 * THE USERS VIRTUAL REG'S 1-2 IS SET ACCORDING TO THE 00054000 * DIAGNOSE FUNCTION SELECTED. 00055000 * 00056000 * ERROR - 00057000 * THE USER'S CONDITION CODE IS NON-ZERO, AND INDICATES THE TYPE 00058000 * OF ERROR CONDITION. 00059000 * THE USER'S REG'S. REMAIN UNCHANGED. 00060000 * 00061000 * CALLS TO OTHER ROUTINES - 00062000 * 00063000 * DMKCVTBH - CONVERT HEX TO BINARY 00064000 * DMKCVTDB - CONVERT DECIMAL TO BINARY 00065000 * DMKFREE - TO OBTAIN STORAGE 00066000 * DMKPTRUL - TO UNLOCK A PAGE 00067000 * DMKPTRLK - TO LOCK A PAGE 00068000 * DMKSCNVS - TO FIND A VOLUME 00069000 * DMKSCNVU - TO FIND A VIRTUAL UNIT 00070000 * DMKVATMD - ALLOCATE & INITIALIZE SHADOW TABLES 00071000 * DMKFRET - TO RETURN A BLOCK OF STORAGE 00072000 * DMKRPAGT - TO GET A PAGE FROM BACKING STORAGE 00073000 * DMKCVTBH - TO CONVERT BINARY TO HEX 00074000 * DMKSCNFD - LOCATE THE NEXT ARGUMENT ON THE COMMAND LINE 00075000 * DMKPTRAN - LOCATE AND FETCH A PAGE OF VIRTUAL STORAGE 00076000 * DMKERMSG - TO SEND ERROR MESSAGES TO TERMINAL 00077000 * DMKBLDRT - TO BUILD PAGE/SWAP AND SEGMENT TABLES 00078000 * DMKPGSPR - TO RELEASE AND UNLOCK A RANGE OF VIRTUAL STORAGE 00079000 * DMKPGSPO - TO RELEASE ALL OF VIRTUAL STORAGE 00080000 * DMKPGSFS - TO LOCATE A NAMED SYSTEM IN THE USER'S VIRT. STOR. 00081000 * DMKPGSPS - TO RELEASE A NAMED SYSTEM FROM THE USER 00082000 * DMKPGSPP - TO RELEASE A VIRTUAL PAGE 00083000 * DMKCFPRR - TO PERFORM A VIRTUAL SYSTEM RESET 00084000 * DMKVMAS1 - ANCHOR FOR SHARED SYSTEMS (SHRTABLE POINTER) 00085000 * DMKVMAS2 - ANCHOR FOR NAMED SYSTEMS (SHRTABLE POINTER) 00086000 * 00087000 * EXTERNAL REFERENCES - 00088000 * 00089000 * 00090000 * TABLES / WORKAREAS - 00091000 * 00092000 * DMKSNTBL - SYSTEM NAME TABLE 00093000 * 00094000 * 00095000 * REGISTER USAGE - 00096000 * 00097000 * GPR0 = LENGTH OF ARGUMENT (RETURNED BY DMKSCNFD) 00098000 * GPR1 = ADDRESS OF ARGUMENT (RETURNED BY DMKSCNFD) 00099000 * GPR2 = PARMS PASSED TO CALLED ROUTINES 00100000 * GPR3 = LENGTH FOR EXECUTED MOVES AND COMPARES 00101000 * GPR4 = INTERNAL LINKAGE (2ND LEVEL) 00102000 * GPR5 = INTERNAL LINKAGE (2ND LEVEL) 00103000 * GPR6-8 NOT USED 00104000 * GPR9 = ADDRESS OF COMMAND LINE BUFFER 00105000 * GPR10 = IOBLOK BASE 00106000 * GPR11 = VMBLOK BASE 00107000 * GPR12 = MODULE BASE 00108000 * GPR13 = SAVEAREA BASE 00109000 * GPR14 = EXTERNAL LINKAGE 00110000 * GPR15 = EXTERNAL LINKAGE 00111000 * 00112000 * OPERATION - 00113000 * 00114000 * THE COMMAND HANDLING ROUTINES IN DMKCFG ARE CALLED FROM DMKCFM 00115000 * AFTER THEIR PRIVILEGE CLASS HAS BEEN VERIFIED 00116000 * THE FORMAT AND OPERATION OF EACH COMMAND IS DESCRIBED IN S 00117000 * SEPARATE COMMAND PROLOGUES BELOW 00118000 * 00119000 *. 00120000 EJECT 00121000 COPY OPTIONS 00122000 COPY LOCAL 00123000 DMKCFG CSECT 00124000 MODID DC CL8'DMKCFG' MODULE NAME @VM03098 00125000 USING DMKCFG,R12 00126000 SPACE 3 00127000 USING PSA,R0 00128000 USING VMBLOK,R11 00129000 USING SAVEAREA,R13 00130000 SPACE 2 00131000 EXTRN DMKSCNFD 00132000 EXTRN DMKSYSAP 00132002 EXTRN DMKPTRUL 00133000 EXTRN DMKCVTBH 00134000 EXTRN DMKSNTBL 00135000 EXTRN DMKSCNVS 00136000 EXTRN DMKSCNVU 00137000 EXTRN DMKRPAGT 00138000 EXTRN DMKERMSG 00139000 EXTRN DMKCVTHB,DMKPGSPO,DMKPGSPR,DMKVMI 00140000 EXTRN DMKBLDRT,DMKVATMD,DMKCVTDB,DMKCFPRR @VM03171 00141000 EXTRN DMKPGSPS @VA11919 00142100 EXTRN DMKVMAS1,DMKVMAS2 @VM03171 00143000 EXTRN DMKPGSPP @VA05638 00144000 EJECT 00145000 *. 00146000 * 00147000 * SUBROUTINE NAME - 00148000 * 00149000 * DMKCFGIP 00150000 * FUNCTION - 00151000 * 00152000 * TO INITIATE AN INITIAL PROGRAM LOAD FUNCTION FOR THE 00153000 * VIRTUAL MACHINE. 00154000 * 00155000 * ENTRY POINTS - 00156000 * DMKCFGII - ENTRY TO IPL FROM LOGON (DMKLOG). 00157000 * DMKCFGIP - ENTRY TO IPL FROM COMMAND PROCESSING (DMKCFM). 00158000 * 00159000 * COMMAND LINE FORMAT - 00160000 * 00161000 * +-----+---------------------------------------------------+ 00162000 * | IPL | VADDR | 00163000 * | I | | 00164000 * | | | 00165000 * | | SYSTEM NAME | 00166000 * +-----+---------------------------------------------------+ 00167000 * 00168000 * OPERATION - 00169000 * 00170000 * 1. DMKCFGII - ENTRY FROM LOGON. SET FLAG TO INDICATE 00171000 * THIS AND GO TO STEP 3. 00172000 * 2. DMKCFGIP - ENTRY FROM DMKCFM. SET DEFAULT FLAG (NOCLEAR). 00173000 * CALL DMKSCNFD TO LOCATE THE FIRST ARGUMENT. IF NONE FOUND, 00174000 * CALL DMKERMSG TO SEND ERROR MESSAGE DMKCFG026E. 00175000 * 3. IF THE LENGTH OF THE FIRST ARGUMENT IS OVER THREE 00176000 * CHARACTERS, IT MUST BE A NAME(NOT A DEVICE ADDRESS) SO GO 00177000 * TO STEP 10. IF THREE CHARACTERS OR LESS, IT COULD BE 00178000 * EITHER. CALL DMKCVTHB TO CONVERT THE ARGUMENT TO BINARY. 00179000 * 4. IF THE CONVERT FAILS, IT IS ASSUMED TO BE AN IPL BY NAME 00180000 * SO GO TO STEP 10. 00181000 * 5. IF THE CONVERT IS SUCCESSFUL, IT IS ASSUMED TO BE AN IPL 00182000 * BY DEVICE ADDRESS. IF ENTERED FROM LOGON, GO STEP 15. 00183000 * 6. CALL DMKSCNFD TO LOCATE THE NEXT ARGUMENT. IF NONE ARE 00184000 * FOUND, GO TO STEP 12. 00185000 * 6A. IF ARGUMENT IS 'STOP' SET UP FLAG ACCORDINGLY AND GO 00186000 * BACK TO STEP 6. 00187000 * 7. IF THE ARGUMENT IS 'CLEAR', GO TO STEP 8. IF IT IS NOT 00188000 * 'NOCLEAR', GO TO STEP 9. IF 'NOCLEAR', CHECK FOR THE PROPER 00189000 * ABREVIATION AND IF IN ERROR CALL DMKERMSG TO SEND ERROR 00190000 * MESSAGE DMKCFG002E. IF 'CLEAR' HAD PREVIOSLY BEEN ENTERED, 00191000 * CALL DMKERMSG TO SEND ERROR MESSAGE DMKCFG013E. IF NOCLEAR 00192000 * HAS BEEN ENTERED TWICE, CALL DMKERMSG TO SEND ERROR 00193000 * MESSAGE DMKCFG003E. IF OK, SET THE NOCLEAR FLAG AND GO 00194000 * BACK TO STEP 6. 00195000 * 8. IF 'NOCLEAR' HAS PREVIOSLY BEEN ENTERED, CALL DMKERMSG 00196000 * TO SEND ERROR MESSAGE DMKCFG013E. IF 'CLEAR' HAS BEEN 00197000 * ENTERED TWICE, CALL DMKERMSG TO SEND ERROR MESSAGE 00198000 * DMKCFG003E. IF OK, SET CLEAR FLAG AND GO BACK TO STEP 6. 00199000 * 9. BAL TO STEP 44 TO CHECK FOR 'PARM'. IF A PARM WAS PROCESSED 00200000 * GO TO STEP 12. IF NOT, CALL DMKCVTDB TO CONVERT THE CYL-NO 00201000 * TO BINARY. IF THE CONVERT FAILS, CALL DMKERMSG TO SEND 00202000 * ERROR MESSAGE DMKCFG002E. IF A CYL-NO HAD BEEN ENTERED 00203000 * PREVIOUSLY, CALL DMKERMSG TO SEND ERROR MESSAGE DMKCFG002E. 00204000 * IF OK, SAVE THE CYL-NO IN SAVEWRK4 AND GO BACK TO STEP 6. 00205000 * 10.SET THE FLAG TO INDICATE A NAMED IPL. IF ENTERED FROM 00206000 * LOGON, GO TO STEP 19. IF NOT, CALL DMKSCNFD TO CHECK FOR 00207000 * 11.IF ONE IS FOUND, BAL TO STEP 44 TO CHECK FOR 'PARM'. IF NO 00208000 * ARGUMENT IS FOUND, GO TO STEP 13. WHEN RETURN FROM 00209000 * STEP 44, TEST IF 'PARM' WAS PROCESSED. IF NOT WE HAVE AN 00210000 * ERROR. CALL DMKERMSG TO SEND ERROR MESSAGE DMKCFG003E -ELSE 00211000 * GO TO STEP 13. 00212000 * 12. SET UP THE PARAMETER REG 2 FOR DMKPGS - EITHER CLEAR OR 00213000 * NOCLEAR. 00214000 * 13 CALL DMKPSGPO TO CLEANUP FROM ANY PREVIOUS IPL. 00215000 * 14. CALL DMKCFPRR TO RESET THE VIRTUAL MACHINE. IF IPL BY 00216000 * NAME GO TO STEP 20 - ELSE CONTINUE. 00217000 * 15. IF THE VIRTUAL MACHINE SIZE IS 64 PAGES OR LARGER, USE 00218000 * ADDRESS 40000 HEX FOR THE ADDRESS FOR THE IPL SIMULATOR. 00219000 * GO STEP 17. 00220000 * 16. IF THE VIRTUAL MACHINE SIZE IS LESS THAN 64 PAGES, 00221000 * CALCULATE THE ADDRESS OF THE MIDDLE PAGE OF THE VIRTUAL 00222000 * MACHINE TO BE USED FOR THE IPL SIMULATOR. 00223000 * 17. CALL DMKRPAGT TO BRING THE IPL SIMULATOR (DMKVMI) INTO 00224000 * THE ALLOCATED PAGE. 00225000 * 18. CALL DMKSCNVU TO INSURE THE VIRTUAL ADDRESS WAS VALID. IF 00226000 * NOT VALID, CALL DMKERMSG TO SEND ERROR MESSAGE DMKCFG040E. 00227000 * IF OK, SET UP USER PAGE ZERO WITH THE IPL DEVICE ADDRESS 00228000 * CONSOLE ADDRESS, AND THE CYLINDER NUMBER. 00229000 * 18A. IF 'STOP' WAS REQUESTED, SET THE IPL STOP FLAG TO 00230000 * ONE AT LOCATION 'E'. 00231000 * 19. IF IPL-ING A SHARED SYSTEM, TURN OFF VM ASSIST. IF IPL-ING 00232000 * A NONSHARED SYSTEM AND IF USER WANTS VM ASSIST ON, AND IF 00233000 * TRACING IS NOT IN EFFECT, AND IF USER HAS NO DEDICATED 00234000 * CHANNELS, THEN TURN ON VM ASSIST. 00235000 * 19A. IF ENTERED FROM LOGON, EXIT. IF ENTERED FROM DMKCFM, 00236000 * SET UP TO RETURN PLUS 4 AND EXIT. 00237000 * 20. TRANS AND LOCK DMKSNT. IF THE NAME ENTERED IS IN 00238000 * EXCESS OF 8 CHARACTERS, BAL TO STEP 43 TO UNLOCK 00239000 * DMKSNT AND CALL DMKERMSG TO SEND ERROR MESSAGE 00240000 * DMKCFG044E. 00241000 * 21. COMPARE THE ARGUMENT TO THE SYSNAME IN THE SYSTBL. 00242000 * IF THEY COMPARE SKIP TO STEP 23A 00243000 * 22. IF LAST ENTRY IN SYSTBL, BAL TO STEP 43 TO UNLOCK THE 00244000 * SYSTBL. THEN CALL DMKERMSG TO SEND ERROR MESSAGE 00245000 * DMKCFG044. IF NOT THE LAST ENTRY - CONTINUE. 00246000 * 23. GET NEXT ENTRY FROM SYSTBL AND GO TO STEP 21. 00247000 * 23A IF ENTRY FOR IPL, GO TO STEP 24 00248000 * ELSE CALL DMKPGSPR AND SKIP TO STEP 24A. 00249000 * 24. IF THE MINIMUM SYSTEM SIZE IS GREATER THAN THE SIZE OF 00250000 * THE VIRTUAL MACHINE, BAL TO STEP 42 TO UNLOCK THE SYSTBL 00251000 * AND THEN CALL DMKERMSG TO SEND ERROR MESSAGE DMKCFG170E. 00252000 * 24A CALL DMKBLDRT TO BUILD PAGE AND SWAP TABLES 00253000 * FROM THE 1ST SAVED PAGE TO THE SYSSIZE 00254000 * 25. CALL DMKSCNVS TO FIND IF VIRTUAL SYSRES VOLUME IS 00255000 * MOUNTED. IF NOT MOUNTED, GO TO STEP 42. 00256000 * 26.CALL DMKSCNVU TO FIND VIRTUAL DEVICE BLOKS FOR THE VADDR 00257000 * OF VSYSRES. IF NOT FOUND, DMKERMSG TO SEND ERROR 00258000 * MESSAGE DMKCFG173E. 00259000 * 27. CALL DMKSCNVS TO FIND IF SYSVOL IS MOUNTED. IF NOT 00260000 * MOUNTED, GO TO STEP 42. 00261000 * 28. CALL DMKRPAGT TO BRING IN THE SAVTABLE. 00262000 * 29. INITIALIZE THE VIRTUAL REGISTERS AND VIRTUAL PSW. 00263000 * 30. INITIALIZE THE NEXT RANGE OF PAGES TO PROCESS. 00264000 * 31. COMPUTE THE ADDRESS OF THE NEXT SWPTABLE ENTRY. 00265000 * 32. STORE THE 'CCPD' FOR THE SAVED PAGE AND THE SAVED KEYS 00266000 * INTO THE SWPTABLE ENTRY. IF THERE ARE MORE PAGES TO THIS 00267000 * GROUP, GO BACK TO STEP 31 - ELSE CONTINUE. 00268000 * 33. IF THERE ARE MORE RANGES TO PROCESS, GO TO STEP 30. 00269000 * 34. IF THERE ARE NO SHARE SEGMENTS TO PROCESS, GO TO STEP 41. 00270000 * IF SHARED SYSTEM DOES NOT ALREADY EXIST, GO TO STEP 37. 00271000 * 35. GET THE NEXT SHARED SEGTABLE ENTRY. 00272000 * 36. POINT THE SEGTABLE TO THE SHARED PAGTABLE AND CALL 00273000 * DMKFRET TO FRET THE ORIGINAL PAG AND SWPTABLES. IF THERE 00274000 * ARE MORE SHARED SEGMENTS TO PROCESS, GO BACK TO STEP 35. 00275000 * IF NO MORE, GO TO STEP 40. 00276000 * 37. COME HERE IF HAVE TO BUILD NEW SHRTABLE. CALL DMKFREE TO 00277000 * GET STORAGE FOR SHRTABLE. 00278000 * 38. GET NEXT SHARED SEGTABLE ENTRY. 00279000 * 39. FLAG THE SWPTABLE FOR THIS SEGMENT AS SHARED. IF MORE 00280000 * SEGMENTS ARE TO BE PROCESSED, GO BACK TO STEP 38. IF NOT, 00281000 * INSERT THE SHRTABLE INTO THE CHAIN OF SHRTABLES. 00282000 * 40. STORE THE SHRTABLE ADDRESS IN THE VMBLOK. 00283000 * 41. BAL TO STEP 43 TO UNLOCK DMKSNT. IF VIRTUAL SYSTEM IS IN 00284000 * ECMODE WITH TRANSLATE ON, CALL DMKVATMD TO SET UP SHADOW 00285000 * TABLES. THEN GO TO STEP 19. 00286000 * 42. BAL TO STEP 43 TO UNLOCK DMKSNT AND THEN CALL DMKERMSG 00287000 * TO SEND ERROR MESSAGE DMKCFG171E. 00288000 * 43. SUBROUTINE TO UNLOCK DMKSNT. CALL DMKPTRUL TO 00289000 * DO THE UNLOCK. THEN RETURN ON REG 9. 00290000 * 44. SUBROUTINE TO PROCESS 'PARM' FIELDS. FIRST CHECK IF THE 00291000 * ARGUMENT PASSED IS 'PARM'. IF NOT, RETURN ON REG 8. IF IT 00292000 * IS, CALL DMKSCNFD TO LOCATE THE FIRST CHARACTER OF THE 00293000 * PARM FIELD. CALCULATE THE NUMBER OF CHARACTERS IN THE PARM 00294000 * FIELD. IF THERE ARE MORE THAN 64 CHARACTERS, CALL DMKERMSG 00295000 * TO SEND ERROR MESSAGE DMKCFG177E - ELSE SET THE PARM FLAG, 00296000 * MOVE THE PARM INTO THE VIRTUAL GENEREAL PURPOSE REGISTERS, 00297000 * AND STORE THE BYTE COUNT INTO SAVEWRK1 -- THEN RETURN ON 00298000 * REG 8. 00299000 * 00300000 * RESPONSES - 00301000 * 'TRACE ENDED' MESSAGE IS GIVEN IF V.M. TRACING PREVIOUSLY IN 00302000 * EFFECT WAS TERMINATED UPON THE IPL OF A SHARED NAME SYSTEM. 00303000 * 00304000 * IN ALL OTHER CASES FOR A SUCCESSFUL IPL, ANY RESPONSE WILL 00305000 * COME ONLY FROM THE IPL'ED SYSTEM. 00306000 * 00307000 * ERROR MESSAGES - 00308000 * DMKCFG002E INVALID OPERAND - (OPERAND) 00309000 * DMKCFG003E INVALID OPTION - (OPTION) 00310000 * DMKCFG006E INVALID DEVICE TYPE - (VADDR) 00311000 * DMKCFG013E CONFLICTING OPTION - (OPTION) 00312000 * DMKCFG022E VADDR MISSING OR INVALID 00313000 * DMKCFG026E OPERAND MISSING OR INVALID 00314000 * DMKCFG040E DEV (ADDR) DOES NOT EXIST 00315000 * DMKCFG044E SYSTEM (NAME) DOES NOT EXIST 00316000 * DMKCFG170E SYSTEM (NAME) EXCEEDS STORAGE 00317000 * DMKCFG171E SYSTEM (NAME) VOLID (VOLID) NOT MOUNTED 00318000 * DMKCFG172E SYSTEM (NAME) DASD (VADDR) INCOMPATIBLE SYSRES 00319000 * DMKCFG173E SYSTEM (NAME) REQUIRES DASD (VADDR) 00320000 * DMKCFG174E PAGING I/O ERROR; IPL FAILED 00321000 * DMKCFG177E PARM EXCEEDS 64 CHARACTERS 00322000 *. 00323000 * DMKCFG203E V=R AREA REQUIRES IPL BY DEVICE ADDRESS 00323100 EJECT 00324000 * EQUATES USE IN FLAG BYTE IN SAVEWRK1 00325000 SPACE 00326000 FRMLOGON EQU X'80' INDICATES IPL CALLED FROM LOGON @V304635 00327000 * PROCESS 00328000 NOCLEAR EQU X'40' DO NOT CLEAR STORAGE @V304635 00329000 NAMEDIPL EQU X'20' PROCESSING IPL BY NAME @V304635 00330000 IPLST EQU X'10' SET ADSTOP AFTER IPL @V304635 00331000 CLEARFND EQU X'08' FLAG FOR CLEAR FOUND IN COMMAND @V304635 00332000 NOCLFND EQU X'04' FLAG NOCLEAR FOUND IN COMMAND @V304635 00333000 CYLFND EQU X'02' FLAG CYL NO FOUND IN COMMAND @V304635 00334000 PARMFND EQU X'01' FLAGS EXISTENCE OF A PARM FIELD @V304635 00335000 SPACE 2 00336000 * EQUATES USE IN FLAG BYTE SAVEWRK1+2 00337000 SPACE 1 00338000 NONSHARE EQU X'08' REQUEST FOR NONSHARED MODE @V304635 00339000 PURFLG EQU X'04' PURGESYS FUNCTION @V304635 00340000 FINDFLG EQU X'02' FINDSYS FUNCTION @V304635 00341000 LOADFLG EQU X'01' LOADSYS FUNCTION @V304635 00342000 SPACE 2 00343000 * THIS IS THE ENTRY POINT FROM LOGON 00344000 SPACE 00345000 DMKCFGII RELOC @V304635 00346000 XC SAVEWRK1,SAVEWRK1 CLEAR FLAGS @V304635 00347000 MVI SAVEWRK1,FRMLOGON+NOCLEAR SET UP FLAG BYTE @V304635 00348000 B IPLSAVE . . . @V304635 00349000 SPACE 4 00350000 * ENTER HERE FROM CFM 00351000 SPACE 00352000 DMKCFGIP RELOC @V304635 00353000 XC SAVEWRK1,SAVEWRK1 CLEAR FLAGS @V304635 00354000 XC SAVEWRK2(SAVEWRK9-SAVEWRK2+4),SAVEWRK2 CLEAR @VM03100 00355000 * WORKSAVE AREA 00356000 NI VMSPMFLG,X'FF'-VMCPVIRT RESET CP VIRT @VA09952 00356100 MVI SAVEWRK1,NOCLEAR SET DEFAULT @V304635 00357000 CALL DMKSCNFD LOCATE DEVICE ADDRESS OR NAME @V304635 00358000 BNZ CFG026 BRANCH IF NOTHING FOUND @V304635 00359000 MVC VMCOMND+4(LEN4),0(R1) SAVE DEV NAME IPL'ED @VM03100 00360000 NI VMQSTAT,X'FF'-VMPA2APL CLEAR PA2 FLAG @VM03116 00361000 SPACE 2 00362000 IPLSAVE XC SAVEWRK2(SAVEWRK9-SAVEWRK2+4),SAVEWRK2 CLEAR @VM03100 00363000 * THEM ALL 00364000 STM R0,R1,SAVEWRK2 SAVE LENGTH AND ADDRESS OF @V304635 00365000 * ARGUMENT 00366000 CL R0,F3 IF THE ARGUMENT OVER 3 CHAR.= @V304635 00367000 * NAME 00368000 BH IPLNAME SO GO PROCESS AS SUCH @V304635 00369000 CALL DMKCVTHB TRY TO CONVERT TO BINARY @V304635 00370000 BNZ IPLNAME BRANCH IF CONVERT FAILED-MUST @V304635 00371000 * BE NAME 00372000 ST R1,SAVEWRK2 SAVE VIRTUAL ADDRESS FOR LATER @V304635 00373000 TM SAVEWRK1,FRMLOGON ENTERED FROM LOGON ???? @V304635 00374000 BZ IPLSCNLP BRANCH IF NOT-SCAN FOR REST OF @V304635 00375000 * ARGS. 00376000 B IPLBYDEV GO STRAIGHT TO DEVICE IPL @V304635 00377000 SPACE 2 00378000 IPLSCNLP CALL DMKSCNFD LOCATE NEXT ARGUMENT @V304635 00379000 BNZ IPLSETR2 BRANCH IF NO MORE ARGUEMNTS @V304635 00380000 STM R0,R1,SAVEWRK7 SAVE LENGTH AND ADDRESS OF @V304635 00381000 * ARGUEMNT 00382000 CLC =C'STOP',0(R1) DOES HE WANT IPL STOP ? @VM03100 00383000 BNE NOCLRCHK NO - TEST FOR NOCLEAR @V304635 00384000 CL R0,F4 WAS IT FOUR BYTES LONG? @V304635 00385000 BNE NOCLRCHK NO - TEST FOR NOCLEAR @V304635 00386000 TM SAVEWRK1,IPLST DID HE SPECIFY STOP ALREADY? @V304635 00387000 BO CFG003 YES - NOT ALLOWED @V304635 00388000 OI SAVEWRK1,IPLST SET FLAG FOR IPL STOP @V304635 00389000 B IPLSCNLP LOOP BACK FOR MORE OPTIONS @V304635 00390000 NOCLRCHK EQU * @V304635 00391000 LR R2,R0 LENGTH TO R2 FOR EX @V304635 00392000 CL R2,F2 TWO OR MORE CHARACTERS ???? @V304635 00393000 BL IPLCYLCV IF ONLY ONE, MUST BE CYLINDER @V304635 00394000 * NUMBER 00395000 BCTR R2,0 MINUS ONE FOR EX @V304635 00396000 EX R2,CLEARCMP IS IT 'CLEAR' @V304635 00397000 BE IPLSETCL BRANCH IF IT IS @V304635 00398000 EX R2,NOCLRCMP NOCLEAR ???? @V304635 00399000 BNE IPLPARM NO -- GO CHECK FOR A PARM @V304635 00400000 CLC =C'NOCL',0(R1) ABREV. CORRECT ???? @VM03100 00401000 BNE CFG002 NO GOOD - GO SEND ERROR MESSAGE @V304635 00402000 TM SAVEWRK1,CLEARFND HAS CLEAR BEEN FOUND ????? @V304635 00403000 BO CFG013 CAN'T HAVE BOTH @V304635 00404000 TM SAVEWRK1,NOCLFND HAS NOCLEAR ALREADY BEEN @V304635 00405000 * FOUND ONCE 00406000 BO CFG003 BRANCH IF IT HAS --- @V304635 00407000 OI SAVEWRK1,NOCLFND FLAG NOCLEAR AS BEING SPEC. @V304635 00408000 * ONCE 00409000 B IPLSCNLP LOOP BACK-NOCLEAR ALREADY SET @V304635 00410000 SPACE 2 00411000 IPLSETCL NI SAVEWRK1,X'FF'-NOCLEAR RESET NOCLEAR FLAG @VM03100 00412000 TM SAVEWRK1,NOCLFND HAS NOCLEAR BEEN SPECIFIED ????@V304635 00413000 BO CFG013 ERROR IF IT HAS @V304635 00414000 TM SAVEWRK1,CLEARFND HAS CLEAR BEEN FOUND BEFORE @V304635 00415000 BO CFG003 CAN'T LET THEM DO THAT @V304635 00416000 OI SAVEWRK1,CLEARFND FLAG IT AS BEING FOUND ONCE @V304635 00417000 B IPLSCNLP LOOP BACK @V304635 00418000 SPACE 2 00419000 IPLPARM EQU * @V304635 00420000 BAL R8,CHKPARM GO CHECK FOR PARM @V304635 00421000 TM SAVEWRK1,PARMFND IS THERE ONE ???? @V304635 00422000 BO IPLSETR2 YES - NO MORE SCANNING TO DO @V304635 00423000 LM R0,R1,SAVEWRK7 RESTORE THE ORIGINAL STUFF @V304635 00424000 IPLCYLCV CALL DMKCVTDB CONVERT CYL NO. TO BINARY @V304635 00425000 BNZ IPLINVCY BRANCH IF CONVERT FAILS @V304635 00426000 CL R1,=XL4'FFFF' NUMBER EXCEED MAX. HALF WORD @V304635 00427000 * VALUE ? 00428000 BH IPLINVCY BRANCH IF IT DOES @V304635 00429000 ST R1,SAVEWRK4 SAVE CYLINDER NUMBER FOR LATER @V304635 00430000 TM SAVEWRK1,CYLFND HAVE WE BEEN HERE BEFORE ??? @V304635 00431000 BO IPLINVCY YES -- AND THATS A NO NO @V304635 00432000 OI SAVEWRK1,CYLFND FLAG AS BEING HERE ONCE @V304635 00433000 B IPLSCNLP LOOP BACK @V304635 00434000 SPACE 2 00435000 IPLINVCY LM R0,R1,SAVEWRK7 RESTORE ARGUMENT LENGTH AND @V304635 00436000 * ADDRESS 00437000 B CFG002 GO SEND ERROR MESSAGE @V304635 00438000 SPACE 2 00439000 CLEARCMP CLC 0(*-*,R1),=C'CLEAR ' EXECUTED COMPARE @VM03100 00440000 NOCLRCMP CLC 0(*-*,R1),=C'NOCLEAR ' EXECUTED COMPARE @VM03100 00441000 SPACE 2 00442000 IPLNAME CL R11,AVMREAL IS USER THE V=R USER ? @V304735 00443000 BE CFG203 YES - CAN'T IPL BY NAME @V304735 00444000 OI SAVEWRK1,NAMEDIPL SET NAME BIT IN FLAGS @V304735 00445000 TM SAVEWRK1,FRMLOGON DID WE IPL FROM LOGON ????? @V304635 00446000 BO IPLBYNAM BR. IF YES-NO NEED TO CLEANUP @V304635 00447000 CALL DMKSCNFD ANY MORE ARGUMENTS @V304635 00448000 BNZ IPLSETR2 NO --- @VA11699 00449100 BAL R8,CHKPARM GO CHECK FOR A PARM @V304635 00450000 TM SAVEWRK1,PARMFND WAS A PARM FOUND @V304635 00451000 BZ CFG003 IF ANYTHING ELSE - HAVE AN ERROR @V304635 00452000 SPACE 2 00455000 IPLSETR2 SR R2,R2 ASSUME CLEAR @V304635 00456000 TM SAVEWRK1,NOCLEAR NOCLEAR SET ???? @V304635 00457000 BZ CALLPGS BRANCH IF NOT @V304635 00458000 LA R2,NOCLEAR TELL PGS NOT TO CLEAR @V304635 00459000 SPACE 2 00460000 CALLPGS CALL DMKCFPRR RESET THE VM. @V304635 00461000 TM SAVEWRK1,NAMEDIPL IPL BY NAME????? @VA11699 00462100 BO IPLBYNAM BRANCH IF YES -- @VA11699 00463100 CALL DMKPGSPO CLEAR STORAGE (MAYBE) @VA11699 00464100 SPACE 2 00465000 IPLBYDEV L R1,VMSIZE LOAD SIZE OF STORAGE @V304635 00466000 CL R1,=X'00040000' IS IT LESS THAN 64 PAGES ? @V304635 00467000 BL IPLHALF NO, TAKE BRANCH @V304635 00468000 L R1,=X'00040000' YES, SET TO PAGE 64 @V304635 00469000 IPLHALF SRL R1,1 USE MIDDLE PAGE OF VIRT. @V304635 00470000 * STORAGE FOR IPL 00471000 N R1,=X'0007F000' REMOVE HALF PAGE @V304635 00472000 ST R1,VMPSW+4 SET ADDRESS OF IPL SIMULATOR IN @V304635 00473000 * PSW 00474000 * 00475000 * FOLLOWING ROUTINE FINDS THE ENTRY IN CP'S SWPTABLE FOR THE 00476000 * IPL SIMULATOR - DMKVMI. AFTER IT FINDS THIS, A CALL 00477000 * TO RPAGEGET - DMKRPAGT- IS MADE TO RELEASE USER PAGE, 00478000 * IF IT IS IN STORAGE, AND BRING IN THE IPL SIMULATOR IN 00479000 * ITS PLACE. THE USERS SWAPTABLE IS ALSO UPDATED TO POINT 00480000 * TO THE IPL SIMULATORS PAGE ON DASD BY RPAGEGET. 00481000 * 00482000 * FOR 65K SEGMENTS - VIRT. ADDR. = | SEG | PG | DISP | 00483000 * | 8 | 4 | 12 | 00484000 * 00485000 * 00486000 GETVMI L R4,ASYSVM ADDRESS OF SYSTEM VMBLOK @VA13054 00487000 L R4,VMSEG-VMBLOK(,R4) ADDRESS OF CP SEGTABLE @V304635 00488000 L R2,=A(DMKVMI) ADDRESS OF THE IPL SIMULATOR @V304635 00489000 SRDL R2,16 SEGMENT TO LOW ORDER OF GPR2, @V304635 00490000 * PAGE TO GPR3 00491000 SLL R2,2 SET UP R2 TO INDEX INTO SEGTABLE @V304635 00492000 AR R4,R2 GPR4 NOW POINTS TO THE ADDRESS @V304635 00493000 * OF PAGETBL 00494000 L R4,0(,R4) GPR4 NOW CONTAINS ADDRESS OF @V304635 00495000 * PAGE TABLE 00496000 N R4,=A(X'FFFFFE') CLEAR UNWANTED BITS @V408246 00497000 SRL R3,25 SET PAGE NUMBER *8 @V304635 00498000 S R4,F4 POINT TO SWPTABLE POINTER @V304635 00499000 L R4,0(,R4) GPR4 NOW ADDRESSES THE CP @V304635 00500000 * SWPTABLE 00501000 L R0,PAGCORE-PAGSWP(R3,R4) PICK DASD ADDRESS OF @VM03100 00502000 * IPL SIMULATOR 00503000 * IF MSS DEVICE, IT IS POSSIBLE R1-IPL PAGE ADDR WAS ZEROED 00503500 L R1,VMPSW+4 GET ADDR OF IPL PAGE @VA13054 00503900 CALL DMKRPAGT,PARM=BRING @V304635 00504000 BNZ CFG174 IF GET I/O ERROR, GET OUT @V304635 00505000 SR R1,R1 PAGE ZERO @V304635 00506000 TRANS 2,1,OPT=(BRING,DEFER) BRING IN USER PAGE ZERO @V304635 00507000 L R1,SAVEWRK2 LOAD VADDR @V304635 00508000 CALL DMKSCNVU FIND VBLOKS @V304635 00509000 BNZ CHKMOUNT COULD BE A MSS DEVICE WITH AN @VA13054 00510500 * OUTSTANDING MOUNT PENDING 00510700 USING USERSTOR,R2 @VM03100 00511000 MVC DEVAREA,SAVEWRK2+2 IPL DEVICE ADDRESS TO PAGE @VM03100 00512000 * ZERO 00513000 MVC MSGBYTE,VMMLEVEL SAVE EMSGOR MSG STATE BYTE @VM03100 00514000 MVC CYLAREA,SAVEWRK4+2 MOVE CYL-NO TO PAGE ZERO @VM03100 00515000 MVI STOPBYTE,NOSTOP SPECIFY NO STOP FOR DEFAULT @VM03100 00516000 TM SAVEWRK1,IPLST DID HE SPECIFY STOP ? @VM03100 00517000 BZ IPLEXIT NO - CONTINUE AS USUAL @VM03100 00518000 OI STOPBYTE,IPLSTOP INDICATE IPL STOP @VM03100 00519000 IPLEXIT MVI VMPSW+1,X'00' TAKE OUT OF WAIT @VM03100 00520000 IPLEXIT1 NI VMRSTAT,X'FF'-VMIOWAIT TAKE OFF WAIT @VM03100 00521000 TM SAVEWRK1,FRMLOGON COME HERE FROM LOGON ??? @VM03100 00522000 BO RETURN BRANCH IF SO @VM03100 00523000 TM SAVEWRK1+2,LOADFLG+PURFLG+FINDFLG @VM03100 00524000 BNZ RETURN YES, RETURN NORMALLY (PSW WAS @VM03100 00525000 * NOT CHANGED) 00526000 L R5,SAVERETN LOAD CFM'S RETURN ADDRESS @VM03100 00527000 LA R5,RETPLUS4(,R5) BUMP BY 4 TO ALLOW VM TO RUN @VM03100 00528000 ST R5,SAVERETN STORE BACK @V304635 00529000 B RETURN EXIT TO CALLER @V304635 00530000 CHKMOUNT EQU * @VA13054 00531020 * 00531040 * AT THIS POINT WE ARE ABOUT TO RETURN TO THE CALLER 00531060 * WITH A CONDITION CODE 3 (DEVICE NOT AVAILABLE). 00531080 * IF THE MSS IS IN THE SYSTEM, THE DEVICE MAY 00531100 * BE "NOT AVAILABLE" BECAUSE AN MSS MOUNT IS IN 00531120 * PROCESS. IF THAT IS THE CASE, STACK THIS VIRTUAL 00531140 * REQUEST UNTIL THE MOUNT COMPLETES. 00531160 * 00531180 TM PSAMSS,MSSPRES IS THE MSS IN THIS SYSTEM @VA13054 00531200 BZ CFG040 NO, THEN THE DEVICE DOES EXIST @VA13054 00531220 L R2,SAVEWRK2 GET IPL VADRR @VA13054 00531240 L R3,=V(DMKSSSMQ) WAIT Q FOR MSS MOUNTS @VA13054 00531260 L R3,0(R3) PICK UP ACTUAL QUEUE @VA13054 00531280 USING OSVSCOM,R3 ASSEMBLER ADDRESSABILITY @VA13054 00531300 TESTCOM EQU * IS THERE A MSSCOM BLOCK @VA13054 00531320 LTR R3,R3 IS THE CHAIN PTR 0 @VA13054 00531340 BZ CFG040 YES, WERE NOT WAITING ON MSS @VA13054 00531360 CLC VMUSER(VMUSERL),MSSUSER ARE WE WAITING @VA13054 00531380 BNE NXTCOM NOT ON THIS BLOCK @VA13054 00531400 L R4,MSSTASK1 TASK THAT IS WAITING @VA13054 00531420 CH R2,CPEXMISC-CPEXBLOK(R4) VIRT DEV WAITING @VA13054 00531440 BNE NXTCOM THIS VIRT DEV NOT WAITING @VA13054 00531460 LA R0,CPEXSIZE SIZE OF A CPEXBLOK @VA13054 00531480 CALL DMKFREE GET DYNAMIC STORAGE @VA13054 00531500 USING CPEXBLOK,R1 @VA13054 00531520 ST R1,MSSTASK3 @VA13054 00531540 STM R0,R15,CPEXREGS SAVE REGS FOR LATER DISPATCH @VA13054 00531560 LA R0,MSSRETRN RE-DISPATCH ADDRESS @VA13054 00531580 ST R0,CPEXADD FIELD FOR DISPATCHER LATER @VA13054 00531600 ST R2,CPEXMISC SAVE VADDR WHICH IS WAITING @VA13054 00531620 LR R2,R12 GET MODULE ADDRESS FOR LOCK @VA13054 00531640 CALL DMKPTRLK PAGEABLE MODULE - BETTER LOCK IT @VA13054 00531660 GOTO DMKDSPCH WAIT FOR THE MSS @VA13054 00531680 DROP R1 @VA13054 00531700 NXTCOM EQU * GET NEXT MSSCOM BLOCK @VA13054 00531720 L R3,MSSNEXT CHAIN PTR @VA13054 00531740 B TESTCOM SEE IF THERE IS ONE @VA13054 00531760 DROP R3 @VA13054 00531780 MSSRETRN LR R2,R12 ALSO NEED BASE ADDR TO UNLOCK @VA13054 00531800 CALL DMKPTRUL GO UNLOCK PAGE @VA13054 00531820 B GETVMI MAKE IT LOOK LIKE WE NEVER LEFT @VA13054 00531840 EJECT 00531860 IPLBYNAM LM R1,R2,SAVEWRK2 LENGTH AND ADDRESS OF REQUESTED @V304635 00532000 * NAME 00533000 BCTR R1,0 MINUS ONE ON LENGTH FOR EX @V304635 00534000 CL R1,F7 NAME OVER EIGHT CHARACTERS ???? @V304635 00535000 BH CFG044A SEND ERROR MESSAGE IF IT IS @V304635 00536000 MVC SAVEWRK2(L'SAVEWRK2+L'SAVEWRK3),BLANKS BLANK @VM03100 00537000 * WORK AREA 00538000 EX R1,MOVENAME MOVE NAME INTO WORK AREA @V304635 00539000 SPACE 00540000 LOADSYS DS 0H @V408246 00541000 TM VMRSTAT,VMLOGOFF OTHER ACTIVITY STARTED? @V408246 00542000 BO CFG001 YES, GET OUT AS FAST AS POSSIBLE @V408246 00543000 BAL R5,GETSNTBL GET THE SYSTEM NAME TABLE @V408246 00544000 USING SYSTBL,R4 ADDRESSABIILTY @V304635 00545000 * GPR4 - WILL HOLD THE ADDRESS OF THE SYSTABLE THROUGH OUT 00546000 * THE NAMED SYSTEM PROCESSING. 00547000 SPACE 1 00548000 NAMELOOP CLC SYSNAME,SAVEWRK2 COMPARE THE NAMES @VM03100 00549000 BE NAMEHIT BRANCH IF HAVE A MATCH @V304635 00550000 L R3,SYSPNT LOAD DISPLACEMENT TO NEXT @V304635 00551000 * SYSTABLE ENTRY 00552000 AR R4,R3 GET ACTUAL LOCATION ADDRESS OF @V304635 00553000 * NEXT ENTRY 00554000 LTR R3,R3 LAST ENTRY ??? @V304635 00555000 BZ CFG044 CAN'T FIND NAME IN TABLE @V304635 00556000 B NAMELOOP NO - GO TRY AGAIN @V304635 00557000 SPACE 00557500 NAMEHIT DS 0H @VA11699 00558000 TM SAVEWRK1+2,LOADFLG ARE WE HERE ON A LOADSYS? @VA11699 00558500 BO CKVOL YES, NO NEED TO CLEAN UP @VA11699 00559000 TM SAVEWRK1,FRMLOGON ENTERED FROM LOGON??? @VA11699 00559500 BO NOPGS YES, NO NEED TO CLEAN UP @VA11699 00560000 SR R2,R2 PARM FOR DMKPGS @VA11699 00560500 CALL DMKPGSPO @VA11699 00561000 NOPGS DS 0H @VA11699 00561500 L R5,VMSTOR FOR IPL, CHECK STORAGE SIZE @V304635 00562000 CL R5,SYSSIZE COMPARE TO MIN. SIZE FROM @V304635 00563000 * SYSTABLE 00564000 BL CFG170 CORE NOT BIG ENOUGH @V304635 00565000 CKVOL LH R1,SYSVADDR LOAD VIRTUAL ADDRESS OF SYSRES @V304635 00566000 LTR R1,R1 REQUESTED 'IGNORE' VOLUME CHECK ?@V304635 00567000 BM SKIPVOL IF 'FFFF' - DON'T CHECK FOR @V304635 00568000 * MOUNTED 00569000 LA R1,VSYSRES ADDR. FOR VOL. SER. OF VIRT. @V304635 00570000 * SYSRES 00571000 LA R0,L'VSYSRES SERIAL LENGTH @VM03100 00572000 CALL DMKSCNVS SEARCH FOR VOLUME @V304635 00573000 BNZ NOSYSRES 'VSYSRES' NOT MOUNTED @VM03201 00574000 SPACE 00575000 LR R5,R1 R5 NOW CONTAINS RDEVBLOK FOR @V304635 00576000 * SYSRES 00577000 LH R1,SYSVADDR LOAD VIRTUAL ADDRESS OF SYSRES @V304635 00578000 CALL DMKSCNVU SEE IF THERE @V304635 00579000 BNZ BLD173 ERROR IF NOT FOUND @VM03201 00580000 SPACE 00581000 USING VDEVBLOK,R8 @V304635 00582000 SPACE 00583000 LH R1,SYSCYL LOAD CYLINDER DISPLACEMENT @V304635 00584000 CH R1,VDEVRELN DOES IT MATCH THIS DEVICE ??? @V304635 00585000 BNE BLD172 NO - INCOMPATIBLE 'VSYSRES' @VM03201 00586000 L R8,VDEVREAL LOAD ADDRESS OF RDEVBLOK @V304635 00587000 USING RDEVBLOK,R8 @V304635 00588000 CLC VSYSRES,RDEVSER IS VADDR ON THE RIGHT @VM03100 00589000 * VOLUME ???? 00590000 BNE BLD172 NOPE - @VM03201 00591000 DROP R8 @V304635 00592000 SPACE 00593000 SKIPVOL LA R1,SYSVOL ADDRESS OF VOL. SERIAL FOR SYSVOL@V304635 00594000 LA R0,L'SYSVOL SERIAL LENGTH @VM03100 00595000 CALL DMKSCNVS SEARCH FOR THIS VOLUME @V304635 00596000 BNZ NOSYSVOL SYSVOL NOT MOUNTED @V304635 00597000 SPACE 00598000 USING RDEVBLOK,R1 @V304635 00599000 SPACE 00600000 TM RDEVFLAG,RDEVOWN MAKE SURE DISK IS CPOWNED @V304635 00601000 BZ NOSYSOWN IF NOT, CAN'T DO IT @V407511 00602000 L R5,SYSSTART LOAD CCPD FOR START OF SYSTEM @V304635 00603000 * ON SYSVOL 00604000 IC R5,RDEVCODE+1 INSERT INDEX INTO OWNED LIST @V304635 00605000 * FOR SYSVOL 00606000 LA R0,PAGE2314 MAXIMUM PAGES/CYL ON 2314 @VM03100 00607000 TM RDEVTYPE,TYP2314 IS THIS 2314 ???? @V304635 00608000 BO SAVMAXPG YES ----- @V304635 00609000 LA R0,PAGE3330 MAXIMUM PAGES/CYL ON 3330 @VM03100 00610000 TM RDEVTYPE,TYP3330 IS IT ???? @V304635 00611000 BO SAVMAXPG YES ----- @V304635 00612000 LA R0,PAGE3350 MAXIMUM PAGES/CYL ON 3350 @VM03100 00613000 CLI RDEVTYPE,TYP3350 IS IT ???? @V304498 00614000 BE SAVMAXPG YES ----- @V304498 00615000 LA R0,PAGE3375 Maximum pages/cyl on 3375 HRC106DK 00615100 TM RDEVTYPE,TYP3375 Is this a 3375 HRC106DK 00615200 BO SAVMAXPG Yes ----- HRC106DK 00615300 LA R0,PAGE3380 Maximum pages/cyl on 3380 HRC106DK 00615400 TM RDEVTYPE,TYP3380 Is this a 3380 HRC106DK 00615500 BO SAVMAXPG Yes ----- HRC106DK 00615600 LA R0,PAGE2305 PAGES/CYL FOR 2305 AND 3340 @VM03100 00616000 SPACE 00617000 SAVMAXPG SLL R0,8 SET UP FOR LATER COMPARE @V304635 00618000 ST R0,SAVEWRK5 STORE IT AWAY FOR LATER USE @V304635 00619000 SPACE 00620000 DROP R1 @V304635 00621000 SPACE 00622000 * THE FOLLOWING CODE WILL TRANS IN THE FIRST SAVED DASD PAGE 00623000 * FROM SYSVOL. THIS PAGE CONTAINS THE SAVED PSW,REGISTERS, 00624000 * AND KEYS. THE VMBLOK IS THEN UPDATED WITH THIS SAVED DATA. 00625000 * THEN THE SWPTABLES ARE UPDATED WITH THE SAVED KEYS 00626000 * AND THE CCPD'S FOR SYSVOL. 00627000 * REGISTER USAGE IN THIS ROUTINE ARE AS FOLLOWS: 00628000 * GPR3 - INDEX COUNT TO STEP THRU SYSPAGNM ENTRIES 00629000 * GPR4 - ADDRESS OF PROPER SYSTABLE ENTRY 00630000 * GPR5 - CCPD OF CURRENT PAGE ON SYSVOL 00631000 * GPR6 - CONSTANT USED TO INCREMENT CCPD IN R5 00632000 * GPR7 - COUNT OF SYSPAGNM ENTRIES LEFT TO PROCESS 00633000 * GPR8 - CURRENT PAGE ADDRESS 00634000 * GPR9 - ENDING PAGE ADDRESS(OF SYSPAGNM ENTRY BEING PROCESSED) 00635000 * GPR 10 -ADDRESS OF 1ST SAVED PAGE 00636000 SPACE 3 00637000 TM SAVEWRK1+2,LOADFLG LOADSYS COMMAND @V304635 00638000 BO PAGRELCK YES - RELEASE THE ORIGINAL PAGES @V304735 00639000 LH R1,SYSPAGLN CALC. ADDR. OF SYSHRSEG @V304735 00640000 SLL R1,2 TIMES FOUR @V407511 00641000 LA R1,SYSPAGNM(R1) R1 = POINTER TO SYSSEGLN @V304735 00642000 USING SYSSEGLN,R1 @V304735 00643000 LH R1,SYSSEGLN TEST FOR SHARED NAMED SYSTEM @V304735 00644000 LTR R1,R1 IPL'ING A SHARED SYSTEM? @V304735 00645000 BZ SKIPREL IF NOT - BYPASS PAGE RELEASE @V304735 00646000 DROP R1 @V304735 00647000 PAGRELCK LH R7,SYSPAGLN NUMBER OF ENTRIES IN SYSPAGNM @V304735 00648000 SLR R3,R3 CLEAR @V304635 00649000 PAGRELNM LH R1,SYSPAGNM(R3) GET BEGINNING PAGE ADDRESS @V304635 00650000 SRL R1,4 FORCE LOGICAL PAGE ZERO @VA07252 00651200 SLL R1,16 FORM FULL PAGE ADDRESS @VA07252 00651400 LH R2,SYSPAGNM+2(R3) GET ENDING PAGE ADDRESS @V304635 00652000 O R2,F15 MAKE IT A COMPLETE SEGMENT @VA07252 00652500 SLL R2,12 FORM ENDING PAGE ADDRESS @V304635 00653000 CALL DMKPGSPR RELEASE PAGES FROM RANGE IN R1-R2@VA04764 00654000 LA R3,L'SYSPAGNM(,R3) INDEX TO NEXT SYSPAGNM @VM03100 00655000 BCT R7,PAGRELNM RELEASE ALL PAGES REFERENCED IN @V304635 00656000 * SYSTABLE 00657000 SPACE 1 00658000 LM R1,R2,SYSNAME IDENT. OF NAMED SYSTEM @V304635 00659000 CALL DMKPGSPS PURGE THE NAMED SYSTEM @V304635 00660000 LH R7,SYSPAGLN RESTORE NUMBER ENTRIES IN @V304635 00661000 * SYSTABLE 00662000 SLR R3,R3 CLEAR INDEX REGISTER @V304635 00663000 PAGBLDTB L R1,SYSPAGNM(R3) BUILD NECESSARY PAGE TABLES @V304635 00664000 N R1,=X'FFF0FFFF' RESET FIRST PAGE NUMBER @V304635 00665000 LR R2,R1 SAVE BLD PARM @V408246 00666000 N R2,XRIGHT16 ISOLATE ENDING PAGE NO. @V408246 00667000 LA R2,1(,R2) ENDING PAGE NO. (BASE 1) @V408246 00668000 SLL R2,12 ENDING ADDRESS @V408246 00669000 CL R2,VMSTOR ENDING ADDRESS > STORE SIZE? @V408246 00670000 BNH NXTSYS NO, DONE @V408246 00671000 CALL DMKBLDRT,PARM=OLDVMSEG+KEEPSEGS+NEWPAGES @V304635 00672000 N R1,XRIGHT16 CLEAR OUT FIRST ADDRESS @V304635 00673000 SLL R1,12 GET A FULL ADDRESS @V304635 00674000 AL R1,F4096 PLUS 1 MORE PAGE @V304635 00675000 CL R1,VMSIZE IS NEW ADDRESS > OLD ? @V304635 00676000 BNH NXTSYS NO - LEAVE AS IS @VM03097 00677000 ST R1,VMSIZE SAVE NEW STORAGE SIZE @V304635 00678000 NXTSYS LA R3,L'SYSPAGNM(,R3) INDEX TO NEXT SYSPAGNM @VM03100 00679000 BCT R7,PAGBLDTB PROCESS ALL ENTRIES @V304635 00680000 SPACE 1 00681000 SKIPREL LH R1,SYSPAGNM USERS 1ST SAVED PAGE @V304635 00682000 SLL R1,12 FORM PAGE ADDRESS @V304635 00683000 LR R10,R1 SAVE COPY IN R10 @V304635 00684000 LR R0,R5 CCPD @V304635 00685000 CALL DMKRPAGT,PARM=BRING ... @V304635 00686000 BNZ NAMPERR1 CLEAR UP TABLES AND EXIT @VA05638 00687000 SPACE 00688000 USING SAVTABLE,R2 @V304635 00689000 TM SAVEWRK1+2,LOADFLG ENTRY FOR LOADSYS ? @V304635 00690000 BO KEYMOVE YES, THEN JUST MOVE KEYS @V304635 00691000 SPACE 00692000 MVC VMPSW,SAVPSW UPDATE PSW IN VMBLOK @VM03100 00693000 MVC VMFPRS(L'VMFPRS*4),SAVFPRES FLOATING POINT @VM03100 00694000 * REGISTERS 00695000 TM SAVEWRK1,PARMFND CAN WE RESTORE ALL THE REGS @V304635 00696000 BZ MOVEGPRS YES - GO TO IT @V304635 00697000 SLR R1,R1 ZERO REG @V304635 00698000 LA R0,L'SAVGREGS*16 LOAD MAX NUM OF BYTES CAN MOVE @VM03100 00699000 IC R1,SAVEWRK1+3 LOAD THE PARM CHARACTER COUNT @V304635 00700000 LA R14,VMGPRS(R1) BUMP PAST PARM FIELD IN VMBLOK @V304635 00701000 LA R15,SAVGREGS(R1) BUMP TO START OF RESTORABLE @V304635 00702000 * REGS 00703000 SR R0,R1 GET BYTE COUNT @V304635 00704000 LTR R1,R0 INTO R1 @V304735 00705000 BZ TESTEC IF MAX. ON PARM (64) - SKIP MOVE @V304735 00706000 BCTR R1,0 FOR EXECUTED MOVE @V304635 00707000 EX R1,MOVGPRS RESTORE GPRS @V304635 00708000 B TESTEC AND CONTINUE @V304635 00709000 MOVEGPRS EQU * @V304635 00710000 MVC VMGPRS(L'VMGPRS*16),SAVGREGS RESTORE ALL REGS @VM03100 00711000 TESTEC EQU * @V304635 00712000 TM VMPSTAT,VMV370R DO WE HAVE CONTROL REGS ??? @V304635 00713000 BZ KEYMOVE NO - GO DO THE KEYS @V304635 00714000 L R14,VMECEXT ADR OF VM ECBLOK @V304635 00715000 USING ECBLOK,R14 @V304635 00716000 SPACE 00717000 MVC EXTCR0(L'EXTCR0*16),SAVCREGS RESTORE @VM03100 00718000 * CONTROL REGISTERS 00719000 DROP R14 @V304635 00720000 SPACE 00721000 KEYMOVE L R0,SYSPAGCT LOAD NUMBER OF SAVED PAGES @V304635 00722000 SRL R0,2 DIVIDE BY 4 @V304635 00723000 AH R0,F1+2 ADJUST FOR POSSIBLE LOST BITS @V304635 00724000 ST R0,SAVEWRK9 SAVE THIS NUMBER FOR FRET @V304635 00725000 CALL DMKFREE GET CORE @V304635 00726000 SR R0,R0 ZIP THIS REGISTER @V304635 00727000 STM R0,R1,SAVEWRK2 SAVE FOR LATER USE @V304635 00728000 LR R14,R1 BUFFER ADDRESS TO R14 @V304635 00729000 L R7,SYSPAGCT LOAD NUMBER OF PAGES @V304635 00730000 AR R7,R7 TIMES TWO (2 KEYS PER PAGE ) @V304635 00731000 LR R15,R7 BYTES COUNTS ARE NOW SET UP FOR @V304635 00732000 * MVCL 00733000 LA R6,SAVKEYS ADDRESS OF THE SAVED KEYS @V304635 00734000 MVCL R14,R6 NOW MOVE THE KEYS TO THE BUFFER @V304635 00735000 SPACE 00736000 DROP R2 @V304635 00737000 TM VMPSW+1,EXTMODE IS VM IN EXTENDED MODE @V60BC11 00737100 BZ ZEROR3 NO, OK TO IPL SHARED @V60BC11 00737200 TM VMPSW,TRANMODE IS VM IN TRANSLATE MODE @V60BC11 00737300 BZ ZEROR3 NO, OK TO IPL SHARED @V60BC11 00737400 OI SAVEWRK1+2,NONSHARE YES, FORCE NONSHARED IPL @V60BC11 00737500 SPACE 00738000 * NOW SET UP THE SWPTABLES WITH THE SAVED DATA... 00739000 SPACE 00740000 ZEROR3 SR R3,R3 WILL BE USED TO INDEX THRU @V304635 00741000 * SYSPAGNM ENTRIE 00742000 L R6,F256 INCREMENT CONSTANT FOR CCPD'S @V304635 00743000 LH R7,SYSPAGLN NUMBER OF ENTRIES IN SYSPAGNM @V304635 00744000 SPACE 00745000 PAGLOOP L R8,SYSPAGNM(R3) LOAD RANGE OF PAGES @V304635 00746000 SRDL R8,16 START PAGE TO LOW ORDER OF R8 @V304635 00747000 SRL R9,16 END PAGE TO LOW ORDER OF R9 @V304635 00748000 SLL R8,12 FORM PAGE ADDRESS @V304635 00749000 SLL R9,12 END PAGE ADDRESS @V304635 00750000 SWAPLOOP AR R5,R6 BUMP TO NEXT CCPD @V304635 00751000 LR R1,R5 CCPD TO R1 @V304635 00752000 N R1,=X'0000FF00' SAVE ONLY PAGE NUMBER @V304635 00753000 CL R1,SAVEWRK5 NEED WE BUMP TO NEXT CYLINDER @V304635 00754000 * ???? 00755000 BNH CKPAG NOT YET ----- @V304635 00756000 A R5,=X'00010000' ADD ONE TO CYLINDER NUMBER @V304635 00757000 ICM R5,B'0010',F1+3 RESET PAGE NUMBER TO ONE @VM03100 00758000 SPACE 00759000 CKPAG CR R8,R10 PROCESSING 1ST SAVED PAGE @V304635 00760000 BNE SWAPCONT NO- CONTINUE @V304635 00761000 LR R1,R10 BRING IN 1ST PAGE TO OVERLAY @V304635 00762000 * THE SAVED DATA(PSW,REGS,ANDKEYS) 00763000 LR R0,R5 PROPER CCPD FOR PAGE ZERO(SAVED) @V304635 00764000 CALL DMKRPAGT,PARM=0 @V304635 00765000 BNZ NAMPERR2 CLEAR UP TABLES AND EXIT @VA05638 00766000 SPACE 00767000 SWAPCONT DS 0H @V408246 00768000 LR R2,R8 PAGE ADDRESS @V408246 00769000 SRL R2,16 SEGMENT NO. ONLY @V408246 00770000 ALR R2,R2 SEGMENT NO. * 4 FOR INDEX @V408246 00771000 ALR R2,R2 . . @V408246 00772000 AL R2,VMSEG STE POINTER @V408246 00773000 TM 3(R2),SEGINV SEGMENT OK? @V408246 00774000 BZ SWAPCNTA YES @V408246 00775000 TRANS 2,8,OPT=DEFER NO, LET PTR RESOLVE @V408246 00776000 B SWAPCONT AND THEN RETRY @V408246 00777000 SWAPCNTA DS 0H @V408246 00778000 L R2,0(,R2) POINT TO PAGTABLE @V304635 00779000 N R2,=A(X'FFFFFE') CLEAR UNWANTED BITS @V408246 00780000 LR R1,R8 VIRTUAL ADDRESS @V408246 00781000 SRL R1,12 PAGE NO. @V408246 00782000 N R1,F15 PAGE NO. WITHIN SEGMENT @V408246 00783000 SLL R1,3 PAGE NO. *8 FOR SWAPTABLE ENTRY @V408246 00784000 * INDEX 00785000 LA R2,16*2+8(R1,R2) POINT TO SWAPTABLE ENTRY @V408246 00786000 LM R0,R1,SAVEWRK2 INDEX AND ADDRESS OF KEYS @V304635 00787000 AR R1,R0 POINT TO PROPER SET OF KEYS @V304635 00788000 A R0,F2 ADD TO INDEX FOR NEXT GO AROUND @V304635 00789000 ST R0,SAVEWRK2 SAVE IT @V304635 00790000 SPACE 00791000 USING SWPFLAG,R2 @V304635 00792000 SPACE 00793000 MVC SWPKEY1(L'SWPKEY1+L'SWPKEY2),0(R1) MOVE KEYS @VM03100 00794000 * TO SWPTABLE 00795000 ST R5,SWPCYL STORE CCPD @V304635 00796000 OI SWPFLAG,SWPCHG1 TURN ON CHANGE BIT @V408246 00797000 A R8,F4096 BUMP PAGE ADDRESS @V304635 00798000 CR R8,R9 THIS PAGNM ENTRY COMPLETE????? @V304635 00799000 BH TSTPAGLN BRANCH IF YES @V304635 00800000 B SWAPLOOP NO - KEEP GOING @V304635 00801000 SPACE 2 00802000 TSTPAGLN A R3,F4 BUMP INDEX TO NEXT SYSPAGNM ENTRY@V304635 00803000 BCT R7,PAGLOOP PROCESS NEXT ENTRY (IF ANY) @V304635 00804000 L R0,SAVEWRK9 LOAD SIZE OF BUFFER @V304635 00805000 L R1,SAVEWRK3 ADDRESS OF BUFFER @V304635 00806000 CALL DMKFRET ..... @V304635 00807000 EJECT 00808000 * NOW DO THE SHARED SEGMENT BIT 00809000 * 00810000 * THERE CAN BE THREE CONDITIONS ON SEGMENTS ON A SAVED SYSTEM. 00811000 * ONE - THERE ARE NO SHARED SEGMENTS, THEREFORE WE ARE FINISHED 00812000 * WITH THE NAMED IPL. 00813000 * SECOND - THE NAMED SYSTEM IPL'ED MAY HAVE BEEN PREVIOUSLY 00814000 * IPL'ED, THUS, A SHRTABLE HAS ALREADY BEEN BUILT FOR THE 00815000 * SHARED SEGMENTS. THIS SHRTABLE WILL HAVE TO BE UPDATED AND 00816000 * SEGTABLES ALTERED TO POINT TO THE EXISTING SHARED PAGTABLES. 00817000 * ALSO THE PAG AND SWPTABLES THAT ARE NOT GOING TO BE 00818000 * USED MUST BE FRET'ED. 00819000 * THIRD - THE NAMED SYSTEM ISN'T IN USE. THE SWPTABLES FOR THE 00820000 * SHARED SEGMENTS MUST BE FLAGGED AS SHARED AND A SHRTABLE MUST 00821000 * BE BUILT AND PLACED ON THE CHAIN OF SHRTABLES. 00822000 * NOTE - IN THE SECOND AND THIRD CASES, IF THE USER HAD V.M. 00823000 * INSTRUCTION AND|OR BRANCH TRACING IN EFFECT, IT IS RESET, AS 00824000 * THIS OPTION IS INVALID FOR A SHARED SYSTEM. IF ANY TRACING 00825000 * FLAGS ARE STILL ON, THE MODIFIED TRACING IS LEFT IN EFFECT; 00826000 * BUT IF ALL FLAGBITS ARE NOW CLEAR, ALL TRACING IS TERMINATED 00827000 * AND A 'TRACE ENDED' MESSAGE IS SENT TO THE USER TO NOTIFY HIM 00828000 * THAT HIS PREVIOUS TRACING IS NO LONGER IN EFFECT. 00829000 SPACE 3 00830000 LH R6,SYSPAGLN CALCULATE ADDRESS OF SYSHRSEG @V304635 00831000 * ENTRIES 00832000 SLL R6,2 TIMES FOUR @V4M0179 00833000 LA R6,SYSPAGNM(R6) R6 NOW POINTS TO SYSSEGLN @V304635 00834000 SPACE 00835000 USING SYSSEGLN,R6 @V304635 00836000 SPACE 00837000 LH R3,SYSSEGLN NUMBER OF SYSHRSEG ENTRIES @V304635 00838000 LTR R3,R3 ANY ENTRIES ??? @V304635 00839000 BZ BLDNSHR BRANCH IF NO SHARED SEGMENTS @V304635 00840000 TM SAVEWRK1+2,NONSHARE REQUEST FOR NON-SHARE MODE @V304635 00841000 BO BLDNSHR YES - SKIP SHARED PROCESSING. @V304635 00842000 SPACE 2 00843000 SR R8,R8 ZERO INDEX REGS @V304635 00844000 SR R9,R9 .............. @V304635 00845000 SPACE 00846000 * SCAN TO SEE IF SHRTABLE ALREADY EXISTS 00847000 L R2,=A(DMKVMAS1) ADDRESS OF SHRTABLE ANCHOR @VM03171 00848000 L R5,0(,R2) ADDRESS OF SHRTABLE @V304635 00849000 SPACE 00850000 USING SHRTABLE,R5 @V304635 00851000 SPACE 00852000 SHRTSCAN CR R5,R2 END OF CHAIN ??? @V304635 00853000 BE SHRTBLD BRANCH IF IT IS @V304635 00854000 CLC SYSNAME,SHRNAME DO WE HAVE A MATCH ???? @VM03100 00855000 BE SHRTFND BRANCH IF FOUND ONE @V304635 00856000 L R5,SHRFPNT ADDRESS OF NEXT SHRTABLE @V304635 00857000 LA R5,0(,R5) CLEAR FLAG BYTE @V60BC11 00857100 B SHRTSCAN KEEP TRYING !!! @V304635 00858000 EJECT 00859000 * THIS ROUTINE TO HANDLE THE CONDITION WHERE A SHRTABLE ALREADY 00860000 * EXISTS. 00861000 SPACE 00862000 SHRTFND EQU * @V304635 00863000 SPACE 00864000 * NOW STEP THRU SHRPAGE AND SYSHRSEG ADJUSTING SEGTABLES 00865000 SPACE 00866000 LR R14,R3 NUMBER OF SEGMENTS TO R14 @V304635 00867000 LA R8,SHRSEGNM SET UP TO FIND ADDRESS OF FIRST @V304635 00868000 * SHRPAGE 00869000 SPACE 00870000 FNDSHRPG LA R8,L'SHRPAGE(,R8) GET NEXT POSSIBLE SHRPAGE @VM03100 00871000 * ADDRESS 00872000 S R14,F4 MINUS FOUR(UP TO FOUR SEG. @V304635 00873000 * NUMS. TO WORD) 00874000 BP FNDSHRPG BRANCH BACK IF MORE SEGMENT @V304635 00875000 * NUMBERS 00876000 SPACE 00877000 USING SHRPAGE,R8 @V304635 00878000 SPACE 00879000 SHRSLOOP L R2,SHRPAGE LOAD ENTRY FROM SHRTABLE @V304635 00880000 LR R7,R2 SAVE PTO @V408246 00881000 SL R7,F16 BACK-UP TO HEADER @V408246 00882000 LH R1,PAGTOT-PAGTABLE(,R7) INCREMENT @V408211 00883000 LA R1,1(,R1) TOTAL SEGMENT USE COUNT @V408246 00884000 STH R1,PAGTOT-PAGTABLE(,R7) @V408211 00885000 TM APSTAT1,APUOPER RUNNING IN ATTACHED MODE @V407511 00886000 BZ SLOOP1 NO, DON'T HAVE TO UPDATE ATTACHED@V407511 00887000 TM SYSFLAG,SYSPROT IS THIS AN UNPROTECTED SYSTEM @V60BC11 00887100 BO SLOOP1 YES, SKIP AROUND @V60BC11 00887200 STH R1,PAGBMP+PAGTOT-PAGTABLE(,R7) UPDATE ATTACHED @V407511 00888000 * PAGTABLE TOTAL COUNT @V407511 00889000 SLOOP1 DS 0H @V407511 00890000 SR R7,R7 . . . @V304635 00891000 IC R7,SYSHRSEG(R9) LOAD SEGMENT NUMBER FROM SYSTBL @V304635 00892000 SLL R7,2 GET INDEX INTO SEGTABLE @V304635 00893000 L R1,VMSEG LOAD ADDRESS OF SEGTABLE @V304635 00894000 L R10,0(R7,R1) LOAD OLD SEGTABLE ENTRY @V304635 00895000 O R2,F1 ASSURE SEGINV FLAG @V408246 00896000 ST R2,0(R7,R1) STORE ENTRY FROM SHRTABLE @V304635 00897000 LA R8,L'SHRPAGE(,R8) LOAD ADDRESS OF NEXT SHRPAGE @VM03100 00898000 * ENTRY 00899000 LA R9,SEGINDEX(,R9) BUMP SHRSEG INDEX @VM03100 00900000 SPACE 00901000 DROP R8 @V304635 00902000 SPACE 00903000 * NOW MUST FRET ORIGINAL PAGTABLE AND SWPTABLE 00905000 SPACE 00906000 LA R1,0(,R10) PTO @V408246 00907000 SL R1,F16 BACK-UP TO SEGMENT HEADER @V408246 00908000 LA R0,PAGBMP/8 NO. DBLWDS IN ORIGIN TABLES @VA07235 00909100 L R15,=A(DMKSYSAP) -> DMKSYS AP setting HRC066DK 00909200 CLI 0(R15),YES Is AP enabled? HRC066DK 00909300 BNE *+6 No HRC066DK 00909400 AR R0,R0 Double table size for APHRC066DK 00909500 CALL DMKFRET RETURN TABLES TO AVAILABLE @V408246 00913000 * STORAGE 00914000 L R15,PREFIXA PREFIX VALUE TO ADDRESS PSA @VA13356 00914100 * AT ABSOLUTE 0 00914200 L R0,TTSEGCNT-PSA(,R15) NUM OF PG/SWP TBLS IN SYS @VA13356 00914300 BCTR R0,R0 DECREMENT PAG/SWP TABLE COUNT @VA13356 00914400 ST R0,TTSEGCNT-PSA(,R15) STORE IT BACK IN PSA @VA13356 00914500 BCT R3,SHRSLOOP DO NEXT ENTRY IF ANY @V304635 00915000 B SETVMSHR GO CLEAN UP AND GET OUT @V304635 00916000 EJECT 00917000 * 00918000 * THIS ROUTINE USED IF NO EXISTING SHRTABLE. WILL BUILD AND 00919000 * PLACE IN CHAIN. 00920000 * 00921000 SPACE 00922000 SHRTBLD EQU * @V304635 00923000 LR R2,R3 NUMBER OF SHARED SEGMENTS TO R2 @V304635 00924000 SR R7,R7 ZERO REG @V304635 00925000 SPACE 00926000 * NOW FIND SIZE OF SHRTABLE 00927000 LA R0,SHRSEGNM-SHRFPNT LOAD SIZE OF FIXED PART OF @V304635 00928000 * AHRTABE 00929000 SPACE 00930000 FINDSIZE A R0,F4 ADD ONE WORD FOR EACH FOUR @V304635 00931000 * SEGMENTS 00932000 LA R7,INDEX4(,R7) INDEX CONTANT FOR LATER USE @VM03100 00933000 S R2,F4 SUBTRACT 4 FROM NUMBER OF @V304635 00934000 * SEGMENTS LEFT 00935000 BP FINDSIZE BRANCH BACK IF MORE SEGMENTS @V304635 00936000 LR R2,R3 RELOAD R2 WITH NUMBER OF SEGMENTS@V304635 00937000 SLL R2,2 TIMES FOUR FOR EACH SHRPAGE ENTRY@V304635 00938000 AR R0,R2 NOW HAVE SIZE OF SHRTABLE IN @V304635 00939000 * BYTES 00940000 A R0,F7 ROUND UP TO NEXT EIGHT BYTES @V304635 00941000 SRL R0,3 CONVERT TO DOUBLE WORDS @V304635 00942000 LR R2,R0 SAVE SIZE @V304635 00943000 CALL DMKFREE GET STORAGE FOR SHRTABLE @V304635 00944000 LR R5,R1 POINT R5 TO SHRTABLE @V304635 00945000 LR R0,R2 SAVE SIZE OF SHRTABLE @V4M0179 00946000 SLL R2,3 TIMES 8 FOR ZEROING @V4M0179 00947000 BCTR R2,0 MINUS ONE FOR EXECUTE @VA07233 00947100 EX R2,ZEROSHR ZERO OUT THE SHRTABLE @V4M0179 00948000 STH R0,SHRTSIZE STORE SIZE OF THIS BLOCK @V4M0179 00949000 LA R8,4(,R8) INCREMENT SHRPAGE INDEX @V4M0179 00950000 MVC SHRNAME,SYSNAME MOVE NAME TO SHRTABLE @VM03100 00951000 ST R3,SHRSEGCT STORE COUNT OF SHARED SEGMENTS @V304635 00952000 TM SYSFLAG,SYSPROT IS THIS AN UNPROTECTED SYSTEM @V60BC11 00952100 BZ CONTCK NO @V60BC11 00952200 OI SHRFLAG,SHRNOPRT YES, SET SHRTABLE INDICATOR @V60BC11 00952300 CONTCK DS 0H @V60BC11 00952400 SPACE 00953000 * NOW STORE SEGMENT NUMBERS IN SHRTABLE 00954000 LR R2,R3 COUNT TO R2 @V304635 00955000 BCTR R2,0 MINUS ONE FOR EX @V304635 00956000 EX R2,MOVESEGS @V304635 00957000 LA R14,SHRSEGNM(R7) LOAD ADDRESS OF FIRST SHRPAGE @V304635 00958000 * ENTRY 00959000 SPACE 00960000 USING SHRPAGE,R14 @V304635 00961000 SPACE 00962000 SPACE 00963000 SLR R8,R8 ZERO SHRPAGE INDEX @V4M0183 00964000 SEGLOOP DS 0H 00965000 TM SYSFLAG,SYSPROT IS THIS AN UNPROTECTED SYSTEM @V60BC11 00965100 BO UPSEGLP YES, SKIP AROUND @V60BC11 00965200 * DETERMINE IF IT IS NECESSARY TO BUILD TWO SETS OF PAGE AND 00966010 * SWAP TABLES. THE MP FEATURE MUST BE INSTALLED AND THE SYSTEM MUST 00966060 * BE GENERATED FOR AP MODE. 00966110 TM APSTAT1,MPFEAT IS THE MP FEATURE INSTALLED? @V5BC0AB 00966160 BNO UPSEGLP NO, BUILD ONE SET OF PGT/SWPT @V5BC0AB 00966210 L R7,CFGSYSAP EST. ADDRESSABILITY TO DMKSYSAP @V5BC0AB 00966260 CLI 0(R7),YES IS SYSTEM GENED FOR AP? @V5BC0AB 00966310 BE APSEGLP YES BUILD TWO SETS OF PGT/SWPT @V5BC0AB 00966360 UPSEGLP DS 0H @V5BC0AB 00966410 SLR R7,R7 CLEAR REGISTER 7 @V5BC0AB 00966460 IC R7,SYSHRSEG(R9) PICK UP NEXT SEGMENT NUMBER @V304635 00970000 SLL R7,2 INDEX INTO SEGTABLE @V304635 00971000 AL R7,VMSEG ADDRESS OF SEGTABLE @V408246 00972000 L R10,0(,R7) LOAD STE @V408246 00973000 OI 3(R7),SEGINV MAKE SURE INVALID ON @V408246 00974000 N R10,=AL4(X'FFFFFFFF'-SEGINV) CLEAR INVALID FLAG @V408246 00975000 ST R10,SHRPAGE(R8) STORE SEGTABLE ENTRY INTO @V304635 00976000 * SHRTABLE 00977000 LR R2,R10 PAGTABLE ADDRESS TO R2 @V304635 00978000 SRL R2,28 NUMBER OF PAGTABLE ENTRIES TO @V304635 00979000 * LOW ORDER 00980000 LA R2,ONE(,R2) PLUS ONE FOR COUNT LOOP @VM03100 00981000 SL R10,F16 BACK-UP TO HEADER @V408246 00982000 MVC 4(4,R10),F1 ACTIVE CNT = 0, TOTAL CNT. = 1 @V408246 00983000 ST R5,8(,R10) POINT TO SHRTABLE @V408246 00984000 MVC 16+16*2(4,R10),ASYSVM RE-ASIGN SEGMENT TO SYSTEM@V408246 00985000 LA R10,16+16*2+8(,R10) POINT TO 1ST SWAPTABLE ENTRY@V408246 00986000 SPACE 00987000 USING SWPFLAG,R10 @V304635 00988000 SPACE 00989000 FLAGLOOP OI SWPFLAG,SWPSHR TURN ON SHARE BIT @V304635 00990000 A R10,F8 BUMP TO NEXT SWP ENTRY @V304635 00991000 BCT R2,FLAGLOOP KEEP DOING UNTIL RUN THRU @V304635 00992000 * SWPTABLE 00993000 A R8,F4 BUMP INDEX REG. @V304635 00994000 LA R9,INDEX1(,R9) INDEX BY ONE @VM03100 00995000 BCT R3,SEGLOOP PROCESS NEXT SEGMENT @V304635 00996000 B COMMON SKIP OVER AP CODE @V407511 00997000 APSEGLP DS 0H @V407511 00998000 DROP R10,R14 @V407511 00999000 USING PAGTABLE,R1 ADDRESSABILITY TO PAGTABLE @V407511 01000000 USING SHRPAGE,R8 ADDRESSABILITY TO SHRPAGE ENTRY @V407511 01001000 USING SWPTABLE,R2 ADDRESSABILITY TO SWPTABLE @V407511 01002000 SLR R9,R9 ZERO SYSHRSEG INDEX REG @V407511 01003000 LR R8,R14 GET POINTER TO 1ST SHRPAGE @V407511 01004000 APSEGLP1 DS 0H @V407511 01005000 SLR R7,R7 ZERO WORK REG @V407511 01006000 IC R7,SYSHRSEG(R9) PICK UP NEXT SEGMENT NUMBER @V407511 01007000 SLL R7,2 TIMES 4 TO INDEX SEGTABLE @V407511 01008000 AL R7,VMSEG GET ADDR SEGTABLE ENTRY @V407511 01009000 LA R0,(PAGBMP+PAGBMP)/8 GET NUMBER OF DBLWRDS @V407511 01010000 * NEED FOR SHARED PAGE & SWPTABLES @V407511 01011000 CALL DMKFREE OBTAIN PAGE & SWAP TABLES @V407511 01012000 L R10,0(R7) GET ADDR OLD PTO @V407511 01013000 LA R0,PAGCORE LOAD ADDRESS OF PTO @V407511 01014000 STCM R0,B'0111',1(R7) STORE NEW PTO IN STE @V407511 01015000 OI 3(R7),SEGINV FLAG STE AS INVALID @V407511 01016000 ST R0,SHRPAGE STORE PTO INTO SHRTABLE @V407511 01017000 STCM R10,8,SHRPAGE STORE NUMBER OF PAGES IN @V407511 01018000 * SEGMENT INTO SHRTABLE @V407511 01019000 N R10,=AL4(X'00FFFFFE') CLEAR COUNT AND INV BITS @V407511 01020000 SL R10,F16 BACKUP TO HEADER @V407511 01021000 LA R14,PAGBMP(,R1) GET ADDR OF AP PAGTABLE @V407511 01022000 * @V407511 01023000 MVC PAGTABLE(PAGBMP),0(R10) COPY PAGE&SWAP - CPU @V407511 01024000 MVC 0(PAGBMP,R14),0(R10) COPY PAGE&SWAP - AP @V407511 01025000 * @V407511 01026000 LA R2,PAGTSWP(,R1) GET ADDR OF CPU SWPTABLE @V407511 01027000 MVC SWPVM-SWPTABLE(4,R2),ASYSVM ASG SWPTABLE ASYSVM @V407511 01028000 MVC PAGBMP+SWPVM(4),ASYSVM ASG SWPTABLE ASYSVM @V407511 01029000 ST R0,SWPPAG HOOK SWAP - PAGE @V407511 01030000 LA R0,SWPFLAG GET ADDR SWPTABLE ENT @V407511 01031000 ST R0,PAGSWP HOOK PAGE - SWAP @V407511 01032000 ST R5,PAGSHR HOOK PAGE - SHRTABLE @V407511 01033000 ST R5,PAGBMP+PAGSHR HOOK PAGE - SHRTABLE @V407511 01034000 LA R0,PAGBMP+PAGCORE GET ADDR AP PTO @V407511 01035000 ST R0,PAGBMP+SWPPAG HOOK SWAP - PAGE @V407511 01036000 OI PAGBMP+SWPFLAG2,SWPAPP SET ATTACHED INDICATOR@V407511 01037000 * (INDICATES 2ND SET OF PG/SWAP TABLES) 01037100 LA R0,PAGBMP+SWPFLAG ADDR AP SWPTABLE ENTRY@V407511 01038000 ST R0,PAGBMP+PAGSWP HOOK PAGE - SWAP @V407511 01039000 OI PAGBMP+PAGSWP,X'80' Indicate AP table HRC066DK 01039100 MVC PAGACT(4),F1 CPU PAGACT = 0 @V407511 01040000 * CPU PAGTOT = 1 @V407511 01041000 MVC PAGBMP+PAGACT(4),F1 AP PAGACT = 0 @V407511 01042000 * AP PAGTOT = 1 @V407511 01043000 L R15,0(R7) GET SEGTABLE ENTRY @V407511 01044000 SRL R15,28 OBTAIN PTE COUNT @V407511 01045000 LA R15,1(R15) BUMP FOR LOOP CONTROL @V407511 01046000 LA R14,SWPFLAG POINT TO 1ST SWPTABLE ENTRY @V407511 01047000 APSEGFL DS 0H @V407511 01048000 USING SWPFLAG,R14 @V407511 01049000 OI SWPFLAG,SWPSHR TURN ON CPU SHARE BIT @V407511 01050000 OI PAGBMP+SWPFLAG,SWPSHR TURN ON AP SHARE BIT @V407511 01051000 LA R14,8(,R14) BUMP TO NEXT SWPTABLE ENTRY @V407511 01052000 BCT R15,APSEGFL KEEP DOING UNTIL ALL FLAGGED @V407511 01053000 LR R1,R10 GET ADDR OF OLD PAGTABLE @V407511 01054000 L R14,0(R7) GET SEGTABLE ENTRY @V407511 01055000 SRL R14,28 OBTAIN NUMBER PTE'S @V407511 01056000 LA R0,PAGBMP+PAGBMP Size of tables for AP HRC066DK 01056500 SRL R0,3 CHANGE TO NO OF DWORDS @VA07675 01057500 CALL DMKFRET RETURN OLD PAGE & SWAP TABLES @V407511 01058000 LA R8,4(,R8) INCREMENT SHRPAGE INDEX @V4M0183 01059000 LA R9,1(R9) INCR SYSHRSEG INDEX @V407511 01060000 L R14,SAVEWRK7 RESTORE SHRPAGE POINTER @V407511 01061000 BCT R3,APSEGLP1 PROCESS NEXT SEGMENT @V407511 01062000 * RESUME COMMON PROCESSING @V407511 01063000 DROP R1,R2,R8,R14 @V407511 01064000 USING SWPFLAG,R10 @V407511 01065000 USING SHRPAGE,R14 @V407511 01066000 SPACE 01067000 * WHEN FALL THRU HAVE FINISHED PROCESS SO PUT SHRTABLE IN CHAIN 01068000 COMMON DS 0H @V407511 01069000 SPACE 01070000 L R8,=A(DMKVMAS1) ADDRESS OF ANCHOR @VM03171 01071000 L R7,0(,R8) ANCHOR CONTENTS @V304635 01072000 ST R5,0(,R8) ANCHOR NOW POINTS TO NEW BLOK @V304635 01073000 STCM R7,B'0111',SHRFPNT+1 STORE FORWARD POINTER @V60BC11 01074200 ST R8,SHRBPNT STORE BACKWARD POINTER @V60BC11 01074400 ST R5,SHRBPNT-SHRTABLE(,R7) CHANGE BKWD POINTER @VM03100 01076000 * IN PREVIOUS BLOK 01077000 SETVMSHR LH R7,VMSHRSYS GET COUNT OF SHARED SYSTEMS @V304635 01078000 * FOR THIS USER 01079000 LA R7,ONE(,R7) ADD ONE @VM03100 01080000 STH R7,VMSHRSYS STORE NEW COUNT @V304635 01081000 OI VMOSTAT,VMSHR FLAG RUNNING SHARED SYSTEM @V304635 01082000 MVC VMSHRPRC,LPUADDR+1 INIT LAST SERVICED IDENT @V407511 01083000 LH R7,SHRUSECT LOAD COUNT OF USERS FOR THIS @V304635 01084000 * SYSTEM 01085000 LA R7,ONE(,R7) BUMP BY ONE @VM03100 01086000 STH R7,SHRUSECT STORE BACK @V304635 01087000 TM SHRFLAG,SHRNOPRT UNPROTECTED NAMED SYSTEM @V60BC11 01087200 BO SKIPVMA YES, SKIP BUILDING A VMABLOK @V60BC11 01087400 LA R0,VMASIZE GET SIZE OF VMABLOK FOR @V304735 01088000 CALL DMKFREE CALL TO FREE STORAGE MANAGER @V304735 01089000 USING VMABLOK,R1 @V304735 01090000 L R0,VMASSIST FORWARD CHAIN POINTER OF VMABLOKS@V304735 01091000 ST R1,VMASSIST MAKE THIS BLOK FIRST ON CHAIN @V304735 01092000 ST R0,VMAFPNT PUT OLD ONE BACK IN CHAIN @V304735 01093000 ST R5,VMASHRBK STORE POINTER TO (SHRTABLE) @V304735 01094000 MVC VMANAME,SHRNAME SAVE SHARED SYSTEM NAME @V304735 01095000 DROP R1 @V304735 01096000 SKIPVMA DS 0H @V60BC11 01096100 TM APSTAT1,PROCIPL RUNNING ON THE MAIN (IPL) PROC? @V60B7AA 01097100 BO BLDNSHR YES, NO NEED TO UPDATES STE'S @V407511 01098000 TM SHRFLAG,SHRNOPRT UNPROTECTED SHARED SYSTEM? @VMI0032 01098200 BO BLDNSHR YES, NO NEED TO UPDATE STE'S @VMI0032 01098400 * SINCE ONLY ONE SET OF PG. TABLES @VMI0032 01098600 L R2,SHRSEGCT LOAD NUMBER OF SHARED SEGMENTS @V407511 01099000 BCTR R2,0 DECREMENT FOR INDEXING @V407511 01100000 REBUILD DS 0H @V407511 01101000 SLR R7,R7 ZIP REG FOR INSERT @V4M0212 01102000 IC R7,SHRSEGNM(R2) LOAD SHARED SEGMENT NUMBER @V407511 01103000 SLL R7,2 TIMES FOUR FOR INDEXING @V407511 01104000 AL R7,VMSEG LOAD ADDRESS OF STE @V407511 01105000 USING SEGPAGE,R7 @V407511 01106000 L R1,SEGPAGE ADDR. OF MAIN (IPL) PROC PAGTABLE@V60B7AA 01107100 LA R1,PAGBMP(,R1) BUMP TO 2ND SET OF PG/SWP TABLES @V60B7AA 01108100 STCM R1,B'0111',SEGPAGE+1 ADJUST TO ATTACHED PAGTABLE@V407511 01109000 S R2,F1 DECREMENT SEGMENT COUNTER @V407511 01110000 BNM REBUILD CONTINUE REBUILDING @V407511 01111000 SPACE 1 01112000 BLDNSHR DS 0H HERE TO BUILD THE PAGE TABLE @V304635 01113000 * THAT ARE FOR NON-SHARED SYSTEMS. 01114000 L R2,=A(DMKVMAS2) ADDRESS OF NON-SHARED SYSTEMS @VM03171 01115000 L R5,0(,R2) ADDRESS OF FIRST NAMED TABLE @V304635 01116000 NSHRSCAN CR R2,R5 END OF CHAIN REACHED ? @V304635 01117000 BE NSHRBLD YES - BUILD NECESSARY NAME TABLE @V304635 01118000 CLC SYSNAME,SHRNAME NON-SHARED NAME SYSTEM FOUND ? @VM03100 01119000 BE NSHRFND YES - R5 HAS ADDRESS OF NON-SHR @V304635 01120000 * TABLE 01121000 L R5,SHRFPNT ADDRESS OF NEXT NON-SHARED SYSTEM@V304635 01122000 B NSHRSCAN KEEP SEARCHING THE CHAIN . @V304635 01123000 SPACE 1 01124000 NSHRBLD DS 0H BUILD NON-SHARED NAMED SYSTEM @V304635 01125000 * ENTRY. 01126000 LA R0,0+(SHRSEGNM-SHRFPNT)/8 NUMBER OF DW'S @V304635 01127000 CALL DMKFREE GET TABLE FROM FREE STORAGE @V304635 01128000 LR R5,R1 SET INTO PROPER REGISTER @V304635 01129000 XC SHRTABLE(SHRSEGNM-SHRFPNT),SHRTABLE ZERO IT. @V304635 01130000 MVC SHRNAME,SYSNAME SAVE THE NON-SHARED SYSTEM NAME @VM03100 01131000 L R1,0(,R2) ANCHOR OF FIRST NON-SHARED NAME @V304635 01132000 ST R5,0(,R2) ANCHOR POINTS TO NEW BLOCK @V304635 01133000 STM R1,R2,SHRFPNT SET UP FWD/BKWD POINTERS @V304635 01134000 ST R5,SHRBPNT-SHRTABLE(,R1) CHG BKWD IN PREVIOUS @VM03100 01135000 * BLOCK 01136000 NSHRFND LH R1,SHRUSECT COUNT OF USERS FOR THIS SYSTEM @V304635 01137000 LA R1,ONE(,R1) INCREASE BY 1 @VM03100 01138000 STH R1,SHRUSECT SAVE NEW COUNT OF USERS'S @V304635 01139000 SPACE 01140000 L R10,VMSEG ADDRESS OF SEGMENT TABLE @V304635 01141000 SLR R3,R3 CLEAR INDEX REGISTER @V304635 01142000 LH R2,SYSPAGLN NUMBER OF FULL WORDS IN SYSNAME @V304635 01143000 * TABLE 01144000 NSHRPAGE LH R1,SYSPAGNM(R3) GET ADDRESS OF FIRST SAVE PAGE @V304635 01145000 SLR R9,R9 NUMBER OF SEGMENTS PER (SYSPAGNM @V304635 01146000 LH R9,SYSPAGNM+2(R3) LOAD LAST ADDRESS @V304635 01147000 SH R9,SYSPAGNM(R3) CALC. NUMBER OF SEG(S) @V304635 01148000 SRL R9,4 16 PAGES PER SEG @V304635 01149000 LA R9,ONE(,R9) BASE OF 1 @VM03100 01150000 SRL R1,4 LEAVE ONLY SEGMENT NUMBER @V304635 01151000 SLL R1,2 TIMES 4 FOR INDEX INTO SEGTABLE @V304635 01152000 NAMESEG L R7,0(R1,R10) GET PAGE TABLE ADDRESS @V304635 01153000 N R7,=AL4(X'00FFFFFE') CLEAR EXTENSION BITS @VA10481 01154200 SL R7,F16 BACK UP TO PAGE TABLE HEADER @V407511 01155000 CLC PAGSHR-PAGTABLE(,R7),F0 SHARED SEGMENT ENTRY ? @VM03100 01156000 BNZ SEGSHR YES - LEAVE AS IS @V304635 01157000 OI VMPSTAT,VMNSHR RUNNING NON-SHARED SYSTEM @V304635 01158000 ST R5,PAGSHR-PAGTABLE(,R7) SAVE POINTER TO @V407511 01159000 * NON-SHARED SYSTEM NAME @V407511 01160000 SEGSHR LA R1,L'SEGPAGE(,R1) INDEX OF NEXT SEG. TABLE ENTRY@VM03100 01161000 BCT R9,NAMESEG PROCESS NEXT CONTIGUOUS SEG. @V304635 01162000 * ENTRY 01163000 LA R3,L'SYSPAGNM(,R3) INDEX TO NEXT SYSPAGNM ENTRY @VM03100 01164000 BCT R2,NSHRPAGE PROCESS NEXT ENTRY @V304635 01165000 NAMEXIT TM VMPSTAT,VMV370R ECMODE CAPABILITIES ??? @V304635 01166000 BZ IPLEXIT1 GO NO FURTHER IF NOT @V304635 01167000 TM VMPSW+1,EXTMODE IN EXTENDED MODE ??? @V304635 01168000 BZ IPLEXIT1 IF NOT - WE ARE FINISHED HERE @V304635 01169000 OI VMESTAT,VMEXTCM FLAG AS ECMODE PSW @V304635 01170000 TM VMPSW,TRANMODE TRANSLATE ON ??? @V304635 01171000 BZ IPLEXIT1 NOPE -- OK TO RUN @V304635 01172000 CALL DMKVATMD ENTER THE TRANSLATE MODE @V304635 01173000 B IPLEXIT1 AND GO TO IT @V304635 01174000 SPACE 2 01175000 RETURN TM SAVEWRK1+2,LOADFLG REQUEST FOR 'LOADSYS' @V304635 01176000 * FUNCTION ? 01177000 BZ CFGEXIT NO - RETURN TO CALLER @V304635 01178000 L R1,SAVER5 ADDRESS OF USER'S RX REG. @V304635 01179000 LH R2,SYSPAGLN NUMBER OF FW'D IN SYSNAME TABLE @V304635 01180000 SLL R2,2 TIMES 4 FOUR BYTES FOR INDEXING @V304635 01181000 LH R3,SYSPAGNM GET ADDRESS OF FIRST SAVED PAGE @V304635 01182000 SLL R3,12 FORM FULL ADDRESS @V304635 01183000 ST R3,0(,R1) GIVE IT TO USER @V304635 01184000 L R1,SAVER6 ADDRESS OF USER'S RY REGISTER @V304635 01185000 LH R3,SYSPAGNM-2(R2) ADDRESS OF LAST SAVED PAGE @V304635 01186000 SLL R3,12 FULL ADDRESS @V304635 01187000 AL R3,F4095 ADD IN HI PAGE BYTE BOUNDARY @V304635 01188000 ST R3,0(,R1) INTO USER'S RY @V304635 01189000 L R1,SAVER5 GET ADDRESS OF USER'S RX @V304635 01190000 CLC 0(L'VMSTOR,R1),VMSTOR WAS USER'S STORAGE @VM03100 01191000 * OVERLAYED ? 01192000 BNL CFGEXIT NO - RETURN TO CALLER @V304635 01193000 L R1,SAVER6 USER'S RY REGISTER @V304635 01194000 CLC 0(L'VMSTOR,R1),VMSTOR OVERLAY ALL OF USER'S @VM03100 01195000 * STORAGE ? 01196000 BNH SETCC1 IF NOT - LIMIT TO TOP OF SAVED @V304635 01197000 * SYSTEM 01198000 MVC 0(L'VMSTOR,R1),VMSTOR LIMIT TOP OF USER'S @VM03100 01199000 * STORAGE 01200000 B SETCC1 SET CONDITION CODE OF 1 FOR USER @V304635 01201000 CFGEXIT BAL R10,SYSTUNLC UNLOCK SYSTEM NAME TABLE(DMKSNT) @V304635 01202000 EXIT RETURN TO CALLER @V304635 01203000 SPACE 2 01204000 MOVESEGS MVC SHRSEGNM(*-*),SYSHRSEG 'EX' SYSTBL TO SHRTABLE @VM03100 01205000 ZEROSHR XC SHRTABLE(*-*),SHRTABLE 'EX' ZERO SHRTABLE @V4M0179 01206000 DROP R5,R6,R10,R14 @V304635 01207000 SPACE 01208000 SPACE 01209000 SPACE 01210000 SPACE 01211000 CHKPARM EQU * @V304635 01212000 CLC =C'PARM',0(R1) PARM KEYWORK EQUAL TO 'PARM' @VM03100 01213000 BCR 7,R8 IF NOT - RETURN @V304635 01214000 CL R0,F4 CORRECT BYTE COUNT ??? @V304635 01215000 BCR 7,R8 IF NOT RETURN @V304635 01216000 SPACE 01217000 USING BUFFER,R9 @V304635 01218000 SPACE 01219000 CALL DMKSCNFD GET THE START OF THE PARMS @V304635 01220000 BNZ ZEROLEN SET UP FOR ZERO LENGTH PARM @V304635 01221000 LM R2,R3,BUFNXT GET ADDRESS AND COUNT IN BUFFER @V304635 01222000 AR R3,R0 GET TOTAL LENGTH @V304635 01223000 C R3,=F'64' OVER 64 CHARACTERS @V304635 01224000 BH CFG177 IF SO - GO SEND ERROR MESSAGE @V304635 01225000 STC R3,SAVEWRK1+3 SAVE THE BYTE COUNT @V304635 01226000 BCTR R3,0 MINUS ONE FOR THE EX MOVE @V304635 01227000 EX R3,MOVEPARM MOVE 'EM @V304635 01228000 OI SAVEWRK1,PARMFND FLAG HAVE A PARM FOR REST OF @V304635 01229000 * IPL 01230000 BR R8 AND RETURN @V304635 01231000 SPACE 01232000 ZEROLEN MVI SAVEWRK1+3,LEN0 STORAGE ZERO LENGTH @VM03100 01233000 OI SAVEWRK1,PARMFND SET PARM FLAG @V304635 01234000 BR R8 AND RETURN @V304635 01235000 SPACE 01236000 DROP R9 @V304635 01237000 SPACE 01238000 GETSNTBL L R4,SAVEWRK6 IS SYSNAME TABLE ALLREADY IN @V304635 01239000 * STORAGE 01240000 LTR R4,R4 ..... @V304635 01241000 BNZR R5 IF IT IS - RETURN TO CALLER @V304635 01242000 L R1,=A(DMKSNTBL) ADDRESS OF SYSNAME TABLE @V304635 01243000 TRANS 2,1,OPT=(BRING,DEFER,LOCK,SYSTEM) @V304635 01244000 LR R4,R2 ADDRESS OF SYSTABLE TO R4 @V304635 01245000 ST R2,SAVEWRK6 SAVE ADDRESS OF SYSNAME TABLE @V304635 01246000 BR R5 RETURN TO CALLER @V304635 01247000 EJECT 01248000 SYSTUNLC ST R2,SAVEWRK9 SAVE ERROR CODE REGISTER @V304635 01249000 L R2,SAVEWRK6 TEST IF DMKSNT TABLE IN STORAGE @V304635 01250000 LTR R2,R2 IS IT ? @V304635 01251000 BNZ PTRUL IF IS - UNLOCK IT. @V304635 01252000 L R2,SAVEWRK9 RESTORE R2 @V304635 01253000 BR R10 RETURN TO CALLER @V304635 01254000 PTRUL CALL DMKPTRUL UNLOCK THE SYSNAME TABLE @V304635 01255000 XC SAVEWRK6,SAVEWRK6 ZERO OUT ADDRESS OF SYSNAME @V304635 01256000 * TABLE 01257000 L R2,SAVEWRK9 RESTORE ERROR CODE REGISTER @V304635 01258000 BR R10 RETURN TO CALLER @V304635 01259000 SPACE 2 01260000 FREEKBUF L R0,SAVEWRK9 BUFFER LENGTH @VA04160 01261000 L R1,SAVEWRK4 BUFFER ADDRESS @VA04160 01262000 CALL DMKFRET FRET THE BUFFER @VA04160 01263000 BR R10 RETURN @VA04160 01264000 NOSYSOWN EQU * VOLID NOT CP OWNED @V200820 01265000 MVC SAVEWRK4+1(L'SYSVOL),SYSVOL MOVE IN VOLID @VM03100 01266000 MVI SAVEWRK4,SEP00 MOVE IN FIELD DELIMITER @VM03100 01267000 LA R0,LEN15 LOAD LENGTH OF ERROR MSG PARM @VM03100 01268000 LA R1,SAVEWRK2 LOAD PARM REG WITH ADDRESS OF MSG@VM03100 01269000 B CFG179 GO WRITE ERROR MSG DMKCFG179 @VM03100 01270000 NOSYSVOL MVC SAVEWRK4+1(L'SYSVOL),SYSVOL VOL SER FOR ERR MSG @VM03100 01271000 B LOADLEN GO SET UP LENGTH PARM REG @VM03100 01272000 NOSYSRES MVC SAVEWRK4+1(L'VSYSRES),VSYSRES VIRT SYSRES VOL @VM03100 01273000 * SER FOR MSG 01274000 LOADLEN MVI SAVEWRK4,SEP00 MOVE IN FIELD SEPARATOR @VM03100 01275000 LA R0,LEN15 LOAD PARM REG LENGTH OF PARMS @VM03100 01276000 LA R1,SAVEWRK2 LOAD ADDRESS OF ERROR MSG PARMS @VM03100 01277000 B CFG171 GO TO WRITE ERROR MSG ROUTINE @VM03100 01278000 BLD172 EQU * INCOMPATIBLE VSYSRES 01279000 BAL R10,GETVADDR BUILD VADDR 01280000 B CFG172 GO TO WRITE ERROR MSG ROUTINE @VM03100 01281000 SPACE 01282000 BLD173 EQU * VADDR REQUIRED 01283000 BAL R10,GETVADDR BUILD VADDR 01284000 B CFG173 GO TO WRITE ERROR MSG ROUTINE @VM03100 01285000 SPACE 01286000 GETVADDR LH R1,SYSVADDR LOAD VADDR FROM SYSTBL 01287000 CALL DMKCVTBH CONVERT IT 01288000 ICM R1,8,F0 INSERT THE SEPARATER 01289000 ST R1,SAVEWRK4 STORE DEV ADDRESS IN MSG TEXT 01290000 LA R0,12 FIELD LENGTH 01291000 LA R1,SAVEWRK2 FIELD ADDRESS 01292000 BR R10 RETURN 01293000 MOVEPARM MVC VMGPRS(0),0(R1) EXECUTED MOVE @V304635 01294000 MOVGPRS MVC 0(0,R14),0(R15) DITTO @V304635 01295000 SAVENAME MVC SAVEWRK2(0),0(R1) @V304635 01296000 MOVENAME MVC SAVEWRK2(0),0(R2) EXECUTED MOVE @V304635 01297000 SETFLGS OI SAVEWRK1+2,*-* SET USER'S CONDITION CODE IS PSW @VM03100 01298000 SETPSWCC OI 0(R1),*-* SET USER'S CONDITION CODE IN PSW @V304635 01299000 SETCC1 LA R2,CC1 SET CONDITION CODE 1 @VM03100 01300000 B SETCCODE PUT CC IN USER'S PSW @VM03100 01301000 SETCC2 LA R2,CC2 SET CONDITION CODE 2 @VM03100 01302000 B SETCCODE PUT CC IN USER'S PSW @VM03100 01303000 SETCCODE LA R1,VMPSW+4 BC MODE PSW COND. CODE @V304635 01304000 TM VMESTAT,VMEXTCM VM IN EC MODE NOW ? @V304635 01305000 BZ NOECMODE NO - SET BC MODE CC @V304635 01306000 LA R1,VMPSW+2 TARGET FOR EC MODE PSW CC @V304635 01307000 NOECMODE EX R2,SETPSWCC SET PSW CONDITION CODE @V304635 01308000 B CFGEXIT RETURN TO CALLER @V304635 01309000 MASKFLGS DC AL1(LOADFLG,LOADFLG+NONSHARE,PURFLG,FINDFLG) @V304635 01310000 EJECT 01311000 *. 01312000 * 01313000 * SUBROUTINE NAME - 01314000 * 01315000 * DMKCFGCL 01316000 * 01317000 * FUNCTION - 01318000 * 01319000 * TO PROCESS THE DIAGNOSE X'64' INSTRUCTION 01320000 * 01321000 * SUBFUNCTION CODES - 01322000 * 01323000 * X'00' - LOADSYS - LOADS A NAMED SYSTEM IN SHARED MODE 01324000 * 01325000 * X'04' - LOADSYS - LOAD A NAMED SYSTEM IN NONSHARED MODE 01326000 * 01327000 * X'08' - PURGESYS - RELEASES THE NAMED SYSTEM FROM USER'S 01328000 * VIRTUAL STORAGE 01329000 * 01330000 * X'0C' - FINDSYS - FINDS THE STARTING AND ENDING ADDRESS 01331000 * OF A NAMED SYSTEM IN USER'S MEMORY 01332000 * 01333000 * OPERATION - 01334000 * 01335000 * 1. SAVE THE SYSTEM NAME IN SAVEAREA 01336000 * 01336100 * 2. DIVIDE THE SUBFUNCTION CODE BY FOUR AND SET THE 01337000 * APPROPRIATE INTERNAL FLAG IN THE WORKAREA: LOADSYS, 01338000 * FINDSYS OR PURGESYS. 01339000 * 01339100 * 3. IF THIS IS A LOADSYS COMMAND, JOIN CODE AT LOADSYS 01340000 * LABEL (STEP 20 IN PROLOGUE) OF DMKCFGIP. 01341000 * 01341100 * 4. IF IT WASN'T A VALID SUBFUNCTION CODE ISSUE ABEND 10. 01342000 * 01342100 * 5. IF THIS USER IS THE V=R USER, RETURN TO CALLER WITH 01343100 * CONDITION CODE 2. 01343600 * 01344100 * 6. IF LOGOFF HAS STARTED, CALL DMKERMSG TO SEND ERROR 01345000 * MESSAGE DMKCFG001E. 01346000 * 01346100 * 7. TRANS AND LOCK THE SYSTEM NAME TABLE (SYSTBL). 01347000 * 01347100 * 8. LOOP THRU THE SYSTEM NAME TABLE TRYING TO FIND THE 01348000 * REQUESTED NAME. IF THE NAME IS NOT FOUND, CALL 01349000 * DMKERMSG TO SEND ERROR MESSAGE DMKCFG044E. 01350000 * 01350100 * 9. IF THIS IS A PURGESYS OPERATION, SKIP TO STEP 12. 01351000 * 01351100 * 10. USE THE PAGE NUMBERS IN THE SYSTBL TO CALCULATE THE 01352000 * STARTING AND ENDING ADDRESS RANGE OF THE NAMED SYSTEM 01353000 * AND STORE THEM IN THE USER'S PARAMETER AREA. 01354000 * 01354100 * 11. DO A DIRECT ADDRESS LOOKUP TO SEE IF USER IS RUNNING 01355100 * WITH THIS NAMED SYSTEM.IF THE 01355200 * SYSTEM WAS NOT FOUND IN THE USER'S ADDRESS SPACE, SET 01356000 * ITS PSW TO CONTAIN A CONDITION CODE OF ONE AND GOTO 01357000 * STEP 13. IF IT WAS FOUND, GOTO STEP 13. 01358000 * 12. CALL DMKPGSPS TO PURGE THE NAMED SYSTEM FROM THE USER'S 01359000 * ADDRESS SPACE. IF THE NAMED SYSTEM WASN'T FOUND, SET 01360000 * THE USER'S PSW TO CONTAIN A CONDITION CODE OF ONE. 01361000 * 01361100 * 13. CALL DMKPTRUL TO UNLOCK THE SYTEM NAME TABLE. 01362000 * 01362100 * 14. RETURN TO CALLER 01363000 *. 01364000 SPACE 2 01365000 DMKCFGCL RELOC @V304635 01366000 XC SAVEWRK1,SAVEWRK1 CLEAR FLAG BYTES. @V304635 01367000 XC SAVEWRK2(SAVEWRK9-SAVEWRK2+4),SAVEWRK2 CLEAR ALL@VM03100 01368000 STM R1,R2,SAVEWRK2 SAVE THE 'NAMED' SYSTEM @V304635 01369000 SRL R3,2 DIVIDE BY 4 @V304635 01370000 IC R3,MASKFLGS(R3) GET PROPER INDICATOR FLAGS @V304635 01371000 EX R3,SETFLGS TURN ON APPRO. FLAGS @V304635 01372000 CL R11,AVMREAL IS USER IN A V=R AREA ? @VA12820 01372100 BE CFG203 YES.. CAN'T ISSUE THIS FUNCTION @VA12820 01372200 TM SAVEWRK1+2,LOADFLG LOADSYS FUNCTION. @V304635 01373000 BO LOADSYS YES - PROCESS IT. @V304635 01374000 TM SAVEWRK1+2,PURFLG+FINDFLG VALID FUNCTION ? @V304635 01375000 BNZ VALIDREQ YES - PROCESS IT @V304635 01376000 SPACE 1 01377000 ABEND 10 CONDITION SHOULD NEVER HAPPEN. @V304635 01378000 VALIDREQ DS 0H LOCATE THE DESIRED NAMED SYSTEM @V304635 01379000 * FUNCTION 01382000 TM VMRSTAT,VMLOGOFF OTHER ACTIVITY STARTED? @V408246 01383000 BO CFG001 YES, GET OUT AS FAST AS POSSIBLE @V408246 01384000 BAL R5,GETSNTBL BRING IN SYSTEM NAME TABLE @V304635 01385000 USING SYSTBL,R4 @V304635 01386000 NXTNAME CLC SYSNAME,SAVEWRK2 LOOK FOR NAMED SYSTEM @VM03100 01387000 BE CHKUSE FOUND IT. @V304635 01388000 L R3,SYSPNT GET DISP. TO NEXT BLOK @V304635 01389000 AR R4,R3 CALC. ACTUAL NEXT ADDRESS. @V304635 01390000 LTR R3,R3 NAME TABLE EXHAUSTED @V304635 01391000 BZ CFG044 YES - UNKNOWN NAME. @V304635 01392000 B NXTNAME TRY NEXT ENTRY IN TABLE @V304635 01393000 CHKUSE DS 0H @V304635 01394000 TM SAVEWRK1+2,PURFLG PURGESYS FUNCTION ? @V304635 01395000 BO CHKFUNCT LOAD UP NAME AND CALL DMKPGS @V304635 01396000 LH R2,SYSPAGNM USER FIRST PAGE @V304635 01397000 SLL R2,12 ADD DISPLACEMENT TO IT @V304635 01398000 L R5,SAVER5 GET USERS R1 REGISTER @V304635 01399000 ST R2,0(,R5) SAVE FIRST ADDRESS FOR CALLER. @V304635 01400000 LH R3,SYSPAGLN GET NUMBER OF ENTRIES IN TABLE. @V304635 01401000 BCTR R3,0 DECREMENT FOR INDEX @V304635 01402000 SLL R3,2 4 BYTES PER ENTRY @V304635 01403000 LH R2,SYSPAGNM+2(R3) GET ENDING ADDRESS OF SAVED @V304635 01404000 * SYSTEM 01405000 SLL R2,12 ADD IN PROPER DISPLACEMENT @V304635 01406000 AL R2,F4095 ROUND TO LAST BYTE IN THE PAGE @V304635 01407000 L R5,SAVER6 GET USER'S R2 REGISTER @V304635 01408000 ST R2,0(,R5) SAVE ENDING ADDRESS FOR CALLER. @V304635 01409000 CHKFUNCT LM R1,R2,SYSNAME NAME OF 'NAMED' SYSTEM @V304635 01410000 TM SAVEWRK1+2,PURFLG PURGESYS FUNCTION ? @V304635 01411000 BO PGSPS YES - ISSUE CALL TO DMKPGSPS @V304635 01412000 SPACE 1 01413000 L R1,SAVER5 GET USERS R1 REGISTER @V60BC11 01414100 L R1,0(,R1) GET STARTING ADDR OF NAMED SYSTEM@V60BC11 01414200 SRL R1,16 GET SEGMENT NUMBER ONLY @V60BC11 01414300 SLR R2,R2 ZERO REGISTER @V60BC11 01414400 IC R2,VMSEG GET SEGMENT TABLE LENGTH @V60BC11 01414500 LA R2,1(,R2) CHANGE TO BASE OF ONE @V60BC11 01414600 SLL R2,4 TIMES 16 FOR STE COUNT @V60BC11 01414700 CR R1,R2 ADDRESS WITHIN USER STORAGE @V60BC11 01414800 BNL SETCC1 NO, CANNOT HAVE NAMED SEGMENT @VA09458 01414900 SLL R1,2 SEGMENT NUMBER * 4 @V60BC11 01415000 AL R1,VMSEG GET ADDRESS OF STE @V60BC11 01415100 ICM R6,B'0110',(SEGPAGE+1)-SEGTABLE(R1) ANY PTE PT @VA09458 01415225 BZ SETCC1 NO,CANNOT HAVE NAMED SEGMENT @VA09458 01415250 IC R6,(SEGPAGE+3)-SEGTABLE(,R1) GET REST OF PTE @VA09458 01415275 * POINTER 01415300 N R6,=A(X'00FFFFFF'-SEGINV) CLEAR UNWANTED BITS @VA09458 01415325 SL R6,F16 BACKUP TO PAGTABLE HEADER @VA09458 01415350 L R10,PAGSHR-PAGTABLE(,R6) GET ADDR OF SHRTABLE @VA09458 01415375 LTR R10,R10 IS THERE ONE @V60BC11 01415500 BZ SETCC1 NO, CANNOT BE RUNNING NAMED SYS @V60BC11 01415600 USING SHRTABLE,R10 ADDRESSABILITY TO SHRTABLE @V60BC11 01415700 CLC SHRNAME,SAVEWRK2 NAMES MATCH @V60BC11 01415800 BZ CFGEXIT YES, RETURN TO CALLER @V60BC11 01415900 B SETCC1 NO, NOT RUNNING NAMED SYSTEM @V60BC11 01416000 DROP R10 @V60BC11 01416100 EJECT 01416200 PGSPS CALL DMKPGSPS LET PGS PURGE SYSNAME @V304635 01419000 BNZ SETCC1 IF NOT IN USE SET CC=1 @V304635 01420000 B RETURN RETURN TO CALLER. @V304635 01421000 SPACE 1 01422000 CFG001 LA R2,EMSG001 LOAD ERROR CODE @VM03100 01423000 B CALLERM GO SET UP ERROR MSG DMKCFG001 @VM03099 01424000 SPACE 1 01425000 CFG002 LA R2,EMSG002 LOAD ERROR CODE @VM03100 01426000 B CALLERM GO SET UP ERROR MSG DMKCFG002 @VM03099 01427000 SPACE 1 01428000 CFG003 LA R2,EMSG003 LOAD ERROR CODE @VM03100 01429000 B CALLERM GO SET UP ERROR MSG DMKCFG003 @VM03099 01430000 SPACE 1 01431000 CFG013 LM R0,R1,SAVEWRK7 ARGUMENT LENGTH AND ADDRESS @V304635 01432000 LA R2,EMSG013 LOAD ERROR CODE @VM03100 01433000 B CALLERM GO SET UP ERROR MSG DMKCFG013 @VM03099 01434000 SPACE 1 01435000 CFG026 LA R2,EMSG026 LOAD ERROR CODE @VM03100 01436000 B NOVAR GO SET UP ERROR MSG DMKCFG026 @VM03099 01437000 CFG040 CALL DMKCVTBH CONVERT TO PRINTABLE CHAR'S @V304635 01438000 N R1,X40FFS BLANK HIGH BYTE @V304635 01439000 SLR R0,R0 ZERO LENGTH @V304635 01440000 LA R2,EMSG040 LOAD ERROR CODE @VM03100 01441000 B CALLERM GO SET UP ERROR MSG DMKCFG044 @VM03099 01442000 SPACE 1 01443000 SPACE 01444000 SPACE 01445000 CFG044 LA R0,L'SYSNAME LOAD LENGTH OF FIELD @VM03100 01446000 LA R1,SAVEWRK2 FIELD ADDRESS 01447000 LA R2,EMSG044 LOAD ERROR CODE @VM03100 01448000 B CALLERM GO SET UP ERROR MSG DMKCFG044 @VM03099 01449000 SPACE 1 01450000 CFG044A LM R0,R1,SAVEWRK2 ADDRESS OF BAD NAME @V304635 01451000 LA R2,EMSG044 LOAD ERROR CODE @VM03100 01452000 B CALLERM GO SET UP ERROR MSG DMKCFG170 @VM03099 01453000 SPACE 01454000 CFG170 LA R0,L'SYSNAME LOAD LENGTH OF FIELD @VM03201 01455000 LA R1,SAVEWRK2 FIELD ADDRESS @VM03201 01456000 LA R2,EMSG170 LOAD ERROR CODE @VM03201 01457000 B CALLERM ..... 01458000 SPACE 01459000 CFG171 LA R2,EMSG171 LOAD ERROR CODE @VM03100 01460000 B CALLERM GO SET UP ERROR MSG DMKCFG171 @VM03099 01461000 SPACE 01462000 CFG172 LA R2,EMSG172 LOAD ERROR CODE @VM03100 01463000 B CALLERM GO SET UP ERROR MSG DMKCFG172 @VM03099 01464000 SPACE 01465000 CFG173 LA R2,EMSG173 LOAD ERROR CODE @VM03100 01466000 B CALLERM GO SET UP ERROR MSG DMKCFG173 @VM03099 01467000 SPACE 1 01468000 CFG174 LA R2,EMSG174 LOAD ERROR CODE @VM03100 01469000 B NOVAR GO SET UP ERROR MSG DMKCFG174 @VM03099 01470000 SPACE 1 01471000 CFG177 LA R2,EMSG177 LOAD ERROR CODE @VM03100 01472000 B NOVAR GO SET UP ERROR MSG DMKCFG177 @VM03099 01473000 SPACE 01474000 CFG179 LA R2,EMSG179 LOAD ERROR CODE @VM03100 01475000 B CALLERM GO SET UP ERROR MSG DMKCFG179 @VM03099 01476000 SPACE 1 01477000 CFG203 LA R2,EMSG203 LOAD ERROR CODE @VM03100 01478000 SLR R0,R0 CLEAR PARM REG @VM03099 01479000 B NOVAR GO SET UP ERROR MSG DMKCFG203 @VM03099 01480000 SPACE 01481000 SPACE 1 01482000 NAMPERR2 L R0,SAVEWRK9 LENGTH OF KEY TABLE @VA05638 01483000 L R1,SAVEWRK3 ADDRESS OF KEY TABLE @VA05638 01484000 CALL DMKFRET GET RID OF IT @VA05638 01485000 SPACE 1 01486000 NAMPERR1 LR R1,R10 STARTING ADDRESS OF SYSTEM @VA05638 01487000 LR R2,R1 ALSO IS ENDING ADDRESS @VA05638 01488000 CALL DMKPGSPP CLEAR ONLY POSSIBLE PAGE @VA05638 01489000 SR R1,R1 INDICATE NO SHRTABLE @VA05638 01490000 CALL DMKPGSPS FRET TABLES AND REDO VMSIZE @VA05638 01491000 LA R2,EMSG174 LOAD ERROR CODE @VA05638 01492000 SPACE 1 01493000 SPACE 3 01494000 NOVAR SLR R1,R1 ZIP THE PARM REG 01495000 CALLERM BAL R10,SYSTUNLC UNLOCK SYSNAME TABLE @V304635 01496000 ICM R0,B'1110',MODID+3 INSERT MODULE IDENT. @VM03100 01497000 TM SAVEWRK1+2,LOADFLG+PURFLG+FINDFLG DIAG. @V304635 01498000 * FUNCTION ? 01499000 BZ ERMSG NO - CALL ERROR MESSAGE MODULE @V304635 01500000 L R6,SAVER6 GET ADDRESS OF USERS R2 REGISTER @V304635 01501000 ST R2,0(,R6) YES - SAVE ERROR RETURN CODE @V304635 01502000 B SETCC2 SET CC=2 AND RETURN TO CALLER @V304635 01503000 ERMSG CALL DMKERMSG SEND THE ERROR MESSAGE @V304635 01504000 * 01505000 * ERMSG WILL RETURN DIRECTLY TO DMKCFM -- NOT HERE -- 01506000 * 01507000 DS 0F 01507010 CFGSYSAP DC A(DMKSYSAP) ADDRESS OF DMKSYSAP @V5BC0AB 01507110 YES EQU C'Y' @V5BC0AB 01507210 SPACE 3 01508000 PAGE2314 EQU 32 NUMBER OF PAGES PER CYLINDER @VM03100 01509000 * (2314/2319). 01510000 PAGE3330 EQU 57 NUMBER OF PAGES PER CYLINDER @VM03100 01511000 * (3330). 01512000 PAGE3350 EQU 120 NUMBER OF PAGES PER CYLINDER @VM03100 01513000 * (3350). 01514000 PAGE3375 EQU 96 Number of pages per cylinder HRC106DK 01514100 * (3375) HRC106DK 01514200 PAGE3380 EQU 150 Number of pages per cylinder HRC106DK 01514300 * (3380) HRC106DK 01514400 PAGE2305 EQU 24 NUMBER OF PAGES PER CYLINDER @VM03100 01515000 * (2305/3340). 01516000 * 01517000 LEN0 EQU 0 LENGTH VALUE OF 0 @VM03100 01518000 LEN3 EQU 3 LENGTH VALUE OF 3 @VM03100 01519000 LEN4 EQU 4 LENGTH VALUE OF 4 @VM03100 01520000 LEN15 EQU 15 LENGTH VALUE OF 15 @VM03100 01521000 * 01522000 CC0 EQU X'00' VALUE FOR CONDITION CODE 0 @VM03100 01523000 CC1 EQU X'10' VALUE FOR CONDITION CODE 1 @VM03100 01524000 CC2 EQU X'20' VALUE FOR CONDITION CODE 2 @VM03100 01525000 CC3 EQU X'30' VALUE FOR CONDITION CODE 3 @VM03100 01526000 * 01527000 ONE EQU 1 VALUE OF ONE @VM03100 01528000 * 01529000 SEGINDEX EQU 1 SEGMENT INDEX VALUE OF 1 @VM03100 01530000 * 01531000 INDEX1 EQU 1 INDEXING BY 1 @VM03100 01532000 INDEX4 EQU 4 INDEXING BY 4 @VM03100 01533000 * 01534000 RETPLUS4 EQU 4 VALUE USED FOR RETURNING PLUS 4 @VM03100 01535000 * 01536000 SEP00 EQU X'00' SEPARATOR CHARACTER @VM03100 01537000 * 01538000 HEX00 EQU X'00' VALUE OF X'00' @VM03100 01539000 HEXC4 EQU X'C4' HEX VALUE OF X'C4' @VM03100 01540000 HEX02 EQU X'02' HEX VALUE OF X'02' @VM03100 01541000 * 01542000 PAGHDR EQU 2 LENGTH OF PAGHDR @VM03100 01543000 SWPHDR EQU 8 LENGTH OF SWPHDR @VM03100 01544000 * 01545000 EMSG001 EQU 1 ERROR MESSAGE NUMBER 001 @VM03100 01546000 EMSG002 EQU 2 ERROR MESSAGE NUMBER 002 @VM03100 01547000 EMSG003 EQU 3 ERROR MESSAGE NUMBER 003 @VM03100 01548000 EMSG006 EQU 6 ERROR MESSAGE NUMBER 006 @VM03100 01549000 EMSG013 EQU 13 ERROR MESSAGE NUMBER 013 @VM03100 01550000 EMSG026 EQU 26 ERROR MESSAGE NUMBER 026 @VM03100 01551000 EMSG040 EQU 40 ERROR MESSAGE NUMBER 040 @VM03100 01552000 EMSG044 EQU 44 ERROR MESSAGE NUMBER 044 @VM03100 01553000 EMSG170 EQU 170 ERROR MESSAGE NUMBER 170 @VM03100 01554000 EMSG171 EQU 171 ERROR MESSAGE NUMBER 171 @VM03100 01555000 EMSG172 EQU 172 ERROR MESSAGE NUMBER 172 @VM03100 01556000 EMSG173 EQU 173 ERROR MESSAGE NUMBER 173 @VM03100 01557000 EMSG174 EQU 174 ERROR MESSAGE NUMBER 174 @VM03100 01558000 EMSG177 EQU 177 ERROR MESSAGE NUMBER 177 @VM03100 01559000 EMSG179 EQU 179 ERROR MESSAGE NUMBER 179 @VM03100 01560000 EMSG203 EQU 203 ERROR MESSAGE NUMBER 203 @VM03100 01561000 EMSG300 EQU 300 ERROR MESSAGE NUMBER 300 @VM03100 01562000 EMSG435 EQU 435 ERROR MESSAGE NUMBER 435 @VM03100 01563000 VMUSERL EQU 8 LENGHT OF VMUSER FIELD @VA13054 01563500 SPACE 2 01564000 LTORG * @VM03100 01565000 SPACE 01566000 USERSTOR DSECT @VM03100 01567000 CYLAREA DS XL2 FILLER @VM03100 01568000 DEVAREA DS XL2 PLACE FOR DEVICE ADDRESS @VM03100 01569000 DS 4X FILLER @VM03100 01570000 MSGBYTE DS XL2 PLACE FOR MESSAGE INFORMATION @VM03100 01571000 STOPBYTE DS 1X STOP FLAG @VM03100 01572000 * 01573000 * BITS DEFINED IN STOPBYTE 01574000 NOSTOP EQU X'00' NO STOP ON IPL @VM03100 01575000 IPLSTOP EQU X'80' STOP ON IPL @VM03100 01576000 EJECT 01577200 OSVSCOM MSSCOM @VA13054 01577400 SPACE 1 01577600 COPY CONBUF @VM03100 01578000 COPY TREXT @VM03100 01579000 COPY SHRTABLE @VM03100 01580000 PSA , @V306638 01581000 COPY CORE @V306638 01582000 COPY DEVTYPES @V306638 01583000 COPY EQU @V306638 01584000 COPY IOBLOKS @V306638 01585000 COPY RBLOKS @V306638 01586000 COPY SAVE @V306638 01587000 COPY SAVTABLE @V306638 01588000 COPY SYSTBL @V306638 01589000 COPY VBLOKS @V306638 01590000 COPY VMBLOK @V306638 01591000 END 01592000