> ClockSp 2.10  Calculate CPU clock speed #"BBC BASIC CPU Timing Program" (A%=0:T%=+50:A%=A%+1:>T% 2'Z%=0:B%=1:C%=100:D%=510:F%=3:F=1/10 <7:C%=C%*10:D%=D%*10:F%=F%*10:F=F*10:A%=A%10:A%<50 F3Z=Z%:H=Z+0.5:B=B%:S=B:C=C%:T=C+0.5:D=D%:E=D+0.5 PN"Real REPEAT loop ";:T%=:R=H:R=R+S:R>T:T%=-T%:L%=F*42600/T%:p(L%) ZN"Variant REPEAT loop ";:T%=:V=Z:V=V+B:V>C:T%=-T%:M%=F*42600/T%:p(M%) dU"Integer REPEAT loop ";:T%=:I%=Z%:I%=I%+B%:I%>C%:T%=-T%:N%=F*24000/T%:p(N%) nM"Real FOR loop ";:T%=:R=H E S::T%=-T%:O%=F*51200/T%:p(O%) xM"Variant FOR loop ";:T%=:V=Z D B::T%=-T%:P%=F*51000/T%:p(P%) S"Integer FOR loop ";:T%=:I%=Z% D% B%::T%=-T%:Q%=F*17730.7/T%:p(Q%) 3"Trig/Log test ";:0=0:4"":R%=0 T0<>0:A=1:T%=:J%=1 F%:A=(((((A*A)))))+1::T%=-T%:R%=F*68600/T%:p(R%) "String manipulation "; T%=:A$="STRINGMANIPULATIONTEST":A%=0F%*4:A$=A$,A$/2,A$/4+1)+A$,A$/4)+A$,A$/2,2)+A$,A$/4)+A$,A$/4,A$/4+1),A$)::T%=-T%:S%=F*72750/T%:p(S%) R"Procedure call ";:T%=:I%=Z% D%:test::T%=-T%:U%=F*80300/T%:p(U%) R"GOSUB call ";:T%=:I%=Z% D%:TXA::T%=-T%:V%=F*85000/T%:p(V%) "Unweighted Average "; 5 R%:p((L%+M%+N%+O%+P%+Q%+R%+S%+U%+V%)/(100/10)) 3 R%=0:p((L%+M%+N%+O%+P%+Q%+S%+U%+V%)/(90/10)) #'"Compared to a 2.00MHz BBC B"  :  test: :  ": ,?p(T%):" "+(T%100),6);".";"0"+(T%),2);"MHz";8: 6: @H This is calibrated against a BBC Model B with no second processor, JF running BASIC II and with almost all interupts turned off using: T% ?&FE4E=&3F. This gives 2.00MHz. ^: h@ ClockSp4 is calibrated against 65c12 BASIC IV on a Master. r: |> v2.00 15-Mar-2002 Recalibrates itself for faster systems 6 v2.01 07-Mar-2006 Corrected error in string test G v2.10 23-Nov-2020 Separate forced real and variant variable tests ; R=Real counter, V=Variant counter, I%=Integer counter :