>DumpFlex :  debug%=0 (&A%=0:X%=1:os%=((&FFF4)&FF00)256 2! ctrl% 31:X%=ctrl%:Y%=X%256 <# d_path$(3):d_drv%=-1:d_chn%=0 F mem% &1FF,dmp% 15 P: Z "Flex disk image examiner" d8 "Disk image file: "in$: in$="":in$="bbcflex7.dsd" nd_path$(0)=in$:drv%=0 xfdc_info(drv%):cat(1)  ';drv%;"> ";:K$=(&DF):"D",K$) )K$="D": "Dump file: "fn$:dump(fn$) 0   cat(flg%) /"Filename.ext WDRC Size Tk:Sc Date";6; +"Filename.ext WDRC Size Tk:Sc Date" dir%=&0500:n%=0  #sec%=dir% 256:trk%=dir% 255 -A%=fdc_disk(&53,mem%,drv%,trk%,0,sec%,1) "ptr%=16:: mem%?ptr%:prentry ptr%=ptr%+24:ptr%>255 dir%=!mem% &FFFF " dir%=0: n%: , 6 prentry @prname:n%=n%+1 J (flg%1)=1:praccess(mem%?(ptr%+11));" ";h0(mem%?(ptr%+17),2)h0(mem%?(ptr%+18),2);" ";h0(mem%?(ptr%+13),2)":";h0(mem%?(ptr%+14),2);" ";prdate(mem%!(ptr%+21));" "; T (flg%1)=1:n%>1::n%=0 ^ (flg%1)=0:n%>4::n%=0 h r | 0 8 byte --- File name " 8 3 byte --- File extension 9 11 1 byte --- Attributes WDRC---- if set, protected  12 1 byte --- Not used  13 1 byte --- Start track  14 1 byte --- Start sector  15 1 byte --- End track  16 1 byte --- End sector 7 17 2 byte --- Total number of sectors (high, low) $ 19 1 byte --- Random file flag  20 1 byte --- Not used  21 1 byte --- Date month  22 1 byte --- Date day  23 1 byte --- Date year   prname 0 A%=0 10:b(mem%?(ptr%+A%));: A%=7: 46 & A%:" ";: 0^ݤprdate(A%):A%=A%&FFFFFF:=d0((A%256)255,2)+"/"+d0(A%255,2)+"/"+d0(1900+A%65536,4) :pݤpraccess(A%):="-W",2+((A%128)=0),1)+"-D",2+((A%64)=0),1)+"-R",2+((A%32)=0),1)+"-C",2+((A%16)=0),1) D: Ndump(fn$) X! out%=OPENOUT("H:\dump.bin") b%mem%?0=1:mem%?1=1:ptr%=0:addr0%=0 l v&:stx%=getbyte: stx%=2 stx%=22 @addr0%=256*getbyte+getbyte:leng%=0: stx%=2:leng%=getbyte addr% =addr0% ! h0(addr%,4)"+"h0(leng%,2)  C h0(trk%,2);":";h0(sec%,2);":";h0(ptr%,2);" ";h0(addr%,4);  stx%=2:": "; "> "; @ B%=0 15: leng%: addr%+B%=addr0%+leng%:addr0%=addr0%+leng%: 4# ptr%>255 ((mem%!0)&FFFF)=0 > CLOSE#out% H R: \ ݤgetbyte fl (ptr%255)=0:(!mem%)&FFFF:trk%=mem%?0:sec%=mem%?1:err%=fdc_disk(&53,mem%,drv%,trk%,0,sec%,1):ptr%=4 pptr%=ptr%+1:=mem%?(ptr%-1) z: "ݤd(A%,N%)=" "+A%,N%) #ݤd0(A%,N%)="00000000"+A%,N%) #ݤh0(A%,N%)="0000000"+~A%,N%) 2ݤc(A%):A%=A%127: A%<32 A%=127:="." =A% 2ݤb(A%):A%=A%127: A%<32 A%=127:=" " =A%  fdc_info(drv%) HA%=fdc_disk(&53,mem%,drv%,0,0,0,0): A%:"No disk in drive ";drv%: 2"System Information Record for ";d_title$;":" ]"Disk shape:";d(d_trk%+1,5);" tracks ";d(d_sec%,3);" sectors ";d_sid%;" sides" \"Disk used: ";d(d_used%,5);" sectors ";d(d_used%*256,8);" bytes ";d(d_used%/4,5);"K" \"Disk free: ";d(d_free%,5);" sectors ";d(d_free%*256,8);" bytes ";d(d_free%/4,5);"K" \"Disk size: ";d(d_size%,5);" sectors ";d(d_size%*256,8);" bytes ";d(d_size%/4,5);"K"  : 9ݤfdc_disk(cmd%,add%,drv%,trk%,sid%,sec%,num%): ptr% $# drv%>3:drv%=(drv%2)+(drv%1) .;(debug%8):"cmd:";h0(cmd%,2);" add:";~add%-mem%;" "; 8U(debug%8):"drv:";drv%;" trk:";trk%;" sid:";sid%;" sec:";sec%;" num:";num%;" "; B\ drv%<>d_drv%: d_chn%:#d_chn%:d_chn%=0 : Different drive, close current drive L d_chn%=0 Ve d_path$(drv%)="":=&1E : If no mount path, return Drive not present `Xd_chn%=d_path$(drv%): d_chn%=0:=&1E : No drive, return Drive not present j t\ drv%<>d_drv%:d_drv%=-1: fdc_exam(drv%):=&1E : No info, return Drive not present ~Sd_drv%=drv%: num%=0:=0 : Just refresh disk info  d_chn%=0:=&1E sec%=sec%-d_sec0% > d_sid%=1:ptr%=((sid%*80+trk%)*d_num%+sec%)*d_bps%+d_off% > d_sid%=2:ptr%=((trk%*2 +sid%)*d_num%+sec%)*d_bps%+d_off% E IF(debug%AND8):PRINT"cmd:";FNh0(cmd%,2);" add:";~add%-mem%;" "; ^ IF(debug%AND8):PRINT"drv:";drv%;" trk:";trk%;" sid:";sid%;" sec:";sec%;" num:";num%;" "; $(debug%8):"ptr:&";h0(ptr%,6)  cmd%=&4B:cmd%=1  cmd%=&53:cmd%=3  cmd%=&57:cmd%=3 C cmd%=&5B: A%=0 d_num%+2:add%!(A%*4)=(A%d_num%)*65536::=0 ' IF(debug%AND8):PRINTd_path$(drv%) i IF(debug%AND8):PRINT"cmd:";cmd%;" chn:";d_chn%;" add:";~add%-mem%;" num:";num%*d_bps%;" ptr:";~ptr%  5 cmd%<5:gbpb(cmd%,d_chn%,add%,num%*d_bps%,ptr%) =0 : (ݤfdc_exam(drv%) 2 16-26 Volume name in ASCII <# 27-28 Volume number in binary F7 29-30 Address of first data sector (Track-Sector) P6 31-32 Address of last data sector (Track-Sector) Z2 33-34 Total number of data sectors in binary d3 35-37 Current date (Month-Day-Year) in binary n2 38 Highest track number on disk in binary x6 39 Highest sector number on a track in binary #d_chn%=0 # #d_chn%+256*#d_chn%=&6B64  d_off%=#d_chn%+256*#d_chn% #d_chn%=8 d_trk%=#d_chn% d_sid%=#d_chn% 2d_sec%=(#d_chn%-d_off%) (d_trk%*d_sid%*256)   d_off%=0 d_trk%=#d_chn% 2560  d_sid%=1  d_sec%=10  &d_num%=d_sec%:d_bps%=256:d_sec0%=1 #d_chn%=&221 !d_free%=256*#d_chn%+#d_chn% "#d_chn%=&226 ,d_trk% =#d_chn% 6d_sec% =#d_chn% @# d_sec%>19:d_sid%=2 d_sid%=1 Jd_num% =d_sec% d_sid% Td_size%=(d_trk%+1)*d_sec% ^d_used%=d_size%-d_free% h#d_chn%=&210:d_title$="" r,:A%=#d_chn%: A%:d_title$=d_title$+A% |A%=0 d_title$=12 =0 : #gbpb(A%,chn%,addr%,num%,ptr%) 2) X%!5<1: