.TITLE BELL ; ; PURPOSE: TO RING THE BEL ON TI: 1,2,3,4,5 TIMES A SECOND OR EVERY 10 SEC ; ; CALLING PROCEDURE: CALL BELL(MOD) WITH MOD = 0: EVERY 10 SEC ; 1: 1/SEC ; 2: 2/SEC ; 3: 3/SEC ; 4: 4/SEC ; 5: 5/SEC ; ; TO STOP THIS TERRIBLE NOISE TYPE ^G ; ; ; REMARKS: THE TERMINAL IS ATTACHED TO THIS TASK ; ; ^C WILL REACH MCR AND NOT THIS TASK ; .GLOBL BELL .MCALL MRKT$S,QIO$S,WTSE$S,ASTX$S,SETF$S,CLEF$S,CMKT$S ; ; ; ; BELL: MOV @2(R5),R5 ASL R5 ;MUL BY 2 CLEF$S #10. BGE B1 ;IF GE BRANCH CLR R5 ;IF LT MAKE IT 0 (EVERY 10 SEC A BLEEP) BR B2 ;AND BRANCH B1: CMP #10.,R5 ;IF PARAMETER < 5.... BGE B2 ;BRANCH MOV #10.,R5 ;IF NOT....MAKE IT 5 (A BLEEP 5/SEC) B2: MRKT$S #4,TAB(R5),#1,#MRKAST ;SET UP MARK TIME QIO$S #IO.ATA!TF.XCC,#5,#3,,,,<#INAST> ;ATTACH TERMINAL (^C TO MCR) WTSE$S #10. ;WAIT UNTIL ^G WAS TYPED QIO$S #IO.DET,#5 RTS PC ;AND RETURN ; ; MRKAST: QIO$S #IO.WAL,#5,#2,,#IO,,<#B,#1,#0> ;DO A BLEEP WTSE$S #2 ;AND WAIT FOR IT TO COMPLETE ;IF YOU DON'T WAIT, AND ^C IS TYPED SO ;MCR IS WAITING, THE OUTPUT (ALL BELLS) ;WILL BE QUEUED AND THE POOL WILL BE ;FILLED RATHER QUICKLY!!!!! MRKT$S #4,TAB(R5),#1,#MRKAST ;SET UP NEXT MARK TIME ASTEX: TST (SP)+ ;CORRECT SP ASTX$S ;AND EXIT AST ; ; INAST: BICB #200,(SP) ;GET RID OF PARITY BIT (IF ANY) CMPB B,(SP) ;^G???? BNE ASTEX ;IF NOT, EXIT AST CMKT$S #4 SETF$S #10. ;IF IT WAS ^G, SET EVENT FLAG #10. BR ASTEX ;SO THE PROGRAM WILL EXIT AS SOON AS ;THIS AST IS SERVED ; ; TAB: .WORD 500. ;500 CLOCK TICKS .WORD 50. ;50.... .WORD 25. ;ETC .WORD 17. .WORD 13. .WORD 10. IO: .WORD 0,0 ;IO STATUS BLOCK B: .BYTE 7,0 ;OUTPUT BUFFER ; ; .END