.TITLE IVIRT ; ; ROUTINE TO ALLOW A FORTRAN PROGRAM TO PASS A VIRTUAL ADDRESS AS AN ; ARGUMENT TO A SUBROUTINE. IT WAS DESIGNED TO BE USED IN CONJUNCTION ; WITH PLAS (ALLOWS PLAS MAPPING VALUES TO BE PASSED AS A ARRAY). ; IN THE EXAMPLE ; ; CALL SUB(IVIRT("40000)) ; ; THE SUBROUTINE SUB WILL USE THE CONTENTS OF VIRTUAL ADDRESS 40000 OCTAL ; AS THE LOCATION OF THE IT'S ARGUMENT. ; ; NOTE: THIS ROUTINE WILL WORK WITH FORTRAN 4-PLUS ONLY AS WILL ALTER THE ; CODE GENERATED FOR SUBROUTINE LINKAGE. ; ; WRITTEN NOVEMBER 1977 R B FRENCH THE BOEING COMPANY ; IVIRT:: MOV (SP),R0 ;GET RETURN ADDRESS CMP 2(R0),#10667 ;IS IT MOV SP,LIST ? BEQ 10$ ;BRANCH IF SO CMP 2(R0),#10067 ;ALREADY CHANGED TO MOV R0,LIST ? BEQ RET ;THEN JUST RETURN MOV #-1,R0 ;SOMETHINGS WRONG - MAKE ARGUMENT NULL BR RET ;AND JUST RETURN 10$: MOV #10067,2(R0) ;CHANGE TO MOV R0,LIST MOV @2(R5),R0 ;AND SET VIRTUAL ADDRESS IN R0 RET: RTS PC .END