> ImgToDisk 0.10  (C) J.G.Harston $ Some routines from HADFS Filer (: 2H:"Disk Image Copier"''"Copies 400k image of 256/10/80/2 FM disks"' FDC_Op - Passed absolute sector addressing information X: b3ݤFDC_Op(mem%,sec%,trk%,hd%,drv%,num%,op%,rec%) l3trk%=((hd%+1)*FDC_trks%*FDC_spt%+sec%)*FDC_bps% vop%=op%+(rec%<<6) rec%?34=drv% ?ș "XADFS_DiscOp",0,op%,trk%+(drv%<<29),mem%,256*num% op% =op% : ! ------- do later --------- : % Passed absolute sector address: : 9ݤFDC_Rd(addr%,absSec%,drv%,num%):=FDC_Access(read%) :ݤFDC_Wr(addr%,absSec%,drv%,num%):=FDC_Access(write%) : "ݤFDC_Access(type%):num%=0:= : Convert absSec% to sec/trk/head, pass to lower level :  qݤ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 *2 笤fdc_access(data%,sec%,1600-sec%,type%):= 4H =fdc_access(data%+256*(1600-sec%),1600,length%-(1600-sec%),type%) > H" I don't know if I need this: R"sec%<800 sec%+length%>800 \1 笤fdc_access(data%,sec%,800-sec%,type%):= fE =fdc_access(data%+256*(800-sec%),800,length%-(800-sec%),type%) p z& r%,hd%,dr%,reason%,disc_address% dr%=drive%: MOD 2 2dr%>3 =partition(data%,sec%,length%,type%) 7sec%>1599 warning("Can't do tracks 1599+ yet"):= (hd%=0: sec%>799 hd%=1:sec%=sec%-800 B sec%>799 sec%=sec%-800:hd%=(sec% 10) 1:sec%=800+sec% 20 : &track%=(hd%*FDC_trks%*10+sec%)*256 :  hd%=(sec%>799) AND 1  IFsec%>799 sec%=sec%-800 I IFsec%>799 sec%=sec%-800:hd%=(sec% DIV 10)AND 1:sec%=800+sec%DIV 20 ( track%=(hd%*FDC_trks%*10+sec%)*256 reason%=type%+(diskrec%<<6) $ disc_address%=track%+(dr%<<29) Sdiskrec%?34=dr%: IFtest%AND2 PRINT"Head:";hd%,"Trk:";~track%,"Sec:";sec_start% Fș"XADFS_DiscOp",0,reason%,track%+(dr%<<29),data%,256*length% r% $3 r%<>0 err%=:warning(memtostr(r%+4,100)):= .= 8: B/ݤpartition(data%,sec_start%,length%,type%) L# type%=1, read; type%=2, write V! GBPB 1, write; GBPB 3, read `+DiskChn%=0 warning(mess("Err14")):= jDș "OS_GBPB",5-type%*2,DiskChn%,data%,length%*256,sec_start%*256 tWsec_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 ( 2 #in% <