ibm:vm370-lib:cp:dmkbld.assemble_src
Table of Contents
DMKBLD Source
References
- Fixes Applied : 7
- This Source Date : Thursday, December 7, 1978
- Last Fix ID : [HRC073DK]
Source Listing
- DMKBLD.ASSEMBLE.txt
- BLD TITLE 'DMKBLD (CP) VM/370 - RELEASE 6' 00001000
- ISEQ 73,80 VALIDATE SEQUENCING OF SYSIN 00002000
- *. 00003000
- * MODULE NAME - 00004000
- * 00005000
- * DMKBLD 00006000
- * 00007000
- * CONTENTS - 00008000
- * 00009000
- * DMKBLDRT - BUILD REAL SEGMENT, PAGE, AND SWAP TABLES 00010000
- * DMKBLDRL - RELEASE REAL SEGMENT, PAGE, AND SWAP TABLES 00011000
- * DMKBLDVM - BUILD A NEW VMBLOK 00012000
- * DMKBLDEC - BUILD AND INITIALIZE AN ECBLOK 00013000
- *. 00014000
- EJECT 00015000
- COPY OPTIONS 00016000
- COPY LOCAL 00017000
- SPACE 2 00018000
- DMKBLD CSECT 00019000
- SPACE 00020000
- USING PSA,R0 00021000
- USING VMBLOK,R11 00022000
- USING SAVEAREA,R13 00023000
- SPACE 00024000
- EXTRN DMKSCNRD 00025000
- EXTRN DMKCVTBH 00026000
- EXTRN DMKCVTAB @V408246 00026500
- EXTRN DMKSCHCP,DMKTMRCK @V2B4320 00027000
- EXTRN DMKRIORN LIST OF 3705 DEVICES IN DMKRIO @V200820 00028000
- AIF (NOT &VIRREAL).VIRT0 00029000
- EXTRN DMKSLC,DMKQCNWT 00030000
- EXTRN DMKERMSG 00031000
- .VIRT0 ANOP 00032000
- EJECT 00033000
- *. 00034000
- * SUBROUTINE NAME - 00035000
- * 00036000
- * DMKBLDRT - BUILD REAL SEGMENT, PAGE, AND SWAP TABLES 00037000
- * 00038000
- * FUNCTION - 00039000
- * 00040000
- * TO CREATE AND INITIALIZE SEGMENT, PAGE, AND SWAP TABLES, 00041000
- * AS A FUNCTION OF VIRTUAL CORE SIZE, AS PART OF THE 00042000
- * PROCESS OF CREATING A USER'S VIRTUAL MACHINE. 00043000
- * 00044000
- * ATTRIBUTES - 00045000
- * 00046000
- * REENTRANT, PAGEABLE, CALLED VIA SVC 00047000
- * 00048000
- * ENTRY POINT - 00049000
- * 00050000
- * DMKBLDRT 00051000
- * 00052000
- * ENTRY CONDITIONS - 00053000
- * 00054000
- * GPR 1 = BEGINING AND ENDING ADDRESS TO BUILD TABLES. 00055000
- * BYTES 0-1 = BEGINING ADDRESS 00056000
- * FIRST 4 BITS = 0,NEXT 8 BITS = SEGMENT, NEXT 4 = PAGE 00057000
- * BYTES 2-3 = ENDING ADDRESS 00058000
- * FIRST 4 BITS = 0,NEXT 8 BITS = SEGMENT, NEXT 4 = PAGE 00059000
- * 00060000
- * PARMS ARE PASSED IN R2+3: 00061000
- * 00062000
- * PAGTONLY = BUILD ONE PAGE/SWAP TABLE & RETURN IN R1 00062100
- * NEWPAGES = BUILD A NEW PAGE/SWAP TABLE 00063000
- * NEWSEGS = BUILD SET OF NEW SEGMENT TABLES 00064000
- * KEEPSEGS = RETAIN THE INFORMATION IN THE OLD SEGMENT TABLE 00065000
- * OLDVMSEG = VMSEG POINTER IN VMBLOK IS VALID 00066000
- * 00067000
- * 00068000
- * GPR 11 = ADDRESS OF USER'S VMBLOK 00069000
- * GPR 12 = ADDRESS OF DMKBLDRT 00070000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00071000
- * 00072000
- * EXIT CONDITIONS - 00073000
- * 00074000
- * SEGMENT, PAGE, AND SWAP TABLES HAVE BEEN CREATED AND FILLED IN 00075000
- * 00076000
- * CALLS TO OTHER ROUTINES - 00077000
- * 00078000
- * DMKFREE - TO OBTAIN FREE STORAGE FOR TABLES TO BE CREATED 00079000
- * DMKERMSG - TO OUTPUT ERROR MESSAGES 00080000
- * DMKBLDRL - TO RELEASE THE OLD SEGMENT TABLE 00081000
- * 00082000
- * EXTERNAL REFERENCES - 00083000
- * 00084000
- * AVMREAL - POINTER TO VMBLOK OF VIRT=REAL USER 00085000
- * DMKSLC - ADDRESS OF UPPER BOUNDARY OF VIRT=REAL AREA 00086000
- * 00087000
- * TABLES / WORK AREAS - 00088000
- * 00089000
- * SEGMENT TABLE 00090000
- * PAGE TABLE 00091000
- * SWAP TABLE 00092000
- EJECT 00093000
- * REGISTER USAGE - 00094000
- * 00095000
- * GPR 6 = ADDRESS OF SEGMENT TABLE 00096000
- * GPR 7 = ADDRESS OF PAGE TABLE 00097000
- * GPR 8 = ADDRESS OF SWAP TABLE 00098000
- * GPR 11 = ADDRESS OF USER'S VMBLOK 00099000
- * GPR 12 = BASE REGISTER 00100000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00101000
- * 00102000
- * GPRS 0-5, 9-10, AND 14-15 ARE WORK REGISTERS. 00103000
- * 00104000
- * NOTES - 00105000
- * 00106000
- * OPERATION - 00107000
- * A) IF PAGE-SWAP SKIP SPECIFIED, GO TO STEP C 00108000
- * B) ADJUST R5 WITH NEW TOTAL NUMBER OF PAGES TO BUILD 00109000
- * PAGE AND SWAP TABLES FOR 00110000
- * C) IF SKIP SEGTABLE PROCESS SPECIFIED, GO TO 1.7 00111000
- * D) IF THERE IS AN OLD VMSEG POINTER, TEST IF NUMBER OF 00112000
- * ENTRIES IS THE SAME AS DESIRED IN THE NEW SEGTABLE. 00113000
- * IF NOT THE SAME, OR IF NO OLD VMSEG, GO TO STEP 1 00114000
- * E) IF OLD SEGTABLE ENTRIES ARE TO BE SAVED, GO TO STEP 1.7 00115000
- * F) CALL BLDRL TO RELEASE ALL PAG-SWAP TABLES, BUT NOT 00116000
- * OLD SEGTABLE, AND GO TO STEP 1.7 00117000
- * 00118000
- * 00119000
- * 1. DMKFREE IS CALLED FOR 15 DOUBLE WORDS OF FREE STORAGE FOR 00120000
- * THE SEGMENT TABLE. THE ADDRESS OBTAINED FROM DMKFREE IS 00121000
- * ROUNDED (AS NEEDED) TO ALIGN THE SEGMENT TABLE ON A 64-BYTE 00122000
- * 1.10 IF DATA IN OLD SEGTABLE IS NOT TO BE SAVED, GO TO 1.14 00123000
- * 1.11 MOVE DATA FROM OLD SEGTABLE TO NEW 00124000
- * 1.12 IF NEW SEGTABLE > OLD, GO TO STEP 1.15 00125000
- * 1.13 SET R1,R2 FOR FRETS OF OLD PAG-SWP TABLES NOT MOVED 00126000
- * AND FRET OLD SEGTABLE. GO TO STEP 1.2 00127000
- * 1.14 SET R1,R2 FOR FRET OF ALL PAGE,SWAP,SEG TABLES. GO TO 1.2 00128000
- * 1.15 SET R1,R2 FOR FRET OF OLD SEGTABLE ONLY 00129000
- * 00130000
- * 1.2 CALL BLDRL TO DO FRETS 00131000
- * 00132000
- * 1.3 STORE NEW VMSEG, VMSEGDSP 00133000
- * 00134000
- * 00135000
- * 1.60 IF OLD SEGTABLE ENTRIES NOT SAVED, GO TO 1.62 00136000
- * 1.61 COMPUTE START OF INVALID STE'S 00137000
- * 1.62 INVALIDATE STE'S 00138000
- * 00139000
- * 1.70 IF VIRT=REAL GO TO STEP 2 00140000
- * 1.71 IF SKIP PAG-SWP BUILD SPECIFIED, RETURN TO CALLER 00141000
- * 1.72 ADJUST R6 FOR START OF SEGMENTS TO BUILD 00142000
- * PAGE AND SWAP TABLES FOR 00143000
- * 00144000
- * 1.5 IF VM ASSIST IS AVAILABLE, ADDRESS OF SEGMENT TABLE 00145000
- * IS PUT INTO MICBLOK. 00146000
- * 00147000
- * 2. THEN, DEPENDING UPON THE CORE SIZE, THE APPROPRIATE SIZE 00148000
- * OF PAGE TABLE AND SWAP TABLE FOR A SEGMENT ARE COMPUTED AND 00149000
- * OBTAINED FROM FREE STORAGE, AND THEN INITIALIZED TO THEIR 00150000
- * DEFAULT VALUES. 00151000
- * 00152000
- * 2.1 IF PAGETONLY IS SPECIFIED, RETURN TO CALLER. 00152100
- * 3. STEP 2 IS THEN REPEATED, AS NECESSARY, UNTIL SUFFICIENT 00153000
- * PAGE TABLES AND SWAP TABLES HAVE BEEN OBTAINED AND SET UP 00154000
- * TO HANDLE THE VIRTUAL MACHINE SIZE SPECIFIED. 00155000
- * 00156000
- * 4. BEFORE RETURNING TO THE CALLER; THE VMPSTAT FIELD IS 00157000
- * CHECKED FOR VIRT=REAL OPTION. IF THIS USER DOES NOT HAVE 00158000
- * VIRT=REAL PRIVILEGE, EXIT TO THE CALLER. OTHERWISE 00159000
- * DETERMINE IF THE VIRT=REAL AREA CAN BE GIVEN TO THIS USER, 00160000
- * 00161000
- * A. CALCULATE THE SIZE OF VIRT=REAL AREA; A(DMKSLC-4096), 00162000
- * IS THE SIZE IN BYTES OF THE AREA. 00163000
- * 00164000
- * B. VIRTUAL MACHINE SIZE MUST BE LESS THAN VIRT=REAL SIZE 00165000
- * 00166000
- * C. THE POINTER IN PSA WORD <AVMREAL> MUST BE ZERO (0) 00167000
- * INDICATING THE VIRT=REAL AREA IS FREE AND NOT IN USE 00168000
- * 00169000
- * IF THE ABOVE CONDITIONS ARE MET, THE PAGE AND SEGMENT 00170000
- * TABLE ENTRIES ARE CHANGED TO REFLECT THAT THE PAGES ARE IN 00171000
- * REAL STORAGE. THE AVMREAL WORD IN PSA IS ALTERED TO POINT 00172000
- * TO THIS USER'S VMBLOK. EXIT IS NOW MADE TO THE CALLER. 00173000
- * 00174000
- * 00175000
- * 00176000
- * RESPONSES - 00177000
- * 00178000
- * STORAGE IS VIRTUAL=REAL 00179000
- * 00180000
- * 00181000
- * ERROR MESSAGES - 00182000
- * 00183000
- * DMKBLD200E VIRT=REAL AREA NOT AVAILABLE; IN USE BY <SYSTEM> 00184000
- * <USERID> 00185000
- * 00186000
- * DMKBLD201E VIRT=REAL AREA NOT AVAILABLE; DAMAGED PAGES 00187000
- * 00188000
- * DMKBLD202E VIRT=REAL AREA NOT AVAILABLE; INSUFFICIENT STORAGE 00189000
- * 00190000
- *. 00191000
- EJECT 00192000
- DC CL8'DMKBLD' MODULE IDENTIFIER. 00193000
- SPACE 00194000
- DMKBLDRT RELOC BUILD REAL SEGMENT, PAGE, AND SWAP TABLES 00195000
- LR R5,R1 SAVE THE CORE SIZE 00196000
- N R5,F4095 CLEAR OUT FIRST ADDRESS @V304635 00197000
- LA R5,1(,R5) INCREASE IT BY 1 FULL PAGE. @V304635 00198000
- LR R0,R5 SAVE TOTAL NUMBER OF PAGES @V304635 00199000
- TM SAVER2+3,NEWPAGES NEW PAGE TABLES REQUESTED @V304635 00200000
- BZ BLDRT01 NO, THEN NO NEED TO ADJ R5 @V304635 00201000
- SRL R1,16 ADDRESS OF FIRST SEG. TO BUILD. @V304635 00202000
- SR R5,R1 GET NEW TOTAL NUMBER OF PAGES @V304635 00203000
- * TO BUILD PAG-SWP TABLES FOR 00204000
- BLDRT01 EQU * @V304635 00205000
- TM SAVER2+3,PAGTONLY JUST WANT TABLE? @V408246 00205100
- BO SEGSKIP YES, SKIP SEGMENT TABLE @V408246 00205300
- * PROCESSING 00205500
- SR R1,R1 CLEAR R1 00206000
- SRDL R0,8 SHIFT TO OBTAIN NUMBER OF SEGMENT TABLES 00207000
- LTR R1,R1 DID IT COME OUT EVEN ? 00208000
- BZ BLDR01 YES, THIS TIME. 00209000
- AL R0,F1 ADD 1 TO R0 IF NOT. 00210000
- BLDR01 LR R3,R0 REMEMBER NUMBER OF SEGMENT TABLES IN R3 00211000
- SR R4,R4 ZIP REG @V304635 00212000
- TM SAVER2+3,OLDVMSEG IS THERE AN OLD SEGTABLE @V304635 00213000
- BZ NOSEG01 NO, THEN LEAVE R4=0 @V304635 00214000
- IC R4,VMSEG SET R4=NUMBER SEGTABLES IN @V304635 00215000
- LA R4,1(,R4) OLD VMSEG(ORIGIN 1) @V304635 00216000
- NOSEG01 EQU * @VA06171 00216600
- CR R4,R3 IS OLD HIGHER THAN NEW @VA06171 00217200
- BL BLDRT02 NO WE NEED FREE STORAGE @VA06171 00217800
- * FOR THE NEW SEGTABLE 00219000
- TM SAVER2+3,KEEPSEGS KEEP OLD SEG. TABLE DATA ? @V304635 00220000
- BO SEGSKIP YES, THE OLD SEGTABLE WILL DO @V304635 00221000
- SR R1,R1 CLEAR @V408246 00222100
- IC R1,VMSEG SEGMENT COUNT/16 -1 @V408246 00222300
- LA R1,1(,R1) SEGMENT COUNT/16 @V408246 00222500
- SLL R1,4+4 SEGMENT COUNT * 16 @V408246 00222700
- BCTR R1,0 -1 @V408246 00222900
- CALL DMKBLDRL,PARM=DELPAGES RELEASE PAGE/SWAP TABLES @V304635 00224000
- B SEGSKIP FINISHED WITH SEGTABLE PROCESSING@V304635 00225000
- EJECT 00226000
- BLDRT02 EQU * HERE TO GET FREE STORAGE FOR @V304635 00227000
- CLI SAVER2+3,KEEPSEGS+OLDVMSEG COMPRESS SEGTABLE? @V408246 00228100
- BE COMPPAGE YES, GET STORAGE FOR NEW SEG @V408246 00228200
- CLI SAVER2+3,NEWPAGES+KEEPSEGS+OLDVMSEG+DELPAGES @V408246 00228300
- BE COMPPAGE COMPRESS SEGMENT TABLE @V408246 00228400
- CR R4,R3 WILL NEW PAGES FIT INTO OLD? @V408246 00228500
- BNL SEGSKIP YES, LEAVE OLD AS IS @V408246 00228600
- COMPPAGE DS 0H BUILD NEW TABLES @V408246 00228700
- SLL R0,3 8 DBL-WORDS NEEDED FOR EACH 64-BYTE SEG. 00240000
- AL R0,F7 PLUS 7 TO ENSURE 64-BYTE ALIGNMENT 00241000
- CALL DMKFREE GET SPACE FOR REAL SEGMENT TABLES 00242000
- LA R6,63(,R1) ROUND UP TO NEXT 64-BYTE BOUNDARY 00243000
- N R6,=A(X'FFFFC0') (IN R6) 00244000
- ST R1,SAVEWRK1 SAVE REAL BEGINING OF NEW @V304635 00245000
- TM SAVER2+3,OLDVMSEG OLD TABLES? @V408246 00246010
- BZ NOSOLD NOPE, BYPASS QUIESE @V408246 00246030
- BLDRQ DS 0H MAKE SURE OLD TABLE IS QUITE @V408246 00246050
- L R8,VMSEG START OF OLD SEG TABLE @V408246 00246070
- LA R8,0(,R8) @V408246 00246090
- LR R9,R4 LENGTH OF OLD / 64 @V408246 00246110
- SLL R9,6 LENGTH OF OLD TABLE @V408246 00246130
- LA R9,0(R9,R8) END OF OLD TABLE @V408246 00246150
- SR R1,R1 VIRTUAL ADDRESS OF SEGMENT @V408246 00246170
- USING SEGTABLE,R8 @V408246 00246190
- SEGQCHK DS 0H @V408246 00246210
- TM SEGPAGE+3,SEGENQ+SEGINV SEGMENT AVAILABLE? @V408246 00246230
- BNO SEGCHKL YES, CHECK NEXT @V408246 00246250
- ICM R0,B'0110',SEGPAGE+1 (ONLY IF POINTER = 0) @V408246 00246270
- BNZ SEGCHKL NOT ZERO @V408246 00246290
- TRANS 2,1,OPT=(DEFER) WAIT FOR AWHILE @V408246 00246310
- B BLDRQ START ALL OVER AGAIN @V408246 00246330
- SEGCHKL DS 0H @V408246 00246350
- A R1,=A(X'10000') NEXT VIRTUAL SEGMENT ADDRESS @V408246 00246370
- LA R8,4(,R8) NEXT STE ADDRESS @V408246 00246390
- CR R8,R9 LAST ENTRY PROCESSESED? @V408246 00246410
- BL SEGQCHK NO @VA08670 00246430
- DROP R8 @V408246 00246450
- NOSOLD DS 0H @V408246 00246470
- TM SAVER2+3,KEEPSEGS KEEP OLD SEG. TABLE DATA ? @V304635 00247000
- BZ NOMOVE NO, THEN SKIP THE MVCL @V304635 00248000
- LR R7,R3 GET NUM SEGTABLES IN NEW VMSEG @V304635 00249000
- SLL R7,6 TIMES 64 BYTES PER TABLE @V304635 00250000
- LR R9,R4 GET NUM SEGTABLES IN OLD VMSEG @V304635 00251000
- SLL R9,6 TIMES 64 @V304635 00252000
- L R8,VMSEG GET OLD VMSEG ORIGIN @V304635 00253000
- LA R8,0(,R8) WITHOUT LENGTH @V304635 00254000
- LR R2,R6 SAVE STARTING ADDRESS OF VMSEG @V304635 00255000
- MVCL R6,R8 MOVE OLD SEGTABLE DATA TO NEW @V304635 00256000
- LR R6,R2 RESTORE STARTING ADDRESS OF VMSEG@V304635 00257000
- EJECT 00257100
- NOMOVE TM SAVER2+3,OLDVMSEG IS THERE AN OLD SEGTABLE. @V304635 00258000
- BZ SKIPFRET NO, THEN DON'T FRET ABOUT IT @V304635 00259000
- CALBLDRL CALL DMKBLDRL,PARM=DELSEGS FRET OLD SEGMENT TABLE @V304635 00260000
- EJECT 00260100
- SKIPFRET ST R6,VMSEG STORE NEW SEGTABLE POINTER @V304635 00261000
- LR R15,R3 GET NUMBER OF SEGMENT TABLES LESS 1 00262000
- BCTR R15,0 ... 00263000
- STC R15,VMSEG AND STORE IN LEFTMOST BYTE OF VMSEG. 00264000
- LR R15,R6 GET SEGTABLE POINTER @V304635 00265000
- S R15,SAVEWRK1 SUB REAL BEG OF SEGTABLE @V304635 00266000
- STH R15,VMSEGDSP SAVE IN VMBLOK @V304635 00267000
- L R15,VMMICRO GET ADDRESS OF MICBLOK @V201537 00268000
- LA R15,0(R15) CLEAR ANY FLAG BITS @V201537 00269000
- LTR R15,R15 IS THERE A MICBLOK? @V201537 00270000
- BE NOMIC1 BRANCH IF NOT @V201537 00271000
- USING MICBLOK,R15 @V201537 00272000
- MVC MICRSEG,VMSEG SAVE SEG TABLE PTR FOR MICRO ASST@V201537 00273000
- DROP R15 @V201537 00274000
- NOMIC1 EQU * @V201537 00275000
- TM SAVER2+3,KEEPSEGS IF WE DIDN'T SAVE OLD SEG @V304635 00276000
- BZ ALLNG TABLE ENTRIES, THEN ALL OF NEW @V304635 00277000
- * SEGTABLE ENTRIES ARE INVALID 00278000
- SR R3,R4 SUB NUM OLD SEGTABLES FROM NEW @V304635 00279000
- BNP SEGSKIP IF NEG, THEN THERE ARE NO @V304635 00280000
- * INVALID STE, SINCE WE DECREASED 00281000
- * THE SEGTABLE AND SAVED DATA 00282000
- SLL R4,6 GET DSP FROM TOP OF SEGTABLE TO @V304635 00283000
- * START INVALIDATING 00284000
- AR R6,R4 BY MUL NUM SEGTABLES BY 64. AND @V304635 00285000
- * ADD TO SEGTABLE ORIGIN IN R6 00286000
- ALLNG LA R15,1 INVALID STE INDICATOR @V304635 00287000
- BLDRSEG ST R15,0(R6) STORE INVALID STE @V304635 00288000
- MVC 4(60,R6),0(R6) DO ALL SEGTABLE @V304635 00289000
- LA R6,64(,R6) POINT TO NXT SEGTABLE @V304635 00290000
- BCT R3,BLDRSEG DO NXT SEGTABLE(IF ANY) @V304635 00291000
- EJECT 00292000
- SEGSKIP EQU * FINISHED WITH SEGTABLE PROCESSING@V304635 00293000
- TM SAVER2+3,NEWPAGES REQUESTING PAGE TABLES ? @VM03017 00294000
- BZ RETBLDRT IF NOT - RETURN TO CALLER @VM03017 00295000
- SLR R3,R3 CLEAR @VM03017 00296000
- L R6,VMSEG GET SEGTABLE ORIGIN @VM03017 00297000
- LH R3,SAVER1 GET SEG TO BEG BUILD @V304635 00298000
- SRL R3,4 DROP THE PAGE NUMBER @V304635 00299000
- SLL R3,2 GET DSP INTO VMSEG TO START @V304635 00300000
- DOPAGSWP LA R6,0(R3,R6) POINT TO 1ST STE TO BUILD FOR @V304635 00301000
- L R3,=XL4'00010000' TO ADD 1 TO PAGE NUMBER IN SWPTABLE 00302000
- LA R10,8 TO ADD 8 TO A REGISTER LATER 00304000
- TM SAVER2+3,PAGTONLY RETURN IN R2 REQUESTED? @V408246 00305100
- BZ BLDRPAGE NO, THEN CONTINUE @V408246 00305200
- LA R6,SAVEWRK9 YES, POINT TO DUMMY STE @V408246 00305300
- LA R4,16 LOAD R4 WITH CONSTANT 16 @V408246 00305400
- CR R5,R4 INSURE BUILD IS FOR 1 SEG @V408246 00305500
- BNH ISINVAL ELSE QUIT @V408246 00305600
- ABEND 3 @V408246 00305700
- USING SEGTABLE,R6 00306000
- * INITIALIZE PAGE & SWAP TABLES FOR ONE SEGMENT OF 16 PAGES (OR LESS) 00307000
- BLDRPAGE LA R4,16 LOAD THE CONSTANT 16 00308000
- ICM R15,B'0011',SEGPAGE+1 IS THERE A PAGTABLE PTR @V408246 00309100
- BNZ NOTINVAL YES THERE IS ONE @V408246 00309200
- TM SEGPAGE+3,SEGINV IF NOT, MAKE SURE IT'S @VA08431 00309305
- BO ISINVAL NOT ON DASD BUT INVALID @VA08431 00309405
- CLI SAVER2+3,OLDVMSEG+KEEPSEGS+NEWPAGES+NEWSEGS ?? @V408246 00309500
- BNE BLD4 NO, DIE @V408246 00309600
- TM SEGPAGE+3,SEGENQ IS SEGMENT ENQUEUED? @V408246 00309700
- BZ SKIPBLD NO, BYPASS @V408246 00309800
- ABEND 4 @V408246 00309900
- NOTINVAL DS 0H @V408246 00310000
- CLI SAVER2+3,OLDVMSEG+KEEPSEGS+NEWPAGES+NEWSEGS @V304635 00311000
- BE SKIPBLD ONLY BUILD THOSE INVALID STE @V304635 00312000
- TM SAVER2+3,OLDVMSEG+KEEPSEGS+NEWPAGES BUILD ALL ? @V304635 00313000
- BNO BLDTHEM YES @V304635 00314000
- LH R1,SAVER1+2 GET ENDING ADDRESS TO BUILD FOR @V304635 00315000
- SLL R1,12 ADD TO IT THE DISPLACEMENT @V304635 00316000
- CL R1,VMSTOR ADDRESS < VM STORAGE SIZE @V304635 00317000
- BH BLDTHEM NO - BUILD PAGE TABLES @V304635 00318000
- CLR R5,R4 IS THERE 16 PAGES IN SEGMENT @V304635 00319000
- BL FORCE16 NO - FORCE IT TO 16 @V304635 00320000
- CLI SEGPLEN,X'F0' ARE THERE PRESENTLY 16 PAGES IN @V304635 00321000
- * SEG 00322000
- BE SKIPBLD YES - THEN NO NEED TO BUILD @V304635 00323000
- * ANYTHING 00324000
- FORCE16 LA R5,16 BUILD 16 PAGE TABLE ENTRIES @V304635 00325000
- BLDTHEM L R2,VMSEG GET SEGTABLE ORIGIN @V304635 00326000
- LA R2,0(,R2) STRIP LENGTH @V304635 00327000
- LR R1,R6 GET CURRENT STE ADDRESS @V304635 00328000
- SR R1,R2 DSP INTO SEGTABLE @V304635 00329000
- SRL R1,2 DIVIDED BY 4=SEGMENT NUMBER @V304635 00330000
- LR R2,R1 SAVE SEG NUM IN LOW BYTE R2 @V304635 00331000
- SLL R1,20 MOVE BEG SEG NUM TO FRET. @V304635 00332000
- SLL R2,4 ENDING SEGMENT NUMBER @V304635 00333000
- OR R1,R2 FORM BEGINING/ENDING ADDRESSES @V304635 00334000
- CALL DMKBLDRL,PARM=DELPAGES RELEASE OLD PAGE TABLES @V304635 00335000
- * THEN BUILD NEW DUMMY TABLE 00336000
- ISINVAL EQU * @V304635 00337000
- CR R5,R4 AT LEAST 16 PAGES ? 00338000
- BNL BLDRP16 BRANCH IF YES 00339000
- LR R4,R5 NUMBER OF PAGES LEFT INTO R4 IF < 16 00340000
- BLDRP16 BCTR R4,0 SUBTRACT 1 00341000
- LA R0,PAGBMP LOAD SIZE OF PAGE AND SWPTABLES @V407511 00342100
- SRL R0,3 OBTAIN NUMBER OF DOUBLEWORDS @V407511 00342200
- * PAGTABLE+SWAPTABLE 00342600
- CALL DMKFREE PAGE AND SWAP TABLE @V408246 00343100
- LR R7,R1 PAGETABLE HEADER @V408246 00343600
- USING PAGTABLE,R7 @V408246 00344100
- STCK PAGSTMP TIME-STAMP PAGE TABLE @V408246 00344600
- BC 8+4,*+10 IGNORE ANY TIMER ERROR HERE @V408246 00345100
- XC PAGSTMP,PAGSTMP ZERO IN CASE OF ERROR @V408246 00345600
- XC PAGACT(12),PAGACT CLEAR HEADER @V408246 00346100
- MVC PAGCORE,F8+2 INVALIDATE 1ST ENTRY @V408246 00346600
- MVC PAGCORE+2(15*2),PAGCORE INVALIDATE REST OF THE @V408246 00347100
- * ENTRIES 00347600
- LA R2,PAGCORE LOAD ADR OF PTE @V408246 00348100
- ST R2,SEGPAGE STORE IN SEGTABLE @V408246 00348600
- LR R15,R4 GET NUMBER OF PAGES @V408246 00349100
- SLL R15,4 SHIFT FOR HARDWARE @V408246 00349600
- STC R15,SEGPLEN AND SAVE IN SEGTABLE @V408246 00350100
- OI SEGPAGE+3,SEGINV @V408246 00350600
- * SIGNALS NO PAGES IN CORE 00351100
- LA R8,PAGCORE+16*2 START OF SWAP TABLE HEADER @V408246 00351600
- USING SWPTABLE,R8 00356000
- ST R11,SWPVM STORE VMBLOK ADDRESS IN SWPTABLE HEADER 00357000
- ST R2,SWPPAG STORE PAGTABLE ADDRESS IN SWPTABLE HEADER 00358000
- LA R2,SWPFLAG LOAD 1ST SWPTABLE ENTRY ADDRESS 00359000
- ST R2,PAGSWP STORE SWPTABLE ADDRESS IN PAGTABLE HEADER 00360000
- LA R4,1(,R4) RELOAD NUMBER OF PAGES 00361000
- LA R1,SWPRECMP LOAD RECOMPUTE FLAG 00363000
- SLL R1,24 SHIFT TO HIGH ORDER BYTE 00364000
- SR R2,R2 LOAD ZERO FOR 2ND WORD OF SWPTABLE ENTRY 00365000
- BLDRINIT DS 0H @V408246 00366100
- STM R1,R2,SWPFLAG INITIALIZE SWPTABLE - ZEROES PAGE 00367000
- AR R1,R3 ADD 00010000 TO PAGE NUMBER IN SWPTABLE 00368000
- AR R8,R10 R8+8 - POINT TO NEXT SWPTABLE ENTRY 00370000
- BCT R4,BLDRINIT BRANCH IF MORE ENTRIES 00371000
- LA R4,1 INCREMENT @V408246 00371100
- L R14,PREFIXA GET PREFIX VALUE TO ADDRESS PSA @V4M0132 00371300
- * AT ABSOLUTE 0 @V4M0132 00371400
- AL R4,TTSEGCNT(R14) ADD INCR TO TOTAL SEGMENT CNT @V4M0132 00371500
- ST R4,TTSEGCNT(R14) STORE UPDATED SEGMENT COUNT @V4M0132 00371600
- SKIPBLD LA R6,SEGPAGE+4 POINT TO NXT STE @V304635 00372000
- S R5,F16 SUBTRACT 16 FROM NUMBER OF PAGES 00373000
- BP BLDRPAGE ITERATE THE PROCESS IF SOME PAGES LEFT. 00374000
- AIF (NOT &VIRREAL).VIRT1 00375000
- TM SAVER2+3,VRALOC ATTEMPT TO GIVE OUT V=R AREA @VM03144 00376000
- BZ RETBLDRT NOPE, DONE; BR. @VM03144 00377000
- TM VMPSTAT,VMREAL IS USER A VIRT=REAL USER 00378000
- BO VIRTREAL IF YES, TRY TO GIVE HIM THE AREA 00379000
- .VIRT1 ANOP 00380000
- RETBLDRT DS 0H @V408246 00380100
- TM SAVER2+3,PAGTONLY RETURN IN R2 REQUESTED? @V408246 00380300
- BZ RETBLD2 NOPE @V408246 00380500
- MVC SAVER2,SAVEWRK9 PASS BACK 'STE' IN REGISTER @V408246 00380700
- RETBLD2 DS 0H @V408246 00380900
- EXIT @V408246 00381100
- * 00382000
- DROP R6,R7,R8 00383000
- DOWNWEGO DS 0H @V408246 00383100
- GOTO DMKCVTAB @V408246 00383200
- EJECT 00383300
- AIF (NOT &VIRREAL).VIRT2 00384000
- VIRTREAL ICM R1,15,AVMREAL LOAD V=R VMBLOK POINTER @VM08649 00385000
- BM BLD201 BRANCH, IF AREA HAS DAMAGED PAGES 00386000
- BP BLD200 BRANCH, IF AREA ALREADY IN USE 00387000
- L R1,=A(DMKSLC-4096) GET SIZE OF VIRT=REAL AREA 00388000
- LTR R1,R1 CHECK IF V=R SYSGENED @VM08649 00389000
- BM BLD202 BRANCH, IF AREA NOT DEFINED FROM SYSGEN 00390000
- L R0,VMSIZE LOAD SIZE OF THIS VIRTUAL MACHINE 00391000
- CR R0,R1 IS VIRTUAL MACHINE > THEN VIRT=REAL AREA 00392000
- BH BLD202 IF YES, USER CAN'T HAVE IT 00393000
- SPACE 00394000
- USING SEGTABLE,R7 00395000
- USING PAGCORE,R8 @V408246 00396100
- USING SWPTABLE,R9 00397000
- USING CORTABLE,R10 00398000
- SPACE 00399000
- LA R4,16 PAGE NUMBERING TO START WITH 1 00400000
- LR R6,R0 SIZE OF THIS VIRTUAL MACHINE @VA01062 00401000
- SRL R6,12 TOTAL NO. OF PAGES REQUIRED @VA01062 00402000
- S R6,F1 LESS ONE FOR HIPAGE @VA01377 00403000
- L R7,VMSEG GET SEGMENT TABLE ADDRESS 00404000
- NI SEGPAGE+3,255-SEGINV CLEAR INVALID BIT @V408246 00404100
- L R8,SEGPAGE LOAD ADDRESS OF PAGE TABLE 00405000
- LA R8,0(,R8) CLEAR OUT NUMBER OF PAGES 00406000
- LA R9,PAGCORE+16*2+8 ADDRESS OF 1ST SWAPTABLE @V408246 00407100
- SR R5,R5 CLEAR REG 00410000
- IC R5,SEGPLEN NUMBER OF PAGES IN THIS SEGMENT 00411000
- SRL R5,4 SHIFT OUT UNWANTED BITS 00412000
- L R10,ACORETBL LOAD ADDRESS OF CORE TABLE 00413000
- LA R8,PAGCORE+2 SKIP ENTRY FOR PAGE 0 @V408246 00414100
- LA R9,SWPTABLE+8 SKIP SWAP ENTRY FOR PAGE 0 00415000
- LA R10,CORTABLE+16 SKIP CORE ENTRY FOR PAGE 0 00416000
- NXTENTRY DS 0H @V408246 00417100
- ST R11,CORFPNT STORE USER'S VMBLOK ADDRESS. @V408246 00417600
- L R0,F1 LOCK COUNT OF 1 TO 00419000
- ST R0,CORLCNT STORE IN CORE TABLE ENTRY 00420000
- ST R9,CORSWPNT STORE ADDRESS OF SWAP TABLE ENTRY 00421000
- ST R8,CORPGPNT STORE ADDRESS OF PAGE TABLE ENTRY 00422000
- MVI CORFLAG,CORCFLCK+CORIOLCK LOCK PAGE IN CORE @V408246 00423100
- STH R4,PAGCORE SOTRE REAL PAGE NUMBER @V408246 00423200
- BCTR R6,R0 KEEP COUNT OF PAGES ALLOCATED @VA01062 00425000
- LTR R6,R6 GOT 'EM ALL? @VA01062 00426000
- BZ HIPAGE ALL EXCEPT PAGE 0 @VA01062 00427000
- LA R8,PAGCORE+2 GET NEXT PAGE TABLE ENTRY ADDRESS@V408246 00428100
- LA R9,SWPTABLE+8 GET NEXT SWAP TABLE ENTRY 00429000
- LA R10,CORTABLE+16 GET NEXT CORE TABLE ENTRY 00430000
- LA R4,16(,R4) INCREMENT THE PAGE NUMBER 00431000
- BCT R5,NXTENTRY PROCESS ALL CORE TABLE ENTRIES FOR SEG. 00432000
- LA R7,SEGTABLE+4 POINT TO NEXT SEG. TABLE ADDR. 00433000
- NI SEGPAGE+3,255-SEGINV CLEAR INVALID BIT @V408246 00433100
- IC R5,SEGPLEN PICK UP NUM, PAGES IN THIS SEGMENT 00434000
- SRL R5,4 CLEAR OUT UNWANTED BITS 00435000
- A R5,F1 CORRECTION FOR BCT LOOP 00436000
- L R8,SEGPAGE LOAD ADDRESS OF THIS PAGE TABLE 00437000
- LA R8,0(,R8) CLEAR OUT PAGE NUMBER 00438000
- LR R9,R8 BACK UP THE ADDRESS OF THE PAGE 00439000
- S R9,F4 TABLE SO THAT THE SWAP TABLE 00440000
- L R9,0(,R9) ADDRESS CAN BE FOUND 00441000
- B NXTENTRY CONTINUE PROCESSING ALL ENTRIES 00442000
- SPACE 00443000
- HIPAGE L R1,=A(DMKSLC-4096) FIND PAGE 0 ADDRESS 00444000
- SRL R1,8 INDEX FOR PROPER CORE TABLE ENTRY 00445000
- L R7,VMSEG LOAD ADDRESS OF SEG. FOR PAGE 0 00446000
- L R8,SEGPAGE LOAD ADDRESS OF PAGE 0 00447000
- LA R8,0(,R8) CLEAR HIGH BYTE 00448000
- LR R9,R8 GET ADDRESS OF SWAP ENTRY FOR 00449000
- S R9,F4 PAGE 0. 00450000
- L R9,0(,R9) 00451000
- L R10,ACORETBL LOAD ADDRESS OF CORE TABLE AND 00452000
- LA R10,CORTABLE(R1) LOCATE TOP OF VIRT=REAL - 4096 00453000
- STH R1,PAGCORE STORE ADDRESS OF REAL PAGE 0 @V408246 00454100
- ST R11,CORFPNT STORE USER'S VMBLOK ADDRESS. @V408246 00454200
- L R0,F1 CONSTANT FOR LOCK COUNT 00457000
- ST R0,CORLCNT SET LOCK COUNT 00458000
- ST R9,CORSWPNT STORE SWAP ADDRESS OF PAGE 0 00459000
- ST R8,CORPGPNT STORE PAGE ADDRESS OF PAGE 0 00460000
- MVI CORFLAG,CORCFLCK+CORIOLCK LOCK PAGE IN CORE @V408246 00461100
- ST R11,AVMREAL THIS USER NOW OWNS THE VIRT=REAL AREA 00462000
- L R15,PREFIXB GET PREFIX ADDR OF OTHER PROC @V4M0132 00462100
- ST R11,AVMREAL(R15) MAINTAIN AVMREAL IN BOTH PSA'S @V4M0132 00462200
- SLR R0,R0 ZERO R-0 00463000
- STH R0,VMPAGES CLEAR NUMBER PAGES RESIDENT (PAGEABLE) 00464000
- STH R0,VMWSPROJ ZERO PROJECTED WORKING SET SIZE 00465000
- OI VMQLEVEL,VMAEX GIVE THIS USER ASSURED EXECUTION @VA08851 00465500
- MSG 'STORAGE IS VIRTUAL=REAL' 00467000
- CALL DMKQCNWT,PARM=NORET 00468000
- EXIT 00469000
- BLD200 LA R2,200 MESSAGE DMKBLD200 00470000
- DROP R11 00471000
- CL R1,F1 IS V=R AREA UNLOCKED? @V4M0167 00471100
- BNE *+8 NO, O.K. @V4M0167 00471200
- L R1,ASYSVM YES, SHOW SYSTEM AS V=R OWNER @V4M0167 00471300
- USING VMBLOK,R1 00472000
- MVC SAVEWRK2(8),VMUSER USERID 00473000
- DROP R1 00474000
- USING VMBLOK,R11 00475000
- LA R1,SAVEWRK2 ADDRESS OF THE DATA 00476000
- LA R0,8 LENGTH OF DATA 00477000
- B VARDATA SEND THE MESSAGE 00478000
- SPACE 00479000
- BLD201 LA R2,201 MESSAGE DMKBLD201 00480000
- B CALLERM SEND THE MESSAGE 00481000
- SPACE 00482000
- BLD202 LA R2,202 MESSAGE DMKBLD202 00483000
- CALLERM SLR R0,R0 00484000
- SLR R1,R1 00485000
- VARDATA ICM R0,B'1110',=C'BLD' MODULE IDENTIFIER 00486000
- CALL DMKERMSG WRITE THE MESSAGE 00487000
- * 00488000
- * RETURN WILL BE DIRECTLY TO THE CALLER FROM DMKERM 00489000
- * 00490000
- SPACE 00491000
- SPACE 00492000
- BLDMSG CALL DMKQCNWT,PARM=NORET 00493000
- EXIT 00494000
- SPACE 00495000
- DROP R7,R8,R9,R10 00496000
- .VIRT2 ANOP 00497000
- EJECT 00498000
- *. 00499000
- * SUBROUTINE NAME - 00500000
- * 00501000
- * DMKBLDRL - RELEASE REAL SEGMENT, PAGE, AND SWAP TABLES 00502000
- * 00503000
- * FUNCTION - 00504000
- * 00505000
- * TO RELEASE SEGMENT, PAGE, AND SWAP TABLES 00506000
- * WHEN THEY ARE NO LONGER NEEDED. 00507000
- * 00508000
- * ATTRIBUTES - 00509000
- * 00510000
- * REENTRANT, PAGEABLE, CALLED VIA SVC 00511000
- * 00512000
- * ENTRY POINT - 00513000
- * 00514000
- * DMKBLDRL 00515000
- * 00516000
- * ENTRY CONDITIONS - 00517000
- * GPR 2 - PARM REGISTER 00518000
- * DELSEGS = RELEASE SEGMENT TABLE 00519000
- * DELPAGES = RELEASE PAGE/SWAP TABLES 00520000
- * 00521000
- * PAGTONLY RELEASE TABLE POINTED TO BE R1 00521100
- * 00522000
- * GPR 1 = BEGINING AND ENDING ADDRESS TO RELEASE 00523000
- * BYTE 0-1 = FIRST ADDRESS TO RELEASE 00524000
- * FIRST 4 BITS = 0, NEXT 8 BITS = SEGMENT, NEXT 4 = PAGE 00525000
- * BYTE 2-3 = LAST ADDRESS TO RELEASE 00526000
- * FIRST 4 BITS = 0, NEXT 8 BITS = SEGMENT, NEXT 4 = PAGE 00527000
- * 00528000
- * GPR 11 = ADDRESS OF USER'S VMBLOK 00529000
- * GPR 12 = ADDRESS OF DMKBLDRL 00530000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00531000
- * 00532000
- * EXIT CONDITIONS - 00533000
- * 00534000
- * SWAP, PAGE, AND SEGMENT TABLES HAVE 00535000
- * BEEN RETURNED TO FREE STORAGE. 00536000
- * 00537000
- * CALLS TO OTHER ROUTINES - 00538000
- * 00539000
- * DMKFRET - TO RETURN TABLES TO FREE STORAGE 00540000
- * 00541000
- * EXTERNAL REFERENCES - 00542000
- * 00543000
- * NONE 00544000
- * 00545000
- * TABLES / WORK AREAS - 00546000
- * 00547000
- * SWAP TABLE 00548000
- * PAGE TABLE 00549000
- * SEGMENT TABLE 00550000
- EJECT 00551000
- * REGISTER USAGE - 00552000
- * 00553000
- * GPR 6 = ADDRESS OF SEGMENT TABLE 00554000
- * GPR 7 = ADDRESS OF PAGE TABLE 00555000
- * GPR 11 = ADDRESS OF USER'S VMBLOK 00556000
- * GPR 12 = BASE REGISTER 00557000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00558000
- * 00559000
- * GPRS 0-2, 4-5, 14-15 ARE WORK REGISTERS. 00560000
- * 00561000
- * GPRS 3, 8-10 ARE NOT USED. 00562000
- * 00563000
- * NOTES - 00564000
- * 00565000
- * NONE 00566000
- * 00567000
- * OPERATION - 00568000
- * A) IF JUST A SEGTABLE FRET, GO TO 1.5 00569000
- * B) IF ALL PAG-SWP TABLES TO BE FRETTED, 00570000
- * GO TO STEP D 00571000
- * C) USE R1 TO ADJ FOR PARTIAL FRET, GO TO STEP 1 00572000
- * D) SET FOR FRET OF ALL PAGE-SWP TABLES. GO TO STEP 1 00573000
- * 00574000
- * 00575000
- * 1. EACH ENTRY IN THE 16 WORD SEGMENT TABLE IS EXAMINED TO SEE 00576000
- * IF IT HAS A VALID ENTRY. IF YES, THE SIZES OF THE 00577000
- * SWAP TABLE AND PAGE TABLE ARE COMPUTED, AND THEY ARE 00578000
- * RETURNED TO FREE STORAGE VIA DMKFRET. THIS 00579000
- * PROCESS IF REPEATED FOR ALL OF THE POSSIBLE 16 00580000
- * SEGMENT TABLE ENTRIES. 00581000
- * 1.5 IF A FRET OF PAG-SWP TABLES ONLY, RETURN TO CALLER 00582000
- * 00583000
- * 00584000
- * 2. FINALLY, THE BEGINNING ADDRESS OF THE SEGMENT TABLE 00585000
- * IS COMPUTED FROM ITS ALIGNED ADDRESS AND DISPLACEMENT, 00586000
- * AND IT ALSO IS RETURNED TO FREE STORAGE VIA DMKFRET. 00587000
- * 00588000
- * 3. DETERMINE IF USER IS USING THE VIRT=REAL AREA; 00589000
- * IF HE IS ZERO (AVMREAL) FIELD IN PSA BEFORE RETURNING 00590000
- * TO THE CALLER. 00591000
- * 00592000
- *. 00593000
- EJECT 00594000
- DMKBLDRL RELOC RELEASE REAL SEGMENT, PAGE, & SWAP TABLES 00595000
- CLI SAVER2+3,DELSEGS SEGS TABLE RELEASE ONLY ? @V304635 00596000
- BE JUSSEG YES, THEN DO IT @V304635 00597000
- L R6,VMSEG LOAD SEGMENT TABLE ADDRESS @V304635 00598000
- LA R6,0(,R6) STRIP LENGTH @V408246 00598100
- USING SEGTABLE,R6 00599000
- LA R4,1 LOAD UNUSED SEGMENT INDICATOR 00601000
- TM SAVER2+3,PAGTONLY PAGE TABLE FROM REG? @V408246 00602100
- BNO CHKSEG NO @V408246 00602300
- LA R6,SAVER1 R6 POINTS TO THE STE (R1) @V408246 00602500
- LA R5,1 DO ONLY ONE TABLE @V408246 00602700
- B BLDRL01 ALL SET UP @V408246 00602900
- * 00603100
- CHKSEG DS 0H CALCULATE STARTING STE AND @V408246 00603300
- * COUNT OF STES 00603500
- L R8,SAVER1 GET ADDRESSES OF SEGMENTS @V304635 00604000
- LR R9,R8 SAVE STARTING/ENDING ADDRESSES @V408246 00605100
- SRL R8,20 GET STARTING STE NUMBER @V408246 00605300
- LR R15,R9 SAVE THE REMAINING ADDRESS @V304635 00606000
- N R15,=A(X'F0000') PAGE NUMBER WITHING SEG. = 0? @V408246 00607100
- BZ COMPSEG YES - SEGMENT ADDRESS IS OK @VM03135 00608000
- LA R8,1(,R8) SKIP PARTIAL SEGMENT @VM03135 00609000
- COMPSEG DS 0H @V408246 00610100
- SRL R9,4 ENDING SEG. NUMBER TO LOW R9 @V408246 00610600
- N R9,F255 CLEAR ALL BUT SEGMENT NUMBER @V408246 00611100
- SR R9,R8 R9=NUM STE-1 TO FRET @V304635 00612000
- BM RETBLDRL RETURN IF PARTIAL SEGMENT @V304635 00613000
- LA R5,1(,R9) R5 = NUMBER OF SEGMENTS TO FRET @VM03171 00614000
- SLL R8,2 DSP OF 1ST STE TO FRET @V304635 00615000
- LA R6,0(R8,R6) R6 POINTS TO 1ST STE TO FRET @V304635 00616000
- BLDRL01 EQU * @V304635 00617000
- RELRLOOP L R7,SEGPAGE LOAD PAGE TABLE ADDRESS 00618000
- N R7,=A(X'FFFFFE') CLEAR POSSIBLE INVALID BIT @V408246 00619100
- BZ RELRNEXT NOTHING THERE BUT INVALID BIT @V408246 00619200
- ICM R15,B'0011',SEGPAGE+1 IS THERE A PAGETABLE PTR @V408246 00619300
- BNZ DOFRET YES, THEN FRET IT @V408246 00619400
- TM SEGPAGE+3,SEGINV IF NOT, MAKE SURE IT'S @VA08431 00619505
- BO RELRNEXT NOT ON DASD BUT INVALID @VA08431 00619605
- * ATTEMPTING TO RELEASE A SEGMENT THAT HAS ITS TABLE 00619700
- * MIGRATED TO BACKING STORE 00619800
- ABEND 5 @V408246 00619900
- EJECT 00620000
- * 00620100
- * PROCESS INDIVIDUAL STES, RETURN PAGE/SWAP TABLE TO 00620200
- * AVAILABLE FREE STORAGE 00620300
- * 00620400
- DOFRET DS 0H HERE TO FRET TABLES @V408246 00620500
- SR R2,R2 CLEAR REG @V408246 00620600
- IC R2,SEGPLEN PAGE TABLE LENTH (NO PAGES -1) @V304635 00621000
- SRL R2,4 NUM. PAGES TO LOW ORDER REG. @V304635 00622000
- CL R11,AVMREAL V=R? @VA04952 00622400
- BE FRETPGTB YES - GO FRET PAGE TABLE @VA04952 00622800
- LA R14,1(,R2) NUM. PAGES+1 FOR BCT LOOP @V304635 00623000
- USING PAGCORE,R7 @V408246 00624100
- CHKPAGE DS 0H @V408246 00624600
- LH R0,PAGCORE PTE @V408246 00625100
- N R0,=A(X'FFF0') CHECK FOR REAL PAGE ALLOCATED @V408246 00625600
- BZ NXTPAGE NO @V408246 00626100
- ABEND 2 ERROR - PAGE NOT RELEASED @V408246 00626600
- NXTPAGE DS 0H @V408246 00627100
- LA R7,PAGCORE+2 NEXT PAGE TABLE ENTRY @V408246 00627600
- BCT R14,CHKPAGE PROCESS AL PAGE TABLE ENTIRES @V408246 00628100
- FRETPGTB DS 0H @V408246 00628600
- L R15,PREFIXA GET PREFIX VALUE TO ADDRESS PSA @V4M0132 00629100
- * AT ABSOLUTE 0 @V4M0132 00629200
- L R0,TTSEGCNT(R15) GET CURRENT TOTAL SEGMENT CNT @V4M0132 00629300
- BCTR R0,0 DECREMENT THIS SYSTEM COUNT @V4M0132 00629400
- ST R0,TTSEGCNT(R15) REPLACE UPDATED SEGMENT COUNT @V4M0132 00629500
- L R1,SEGPAGE GET PAGETABLE POINTER @V408246 00630600
- ST R4,SEGPAGE CLEAR STE ENTRY @V408246 00631100
- OI VMESTAT,VMINVPAG REMEMBER TO RESET TLB @V408246 00631600
- OI APSTAT2,CPPTLBR SET PTLB REQUIRED FOR THIS PROCR@V407594 00631700
- L R15,PREFIXB AND OTHER PROCESSOR @V407594 00631720
- OI APSTAT2-PSA(R15),CPPTLBR (IF THERE IS ANOTHER) @V407594 00631740
- N R1,=A(X'FFFFFE') CLEAR POSSIBLE INVALID BIT @V408246 00632100
- S R1,F16 BACK-UP TO START OF CORE FOR @V408246 00632600
- * TABLES 00633100
- LA R0,PAGBMP LOAD SIZE OF PAGE AND SWPTABLES @V407511 00633600
- SRL R0,3 OBTAIN NUMBER OF DOUBLEWORDS @V407511 00634100
- CALL DMKFRET @V408246 00634600
- ST R4,0(,R6) STORE INVALID STE @V408246 00635100
- RELRNEXT LA R6,SEGPAGE+4 POINT TO NEXT SEGMENT TABLE ENTRY 00643000
- BCT R5,RELRLOOP LOOP IF MORE SEGMENT TABLE ENTRIES 00644000
- EJECT 00644100
- * 00644200
- * FINISHED RESETING INDIVIDUAL STES, NOT PROCESS SEGMENT 00644300
- * TABLE 00644400
- * 00644500
- JUSSEG TM SAVER2+3,DELSEGS REQUEST ALSO TO FRET SEGS. @V304635 00645000
- BZ RETBLDRL NO, THEN RETURN TO CALLER @V304635 00646000
- L R1,VMSEG GET ADDRESS OF SEGMENT TABLE BLOCK 00647000
- LR R0,R1 REMEMBER IN R0 00648000
- LA R1,0(,R1) STRIP OFF HIGH-ORDER BYTE, 00649000
- SH R1,VMSEGDSP GET THE REAL BEGINNING OF IT 00650000
- SRL R0,24 OBTAIN NO. OF SEGMENT TABLES (LESS 1) 00651000
- SLL R0,3 TIMES 8, FOR 8 DBL- WORDS EACH 00652000
- AL R0,F15 PLUS 8, PLUS 7 FOR ALIGNMENT 00653000
- CALL DMKFRET NOW RETURN IT TO FREE STORAGE 00654000
- SR R15,R15 CLEAR 00655000
- ST R15,VMSEG THE SLOT IN THE VMBLOK. 00656000
- AIF (NOT &VIRREAL).VIRT3 00657000
- C R11,AVMREAL DOES USER OCCUPY VIRT=REAL AREA 00658000
- BNE RETBLDRL NO - EXIT TO CALLER @V4M0237 00659100
- NI VMQLEVEL,X'FF'-VMAEX NOLONGER FAVORED. @VM08649 00660000
- ST R15,AVMREAL YES, REMOVE THE AREA FROM HIM 00661000
- L R14,PREFIXB GET PREFIX ADDR OF OTHER PROC @V4M0132 00661100
- ST R15,AVMREAL(R14) MAINTAIN AVMREAL IN BOTH PSA'S @V4M0132 00661200
- .VIRT3 ANOP 00662000
- RETBLDRL EXIT @V304635 00663000
- * 00664000
- DROP R6,R7 00665000
- EJECT 00666000
- *. 00667000
- * SUBROUTINE NAME - 00668000
- * 00669000
- * DMKBLDVM - BUILD A NEW VMBLOK 00670000
- * 00671000
- * FUNCTION - 00672000
- * 00673000
- * TO CREATE AND PARTIALLY INITIALIZE A VMBLOK FOR A 00674000
- * USER IDENTIFIED BY HIS TERMINAL REAL DEVICE BLOCK. 00675000
- * 00676000
- * ATTRIBUTES - 00677000
- * 00678000
- * REENTRANT, PAGEABLE, CALLED VIA SVC 00679000
- * 00680000
- * ENTRY POINT - 00681000
- * 00682000
- * DMKBLDVM 00683000
- * 00684000
- * ENTRY CONDITIONS - 00685000
- * 00686000
- * GPR 8 = ADDRESS OF TERMINAL REAL DEVICE BLOCK 00687000
- * GPR 9 = ADDRESS OF NICBLOK ( IF DEVTYPE = TYP3705 ) 00688000
- * GPR 12 = ADDRESS OF DMKBLDVM 00689000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00690000
- * 00691000
- * EXIT CONDITIONS - 00692000
- * 00693000
- * VMBLOK HAS BEEN CREATED, CLEARED, PARTIALLY FILLED IN, 00694000
- * AND CHAINED TO THE OTHER VMBLOKS. 00695000
- * 00696000
- * GPR 11 = ADDRESS OF VMBLOK JUST CREATED. 00697000
- * 00698000
- * CALLS TO OTHER ROUTINES - 00699000
- * 00700000
- * DMKFREE - TO OBTAIN FREE STORAGE FOR VMBLOK TO BE CREATED 00701000
- * DMKSCNRD - TO CONVERT TERMINAL DEVICE ADDRESS TO CCU FORM 00702000
- * DMKCVTBH - CONVERT TERMINAL REAL DEVICE ADDRESS TO HEX 00703000
- * 00704000
- * EXTERNAL REFERENCES - 00705000
- * 00706000
- * DMKRIORN 00707000
- * 00708000
- * TABLES / WORK AREAS - 00709000
- * 00710000
- * NONE 00711000
- EJECT 00712000
- * REGISTER USAGE - 00713000
- * 00714000
- * GPR 8 = ADDRESS OF RDEVBLOK FOR TERMINAL 00715000
- * GPR 11 = ADDRESS OF NEWLY CREATED VMBLOK 00716000
- * GPR 12 = BASE REGISTER 00717000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00718000
- * 00719000
- * GPRS 0-1 AND 14-15 ARE WORK REGISTERS 00720000
- * 00721000
- * GPRS 2-7 AND 9-10 ARE NOT USED. 00722000
- * 00723000
- * NOTES - 00724000
- * 00725000
- * NONE 00726000
- * 00727000
- * OPERATION - 00728000
- * 00729000
- * 1. FREE STORAGE IS OBTAINED VIA DMKFREE FOR A VMBLOK, 00730000
- * WHICH IS THEN CLEARED. THE VM CHANNEL TABLE IS SET 00731000
- * TO ALL FFFF'S, INDICATING THAT NO VIRTUAL CHANNELS 00732000
- * HAVE BEEN BUILT YET. THE ADDRESS OF THE TERMINAL 00733000
- * RDEVBLOK (IN R8 AT ENTRY) IS STORED IN VMTERM. 00734000
- * 00735000
- * 2. A USERID CONSISTING OF 'LOGON' + THE THREE-BYTE HEX 00736000
- * TERMINAL REAL DEVICE ADDRESS IS STORED AS THE USERID 00737000
- * (FOR EXAMPLE 'LOGON063' OR 'LOGON8B5'). 00738000
- * 00739000
- * 3. THE USER IS SIGNALED IN CONSOLE-FUNCTION-WAIT, AND 00740000
- * THE USER IS PUT INTO DISABLED WAIT STATE. ALSO, THE 00741000
- * TERMINAL REAL DEVICE BLOCK IS SET TO THE DEFAULT VALUES FOR 00742000
- * THE BLIP, LINE-END, CHARACTER-DELETE, AND LINE-DELETE SYMBOLS. 00743000
- * 00744000
- * 4. FINALLY, THE NEWLY CREATED VMBLOK IS PATCHED INTO 00745000
- * THE CHAIN OF ACTIVE VMBLOKS, AND RETURN IS MADE TO THE 00746000
- * CALLER. 00747000
- *. 00748000
- EJECT 00749000
- DMKBLDVM RELOC BUILD NEW VMBLOK 00750000
- CLC SAVER8,=C'AUTO' AUTOLOG CMD. @V305535 00751000
- BE AUTOLOG1 YES - THEN NO RDEVBLOK @V305535 00752000
- LTR R8,R8 R8 MUST BE GREATER THAN 0 00753000
- BNP BLD1 CATCH CALLER BUG IF BAD GR8 @V200820 00754000
- AUTOLOG1 EQU * HERE FOR AUTOLOG USER @V305535 00755000
- LA R0,VMBSIZE GET STORAGE FOR A VMBLOK 00756000
- CALL DMKFREE ... 00757000
- CHARGE STOP STOP CHARGING CALLER FOR LOGON @V407594 00758000
- CL R11,ASYSVM IS THIS SYSTEM @V407594 00758010
- BE NOUNLK YES, BYPASS UNLOCK @V407594 00758020
- CL R11,LASTUSER LAST USER @V407594 00758030
- BE NOUNLK YES, BYPASS UNLOCK @V407594 00758040
- LR R14,R1 SAVE NEW VMBLOK @V407594 00758050
- LR R1,R11 VMBLOK TO UNLOCK @V407594 00758060
- LOCK RELEASE,TYPE=VMBLOK,SAVE UNLOCK R11 VMBLOK @V407594 00758070
- LR R1,R14 RESTORE NEW VMBLOK TO R1 @V407594 00758080
- NOUNLK DS 0H @V407594 00758090
- LR R11,R1 REFERENCE VIA R11 AS USUAL 00759000
- USING VMBLOK,R11 ... 00760000
- MVC VMBLOK(8),ZEROES CLEAR ENTIRE VMBLOK 00761000
- MVC VMBLOK+8(256),VMBLOK ... 00762000
- MVC VMBLOK+264(VMBSIZE*8-264),VMBLOK ... 00763000
- MVC VMCHTBL(8),FFS FFFF-FILL THE VM CHANNEL TABLE 00764000
- MVC VMCHTBL+8(24),VMCHTBL (INDICATING NO CHANNELS THERE YET) 00765000
- MVC VMVTERM(2),FFS INDICATE NO VIRTUAL CONSOLE @V200820 00766000
- OI VMRSTAT,VMLOGON+VMCFWAIT 'NOT YET LOGGED ON' & IN CFWAIT 00767000
- OI VMMLEVEL,VMMSGON+VMWNGON+VMMCODE+VMMTEXT+VMMLINED 00768100
- MVI VMPSW+1,WAIT PUT USER INTO DISABLED WAIT STATE. 00769000
- MVC VMTMOUTQ,=X'7FFFFFFFFFFFF000' INITIALIZE VMTMOUTQ 00770000
- MVC VMTTIME(16),VMTMOUTQ VMTTIME AND VMTMINQ 00771000
- TM APSTAT1,APUOPER RUNNING AS AP @V407594 00772010
- BZ NOAP NO @V407594 00772020
- MVC VMCPTIME,HALFTIME INITIALIZE TIMER @VA09438 00772021
- MVC VMAPTIME,HALFTIME INITIALIZE TIMER @VA09438 00772023
- MVC VMMORETM,=XL2'320A' DEFAULT 50/10 SECONDS HRC101DK 00772026
- LR R1,R11 VMBLOK PTR @V407594 00772030
- LOCK OBTAIN,TYPE=VMBLOK,OPTION=NOUPDT,SPIN=NO @V407594 00772040
- * IT IS NOT NECESSARY TO UNLOCK R11 AT ENTRY (ASYSVM) @V407594 00772050
- LA R0,CPEXSIZE SIZE OF DEFERRED EXECUTION BLOCK @V407594 00772060
- CALL DMKFREE OBTAIN DEFERRED EXECUTION BLOCK @V407594 00772070
- ST R1,VMDFTPNT & SAVE ITS ADDRESS IN VMBLOK @V407594 00772080
- NOAP DS 0H @V407594 00772090
- CHARGE START START CHARGING NEW USER @V4M0203 00772092
- STCK VMTODINQ CURRENT TOD @V408246 00772100
- BC 3,DOWNWEGO ABEND CVT001 @V408246 00772300
- LM R2,R3,VMTODINQ CONVERT TO PRIORITY UNITS @V408246 00772500
- SL R2,STARTIME . . @V408246 00772700
- SLDL R2,5 . . @V408246 00772900
- ST R2,VMEPRIOR INITIAL PRIORITY @V408246 00773100
- LA R2,5 INITIAL PROJECTED WORKING SET @V408246 00773300
- * VALUE 00773500
- ST R2,VMWSPROJ . . @V408246 00773700
- L R15,ASYSLC REFERENCE SYSLOCS INFORMATION 00775000
- USING SYSLOCS,R15 ... 00776000
- MVC VMTLEND(4),DMKSYSLE DEFAULT EDITING CHARACTERS @V200820 00777000
- MVI VMGRFTAB,X'6A' SET LOGICAL TAB CHAR TO DEFAULT @V60A6B6 00777100
- CLC SAVER8,=C'AUTO' IS THIS AN AUTOLOG USER? @VA04867 00777200
- BE AUTOLOG2 IF SO, BRANCH @VA04867 00777400
- ST R8,VMTERM SET REAL TERM RDEVBLOK PTR @V200820 00778000
- USING RDEVBLOK,R8 @V200820 00779000
- TM RDEVTMCD,RDEVUSC8 IS IT AN ASCII TYPE? @VA08845 00779100
- BZ NOTASC NO, BRANCH @VA08845 00779200
- MVI VMTLDEL,X'AD' DEFAULT LINEDEL TO LEFT BRACKET @VA08845 00779300
- NOTASC EQU * @VA08845 00779400
- LA R1,CLASSPEC*256+TYP3705 IS THIS A 3705 RDEVBLOK@V200820 00780000
- CH R1,RDEVTYPC ... @V200820 00781000
- BE BLDNIC YES, BYPASS TEST FOR TERMINAL @VM01043 00782000
- * CLASS 00783000
- CLI RDEVTYPC,CLASTERM IS THIS A TERMINAL CLASS @VM01043 00784000
- BNE BLDRTERM NO,CONTINUE @VM01043 00785000
- TM RDEVTYPE,TYPBSC IS THIS A BISYNC LINE @VM01043 00786000
- BZ BLDRTERM NO, CONTINUE @VM01043 00787000
- BLDNIC EQU * @VM01043 00788000
- USING NICBLOK,R9 GR9 STILL O.K. FROM ENTRY @V200820 00789000
- ST R11,NICUSER SET VMBLOK POINTER IN NICBLOK @V200820 00790000
- L R1,DMKSYSLL SYSTEM DEFAULT LINE LENGTHS @V200820 00793000
- STCM R1,B'0100',NICLLEN SET LINE LEN FOR 2741-TYPE D@V200820 00794000
- TM NICTYPE,NICTERM+NICCIBM 2741-TYPE TERMINAL ? @V200820 00795000
- BO BYPAS YES...O.K. AS IS @VA04807 00796000
- TM NICTYPE,NICGRAF REMOTE GRAPHICS? @VA04807 00796165
- BNO BYPAS1 NO...TTY TYPE @VA04807 00796330
- STCM R1,B'0001',NICLLEN USE GRAPHICS LINE LENGTH @VA04807 00796495
- B BYPAS @VA04807 00796660
- BYPAS1 STCM R1,B'0010',NICLLEN USE TTY LINE LENGTH @VA04807 00796825
- BYPAS EQU * @VM01043 00798000
- CALL DMKSCNRD GET RADDR FROM RDEVBLOK @V200820 00799000
- L R3,=A(DMKRIORN) LIST OF 3705 RDEVBLOK PTRS @V200820 00800000
- L R2,0(0,R3) COUNT OF 3705'S IN THE LIST @V200820 00801000
- BLDNFND EQU * FIND DEVICE CODE FOR THIS 3705 @V200820 00802000
- CH R1,6(0,R3) COMPARE AGAINST DEVICE ADDRESS @V200820 00803000
- BE BLDNFRN O.K. -- FOUND IT @V200820 00804000
- LA R3,4(0,R3) NEXT LIST ENTRY @V200820 00805000
- BCT R2,BLDNFND SEARCH THE LIST @V200820 00806000
- B BLD1 OOPS -- LOGIN ON A NON-EXISTENT DEVICE@V200820 00807000
- BLDNFRN EQU * ADD DEVICE CODE TO VMTRMID @V200820 00808000
- SL R3,=A(DMKRIORN) GET DISP TO LIST ENTRY @V200820 00809000
- SRL R3,2(0) ...IN NUMBER OF ENTRIES @V200820 00810000
- MVC VMUSER(4),=C'LOGN' USERID IS "LOGN103C", ETC. @V200820 00811000
- LR R1,R3 GET DEVICE CODE VALUE @VM01043 00812000
- CALL DMKCVTBH CONVERT TO HEXADECIMAL @VM01043 00813000
- STC R1,VMUSER+4 SAVE DEVICE CODE VALUE @VM01043 00814000
- SLL R3,12(0) MOVE DEVICE CODE TO HIGH-ORDER @V200820 00815000
- LH R2,NICNAME BASIC RESOURCE ID FROM NICBLOK @V200820 00816000
- OR R3,R2 ADD DEVICE CODE FOR MESSAGES @V200820 00817000
- STH R3,VMTRMID ...SAVE IN THE VMBLOK @V200820 00818000
- LR R1,R2 RESOURCE ID TO GR1 FOR USERID @V200820 00819000
- B BLDNAME GO FINISH USERID CONSTRUCTION @V200820 00820000
- DROP R9 @V200820 00821000
- BLDRTERM EQU * RDEVBLOK IS A SINGLE TERMINAL @V200820 00822000
- SR R1,R1 CLEAR FOR IC 00823000
- IC R1,RDEVTYPE GET TERMINAL DEVICE TYPE 00824000
- SRL R1,4 ISOLATE ADAPTER TYPE 00825000
- IC R1,DMKSYSLL(R1) GET DEFAULT LINE LENGTH 00826000
- STC R1,RDEVLLEN STORE IT 00827000
- TM RDEVTYPC,CLASGRAF GRAPHICS CONSOLE? @VA04807 00827150
- BNO PSUP NO...SET PRINT SUPPRESS @VA04807 00827300
- L R1,DMKSYSLL GET DEFAULT LINE LENGTHS @VA04807 00827450
- CLI RDEVMDL,X'05' 3270-5? HRC073DK 00827500
- BNE *+8 No HRC073DK 00827520
- LA R1,132 Y, default size is 132 HRC073DK 00827540
- STCM R1,B'0001',RDEVLLEN STORE GRAPHICS LINE LENGTH @VA04807 00827600
- PSUP EQU * @VA04807 00827750
- OI RDEVFLAG,RDEVPSUP ASSUME TERMINAL HAS PRINT-SUPPRESS 00828000
- ST R11,RDEVUSER SET VMBLOK POINTER IN RDEVBLOK @V200820 00829000
- TM RDEVADD,RDEVLDEV Is this an LDEV? HRC065DK 00829100
- BO LOGOLDEV Yes HRC065DK 00829200
- MVC VMUSER(5),=C'LOGON' USERID IS "LOGON03C", ETC. @V200820 00830000
- CALL DMKSCNRD GET REAL DEVICE ADDRESS IN BINARY@V200820 00831000
- BLDNAME EQU * CONVERT TO HEXADECIMAL FOR USERID@V200820 00832000
- CALL DMKCVTBH ... @V200820 00833000
- STCM R1,B'0111',VMUSER+5 SETUP LAST PART OF USERID @V200820 00834000
- AUTOLOG2 EQU * AUTOLOG ON USER @V305535 00835000
- L R1,ASYSVM START WITH SYSTEM VMBLOK, 00836000
- L R14,VMPNT-VMBLOK(,R1) POINT TO 1ST USER IN CHAIN 00837000
- LTR R14,R14 ANYBODY THERE AT ALL ? 00838000
- BZ BLDVM1ST NOPE - PUT IN THE VERY 1ST GUY. 00839000
- MVC VMPNT(4),VMPNT-VMBLOK(R14) ... 00840000
- ST R11,VMPNT-VMBLOK(,R14) ... 00841000
- BLDSTR11 ST R11,SAVER11 STORE R11 FOR RETURNING TO CALLER 00842000
- EXIT RETURN TO CALLER. 00843000
- EJECT 00844000
- BLDVM1ST ST R11,VMPNT LET THE ONE USER POINT TO HIMSELF, AND 00845000
- ST R11,VMPNT-VMBLOK(,R1) STORE HIS ADDR AT ANCHOR IN SYSVM 00846000
- B BLDSTR11 AND GO RETURN R11 TO OUR CALLER. 00847000
- LOGOLDEV EQU * HRC065DK 00847100
- LH R1,RDEVADD Get the LDEV address HRC065DK 00847200
- N R1,F4095 Keep only the dev num HRC065DK 00847300
- CALL DMKCVTBH Make it displayable HRC065DK 00847400
- STCM R1,7,VMUSER+5 Put dev addr in userid HRC065DK 00847500
- MVC VMUSER(5),=C'LOGNL' Logon name for LDEVs HRC065DK 00847600
- B AUTOLOG2 Go log user on HRC065DK 00847700
- * 00848000
- ABEND 1 ENTRY WITH INVALID RDEVBLOK PTR @V200820 00849000
- * 00850000
- DROP R8,R15 00851000
- EJECT 00852000
- *. 00853000
- * SUBROUTINE NAME - 00854000
- * 00855000
- * DMKBLDEC - BUILD AN EXTENDED CONTROL MODE BLOCK 00856000
- * 00857000
- * FUNCTION - 00858000
- * 00859000
- * TO ALLOCATE STORAGE FOR A VIRTUAL ECBLOK AND THE TWO 00860000
- * TRQBLOK'S REQUIRED FOR A VIRTUAL MACHINE WITH THE 00861000
- * ECMODE OPTION, AND TO INITIALIZE THESE BLOCKS. 00862000
- * 00863000
- * ATTRIBUTES - 00864000
- * 00865000
- * RE-ENTRANT, PAGEABLE, CALLED VIA SVC 00866000
- * 00867000
- * ENTRY CONDITIONS - 00868000
- * 00869000
- * GR13 = ADDRESS OF A STANDARD SAVEAREA 00870000
- * GR12 = ADDRESS OF DMKBLDEC 00871000
- * GR11 = ADDRESS OF THE USER'S VMBLOK 00872000
- * 00873000
- * EXIT CONDITIONS - 00874000
- * 00875000
- * GPRS 0-13 UNCHANGED, VMECEXT POINTS TO THE NEW ECBLOK 00876000
- * VMBLOK HAS BEEN MARKED FOR ECMODE OPERATION ALLOWED 00877000
- * 00878000
- * CALLS TO OTHER ROUTINES - 00879000
- * 00880000
- * DMKFREE - TO ALLOCATE STORAGE FOR THE BLOCKS 00881000
- * 00882000
- * EXTERNAL REFERENCES - 00883000
- * 00884000
- * DMKSCHCP - INTERRUPT RETURN FOR CPU TIMER TRQBLOK 00885000
- * DMKTMRCK - INTERRUPT RETURN FOR CLOCK COMPARATOR TRQBLOK 00886000
- * 00887000
- * TABLES / WORK AREAS - NONE 00888000
- * 00889000
- * REGISTER USAGE - 00890000
- * 00891000
- * GR14,15 EXTERNAL LINKAGE REGISTERS 00892000
- * GR13 = SAVEAREA ADDRESSABILITY 00893000
- * GR12 = MODULE BASE ADDRESSABILITY 00894000
- * GR11 = VMBLOK ADDRESSABILITY 00895000
- * GR10 = ECBLOK ADDRESSABILITY 00896000
- * GR0-9 ARE WORK REGISTERS 00897000
- * 00898000
- * OPERATION - 00899000
- * 00900000
- * 1. STORAGE IS ALLOCATED FOR THE ECBLOK ITSELF, AND THE 00901000
- * ADDRESS OF THE ECBLOK IS PLACED IN VMECEXT IN THE VMBLOK. 00902000
- * 2. STORAGE IS ALLOCATED FOR TWO TRQBLOK'S, ONE FOR THE 00903000
- * VIRTUAL CPU TIMER (IRA = DMKSCHCP), AND ONE FOR THE 00904000
- * VIRTUAL TOD CLOCK COMPARATOR (IRA = DMKTMRCK). 00905000
- * 3. RESET VALUES FOR THE CONTROL REGISTERS ARE MOVED INTO 00906000
- * THE ECBLOK FIELDS, AND THE TRQBLOK'S ARE CONNECTED 00907000
- * TO THE ECBLOK ANCHORS. 00908000
- * 4. THE VMPSTAT FLAGS IN THE VMBLOK ARE UPDATED TO SHOW 00909000
- * THAT AN ECBLOK NOW EXISTS. 00910000
- *. 00911000
- EJECT 00912000
- DMKBLDEC RELOC , BUILD AND INITIALIZE AN ECBLOK @V2B4320 00913000
- SPACE 00914000
- LA R0,EXTSIZE SIZE OF EXTENDED CONTROL BLOCK @V2B4320 00915000
- CALL DMKFREE SET ASIDE SOME FREE STORAGE @V2B4320 00916000
- LR R10,R1 ADDRESS IT VIA GR10 @V2B4320 00917000
- USING ECBLOK,R10 @V2B4320 00918000
- XC 0(EXTSIZE*8,R1),0(R1) @V2B4320 00919000
- ST R10,VMECEXT CONNECT ECBLOK TO THE VMBLOK @V2B4320 00920000
- MVC EXTCR2(8),FFS SET C-REG 2,3 TO X'FFFFFFFF' @V2B4320 00921000
- MVI EXTCR0+3,X'E0' RESET VALUES FOR C-REG 0 @V2B4320 00922000
- MVI EXTCR14,X'C4' . . .C-REG 14 @V2B4320 00923000
- MVI EXTCR15+2,X'02' . . .C-REG 15 @V2B4320 00924000
- LA R0,TRQBSIZE GET TWO TRQBLOK'S @V2B4320 00925000
- CALL DMKFREE ONE FOR THE VIRTUAL CPU TIMER @V2B4320 00926000
- ST R1,EXTCPTRQ HANG IT OFF OF THE ECBLOK @V2B4320 00927000
- USING TRQBLOK,R1 @V2B4320 00928000
- XC 0(TRQBSIZE*8,R1),0(R1) @V2B4320 00929000
- ST R11,TRQBUSER SET VMBLOK POINTER @V2B4320 00930000
- L R2,=A(DMKSCHCP) INTERRUPT RETURN ADDRESS @V2B4320 00931000
- ST R2,TRQBIRA . . . @V2B4320 00932000
- SPACE 00933000
- CALL DMKFREE GR0 IS STILL SET FROM BEFORE @V2B4320 00934000
- ST R1,EXTCCTRQ ONE FOR THE TOD CLOCK COMPARATOR @V2B4320 00935000
- XC 0(TRQBSIZE*8,R1),0(R1) @V2B4320 00936000
- ST R11,TRQBUSER SET THE VMBLOK POINTER @V2B4320 00937000
- L R2,=A(DMKTMRCK) INTERRUPT RETURN ADDRESS @V2B4320 00938000
- ST R2,TRQBIRA . . . @V2B4320 00939000
- OI VMPSTAT,VMV370R ECMODE IS NOW ALLOWED @V2B4320 00940000
- EXIT , RETURN TO THE CALLER @V2B4320 00941000
- DROP R1,R10 @V2B4320 00942000
- EJECT 00943000
- HALFTIME DC X'3FFFFFFFFFFFF000' HALF OF VMTTIME @V4M0203 00943100
- LTORG 00944000
- EJECT 00945000
- PSA , @V306638 00946000
- COPY CORE @V306638 00947000
- COPY DEVTYPES @V306638 00948000
- COPY EQU @V306638 00949000
- COPY MICBLOK @V306638 00950000
- COPY NETWORK @V306638 00951000
- COPY RBLOKS @V306638 00952000
- COPY SAVE @V306638 00953000
- SYSLOCS , @V306638 00954000
- COPY VMBLOK @V306638 00955000
- EJECT 00956000
- COPY TIMER @V2B4320 00957000
- SPACE 2 00958000
- END 00959000
ibm/vm370-lib/cp/dmkbld.assemble_src.txt ยท Last modified: 2023/08/06 13:36 by Site Administrator