anchor.diff:  
   (defmethod read-fat (disk (fat16 fat16) &optional fat-array)
     (loop :with fat-offset := (fat-%n-reserved-sectors fat16)
  -        :with file-allocation-table := (block-device-read-sector disk fat-offset (fat-%sectors-per-fat fat16))
  +        :with fat-sectors := (ceiling (* 2 (fat-%n-clusters fat16)) (fat-%bytes-per-sector fat16))
  +        :with file-allocation-table := (block-device-read-sector disk fat-offset fat-sectors)
           :with fat := (if fat-array
                            fat-array
                            (make-array (list (ash (length file-allocation-table) -1))))
  
positive.code:   (* (fat-%sectors-per-cluster ffs)
       (fat-%bytes-per-sector ffs)))
  
  (defun next-free-cluster (fat &optional (start 0))
    (loop :for offset :from start :below (length fat)
          :for cluster-n := (fat-value fat offset)
          :when (zerop cluster-n)
          :return offset))
  
negative.code:           (fat-%sectors-per-track ffs) (sys.int::ub16ref/le sector 24)
            (fat-%n-heads/sides ffs) (sys.int::ub16ref/le sector 26)
            (fat-%n-hidden-sectors ffs) (sys.int::ub32ref/le sector 28)
            (fat-%n-sectors32 ffs) (sys.int::ub32ref/le sector 32)
            (fat-%n-clusters ffs) (+ (compute-cluster-count sector) 2))))
  
  (defclass fat12 (fat-base)
    ())
  