Converting Drive Letters to MS-DOS INT 13H Disk Drive Numbers

Article translations Article translations
Article ID: 62571 - View products that this article applies to.
This article was previously published under Q62571
Expand all | Collapse all

SUMMARY

The BIOS Interrupt 13H uses a zero-based number for floppy disk drives ("A"= 0, "B"= 1, and so on), and a zero-based number with the high bit (bit 7) set for hard disks ("C"= 80H, "D"= 81H, and so on).

MORE INFORMATION

You can use the following algorithm to convert any logical drive letter (ASCII) to the drive numbers that Interrupt 13H uses:

  1. Identify the block device with Interrupt 21H IOCTL function 44H, subfunction 0dH, minor code 60H (Get Device Parameters), as either a floppy disk drive or a hard disk drive by checking the returned parameter block "device type" field byte at offset +1. A value of 0-4 or 7 indicates that it is a floppy disk drive. A value of 5 indicates that it is a hard disk drive.
  2. If the device is a floppy disk drive, subtract 1 from the BL drive number input to the function Get Device Parameters to make it zero based, or take the uppercase ASCII logical drive letter and subtract the value of "A". For example:
          Drive letter "A" - "A" = 0,  "B" - "A" = 1, and so on
    						
  3. If the device is a hard disk drive, you need to interpret the hard disk partition table to differentiate between a primary partition and a logical partition because the ordering of logical drive numbers does not necessarily reflect the physical order and corresponding BIOS physical drive number.

    For more information, query on the following keywords:
    prod(msdos) and driver.sys and order
    Once you know how MS-DOS assigns logical drive letters on system initialization, you need to address the correct physical hard disk and compute the offset (starting sector number) of any logical drive by using the starting sector values supplied in the hard disk's partition table. These starting sector numbers would be supplied to the BIOS Int 13H function to access those sectors representing a logical drive. "Advanced MS-DOS Programming" by Ray Duncan has more information on the boot record and partition tables.
       Example
       -------
    
       HD 1: Bios# 80H      HD 2: Bios# 81H      HD X: Bios# X...
    
       C: (primary)         E: (logical)
       -----------          -----------
       D: (logical)         F: (logical)
    						
    To access logical drive D, address HD 1: Bios# 80H, but sectors starting at logical partition D:.

Properties

Article ID: 62571 - Last Review: November 16, 2006 - Revision: 2.1
APPLIES TO
  • Microsoft MS-DOS 3.1
  • Microsoft MS-DOS 3.2 Standard Edition
  • Microsoft MS-DOS 3.21 Standard Edition
  • Microsoft MS-DOS 3.3 Standard Edition
  • Microsoft MS-DOS 3.3a
  • Microsoft MS-DOS 4.0 Standard Edition
  • Microsoft MS-DOS 4.01 Standard Edition
  • Microsoft MS-DOS 5.0 Standard Edition
  • Microsoft MS-DOS 5.0a
  • Microsoft MS-DOS 6.0 Standard Edition
  • Microsoft MS-DOS 6.2 Standard Edition
  • Microsoft MS-DOS 6.21 Standard Edition
  • Microsoft MS-DOS 6.22 Standard Edition
Keywords: 
KB62571
Retired KB Content Disclaimer
This article was written about products for which Microsoft no longer offers support. Therefore, this article is offered "as is" and will no longer be updated.

Give Feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com