.TITLE VRWVMF - MAP VM BUFFER (READ/WRITE) (FORTRAN INTERFACE) .SBTTL VRWVMF - TITLE PAGE .PSECT VMX$$$,RO,I .IDENT /V01.01/ .ENABL LC ; ; ************************************************************************ ; * ; THIS PROGRAM IS PROVIDED ON AN "AS IS" BASIS ONLY. DIGITAL EQUIPMENT * ; COMPUTER USER'S SOCIETY, DIGITAL EQUIPMENT CORPORATION, MONSANTO, AND * ; THE AUTHOR DISCLAIM ALL WARRANTIES ON THE PROGRAM, INCLUDING WITHOUT * ; LIMITATION, ALL IMPLIED WARRANTIES OF MERCHANTABLITY AND FITNESS. * ; * ; FULL PERMISSION AND CONSENT IS HEREBY GIVEN TO DECUS AND TO THE DECUS * ; SPECIAL INTEREST GROUPS TO REPRODUCE, DISTRIBUTE, AND PUBLISH AND * ; PERMIT OTHERS TO REPRODUCE IN WHOLE OR IN PART, IN ANY FORM AND * ; WITHOUT RESTRICTION, THIS PROGRAM AND ANY INFORMATION RELATING TO IT. * ; * ; ************************************************************************ ; ; MAP VM BUFFER (READ/WRITE) (FORTRAN INTERFACE) ; ; VERSION: V01.01 ; ; AUTHOR: R.W. STAMERJOHN MAPC 02-NOV-81 ; ; MODIFICATION HISTORY: ; ; V01.01 RWS 02-NOV-81 INITIAL VERSION ; .SBTTL VRWVMF - DECLARATIONS .DSABL GBL .DSABL CRF ; ; MACRO LIBRARY CALLS: ; .MCALL CALLR ;Call subroutine and return ; ; GLOBAL DECLARATIONS: ; .GLOBL VRWVMF ;Module entry ; ; GLOBAL REFERENCES: ; ; VM subroutines. ; .GLOBL CHK$VF ;Check for legal arguments .GLOBL VRW$VM ;Map virtual buffer (read/write) .ENABL CRF .SBTTL VRWVMF * MAP VM BUFFER (READ/WRITE) (FORTRAN INTERFACE) ; ;+ ; This routine is a Fortran callable subroutine to map a virtual address ; to a specified user address. It supported, the virtual buffer is mapped ; the the user address using PLAS directives. Otherwise, a fatal error is ; declared. The mapping is read/write ; ; INPUT: ; ; Call by: CALL VRWVMF (VM_address,size,buffer) ; ; VM_address = Virtual buffer address (I*4) ; size = Size of buffer to map (I*2) ; buffer = User buffer address (I*2) ; ; OUTPUT: ; ; The virtual buffer at "VM_address" is mapped to "buffer". ; The "size" parameter is the buffer length in bytes. ; ; If any argument is not specified or not exactly three arguments ; are listed, fatal Fortran errors are declared. ; ; REGISTERS: ; ; Uses: R0-R5 Saves: None Stack: 1 words ;- VRWVMF:: ;Ref label CALL CHK$VF ;Check for legal arguments .BYTE 3,3 ; Must be only three MOV (R5)+,R4 ;Get address of virtual address MOV (R4)+,R1 ;Get virtual address (low) MOV (R4)+,R0 ;Get virtual address (high) MOV @(R5)+,R3 ;Get size of buffer MOV (R5),R4 ;Get user buffer address CALLR VRW$VM ;Map the virtual buffer and return .END