0 > USBtoDsk45 v0.45 28-Dec-2018 J.G.Harston : v0.20 - Manually sends data 256*max% bytes at a time K v0.30 - Uses machine code USB transfer, dynamically skips disk errors (@ v0.40 - Copies DFS/ADFS/LVFS, allows size to be overridden 2J v0.41 - Selects source FS by command, keeps FS selected for transfer usbfile" ? "***WARNING*** THIS WILL COMPLETELY OVERWRITE YOUR DISK"' 3max%=(--2048)256:oldfs%=fs: max%<2: &87: 2 ctrl% 31,data% 256*max%-1:X%=ctrl%:Y%=X%256 usb_Init: :end: : ""Source USB image file: "in$ $"Dest. filing system: "type$ #"Dest. drive: "drv%  type$:thisfs%=fs : fs$,fn$,A$,retry%  fs$="*" fs$=thisfs% 4 fs$="*": "Unsupported filing system":oldfs: I 4,disk,7F,3, 8,adfs,72,1, 10,adfs,62,1, 16,hadfs,5A,1, 29,disk,77,1 E DISK ADFS LVFS HADFS RAM  *,*,*,* : "osw%=("&"+A$):dsize%=size ,K"Total disk sectors (&";~dsize%;"): &";:""A$:A$<>"":dsize%=("&"+A$) 6Vdsize%>&FFF:"This is a hard drive - continue? "A$:A$=(A$&DF): A$<>"Y":end: @! : -1:end: abort: Jusb_Sync:usb_Flush T%A%=usb_Cmd("IPA"):usb_Flush:13 ^ usb_Cmd("IPA"):abort: h# usb_Cmd("OPR "+in$):abort: r usb_Sync |: sect%=0:thisnum%=max%  3num%=max%: sect%+num%>dsize%:num%=dsize%-sect% ! thisnum%max%:thisnum%=max% sect%>=dsize% : 13:"Closing";14; usb_Sync:usb_Flush ! usb_Cmd("CLF "+in$):abort &usb_Cmd("SUD") 0 usb_Sync : oldfs D13:"Done";17 N X: b oldfs l)oldfs%:"FX143,18,"+oldfs%:oldfs%=0 v :  abort #usb_Flush:usb_Cmd("CLF "+in$) usb_Cmd("SUD"):usb_Flush  end: :  end  oldfs:  : ݤwrite(sect%,num%)  try%=retry%   A13:"Writing ";h0(drv%,1);":";h0(sect%,6);"+";h0(num%,2); #err%=attempt(num%):try%=try%-1   try%<1 err%=0 * err%:num%=(num%+2)4 4 err%=0 num%<1 >=num%-(num%<1) H: Rݤattempt(num%) \Hfn$="disk":err%=disk(data%,&4B,drv%,sect%10,sect%10,num%,osw%,1) f9fn$="adfs":err%=adfs(data%,10,drv%,sect%,num%,osw%) p10:n%=10-sec% D:X%?0=drv%+den%*24+8+2*(trk%80):X%!1=addr%:X%?5=3-7*(cmd%>127) $AX%?6=cmd%:X%?7=trk%80:X%?8=sec%:X%!9=n%&1E20:A%=osw%:&FFF1 .YA%=X%?(7+X%?5):A%<>&10:addr%=addr%+n%*256:num%=num%-n%:sec%=(sec%+n%)10:trk%=trk%+1 8A%<>0num%<1:=A% B+ݤadfs(addr%,cmd%,drv%,sect%,num%,osw%) LDX%?0=1:X%!1=addr%:X%?5=cmd%:X%?6=drv%*32+((sect%&1F0000)65536) V9X%?7=((sect%&FF00)256):X%?8=sect%:X%!9=num%:X%!11=0 `A%=osw%:&FFF1:=?X% j,ݤhadfs(addr%,cmd%,drv%,sect%,num%,osw%) tB!X%=&600:X%!2=addr%:X%!6=sect%:X%?9=drv%:X%?10=num%:X%?11=cmd% ~A%=osw%:&FFF1:=X%?12 ݤdisk_err(A%,D%,S%,N%) MA%:"Disk error ";h0(A%,2);" at ";h0(D%,1);":";h0(S%,6);"+";h0(N%,2) =A% :  I/O routines  ============ %ݤh0(A%,N%):="00000000"+~A%,N%) 6ݤfx(A%,X%): Y%:Y%=X%256:=((&FFF4)&FFFF00)256 :  USB access routines  =================== +usb_Sync:A%=?usb_D:(?usb_S 128): !usb_Flush:(?usb_S 128):  2'"Flushing USB";::A%=?usb_D:(?usb_S 128) $A%=+20:>A%:(?usb_S 128): Vݤusb_Err:?usb_result%=13 usb_result%?1=":":=0 "USB Error: "$usb_result%:= (;usb_Cmd(A$):usb_Sync:usb_WrStr(A$+13):usb_RdStr: 2(ݤusb_Cmd(A$):usb_Cmd(A$):=usb_Err <3usb_WrStr(A$): A%=1 A$:(?usb_S 64)=0 F?usb_D=A$,A%,1):: P?usb_RdStr:A%=usb_result%-1:A%=A%+1:?A%=usb_Rd:?A%=13: Z.usb_Wr(A%):(?usb_S 64)=0:?usb_D=A%: d'ݤusb_Rd:(?usb_S 128)=0:=?usb_D nusb_Init xusb_D=&FCF8:usb_S=&FCF9 +usb_result%=usb_result%: usb_result%:  usb_result% 63,mc% 99  P=0 1:P%=mc%:[OPT P*2 .usb_RdData 'TAY:LDA #data% 255:STA usb_RdLp+4 *LDA #data% 256:STA usb_RdLp+5:LDX #0 5.usb_RdLp:JSR usb_Rd:STA data%,X:INX:BNE usb_RdLp 'INC usb_RdLp+5:DEY:BNE usb_RdLp:RTS 4.usb_Rd:BIT usb_S:BPL usb_Rd2:BIT &FF:BPL usb_Rd .usb_Rd2:LDA usb_D:RTS .usb_WrData 'TAY:LDA #data% 255:STA usb_WrLp+1 *LDA #data% 256:STA usb_WrLp+2:LDX #0 $.usb_WrLp:LDA data%,X:JSR usb_Wr 0.usb_WrLp2:LDA usb_D:BIT usb_S:BPL usb_WrLp2 INX:BNE usb_WrLp "'INC usb_WrLp+2:DEY:BNE usb_WrLp:RTS ,4.usb_Wr:BIT usb_S:BVC usb_Wr2:BIT &FF:BPL usb_Wr 6.usb_Wr2:STA usb_D:RTS @]: J: