anchor.diff:      (loop
          (condition-wait (ata-controller-irq-cvar controller)
                          (ata-controller-access-lock controller))
  -       (when (or (ata-controller-irq-delivered controller)
  -                 (ata-controller-hotunplug controller))
  +       (when (ata-controller-irq-delivered controller)
            (return)))))
   
   (defun ata-pio-data-in (device count mem-addr)
  
positive.code:       (return-from ata-read (values nil :too-many-sectors)))
      (when (eql count 0)
        (return-from ata-read t))
      (with-mutex ((ata-controller-command-lock controller))
        (with-mutex ((ata-controller-access-lock controller))
          (cond ((<= +physical-map-base+
                     mem-addr
                     ;; 4GB limit.
                     (+ +physical-map-base+ (* 4 1024 1024 1024)))
                 (ata-read-dma controller device lba count (- mem-addr +physical-map-base+)))
                ((<= (* count (ata-device-block-size device)) +4k-page-size+)
                 ;; Transfer is small enough that the bounce page can be used.
                 (let* ((bounce-frame (ata-controller-bounce-buffer controller))
                        (bounce-phys (ash bounce-frame 12))
                        (bounce-virt (+ +physical-map-base+ bounce-phys)))
                   (ata-read-dma controller device lba count bounce-phys)
                   (%fast-page-copy mem-addr bounce-virt)))
                (t ;; Give up and do a slow PIO transfer.
                 (ata-read-pio controller device lba count mem-addr))))))
    t)
  
  (defun ata-write-pio (controller device lba count mem-addr)
  
negative.code:     (loop
         ;; HPIOI0: INTRQ_wait
         (ata-intrq-wait device)
         ;; HPIOI1: Check_Status
         (multiple-value-bind (drq timed-out)
             (ata-check-status device)
  