anchor.diff:    controller
     channel
     cdb-size
  -  cdb)
  +  initialized-p)
  +
  +(defun ata-error (controller)
  +  "Read the error register."
  +  (sys.int::io-port/8 (+ (ata-controller-command controller)
  +                         +ata-register-error+)))
   
   (defun ata-status (controller)
     "Read the status register."
  
positive.code:                 ;; 4GB limit.
                  (< mem-addr (+ +physical-map-base+ (* 4 1024 1024 1024))))
             (funcall dma-fn 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 (convert-to-pmap-address bounce-phys)))
               (when (eql what :write)
                 (%fast-page-copy bounce-virt mem-addr))
               (funcall dma-fn controller device lba count bounce-phys)
  
negative.code: 
  (defun ata-read-write (device lba count mem-addr what dma-fn pio-fn)
    (let ((controller (ata-device-controller device)))
      (ensure (>= lba 0))
      (ensure (>= count 0))
      (ensure (<= (+ lba count) (ata-device-sector-count device)))
      (cond
        ((ata-device-lba48-capable device)
         (when (> count 65536)
  