home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1992 December / simtel1292_SIMTEL_1292_Walnut_Creek.iso / msdos / ega / egatest.arc / DOTTIME.MOD < prev    next >
Text File  |  1986-12-23  |  3KB  |  96 lines

  1. IMPLEMENTATION MODULE DotTime;
  2.  
  3.   IMPORT Terminal;
  4.   FROM SYSTEM IMPORT AX, BX, CX, DX, ES, SWI, GETREG, SETREG, CODE,
  5.        ADR;
  6.   FROM LowEGA IMPORT SetModeBios, SetUpHiRes, SetUpAlpha, DrawPoint,
  7.        SetBiosCursorPoint, BiosCRTParams;
  8.   FROM TimeDate IMPORT GetTime, Time;
  9.   FROM RealConversions IMPORT RealToString;
  10.   FROM PointLib IMPORT Point, MakePoint;
  11.   FROM Pauses IMPORT Pause;
  12.  
  13.   CONST
  14.       HiRes = 010H;   (* Color Hi Res Mode *)
  15.       Alpha = 003H;   (* Color Alpha Mode  *)
  16.       VIDEO = 010H;   (* Video Interrupt   *)
  17.       Page0 = 0H;
  18.       DisplayPageAddr = 0A000H;
  19.  
  20.   PROCEDURE DotTimingTest;
  21.     (* This routine paints 65000 pixels on the CRT in three ways.
  22.        The time for each method is recorded for the user to see *)
  23.     VAR t1               : REAL;
  24.         l1               : ARRAY [0..50] OF CHAR;
  25.         ok               : BOOLEAN;
  26.         j, rowbyte       : CARDINAL;
  27.         bitmasks         : ARRAY [0..7] OF CARDINAL;
  28.         Times            : ARRAY [0..6] OF Time;
  29.         byteoff,bitmask  : CARDINAL;
  30.         p                : Point;
  31.  
  32.       PROCEDURE MakeTime(Stop, Start : CARDINAL);
  33.         VAR mins : CARDINAL;
  34.       BEGIN
  35.         mins := Times[Stop].minute - Times[Start].minute;
  36.         t1 := FLOAT(mins) * 60000. + FLOAT(Times[Stop].millisec) -
  37.                 FLOAT(Times[Start].millisec);
  38.         t1 := t1 / 1000.;
  39.         RealToString(t1, 3, 7, l1, ok);
  40.         Terminal.WriteString(l1);  Terminal.WriteLn;
  41.       END MakeTime;
  42.  
  43. BEGIN
  44.   bitmasks[7] := 1;           bitmasks[6] := 2;
  45.   bitmasks[5] := 4;           bitmasks[4] := 8;
  46.   bitmasks[3] := 16;          bitmasks[2] := 32;
  47.   bitmasks[1] := 64;          bitmasks[0] := 128;
  48.   Pause('Dot Timing Test');
  49.   SetModeBios(HiRes);         SetUpHiRes;
  50.  
  51.     (* The first test -- direct subroutine call *)
  52.   MakePoint(p, 25, 25);       GetTime(Times[0]);
  53.   FOR j := 0 TO 65000 DO
  54.     DrawPoint(p, 4);
  55.   END;
  56.   GetTime(Times[1]);
  57.  
  58.     (* Test #2 -- Bios calls *)
  59.   MakePoint(p, 50, 50);       GetTime(Times[2]);
  60.   FOR j := 0 TO 65000 DO
  61.     SETREG(BX, 0);            SETREG(AX, 0C02h);
  62.     SETREG(CX, p.x);          SETREG(DX, p.y);
  63.     SWI(VIDEO);
  64.   END;
  65.   GetTime(Times[3]);
  66.  
  67.     (* Test #3 -- Direct inline assembler code *)
  68.   MakePoint(p, 75, 75);       GetTime(Times[4]);
  69.   FOR j := 0 TO 65000 DO
  70.     rowbyte := p.x DIV 8;     GETREG(DX, bitmask);
  71.     bitmask := bitmasks[bitmask];
  72.     byteoff := CARDINAL(p.y) * BiosCRTParams.CRTCols + rowbyte;
  73.     SETREG(ES, DisplayPageAddr);    SETREG(BX, byteoff);
  74.     SETREG(CX, 1);                  SETREG(AX, bitmask);
  75.     CODE(88h, 0c4h, 0b0h, 08h, 0bah, 0ceh, 03h, 0efh, 0b8h, 02h,
  76.         0ffh, 0b2h, 0c4h, 0efh, 26h, 08ah, 2fh, 26h, 0c6h, 07h,
  77.         00h, 88h, 0cch, 0efh, 026h, 0c6h, 07h, 0ffh, 0b4h, 0ffh,
  78.         0efh, 0b2h, 0ceh, 0b8h, 03h, 00h, 0efh, 0b8h, 08h, 0ffh,
  79.         0efh);
  80.     END;
  81.     GetTime(Times[5]);
  82.  
  83.         (* Now to report the results on the screen *)
  84.     SetModeBios(Alpha);
  85.     MakePoint(p, 0, 6); SetBiosCursorPoint(Page0, p);
  86.     Terminal.WriteString('Subroutine time = ');
  87.     MakeTime(1, 0);
  88.     Terminal.WriteString('EGA BIOS time = ');
  89.     MakeTime(3, 2);
  90.     Terminal.WriteString('Direct In Line Code time = ');
  91.     MakeTime(5, 4);
  92.     SetUpAlpha;
  93.     Pause('End Dot Timing Test');
  94.   END DotTimingTest;
  95. END DotTime.
  96.