.TITLE DELAY ;----------------------------------------------------------------------; ; SUBROUTINE: DELAY ; ;----------------------------------------------------------------------; ; LANGUAGE: VAX-11 MACRO ASSEMBLY LANGUAGE ; ; SYSTEM: VAX-11/780 ; ; MOSTEK CORPORATION ; ; COMPUTER AIDS TO DESIGN DIVISION ; ; 1215 WEST CROSBY ROAD ; ; CARROLLTON, TEXAS 75006 ; ; (214) 323-8813 ; ;----------------------------------------------------------------------; ; PROGRAMMER: KEVIN KLUGHART ; ;----------------------------------------------------------------------; ; DATE: 05-21-81 @ 13:00 CDST ; ;----------------------------------------------------------------------; ; PURPOSE: THIS SUBROUTINE DELAYS THE EXECUTION OF A ; ; PROCESS A SPECIFIED AMOUNT OF TIME. THIS ; ; EXECUTION DELAY IS COMPUTED AS FOLLOWS: ; ; ; ; ; ; 1. IF (TIME_DELAY <= 0) THEN THE PASSED ; ; PARAMETER REPRESENTS THE NUMBER OF 100- ; ; NANOSECOND UNITS TO ELAPSE BEFORE ; ; PROGRAM EXECUTION IS RESUMED. ; ; ; ; 2. IF (TIME_DELAY > 0) THEN THE PASSED ; ; PARAMETER REPRESENTS THE NUMBER OF ; ; MILLISECOND UNITS TO ELAPSE BEFORE ; ; PROGRAM EXECUTION IS RESUMED. ; ;----------------------------------------------------------------------; ; NOTES: THIS SUBROUTINE ASSUMES THAT THE SYSTEM CLOCK ; ; HAS UNIT INCREMENTS OF 100-NANOSECONDS, WHICH ; ; IS CONSISTENT WITH THE VAX-11/780 SYSTEM ; ; TIME QUADWORD FORMAT STANDARD. ; ;----------------------------------------------------------------------; ; REFERENCES: VAX-11/780 SYSTEM SERVICES REFERENCE ; ;----------------------------------------------------------------------; .PAGE .SBTTL DATA: SYSTEM DELTA-TIME QUADWORDS ;----------------------------------------------------------------------; ; ; ; DATA AREA ; ; ; ;----------------------------------------------------------------------; ; DEFINE THE SYSTEM DELTA-TIME QUADWORD DATA AREAS ; ;----------------------------------------------------------------------; .PSECT DELAY$DATA,QUAD .ALIGN QUAD DELTIM: .QUAD 0 ; NORMAL PROCESS LEVEL DELTA-TIME QUADWORD DELAST: .QUAD 0 ; AST LEVEL DELTA-TIME QUADWORD .PAGE .SBTTL CODE: DELAY PROCESS EXECUTION ;----------------------------------------------------------------------; ; ; ; DELAY: DELAY PROCESS EXECUTION THE SPECIFIED TIME INTERVAL ; ; ; ;----------------------------------------------------------------------; ; THIS ENTRYPOINT IS INTENDED FOR EXECUTION IN NORMAL PROCESS ; ; MODE. THIS ENTRYPOINT IS NOT REENTRANT. ; ;----------------------------------------------------------------------; .PSECT DELAY$CODE .ENTRY DELAY,^M MOVL @4(AP),R0 ; GET FIRST PARAMETER (TIME_DELAY) BGEQ MS_DLY ; IF >= 0, USE MILLISECOND DELAY MOVL R0,DELTIM ; CONVERT TO SYSTEM TIME (QUAD) MOVL #-1,DELTIM+4 ; INITIALIZE DELTA-TIME LONGWORD JMP HIBNML ; DELAY SET: NOW EXECUTE WAIT MS_DLY: EMUL R0,#-10000,#0,DELTIM ; CONVERT DELAY TO MILLISECONDS HIBNML: $SCHDWK_S ,,DELTIM, ; SCHEDULE PROCESS WAKE-UP (DELAY) $HIBER_S ; HIBERNATE UNTIL AWOKEN BRB EXIT .PAGE .SBTTL CODE: AST LEVEL DELAY PROCESS EXECUTION ;----------------------------------------------------------------------; ; ; ; DELAY_AST: DELAY AST EXECUTION THE SPECIFIED TIME INTERVAL ; ; ; ;----------------------------------------------------------------------; ; THIS ENTRYPOINT IS INTENDED FOR EXECUTION AT AST LEVEL. ; ; THIS ENTRYPOINT IS NOT REENTRANT. ; ;----------------------------------------------------------------------; .ENTRY DELAY_AST,^M MOVL @4(AP),R0 ; GET FIRST PARAMETER (TIME_DELAY) BGEQ MS_AST ; IF >= 0, USE MILLISECOND DELAY MOVL R0,DELAST ; CONVERT TO SYSTEM TIME (QUAD) MOVL #-1,DELAST+4 ; INITIALIZE DELTA-TIME LONGWORD JMP HIBAST ; DELAY SET: NOW EXECUTE WAIT MS_AST: EMUL R0,#-10000,#0,DELAST ; CONVERT DELAY TO MILLISECONDS HIBAST: $SCHDWK_S ,,DELAST, ; SCHEDULE PROCESS WAKE-UP (DELAY) $HIBER_S ; HIBERNATE UNTIL AWOKEN ;----------------------------------------------------------------------; ; END OF SUBROUTINE DELAY ; ;----------------------------------------------------------------------; EXIT: RET .END