.TITLE REAST - RECEIVE AST SUPPORT .IDENT /31MAY7/ ;10:35:00, EM ; .ENTRY REAST - RECEIVE AST SUPPORT ;+ ; R E A S T ; ; PURPOSE: THIS ROUTINE ALLOWS THE FORTRAN PROGRAMMER ; TO EXECUTE A SUBROUTINE AT AST LEVEL WHENEVER ; DATA IS QUEUED TO THE TASK. THE SUBROUTINE ; SHOULD DO A RECEIVE-DATA OR SIMILAR DIRECTIVE. ; ; ; INTERFACE: CALLING SEQUENCE: (FORTRAN-CALLABLE SUBROUTINE) ; EXTERNAL SUBNAM ; CALL REAST (SUBNAM) ; TO DECLARE THE RECEIVE AST ; CALL CANREA ; TO CANCEL THE RECEIVE AST ; ; INPUT: SUBNAM = (ADDRESS): NAME OF SUBROUTINE ; TO BE EXECUTED WHENEVER DATA IS SENT. ; EXECUTED BY A JSR PC,SUBNAM INSTRUCTION. ; ; LANGUAGE: MACRO-11 ; ; RESTRICTIONS: SEPARATE VERSIONS ARE REQUIRED FOR FPU AND ; NON-FPU MACHINES. ; ; REFERENCES: SEE THE RSX-11 EXECUTIVE MANUAL FOR MORE ; INFORMATION ON ASTS, AND NOTE THAT THE ; EXECUTION OF THE AST ROUTINE MAY BE ; INHIBITED OR ENABLED AS NEEDED. ;- ; REVISIONS: ; 13-FEB-76 RK WRITTEN ; 15-MAR-76 RK ADDED CODE TO SAVE AND RESTORE ; FLOATING POINT REGISTERS WITHIN AST. ; 29-MAR-76 MK ADDED CONDITIONALS FOR FPU/NON-FPU. ; TOOK OUT F4P PSECTS. ; 02-SEP-76 SS REMOVE DEPENDENCE ON NON-STANDARD MACROS. ; 31-MAY-77 EM UPDATED TO CONFORM TO STANDARDS. ; ; 2. PROGRAM DETAIL ; ; 2.1 MACROS-- ; .MCALL SRDA$S,ASTX$S ; ; 2.2 SYMBOL DEFINITION-- ; ;**** DEFINE FPU FOR FPU VERSION ;**** LEAVE FPU UNDEFINED FOR NON-FPU VERSION FPU=0 ; F0=%0 F1=%1 F2=%2 F3=%3 F4=%4 F5=%5 ; ; 2.3 STORAGE ALLOCATION-- ; SUBADD: .BLKW 1 ; ; 2.4 PROGRAM FLOW-- ; ; ENTRY REAST -- SPECIFY RECEIVE AST ; REAST:: MOV 2(R5),SUBADD ;SAVE SUBROUTINE ADDRESS SRDA$S #RAST ;SPECIFY THE LOCAL ENTRY POINT RETURN ; ; RECEIVE AST ENTRY POINT - SAVE REGISTERS AND CALL SUBNAM ; RAST: .IF DF,FPU STFPS -(SP) ;SAVE FLOATING POINT STATUS SETD ;SET MODE DOUBLE STD F0,-(SP) ;SAVE F0 STD F1,-(SP) ;SAVE F1 STD F2,-(SP) ;SAVE F2 STD F3,-(SP) ;SAVE F3 LDD F4,F0 ;MOVE F4 TO F0 .IFTF MOV R0,-(SP) MOV R1,-(SP) MOV R2,-(SP) .IFT LDD F5,F1 ;MOVE F5 TO F1 .IFTF MOV R3,-(SP) MOV R4,-(SP) MOV R5,-(SP) .IFT STD F0,-(SP) ;SAVE F4 STD F1,-(SP) ;SAVE F5 .ENDC CALL @SUBADD ; ; SUBROUTINE HAS RETURNED, RESTORE REGISTERS AND EXIT THE ; AST ; .IF DF,FPU SETD ;SET MODE TO DOUBLE LDD (SP)+,F1 ;GET F5 LDD (SP)+,F0 ;GET F4 STD F1,F5 ;RESTORE F5 .IFTF MOV (SP)+,R5 MOV (SP)+,R4 MOV (SP)+,R3 .IFT STD F0,F4 ;RESTORE F4 .IFTF MOV (SP)+,R2 MOV (SP)+,R1 MOV (SP)+,R0 .IFT LDD (SP)+,F3 ;RESTORE F3 LDD (SP)+,F2 ;RESTORE F2 LDD (SP)+,F1 ;RESTORE F1 LDD (SP)+,F0 ;RESTORE F0 LDFPS (SP)+ .ENDC ASTX$S ; ; ENTRY CANREA - CANCEL THE RECEIVE AST ; CANREA:: SRDA$S ;THIS CANCELS IT RETURN .END