.TITLE SPEED - SPEEDOMETER PROGRAM FOR RSX ;******************************************************************* ; ; AUTHOR: ROGER JENKINS ; WYCLIFFE BIBLE TRANSLATORS ; HUNTINGTON BEACH, CA 92647 ; (714)536-9346 ; ; DATE: 5/1/82 ; ; THIS PROGRAM WILL RUN AT LOW PRIORITY INCREMENTING A COUNTER. ; AT ONE SECOND INTERVALS, A MARK TIME TIMER WILL FIRE, TRAPPING ; TO AN AST SECTION OF THIS PROGRAM WHICH WILL PRINT A ROW OF ASTERISKS ; WHOSE LENGTH IS BASED ON HOW HIGH THE FIRST SECTION HAS COUNTED. ; THE PROGRAM IS STOPPED BY TYPING ANY CHARACTER. ; ;******************************************************************** .MCALL MRKT$S,ASTX$S,EXIT$S,QIO$S,CMKT$S,QIOW$S ;******************************************************************* ; ; DATA AREA ; ; NOTE!! THE DELAY FACTOR BELOW (WAITER) WILL HAVE TO BE ADJUSTED ; FOR YOUR MACHINE SO THAT WHEN THERE IS NO ONE ELSE ON THE SYSTEM, ; SPEED WILL PRINT EXACTLY 80 COLUMNS. ; ;******************************************************************* WAITER: .WORD 2810. ; DELAY FACTOR COUNTR: .BLKW 1. ; COUNTER OF LOOPS DELAY: .BLKW 1. ; DELAY COUNTER IOST: .BLKW 2 ; I/O STATUS BLOCK MCBUF: .BYTE TC.TTP,0 ; MULTIPLE CHARACTERISTICS BUFFER INBUF: .BLKB 1 ; INPUT BUFFER FOR THE IO.RNE .EVEN .PAGE ;************************************************************** ; ; MESSAGE AREA ; ;************************************************************* .ENABL LC .NLIST BEX CR=15 LF=12 ESC=33 HEADER: .ASCII / PERCENT IDLE/ .BYTE CR,LF .ASCII / 10 20 30 40 50 60/ .ASCII / 70 80 90 100/ .BYTE CR LHDR=.-HEADER LINE: .ASCII /---+---*---+---*---+---*---+---*---+---*---+---*/ .ASCII /---+---*---+---*---+---*---+---*!!!!!!!!!!!!!!!!/ .LIST BEX V1HSET: .ASCII /[2J/ ; CLEAR SCREEN .ASCII /[3;23r/ ; SET SCROLLING REGION .ASCII /[1;1f/ ; HOME CURSOR V1SETL=.-V1HSET V1HRES: .ASCII /[1;23r/ ; RESET SCROLLING REGION .ASCII /[23;1f/ ; PUT CURSOR AT BOTTOM OF SCREEN V1RESL=.-V1HRES .EVEN .PAGE ;****************************************************************** ; ; PROGRAM SETUP ; ;****************************************************************** SPEED: QIOW$S #SF.GMC,#1,#1,,,,<#MCBUF,#2> CMPB #T.V100,MCBUF+1 ; IS IT A VT100? BNE NOTV1H ; NO. SKIP VT100 RAZZLE DAZZLE QIOW$S #IO.WLB,#1,#1,,,,<#V1HSET,#V1SETL> NOTV1H: CLR DELAY ; CLEAR DELAY LOOP QIOW$S #IO.WLB,#1,#1,,,,<#HEADER,#LHDR> QIO$S #IO.RNE,#1,,,,#QIOAST,<#INBUF,#1> MRKT$S ,#1,#2,#MKTAST ; SET TIMER FOR 1 SECOND ;************************************************************************ ; ; DELAY LOOP AND IDLE COUNTER ; ;************************************************************************ LOOP: INC DELAY ; DELAY LOOP CMP DELAY,WAITER ; DELAYED ENOUGH? BNE LOOP ; NO - WAIT SOME MORE INC COUNTR ; COUNTER LOOP CLR DELAY ; RESET DELAY COUNTER BR LOOP ; WAIT SOME MORE .PAGE ;*************************************************************** ; ; TIMER AST SERVICE ROUTINE ; ;*************************************************************** MKTAST: MOV COUNTR,R1 ; NUMBER OF ASTERISKS TO PRINT QIO$S #IO.WBT,#1,#1,,#IOST,,<#LINE,R1,#40> CLR COUNTR ; RESET COUNTER FOR NEXT SECOND CLR DELAY ; RESET DELAY COUNTER TST (SP)+ ; POP EVENT FLAG FROM STACK MRKT$S ,#1,#2,#MKTAST ; SET TIMER FOR 1 SECOND ASTX$S ; RETURN FROM AST ROUTINE ;****************************************************************** ; ; I/O AST SERVICE ROUTINE ; ;****************************************************************** QIOAST: CMKT$S ; CANCEL ALL MARK TIMES CMPB #T.V100,MCBUF+1 ; IS IT A VT100? BNE EXIT ; NO. SKIP VT100 RAZZLE DAZZLE QIOW$S #IO.WLB,#1,#1,,,,<#V1HRES,#V1RESL> EXIT: EXIT$S ; TELL RSX WE WANT TO STOP .END SPEED ; TELL MAC WE WANT TO STOP