10
20
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 :