####################
# Read Disk Sector #
####################

System programming:
-------------------

(Int 13h, ah=2)
in 1f7 until BSY cleared
out 1f2, AL                            # number of sectors
out 1f3, cl (bits 0-5)                 # starting sector number
out 1f4, ch                            # cylinder number bits 0..7, 0 based
out 1f5, cl (bits 6,7) & dh (bits 6,7) # cyl, bits 8..9, 10..11
out 1f6, dh (bits 0..3) --> bits 0..3  # head number
         dh (bits 4..5) --> ???        # head number
         dl (bit 0) --> bit 4          # drive number
out 1f7, 0x20                          # read sectors command normal



Drive response:
---------------

* drive sets the busy bit in Status Reg to 1
* if command parameters are wrong:
  > drive sets the aborted-command bit in the Error register and
    error bit in the Status register to 1.
  > Drive also sets the busy bit in the Status register to 0.
  > Drive then generates an interrupt to the system.
* else:
  > drive executes an implied seek to desired track and
    reads sectors into sector buffer
  > when sector buffer is filled and the data is ready to be
    transferred, the drive sets the data-request bit to 1, sets
    the busy bit to 0, and generates an interrupt.
  > on a single-sector transfer, after the system has transferred
    the data, the drive sets the data-request bit and the busy bit to 0.
  > on a multiple-sector transfer, after the system has transferred
    the first sector of data, the drive sets the data-request bit to 0,
    and the busy bit to 1.  When each subsequent sector is ready to be
    transferred, the drive sets the data-request bit to 1, the busy bit to 0,
    and generates an interrupt.  When the system has tranferred the last sector,
    the drive sets the data-request bit and busy bit to 0.

