home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / i / ifp1s156.zip / PAGE_07.PAS < prev    next >
Pascal/Delphi Source File  |  1992-12-30  |  8KB  |  303 lines

  1. unit page_07;
  2.  
  3. interface
  4.  
  5. uses crt, ifpglobl, ifpcomon;
  6.  
  7. procedure page07;
  8.  
  9. implementation
  10.  
  11. procedure page07;
  12.  
  13. const
  14.   mouseint = $33;
  15.   mouselang: array [0..8] of string[10] = ('English', 'French', 'Dutch',
  16.           'German', 'Swedish', 'Finnish', 'Spanish', 'Portuguese', 'Italian');
  17.  
  18. var
  19.   xbyte : byte;
  20.   xword1 : word;
  21.   xword2 : word;
  22.   jsfound: boolean;
  23.   eqjs: boolean;
  24.   oldx, oldy, oldattr: byte;
  25.   xlong: longint;
  26.   MSysMouse: boolean;
  27.   MSVersion: word;
  28.  
  29.   begin
  30.   Caption2('Keyboard');
  31.   Writeln;
  32.   Caption3('BIOS support for enhanced keyboard');
  33.   with regs do
  34.     begin
  35.     AH:=$02;
  36.     Intr($16, regs);
  37.     xbyte:=AL;
  38.     AX:=$1200 + xbyte xor $FF;
  39.     Intr($16, regs);
  40.     if AL = xbyte then
  41.       begin
  42.       Write('yes');
  43.       Caption3('Enhanced keyboard present');
  44.       yesorno(Mem[BIOSdseg : $0096] and $10 = $10)
  45.       end
  46.     else
  47.       Writeln('no');
  48. (*  PC Magazine 6:15 p.378  *)
  49.     AH:=$02;
  50.     Intr($16, regs);
  51.     offoron('Insert     ', AL and $80 = $80);
  52.     offoron('Caps Lock  ', AL and $40 = $40);
  53.     offoron('Num Lock   ', AL and $20 = $20);
  54.     offoron('Scroll Lock', AL and $10 = $10);
  55.     Writeln;
  56.     end;
  57.   Caption3('Buffer start');
  58.   xword1:=Memw[BIOSdseg : $0080];
  59.   segofs(BIOSdseg, xword1);
  60.   Caption3(' end');
  61.   xword2:=Memw[BIOSdseg : $0082];
  62.   segofs(BIOSdseg, xword2);
  63.   Caption3(' size (keystrokes)');
  64.   Writeln((xword2 - xword1) shr 1 - 1);
  65.   Caption2('Internal modem [IBM Convertible]/serial printer [PCjr]');
  66.   yesorno(equip and $2000 = $2000);
  67.   Caption2('Game port');
  68.   xword:=0;
  69.   jsfound:=false;
  70.   Port[$201]:=1;
  71.   if Port[$201] and $F <> $F then
  72.     jsfound:=false
  73.   else
  74.     repeat
  75.       if (Port[$201] and $F) <> $F then
  76.         jsfound:=true;
  77.       Inc(xword);
  78.     until (xword = $F00) or jsfound;
  79.   if jsfound then
  80.     Write('yes, and ')
  81.   else
  82.     Write('no, and ');
  83.   if (equip and $1000) <> $1000 then
  84.     Write('NOT')
  85.   else
  86.     Write('IS');
  87.   Writeln(' set in BIOS equipment word');
  88.   Caption2('Mouse');
  89.   with regs do
  90.     begin
  91.     oldx:=WhereX;
  92.     oldy:=WhereY;
  93.     oldattr:=TextAttr;
  94.     TextColor(LightRed + Blink);
  95.     Write('** Searching for Mouse **');
  96.     TextAttr:=oldattr;
  97.     GotoXY(oldx, oldy);
  98.     AX:=$0021;
  99.     Intr(mouseint, regs);
  100.     ClrEol;
  101.     if AX = $FFFF then
  102.       begin
  103.       Write('yes');
  104.       Caption3('Buttons');
  105.       if BX = $FFFF then
  106.         BX:=2;
  107.       Writeln(BX);
  108.       MSysMouse:=false;
  109.       AX:=$0070;
  110.       BX:=$ABCD;
  111.       Intr(mouseint, regs);
  112.       if (AX = $ABCD) and (MemW[BX:CX] = $ABCD) and
  113.         (MemW[BX:CX + 8] = $ABCD) then
  114.         begin
  115.         MSysMouse:=true;
  116.         Caption3('Mouse Systems version');
  117.         xword:=MemW[MemW[BX:CX + 4]:MemW[BX:CX + 2]];
  118.         Writeln(Hi(xword), decimal, addzero(Lo(xword)));
  119.         end;
  120.       AX:=$266C;
  121.       BX:=0;
  122.       CX:=0;
  123.       Intr(mouseint, regs);
  124.       if BX = $5353 {SS} then
  125.         begin
  126.         Caption3('Logitech version');
  127.         Write(Chr(CH), decimal, Chr(CL), 'x');
  128.         if Chr(CH) >= '4' then
  129.           begin
  130.           Caption3('Ballistics');
  131.           AX:=$1F6C;
  132.           BX:=0;
  133.           CX:=0;
  134.           Intr(mouseint, regs);
  135.           if BX = 0 then
  136.             Write('off')
  137.           else
  138.             case CX of
  139.               1: Write('low');
  140.               2: Write('high')
  141.             else
  142.               Write('???');
  143.             end;
  144.           Caption3('Hand');
  145.           AX:=$216C;
  146.           BX:=0;
  147.           Intr(mouseint, regs);
  148.           if BX = 0 then
  149.             Writeln('right')
  150.           else
  151.             Writeln('left')
  152.           end;
  153.         end;
  154.       Caption3('Microsoft version standard');
  155.       AX:=$0024;
  156.       Intr(mouseint, regs);
  157.       if AX < $FFFF then
  158.         begin
  159.         MSVersion:=BX;
  160.         Writeln(BH, decimal, addzero(unbcd(BL)));
  161.         Caption3('Type');
  162.         case CH of
  163.           $01 : Write('bus');
  164.           $02 : Write('serial');
  165.           $03 : Write('InPort');
  166.           $04 : Write('PS/2');
  167.           $05 : Write('HP')
  168.           else
  169.             unknown('mouse', CH, 2)
  170.         end;
  171.         Caption3('Interrupt');
  172.         case CL of
  173.           $00 : Writeln('PS/2');
  174.           $02..$05, $07 : Writeln('IRQ', CL)
  175.           else
  176.             unknown('interrupt', CL, 2)
  177.         end;
  178.         if (Hi(MSVersion) >= 7) and (not MSysMouse) then
  179.           begin
  180.           Caption3('driver type');
  181.           AX:=$25;
  182.           Intr(MouseInt, Regs);
  183.           if (AX and $8000) = $8000 then
  184.             Write('device driver')
  185.           else
  186.             Write('TSR');
  187.           Caption3('cursor type');
  188.           case (AX and $3000) shr 12 of
  189.             0: Write('software');
  190.             1: Write('hardware');
  191.             2,3: Write('graphics')
  192.           end;
  193.           Caption3('no. of MDD''s');
  194.           Writeln(AX and $FF);
  195.           Caption3('interrupt rate');
  196.           case (AX and $0F00) shr 8 of
  197.             0: Write('none');
  198.             1: Write('30Hz');
  199.             2: Write('50Hz');
  200.             3: Write('100Hz');
  201.             4: Write('200Hz')
  202.           else
  203.             Write('???');
  204.           end;
  205.           Caption3('acceleration profile');
  206.           AX:=$2C;
  207.           Intr(MouseInt, Regs);
  208.           Write(BX);
  209.           if (Hi(MSVersion) > 7) or
  210.             ((Hi(MSVersion) = 7) and (Lo(MSVersion) >= 4)) then
  211.             begin
  212.             Caption3('BallPoint');
  213.             AX:=$30;
  214.             CX:=0;
  215.             Intr(MouseInt, Regs);
  216.             yesorno2(AX <> $FFFF);
  217.             end;
  218.           Writeln;
  219.           if Hi(MSVersion) >= 8 then
  220.             begin
  221.             caption3('.INI file path');
  222.             AX:=$34;
  223.             Intr(MouseInt, Regs);
  224.             while Mem[ES:DX] <> 0 do
  225.               begin
  226.               Write(Chr(Mem[ES:DX]));
  227.               Inc(DX);
  228.               end;
  229.             Writeln;
  230.             end;
  231.           If (Hi(MSVersion) > 8) or
  232.             ((Hi(MSVersion) = 8) and (Lo(MSVersion) >= $10)) then
  233.             begin
  234.             caption3('pointer - style');
  235.             AX:=$35;
  236.             BX:=$FFFF;
  237.             Intr(MouseInt, Regs);
  238.             case BH of
  239.               0: Write('normal');
  240.               1: Write('reverse');
  241.               2: Write('transparent')
  242.             else
  243.               Write('???');
  244.             end;
  245.             caption3('size');
  246.             case BL of
  247.               0: Write('small');
  248.               1: Write('medium');
  249.               2: Write('large')
  250.             else
  251.               Write('???');
  252.             end;
  253.             caption3('size change');
  254.             yesorno(CL = 1);
  255.             end;
  256.           end;
  257.         Caption3('EGA register support');
  258.         AH:=$FA;
  259.         BX:=0;
  260.         Intr($10, regs);
  261.           if BX <> 0 then
  262.           begin
  263.           Write('yes');
  264.           Caption3('version');
  265.           Writeln(unbcd(Mem[ES:BX]), decimal, addzero(unbcd(Mem[ES:BX+1])))
  266.           end
  267.         else
  268.           Writeln('no');
  269.         Caption3('Save state buffer size (bytes)');
  270.         AX:=$0015;
  271.         Intr(mouseint, regs);
  272.         Writeln(BX);
  273.         Caption3('Mickeys/pixel (horizontal)');
  274.         AX:=$001B;
  275.         Intr(mouseint, regs);
  276.         Write(BX : 5);
  277.         Caption3(' (vertical)');
  278.         Writeln(CX : 5);
  279.         Caption3('Double speed threshold');
  280.         Writeln(DX);
  281.         Caption3('Current display page');
  282.         AX:=$001E;
  283.         Intr(mouseint, regs);
  284.         Writeln(BX);
  285.         Caption3('Language');
  286.         AX:=$0023;
  287.         Intr(mouseint, regs);
  288.         if AX < $FFFF then
  289.           if BX < 9 then
  290.             Writeln(mouselang[BX])
  291.           else
  292.             unknown('language', BX, 4)
  293.         else
  294.           Writeln('N/A');
  295.         end
  296.       else
  297.         dontknow
  298.       end
  299.     else
  300.       Writeln('no')
  301.     end
  302.   end;
  303. end.