XT Hard Disk Ports

 This describes the XT hard disk controller.  It is similar to most of the
 non-IBM hard disk controllers which are used in PCs.  However, there is no
 guarantee, especially considering that the AT uses a different setup all
 together.  It is safest to let the system firmware mask the differences.

   ■ The XT hard disk controller decodes ports 320H through 327H

 The controller generates interrupt level 5 (IRQ 5) after every operation
 (read, write, seek, etc.).  IRQ 5 is vectored to INT 0dH (which is also
 assigned as the seldom-used IRQ for LPT2).  INT 0dH disables the Hard Disk
 DMA and returns.

Port  Description
▀▀▀▀  ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
320H  Data register.  Write commands, read status.
      Write: Always a series of bytes, written sequentially to this port.
             The first byte is a controller command and the following bytes
             (up to 5) describe head, cylinder, sector, and a control byte
             which has a variety of definitions, too numerous for this
      Read:  When an error is sensed (port 321H, bit 1), you can write a
             Sense_Cmd sequence to this register, then read it four times to
             obtain everything the controller has to say.  The first byte
             indicates the error.  Better check the Tech Ref for this stuff.
──── ───────────────────────────────────────────────────────────────────────
321H  Write: controller reset
             Output a byte of 00H to this port to reset the controller.
      Read:  controller status register
      ║   │d│     │e│ ║
      ╙─┴─┴╥┴─┴─┴─┴╥┴─╜ bit
           ║       ╚═══► 1: 1=error has occurred
           ╚═══════════► 5: logical unit number (drive 0 or drive 1)
──── ───────────────────────────────────────────────────────────────────────
322H  Write: generate controller select pulse
             Any OUT to this port enables the controller.  Use before a cmd.
──── ───────────────────────────────────────────────────────────────────────
323H  Write: DMA and interrupt mask register
      ║  not used │i│d║
      ╙─┴─┴─┴─┴─┴─┴╥┴╥╜ bit
                   ║ ╚═► 0: 1=enable DMA, 0=don't use DMA
                   ╚═══► 1: 1=enable interrupt after ctrlr command (IRQ 5)
──── ───────────────────────────────────────────────────────────────────────
See Also: INT 13H (disk I/O)
          AT Hard Disk Ports
          Hard Disk Parameter Table
          Diskette Controller Ports
          Device Drivers
          BIOS Data Area
          Cables and Pin Outs
          I/O Port Map