INT 25 - Absolute Disk Read

	AL = logical drive number (0=A:, 1=B:, 2=C:, ...)
	CX = number of sectors to read
	   = -1 if DOS 4.x (control block pointer is in DS:BX)
	DX = starting logical sector number (see below for DOS 4.x+)
	DS:BX = pointer to data buffer
	      = pointer to control block (DOS 4.x+, see below)

	on return:
	AH = error code if CF set:
	     01  bad command
	     02  bad address mark
	     03  write protect
	     04  sector not found
	     08  DMA failure
	     10  data error (bad CRC)
	     20  controller failed
	     40  seek failed
	     80  attachment failed to respond
	AL = BIOS error code if CF set
	     00  write protect error
	     01  unknown unit
	     02  drive not ready
	     03  unknown command
	     04  data error (bad CRC)
	     05  bad request structure length
	     06  seek error
	     07  unknown media type
	     08  sector not found
	     0A  write fault
	     0B  read fault
	     0C  general failure

Control Block Format (DOS 4.x):

	Offset Size	   Description

	  00   dword  starting sector
	  04   word   number of sectors to read
	  06   dword  pointer to buffer

	- reads disk sectors into buffer at DS:BX or DS:[BX+6]
	- after calling this interrupt the flags register remains on the
	  stack and must be popped manually
	- sectors are logical sectors starting at the beginning of a
	  logical disk; each DOS partition on a drive unit is considered
	  one logical drive and has it's own logical sector numbers with
	  track 0 starting at the first track in the partition
	- this function uses logical drives, and is susceptible to ASSIGN
	- physical sector numbers can be converted to and from DOS sector
	  numbers with the following formulas:

	  dos_sector = (sector - 1) + (head * sectors_per_track) +
		       (track * sectors_per_track * num_heads)

	  physical_sector = 1 + (dos_sector  MOD  sectors_per_track)
	  physical_head = (dos_sector / sectors_per_track)  MOD  num_heads
	  physical_track = dos_sector / (sectors_per_track * num_heads)

	- see	INT 13,STATUS