10
20
30 PRINT"BBC BASIC IV CPU Timing Program"
40 A%=0:T%=TIME:REPEATA%=A%+1:UNTILTIME>T%+50
50 Z=0:Z%=0:B=1:B%=1:F=1/10:C=100:C%=100:D=510:D%=510:F%=3
60 REPEAT:C=C*10:C%=C%*10:D=D*10:D%=D%*10:F%=F%*10:F=F*10:A%=A%DIV10:UNTILA%<50
70 PRINT"Real REPEAT loop ";:T%=TIME:A=Z:REPEATA=A+B:UNTILA>C:T%=TIME-T%:PROCp(F*35700/T%)
80 PRINT"Integer REPEAT loop ";:T%=TIME:A%=Z%:REPEATA%=A%+B%:UNTILA%>C%:T%=TIME-T%:PROCp(F*21200/T%)
90 PRINT"Real FOR loop ";:T%=TIME:FORA=Z TO D STEP B:NEXT:T%=TIME-T%:PROCp(F*43800/T%)
100 PRINT"Integer FOR loop ";:T%=TIME:FORA%=Z% TO D% STEP B%:NEXT:T%=TIME-T%:PROCp(F*16200/T%)
110 PRINT"Trig/Log test ";:IFCOS0=0:PRINTSPC4"<none>"
120 IFCOS0<>0:A=1:T%=TIME:FORJ%=1 TO F%:A=TAN(ATN(EXP(LN(SQR(A*A)))))+1:NEXT:T%=TIME-T%:PROCp(F*30500/T%)
130
140
150 PRINT"String manipulation ";
160 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%:PROCp(F*56400/T%)
170 PRINT"Procedure call ";:T%=TIME:FORA%=Z% TO D%:PROCtest:NEXT:T%=TIME-T%:PROCp(F*75750/T%)
180 PRINT"GOSUB call ";:T%=TIME:FORA%=Z% TO D%:GOSUB300:NEXT:T%=TIME-T%:PROCp(F*86400/T%)
190 PRINT"Combined Average ";:PROCp(FNspeed)
200 PRINT'"Compared to a 2.00MHz BBC Master"
210 END
220 :
230 DEFFNAck(M%,N%)
240 IF M%=0:=N%+1
250 IF N%=0:=FNAck(M%-1,1)
260 =FNAck(M%-1,FNAck(M%,N%-1))
270 :
280 DEFPROCtest:ENDPROC
290 :
300 RETURN
310 :
320 DEFPROCp(T%):PRINTRIGHT$(" "+STR$(T%DIV100),6);".";RIGHT$("0"+STR$(T%),2);"MHz";CHR$8:ENDPROC
330 :
340
350
360
370
380
390
400
410 :
420
430
440
450 :
460
470
480
490 :
500 DEFFNspeed:LOCAL A,B,C,D,F,Z,A%,B%,C%,D%,F%,Q%,R%,S%,U%,V%,W%,X%,Y%,Z%
510 A%=0:T%=TIME:REPEATA%=A%+1:UNTILTIME>T%+50
520 Z=0:Z%=0:B=1:B%=1:F=1/10:C=100:C%=100:D=510:D%=510:F%=3
530 REPEAT:C=C*10:C%=C%*10:D=D*10:D%=D%*10:F%=F%*10:F=F*10:A%=A%DIV10:UNTILA%<50
540 T%=TIME:A=Z:REPEATA=A+B:UNTILA>C:T%=TIME-T%:U%=F*35700/T%
550 T%=TIME:A%=Z%:REPEATA%=A%+B%:UNTILA%>C%:T%=TIME-T%:V%=F*21200/T%
560 T%=TIME:FORA=Z TO D STEPB:NEXT:T%=TIME-T%:W%=F*43800/T%
570 T%=TIME:FORA%=Z% TO D% STEPB%:NEXT:T%=TIME-T%:X%=F*16200/T%
580 Y%=X%:IFCOS0<>0:A=1:T%=TIME:FORJ%=1 TO F%:A=TAN(ATN(EXP(LN(SQR(A*A)))))+1:NEXT:T%=TIME-T%:Y%=F*30500/T%
590 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*56400/T%
600 T%=TIME:FORA%=Z% TO D%:PROCtest:NEXT:T%=TIME-T%:R%=F*75750/T%
610 T%=TIME:FORA%=Z% TO D%:GOSUB300:NEXT:T%=TIME-T%:Q%=F*86400/T%
620 =INT((Q%+R%+S%+U%+V%+W%+X%+Y%)/(777/100))
630