A: There are several
methods to do this. Here is one option.
(* Is a drive a CD-ROM with MSCDEX driver installed *)
function CDROMFN (drive : char) : boolean;
var regs : registers;
begin
cdromfn := false;
if swap(DosVersion) < $0200 then exit;
drive := UpCase(drive);
if (drive < 'A') or (drive > 'Z') then exit;
FillChar (regs, SizeOf(regs), 0);
regs.cx := ord(drive) - ord('A');
regs.ax := $150B;
Intr ($2F, regs);
cdromfn := (regs.ax <> 0) and (regs.bx = $ADAD);
end; (* cdromfn *)
The other relevant $2F interrupt functions you can use are $1500,
$1501, and in particular $150D.