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