10
20
30 PRINT"BBC BASIC CPU Timing Program"
40 A%=0:T%=TIME+50:REPEATA%=A%+1:UNTILTIME>T%
50 Z%=0:B%=1:C%=100:D%=510:F%=3:F=1/10
60 REPEAT:C%=C%*10:D%=D%*10:F%=F%*10:F=F*10:A%=A%DIV10:UNTILA%<50
70 Z=Z%:I=Z+0.5:B=B%:S=B:C=C%:T=C+0.5:D=D%:E=D+0.5
80 PRINT"Real REPEAT loop ";:T%=TIME:A=I:REPEATA=A+S:UNTILA>T:T%=TIME-T%:L%=F*40600/T%:PROCp(L%)
90 PRINT"Variant REPEAT loop ";:T%=TIME:A=Z:REPEATA=A+B:UNTILA>C:T%=TIME-T%:M%=F*40600/T%:PROCp(M%)
100 PRINT"Integer REPEAT loop ";:T%=TIME:A%=Z%:REPEATA%=A%+B%:UNTILA%>C%:T%=TIME-T%:N%=F*23900/T%:PROCp(N%)
110 PRINT"Real FOR loop ";:T%=TIME:FORA=I TO E STEP S:NEXT:T%=TIME-T%:O%=F*51000/T%:PROCp(O%)
120 PRINT"Variant FOR loop ";:T%=TIME:FORA=Z TO D STEP B:NEXT:T%=TIME-T%:P%=F*51000/T%:PROCp(P%)
130 PRINT"Integer FOR loop ";:T%=TIME:FORA%=Z% TO D% STEP B%:NEXT:T%=TIME-T%:Q%=F*17728.6/T%:PROCp(Q%)
140 PRINT"Trig/Log test ";:IFCOS0=0:PRINTSPC4"<none>":R%=0
150 IFCOS0<>0:A=1:T%=TIME:FORJ%=1 TO F%:A=TAN(ATN(EXP(LN(SQR(A*A)))))+1:NEXT:T%=TIME-T%:R%=F*68600/T%:PROCp(R%)
160 PRINT"String manipulation ";
170 T%=TIME:A$="STRINGMANIPULATIONTEST":FORA%=0TOF%*4:A$=RIGHT$(MID$(A$,LENA$/2,LENA$/4+1)+RIGHT$(A$,LENA$/4)+MID$(A$,LENA$/2,2)+LEFT$(A$,LENA$/4)+MID$(A$,LENA$/4,LENA$/4+1),LENA$):NEXT:T%=TIME-T%:S%=F*72750/T%:PROCp(S%)
180 PRINT"Procedure call ";:T%=TIME:FORA%=Z% TO D%:PROCtest:NEXT:T%=TIME-T%:U%=F*80300/T%:PROCp(U%)
190 PRINT"GOSUB call ";:T%=TIME:FORA%=Z% TO D%:GOSUB280:NEXT:T%=TIME-T%:V%=F*85000/T%:PROCp(V%)
200 PRINT"Unweighted Average ";
210 IF R%:PROCp((L%+M%+N%+O%+P%+Q%+R%+S%+U%+V%)/(100/10))
220 IF R%=0:PROCp((L%+M%+N%+O%+P%+Q%+S%+U%+V%)/(90/10))
230 PRINT'"Compared to a 2.00MHz BBC B"
240 END
250 :
260 DEFPROCtest:ENDPROC
270 :
280 RETURN
290 :
300 DEFPROCp(T%):PRINTRIGHT$(" "+STR$(T%DIV100),6);".";RIGHT$("0"+STR$(T%),2);"MHz";CHR$8:ENDPROC
310 :
320
330
340
350 :
360
370 :
380
390
400
410 :