[Back to COMM SWAG index] [Back to Main SWAG index] [Original]

    {
    > I'm looking for a pascal V6 program to detect the UART-type installed.
    }

    program ComType;

    { Detect the type/presence of a comport-chip.
      Norbert Igl, 5/92 }

    uses
      crt;

    Const ComPortText :
        Array[0..4] of String[11] =
             ('    N/A    ',
              '8250/8250B ',
              '8250A/16450',
              '   16550A  ',
              '   16550N  ');
        IIR     = 2;
        SCRATCH = 7;

    Var   PortAdr : Array[1..4] of Word absolute $40:0;

    function ComPortType(ComX:byte):byte;

    BEGIN
      ComPortType:=0;
      if (PortAdr[ComX] =0)
      or (Port[PortAdr[ComX]+ IIR ] and $30 <> 0)
         then exit;                                       {No ComPort !}
      Port[PortAdr[ComX]+ IIR ] := 1;                     {Test: enable FIFO}
      if (Port[PortAdr[ComX]+IIR] and $C0) = $C0          {enabled ?}
      then ComPortType := 3
      else If (Port[PortAdr[ComX]+IIR] and $80) = $80     {16550,old version..}
           then ComPortType := 4
           else begin
           Port[Portadr[ComX]+SCRATCH]:=$AA;
           if Port [Portadr[ComX]+SCRATCH]=$AA            {w/ scratch reg. ?}
               then ComPortType:= 2
               else ComPortType:= 1;
           end;
    END;

    var com : byte;

    begin
      clrscr;
      writeln('COMPORT  Chiptest':75);
      writeln('Freeware by Norbert Igl, Germany':75);
      writeln;
      for com := 1 to 4 do
         writeln('COM:',com,':  ', ComPortText[ComPortType(com)]);
    end.

[Back to COMM SWAG index] [Back to Main SWAG index] [Original]