anchor.diff:  
   (defun ata-irq-handler (irq)
     (dolist (drive *ata-devices*)
  -    (when (eql (ata-controller-irq (ata-device-controller drive)) irq)
  -      (with-mutex ((ata-controller-access-lock controller))
  -        ;; Read the status register to clear the interrupt pending state.
  -        (sys.int::io-port/8 (+ (ata-controller-command (ata-device-controller drive))
  -                               +ata-register-status+))
  -        (condition-notify (ata-controller-irq-cvar controller))))))
  +    (let ((controller (ata-device-controller drive)))
  +      (when (eql (ata-controller-irq controller) irq)
  +        (with-mutex ((ata-controller-access-lock controller))
  +          ;; Read the status register to clear the interrupt pending state.
  +          (sys.int::io-port/8 (+ (ata-controller-command controller)
  +                                 +ata-register-status+))
  +          (setf (ata-controller-irq-delivered controller) t)
  +          (condition-notify (ata-controller-irq-cvar controller)))))))
   
   (defun init-ata-controller (command-base control-base irq)
     (let ((controller (make-ata-controller :command command-base
  
positive.code:   control
    irq
    current-channel
    (irq-cvar (make-condition-variable "ATA IRQ Notifier")))
  
  (defstruct (ata-device
               (:area :wired))
  
negative.code:       (return-from ata-write nil))
      (when (eql count 0)
        (return-from ata-write t))
      (with-mutex ((ata-controller-command-lock controller))
        (with-mutex ((ata-controller-access-lock controller))
          (when (not (ata-issue-lba28-command device lba count +ata-command-write-sectors+))
            (return-from ata-write nil))
  