.TITLE RELTIM.MAC 81D22A 20-APR-81/22-APR-81. ; AUTHOR: N. A. BOURGEOIS, JR. ; SYSTEMS ENGINEERING DIVISION 1738 ; SANDIA NATIONAL LABORATORIES ; PO BOX 5800 ; ALBUQUERQUE, NM 87185 ; 505-844-8088 ; AV 244-8088 ; ; THIS SOFTWARE IS ISSUED BY SANDIA NATIONAL LABORATORIES, ; OPERATED FOR THE UNITED STATES DEPARTMENT OF ENERGY BY ; SANDIA CORPORATION. ; ; NOTICE ; ; THIS SOFTWARE WAS SPONSORED BY THE UNITED STATES ; GOVERNMENT. NEITHER THE UNITED STATES GOVERNMENT NOR ; THE UNITED STATES DEPARTMENT OF ENERGY, NOR ANY OF THEIR ; EMPLOYEES, NOR ANY OF THEIR CONTRACTORS, SUBCONTRACTORS, ; OR THEIR EMPLOYEES MAKES ANY WARRANTY, EXPRESS OR ; IMPLIED, OR ASSUMES ANY LEGAL LIABILITY OR ; RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS OR ; USEFULNESS OF ANY INFORMATION, APPARATUS, PRODUCT OR ; PROCESS DISCLOSED, OR REPRESENTS THAT ITS USE WOULD NOT ; INFRINGE PRIVATELY OWNED RIGHTS. ; ; THIS WORK WAS SPONSORED AND FUNDED BY: ; ; HEADQUARTERS, ESD / OCB / STOP 36 ; HANSCOM AIR FORCE BASE, MA 01731 ; ; .SBTTL **************** .SBTTL * * .SBTTL * UNCLASSIFIED * .SBTTL * * .SBTTL **************** .SBTTL DESCRIPTION 20-APR-81/. ;THESE TWELVE REAL-TIME PROGRAM SUPPORT ROUTINES ARE CALLABLE AS ;SUBROUTINES. EIGHT OF THEM ARE ALSO CALLABLE AS FUNCTIONS. THIS ;MODULE IS A PART OF THE LIBRARY OF FORTRAN CALLABLE TSX/TSX-PLUS ;EMT ROUTINES. THE CODE IS REENTRANT. ;CONVERT A VIRTUAL ADDRESS TO A PHYSICAL ADDRESS. ; ;CALLING SEQUENCE: ; ; CALL CNVAPA ( IVADR , IPADR [ , IERR ] ) ; ;WHERE: IVADR IS THE VIRTUAL ADDRESS THAT IS TO BE CONVERTED. ; ; IPADR IS THE TWO ELEMENT BUFFER INTO WHICH THE PHYSICAL ; ADDRESS IS RETURNED. ; ; IERR IS UNDEFINED OR AS FOLLOWS: ; 0 REAL-TIME SUPPORT IS NOT AVAILABLE OR JOB ; DOES NOT HAVE OPERATOR PRIVILEGE. ;PEEK AT THE I/O PAGE. ; ;CALLING SEQUENCE: ; ; CALL IPEKIO ( IADR , IRET [ , IERR ] ) ; ;WHERE: IADR IS THE ADDRESS OF THE WORD IN THE I/O PAGE TO BE ; ACCESSED. ; ; IRET IS THE VALUE RETURNED FROM THE I/O PAGE. ; ; IERR IS UNDEFINED OR AS FOLLOWS: ; 0 REAL-TIME SUPPORT IS NOT AVAILABLE OR JOB ; DOES NOT HAVE OPERATOR PRIVILEGE. ;POKE INTO THE I/O PAGE. ; ;CALLING SEQUENCES: ; ; CALL IPOKIO ( IADR , IVAL , [ ,IERR ] ) ; OR ; IERR = IPOKIO ( IADR , IVAL ) ; ;WHERE: IADR IS THE ADDRESS OF THE WORD IN THE I/O PAGE TO BE ; ACCESSED. ; ; IVAL IS THE VALUE TO BE DEPOSITED INTO THE I/O PAGE. ; ; IERR IS UNDEFINED OR AS FOLLOWS: ; 0 REAL-TIME SUPPORT IS NOT AVAILABLE OR JOB ; DOES NOT HAVE OPERATOR PRIVILEGE. ;BIT-SET A VALUE INTO THE I/O PAGE. ; ;CALLING SEQUENCES: ; ; CALL IBISIO ( IADR , IVAL [ , IERR ] ) ; OR ; IERR = IBISIO ( IADR , IVAL ) ; ;WHERE: IADR IS THE ADDRESS OF THE WORD IN THE I/O PAGE TO BE ; ACCESSED. ; ; IVAL IS THE VALUE TO BE BIT-SET INTO THE I/O PAGE. ; ; IERR IS UNDEFINED OR AS FOLLOWS: ; 0 REAL-TIME SUPPORT IS NOT AVAILABLE OR JOB ; DOES NOT HAVE OPERATOR PRIVILEGE. ;BIT-CLEAR A VALUE IN THE I/O PAGE. ; ;CALLING SEQUENCES: ; ; CALL IBICIO ( IADR , IVAL [ , IERR ] ) ; OR ; IERR = IBICIO ( IADR , IVAL ) ; ;WHERE: IADR IS THE ADDRESS OF THE WORD IN THE I/O PAGE TO BE ; ACCESSED. ; ; IVAL IS THE VALUE TO BE BIT-CLEARED IN THE I/O PAGE. ; ; IERR IS UNDEFINED OR AS FOLLOWS: ; 0 REAL-TIME SUPPORT IS NOT AVAILABLE OR JOB ; DOES NOT HAVE OPERATOR PRIVILEGE. ;MAP THE I/O PAGE INTO THE PROGRAM SPACE. ; ;CALLING SEQUENCE: ; ; CALL MPIOPS ;MAP THE SIMULATED RMON INTO THE PROGRAM SPACE. ; ; CALL MARMPS ;LOCK A JOB INTO LOW MEMORY. ; ;CALLING SEQUENCES: ; ; CALL LKLOMY [ IERR ] ; OR ; IERR = LKLOMY ; ; IERR IS UNDEFINED OR AS FOLLOWS: ; 0 REAL-TIME SUPPORT IS NOT AVAILABLE OR JOB ; DOES NOT HAVE OPERATOR PRIVILEGE. ;LOCK A JOB INTO ANY MEMORY. ; ;CALLING SEQUENCES: ; ; CALL LKANMY [ IERR ] ; OR ; IERR = LKANMY ; ; IERR IS UNDEFINED OR AS FOLLOWS: ; 0 REAL-TIME SUPPORT IS NOT AVAILABLE OR JOB ; DOES NOT HAVE OPERATOR PRIVILEGE. ;UNLOCK A JOB FROM MEMORY. ; ;CALLING SEQUENCES: ; ; CALL IUNLKM [ IERR ] ; OR ; IERR = IUNLKM ; ; IERR IS UNDEFINED OR AS FOLLOWS: ; 0 REAL-TIME SUPPORT IS NOT AVAILABLE OR JOB ; DOES NOT HAVE OPERATOR PRIVILEGE. ;CONNECT AN INTERRUPT TO A COMPLETION ROUTINE. ; ;CALLING SEQUENCES: ; ; EXTERNAL CPLRTN ; CALL ICNINT ( IVEC , CPLRTN , IPRI [ , IERR ] ) ; OR ; EXTERNAL CPLRTN ; IERR = ICNINT ( IVEC , CPLRTN , IPRI ) ; ;WHERE: IVEC IS THE ADDRESS OF THE INTERRUPT VECTOR. ; ; CPLRTN IS THE NAME OF THE COMPLETION ROUTINE. ; ; IPRI IS THE EXECUTION PRIORITY FOR THE COMPLETION ROUTINE. ; ; IERR IS UNDEFINED OR AS FOLLOWS: ; 0 REAL-TIME SUPPORT IS NOT AVAILABLE OR JOB ; DOES NOT HAVE OPERATOR PRIVILEGE. ; 1 MAXIMUM NUMBER OF INTERRUPTS ARE ALREADY ; IN USE. ; 2 SOME OTHER JOB IS ALREADY CONNECTED TO THE ; INTERRUPT. ;RELEASE AN INTERRUPT CONNECTION. ; ;CALLING SEQUENCES: ; ; CALL IRLINT [ IERR ] ; OR ; IERR = IRLINT ; ; IERR IS UNDEFINED OR AS FOLLOWS: ; 0 REAL-TIME SUPPORT IS NOT AVAILABLE OR JOB ; DOES NOT HAVE OPERATOR PRIVILEGE. .SBTTL DIRECTIVES 20-APR-81/22-APR-81. .IDENT \81D22A\ ;TELL LINKER OUR VERSION .PSECT TSXLIB .SBTTL ASSIGNMENTS 20-APR-81/. ERRBYT =52 ;ERROR CODE LOCATION .SBTTL ENTRY POINTS 20-APR-81/22-APR-81. ;CONVERT A VIRTUAL ADDRESS TO A PHYSICAL ADDRESS. ; CNVAPA::MOV #140 ,R1 ;EMT CODE CLR R2 ;EMT ID JSR PC ,DOIT ;CONVERT THE ADDRESS RTS PC ;PEEK AT THE I/O PAGE. ; IPEKIO::MOV #140 ,R1 ;EMT CODE MOV #1 ,R2 ;EMT ID JSR PC ,DOIT1 ;PEEK AT THE PAGE RTS PC ;POKE INTO THE I/O PAGE. ; IPOKIO::MOV #140 ,R1 ;EMT CODE MOV #2 ,R2 ;EMT ID JSR PC ,DOIT2 ;POKE INTO THE PAGE RTS PC ;BIT-SET A VALUE INTO THE I/O PAGE. ; IBISIO::MOV #140 ,R1 ;EMT CODE MOV #3 ,R2 ;EMT ID JSR PC ,DOIT2 ;BIT-SET THE VALUE RTS PC ;BIT-CLEAR A VALUE IN THE I/O PAGE. ; IBICIO::MOV #140 ,R1 ;EMT CODE MOV #4 ,R2 ;EMT ID JSR PC ,DOIT2 ;BIT-CLEAR THE VALUE RTS PC ;MAP THE I/O PAGE INTO THE PROGRAM SPACE. ; MPIOPS::MOV #140 ,R1 ;EMT CODE MOV #5 ,R2 ;EMT ID JSR PC ,DOIT3 ;MAP THE PAGE RTS PC ;MAP THE SIMULATED RMON INTO THE PROGRAM SPACE. ; MPRMPS::MOV #140 ,R1 ;EMT CODE MOV #6 ,R2 ;EMT ID JSR PC ,DOIT3 ;MAP THE RMON RTS PC ;LOCK A JOB INTO LOW MEMORY. ; LKLOMY::MOV #140 ,R1 ;EMT CODE MOV #7 ,R2 ;EMT ID JSR PC ,DOIT3 ;LOCK THE JOB RTS PC ;LOCK A JOB INTO ANY MEMORY. ; LKANMY::MOV #140 ,R1 ;EMT CODE MOV #13 ,R2 ;EMT ID JSR PC ,DOIT3 ;LOCK THE JOB RTS PC ;UNLOCK A JOB FROM MEMORY. ; IUNLKM::MOV #140 ,R1 ;EMT CODE MOV #10 ,R2 ;EMT ID JSR PC ,DOIT3 ;UNLOCK THE JOB RTS PC ;CONNECT AN INTERRUPT TO A COMPLETION ROUTINE. ; ICNINT::MOV #140 ,R1 ;EMT CODE MOV #11 ,R2 ;EMT ID JSR PC ,DOIT4 ;CONNECT THE INTERRUPT RTS PC ;RELEASE AN INTERRUPT CONNECTION. ; IRLINT::MOV #140 ,R1 ;EMT CODE MOV #12 ,R2 ;EMT ID JSR PC ,DOIT3 ;RELEASE THE CONNECTION RTS PC .SBTTL SUPPORTING SUBROUTINES 20-APR-81/. DOIT: MOV 4(R5) ,-(SP) ;SA FOR AGGUMENT 2 MOV @2(R5) ,-(SP) ;PASS ARGUMENT 1 MOV R2 ,-(SP) ;LO BYTE = EMT ID MOV SP ,R0 ;EMT POINTER MOVB R1 ,1(R0) ;HI BYTE = EMT CODE EMT 375 ;LET TSX DO IT BCC 1$ ; IF NO ERROR CLR R0 ; IF ERROR MOVB @#ERRBYT,R0 ; GET CODE 1$: CMPB #3 ,(R5) ;SUBROUTINE ERROR RETURN? BNE 2$ ; NO MOV R0 ,@6(R5) ; YES 2$: ADD #6 ,SP ;FIX THE STACK POINTER RTS PC DOIT1: MOV @2(R5) ,-(SP) ;PASS ARGUMENT 1 MOV R2 ,-(SP) ;LO BYTE = EMT ID MOV SP ,R0 ;EMT POINTER MOVB R1 ,1(R0) ;HI BYTE = EMT CODE EMT 375 ;LET TSX DO IT BCC 1$ ; IF NO ERROR CLR R1 ; IF ERROR MOVB @#ERRBYT,R1 ; GET CODE 1$: MOV R0 ,@4(R5) ;RETURN ARGUMENT 2 CMPB #3 ,(R5) ;SUBROUTINE ERROR RETURN? BNE 2$ ; NO MOV R1 ,@6(R5) ; YES 2$: CMP (SP)+ ,(SP)+ ;FIX THE STACK POINTER RTS PC DOIT2: MOV @4(R5) ,-(SP) ;PASS ARGUMENT 2 MOV @2(R5) ,-(SP) ;PASS ARGUMENT 1 MOV R2 ,-(SP) ;LO BYTE = EMT ID MOV SP ,R0 ;EMT POINTER MOVB R1 ,1(R0) ;HI BYTE = EMT CODE EMT 375 ;LET TSX DO IT BCC 1$ ; IF NO ERROR CLR R0 ; IF ERROR MOVB @#ERRBYT,R0 ; GET CODE 1$: CMPB #3 ,(R5) ;SUBROUTINE ERROR RETURN? BNE 2$ ; NO MOV R0 ,@6(R5) ; YES 2$: ADD #6 ,SP ;FIX THE STACK POINTER RTS PC DOIT3: MOV R2 ,-(SP) ;LO BYTE = EMT ID MOV SP ,R0 ;EMT POINTER MOVB R1 ,1(R0) ;HI BYTE = EMT CODE EMT 375 ;LET TSX DO IT BCC 1$ ; IF NO ERROR CLR R0 ; IF ERROR MOVB @#ERRBYT,R0 ; GET CODE 1$: CMPB #1 ,(R5) ;SUBROUTINE ERROR RETURN? BNE 2$ ; NO MOV R0 ,@2(R5) ; YES 2$: TST (SP)+ ;FIX THE STACK POINTER RTS PC DOIT4: MOV @6(R5) ,-(SP) ;PASS ARGUMENT 3 MOV 4(R5) ,-(SP) ;PASS ARGUMENT 2 MOV @2(R5) ,-(SP) ;PASS ARGUMENT 1 MOV R2 ,-(SP) ;LO BYTE = EMT ID MOV SP ,R0 ;EMT POINTER MOVB R1 ,1(R0) ;HI BYTE = EMT CODE EMT 375 ;LET TSX DO IT BCC 1$ ; IF NO ERROR CLR R0 ; IF ERROR MOVB @#ERRBYT,R0 ; GET CODE 1$: CMPB #4 ,(R5) ;SUBROUTINE ERROR RETURN? BNE 2$ ; NO MOV R0 ,@10(R5) ; YES 2$: ADD #10 ,SP ;FIX THE STACK POINTER RTS PC .SBTTL EDIT RECORD 20-APR-81/22-APR-81. ;22-APR-81 ORIGINAL CREATION. .SBTTL END 20-APR-81/. .END