home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / t_power / testemu.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1988-12-12  |  1.3 KB  |  71 lines

  1. {$N+,E+}
  2. program Test;
  3.   {-Test ReinitEmulator, etc.}
  4.  
  5. uses
  6.   tp8087, tpint;
  7.  
  8. const
  9.   D : Double = 2.0;
  10. var
  11.   I : Word;
  12.   UseIt : Boolean;
  13.   AltStack : array[1..2048] of Byte;
  14.  
  15.   procedure Dummy(var Regs : IntRegisters);
  16.     {-Dummy routine that uses emulator}
  17.   var
  18.     SB : SaveBuffer8087;
  19.     D : Double;
  20.   begin
  21.     if UseIt then
  22.       {reinitialize emulator}
  23.       ReinitEmulator
  24.     else begin
  25.       {save 8087 registers}
  26.       Save8087(SB);
  27.  
  28.       {reinitialize 8087}
  29.       Reinit8087;
  30.     end;
  31.  
  32.     {do some math}
  33.     D := 1.0;
  34.     D := D * 2.0;
  35.  
  36.     if not UseIt then
  37.       {restore 8087 registers}
  38.       Restore8087(SB);
  39.   end;
  40.  
  41.   procedure Int1C(BP : Word); interrupt;
  42.     {-Interrupt $1C handler}
  43.   var
  44.     Regs : IntRegisters absolute BP;
  45.   begin
  46.     {switch stacks and call Dummy routine}
  47.     SwapStackAndCallNear(Ofs(Dummy), @AltStack[2048], Regs);
  48.   end;
  49.  
  50. begin
  51.   UseIt := UseEmulator;
  52.   if UseIt then
  53.     WriteLn('Using emulator...')
  54.   else
  55.     WriteLn('Using 80x87 chip...');
  56.  
  57.   {install $1C handler}
  58.   if not InitVector($1C, 20, @Int1C) then
  59.     Halt(1);
  60.  
  61.   WriteLn('Multiplying...');
  62.  
  63.   for I := 1 to 2000 do
  64.     if D*D <> 4.0 then begin
  65.       WriteLn('Error at ', I);
  66.       Halt(1);
  67.     end;
  68.  
  69.   WriteLn('Done...');
  70. end.
  71.