Contributor: CRAIG HART

{
 > Does anyone here have code to detect if a system got ISA, VL or PCI-bus
 > ?
 > Please respond with code.

An extract of my system diagnostics tools. Have fun.. :) (Put this in SWAG if
you want...)
}

procedure getbustype;
var
  works         : boolean;
  data_seg      : word;
  data_ofs      : word;
  test          : string[4];


begin
  bustype:='';
  works:=false;

  if not works then                     { EISA }
  begin
    test:='EISA';
    test[2]:=chr(mem[$f000:$ffd9]);
    test[1]:=chr(mem[$f000:$ffda]);
    test[4]:=chr(mem[$f000:$ffdb]);
    test[3]:=chr(mem[$f000:$ffdc]);
    if test='EISA'  then
    begin
      works:=true;
      bustype:='EISA';
    end;
  end;

  if not works then                     { MCA }
  begin
    asm
      mov ah,0c0h
      int 15h
      cmp ah,0
      jnz @nope

      mov works,true

      mov data_seg,es
      mov data_ofs,bx

    @nope:
    end;
    if works then if (mem[data_seg:data_ofs+5] and 2)=2 then bustype:='MCA'
else works:=false;  end;

  if not works then                     { PCI }
  begin
    asm
      mov ax,$b101
      int $1a
      cmp ah,00
      jne @nope
      mov works,true
    @nope:
    end;
    if works then bustype:='ISA/PCI';
  end;
  if not works then bustype:='ISA';     { ISA ? }
end;