anchor.diff:          ((or (>= byte-offset file-length)
                (>= cluster-n (last-cluster-value ffs)))
            (when (> file-length byte-offset)
  -           (do ((cluster-n (next-free-cluster fat 3)
  -                           (next-free-cluster fat (1+ cluster-n)))
  +           (do ((cluster-n (next-free-cluster ffs fat 3)
  +                           (next-free-cluster ffs fat (1+ cluster-n)))
                   (byte-offset byte-offset (+ byte-offset bytes-per-cluster)))
                  ((>= byte-offset file-length)
                   (setf (fat-value ffs fat last-cluster) (last-cluster-value ffs))
  
positive.code:         :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))
  
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))
  