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 <CYL-NO> <STOP> <CLEAR> | 00163000
* | I | <NOCLEAR> | 00164000
* | | <PARM P1 P2 ...> | 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