> ImgToDisk 0.10  (C) J.G.Harston $ Some routines from HADFS Filer :  Quick hack: :"Disk Image Copier" (" (2)00K, (4)00K or (6)40K disk? ";  A$=:"246",A$): A$  A$="2":size%=200  A$="4":size%=400  A$="6":size%=640 / size%=200:REM single-sided DFS style disk / size%=400:REM double-sided DFS style disk % size%=640:REM ADFS-L style disk =+size%*1024+32768 > size%=200: '"Copies 200K image to 256*10*80*1 FM disk"' > size%=400: '"Copies 400K image to 256*10*80*2 FM disk"' ? size%=640: '"Copies 640K image to 256*16*80*2 MFM disk"' = bytes/sectors/tracks/sides  : : : -bufsz%=20*256: diskrec% 256,data% bufsz% : "Source file: "in$ &"Dest. drive: "drv$:drive%= drv$ .in%=(in$): in%=0:"Can't open '"in$"'": 9 size%=200:spt%=10:FDC_Init(diskrec%,8,spt%,1,1,80) 9 size%=400:spt%=10:FDC_Init(diskrec%,8,spt%,1,1,80) 9 size%=640:spt%=16:FDC_Init(diskrec%,8,spt%,1,2,80) : ' Temp body to quickly get working:  image% size%*1024 !(ș "OS_GBPB",4,in%,image%,size%*1024 "3dummy%=fdc_access(image%,0,(size%*1024)256,2) ##in%:in%=0 $ %: &: ' head% =0 1 ( track% =0 79 ) sector%=0 9 * +< 13;sector%;":";track%;":";head%;":";drive%;" "; , byte% =0 255 - data%?byte%=#in% . byte% /N FDC_Op(data%,sector%,track%,head%,drive%,2,1,diskrec%):"- error" 0 1 sector% 2 track% 3 head% 4#in%:in%=0: 5 6: 7: 8 FDC Routines 9 ============ :: ;C FDC_Init - Initialise disk record block for passed disk shape <: =P FDC_Init(dskrec%,bps%,spt%,hds%,den%,trks%): Initialise FDC Record Block > i% ?.dskrec%?0=bps% : 2^bps bytes per sector @)dskrec%?1=spt% : sectors per track A&dskrec%?2=hds% : num of heads-1 B$dskrec%?3=den% : density 1=FM C6 i%=4 59 4:dskrec%!i%=0:: Clear disk record D/dskrec%!16=(trks%*1)*spt%*(2^bps%)*(hds%+1) E#FDC_spt%=spt% : Extern: s/t F#FDC_bps%=2^bps% : Extern: b/s G&FDC_trks%=trks% : Extern: tracks H I: J> FDC_Op - Passed absolute sector addressing information K: L4 FDC_Op(mem%,sec%,trk%,hd%,drv%,num%,op%,rec%) M3trk%=((hd%+1)*FDC_trks%*FDC_spt%+sec%)*FDC_bps% Nop%=op%+(rec%<<6) Orec%?34=drv% P?ș "XADFS_DiscOp",0,op%,trk%+(drv%<<29),mem%,256*num% op% Q=op% R: S! ------- do later --------- T: U% Passed absolute sector address: V: W: FDC_Rd(addr%,absSec%,drv%,num%):=FDC_Access(read%) X; FDC_Wr(addr%,absSec%,drv%,num%):=FDC_Access(write%) Y: Z$ FDC_Access(type%): num%=0:= [: Convert absSec% to sec/trk/head, pass to lower level \: ]r fdc_access(data%,sec%,length%,type%): IF(test%AND1) VDU4:PRINT"S:";~sec_start%,sec_start%,~length%,length% ^ length%=0:= _% sec%<1600 sec%+length%>1600 `3 fdc_access(data%,sec%,1600-sec%,type%):= aH =fdc_access(data%+256*(1600-sec%),1600,length%-(1600-sec%),type%) b c" I don't know if I need this: d# sec%<800 sec%+length%>800 e2 fdc_access(data%,sec%,800-sec%,type%):= fE =fdc_access(data%+256*(800-sec%),800,length%-(800-sec%),type%) g h& r%,hd%,dr%,reason%,disc_address% idr%=drive%: MOD 2 j3 dr%>3 =partition(data%,sec%,length%,type%) k8 sec%>1599 warning("Can't do tracks 1599+ yet"):= l(hd%=0: sec%>799 hd%=1:sec%=sec%-800 mB sec%>799 sec%=sec%-800:hd%=(sec% 10) 1:sec%=800+sec% 20 n: o&track%=(hd%*FDC_trks%*10+sec%)*256 p: q hd%=(sec%>799) AND 1 r IFsec%>799 sec%=sec%-800 sI IFsec%>799 sec%=sec%-800:hd%=(sec% DIV 10)AND 1:sec%=800+sec%DIV 20 t( track%=(hd%*FDC_trks%*10+sec%)*256 ureason%=type%+(diskrec%<<6) v$ disc_address%=track%+(dr%<<29) wSdiskrec%?34=dr%: IFtest%AND2 PRINT"Head:";hd%,"Trk:";~track%,"Sec:";sec_start% xFș"XADFS_DiscOp",0,reason%,track%+(dr%<<29),data%,256*length% r% y3 r%<>0 err%=:warning(memtostr(r%+4,100)):= z= {: |0 partition(data%,sec_start%,length%,type%) }# type%=1, read; type%=2, write ~! GBPB 1, write; GBPB 3, read , DiskChn%=0 warning(mess("Err14")):= Dș "OS_GBPB",5-type%*2,DiskChn%,data%,length%*256,sec_start%*256 X sec_start%=70 type%=1 type%=(#DiskChn%)256:data%?28=type%:data%?29=type%256 = : : :  sectors<=bufsec% - dum=fdc_access(data%,start%,sectors,1) < "SAVE "+pathname$+" "+~(data%)+" "+~(data%+length)  < dum=fdc_access(data%,start%,bufsec%,1): do first bit A "SAVE "+pathname$+" "+~(data%)+" "+~(data%+bufsec%*256)  out%= pathname$  #out%=#out% M endsec%=sectors bufsec%: endsec%=sectors/bufsec% endsec%=endsec%-1 ' saveloop%=1 endsec%: do rest N saveloop%=endsec% size=length (bufsec%*256) size = bufsec%*256 Q dum=fdc_access(data%,start%+bufsec%*saveloop%,(size+255) 256,1): 1=RD & ș "OS_GBPB",2,out%,data%,size  #in%