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

    {
    >  function GetDriveID(drive: char):byte;
    >  begin
    >    with regs do
    >      begin
    >        AH := $1C;
    >        DL := ord(Upcase(drive))-64;
    >        Intr($21,regs);
    >        GetDriveID := Mem[ds:bx];
    >      end;
    >  end;

    >This interrupt (01Ch) is supposed to return 0F8h in case of a harddisk, and
    >some other value if it is a floppy. However, running OS/2, this function
    >returns 0F0h :(( My old Apricot (it's a computer!), running DOS 3.2, also
    >reports 0F0h...

      0F0H is also the code for an unknown device for Service $1C.  I
      haven't tried it but have you looked at Service $44, function $08?  My
      sources tell me that this function (DOS 3.0 up) will return 0 in AX if
      the device is removable, 1 if a fixed disk, and $0F if invalid drive.

      Hang on... I'm trying it now.  It seemed to work here.  Below is the
      sample code I used (in TP 5.5).
    }

    PROGRAM HDTest;
    {Stuart Kirschenbaum 93/12/11 Donated to the Public Domain if
      the Public actually wants it :-)  }

    USES
       DOS;

    VAR
      Is_Hard_Drive : boolean;

    FUNCTION TestHD(DriveNum : byte):boolean;
    VAR
       Regs: Registers;
    BEGIN
       With Regs DO BEGIN
          AH := $44;
          AL := $08;
          BL := DriveNum;
          Intr($21, Regs);
          IF AX = 0 THEN TestHD := false
          ELSE IF AX = 0 THEN TestHD := true;  {Note we really should test
                                                for invalid drive but this
                                                is just an example <g> }
       END;

    END;

    BEGIN {Main for testing program}

       Is_Hard_Drive := TestHD(3); {3 = Drive C a Hard Drive on my system}
       IF Is_Hard_Drive THEN
          writeln('Well that seemed to work fine... Let''s try a floppy')
       ELSE
          writeln('That didn''t work right... Damn.');
       Is_Hard_Drive := TestHD(1); {1 = Drive A, a floppy drive}
       IF Is_Hard_Drive THEN
          writeln('You should never see this message')
       ELSE
          writeln('Success');
    END.

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