5 MODE7 10 REM > ClockSp 20 REM Calculate CPU clock speed 30 PRINT"BBC BASIC CPU Timing Program" 40 T%=TIME:REPEATUNTILTIME>T%+50 50 B=1:B%=1:C=1000:C%=1000:D=5100:D%=5100:Z=0:Z%=0 60 PRINT"Real REPEAT loop ";:T%=TIME:A=Z:REPEATA=A+B:UNTILA>C:T%=TIME-T%:PROCp(40800/T%) 70 PRINT"Integer REPEAT loop ";:T%=TIME:A%=Z%:REPEATA%=A%+B%:UNTILA%>C%:T%=TIME-T%:PROCp(24000/T%) 80 PRINT"Real FOR loop ";:T%=TIME:FORA=Z TO D STEPB:NEXT:T%=TIME-T%:PROCp(51000/T%) 90 PRINT"Integer FOR loop ";:T%=TIME:FORA%=Z% TO D% STEPB%:NEXT:T%=TIME-T%:PROCp(17800/T%) 100 PRINT"Floating-Point Test "; 110 A=1:T%=TIME:FORJ%=1 TO 29:A=TAN(ATN(EXP(LN(SQR(A*A)))))+1:NEXT:T%=TIME-T%:PROCp(66500/T%) 120 PRINT"Ackermann Recursion "; 130 M%=3:T%=TIME:FORN%=1 TO 3:Z%=FNAck(M%,N%):NEXT:T%=TIME-T%:PROCp(254500/T%) 140 PRINT"Combined Average ";:PROCp(FNspeed) 150 PRINT'"Compared to a BBC B running at 2.00MHz" 160 END 170 : 180 DEFFNAck(M%,N%) 190 IF M%=0:=N%+1 200 IF N%=0:=FNAck(M%-1,1) 210 =FNAck(M%-1,FNAck(M%,N%-1)) 220 DEFPROCp(T%):PRINT"Speed: ";T%DIV100;".";RIGHT$("0"+STR$(T%),2);"MHz":ENDPROC 230 : 240 This is calibrated against a 250 BBC model B with no second 260 processor, running BASIC II 270 and with almost all interupts 280 turned off using: 290 ?&FE4E=&3F 300 This gives 2.00MHz. 310 : 320 Savage Floating Point test and 330 Ackermann Recursion test added 340 -Mar-93, based on A&B Jan 90. 350 : 360 DEFFNspeed:LOCAL A,B,C,D,Z,A%,B%,C%,D%,U%,V%,W%,X%,Y%,Z% 370 T%=TIME:REPEATUNTILTIME>T%+50 380 B=1:B%=1:C=1000:C%=1000:D=5100:D%=5100:Z=0:Z%=0 390 T%=TIME:A=Z:REPEATA=A+B:UNTILA>C:T%=TIME-T%:U%=(40800/T%) 400 T%=TIME:A%=Z%:REPEATA%=A%+B%:UNTILA%>C%:T%=TIME-T%:V%=(24000/T%) 410 T%=TIME:FORA=Z TO D STEPB:NEXT:T%=TIME-T%:W%=(51000/T%) 420 T%=TIME:FORA%=Z% TO D% STEPB%:NEXT:T%=TIME-T%:X%=(17800/T%) 430 A=1:T%=TIME:FORJ%=1 TO 29:A=TAN(ATN(EXP(LN(SQR(A*A)))))+1:NEXT:T%=TIME-T%:Y%=(66500/T%) 440 =(U%+V%+W%+X%+Y%)DIV5 450 REM Returns CPU speed*100