anchor.diff:    #root-entries @ 20 * bytes/sector @ // - sectors/cluster @ /
     dup #clusters !
     dup ff5 < IF drop c ELSE fff5 < IF 10 ELSE 20 THEN THEN fat-type !
  -cr ." FAT" base @ decimal fat-type @ . base !
  +  base @ decimal base !
   
     \ Starting offset of first fat.
     #reserved-sectors @ bytes/sector @ * fat-offset !
  
positive.code:   next-cluster @ read-cluster REPEAT false ELSE true THEN ;
  : find-path ( dir-cluster name len -- cluster file-len true | false )
    dup 0= IF 3drop false ."  empty name " EXIT THEN
    over c@ [char] \ = IF 1 /string ."  slash " RECURSE EXIT THEN
    [char] \ split 2>r find-file 0= IF 2r> 2drop false ."  not found " EXIT THEN
    r@ 0<> <> IF 2drop 2r> 2drop false ."  no dir<->file match " EXIT THEN
    r@ 0<> IF drop 2r> ."  more... " RECURSE EXIT THEN
    2r> 2drop true ."  got it " ;
    
  : do-super ( -- )
    0 200 read-data
  
negative.code:   r@ pos-in-data +!  r@ current-pos +!  pos-in-data @ #data @ = IF
    next-cluster @ ?dup IF read-cluster 0 pos-in-data ! THEN THEN r> ;
  : read ( adr len -- actual )
    file-len @ min                \ len cannot be greater than file size
    dup >r BEGIN dup WHILE 2dup read dup 0= ABORT" fat-files: read failed"
    /string ( tuck - >r + r> ) REPEAT 2drop r> ;
  : load ( adr -- len )
  