anchor.diff:          :do (setf (aref fat i) cluster0
                     (aref fat (1+ i)) cluster1)
           :finally
  -         (when (> (fat-%sectors-per-fat fat12) 12)
  -           ;; 1.5 bytes * 4087 entries = 6130.5 bytes / 512 bytes per sector = 11.97 sectors
  -           (error "FAT12 file allocation table too big - max size should be <=12 actual size ~D"
  -                  (fat-%sectors-per-fat fat12)))
            (setf (fat-%fat-dirty-bits fat12) (make-array 1
                                                          :element-type '(unsigned-byte 32)
                                                          :initial-element 0))
  
positive.code: 
  (defmethod read-fat (disk (fat12 fat12) &optional fat-array)
    (loop :with fat-offset := (fat-%n-reserved-sectors fat12)
          :with file-allocation-table := (block-device-read-sector disk fat-offset (fat-%sectors-per-fat fat12))
          :with fat := (if fat-array
                           fat-array
                           (make-array (list (floor (/ (ash (length file-allocation-table) 3) 12)))))
          :for offset :from 0 :by 3 :below (- (length file-allocation-table) 2)
          :for i :from 0 :by 2
          :for byte-24 = (logior (aref file-allocation-table offset)
  
negative.code:   (* (fat-%sectors-per-cluster ffs)
       (fat-%bytes-per-sector ffs)))
  
  ;; FAT[0] = Media Type, FAT[1] = EOC
  (defun next-free-cluster (ffs fat &optional (start 2))
    (loop :for offset :from start :below (fat-%n-clusters ffs)
          :for cluster-n := (fat-value fat offset)
          :when (zerop cluster-n)
          :return offset))
  