ibm:vm370-lib:cp:dmkvat.assemble_src
Table of Contents
DMKVAT Source
References
- Fixes Applied : 8
- This Source Date : Wednesday, December 13, 1978
- Last Fix ID : [HRC068DK]
Source Listing
- DMKVAT.ASSEMBLE.txt
- VAT TITLE 'DMKVAT (CP) VM/370 - RELEASE 6' 00001000
- ISEQ 73,80 VALIDATE SEQUENCING OF SYSIN 00002000
- COPY OPTIONS 00003000
- COPY LOCAL 00004000
- *. 00005000
- * MODULE NAME - 00006000
- * 00007000
- * DMKVAT 00008000
- * 00009000
- * CONTENTS - 00010000
- * 00011000
- * DMKVATAB 00012000
- * DMKVATRN 00013000
- * DMKVATEX 00014000
- *. 00015000
- DMKVAT START 00016000
- USING PSA,0 00017000
- USING VMBLOK,R11 00018000
- USING ECBLOK,R10 00019000
- USING SAVEAREA,R13 00020000
- SPACE 2 00021000
- ENTRY DMKVATAB,DMKVATMD,DMKVATBC 00022000
- ENTRY DMKVATRN,DMKVATLA 00023000
- ENTRY DMKVATPX,DMKVATSX,DMKVATEX 00024000
- ENTRY DMKVATAT,DMKVATZP,DMKVATZS 00024500
- ENTRY DMKVATPF @V2A3135 00025000
- EXTRN DMKERMSG HRC068DK 00025100
- EXTRN DMKSLC HRC068DK 00025200
- EXTRN DMKPRGSM PER001 00026000
- EXTRN DMKPTRPW @VA08037 00026505
- EXTRN DMKSTKDE @V407593 00026510
- AIF (NOT &AP).DSPRU4 00026515
- EXTRN DMKDSPRU @V407593 00026520
- EXTRN DMKLOKSY @V4M0178 00026525
- .DSPRU4 ANOP 00026530
- EXTRN DMKATSCF @V60BC11 00026540
- EJECT 00027000
- *. 00028000
- * SUBROUTINE NAME - 00029000
- * 00030000
- * DMKVATAB 00031000
- * 00032000
- * FUNCTION - 00033000
- * 00034000
- * TO ALLOCATE, INITIALIZE, AND MAINTAIN SHADOW SEGMENT 00035000
- * AND PAGE TABLES FOR VIRTUAL RELOCATING MACHINES. 00036000
- * 00037000
- * ATTRIBUTES - 00038000
- * 00039000
- * REENTRANT, RESIDENT, DISABLED, CALLED VIA BALR 00040000
- * 00041000
- * ENTRY POINTS - 00042000
- * 00043000
- * DMKVATAB - MAINTAIN VIRTUAL ADDRESS TRANSLATION TABLES 00044000
- * DMKVATMD - ALLOCATE AND INITIALIZE SHADOW TABLES 00045000
- * DMKVATBC - RETURN SHADOW TABLES TO FREE STORAGE 00046000
- * 00047000
- * ENTRY CONDITIONS - 00048000
- * 00049000
- * GPR 15 = ENTRY POINT ADDRESS 00050000
- * GPR 14 = RETURN ADDRESS 00051000
- * GPR 11 = VMBLOK ADDRESS 00052000
- * 00053000
- * EXIT CONDITIONS - 00054000
- * 00055000
- * ECBLOK, VMBLOK UPDATED 00056000
- * GPRS 0-15 UNCHANGED 00057000
- * 00058000
- * CALLS TO OTHER ROUTINES - 00059000
- * 00060000
- * DMKFREE - TO OBTAIN FREE STORAGE FOR SHADOW TABLES 00061000
- * DMKFRET - TO RETURN SHADOW TABLES TO FREE STORAGE 00062000
- * DMKPTRAN- TO BRING IN VIRTUAL STORAGE PAGES 00063000
- * DMKPTRPW 00063550
- * DMKATSCF - TO FORCE USER TO NONSHARED MODE 00063600
- * 00064000
- * EXTERNAL REFERENCES - 00065000
- * 00066000
- * NONE 00067000
- * 00068000
- * TABLES / WORK AREAS - 00069000
- * 00070000
- * VMBLOK, ECBLOK, BALRSAVE 00071000
- * 00072000
- EJECT 00073000
- * REGISTER USAGE - 00074000
- * 00075000
- * GPR 12 = BASE REGISTER 00076000
- * GPR 11 = VMBLOK ADDRESSABILITY 00077000
- * GPR 10 = ECBLOK ADDRESSABILITY 00078000
- * GPR 9 = ARCHITECTURE CONTROL INDEX 00079000
- * GPR 0-8 ARE WORK REGISTERS 00080000
- * GPRS 13-15 ARE EXTERNAL LINK REGISTERS 00081000
- * 00082000
- * OPERATION - 00083000
- * 00084000
- * DMKVATAB IS ENTERED VIA BALR WHENEVER AN EXTENDED- 00085000
- * CONTROL VIRTUAL MACHINE REQUIRES UPDATING OF THE 00086000
- * SHADOW TABLES FOR ONE OF THE FOLLOWING REASONS: 00087000
- * 00088000
- * A. FIRST ENTRANCE INTO TRANSLATE MODE - 00089000
- * SHADOW SEGMENT AND PAGE TABLES ARE OBTAINED VIA DMKFREE, 00090000
- * ALL ENTRIES OF SHADOW TABLES ARE SET UNAVAILABLE. 00091000
- * 00092000
- * B. RELOADING CONTROL REGISTER 1 (SEGMENT TABLE ORIGIN) - 00093000
- * SHADOW SEGMENT TABLE EXAMINED TO DETERMINE IF IT IS STILL 00094000
- * LARGE ENOUGH TO MAP THE VIRTUAL SEGMENT TABLE. IF NOT, 00095000
- * A NEW SHADOW SEGTABLE IS ALLOCATED FROM FREE STORAGE, 00096000
- * THE DATA FROM THE OLD SEGTABLE IS MOVED TO THE NEW ONE, 00097000
- * AND THE OLD SHADOW SEGTABLE IS RETURNED TO FREE STORAGE. 00098000
- * ALL SHADOW TABLE ENTRIES ARE MARKED UNAVAILABLE. 00099000
- * 00100000
- * C. RELOADING CONTROL REGISTER 0 (ARCHITECTURE CONTROLS) - 00101000
- * A CHECK IS MADE TO DETERMINE IF THE VIRTUAL MACHINE 00102000
- * HAS ALTERED ITS PAGE OR SEGMENT SIZE. IF THERE IS NO 00103000
- * CHANGE, THE CALL IS A NO-OP. IF THE PAGE AND/OR SEGMENT 00104000
- * SIZE HAS CHANGED, ALL SHADOW TABLES ARE RETURNED TO 00105000
- * FREE STORAGE VIA DMKFRET AND THE VMBLOK IS FLAGGED FOR 00106000
- * RE-ALLOCATION OF NEW TABLES WHEN REQUIRED. 00107000
- * 00108000
- * D. USER'S PAGE HAS BEEN SWAPPED IN OR OUT - 00109000
- * SHADOW SEGMENT TABLE IS INVALIDATED. 00110000
- * 00111000
- * E. VIRTUAL MACHINE EXECUTED 'PTLB' - PURGE TRANSLATION 00112000
- * LOOK-ASIDE BUFFER - PERFORMS STEP B. 00113000
- * 00114000
- EJECT 00115000
- * DMKVATMD IS ENTERED VIA BALR WHEN AN EXTENDED-CONTROL 00116000
- * VIRTUAL MACHINE ENTERS TRANSLATE MODE FOR THE FIRST TIME, 00117000
- * OR WHENEVER THE VIRTUAL MACHINE CHANGES THE PAGE OR 00118000
- * SEGMENT SIZE (AS SPECIFIED IN VIRTUAL CONTROL REGISTER 0). 00119000
- * SHADOW SEGMENT AND PAGE TABLES ARE ALLOCATED FROM FREE 00120000
- * STORAGE VIA CALLS TO DMKFREE. THE SIZE OF THE 00121000
- * SHADOW TABLES ALLOCATED IS DETERMINED BY THE PARTICULAR 00122000
- * COMBINATION OF PAGE AND SEGMENT SIZE USED BY THE VIRTUAL 00123000
- * MACHINE, AND IS ESSENTIALLY A TRADE-OFF BETWEEN SPEED 00124000
- * DEGRADATION OF THE VIRTUAL EXTENDED-CONTROL MACHINE AND 00125000
- * THE REAL STORAGE SPACE CONSUMED BY THE TABLES. 00126000
- * 00127000
- * DMKVATBC IS ENTERED WHEN THE VIRTUAL MACHINE EITHER LEAVES 00128000
- * EXTENDED-CONTROL MODE OR CHANGES THE PAGE OR SEGMENT SIZE 00129000
- * AS SPECIFIED IN VIRTUAL CONTROL REGISTER ZERO. 00130000
- * IF THE USER IS IN PAGE WAIT WHEN DMKVATBC IS ENTERED, 00130200
- * A CALL IS MADE TO DMKPGSPW TO QUEUE A CPEXBLOK OFF ANY 00130400
- * ACTIVE PAGE I/O REQUEST BLOCK FOR THIS VMBLOK. RETURN 00130600
- * IS MADE WHEN ALL PAGING AHS QUIESED. ALL THE 00130800
- * SHADOW PAGE, SEGMENT, AND COPY SEGMENT TABLES ARE RETURNED 00131000
- * TO FREE STORAGE VIA CALLS TO DMKFRET AND THE VMBLOK IS 00132000
- * MARKED TO INDICATE THAT SHADOW TABLES ARE NOT PRESENT. 00133000
- *. 00134000
- EJECT 00135000
- *---------------------------------------------------------------------* 00136000
- * DMKVATAB - MAINTAIN SHADOW TABLES AND CONTROL REGISTERS * 00137000
- *---------------------------------------------------------------------* 00138000
- DMKVATAB EQU * %V3M5012 00139000
- USING *,R15 %V3M5012 00140000
- STM R0,R15,BALRSAVE %V3M5012 00141000
- L R12,=A(DMKVAT) MODULE BASE ADDRESS %V3M5012 00142000
- DROP R15 %V3M5012 00143000
- USING DMKVAT,R12 %V3M5012 00144000
- L R10,VMECEXT EXTENSION BLOCK ADDRESS %V3M5012 00145000
- TM VMCXSTAT,VMSTBYPS STBYPASS VR enabled? HRC068DK 00145100
- BO VAVR Y, no shadow table maintHRC068DK 00145200
- SPACE 2 00146000
- AIF (NOT &AP).APCHK4 00146080
- TM APSTAT1,APUOPER RUNNING AS AP %V4M0178 00146100
- BZ VATABCA NO %V4M0178 00146120
- L R2,=A(DMKLOKSY+2) ADDRESS SUPERVISOR LOCK @V4M0178 00146140
- CLC LPUADDR,0(R2) DO WE HOLD SUPERVISOR LOCK @V4M0178 00146160
- BNE VATABC1 NO- PROCESS CALL FROM DISPATCHER @V4M0178 00146180
- VATABCA DS 0H HERE WITH SUPERVISOR LOCK %V4M0178 00146200
- .APCHK4 ANOP 00146220
- BAL R6,CHKFORM CHECK VALIDITY OF C-REG 0 VALUE %V3M5012 00147000
- BNZ TORNADO NO GOOD -- TREAT AS ARCH. CHANGE %V3M5012 00148000
- TM VMESTAT,VMNEWCR0 NEW VIRTUAL C-REG 0 ? %V3M5012 00149000
- BZ VATABC1 NO - CHECK C-REG 1 %V3M5012 00150000
- SLR R9,R9 00151000
- IC R9,EXTCR0+1 ARCHITECTURE CONTRL BYTE 00152000
- SH R9,=AL2(X'40') BASE AT ZERO 00153000
- ALR R9,R9 DOUBLE IT FOR TABLE INDEX 00154000
- TM VMESTAT,VMSHADT IF SHADOW TABLES ARE NOT PRESENT... 00155000
- BO VATARCH ...WE WILL SET THE INDEX ANYWAY 00156000
- STH R9,EXTARCH SET ARCHITECTURE CONTROL INDEX 00157000
- VATARCH EQU * CHECK FOR CHANGE IN TRANSLATE ARCHITECTURE 00158000
- CH R9,EXTARCH DOES IT MATCH CURRENT ARCHITECTURE? 00159000
- BNE TORNADO NO -- GO THRASH ABOUT MADLY 00160000
- L R1,CPCREG0 BYTES 0,2,3 STANDARD @VA06374 00161100
- ICM R1,B'0100',EXTCR0+1 VIRTUAL BYTE 1 @VA06374 00162100
- ST R1,EXTSHCR0 RUN VALUE OF CR0 @VA06374 00163100
- NI EXTSHCR0+1,X'F8' SET UNASSIGNED BITS TO ZERO @VA06374 00164100
- B VATCKC1 @VA01719 00166000
- VATABC1 EQU * CHECK FOR NEW SEG. TABLE ORIGIN %V3M5012 00167000
- LH R9,EXTARCH MAKE SURE WE HAVE CORRECT INDEX %V3M5012 00168000
- TM VMESTAT,VMINVSEG NEW C-REG 1? %V3M5012 00169000
- BZ VATABPG NO, CHECK FOR INVALID PAGE TABLE %V3M5012 00170000
- VATCKC1 EQU * @VA01719 00171000
- L R1,EXTCR1 PICK UP CURRENT C-REG 1 VALUE 00172000
- CL R1,EXTSTOLD HAS THE VALUE CHANGED AT ALL ? 00173000
- BE VATABPG NO -- NOTHING TO BE DONE 00174000
- ST R1,EXTSTOLD RESET OUR MEMORY OF PREVIOUS VALUE 00175000
- BAL R8,SHADOWS RESET SHADOW SEGMENT TABLE 00176000
- B VACLEAN GO CLEAN UP AND EXIT 00177000
- VAVR EQU * HRC068DK 00177100
- TM EXTCR0+1,X'40' Is page size 2k? HRC068DK 00177110
- BO STBOFF Yes, not elig for STBYPSHRC068DK 00177120
- ICM R1,15,EXTCR1 Get user's STO in CR1 HRC068DK 00177130
- BZ VAVRCR1 Zero is ok HRC068DK 00177140
- CLM R1,7,F4096+1 New STO in guest page 0?HRC068DK 00177150
- BNL VAVRCR1 N, CR1 check is ok HRC068DK 00177160
- * 00177170
- STBOFF EQU * HRC068DK 00177180
- NI VMCXSTAT,255-VMSTBYPS Else turn off STBYPASS HRC068DK 00177190
- CLC VMMADDR,ZEROES Is ECPS:VM active? HRC068DK 00177200
- BE VACLEAN Zeros...so no HRC068DK 00177210
- ICM R1,7,VMMADDR -> MICBLOK HRC068DK 00177220
- USING MICBLOK,R1 HRC068DK 00177230
- MVI MICEVMA2,0 Set off all STB assists HRC068DK 00177240
- DROP R1 HRC068DK 00177250
- B VACLEAN And exit w/o shadow tblsHRC068DK 00177260
- * (they will be built latrHRC068DK 00177270
- VAVRCR1 EQU * HRC068DK 00177280
- ST R1,EXTSHCR1 Use user's actual STO HRC068DK 00177290
- SR R5,R5 Clear for IC HRC068DK 00177300
- IC R5,EXTCR1 Get segment table len HRC068DK 00177310
- LA R5,1(0,R5) Make relative to 1 HRC068DK 00177320
- SLL R5,6(0) Compute length in bytes HRC068DK 00177330
- STH R5,EXTVSEGS Save user's seg tbl len HRC068DK 00177340
- TM 3(R1),X'01' Segment invalid? HRC068DK 00177350
- BO VACLEAN Yes HRC068DK 00177360
- L R1,0(,R1) -> PTE for page 0 HRC068DK 00177370
- TM 1(R1),X'08' Page invalid? HRC068DK 00177380
- BO VACLEAN Yes HRC068DK 00177390
- ICM R0,3,0(R1) Load the page 0 PTE HRC068DK 00177400
- N R0,=X'0000FFF0' Keep only page addr bitsHRC068DK 00177410
- BNZ VACLEAN Br if PTE .NE. frame 0 HRC068DK 00177420
- L R15,=A(DMKSLC-4096) Real addr of V=R page 0 HRC068DK 00177430
- SRL R15,8 Adjust for PTE use HRC068DK 00177440
- ICM R0,3,0(R1) Load the page 0 PTE HRC068DK 00177450
- N R0,=X'0000000F' Keep guest bit settings HRC068DK 00177460
- OR R0,R15 Adjust PTE to V=R pag 0 HRC068DK 00177470
- STCM R0,3,0(R1) Store updated guest PTE HRC068DK 00177480
- OI APSTAT2,CPPTLBR Set PTLB required HRC068DK 00177490
- L R15,PREFIXB -> Other processor pfx HRC068DK 00177500
- OI APSTAT2-PSA(R15),CPPTLBR (If there is another) HRC068DK 00177510
- B VACLEAN HRC068DK 00177520
- SPACE 00178000
- VATABPG EQU * %V3M5012 00179000
- TM VMESTAT,VMSHADT ARE SHADOW TABLES PRESENT %V3M5012 00180000
- BZ VACLEAN NO - CLEAR BIT AND EXIT %V3M5012 00181000
- TM VMESTAT,VMINVPAG+VMINVSEG NEED TO INVALIDATE? %V3M5012 00182000
- BZ VACLEAN NO , EXIT TO USER. %V3M5012 00183000
- BAL R8,ZAPSEGS SET SHADOW SEGTABLE INVALID %V3M5012 00184000
- SPACE 00185000
- VACLEAN EQU * CLEAR INDICATOR BITS + EXIT %V3M5012 00186000
- NI VMESTAT,255-(VMNEWCR0+VMINVSEG+VMINVPAG) %V3M5012 00187000
- LM R0,R15,BALRSAVE RESTORE REGISTERS AT ENTRY %V3M5012 00188000
- BR R14 %V3M5012 00189000
- EJECT 00190000
- *---------------------------------------------------------------------* 00191000
- * TORNADO - RELEASE ALL ACTIVE SHADOW TABLES, RE-ALLOCATE * 00192000
- * ACCORDING TO A NEW TABLE FORMAT * 00193000
- *---------------------------------------------------------------------* 00194000
- TORNADO EQU * ARRGH - HIS ARCHITECTURE CHANGED 00195000
- TM VMESTAT,VMSHADT DO SHADOW TABLES EXIST ALREADY ? 00196000
- BZ VACLEAN NO -- DON'T BOTHER TO CREATE ANY 00197000
- NI VMESTAT,X'FF'-(VMNEWCR0+VMINVSEG+VMINVPAG) 00198000
- SVC 20 GET A SAVE AREA 00199000
- MVC SAVEREGS(R12*4),BALRSAVE SAVE REGS 0-11 00200000
- L R1,BALR12 CALLER'S BASE 00201000
- ST R1,SAVER12 INTO NEW SAVE-AREA 00202000
- L R1,BALR13 00203000
- ST R1,SAVER13 00204000
- L R1,BALR14 RETURN ADDRESS 00205000
- LA R1,0(,R1) SANS ILC/CC 00206000
- ST R1,SAVERETN NOW EVERYTHING IS SET FOR AN 'EXIT' 00207000
- CALL DMKVATBC RELEASE ALL CURRENT SHADOW TABLES 00208000
- CALL DMKVATMD ...AND GET ANOTHER SET 00209000
- EXIT , RETURN TO CALLER 00210000
- SPACE 2 00211000
- *---------------------------------------------------------------------* 00212000
- * CHKFORM - EXAMINE VIRTUAL C-REG 0 FOR VALIDITY * 00213000
- *---------------------------------------------------------------------* 00214000
- CHKFORM EQU * %V3M5012 00214700
- NI VMESTAT,255-VMBADCR0 REMOVE ERROR BIT %V3M5012 00215400
- TM EXTCR0+1,X'C0' PAGE-SIZE CONTROL BITS %V3M5012 00216100
- BNM BADARCH NOT '10' OR '01' - ERROR %V3M5012 00216800
- TM EXTCR0+1,X'20' CHECK BIT 10 - MUST BE ZERO %V3M5012 00217500
- BO BADARCH ERROR IF SET TO ONE %V3M5012 00218200
- TM EXTCR0+1,X'0F' SEGMENT SIZE, UNUSED BITS %V3M5012 00218900
- BCR 8,R6 ALL ZERO - O.K. %V3M5012 00219600
- BADARCH EQU * 00221000
- OI VMESTAT,VMBADCR0 INVALID C-REG 0 00222000
- TM *-1,255 SET NON-ZERO COND. CODE @VA02142 00223000
- BR R6 RETURN 00224000
- EJECT 00225000
- *---------------------------------------------------------------------* 00226000
- * DMKVATMD - ALLOCATE SHADOW TABLES, SET UP SHADOW C-REGS * 00227000
- *---------------------------------------------------------------------* 00228000
- DMKVATMD EQU * 00229000
- USING *,R15 00230000
- TM VMESTAT,VMSHADT ARE TABLES ALREADY PRESENT? 00231000
- BCR 1,R14 YES - EXIT IMMEDIATELY 00232000
- STM R0,R15,BALRSAVE SAVE CALLER'S REGISTERS @V4M0233 00232010
- L R12,=A(DMKVAT) ESTABLISH ADDRESSIBILITY @V4M0233 00232020
- DROP R15 @V4M0233 00232030
- USING DMKVAT,R12 @V4M0233 00232040
- TM VMOSTAT,VMSHR IS USER RUNNING SHR SEG? @VA06156 00232100
- BZ NONSHR NO, PROCESS NORMALLY @VA07684 00232102
- TM VMPSW+1,EXTMODE IN EXTERNAL MODE ? @VA07684 00232104
- BZ NONSHR NO, CAN'T BE IN XLATE MODE. @VA07684 00232106
- TM VMPSW,TRANMODE IN TRANSLATE MODE ? @VA07684 00232108
- BZ NONSHR NO, DON'T HAVE TO UNSHARE USER. @VA07684 00232110
- SVC 20 OBTAIN A SAVEAREA @V4M0233 00232122
- MVC SAVEREGS(R12*4),BALRSAVE COPY CALLERS REGS 0-11 @V4M0233 00232124
- L R1,BALR12 GET CALLER'S R12 @V4M0233 00232126
- ST R1,SAVER12 SAVE R12 IN SAVEAREA @V4M0233 00232128
- L R1,BALR13 GET CALLER'S R13 @V4M0233 00232130
- ST R1,SAVER13 SAVE R13 IN SAVEAREA @V4M0233 00232132
- L R1,BALR14 GET RETURN ADDRESS @V4M0233 00232134
- LA R1,0(,R1) STRIP CC & ILC @V4M0233 00232136
- ST R1,SAVERETN SAVE RETURN ADDRESS IN SAVEAREA @V4M0233 00232138
- RECHECK DS 0H @V60BC11 00232139
- SLR R4,R4 CLEAR WORK REG @V4M0233 00232140
- SR R1,R1 CLEAR R1 FOR PAGE ZERO @VA06156 00232160
- IC R4,VMSEG GET SIZE OF SEGMENT TABLE @VA06156 00232180
- SLL R4,4 TIMES 16 @VA06156 00232200
- LA R4,16(R4) PLUS 16 - MAX SEGTABLE ENTRIES @VA06156 00232220
- L R5,VMSEG GET SEGMENT TABLE @VA06156 00232240
- LOOPSEG EQU * @VA06156 00232260
- L R6,0(R5) GET PAGTABLE @VA06156 00232280
- CLM R6,B'0110',ZEROES IS SEQ INVALID OR MIGRATED @VA12195 00232300
- BE SKPCHG NO SEGMENT - LOOK AT NEXT SEGMENT@VA06156 00232320
- N R6,CLRBITS CLEAR FLAG BITS @V4M0233 00232340
- SL R6,F16 BACKUP TO HEADER @V60BC11 00232360
- USING PAGTABLE,R6 @V60BC11 00232370
- USING SWPTABLE,R3 @VA06156 00232380
- L R3,PAGSWP GET ADDRESS OF SWPTABLE @V60BC11 00232400
- SL R3,F8 BACK UP TO SWPTABLE PREFIX FOR @VA06156 00232420
- * ADDRESSABILITY 00232440
- TM SWPFLAG,SWPSHR IS SEGMENT SHARED? @VA06156 00232460
- BZ SKPCHG NO, CONTINUE LOOKING @VA06156 00232480
- LR R1,R5 GET ADDRESS OF CURRENT STE @V60BC11 00232510
- L R2,VMSEG GET STE ORIGIN ADDRESS @V60BC11 00232512
- N R2,CLRBITS CLEAR UNWANTED BITS @V60BC11 00232514
- SR R1,R2 GET SEGMENT NUMBER TIMES FOUR @V60BC11 00232516
- SRL R1,2 GET SEGMENT NUMBER @VMI0065 00232519
- SLL R1,16 FORM VIRTUAL ADDRESS @V60BC11 00232520
- LR R2,R1 GET VITURAL ADDRESS @VA12533 00232523
- CALL DMKATSCF FORCE USER TO NONSHARED MODE @V60BC11 00232524
- TM VMOSTAT,VMSHR STILL RUNNING SHARED SYSTEM @V60BC11 00232526
- BZ NORMPROC NO, CONTINUE NORMAL PROCESSING @V60BC11 00232528
- B RECHECK YES, CONTINUE FORCING NONSHARED @V60BC11 00232530
- DROP R6 @V60BC11 00232532
- SKPCHG EQU * @VA06156 00232540
- LA R5,4(R5) POINT TO NEXT SEGMENT @VA06156 00232560
- A R1,SEGSIZE NEED A PAGE ADDRESS FOR TRANS @VA06156 00232580
- BCT R4,LOOPSEG GO, DO IT AGAIN @VA06156 00232600
- DROP R3 @VA06156 00232620
- B NORMPROC CONTINUE WITH NORMAL PROCESSING @V4M0233 00232625
- NONSHR EQU * @VA06156 00232640
- SLR R13,R13 INDICATE NO SAVEAREA @V4M0233 00235500
- NORMPROC DS 0H @V4M0233 00235600
- L R10,VMECEXT EXTENSION BLOCK ADDRESS 00237000
- SPACE 2 00238000
- BAL R6,CHKFORM CHECK VALIDITY OF VIRTUAL C-REGS 00239000
- BNZ MINIMUM NO GOOD -- SETUP MINIMUM SHADOW SEGTABLE 00240000
- SLR R9,R9 COMPUTE ARCHITECTURE CONTROL INDEX 00241000
- STH R9,EXTSHLEN (SET SHADOW SEGTABLE LENGTH ZERO) 00242000
- IC R9,EXTCR0+1 ARCHITECTURE CONTROL BYTE 00243000
- SH R9,=AL2(X'40') BASED AT ZERO 00244000
- ALR R9,R9 DOUBLE IT FOR TABLE INDEX 00245000
- STH R9,EXTARCH SAVE IN ECBLOK FOR VAT ROUTINES 00246000
- L R1,CPCREG0 BYTES 0,2,3 STANDARD @VA06374 00247100
- ICM R1,B'0100',EXTCR0+1 VIRTUAL BYTE 1 @VA06374 00248100
- ST R1,EXTSHCR0 RUN VALUE OF CR0 @VA06374 00249100
- NI EXTSHCR0+1,X'F8' SET UNASSIGNED BITS TO ZERO @VA06374 00250100
- BAL R8,SHADOWS SETUP SHADOW SEGTABLE, SHADOW C-REG 1 00252000
- LTR R13,R13 DO WE HAVE A SAVEAREA @V4M0233 00253500
- BZ BALREXT NO, EXIT VIA BALRSAVE @V4M0233 00253600
- B MDEXIT YES, EXIT VIA SVC @V4M0233 00253700
- SPACE 2 00254000
- *---------------------------------------------------------------------* 00255000
- * VIRTUAL C-REGS CONTAIN INVALID DATA - GET MINIMUM TABLES * 00256000
- *---------------------------------------------------------------------* 00257000
- MINIMUM EQU * 00258000
- LA R5,64(0) MINIMUM SEGTABLE = 16 ENTRIES 00259000
- STH R5,EXTSHLEN ... 00260000
- BAL R3,GETSHAD GET SHADOW SEGTABLE @V4M0233 00261100
- ST R1,EXTSHSEG REAL START ADDRESS 00262000
- ST R4,EXTSHCR1 SHADOW SEGTABLE ORIGIN, LENGTH CODE ZERO 00264000
- L R1,CPCREG0 STANDARD C-REG 0 00265000
- ST R1,EXTSHCR0 ... 00266000
- BAL R8,ZAPSEGS SET ENTIRE TABLE UNAVAILABLE 00267000
- LA R1,CODE80-ARCHTECT SET STANDARD VM/370 FORMAT 00268000
- STH R1,EXTARCH ...FOR CHANGE DETECTION LATER 00269000
- LTR R13,R13 DO WE HAVE A SAVEAREA @V4M0233 00270100
- BZ BALREXT NO, EXIT VIA BALRSAVE @V4M0233 00270200
- MDEXIT DS 0H @V4M0233 00270300
- EXIT YES, EXIT VIA SVC @V4M0233 00270400
- EJECT 00271000
- *---------------------------------------------------------------------* 00272000
- * SHADOWS - ALLOCATE OR INVALIDATE SHADOW SEGMENT TABLE * 00273000
- *---------------------------------------------------------------------* 00274000
- SHADOWS EQU * 00275000
- SLR R5,R5 00276000
- IC R5,EXTCR1 GET VIRTUAL SEGTABLE LENGTH CODE 00277000
- CH R5,MAXSEGS(R9) IS HIS VALUE REASONABLE ? 00278000
- BNH SEGLNOK YES - USE IT AS IS 00279000
- LH R5,MAXSEGS(R9) USE ONLY AS MUCH AS HE CAN REFERENCE 00280000
- SEGLNOK EQU * SET SHADOW SEGTABLE LENGTH CODE 00281000
- STC R5,EXTSHCR1 ... 00282000
- LA R5,1(0,R5) COMPUTE SEGTABLE LENGTH IN BYTES 00283000
- SLL R5,6(0) ... 00284000
- STH R5,EXTVSEGS SAVE IN ECBLOK BECAUSE IT'S CONVENIENT 00285000
- CH R5,EXTSHLEN DO WE HAVE ENOUGH ROOM FOR HIS TABLE ? 00286000
- BNH ZAPSEGS YES - JUST SET SHADOW SEGTABLE INVALID 00287000
- BAL R3,GETSHAD GET NEW, LARGER SHADOW SEGTABLE @V4M0233 00288100
- L R6,EXTSHCR1 OLD SEGTABLE ORIGIN 00289000
- LH R7,EXTSHLEN ...AND IT'S LENGTH 00290000
- ST R4,EXTSHCR1 SET NEW SHADOW SEGTABLE ORIGIN 00291000
- STH R5,EXTSHLEN ...AND ITS LENGTH 00292000
- STCM R6,B'1000',EXTSHCR1 SAVE SHADOW SEGTABLE LENGTH 00293000
- LR R2,R1 ACTUAL START ADDRESS TO GR2 00294000
- N R7,XRIGHT16 FORCE POSITIVE, ZERO PAD, TEST VALUE 00295000
- BZ SHADNEW SHADOW SEGTABLE DOES NOT YET EXIST 00296000
- MVCL R4,R6 MOVE OLD TABLE TO NEW + CLEAR OVERFLOW 00297000
- * R0 WAS LOADED WITH OLD LENGTH OF @V4M0247 00298100
- * SEGMENT TABLE IN GETSHAD @V4M0247 00298110
- L R1,EXTSHSEG OLD ACTUAL START ADDRESS 00299000
- CALL DMKFRET RELEASE OLD SHADOW SEGTABLE 00300000
- SHADNEW EQU * SET NEW POINTERS TO LARGER SEGTABLE 00301000
- ST R2,EXTSHSEG ACTUAL START ADDRESS FOR LATER 'FRET' 00302000
- B ZAPSEGS GO INVALIDATE ENTIRE SHADOW TABLES 00304000
- EJECT 00305000
- *---------------------------------------------------------------------* 00306000
- * GETSHAD - ALLOCATE NEW SHADOW SEGMENT TABLE * 00307000
- *---------------------------------------------------------------------* 00308000
- GETSHAD EQU * 00309000
- LR R1,R5 LENGTH OF SEGTABLE TO BE ALLOCATED@V4M0233 00310100
- SRL R1,3(0) CONVERT TO DBL-WD COUNT @V4M0233 00310200
- LA R1,8(,R1) ALLOW FOR 64-BYTE BOUNDARY @V4M0233 00310300
- LR R0,R1 LOAD SIZE FOR FREE @V4M0233 00310400
- LR R7,R1 SAVE LENGTH @V4M0233 00310500
- CALL DMKFREE GET SOME STORAGE 00314000
- LA R4,63(0,R1) ROUND UP... 00315000
- N R4,=X'00FFFFC0' ...TO 64-BYTE BOUNDARY 00316000
- LR R6,R1 REAL START ADDRESS 00317000
- LH R0,EXTSEGLN SAVE LENGTH OF OLD SHADOW SEGTAB @V4M0247 00317100
- STH R7,EXTSEGLN FULL BLOCK LENGTH IN DOUBLE-WORDS@V4M0233 00318100
- SLL R7,3(0) FULL LENGTH IN BYTES 00319000
- SLR R15,R15 ZERO-LEN SOURCE, ZERO PAD 00320000
- MVCL R6,R14 CLEAR ENTIRE FIELD TO ZEROES 00321000
- OI VMESTAT,VMSHADT SHADOW TABLES NOW EXIST 00322000
- BR R3 RETURN TO CALLER @V4M0233 00323100
- SPACE 2 00324000
- *---------------------------------------------------------------------* 00325000
- * GETPAGT - ALLOCATE ONE SEGMENT OF SHADOW PAGE TABLES * 00326000
- *---------------------------------------------------------------------* 00327000
- GETPAGT EQU * ALLOCATE A SHADOW PAGE TABLE 00328000
- LH R0,PAGTLEN(R9) PAGE TABLE LENGTH IN BYTES 00329000
- SRL R0,3(0) CVT TO DBL-WDS 00330000
- CALL DMKFREE GET STORAGE FOR SHADOW TABLE 00331000
- ICM R1,B'1000',EXTCOPY USE VIRTUAL PAGE-TABLE LENGTH CODE 00332000
- ST R1,0(0,R6) SET PAGE TABLE ADDR IN SHADOW SEGTABLE 00333000
- BR R3 ...AND RETURN 00334000
- EJECT 00335000
- *---------------------------------------------------------------------* 00336000
- * DMKVATBC - RETURN TO FREE STORAGE ALL ACTIVE SHADOW TABLES * 00337000
- *---------------------------------------------------------------------* 00338000
- DMKVATBC EQU * 00339000
- USING *,R15 00340000
- *-- If we are in DMKVATBC with VMSTBVR set, then the PSW has HRC068DK 00340100
- *-- transitioned into BC-mode. STBYPASS must be turned off. HRC068DK 00340110
- TM VMCXSTAT,VMSTBYPS STBYPASS VR enabled? HRC068DK 00340120
- BZ NOSTB No HRC068DK 00340130
- NI VMCXSTAT,255-VMSTBYPS Turn off STBYPASS HRC068DK 00340140
- CLC VMMADDR,ZEROES Is ECPS:VM active? HRC068DK 00340150
- BE NOSTB Zeros...so no HRC068DK 00340160
- ST R1,BALR1 Need a register HRC068DK 00340170
- ICM R1,7,VMMADDR -> MICBLOK HRC068DK 00340180
- USING MICBLOK,R1 HRC068DK 00340190
- MVI MICEVMA2,0 Set off all STB assists HRC068DK 00340200
- DROP R1 HRC068DK 00340210
- L R1,BALR1 Restore register HRC068DK 00340220
- * HRC068DK 00340230
- NOSTB EQU * HRC068DK 00340240
- TM VMESTAT,VMSHADT ARE SHADOW TABLES PRESENT? 00341000
- BCR 8,R14 NO - EXIT IMMEDIATELY 00342000
- STM R0,R15,BALRSAVE SAVE REGISTERS IN PSA 00343000
- L R12,=A(DMKVAT) MODULE BASE ADDRESS 00344000
- DROP R15 00345000
- USING DMKVAT,R12 00346000
- TM VMRSTAT,VMPGWAIT IS USER IN PAGE WAIT? @VA04369 00346500
- BZ PAGCOMP NO - OK TO CONTINUE @VA04369 00346600
- CL R11,ASYSVM IS IT SYSTEM VMBLOK? @VA04369 00346700
- BE PAGCOMP YES - CONTINUE PROCESSING @VA04369 00346800
- LA R0,8 GET AREA TO PRESERVE @VA04369 00346900
- CALL DMKFREE BALRSAVE OVER PTRPW CALL @VA04369 00347000
- MVC 0(64,R1),BALRSAVE SAVE IT @VA04369 00347100
- CALL DMKPTRPW @VA08037 00347210
- MVC BALRSAVE(64),0(R1) RESTORE BALRSAVE @VA04369 00347300
- CALL DMKFRET RELEASE TEMP SAVE AREA @VA04369 00347400
- PAGCOMP L R10,VMECEXT EXTENSION BLOCK POINTER @VA04369 00347500
- SPACE 2 00348000
- LH R7,EXTARCH PICK UP ARCHITECTURE CONTROL INDEX 00349000
- L R9,EXTSHCR1 SHADOW SEGMENT TABLE ORIGIN 00350000
- LH R8,EXTSHLEN ...LENGTH IN BYTES 00351000
- SRL R8,2(0) CONVERT TO COUNT OF ENTRIES 00352000
- PAGFRET EQU * RELEASE SHADOW PAGE TABLES 00353000
- L R1,0(0,R9) PICK UP SEGTABLE ENTRY 00354000
- N R1,=X'00FFFFF8' STRIP EAC, INVALID, LEN, KEY DATA 00355000
- BZ NXTFRET INACTIVE ENTRY - GET NEXT 00356000
- LH R0,PAGTLEN(R7) PICK UP PAGE TABLE LENGTH IN BYTES 00357000
- SRL R0,3(0) CONVERT TO DOUBLE-WORDS FOR DMKFRET 00358000
- CALL DMKFRET RELEASE ONE PAGE TABLE 00359000
- NXTFRET EQU * ADVANCE TO NEXT ENTRY 00360000
- LA R9,4(0,R9) NEXT SLOT IN SEGMENT TABLE 00361000
- BCT R8,PAGFRET RELEASE ALL THE TABLES 00362000
- SPACE 00363000
- L R1,EXTSHSEG REAL START OF SHADOW SEGTABLE BLOCK 00364000
- LH R0,EXTSEGLN ...AND ITS LENGTH IN DBL-WDS 00365000
- CALL DMKFRET RELEASE SHADOW SEGTABLE 00366000
- SLR R1,R1 ZERO OUT TABLE POINTERS 00367000
- ST R1,EXTSHCR1 ... 00368000
- ST R1,EXTSHSEG ... 00369000
- STH R1,EXTSHLEN ... 00370000
- STH R1,EXTVSEGS ... 00371000
- ST R1,EXTSTOLD 00372000
- STH R1,EXTSEGLN ... 00373000
- NI VMESTAT,X'FF'-VMSHADT SHADOW TABLES ARE GONE 00374000
- B BALREXT RETURN TO CALLER 00375000
- EJECT 00376000
- *---------------------------------------------------------------------* 00377000
- * ZAPPAGE - INVALIDATE ONE SHADOW PAGE TABLE * 00378000
- * ------------------------------- * 00379000
- * GPR 9 = ARCHITECTURE CONTROL INDEX * 00379300
- * GPR 6 = ADDRESS OF SEGMENT TABLE ENTRY FOR PAGE TABLE * 00379600
- *---------------------------------------------------------------------* 00379900
- *. 00380200
- *********************************************************************** 00380500
- * 00380800
- * 00381100
- * CP ASSIST INSTRUCTION "ZAPPAGE" - INVALIDATE SHADOW PAGE TABLE 00381400
- * 00381700
- * 00382000
- * OPERANDS: 00382300
- * 1 = ADDRESS OF 'ARCHTECT' (ARCHITECTURE CONTROLS TABLE) 00382600
- * 2 = VALUE OF 'EXTARCH' FROM ECBLOK (ARCHITECTURE INDEX) 00382900
- * 00383200
- * REGISTER INPUT: 00383500
- * GPR 6 = ADDRESS OF SEGMENT TABLE ENTRY FOR THE PAGE TABLE 00383800
- * GPR 14 = EXIT ADDRESS 00384100
- * 00384400
- * SYSTEM DATA AREAS REFERENCED (BY MODULE WHERE APPLICABLE): 00384700
- * DMKVAT - 'ARCHTECT' TABLE 00385000
- * SHADOW PAGE TABLE 00385300
- * 00385600
- * 00385900
- * EXITS: 00386200
- * 00386500
- * 1. ADDRESS IN GPR 14 (NORMAL COMPLETION) 00386800
- * 00387100
- * REGISTER OUTPUT: NONE CHANGED BY THIS INSTRUCTION 00387400
- * NOTE: THE CONDITION CODE IS SET TO ZERO 00387700
- * 00388000
- * 2. NEXT SEQUENTIAL INSTRUCTION (ABNORMAL COMPLETION) 00388300
- * 00388600
- * NOTE: THIS EXIT IS FUNCTIONALLY EQUIVALENT TO A NO-OP. 00388900
- * 00389200
- *********************************************************************** 00389500
- *. 00389800
- ZAPPAGE EQU * %V3M4038 00390100
- SPACE 00390400
- DS 0H EXECUTE CP ASSIST "ZAPPAGE" %V3M4038 00390700
- DMKVATZP DC X'E60B',S(ARCHTECT,0(R9)) ***%V3M4038 00391000
- SPACE 00391300
- L R0,0(,R6) GET PAGE TABLE ADDRESS %V3M4038 00391600
- N R0,=X'00FFFFF8' STRIP EAC, INVALID, LEN, KEY %V3M4038 00391900
- BCR 8,R14 INACTIVE ENTRY - RETURN %V3M4038 00392200
- NI 3(R6),X'FE' MAKE SEGMENT TABLE ENTRY VALID %V3M4038 00392500
- SLR R15,R15 ZERO LENGTH FOR 2ND OPR. OF MVCL %V3M4038 00392800
- LA R1,PINVBIT(R9) INVALID BIT FOR THIS FORMAT %V3M4038 00393100
- ICM R15,B'1000',0(R1) GET PADDING CHAR = INV. BIT %V3M4038 00393400
- LH R1,PAGTLEN(R9) PAGE TABLE LENGTH IN BYTES %V3M4038 00393700
- MVCL R0,R14 SET ALL PAGE TABLE ENTRIES INV. %V3M4038 00394000
- BR R14 ...AND RETURN TO CALLER %V3M4038 00394300
- EJECT 00394600
- *---------------------------------------------------------------------* 00395000
- * ZAPSEGS - INVALID ALL ENTRIES IN A SEGMENT TABLE * 00396000
- * ------------------------------- * 00397000
- * GPR 6 = SEGMENT TABLE ORIGIN ADDRESS * 00397300
- * GPR 5 = SEGMENT TABLE LENGTH IN BYTES * 00397600
- *---------------------------------------------------------------------* 00397900
- *. 00398200
- *********************************************************************** 00398500
- * 00398800
- * 00399100
- * CP ASSIST INSTRUCTION "ZAPSEGS" - INVALIDATE SHADOW SEG. TABLE 00399400
- * 00399700
- * 00400000
- * OPERANDS: 00400300
- * 1 = ADDRESS OF 'ARCHTECT' (ARCHITECTURE CONTROLS TABLE) 00400600
- * 2 = ADDRESS OF 'EXTSHCR1' (SHADOW SEGMENT TABLE ORIGIN) 00400900
- * 00401200
- * REGISTER INPUT: 00401500
- * GPR 8 = EXIT ADDRESS 00401800
- * GPR 9 = VALUE OF 'EXTARCH' FROM ECBLOK (ARCHITECTURE INDEX) 00402100
- * 00402400
- * SYSTEM DATA AREAS REFERENCED (BY MODULE WHERE APPLICABLE): 00402700
- * DMKPSA - 'APSTAT2' 00402800
- * DMKVAT - 'ARCHTECT' TABLE 00403000
- * ECBLOK, SHADOW PAGE TABLE, SHADOW SEGMENT TABLE 00403300
- * 00403600
- * 00403900
- * EXITS: 00404200
- * 00404500
- * 1. ADDRESS IN GPR 8 (NORMAL COMPLETION) 00404800
- * 00405100
- * REGISTER OUTPUT: NONE CHANGED BY THIS INSTRUCTION 00405400
- * 00405700
- * 2. NEXT SEQUENTIAL INSTRUCTION (ABNORMAL COMPLETION) 00406000
- * 00406300
- * NOTE: THIS EXIT IS FUNCTIONALLY EQUIVALENT TO A NO-OP. 00406600
- * 00406900
- *********************************************************************** 00407200
- *. 00407500
- ZAPSEGS EQU * %V3M4038 00407800
- SPACE 00408100
- DS 0H EXECUTE CP ASSIST "ZAPSEGS" %V3M4038 00408400
- DMKVATZS DC X'E60A',S(ARCHTECT,EXTSHCR1) ***%V3M4038 00408700
- SPACE 00409000
- L R6,EXTSHCR1 SHADOW SEGTABLE ORIGIN %V3M4038 00409300
- LH R5,EXTSHLEN ...LENGTH IN BYTES %V3M4038 00409600
- LA R6,0(0,R6) 24 BITS ONLY, PLEASE %V3M4038 00409900
- BCTR R5,0 DECREMENT COUNT... %V3M4038 00410200
- ALR R5,R6 ...TO MAKE IT A LIMIT %V3M4038 00410500
- LA R4,4(0,0) INCREMENT %V3M4038 00410800
- ZAPSEG1 EQU * INVALIDATE ONE ENTRY %V3M4038 00411100
- OI 3(R6),X'01' SET SEGMENT INVALID %V3M4038 00411400
- BAL R14,ZAPPAGE INVALIDATE PAGE TABLE IF THERE %V3M4038 00411700
- BXLE R6,R4,ZAPSEG1 DO 'EM ALL %V3M4038 00412000
- OI APSTAT2,CPPTLBR SET PTLB REQUIRED FOR THIS %V407594 00412300
- L R15,PREFIXB AND OTHER PROCESSOR %V407594 00412320
- OI APSTAT2-PSA(R15),CPPTLBR (IF THERE IS ANOTHER) %V407594 00412340
- BR R8 AND RETURN %V3M4038 00412600
- SPACE 3 00412900
- *---------------------------------------------------------------------* 00415000
- * BALREXT - EXIT FROM ALL 'BALR' ENTRY POINTS * 00416000
- *---------------------------------------------------------------------* 00417000
- BALREXT EQU * 00418000
- LM R0,R15,BALRSAVE 00419000
- BR R14 RETURN TO CALLER 00420000
- EJECT 00421000
- *. 00422000
- * SUBROUTINE NAME - 00423000
- * 00424000
- * DMKVATRN 00425000
- * 00426000
- * FUNCTION - 00427000
- * 00428000
- * TO PROVIDE VIRTUAL-VIRTUAL TO REAL ADDRESS TRANSLATION. 00429000
- * 00430000
- * ATTRIBUTES - 00431000
- * 00432000
- * REENTRANT, RESIDENT, CALLED VIA SVC 00433000
- * 00434000
- * ENTRY POINTS - 00435000
- * 00436000
- * DMKVATRN - VIRTUAL-VIRTUAL TO REAL ADDRESS 00437000
- * DMKVATLA - VIRTUAL-VIRTUAL TO VIRTUAL ADDRESS 00438000
- * 00439000
- * ENTRY CONDITIONS - 00440000
- * 00441000
- * GPR 15 = ENTRY POINT ADDRESS 00442000
- * GPR 14 = RETURN ADDRESS 00443000
- * GPR 13 = ADDRESS OF STANDARD SAVE AREA 00444000
- * GPR 11 = VMBLOK ADDRESS 00445000
- * GPR 3 = VIRTUAL-VIRTUAL ADDRESS REFERENCED 00446000
- * 00447000
- * EXIT CONDITIONS - 00448000
- * 00449000
- * GPR 0 = 0 - TRANSLATION SUCCESSFUL 00450000
- * GPR 2 = REAL ADDRESS CORRESPONDING TO VIRT-VIRT ADDR 00451000
- * OR GPR 0 < 0 - REFLECT PAGING EXCEPTION TO USER 00452000
- * AND GPR 1 = INTERRUPT CODE OF EXCEPTION 00453000
- * GPRS 3-15 UNCHANGED 00454000
- * 00455000
- * CALLS TO OTHER ROUTINES - 00456000
- * 00457000
- * NONE 00458000
- * 00459000
- * EXTERNAL REFERENCES - 00460000
- * 00461000
- * NONE 00462000
- * 00463000
- * TABLES / WORK AREAS - 00464000
- * 00465000
- * VMBLOK, ECBLOK 00466000
- * 00467000
- EJECT 00468000
- * REGISTER USAGE - 00469000
- * 00470000
- * GPR 12 = BASE REGISTER 00471000
- * GPR 11 = VMBLOK ADDRESSABILITY 00472000
- * GPR 10 = ECBLOK ADDRESSABILITY 00473000
- * GPR 9 = ARCHITECTURE CONTROL VARIABLE INDEX 00474000
- * GPR 7 = VIRTUAL-VIRTUAL ADDRESS REFERENCED 00475000
- * GPRS 0-6 = WORK REGISTERS 00476000
- * GPRS 13-15 = LINK AND SAVE AREA REGISTERS 00477000
- * 00478000
- * OPERATION - 00479000
- * 00480000
- * THE VIRTUAL SEGMENT AND PAGE TABLES ARE REFERENCED TO 00481000
- * DETERMINE IF A VIRTUAL PAGING OR TRANSLATION EXCEPTION 00482000
- * SHOULD BE REFLECTED TO THE VIRTUAL MACHINE. 00483000
- * THE VIRTUAL SEGMENT TABLE IS REFERENCED TO DETERMINE IF THE 00484000
- * VIRTUAL SEGMENT IS AVAILABLE. IF IT IS, THE VIRTUAL PAGE 00485000
- * TABLES ARE REFERENCED VIA DMKPTRAN AND THE TRANSLATION 00486000
- * IS PERFORMED. 00487000
- * IF ANY ERROR IN TRANSLATION TABLE FORMAT IS DETECTED 00488000
- * DURING THE TRANSLATION PROCESS, STEPS ARE TAKEN TO FORCE 00489000
- * A TRANSLATION SPECIFICATION EXCEPTION (PROGRAM INTERRUPT 00490000
- * CODE X'12'), OR AN ADDRESSING EXCEPTION - CODE X'05'. 00491000
- *. 00492000
- SPACE 2 00493000
- USING DMKVATLA,R12 00494000
- DMKVATLA DS 0D TRANSLATE THIRD-LEVEL TO SECOND-LEVEL 00495000
- SLR R0,R0 SET RETURN CODE ZERO RIGHT AWAY 00496000
- ENTER 00497000
- L R12,=A(DMKVAT) MODULE BASE ADDRESS 00498000
- USING DMKVAT,R12 00499000
- SPACE 00500000
- BAL R6,SETUPAT SETUP FOR TRANSLATE PROCESSING 00501000
- BAL R6,CHKFORM VALIDATE C-REG 0 VALUES 00502000
- BNZ LRAEXCP NO GOOD -- FORCE TRANS SPEC INTRPT 00503000
- LR R7,R3 THIRD-LEVEL ADDRESS TO GR7 00504000
- SPACE 00505000
- L R1,SEGMASK(R9) SEGMENT MASK FROM TABLE 00506000
- LH R2,SEGSHFT(R9) SHIFT COUNT FOR JUSTIFY 00507000
- NR R1,R7 EXTRACT SEGMENT NUMBER FROM ADDRESS 00508000
- SRL R1,0(R2) SHIFT TO INDEX FORM 00509000
- LH R4,EXTVSEGS GET POSSIBLE VIRTUAL SEGTABLE LEN@VA09149 00509100
- LTR R4,R4 IS THE SEGTABLE VALID? @VA09149 00509150
- BNZ NOTZERO YES,CONTINUE @VA09149 00509200
- IC R4,EXTCR1 GET VIRTUAL SEGTABLE LEN CODE @VA09149 00509250
- CH R4,MAXSEGS(R9) IS THIS VALUE REASONABLE @VA09149 00509300
- BNH COMPSEG YES,USE IT @VA09149 00509350
- LH R4,MAXSEGS(R9) NO,USE POSSIBLE MAX @VA09149 00509400
- COMPSEG DS 0H @VA09149 00509450
- LA R4,1(0,R4) COMPUTE SEGTABLE LENGTH @VA09149 00509500
- SLL R4,6(0) IN BYTES............. @VA09149 00509550
- CR R1,R4 INDEX WITHIN TABLE LENGTH? @VA09149 00509600
- B SHTABLES @VA09149 00509650
- NOTZERO DS 0H @VA09149 00509700
- CH R1,EXTVSEGS INDEX WITHIN TABLE LENGTH ? 00510000
- SHTABLES DS 0H @VA09149 00510500
- LA R1,0(R1,R8) POINT TO ACTUAL ENTRY (VIRTUAL) 00511000
- BNL LRALNTH OOPS...TABLE LENGTH VIOLATION 00512000
- BAL R3,TRANS21 ACCESS THE VIRTUAL SEGTABLE ENTRY 00513000
- BC 2,LRADREX OOPS...GENERATED AN INVALID ADDRESS 00514000
- L R3,=X'0F000006' "MUST-BE-ZERO" BITS IN SEGTABLE 00515000
- L R4,0(0,R2) PICK UP VIRTUAL SEGTABLE ENTRY VALUE 00516000
- TM 3(R2),X'01' IS THE SEGMENT AVAILABLE ? @VA03696 00517000
- BNZ LRASEGM NO..CC = 1 FOR LRA @VA03696 00518000
- NR R3,R4 TEST FOR VALID ENTRY FORMAT 00519000
- BNZ LRAEXCP NOPE -- FORCE TRANS SPEC INTRPT 00520000
- N R4,=X'00FFFFF8' STRIP ASSORTED BITS FROM ADDRESS 00521000
- L R1,PAGEMSK(R9) PAGE NUMBER MASK FROM TABLE 00522000
- LH R3,PAGSHFT(R9) SHIFT COUNT FOR JUSTIFY 00523000
- NR R1,R7 EXTRACT PAGE NUMBER FROM ADDRESS 00524000
- SRL R1,0(R3) CONVERT TO INDEX FORM 00525000
- SLR R3,R3 SET TO CHECK LENGTH OF TABLE 00526000
- IC R3,0(0,R2) PAGE-TABLE-LENGTH-CODE FROM SEGTABLE 00527000
- SRL R3,4(0) ADJUST FROM MACHINE FORMAT 00528000
- LA R3,1(0,R3) ...TO INDEX LIMIT IN BYTES 00529000
- MH R3,PAGINCR(R9) ... 00530000
- CR R1,R3 ENTRY WITHIN THE DEFINED TABLE ? 00531000
- LA R1,0(R1,R4) POINT TO ACTUAL ENTRY 00532000
- BNL LRALNTH NOPE - LENGTH VIOLATION 00533000
- BAL R3,TRANS21 ACCESS THE PAGE-TABLE ENTRY ITSELF 00534000
- BC 2,LRADREX OOPS...GENERATED AN INVALID ADDRESS 00535000
- LR R3,R1 SAVE THE VIRTUAL ENTRY ADDRESS 00536000
- LA R15,LRAEXCP ERROR RETURN FOR INVALID FORMAT 00537000
- BAL R14,CHEKPTE VALIDATE AND EXTRACT ADDRESS FROM PTE 00538000
- BNZ LRAPAGE PAGE NOT AVAILABLE - CC = 2 00539000
- L R1,SEGMASK(R9) SETUP TO PROVIDE THE TRANSLATION 00540000
- O R1,PAGEMSK(R9) ... 00541000
- NR R1,R7 GR1 = ADDRESS MINUS PAGE-DISPLACEMENT 00542000
- XR R7,R1 GR7 = PAGE-DISPLACEMENT ONLY 00543000
- ALR R7,R6 ADD PAGE BASE ADDRESS TO DISPLACEMENT 00544000
- ST R7,SAVER2 PASS RESULT BACK TO DMKPRVLG 00545000
- EXIT , 00546000
- EJECT 00547000
- USING DMKVATRN,R12 00548000
- DMKVATRN DS 0D TRANSLATE THIRD-LEVEL TO FIRST-LEVEL 00549000
- SLR R0,R0 SET RETURN CODE ZERO RIGHT AWAY 00550000
- ENTER 00551000
- L R12,=A(DMKVAT) MODULE BASE ADDRESS 00552000
- USING DMKVAT,R12 00553000
- SPACE 00554000
- BAL R6,SETUPAT SETUP FOR TRANSLATE PROCESSING 00555000
- TM VMESTAT,VMBADCR0 IS THE C-REG 0 VALUE VALID ? 00556000
- BO GIVE012 NO -- GIVE TRANS SPEC INTERRUPT 00557000
- LR R7,R3 THIRD-LEVEL ADDRESS TO GR7 00558000
- SPACE 00559000
- L R5,SEGMASK(R9) SEGMENT NUMBER MASK 00560000
- LH R2,SEGSHFT(R9) SHIFT COUNT FOR JUSTIFY 00561000
- NR R5,R7 EXTRACT SEGMENT NUMBER FROM ADDRESS 00562000
- SRL R5,0(R2) JUSTIFY FOR USE AS TABLE INDEX 00563000
- CH R5,EXTVSEGS IS THE ENTRY WITHIN THE TABLE ? 00564000
- BNL GIVE010 NO -- SEGMENT EXCEPTION 00565000
- LA R1,0(R5,R8) ADD INDEX TO TABLE BASE ADDRESS (VIRT) 00566000
- BAL R3,TRANS21 ACCESS THE VIRTUAL SEGTABLE ENTRY 00567000
- BC 2,GIVE005 OOPS...GENERATED AN INVALID ADDRESS 00568000
- L R3,=X'0F000006' "MUST-BE-ZERO" BITS IN SEGTABLE 00569000
- L R4,0(0,R2) PICK UP VIRTUAL SEGTABLE ENTRY DATA 00570000
- STCM R4,B'1000',EXTCOPY SAVE PAGE-TABLE LENGTH CODE 00571000
- TM 3(R2),X'01' SEGMENT AVAILABLE ? @VA03696 00572000
- BNZ GIVE010 NO..REFLECT SEGMENT EXCEPTION... @VA03696 00573000
- NR R3,R4 TEST FOR VALID ENTRY FORMAT 00574000
- BNZ GIVE012 NO GOOD -- FORCE TRANS SPEC INTRPT 00575000
- N R4,=X'00FFFFF8' STRIP ASSORTED BITS FROM ADDRESS 00576000
- L R6,PAGEMSK(R9) PAGE NUMBER MASK FROM TABLE 00577000
- LH R3,PAGSHFT(R9) SHIFT COUNT FOR JUSTIFY 00578000
- NR R6,R7 EXTRACT PAGE NUMBER FROM ADDRESS 00579000
- SRL R6,0(R3) SHIFT FOR USE AS TABLE INDEX 00580000
- SLR R3,R3 SETUP TO CHECK FOR LENGTH VIOLATION 00581000
- IC R3,0(0,R2) PAGE TABLE LENGTH CODE FROM SEGTABLE 00582000
- SRL R3,4(0) ADJUST FROM MACHINE FORMAT 00583000
- LA R3,1(0,R3) ...TO INDEX LIMIT IN BYTES 00584000
- MH R3,PAGINCR(R9) ... 00585000
- CR R6,R3 IS THE ENTRY WITHIN THE DEFINED TABLE ? 00586000
- BNL GIVE011 NO -- PAGE EXCEPTION 00587000
- LA R1,0(R6,R4) ADD INDEX TO PAGE TABLE BASE ADDRESS 00588000
- BAL R3,TRANS21 ACCESS THE PAGE TABLE ENTRY 00589000
- BC 2,GIVE005 OOPS...GENERATED AN INVALID ADDRESS 00590000
- LR R4,R6 SAVE PAGE TABLE INDEX VALUE 00591000
- LA R15,GIVE012 ERROR RETURN FOR INVALID FORMAT 00592000
- BAL R14,CHEKPTE VALIDATE AND EXTRACT ADDRESS FROM PTE 00593000
- BNZ GIVE011 PAGE EXCEPTION 00594000
- L R1,SEGMASK(R9) SETUP FOR ACTUAL TRANSLATION 00595000
- O R1,PAGEMSK(R9) ... 00596000
- NR R1,R7 GR1 = ADDRESS MINUS PAGE DISPLACEMENT 00597000
- XR R7,R1 GR7 = PAGE DISPLACEMENT ALONE 00598000
- LR R1,R6 USE PAGE BASE ADDRESS FOR 'TRANS' 00599000
- BAL R3,TRANS21 GET VIRTUAL PAGE IN REAL STORAGE 00600000
- BC 2,GIVE005 OOPS...GENERATED AN INVALID ADDRESS 00601000
- ALR R7,R2 ADD REAL PAGE BASE TO DISPLACEMENT 00602000
- ST R7,SAVER2 PASS RESULT BACK TO CALLER 00603000
- BAL R8,SHADSET GO FILL IN SHADOW PAGE TABLE ENTRY 00604000
- SPACE 00605000
- TRNEXIT EQU * RETURN TO CALLER 00606000
- EXIT 00607000
- SPACE 2 00608000
- GIVE005 EQU * RETURN INTERRUPT INDICATOR X'005' 00609000
- LA R1,X'05' ADDRESSING EXCEPTION 00610000
- B GIVEINT 00611000
- GIVE010 EQU * RETURN INTERRUPT INDICATOR X'010' 00612000
- LA R1,X'10' SEGMENT-LEVEL EXCEPTION 00613000
- B GIVEINT 00614000
- GIVE011 EQU * RETURN INTERRUPT INDICATOR X'011' 00615000
- LA R1,X'11' PAGE-LEVEL EXCEPTION 00616000
- B GIVEINT 00617000
- GIVE012 EQU * RETURN INTERRUPT INDICATOR X'012' 00618000
- LA R1,X'12' TRANSLATION TABLES INVALID FORMAT 00619000
- GIVEINT EQU * INDICATE EXCEPTION RETURN 00620000
- LA R0,1(0) FORCE R0 POSITIVE 00621000
- ST R0,SAVER0 PASS BACK TO CALLER 00622000
- ST R1,SAVER1 ...AS WELL AS R1 VALUE 00623000
- B TRNEXIT RETURN STUFF ALREADY IN R1 00624000
- SPACE 2 00625000
- LRAEXCP LA R6,X'12' TRANSLATION SPECIFICATION EXCEPTION 00626000
- B FORCING GO FORCE A VIRTUAL INTERRUPT 00627000
- LRADREX LA R6,X'05' ADDRESSING EXCEPTION DURING TRANSLATION 00628000
- SPACE 00629000
- FORCING L R7,SAVER3 THIRD-LEVEL ADDRESS TO GR7 00630000
- SVC 16 RELEASE CALLER'S SAVE AREA 00631000
- B VATEXCP ...FORCE INTERRUPT THRU DMKPRGSM 00632000
- SPACE 00633000
- LRALNTH ST R1,SAVER2 PASS BACK ENTRY ADDRESS 00634000
- B GIVE012 ...AND SHOW TABLE LENGTH VIOLATION 00635000
- LRASEGM ST R1,SAVER2 PASS BACK SEGTABLE ENTRY ADDRESS 00636000
- B GIVE010 ...AND SHOW SEGMENT UNAVAILABLE 00637000
- LRAPAGE ST R3,SAVER2 PASS BACK PAGE TABLE ENTRY ADDRESS 00638000
- B GIVE011 ...AND SHOW PAGE UNAVAILABLE 00639000
- EJECT 00640000
- *---------------------------------------------------------------------* 00641000
- * SHADSET - FILL IN SHADOW TABLE ENTRY FOR NEW PAGE * 00642000
- *---------------------------------------------------------------------* 00643000
- SHADSET EQU * 00644000
- L R7,EXTSHCR1 SHADOW SEGTABLE ORIGIN REGISTER 00645000
- N R7,=X'00FFFFC0' REDUCE TO ACTUAL ADDRESS 00646000
- LA R6,0(R5,R7) POINT TO REFERENCED SEGTABLE ENTRY 00647000
- TM 3(R6),X'01' IS THE SEGMENT MARKED AVAILABLE ? 00648000
- BO SHADCHK NO -- GO SEE IF WE NEED A PAGE TABLE 00649000
- SHADPAG EQU * SET PAGE ADDRESS IN PAGE TABLE 00650000
- L R7,0(0,R6) PICK UP ACTUAL ENTRY DATA 00651000
- LA R7,0(R4,R7) ADD PAGE TABLE INDEX TO PAGE TABLE BASE 00652000
- SRL R2,8(0) ADJUST PAGE ADDRESS FOR PTE UPDATE 00653000
- LH R3,PTEINCR(R9) SIZE OF PAGE TABLE ENTRY 00654000
- N R3,F4 CONVERT TO INDEX 00655000
- EX 0,STORPTE(R3) STORE REAL ADDRESS INTO SHADOW PTE 00656000
- IC R1,EXTCOPY GET THE LENGTH 00657000
- STC R1,0(R6) STORE IN SHADOW SEG TABLE 00658000
- BR R8 RETURN TO CALLER 00659000
- SPACE 00660000
- STORPTE STH R2,0(0,R7) SHORT ENTRIES 00661000
- ST R2,0(0,R7) LONG ENTRIES 00662000
- SPACE 00663000
- SHADCHK EQU * TEST FOR INACTIVE SEGTABLE ENTRY 00664000
- BAL R14,ZAPPAGE INVALIDATE PAGE TABLE, IF ANY 00665000
- BNZ SHADPAG THERE IS ONE - FILL IT IN 00666000
- BAL R3,GETPAGT GET NEW SHADOW PAGE TABLE 00667000
- BAL R14,ZAPPAGE ...INVALIDATE IT 00668000
- B SHADPAG ...AND FILL IN ONE ENTRY 00669000
- EJECT 00670000
- *. 00671000
- * SUBROUTINE NAME - 00672000
- * 00673000
- * DMKVATEX 00674000
- * 00675000
- * FUNCTION - 00676000
- * 00677000
- * TO SERVICE PAGE OR SEGMENT EXCEPTIONS FOR VIRTUAL EXTENDED- 00678000
- * CONTROL MACHINES. 00679000
- * 00680000
- * ATTRIBUTES - 00681000
- * 00682000
- * REENTRANT, RESIDENT, INVOKED FROM DMKPRGIN OR DMKPRVLG 00683000
- * 00684000
- * ENTRY POINTS - 00685000
- * 00686000
- * DMKVATPX - SERVICE PAGING EXCEPTION FOR V370R 00687000
- * DMKVATSX - SERVICE SEGMENT EXCEPTION FOR V370R 00688000
- * DMKVATEX - SIMULATE PAGE OR SEGMENT EXCEPTION 00689000
- * DMKVATPF - SIMULATE A PSEUDO PAGE FAULT 00690000
- * 00691000
- * ENTRY CONDITIONS - 00692000
- * 00693000
- * GPR 12 = ADDRESS OF ENTRY POINT 00694000
- * GPR 11 = VMBLOK ADDRESS 00695000
- * VIRTUAL MACHINE IS KNOWN TO BE IN EXTENDED-CONTROL MODE 00696000
- * AND ADDRESS-TRANSLATION MODE. 00697000
- * 00698000
- * EXIT CONDITIONS - 00699000
- * 00700000
- * A PAGE HAS BEEN BROUGHT IN FOR THE VIRTUAL MACHINE, OR 00701000
- * A TRANSLATION INTERRUPT HAS BEEN REFLECTED. SHADOW TABLES 00702000
- * AND ECBLOK HAVE BEEN UPDATED. 00703000
- * 00704000
- * CALLS TO OTHER ROUTINES - 00705000
- * 00706000
- * DMKPTRAN - TO BRING IN A USER PAGE 00707000
- * DMKDSPCH - TO RE-DISPATCH VIRTUAL MACHINE 00708000
- * DMKPRGSM - TO SIMULATE A PROGRAM INTERRUPT FOR VM 00709000
- * 00710000
- * EXTERNAL REFERENCES - 00711000
- * 00712000
- * NONE 00713000
- * 00714000
- * TABLES / WORK AREAS - 00715000
- * 00716000
- * ECBLOK, VMBLOK, SHADOW TABLES 00717000
- * 00718000
- * REGISTER USAGE - 00719000
- * 00720000
- * GPR 12 = BASE REGISTER 00721000
- * GPR 11 = VMBLOK ADDRESSABILITY 00722000
- * GPR 10 = ECBLOK ADDRESSABILITY 00723000
- * GPR 9 = ARCHITECTURE CONTROL VARIABLE INDEX 00724000
- * GPR 7 = VIRTUAL-VIRTUAL ADDRESS REFERENCED 00725000
- * GPRS 0-6 = WORK REGISTERS 00726000
- * GPRS 13-15 = EXTERNAL LINKAGE REGISTERS 00727000
- * 00728000
- * OPERATION - 00729000
- * 00730000
- * THE VIRTUAL SEGMENT AND PAGE TABLES ARE EXAMINED TO 00731000
- * DETERMINE IF THE VIRTUAL MACHINE EXPECTS THE PAGE 00732000
- * AND/OR SEGMENT TO BE AVAILABLE. IF NOT, THE PAGING 00733000
- * INTERRUPT IS REFLECTED TO THE VIRTUAL MACHINE. 00734000
- * IF ANY TRANSLATION TABLE OR CONTROL REGISTER FORMAT 00735000
- * ERRORS ARE DETECTED, A TRANSLATION SPECIFICATION EXCEPTION 00736000
- * (PROGRAM INTERRUPT X'12') IS SIMULATED FOR THE VIRTUAL 00737000
- * MACHINE. 00738000
- * WHEN THE VIRTUAL MACHINE EXPECTS THE PAGE TO BE IN 00739000
- * CORE AND THERE ARE NO ERRORS IN THE TABLES, DMKPTRAN IS 00740000
- * CALLED TO BRING THE PAGE INTO REAL MEMORY. SHADOW PAGE 00741000
- * TABLES ARE UPDATED AND THE MACHINE IS RE-DISPATCHED VIA 00742000
- * GOTO DMKDSPCH. 00743000
- * IF PSEUDO PAGE FAULT HANDLING HAS BEEN REQUESTED AND THE 00744000
- * 2ND LEVEL MEMORY PAGE IS NOT AVAILABLE, A PSEUDO PAGE FAULT 00745000
- * IS REFLECTED TO THE VIRTUAL MACHINE VIA DMKPRGSM. WHEN THE 00746000
- * PAGE IS FINALLY AVAILABLE, A PAGE AVAILABLE INTERRUPT WILL 00747000
- * BE STACKED FOR DISPATCH, WHICH WILL PRESENT IT AT THE PROPER 00748000
- * TIME VIA A GOTO TO DMKVATEX. 00749000
- *. 00750000
- SPACE 2 00751000
- *---------------------------------------------------------------------* 00752000
- * SETUPEX - INITIAL SETUP FOR EXCEPTION HANDLING * 00753000
- * SETUPAT - INITIAL SETUP FOR TRANSLATION ROUTINES * 00754000
- *---------------------------------------------------------------------* 00755000
- SETUPEX EQU * SETUP FOR EXCEPTION ROUTINES 00756000
- SLR R13,R13 INDICATE ENTRY VIA 'GOTO' 00757000
- L R7,TREXADD EXCEPTION ADDRESS FROM PSA 00758000
- LOCK OBTAIN,TYPE=SYS,SPIN=NO TRY FOR SYS-LOCK @V407593 00758200
- BZ SETUPAT GOTIT, KEEP GOING @V407593 00758400
- BAL R14,STKDEFER DIDNT GET IT...STACK A DEFER REQ @V407593 00758600
- SETUPAT EQU * SETUP FOR TRANSLATE ROUTINES 00759000
- L R10,VMECEXT EXTENSION BLOCK ADDRESS 00760000
- L R8,EXTCR1 BASE ADDRESS OF VIRTUAL SEGTABLE 00761000
- N R8,=X'00FFFFC0' REDUCE TO ACTUAL ADDRESS 00762000
- LH R9,EXTARCH PICK UP ARCHITECTURE-CONTROL INDEX 00763000
- LTR R13,R13 WHERE DID WE COME FROM ? 00764000
- BCR 7,R6 TRANSLATE ENTRY - RETURN TO ENTRY POINT 00765000
- B SEGMENT EXCEPTION ENTRY - GET VIRTUAL SEGTABLE 00766000
- SPACE 00767000
- TRANS21 EQU * COMMON 'TRANS' FOR SPACE-SAVING 00768000
- TRANS 2,1,OPT=(BRING,DEFER) 00769000
- BR R3 00770000
- EJECT 00771000
- *---------------------------------------------------------------------* 00772000
- * DMKVATSX - INVOKED FROM DMKPRGIN WHEN A SEGMENT EXCEPTION * 00773000
- * IS RECEIVED FOR A VIRTUAL RELOCATE MACHINE. THE VM IS KNOWN * 00774000
- * TO BE IN EXTENDED-CONTROL MODE, TRANSLATE ON. * 00775000
- *---------------------------------------------------------------------* 00776000
- DMKVATSX EQU * 00777000
- USING *,R12 00778000
- L R12,=A(DMKVAT) MODULE BASE ADDRESS 00779000
- USING DMKVAT,R12 00780000
- SPACE 2 00781000
- BAL R6,SETUPEX SET UP FOR EXCEPTION PROCESSING 00782000
- TM VMCXSTAT,VMSTBYPS STBYPASS VR enabled? HRC068DK 00782100
- BO VATEXIT VATSX Reflect seg trans excp HRC068DK 00782200
- SPACE 00783000
- L R2,0(0,R2) ENTRY DATA FROM VIRTUAL SEGTABLE ENTRY 00784000
- STCM R2,B'1000',EXTCOPY SAVE PAGE-TABLE LENGTH CODE 00785000
- L R6,EXTSHCR1 SHADOW SEGTABLE ORIGIN 00786000
- LA R6,0(R5,R6) ADDRESSED SLOT IN SHADOW SEGTABLE 00787000
- BAL R14,ZAPPAGE INVALIDATE PAGE TABLE, IF ANY 00788000
- BNZ VATEXIT THERE IS ONE - ALL DONE 00789000
- BAL R3,GETPAGT ALLOCATE NEW SHADOW PAGE TABLE 00790000
- BAL R14,ZAPPAGE SET PAGE TABLE INVALID 00791000
- B VATEXIT ...AND RETURN VIA DMKDSPCH 00792000
- SPACE 2 00793000
- SEGMENT EQU * LOCATE VIRTUAL SEGTABLE ENTRY 00794000
- TM VMESTAT,VMBADCR0 VALID C-REG 0 VALUE ? 00795000
- BO TRNEXCP NO -- FORCE TRANSLATION EXCEPTION 00796000
- L R5,SEGMASK(R9) SEGMENT NUMBER MASK 00797000
- NR R5,R7 SEG.NO. OF EXCEPTION ADDR. 00798000
- LH R1,SEGSHFT(R9) SHIFT COUNT FOR JUSTIFY 00799000
- SRL R5,0(R1) JUSTIFY SEGMENT NUMBER FOR INDEXING 00800000
- CH R5,EXTVSEGS WITHIN SEGMENT TABLE? 00801000
- BNL SEGEXCP NO - SIMULATE EXCEPTION 00802000
- LA R1,0(R5,R8) ADDRESSED SLOT IN VIRTUAL SEGTABLE 00803000
- BAL R3,TRANS21 GET HIS VIRTUAL SEGTABLE IN CORE 00804000
- BC 2,ADREXCP OOPS... GENERATED AN INVALID ADDRESS 00805000
- TM 3(R2),X'01' SEGMENT AVAILABLE ? @VA03696 00806000
- BNZ SEGEXCP NO..REFLECT SEGMENT EXCEPTION @VA03696 00807000
- TM 0(R2),X'0F' TEST 'MUST-BE-ZERO' BITS IN SEGTABLE 00808000
- BNZ TRNEXCP TRANSLATION SPECIFICATION EXCEPTION 00809000
- TM 3(R2),X'06' ...DITTO 00810000
- BNZ TRNEXCP ...DITTO 00811000
- BR R6 RETURN - EVERYTHING LOOKS O.K. 00812000
- STKDEFER DC 0H'0' HERE TO FILL IN AND STACK @V407593 00812050
- AIF (NOT &AP).APCHK5 00812060
- L R15,VMDFTPNT DEFER BLOCK FOR SYNC. EVENTS @V407593 00812100
- USING CPEXBLOK,R15 WHICH LOOKS LIKE A CPEXBLOCK @V407593 00812150
- STM R0,R15,CPEXREGS SAVE CALLERS REGS. @V407593 00812200
- LA R0,DEFEREND GET RETURN POINT @V407593 00812250
- ST R0,CPEXADD FOR UNSTACK OF DEFER-BLOK @V407593 00812300
- DROP R15 @V407593 00812350
- LR R1,R15 R1 HAS DEFER-BLOK ADDR... @V407593 00812400
- CALL DMKSTKDE AND STACK IT @V407593 00812450
- GOTO DMKDSPRU GO RUN ANOTHER USER V4M0005 00812500
- * HERE ON UNSTACK OF DEFER BLOCK 00812550
- .APCHK5 ANOP 00812560
- DEFEREND BR R14 RETURN TO ORIGINAL CALLER @V407593 00812600
- EJECT 00813000
- *---------------------------------------------------------------------* 00814000
- * DMKVATPX - INVOKED FROM DMKPRGIN WHEN A PAGING EXCEPTION IS * 00815000
- * RECEIVED FOR A VIRTUAL RELOCATE MACHINE. THE VM IS KNOWN * 00816000
- * IS KNOWN TO BE IN EXTENDED-CONTROL MODE, TRANSLATE ON. * 00817000
- *---------------------------------------------------------------------* 00818000
- DMKVATPX EQU * PAGING EXCEPTION ON V370R 00819000
- USING *,R12 00820000
- L R12,=A(DMKVAT) MODULE BASE ADDRESS 00821000
- USING DMKVAT,R12 00822000
- SPACE 2 00823000
- BAL R6,SETUPEX DO VARIOUS SETUP OPERATIONS 00824000
- SPACE 00825000
- SLR R3,R3 00826000
- IC R3,0(0,R2) GET SEGMENT PAGE-TABLE LENGTH CODE 00827000
- SRL R3,4(0) ...RIGHT-JUSTIFIED 00828000
- LA R3,1(0,R3) BUMP ONE FOR ZERO BASE 00829000
- MH R3,PAGINCR(R9) COMPUTE LENGTH IN BYTES 00830000
- L R4,PAGEMSK(R9) PAGE-NUMBER MASK 00831000
- NR R4,R7 EXTRACT PAGE NUMBER FROM VIRTUAL ADDRESS 00832000
- LH R6,PAGSHFT(R9) SHIFT COUNT FOR JUSTIFY 00833000
- SRL R4,0(R6) CONVERT INTO PAGE-TABLE INDEX 00834000
- CR R4,R3 WITHIN VIRTUAL PAGE TABLE LENGTH ? 00835000
- BNL PAGEXCP NO -- SIMULATE PAGE EXCEPTION 00836000
- L R1,0(0,R2) PICK UP PAGE TABLE ADDRESS 00837000
- STCM R1,B'1000',EXTCOPY SAVE PAGE-TABLE LENGTH CODE 00838000
- N R1,=X'00FFFFF8' STRIP RANDOM GARBAGE FROM ENTRY 00839000
- LA R1,0(R4,R1) ACTUAL PAGE TABLE ENTRY ADDRESS 00840000
- BAL R3,TRANS21 GET PAGE TABLE DATA 00841000
- BC 2,ADREXCP OOPS.. GENERATED AN INVALID ADDRESS 00842000
- LA R15,TRNEXCP RETURN FOR TRANSLATION EXCEPTION 00843000
- BAL R14,CHEKPTE IS THE ENTRY VALID? 00844000
- BO PAGEXCP NO - REFLECT INTERRUPT 00845000
- LCTL C1,C1,VMSEG GET SECOND-LEVEL SEGTABLE ORIGIN @V2A3120 00846000
- LRA R2,0(0,R6) TRY FOR PAGE AVAILABLE @V2A3120 00847000
- BNZ CHEKSPF NOPE - MAYBE PSEUDO PAGE FAULT @V2A3120 00848000
- TM VMCXSTAT,VMSTBYPS STBYPASS VR enabled? HRC068DK 00848100
- BO VATEXIT VATPX Just reflect page faultHRC068DK 00848200
- BAL R8,SHADSET GO FILL IN SHADOW PAGE TABLE 00849000
- SPACE 2 00850000
- VATEXIT EQU * FAST DISPATCH EXIT 00851000
- NI VMPEND,X'FF'-VMPERPND 'PER' WILL COME IN AGAIN 00852000
- NI VMRSTAT,X'FF'-VMEXWAIT OUT OF EXECUTION WAIT 00853000
- GOTO DMKDSPCH RETURN TO DISPATCHER 00854000
- EJECT 00855000
- CHEKSPF EQU * TEST FOR 'PAGEX ON', I/O ENABLED @V2A3120 00856000
- LR R1,R6 SECOND-LEVEL ADDRESS TO GR1 @V2A3120 00857000
- LA R2,BRING+DEFER NORMAL PARMS FOR DMKPTRAN @V2A3120 00858000
- TM VMPSTAT,VMPAGEX PSEUDO PAGE FAULTS WANTED ? @V2A3120 00859000
- BZ GETPAGE NO -- JUST GET THE PAGE @V2A3120 00860000
- TM VMPSW,VMIOPND ENABLED FOR I/O INTERRUPTS ?@V2A3120 00861000
- BZ GETPAGE NO -- JUST GET THE PAGE @V2A3120 00862000
- LA R2,BRING DON'T WAIT FOR THE PAGE @V2A3120 00863000
- LA R3,PAGERES RETURN WHEN PAGE IS RESIDENT @V2A3120 00864000
- GETPAGE EQU * START THE PAGE MOVING @V2A3120 00865000
- CALL DMKPTRAN PARMS ARE SET IN GR2 @V2A3120 00866000
- BC 2,ADREXCP VIRTUAL ADDRESSING EXCEPTION @V2A3120 00867000
- BC 4,PSEUDOF PSEUDO PAGE FAULT REQUIRED @V2A3120 00868000
- BAL R8,SHADSET FILL IN THE SHADOW TABLES @V2A3120 00869000
- B VATEXIT RETURN TO THE DISPATCHER @V2A3120 00870000
- SPACE 2 00871000
- PSEUDOF EQU * REFLECT FIRST PSEUDO PAGE FAULT @V2A3120 00872000
- LR R7,R1 EXCEPTION ADDRESS TO GR7 @V2A3120 00873000
- LA R6,X'0014' PROGRAM INTERRUPT CODE X'0014' @V2A3120 00874000
- B VATEXCP SIMULATE VIRTUAL PROGRAM INTRPT @V2A3120 00875000
- EJECT 00876000
- *---------------------------------------------------------------------* 00877000
- * DMKVATPF - PSEUDO PAGE FAULT SUPPORT FOR ECMODE, NON- * 00878000
- * TRANSLATE VIRTUAL MACHINE OPERATION. * 00879000
- *---------------------------------------------------------------------* 00880000
- DMKVATPF DS 0D ENTRY VIA GOTO FROM DMKPRGIN @V2A3120 00881000
- USING DMKVATPF,R12 TEMPORARY ADDRESSABILITY @V2A3120 00882000
- L R12,=A(DMKVAT) MODULE BASE ADDRESSABILITY @V2A3120 00883000
- USING DMKVAT,R12 . . . @V2A3120 00884000
- SPACE 00885000
- L R3,TREXADD SAVE EXCEPTION ADDRESS @VA09054 00886020
- LOCK OBTAIN,TYPE=SYS,SPIN=NO TRY FOR SYS-LOCK @V407593 00886200
- BZ GOTLOCK GOT THE LOCK...KEEP GOING @V407593 00886400
- BAL R14,STKDEFER DIDNT GET IT...STACK A DEFER REQ.@V407593 00886600
- GOTLOCK DS 0H @V407593 00886800
- LR R1,R3 GET BACK ADDRESS OF PAGE @VA09054 00886820
- * EXCEPTION 00886840
- LA R3,PAGERES RETURN WHEN PAGE IS RESIDENT @V2A3120 00887000
- CALL DMKPTRAN,PARM=BRING @VA03696 00888000
- BC 2,ADREXCP VIRTUAL ADDRESSING EXCEPTION @V2A3120 00889000
- BC 4,PSEUDOF PSEUDO PAGE FAULT REQUIRED @V2A3120 00890000
- B VATEXIT PAGE WAS RECLAIMED - JUST EXIT @V2A3120 00891000
- SPACE 2 00892000
- PAGERES DS 0H ENTRY VIA CPEXBLOK FROM DMKPTRAN @V2A3120 00893000
- LR R7,R1 VIRTUAL ADDRESS NOW AVAILABLE @V2A3120 00894000
- ICM R7,8,=X'80' FLAG FOR PAGE NOW AVAILABLE @V2A3120 00895000
- LA R0,PGBSIZE GET STORAGE FOR A PAGE FAULT @V2A3135 00896000
- CALL DMKFREE STACK BLOCK @V2A3135 00897000
- USING PGBLOK,R1 ADDRESSABILITY @V2A3135 00898000
- ST R7,PGADDR SAVE EXCEPTION ADDRESS @V2A3135 00899000
- L R13,VMPGPNT AND STACK PAGE AVAILABLE @V2A3135 00900000
- ST R1,VMPGPNT INTERRUPTS @V2A3135 00901000
- ST R13,PGPNT LIFO @V2A3135 00902000
- OI VMPEND,VMPGPND FLAG PSEUDO PAGE FAULT PENDING @V2A3135 00903000
- GOTO DMKDSPCH ALLOW DISPATCH TO UNSTACK @V2A3135 00904000
- EJECT 00905000
- PAGEXCP EQU * REFLECT PAGING EXCEPTION TO VM 00906000
- LA R6,X'11' PROGRAM INTERRUPT CODE 00907000
- B VATEXCP REFLECT INTERRUPT 00908000
- SEGEXCP EQU * REFLECT SEGMENT EXCEPTION TO VM 00909000
- LA R6,X'10' PROGRAM INTERRUPT CODE 00910000
- B VATEXCP REFLECT INTERRUPT 00911000
- TRNEXCP EQU * TRANSLATION EXCEPTION 00912000
- L R1,VMPSW+4 GET FAILING INSTRUCTION @VA09815 00912100
- LH R2,VMPRGIL ILC IN BYTES @VA09815 00912200
- ALR R1,R2 @VA09815 00912300
- ST R1,VMPSW+4 UPDATE .... @VA09815 00912400
- LA R6,X'12' INTERRUPT CODE 00913000
- B VATEXCP REFLECT INTERRUPT 00914000
- ADREXCP EQU * REFLECT ADDRESSING EXCEPTION TO VM 00915000
- L R1,VMPSW+4 GET FAILING INSTRUCTION @VA08017 00916100
- LH R2,VMPRGIL ILC IN BYTES @VA08017 00916300
- ALR R1,R2 (PSW ADDRESS MAY BE NEG - ILC) @VA08017 00916500
- ST R1,VMPSW+4 UPDATE.... @VA08017 00916700
- LA R6,X'05' ADDRESSING EXCEPTION CODE @VA08017 00916900
- STH R6,INTPR RESET INTERRUPT CODE @VA08017 00917100
- B VATPRGI REFLECT INTERRUPT @VA08017 00917300
- SPACE 2 00918000
- DMKVATEX EQU * ENTRY TO SIMULATE EXCEPTION 00919000
- USING *,R12 00920000
- L R12,=A(DMKVAT) MODULE BASE ADDRESS 00921000
- USING DMKVAT,R12 00922000
- LR R6,R1 INTERRUPT CODE IN R1 00923000
- LR R7,R3 EXCEPTION ADDRESS IN R3 00924000
- SPACE 2 00925000
- VATEXCP EQU * TRANSLATION EXCEPTION OF SOME VARIETY 00926000
- SLR R1,R1 GET USER'S PAGE ZERO 00927000
- BAL R3,TRANS21 GET USER'S PAGE ZERO 00928000
- ST R7,TREXADD-PSA(,R2) EXCEPTION ADDRESS 00929000
- VATPRGI EQU * SIMULATE ADDRESSING EXCEPTION @V2A3120 00930000
- LR R0,R6 INTERRUPT CODE INTO R0 00937000
- GOTO DMKPRGSM GO SIMULATE PROGRAM INTERRUPT 00938000
- EJECT 00939000
- *---------------------------------------------------------------------* 00940000
- * CHEKPTE - DETERMINE IF PAGE TABLE ENTRY IS VALID * 00941000
- * ------------------------------- * 00942000
- * GPR 15= ERROR RETURN IF TABLE FORMAT ERROR * 00943000
- * GPR 9 = INDEX TO ARCHITECTURE TABLES * 00944000
- * GPR 2 = REAL ADDRESS OF PAGE TABLE ENTRY * 00945000
- * ON EXIT: * 00946000
- * GPR 6 = VIRTUAL PAGE ADDRESS FROM PAGE TABLE ENTRY * 00947000
- * CONDITION CODE SET BY 'TM' FOR VALID/INVALID * 00948000
- *---------------------------------------------------------------------* 00949000
- CHEKPTE EQU * CHECK FOR VALID PAGE ENTRY 00950000
- LH R1,PTEINCR(R9) TABLE INCREMENT 00951000
- N R1,F4 CONVERT TO INDEX 00952000
- EX 0,LOADPTE(R1) GET ENTRY INTO R1 00953000
- L R6,=F'-8' CONVENIENT MASK 00954000
- NR R6,R1 STRIP LOW-ORDER BITS FROM VALUE 00955000
- SLL R6,8(0) JUSTIFY FOR ACTUAL ADDRESS 00956000
- LA R6,0(,R6) ENSURE HI-ORDER BYTE IS ZERO @VA04371 00956500
- AH R2,PTEINCR(R9) COMPUTE ADDRESS FOR TEST OF BIT 00957000
- BCTR R2,0 ... 00958000
- IC R1,PINVBIT(R9) PAGE INVALID BIT.. @VA03696 00959000
- EX R1,TESTPTE PAGE AVAILABLE ? @VA03696 00960000
- BNZR R14 NO..RETURN WITH CC SET @VA03696 00961000
- IC R1,ZEROBIT(R9) MUST-BE-ZERO BITS.. @VA03696 00962000
- EX R1,TESTPTE PTE FORMAT ERROR ? @VA03696 00963000
- BNZR R15 REFLECT EXCEPTION.. @VA03696 00964000
- BR R14 PTE OK..CC SET @VA03696 00965000
- LOADPTE LH R1,0(0,R2) SHORT PAGE TABLE ENTRIES 00966000
- L R1,0(0,R2) LONG PAGE TABLE ENTRIES 00967000
- TESTPTE TM 0(R2),*-* CHECK INVALID BIT 00968000
- EJECT 00969000
- ARCHTECT DS 0F ARCHITECTURE VARIABLES TABLE @V3M4038 00969600
- DMKVATAT EQU * EXTERNAL REFERENCE TO TABLES @V3M4038 00970200
- *---------------------------------------------------------------------* 00971000
- * ARCHTECT IS INDEXED WITH C-REG 0, BYTE 1 VALUE AS FOLLOWS: * 00972000
- * * 00973000
- * INDEX X'40' - SMALL PAGE, SMALL SEG, HALFWORD ENTRIES * 00974000
- * X'50' - SMALL PAGE, LARGE SEG, HALFWORD ENTRIES * 00975000
- * X'60' - SMALL PAGE, SMALL SEG, FULLWORD ENTRIES * 00976000
- * X'70' - SMALL PAGE, LARGE SEG, FULLWORD ENTRIES * 00977000
- * X'80' - LARGE PAGE, SMALL SEG, HALFWORD ENTRIES * 00978000
- * X'90' - LARGE PAGE, LARGE SEG, HALFWORD ENTRIES * 00979000
- * X'A0' - LARGE PAGE, SMALL SEG, FULLWORD ENTRIES * 00980000
- * X'B0' - LARGE PAGE, LARGE SEG, FULLWORD ENTRIES * 00981000
- * INDEXES ARE ADJUSTED TO A BASE OF X'40' = X'00' * 00982000
- *---------------------------------------------------------------------* 00983000
- PAGEMSK DC X'0000F800' PAGE NUMBER MASK 00984000
- SEGMASK DC X'01FF0000' SEGMENT NUMBER MASK @VA10408 00985500
- PINVBIT DC X'04' PAGE-INVALID BIT IN PTE 00986000
- ZEROBIT DC X'02' "MUST BE ZERO" BITS IN PTE 00987000
- PAGSHFT DC H'10' SHIFT COUNT FOR PAGE-NO. JUSTIFY 00988000
- SEGSHFT DC H'14' SHIFT COUNT FOR SEG-NO. JUSTIFY 00989000
- PTEINCR DC H'2' HALFWORD PAGE TABLE ENTRIES 00990000
- MAXSEGS DC H'15' MAXIMUM SEGMENT-TABLE LENGTH CODE 00991000
- PAGTLEN DC H'64' MAXIMUM PAGE-TABLE LENGTH (BYTES) 00992000
- PAGINCR DC H'4' INCREMENT OF LENGTH FOR SEGTABLE CODE 00993000
- DS 5H RESERVED FOR FUTURE USE 00994000
- SPACE 00995000
- CODE50 DC X'000FF800' 00996000
- DC X'00F00000' 00997000
- DC X'04',X'02' 00998000
- DC H'10',H'18',H'2' 00999000
- DC H'0',H'1024',H'64' 01000000
- DS 5H 01001000
- SPACE 01002000
- CODE60 DC X'0000F800' 01003000
- DC X'0FFF0000' 01004000
- DC X'04',X'02' 01005000
- DC H'09',H'14',H'4' 01006000
- DC H'255',H'128',H'8' 01007000
- DS 5H 01008000
- SPACE 01009000
- CODE70 DC X'000FF800' 01010000
- DC X'7FF00000' 01011000
- DC X'04',X'02' 01012000
- DC H'09',H'18',H'4' 01013000
- DC H'127',H'2048',H'128' 01014000
- DS 5H 01015000
- SPACE 01016000
- CODE80 DC X'0000F000' 01017000
- DC X'00FF0000' 01018000
- DC X'08',X'06' 01019000
- DC H'11',H'14',H'2' 01020000
- DC H'15',H'32',H'2' 01021000
- DS 5H 01022000
- EJECT 01023000
- CODE90 DC X'000FF000' 01024000
- DC X'00F00000' 01025000
- DC X'08',X'06' 01026000
- DC H'11',H'18',H'2' 01027000
- DC H'0',H'512',H'32' 01028000
- DS 5H 01029000
- SPACE 01030000
- CODEA0 DC X'0000F000' 01031000
- DC X'0FFF0000' 01032000
- DC X'08',X'06' 01033000
- DC H'10',H'14',H'4' 01034000
- DC H'255',H'64',H'4' 01035000
- DS 5H 01036000
- SPACE 01037000
- CODEB0 DC X'000FF000' 01038000
- DC X'7FF00000' 01039000
- DC X'08',X'06' 01040000
- DC H'10',H'18',H'4' 01041000
- DC H'127',H'1024',H'64' 01042000
- DS 5H 01043000
- SPACE 3 01044000
- SEGSIZE DC X'00010000' @VA06156 01044100
- CLRBITS DC X'00FFFFF8' MASK TO CLEAR FLAG BITS - STE @V4M0233 01044200
- LTORG 01045000
- EJECT 01046000
- COPY EQU 01047000
- COPY VMBLOK 01048000
- COPY MICBLOK HRC068DK 01048050
- COPY CORE @VA06156 01048100
- COPY PGBLOK @V2A3135 01049000
- EJECT 01050000
- PSA 01051000
- COPY SAVE 01052000
- END DMKVAT 01053000
ibm/vm370-lib/cp/dmkvat.assemble_src.txt ยท Last modified: 2023/08/06 13:37 by Site Administrator