Listing of file='CPUDEMO1' on disk='vmedia/benchmark_tests.wvd.zip'
# Sector 26, program filename = 'CPUDEMO1' 0000 DEFFN'0"PRINTHEX(03);:LIST 10,";HEX(0D) 0001 DEFFN'16"X$=";HEX(22);"CPUDEMO";HEX(22);":SCRATCH T X$:SAVE T()X$";HEX(0D ) 0010 REM CPUPERF 2FEB84 0020 REM PROGRAM NAME - CPU PERFORMANCE BENCHMARK 0030 REM DATE OF FIRST CODE- 2 FEBRUARY 1984 0040 REM DATE OF LATEST UPDATE - 0050 REM 0060 REM FUNCTION - 0070 REM 0080 REM THIS PROGRAM IS DESIGNED TO EXERCISE A SUBSET OF BASIC-2 0090 REM CPU INTENSIVE INSTRUCTIONS.IT IS BEING BUILD TO KEEP TRACK OF 0100 REM CPU PERFORMANCE DURING DEVELOPMENT OF PC/BASIC-2 AND TO GIVE A 0110 REM MEASUREMENT OF THE DIFFERENCE BETWEEN MVP AND PC PERFORMANCE. 0120 REM % SCREEN INITIALIZATION : PRINT HEX(0603);"CPU Performance Benchmark" 0130 PRINT AT(2,0); : T3$,T1$=TIME : PRINTUSING "Start Time: ## Hrs ## Mins ## Seconds ## 1/100S";STR(T1$,1,2 ),STR(T1$,3,2),STR(T1$,5,2),STR(T1$,7,2) : PRINT 0140 REM % VARIABLE SET-UP : T,T1=.5 : T2=2 0150 REM 0160 REM IF L0 = 10 THEN THIS CORRESPONDS TO THE EXECUTION OF 10 TIMES 0170 REM 1,000,000 WHETSTONE INSTRUCTIONS 0180 REM 0190 L0=1 0200 REM 0210 REM I=10 CORRESPONDS TO 1,000,000 WHETSTONE INSTRUCTIONS FOR MAJOR LOOP 0220 REM 0230 I=10 0240 REM 0250 REM MODULE EXECUTION TIME PARAMETERS 0260 REM 0269 %N1=0: N2=12*I: N3=14*I: N4=345*I: N5=0: N6=210*I: N7=0: REM N7=32*I: N8= 899*I: N9=616*I: M0=0: M1=93*I: M2=0 0270 N1=1000 : N2=1000 : N3=500 : N4=3000 : N5=0 : N6=1000 : N7=500 : N8=2000 : N9=2000 : M0=3000 : M1=500 0280 REM % MAJOR LOOP : FOR J1=1TO L0 0290 GOSUB '53(1,"Expressions",N1) : X1=1 : X2,X3,X4=-1 : IF N1<=0THEN 300 : FOR I=1TO N1 : X1=(X1+X2+X3-X4)*T : X2=(X1+X2-X3+X4)*T : X3=(X1-X2+X3+X4)*T : X4=(-X1+X2+X3+X4)*T : NEXT I 0300 GOSUB '52 0310 GOSUB '53(2,"Array Elements",N2) : DIM E1(4) : E1(1)=1 : E1(2),E1(3),E1(4)=-1 : IF N2<=0THEN 330 : FOR I=1TO N2 0320 E1(1)=(E1(1)+E1(2)+E1(3)-E1(4))*T : E1(2)=(E1(1)+E1(2)-E1(3)+E1(4))*T : E1(3)=(E1(1)-E1(2)+E1(3)+E1(4))*T : E1(4)=(-E1(1)+E1(2)+E1(3)+E1(4))*T : NEXT I 0330 GOSUB '52 0340 GOSUB '53(3,"Array As Parameter",N3) : IF N3<=0THEN 350 : FOR I=1TO N3 : GOSUB 690 : NEXT I 0350 GOSUB '52 0360 GOSUB '53(4,"Conditional Jumps",N4) : J=1 : IF N4<=0THEN 430 : FOR I=1TO N4 : IF (J-1)<>0THEN 370 : J=2 : GOTO 380 0370 J=3 0380 IF (J-2)<=0THEN 390 : J=0 : GOTO 400 0390 J=1 0400 IF (J-1)>=0THEN 410 : J=1 : GOTO 420 0410 J=0 0420 NEXT I 0430 GOSUB '52 0440 GOSUB '53(6,"Integer Arithmetic",N6) : J=1 : K=2 : L=3 : IF N6<=0THEN 450 : FOR I=1TO N6 : J=J*(K-J)*(L-K) : K=L*K-(L-J)*K : L=(L-K)*(K+J) : E1(L-1)=J+K+L : E1(K-1)=J*K*L : NEXT I 0450 GOSUB '52 0460 GOSUB '53(7,"Trigonometric Functions",N7) : X,Y=.5 : IF N7<=0THEN 480 0470 FOR I=1TO N7 : X=T*ARCTAN(T2*SIN(X)*COS(X)/(COS(X+Y)+COS(X-Y)-1)) : Y=T*ARCTAN(T2*SIN(Y)*COS(Y)/(COS(X+Y)+COS(X-Y)-1)) : NEXT I 0480 GOSUB '52 0490 GOSUB '53(8,"Subroutine Calls",N8) : X,Y,Z=1 : IF N8<=0THEN 510 0500 FOR I=1TO N8 : GOSUB 720 : NEXT I 0510 GOSUB '52 0520 GOSUB '53(9,"Array References",N9) : J,E1(1)=1 : K,E1(2)=2 : L,E1(3)=3 : IF N9<=0THEN 540 0530 FOR I=1TO N9 : GOSUB 740 : NEXT I 0540 GOSUB '52 0550 GOSUB '53(10,"Integer Arithmetic",M0) : J=2 : K=3 : IF M0<=0THEN 570 0560 FOR I=1TO M0 : J=J+K : K=J+K : J=K-J : K=K-J-J : NEXT I 0570 GOSUB '52 0580 GOSUB '53(11,"Standard Functions",M1) : X=.75 : IF M1<=0THEN 600 0590 FOR I=1TO M1 : X=SQR(EXP(LOG(X)/T1)) : NEXT I 0600 GOSUB '52 0610 REM % END OF MAJOR LOOP : NEXT J1 0620 REM %END : T2$=TIME : PRINT : PRINTUSING "End Time: ## Hrs ## Mins ## Seconds ## 1/100S";STR(T2$,1,2 ),STR(T2$,3,2),STR(T2$,5,2),STR(T2$,7,2) 0630 GOSUB '50(T1$) : T4=T9 : GOSUB '50(T2$) : PRINT HEX(07);"Total Elapsed Time =";(T9-T4)/100;"Seconds" : PRINT "Press any key to terminate" : GOSUB '51(5) : GOTO 130 0660 REM TIME CALC 0670 DEFFN'50(T$) : CONVERT STR(T$,1,2)TO H : CONVERT STR(T$,3,2)TO M : CONVERT STR(T$,5,2)TO S : CONVERT STR(T$,7,2)TO H1 : T9=100*(60*(60*H+M)+S)+H1 : RETURN 0680 REM % SUBROUTINE CALLED BY MODULE 3 0690 DIM E(4) : FOR I0=1TO 4 : E(I0)=E1(I0) : NEXT I0 : J=0 0700 E(1)=(E(1)+E(2)+E(3)-E(4))*T : E(2)=(E(1)+E(2)-E(3)+E(4))*T : E(3)=(E(1)-E(2)+E(3)+E(4))*T : E(4)=(-E(1)+E(2)+E(3)+E(4))*T : J=J+1 : IF (J-6)<0THEN 700 : RETURN 0710 REM % SUBROUTINE CALLED BY MODULE 8 0720 X1=X : Y1=Y : X1=T*(X1+Y1) : Y1=T*(X1+Y1) : Z=(X1+Y1)/T2 : RETURN 0730 REM % SUBROUTINE CALLED BY MODULE 9 0740 E1(J)=E1(K) : E1(K)=E1(L) : E1(L)=E1(J) : RETURN 1000 DEFFN'51(X) : REM %Wait X Seconds : T1$=TIME : GOSUB '50(T1$) : T1=T9+X*100 1010 T2$=TIME : KEYIN T1$,9999,9999 : GOSUB '50(T2$) : IF T9<T1THEN 1010 : RETURN 1020 DEFFN'52 : T4$=TIME : GOSUB '50(T4$) : T4=T9 : GOSUB '50(T3$) : PRINT AT(M9+3,40); : PRINTUSING "####.## Seconds",(T4-T9)/100 : T3$=TIME : KEYIN T2$,9999,9999 : RETURN 1029 DIM M9$40 1030 DEFFN'53(M9,M9$,R9) : PRINT AT(M9+3,0); : PRINTUSING "Module ## - ############################# <---- Testing ### ## Repetitions",M9,M9$,R9; : RETURN 9998 DEFFN'15 : LOAD RUN 9999 DEFFN'127 : LOAD RUN