> DiskToImg 0.10  (C) J.G.Harston $ Some routines from HADFS Filer (: 2 Quick hack: <:"Disk Image Creater" F/ size%=200:REM single-sided DFS style disk P+size%=400: double-sided DFS style disk Z% size%=640:REM ADFS-L style disk d=+size%*1024+32768 n@ size%=200: '"Creates 200k image of 256*10*80*1 FM disks"' x@ size%=400: '"Creates 400k image of 256*10*80*2 FM disks"' A size%=640: '"Creates 640k image of 256*16*80*2 MFM disks"' ? bytes/sectors/tracks/sides  : : : -bufsz%=20*256: diskrec% 256,data% bufsz% : '"Source drive: "drv$:drive%= drv$ "Dest. file: "out$ 2out%=(out$): out%=0:"Can't open '"out$"'": 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 3dummy%=fdc_access(image%,0,(size%*1024)256,1) ")ș "OS_GBPB",2,out%,image%,size%*1024 ,#out%:out%=0 6*"SetType "+out$+" B22":"Stamp "+out$ @ J: T: ^ head% =0 1 h track% =0 79 r sector%=0 9 | < 13;sector%;":";track%;":";head%;":";drive%;" "; N FDC_Op(data%,sector%,track%,head%,drive%,1,1,diskrec%):"- error"  byte% =0 255  #out%,data%?byte%  byte%   sector%  track%  head% #out%:out%=0: 0 OS."SetType "+out$+" 123":OS."Stamp "+out$  : :  FDC Routines  ============ &: 0C FDC_Init - Initialise disk record block for passed disk shape :: DP FDC_Init(dskrec%,bps%,spt%,hds%,den%,trks%): Initialise FDC Record Block N i% X.dskrec%?0=bps% : 2^bps bytes per sector b)dskrec%?1=spt% : sectors per track l&dskrec%?2=hds% : num of heads-1 v$dskrec%?3=den% : density 1=FM 6 i%=4 59 4:dskrec%!i%=0:: Clear disk record /dskrec%!16=(trks%*1)*spt%*(2^bps%)*(hds%+1) #FDC_spt%=spt% : Extern: s/t #FDC_bps%=2^bps% : Extern: b/s &FDC_trks%=trks% : Extern: tracks  : > FDC_Op - Passed absolute sector addressing information : 4 FDC_Op(mem%,sec%,trk%,hd%,drv%,num%,op%,rec%) 3trk%=((hd%+1)*FDC_trks%*FDC_spt%+sec%)*FDC_bps% op%=op%+(rec%<<6) rec%?34=drv% ?ș "XADFS_DiscOp",0,op%,trk%+(drv%<<29),mem%,256*num% op%  =op% :  ! ------- do later --------- *: 4% Passed absolute sector address: >: H: FDC_Rd(addr%,absSec%,drv%,num%):=FDC_Access(read%) R; FDC_Wr(addr%,absSec%,drv%,num%):=FDC_Access(write%) \: f$ FDC_Access(type%): num%=0:= p: Convert absSec% to sec/trk/head, pass to lower level z: r fdc_access(data%,sec%,length%,type%): IF(test%AND1) VDU4:PRINT"S:";~sec_start%,sec_start%,~length%,length%  length%=0:= - IF sec%<1600 AND sec%+length%>1600 THEN = IF NOTFNfdc_access(data%,sec%,1600-sec%,type%):=FALSE K =FNfdc_access(data%+256*(1600-sec%),1600,length%-(1600-sec%),type%)  ENDIF " I don't know if I need this: + sec%<80*spt% sec%+length%>80*spt% 6 fdc_access(data%,sec%,80*spt%-sec%,type%):= Q =fdc_access(data%+256*(80*spt%-sec%),80*spt%,length%-(80*spt%-sec%),type%)  & r%,hd%,dr%,reason%,disc_address% dr%=drive%: MOD 2 3 dr%>3 =partition(data%,sec%,length%,type%) B IF sec%>1599 PROCwarning("Can't do tracks 1599+ yet"):=FALSE 4hd%=0: sec%>(80*spt%)-1:hd%=1:sec%=sec%-80*spt% $Z sec%>(80*spt%)-1:sec%=sec%-80*spt%:hd%=(sec% spt%) 1:sec%=80*spt%+sec% (2*spt%) .: 8(track%=(hd%*FDC_trks%*spt%+sec%)*256 B: L hd%=(sec%>799) AND 1 V IFsec%>799 sec%=sec%-800 `I IFsec%>799 sec%=sec%-800:hd%=(sec% DIV 10)AND 1:sec%=800+sec%DIV 20 j( track%=(hd%*FDC_trks%*10+sec%)*256 treason%=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)):= = : 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 = :     Now transfer data: ( length%<>0 2 length%=(length%+255)256 < length% <= bufsec% F6 ș "OS_File",&FF,pathname$,data%,0: Load data P9 dum=fdc_access(data%,startsec%,length%,2): 2=WR Z d in%= pathname$ n( saveloop%=0 length% bufsec% xX saveloop%=length% bufsec% size=(length% bufsec%)*256 size = bufsec%*256 0 ș "OS_GBPB",4,in%,data%,size ,,,not M dum=fdc_access(data%,startsec%+saveloop%*bufsec%,(size+255)256,2)   #in%   Qfiles_actioned%=files_actioned%+1:setOpt(fileraction%,3, files_actioned%,) free:ForceActionRedraw  : : :  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) 6 out%= pathname$ @ #out%=#out% JM endsec%=sectors bufsec%: endsec%=sectors/bufsec% endsec%=endsec%-1 T' saveloop%=1 endsec%: do rest ^N saveloop%=endsec% size=length (bufsec%*256) size = bufsec%*256 hQ dum=fdc_access(data%,start%+bufsec%*saveloop%,(size+255) 256,1): 1=RD r& ș "OS_GBPB",2,out%,data%,size |  #out%