TITLE 'IEAVTRV -- TRANSLATE REAL TO VIRTUAL' 00010002 * /* START OF SPECIFICATIONS **** 00050002 * 00100002 *01* MODULE-NAME = IEAVTRV 00150002 * 00200002 *02* CSECT-NAME = IEAVTRV 00250002 * 00300002 *01* DESCRIPTIVE-NAME = TRANSLATE REAL TO VIRTUAL 00350002 * 00400002 *01* COPYRIGHT = NONE 00450002 * 00500002 *01* STATUS = CHANGE LEVEL 000 00550002 * 00600002 *01* FUNCTION = THE TRANSLATE REAL TO VIRTUAL MODULE IS GIVEN A REAL 00650002 * ADDRESS AS INPUT. IT RETURNS THE CORRESPONDING VIRTUAL ADDRESS 00700002 * AND ASID PROVIDED THAT THE REAL STORAGE PAGE IS ASSIGNED TO A 00750002 * PAGE OF VIRTUAL SPACE. 00800002 * 00850002 *02* OPERATION = THIS MODULE DOES NOT HAVE ANY WORK AREA AND DOES 00900002 * NOT CREATE ITS OWN RECOVERY ENVIRONMENT, RELYING ON THE 00950002 * CALLERS RECOVERY ENVIRONMENT. THE PHILOSPHY BEING THAT THIS 01000002 * MODULE ACTS ONLY AS A SUBROUTINE OF ITS CALLER. 01050002 * 01100002 *01* NOTES = THE CODE IN THIS MODULE IS CLOSE KNIT DIFFICULT TO 01150002 * FOLLOW. WHEN CHANGING THIS MODULE, EXTREME CARE MUST BE TAKEN. 01200002 * 01250002 *02* DEPENDENCIES = THIS MODULE IS INTENDED FOR USE ONLY IN VS2 01300002 * RELEASE 2 AND WILL RUN ON ANY VS2 RELEASE2 HARDWARE/SOFTWARE 01350002 * CONFIGURATION. 01400002 * 01450002 *03* CHARACTER-CODE-DEPENDENCIES = NONE 01500002 * 01550002 *02* RESTRICTIONS = NONE 01600002 * 01650002 *02* REGISTER-CONVENTIONS = ONLY REGISTERS 0,1,14,15 ARE USED 01700002 * 01750002 *02* PATCH-LABEL = NONE 01800002 * 01850002 *01* MODULE-TYPE = PROCEDURE 01900002 * 01950002 *02* PROCESSOR = ASSEMBLER-370R 02000002 * 02050002 *02* MODULE-SIZE = 140 BYTES 02100002 * 02150002 *02* ATTRIBUTES = NUCLEUS,REENTERABLE,REFRESHABLE 02200002 * 02250002 *01* ENTRY-POINT = IEAVTRV 02300002 * 02350002 *02* PURPOSE = IEAVTRV IS ENTERED FOR THE PURPOSE OF CONVERTING 02400002 * HARDWARE-SUPPLIED REAL ADDRESSES BACK TO THEIR VIRTUAL 02450002 * COUNTERPARTS SO THAT THOSE AREAS CAN BE ADDRESSED WHILE 02500002 * DYNAMIC ADDRESS TRANSLATION IS IN EFFECT. 02550002 * 02600002 *02* LINKAGE = BALR 02650002 * 02700002 *02* INPUT = 02750002 * R0: IRRELEVANT 02800002 * R1: THE REAL ADDRESS TO BE TRANSLATED 02850002 * R2-R13: IRRELEVANT 02900002 * R14: RETURN ADDRESS 02950002 * R15: IRRELEVANT 03000002 * 03050002 *02* OUTPUT = NO STREAM OR LIST OUTPUT 03100002 * 03150002 *02* REGISTERS-SAVED = NONE 03200002 * 03250002 *01* EXIT-NORMAL = 03300002 * 03350002 *02* CONDITIONS = A TRUE MAPPING OF THE REAL ADDRESS TO A VIRTUAL 03400002 * ADDRESS EXISTED. 03450002 * 03500002 *02* OUTPUT = 03550002 * R0: THE HALFWORD ASID OF THE VIRTUAL ADDR, RIGHT JUSTIFIED 03600002 * R1: THE VIRTUAL ADDRESS CORRESPONDING TO THE INPUT REAL ADDR 03650002 * R2-R14: UNCHANGED 03700002 * R15: RETURN CODE 03750002 * 03800002 *02* RETURN-CODES = 0 - SUCCESSFUL TRANSLATION 03850002 * 03900002 *01* EXIT-ERROR = ENDFOUR 03950002 * 04000002 *02* CONDITIONS = A TRUE MAPPING FROM REAL TO VIRTUAL DOES NOT 04050002 * EXIST 04100002 * 04150002 *02* OUTPUT = 04200002 * R0-R1: UNPREDICTABLE 04250002 * R2-R14: UNCHANGED 04300002 * R15: RETURN CODE 04350002 * 04400002 *02* RETURN-CODES = 4 - UNSUCCESSFUL TRANSLATION 04450002 * 04500002 *01* EXTERNAL-REFERENCES = 04550002 * 04600002 *02* ROUTINES = NONE 04650002 * 04700002 *02* DATA-AREAS = NONE 04750002 * 04800002 *02* CONTROL-BLOCKS = 04850002 * CVT R 04900002 * PVT R 04950002 * PFTE R 05000002 * 05050002 *01* TABLES = NONE 05100002 * 05150002 *01* MACROS = 05200002 * EXECUTABLE MACRO 05250002 * MODID 05300002 * MAPPING MACROS 05350002 * CVT 05400002 * IHAPVT 05450002 * IHAPFTE 05500002 * 05550002 *02* SERIALIZATION = NO LOCKS OR ENQ RESOURCES ARE OBTAINED OR 05600002 * RELEASED 05650002 * 05700002 *01* CHANGE-ACTIVITY = Y02752 05750002 *A082000 VS06306 05770002 * 05800002 *01* MESSAGES = NONE 05850002 * 05900002 *01* ABEND-CODES = NONE 05950002 * 06000002 **** END OF SPECIFICATIONS ***/ 06050002 EJECT 06100002 *********************************************************************** 06150002 * * 06200002 * THIS PAGE CONTAINS THE CSECT STATEMENT FOR THE MODULE AND THE * 06250002 * MODULE IDENTIFICATION INFORMATION IN ADDITION TO SETTING UP * 06300002 * INITIAL ADDRESSABILITY FOR THE MODULE. * 06350002 * * 06400002 *********************************************************************** 06450002 SPACE 2 06500002 IEAVTRV CSECT TRANSLATE REAL TO VIRTUAL 06550002 *A065500-999999 Y02752 06600002 BALR R15,0 SET UP ADDRESSABILITY 06650002 USING *,R15 TELL ASSEMBLER 06700002 MODID 06750002 DS 0H GET BACK TO HALF WORD BOUNDARY 06800002 ENTRY IEAPTRV VS2 REL 1 NAME EXTERNALLY KNOWN 06850002 IEAPTRV EQU IEAVTRV FOR VS2 REL 1 COMPATIBILITY 06900002 EJECT 06950002 *********************************************************************** 07000002 * * 07050002 * EQUATES FOR PARAMETERZATION OF PROGRAM * 07100002 * * 07150002 *********************************************************************** 07200002 SPACE 2 07250002 R0 EQU 0 REGISTER 0 DEFINITION 07300002 R1 EQU 1 REGISTER 1 DEFINITION 07350002 R14 EQU 14 REGISTER 14 DEFINITION 07400002 R15 EQU 15 REGISTER 15 DEFINITION 07450002 BADRETCD EQU 4 ERROR RETURN CODE 4 07500002 MIDBYTES EQU 6 MIDDLE 2 BYTES OF A REGISTER 07550002 LOW2BYTE EQU 3 LOW 2 BYTES OF A REGISTER 07600002 EJECT 07650002 *********************************************************************** 07700002 * * 07750002 * THIS SECTION OF CODE CHECKS THE INPUT ADDRESS FOR RESIDENCY * 07800002 * IN THE NUCLEUS AND IF THAT IS THE CASE RETURNS THE INPUT ADDRESS * 07850002 * WITHOUT TRANSLATING IT BECAUSE THERE ARE NO PFTE'S FOR THE * 07900002 * NUCLEUS AS IT IS MAPPED VIRTUAL = REAL. OTHERWISE, PROCESSING * 07950002 * DROPS DOWN TO THE NEXT PAGE. * 08000002 * * 08050002 *********************************************************************** 08100002 SPACE 2 08150002 LA R0,0(R1) SAVE INPUT PARAMETER IN REG 0 08200002 * R0 CAN'T BE USED FOR ADDRESSING 08220002 * THIS ALSO CLEARS HIGH-ORDER BYTE 08240002 * @VS06306 08260002 L R1,CVTPTR ACQUIRE ADDR OF CVT 08300002 USING CVT,R1 TELL ASSEMBLER CVT ADDRESSABLE 08350002 L R1,CVTPVTP ACQUIRE ADDR OF PVT 08400002 USING PVT,R1 TELL ASSEMBLER PVT ADDRESSABLE 08450002 CLM R0,MIDBYTES,PVTFPFN COMPARE SEQMENT AND PAGE 08500002 BNL NOTINNUC ADDR NOT IN NUCLEUS 08550002 LR R1,R0 RETURN INPUT ADDR FOR NUCLEUS 08600002 L R0,FOXES PUT SPECIAL ASID IN R0 08650002 DROP R15 TELL ASSEM LOSING ADDRESSABILITY 08700002 SR R15,R15 SET NORMAL COMPLETION CODE 08750002 BR R14 RETURN TO CALLER 08800002 EJECT 08850002 *********************************************************************** 08900002 * * 08950002 * THIS SECTION FIRST ASSURES THAT THE NON-NUCLEUS REAL ADDRESS * 09000002 * RESIDES WITHIN THE DEFINED REAL STORAGE AND THEN PROCEDES * 09050002 * TO CONVERT THE REAL ADDRESS TO A VIRTUAL ADDRESS PROVIDING A * 09100002 * VALID MAPPING EXISTS. A VALID MAPPING EXISTS IF THE PFTE INDEXED * 09150002 * BY THE REAL ADDRESS 1) IS NOT ON THE AVAILABLE Q, 2) IS NOT * 09200002 * MARKED OFFLINE, AND 3) IS NOT A VAM IRREGULAR PAGE. IF ALL OF * 09250002 * THESE CRITERIA ARE MET, THE VBN AND ASID IN THE PFTE ARE USED TO * 09300002 * GENERATE THE CORRECT OUTPUT VALUES IN REGISTER 0 AND 1. * 09350002 * OTHERWISE, A RETURN CODE OF 4 IS RETURNED TO THE CALLER. * 09400002 * * 09450002 *********************************************************************** 09500002 SPACE 2 09550002 NOTINNUC LR R15,R0 MAKE COPY OF INPUT TO WORK WITH 09600002 SRL R15,12 CHOP OFF DISPLACMENT-LOW 12 BITS 09650002 SLL R15,4 LEFT JUSTIFY 12 BITS TO HALFWORD 09700002 SPACE 09750002 *********************************************************************** 09800002 * THE FOLLOWING CLM WILL CHECK TO SEE IF THE REAL ADDR * 09850002 * IS WITHIN THE BOUNDS OF REAL MEMORY. BECAUSE THERE IS * 09900002 * NO ADDRESSABILITY NOW THE CONDITION CODE WILL BE LEFT * 09950002 * SET UNTIL ADDRESSABILITY IS ACQUIRED AND A CONDITIONAL * 10000002 * BRANCH MAY BE EXECUTED. * 10050002 *********************************************************************** 10100002 SPACE 10150002 CLM R15,LOW2BYTE,PVTLPFN IS REAL ADDRESS BEYOND STORAGE? 10200002 L R1,PVTPFTP ACQUIRE START OF PFT'S 10250002 DROP R1 LOST ADDRESSABILITY TO PVT 10300002 LA R15,0(R1,R15) CALCULATE ADDR OF PFTE 10350002 USING PFTE,R15 TELL ASSEMBLER PFTE ADDRESSABLE 10400002 BALR R1,R0 SET UP ADDRESSABILITY 10450002 USING *,R1 TELL ASSEMBLER WE'RE ADDRESSABLE 10500002 BH ENDFOUR CLM INDICATED THAT ADDRESS WAS *10550002 OUT OF REAL STORAGE 10600002 CLI PFTQNDX,PFTAFQN IS FRAME AVAILABLE? 10650002 BE ENDFOUR YES... ERROR RETURN 10700002 TM PFTFLAG2,PFTIRRG+PFTOFFLN IS FRAME OFFLINE OR A VAM 10750002 * IRREGULAR FRAME? 10800002 BNZ ENDFOUR YES... ERROR RETURN 10850002 DROP R1 TELL ASSEM LOSING ADDRESSABILITY 10900002 SPACE 10950002 * THE REAL ADDRESS IS CONVERTED TO A VIRTUAL ADDRESS AT THIS POINT 11000002 SPACE 11050002 LR R1,R0 MOVE INPUT TO WORK REGISTER 11100002 L R0,PFTPGID GET ASID AND VBN OF PAGE 11150002 SRL R0,4 REMOVE 4 ZEROS WHICH LEFT *11200002 JUSTIFY VBN 11250002 SLL R1,20 MOVE DISPLACEMENT NEXT TO VBN 11300002 SRDL R0,12 MOVE ASID TO LOW ORDER HALFWORD *11350002 AND VBN WITH DISP TO HIGH 24BITS 11400002 SRL R1,8 NOW RIGHT JUSTIFY VIRT ADDR 11450002 SR R15,R15 SET NORMAL RETURN CODE 11500002 BR R14 RETURN TO CALLER 11550002 SPACE 11600002 * ERROR EXITS ARE SET UP AT THIS POINT 11650002 SPACE 11700002 ENDFOUR LA R15,BADRETCD SET ERROR RETURN CODE 11750002 BR R14 RETURN TO CALLER 11800002 EJECT 11850002 *********************************************************************** 11900002 * * 11950002 * DATA AREA FOR THIS MODULE * 12000002 * * 12050002 *********************************************************************** 12100002 SPACE 2 12150002 DS 0F ALIGN DATA TO FULLWORD 12200002 FOXES DC X'0000FFFF' ASID FOR NUCLEUS 12250002 EJECT 12300002 *********************************************************************** 12350002 * * 12400002 * CONTROL BLOCK MAPPING MACROS USED BY THIS MODULE * 12450002 * * 12500002 *********************************************************************** 12550002 SPACE 2 12600002 CVT DSECT=YES,LIST=NO 12650002 EJECT 12700002 IHAPVT 12750002 EJECT 12800002 IHAPFTE 12850002 EJECT 12900002 */*IEAVTRV: CHART */ 12950002 */* HEADER 12956002 */* SECTION: 3.1.15.9.17.4 IEAV 12962002 */*TRV MODULE DESCRIPTION 12968002 */* CONTR: J.W. MEHL 12974002 */* 09/27/73 12980002 */* MGR: J.E.NICHOLS 12986002 */* PAGE # */ 12992002 */*IEAVTRV: E ENTRY TO IEAPTRV */ 13250002 */* D (YES,%A1,NO,) IS THE INPUT ADDR IN THE NUCLEUS? */ 13300002 */* P DERIVE THE PFT SLOT NUMBER FROM THE INPUT ADDRESS */ 13350002 */* D (YES,,NO,%A2) IS THE REAL ADDR WITHIN REAL 13400002 */*MEMORY? */ 13450002 */* P LOCATE THE PFTE FOR THE INPUT FRAME */ 13500002 */* D (YES,%A2,NO,) IS THE FRAME AVAILABLE? */ 13550002 */* D (YES,%A2,NO,) IS THE FRAME AN IRREGULAR VAM FRAME? */ 13600002 */* D (YES,%A2,NO,) IS THE FRAME MARKED OFFLINE? */ 13650002 */*%A4: P DERIVE THE VIRTUAL ADDRESS FOR THE GIVEN REAL ADDRESS 13700002 */**/ 13750002 */* P GET THE ASID FROM THE PFTE */ 13800002 */* R RETURN TO CALLER R.C.=0 */ 13850002 */*%A1: P OUTPUT ADDRESS=INPUT ADDRESS ASID=X'FFFF' */ 13900002 */* R RETURN TO CALLER R.C.=0 */ 13950002 */*%A2: R RETURN TO CALLER R.C.=4 */ 14000002 */*IEAVTRV: END */ 14050002 END 14100002