10 REM > BLib.DiskIO 1.03
   20 REM Disk I/O functions
   30 :
   40 DEFFNdisk(addr%,cmd%,drv%,trk%,sec%,num%,den%):LOCALfs%,n%
   50 fs%=FNfs:IFfs%<>4:*FX143,18,4
   60 REPEAT:n%=num%:IFsec%+n%>10:n%=10-sec%
   70   REPEAT:X%?0=drv%+den%*24+8+2*(trk%DIV80):X%!1=addr%:X%?5=3-7*(cmd%>127)
   80     X%?6=cmd%:X%?7=trk%MOD80:X%?8=sec%:X%!9=n%OR&1E20:A%=127:CALL&FFF1
   90   A%=X%?(7+X%?5):UNTILA%<>&10:addr%=addr%+n%*256:num%=num%-n%:sec%=(sec%+n%)MOD10:trk%=trk%+1
  100 UNTILA%<>0ORnum%<1:IFfs%<>4:OSCLI"FX143,18,"+STR$fs%
  110 =A%
  120 :
  130 DEFFNscsi(addr%,cmd%,drv%,sect%,num%):IFsect%>&1FFFFF:=&21
  140 LOCALfs%:fs%=FNfs:IFfs%<>8:*FADFS
  150 X%?0=0:X%!1=addr%:X%?5=cmd%:X%?6=drv%*32+((sect%AND&1F0000)DIV65536)
  160 X%?7=((sect%AND&FF00)DIV256):X%?8=sect%:X%!9=num%:X%!11=0
  170 A%=&72:CALL&FFF1:A%=?X%:IFfs%<>8:OSCLI"FX143,18,"+STR$fs%
  180 =A%
  190 :
  200 DEFFNlvfs(addr%,cmd%,drv%,sect%,num%):IFsect%>&1FFFFF:=&21
  210 LOCALfs%:fs%=FNfs:IFfs%<>10:*FX143,18,10
  220 X%?0=0:X%!1=addr%:X%?5=cmd%:X%?6=drv%*32+((sect%AND&1F0000)DIV65536)
  230 X%?7=((sect%AND&FF00)DIV256):X%?8=sect%:X%!9=num%:X%!11=0
  240 A%=&62:CALL&FFF1:A%=?X%:IFfs%<>10:OSCLI"FX143,18,"+STR$fs%
  250 =A%
  260 :
  270 DEFFNfs:LOCALA%,E%,Y%:=(USR&FFDA)AND&FF
  280 :
  290 DEFFNscsi_err(A%,S%)
  300 IFA%:PRINT"Disk error ";FNh0(A%,2);" (";MID$("fddhdd",(A%AND64)/64+1,3);") at ";FNh0(S%,6)
  310 =A%
  320 :
  330 DEFFNdisk_err(A%,S%)
  340 IFA%:PRINT"Disk error ";FNh0(A%,2);" at ";FNh0(S%,4)
  350 =A%
  360 :