home *** CD-ROM | disk | FTP | other *** search
- { Qbench.pas - produces a 'Screens/second' table for ver 2.1 12-09-86 }
- { Q screen utilities. }
- { I'm not trying to support this program, so don't expect it to be perfect.
- It will just give you a good feel for speed. The time is adjusted for
- an average 8 second test for each condition - total of 6 minutes. For more
- accurate results, change TestTime:=16. I would appreciate anyone providing
- me the results on their machine as a disk file including processor number,
- processor Mhz and Video card. }
-
- {$i qwik21.inc}
-
- type Waits = (NoWait,Wait);
- Attrs = (Attr,NoAttr);
-
- const
- Procs = 11;
- TestTime = 8; { TestTime in seconds for each case. 8 gives +/- 1% }
-
- var
- Attrib, Count, Screens, WaitScreens, NoWaitScreens, OldCursor: integer;
- Row, Col, Rows, Cols, ProcNumber: byte;
- ScrPerSec: array [1..Procs] of array [NoWait..Wait]
- of array [Attr..NoAttr] of real;
- Strng: string[80];
- W: Waits;
- A: Attrs;
- ScrArray: array [1..4000] of byte;
- Names: array [1..Procs] of String[80];
- FV: text;
- ToDisk: Boolean;
- Ch: char;
-
- { Timerj.inc placed here. Accurate to 1/18.2... seconds. }
- type
- StartStop = (Start, Stop);
-
- var
- t1,t2,ElapsedTime: real;
- midword: Integer absolute $40:$6D;
- lobyte: Byte absolute $40:$6C;
-
- procedure Timer (SS: StartStop);
- begin
- case SS of
- Start: begin
- t1:= midword*256.0+lobyte;
- ElapsedTime:=0
- end;
- Stop: begin
- t2:= midword*256.0+lobyte;
- if t2<t1 then t2:=t2+1573040.0; { max 1,573,040 tics/day }
- ElapsedTime:= (t2-t1)/18.206481934 { units of seconds }
- end
- end; { end case }
- end;
- { End of timerj.inc }
-
- procedure CheckTime;
- begin
- Strng:='TimerTest ';
- for Col:=1 to 3 do Strng:=Strng+Strng;
- Qfill (1,1,25,80,14,' ');
- timer (start);
- for Count:=1 to Screens do
- for row:=1 to 25 do QwriteV (Row,1,14,Strng);
- timer (Stop);
- Screens:=trunc(Screens*TestTime/ElapsedTime);
- end;
-
- procedure AllProcs (ProcNumber: byte);
- begin
- case ProcNumber of
- 1: begin
- timer (start);
- for Count:=1 to Screens do
- for Row:=1 to 25 do
- QwriteLV (Row,1,Attrib,80,Strng[1]);
- timer (Stop);
- end;
- 2: begin
- timer (start);
- for Count:=1 to Screens do
- for Row:=1 to 25 do
- QwriteV (Row,1,Attrib,Strng);
- timer (Stop);
- end;
- 3: begin
- timer (start);
- for Count:=1 to Screens do
- for Row:=1 to 25 do
- Qwrite (Row,1,Attrib,Strng);
- timer (Stop);
- end;
- 4: begin
- timer (start);
- for Count:=1 to Screens do
- for Row:=1 to 25 do
- QwriteC (Row,1,80,Attrib,Strng);
- timer (Stop);
- end;
- 5: begin
- timer (start);
- for Count:=1 to Screens do
- for Row:=1 to 25 do
- QwriteCV (Row,1,80,Attrib,Strng);
- timer (Stop);
- end;
- 6: begin
- timer (start);
- for Count:=1 to Screens do
- QfillC (1,1,80,25,80,Attrib,'C');
- timer (Stop);
- end;
- 7: begin
- timer (start);
- for Count:=1 to Screens do
- Qfill (1,1,25,80,Attrib,'F');
- timer (Stop);
- end;
- end; { Case ProcNumber of }
- if Attrib>=0 then
- case ProcNumber of
- 8: begin
- Qfill (1,1,25,80,Attrib,'a');
- timer (start);
- for Count:=1 to Screens do
- Qattr (1,1,25,80,Attrib);
- timer (Stop);
- end;
- 9: begin
- Qfill (1,1,25,80,Attrib,'c');
- timer (start);
- for Count:=1 to Screens do
- QattrC (1,1,80,25,80,Attrib);
- timer (Stop);
- end;
- end; { Case ProcNumber of }
- if ElapsedTime<>0.0 then
- ScrPerSec[ProcNumber,W,A]:=Screens/ElapsedTime;
- end;
-
- procedure TransProc (ProcNumber: byte);
- begin
- for Row:=1 to 25 do QwriteV (Row,1,Attrib,Strng);
- case ProcNumber of
- 10: begin
- timer (start);
- for Count:=1 to Screens do
- QstoreToMem (1,1,25,80,ScrArray);
- timer (Stop);
- end;
- 11: begin
- QstoreToMem (1,1,25,80,ScrArray);
- timer (start);
- for Count:=1 to Screens do
- QstoreToScr (1,1,25,80,ScrArray);
- timer (Stop);
- end;
- end; { Case ProcNumber of }
- if ElapsedTime<>0.0 then
- ScrPerSec[ProcNumber,W,A]:=Screens/ElapsedTime;
- end;
-
- procedure ExAllProc (At: Attrs; Scrs, Att:integer);
- begin
- A:=At;
- Screens:=Scrs;
- Attrib:=Att;
- for ProcNumber:=1 to 9 do
- begin
- Strng:=Names[ProcNumber];
- if W=Wait then Strng:=Strng+' Wait ' else Strng:=Strng+' No Wait ';
- if A=Attr then Strng:=Strng+' w/Attr ' else Strng:=Strng+' No Attr ';
- FillChar (Strng[32],49,ProcNumber+48);
- Strng[0]:=#80;
- AllProcs (ProcNumber);
- end;
- end;
-
- procedure ExTransProc (At: Attrs; Scrs, Att:integer);
- begin
- A:=At;
- Screens:=Scrs;
- Attrib:=Att;
- for ProcNumber:=10 to 11 do
- begin
- Strng:=Names[ProcNumber];
- if W=Wait then Strng:=Strng+' Wait ' else Strng:=Strng+' No Wait ';
- Strng:=Strng+' w/Attr ';
- FillChar (Strng[32],49,ProcNumber+48);
- Strng[0]:=#80;
- TransProc (ProcNumber);
- end;
- end;
-
- begin
- Qinit;
- CursorChange (8192,OldCursor);
- GotoRC (1,1);
- Qfill (1,1,25,80,14,' ');
- Qwrite (1,1,-1,'Data to Screen or Disk [s/d]?');
- GotoRC (1,29);
- repeat
- Read (Kbd,Ch);
- until Ch in ['S','s','D','d',^M];
- QwriteC (12,1,80,14,'Don''t worry about snow if you have CGA.');
- QwriteC (13,1,80,14,'It''s testing as if you had and EGA.');
- Delay (4000);
-
- For ProcNumber:=1 to Procs do
- for W:= NoWait to Wait do
- for A:= Attr to NoAttr do
- ScrPerSec[ProcNumber,W,A]:=0.0;
- Names[1]:= ' QwriteLV ';
- Names[2]:= ' QwriteV ';
- Names[3]:= ' Qwrite ';
- Names[4]:= ' QwriteC ';
- Names[5]:= ' QwriteCV ';
- Names[6]:= ' QfillC ';
- Names[7]:= ' Qfill ';
- Names[8]:= ' Qattr ';
- Names[9]:= ' QattrC ';
- Names[10]:= ' QstoreToMem ';
- Names[11]:= ' QstoreToScr ';
-
-
- Qwait:=false;
- W:= NoWait;
- Screens:=600; { First guess for screens }
- CheckTime;
- NoWaitScreens:=Screens;
- ExAllProc (Attr,NoWaitScreens, 14);
- ExTransProc (Attr,NoWaitScreens, 14);
- Qattr (1,1,25,80,7);
- ExAllProc (NoAttr,NoWaitScreens, -1);
-
- if Vmode<>7 then
- begin
- Qwait:=true;
- W:= Wait;
- Screens:=90; { First guess for screens }
- CheckTime;
- WaitScreens:=Screens;
- ExAllProc (Attr,WaitScreens, 14);
- ExTransProc (Attr,WaitScreens, 14);
- Qattr (1,1,25,80,7);
- ExAllProc (NoAttr,WaitScreens, -1);
- end;
-
- Qfill (1,1,25,80,14,' ');
- if upcase(ch)='D' then
- begin
- Assign (FV,'Qbench.dta');
- ReWrite (FV);
- end
- else Assign (FV,'Con:');
- GotoRC (1,1);
- WriteLn (FV,'S C R E E N S / S E C O N D');
- WriteLn (FV,' Chng');
- WriteLn (FV,'Procedure Attr EGA CGA');
- WriteLn (FV,'--------- ---- -----------');
- for ProcNumber:=1 to 7 do
- for A:= Attr to NoAttr do
- begin
- if A=Attr then Write (FV,Names[ProcNumber]) else Write (FV,' ');
- if A=Attr then Write (FV,'Yes ') else Write (FV,'No ');
- Write (FV,ScrPerSec[ProcNumber,NoWait,A]:5:1);
- Writeln (FV,ScrPerSec[ProcNumber, Wait,A]:6:1);
- end;
- for ProcNumber:=8 to 11 do
- begin
- Write (FV,Names[ProcNumber]);
- if ProcNumber<10 then Write (FV,'Yes ') else Write (FV,'n/a ');
- Write (FV,ScrPerSec[ProcNumber,NoWait,Attr]:5:1);
- Writeln (FV,ScrPerSec[ProcNumber, Wait,Attr]:6:1);
- end;
- GotoRC (23,1); writeLn (FV,'WaitScreens= ',WaitScreens);
- WriteLn (FV,'NoWaitScreens= ',NoWaitScreens);
- If upcase(ch)='D' then Close (FV);
- GotoRC (24,1);
- CursorChange (OldCursor,OldCursor);
- end.
-