Contributor: PHIL NICKELL             

{
From: PHIL NICKELL
Subj: Disk Ready Function

 Here are a couple of ways that are about equivalent.  Which you use
 depends on the info you might want about the drive.  These calls
 actually spin up the disk and get info from the boot sector or the fat
 table, so they also incidentally check if the disk is ready and ok.
 Unfortunately, DOS doesn't really have a reasonable way to tell you if
 the disk is ready without it actually spinning up the drive.
}
  var r:registers;

    Get Allocation Table Info
  ...on entry
         r.ah := $1ch;
         r.dl := drivenum;  { 0=default, 1=A, 2=B etc}
         msdos(r);
  ...on return
         r.al = sectors per cluster
         r.cx = bytes per physical sector
         r.dx = clusters per disk
         ds:bx = pointer to media descriptor byte

     Get Free Disk Space Info
  ...on entry
         r.ah := $36;
         r.dl := drivenum;  { 0=default, 1=A, 2=B etc}
         msdos(r);
  ...on return
         r.ax = sectors per cluster /or/
              = $ffff if error.
         r.bx = number of available clusters
         r.cx = bytes per sector
           dx = clusters on the drive