Contributor: STUART KIRSCHENBAUM { > 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} 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.