, > ReadMDFS - Copy MDFS floppy to image @ >DiskEd Universal Disk Editor for any Arc or MSDOS format B A.P.Look 23/2/88 (Archive mag. 3/88) - Extended T.B. 28/1/89 (B 640k discaddr corrected, 800E (type%=11) added T.B. 17/5/89 2 1:6  window(58,1,10,1,4,"Size:") 5 window(52,1,1,1,4,"s") &window(55,1,1,1,4,"r") 00 : window(70,1,8,1,4,"Drive:") Dwindow(1,3,1,1,4,"*") Nwindow(4,3,5,1,4,"Quit ") X+window(11,3,9,1,4,136+" Track "+137) b*window(22,3,8,1,4,136+" Head "+137) l-window(32,3,10,1,4,136+" Sector "+137) v4window(44,3,25,1,4,"Track: Head: Sector: ") window(71,3,8,1,4,"") window(1,5,78,26,4,"") 21-5*(gs>1):13,5)"Bufr:";gs*bpsec/1024;"K";  oddline 0:14,1)nm$;64,1); $ statedsize:;statedsize 1024; 1 type%=11:"E"; statedsize:"K"; " ??"; )77,1);dr%;: sr$>32:5:31,5)sr$;  update    update >0:50,3);track;" ";58,3);head;67,3)" ";67,3);sector; :da$="0000000"+~discaddr(head,sector,track,type%),8)  type%=9:da$="0000000"+~("&"+da$+(-(track*heads+head+1)*bpsec)),8): "real" disc addr. Disc addr act.used pretends sptrk=10 71,3)da$;   * 4 oddline >18,6)40; H0,1:5: 64,848 R*"Addr:";16;"Hex:";37;"ASCII:";:4: \ f p" window(x,y,sx,sy,d,string$) zx=x*16:y=1024-(y+sy)*32 sx=sx*16:sy=sy*32 (0,7:ȓ Ȑ x-3*d,y-3*d,sx+6*d,sy+6*d *0,0:ȓ x-2*d,y-2*d,sx+4*d,sy+4*d *x/16,(1024-y)/32-1-(sy 64))string$;    inputcmds ) Copy from floppy to disk image file "ImageFile$="adfs::4.$.OutFile"  ImageOut%=(ImageFile$)  buttons=4  5 ImageOff%=0 1023:#ImageOut%,mem%?ImageOff%: 'dx=38 : 'point' to '->' button /da$<>"000C7C00":select: Read next sector $% V.7:IFGET=0:CLOSE#ImageOut%:END .da$="000C7C00" 85 ImageOff%=0 1023:#ImageOut%,mem%?ImageOff%: B#ImageOut% L V `: j t ~   ȗ x,y,buttons - dz=0: dz=143 dz=142:page:buttons=0  buttons<>0 x,y)<>4 dx=x/16:dy=32-y/32  dy<2 buttons=4 0 dx>70:drive:dx=0 dx<7:star():dx=58  dx>58 $ gs=1:gs=bfsz/bpsec+.5 gs=1  menu:next(0):dx=59   dx<51:initialise  dx>51 dx<57:bfr    dy>7 dy<30  dx<7 buttons<>2:page ( dx>10 dx<76 2 buttons=2:move < buttons=4:change F P Z* (dy)=3 dx<79 buttons<>2:select d dy>5 dy<6.5 dx<8 nG buttons=1:start=0 start=gs*bpsec-lines*&10: start<0:start=0 x display(start,lines,-1)     select  dx>70 : inpaddr  dx>43 : input  dx>37 : dir=1 dir=-1 B dx>31 : save:sector+=dir*(1-(gs-1)*(buttons=4)):next(dir)  dx>26 : dir=1 dir=-1 ( dx>21 : save:head+=dir:next(dir)  dx>16 : dir=1 dir=-1 ) dx>10 : save:track+=dir:next(dir)  dx>3 : leave  dx>0 : star() update:dx=0:dy=0  " , change 6dx=(dx):dy=(dy) @ dx>59:text: dx<57:hex J T ^ text h ptr(0) r *FX21 | ! pos=(dx-60)+(dy-7)*16+start 1 data=mem%?pos: data<32 data>=127:data=46  data$=data  132:7  dx,dy)data$; / :b=0:ȗ x,y,buttons: b<>-1 buttons=1  b<>-1  b<>data: changed=  mem%?pos=b ; display(start,1,dy) : 675:dx=60:dy+=1  . dy=30 buttons=1 (dy=23 type%*gs=8) $ buttons=1:display(start,1,dy)  ptr(1)  & 0 hex : ptr(0) D *FX21 N X (dx-10)3=2:dx+=1 b# pos=(dx-10)/3+(dy-7)*16+start l data=mem%?pos v0 pos=pos: data=data &10 data=data &F  data$=~data  132:7  dx,dy)data$;  :b=0:ȗ x,y,buttons 1 (b>64 b<71) (b>47 b<58) buttons=1  buttons<>1  b<>data:changed=  pos=pos + data=(mem%?pos &F)+("&"+b)*&10  ( data=(mem%?pos &F0)+("&"+b)   mem%?pos=data 2 display(start,1,dy) : 656:dx=10:dy+=1   . dy=30 buttons=1 (dy=23 type%*gs=8) *$ buttons=1:display(start,1,dy) 4 ptr(1) > H R move \dy=32-y 32:dy1=dy flim=bpsec*gs-lines*&10 pȕ buttons=2 z d=-(dydy1 ((d=0 start>0) (d=1 startlim buttons=4:buttons=0  buttons<>1 buttons<>4: d=(buttons-1) + d:len=(lim-start) 16 len=start 16 $ȕ len>0:scroll(d):len-=1 .6ȗ x,y,buttons: buttons=0 -129=255:len=0:*FX21 8 B L V scroll(d) ` d=0:start-=&10 j display(start+d*&170,1,d+2) t d=1:start+=&10 ~  leave save  0:("FX4 0"):   star(x) *FX15 *FX4 28,1,29-x,78,7 135:0:   '$ 4 x:help: ::"*"oscli$:(oscli$): oscli$="" : display(start,lines,1) dx=0:dy=0:*FX4 2 ( 2 < inpaddr F$4:71,3)8;71,3);:get(8,1E9) P a$="" Z da$; d n fac%=("&"+a$)(9*bpsec)+1 xJ : Conv. "real" MSDOS disk addr to one pretending sptrk=10 (see 600) ; type%=9:a$="0000000"+~((fac%*bpsec)+"+&"+a$),8)  "save: a$<>"":hst(("&"+a$)) next(0):update   drive 0flop=1:hard=0:ș "XADFS_Drives" ,flop,hard  flop+hard=2  a$=(1-3*(hard>0)-dr%)  $ 4:77,1)1;77,1);:get(1,7)  a$="":;dr%;   save  a$<>"":dr%=a$:blk%?34=dr% " , 6 input @*4:50,3)" ";50,3);:get(2,tracks) J# a$="":tk=track:;tk;: tk=a$ T%58,3)" ";58,3);:get(1,heads) ^" a$="":hd=head:;hd;: hd=a$ h%67,3)" ";67,3);:get(2,sptrk) r$ a$="":sr=sector:;sr;: sr=a$ |$save:track=tk:sector=sr:head=hd next(0):update    get(len,limit) a$=""  # b$=:b=b$: b>="a":b=b &DF + b$=127 a$<>0:a$=a$,a$-1):127 * limit=1E9: b>="A" b<="F":b=48 1 b>="0" b<="9" a$<>len:a$+=b$: b$; b=13 # a$>=limit:ĩa$,127);:a$=""    save  changed: &84:18,6)"Do you wish to save changes? [Y] or [N]"; 0selected= : D ȗ x,y,buttons N dx=x 16:dy=31-y 32 X buttons=4 dy=6 b# dx=48 dx=55:selected= l v) selected: sr$=82:sr$,6)="stored" %oddline: sr$>32:5:31,5)sr$; 9 dx=48: track=0: head=0: sector<2:adjustchecksum < dx=48:discop(2,head,sector,track,bpsec*gs):changed= #0::ȗ x,y,buttons: buttons=0    adjustchecksum 0 type%=9 (type%=10 sector>0) type%=11: Acs(mem%)=mem%?&FF:type%*gs=8 cs(mem%+&100)=mem%?&1FF: 89:18,6)"FS map checksum(s) - adjust? [Y] or [N]"; +selected=::ȗ x,y,buttons: buttons=0   ȗ x,y,buttons  dx=x 16:dy=31-y 32  buttons=4 dy=6 # dx=48 dx=55:selected=  * selected:oddline 4B dx=48:mem%?&FF=cs(mem%): sector=0:mem%?&1FF=cs(mem%+&100) > dx=48: H R cs(m%) \ t%=0:c%=0 f< a%=m%+&FE m% -1:t%+=?a%+c%:c%=-(t%>&FF):t%=t%&FF: p=t% z  next(dir) *FX14 6 ) type%=9: dir=0: sector=0:sector=1  type%=8 -ȕ sector>=sptrk:sector-=sptrk:track+=1: (ȕ sector<0:sector+=sptrk:track-=1: ,ȕ track>=tracks:track-=tracks:head+=1: &ȕ track<0:track+=tracks:head-=1:  head>=heads:head-=heads  head<0:head+=heads  6ȕ sector>=sptrk:sector-=sptrk+(type%=9):head+=1: 3 type%=9:ȕ sector<1:sector+=sptrk-1:head-=1: 'ȕ sector<0:sector+=sptrk:head-=1: )ȕ head>=heads:head-=heads:track+=1: $ȕ head<0:head+=heads:track-=1: $! track>=tracks:track-=tracks . track<0:track+=tracks 8 B6 diskerr=0:discop(1,head,sector,track,bpsec*gs) L6id$="["+nm$+"] "+track+":"+head+":"+sector+" (" V2id$=id$+(gs*bpsec/1024)+"K)"+" ",28) `&display(start,lines,-1):changed= jdx=0:*FX13 6 t ~  discaddr(h,s,t,type%)  type%=8 "h=((h*tracks+t)*sptrk+s)*bpsec  !h=((t*heads+h)*sptrk+s)*bpsec  =h   hst(addr) ;addr=addr bpsec:sector=addr sptrk:addr=addr sptrk  type%=8 *track=addr tracks:head=addr tracks > head>heads-1:hst(discaddr(heads-1,sector,track,type%))   (head=addr heads:track=addr heads @ track>tracks-1:hst(discaddr(head,sector,tracks-1,type%)) ( 2 < F discop(cmd,h,s,t,b) PG type%>9:batch=blk%!16-discaddr(h,s,t,10) batch=(sptrk-s)*bpsec Zdest=mem%:diskerr=0 dȕ b>0 diskerr=0 n: dad=discaddr(h,s,t,10)(dr%<<29): batch>b:batch=b xG ș "XADFS_DiscOp",,(blk%<<6)+cmd,dad,dest,batch diskerr,,,last  dest+=batch:b-=batch * type%>9:batch=blk%!16:h=0:s=0:t=0 G type%=9:batch=9*512:s=1:h+=1: h=heads:h=0:t+=1: t=tracks:t=0 H type%=8:batch=16*256:s=0:t+=1: t=tracks:t=0:h+=1: h=heads:h=0  5 last1): gs>1:gs=bfsz/1024+.5 /bpsec=1024:sptrk=5:tracks=80:heads=2:nm$="" 8 Q=0 99:blk%?Q=0::A%=mem%:B%=0:C%=A%+bfsz: zero Gblk%?0=10:blk%?1=sptrk:blk%?2=heads:blk%?3=2: density (single N/A) 6blk%!16=sptrk*bpsec*tracks*heads:blk%!64=&20000000 blk%?34=dr%  "Dș "XADFS_DiscOp",,(blk%<<6)+1,1024 dr%<<29,mem%,512 diskerr ,K "1024" causes read from sect 1 on any type of disc!! (because of blk) 6$hugo%="Hugo":type%=0 @7 mem%!1=!hugo%:type%=10 mem%!257=!hugo%:type%=8 J; type%=0: ?mem%=&E9 (?mem%=&EB mem%?2=&90):type%=9 TA type%=0:(mem%!21 &FFFFFF)=&C80:statedsize=&C8000:type%=11 ^- type%=11: N=26 35:nm$+=(mem%?N):: hF (type%=0) diskerr:gs=1:type%=10:statedsize=0:nm$="Not Ident.": r type%=9 |! N=3 10:nm$+=(mem%?N): 4 statedsize=(mem%!11 &FFFF)*(mem%!19 &FFFF) E sector=1:blk%!16=statedsize*10/9:sptrk=10: 10 not 9 !! & statedsize<=1024*400:tracks=40  ? ș "XADFS_DiscOp",,(blk%<<6)+1,dr%<<29,mem%,512 diskerr 4 diskerr:gs=1:statedsize=0:nm$="Not ident.": 4 N=&F7 &FB:nm$+=(mem%?N)+(mem%?(N+&FF)): H statedsize=(mem%!252 &FFFF)*256: statedsize<=1024*400:tracks=40  type%=8:sptrk=16 4 bpsec=2^type%:blk%!16=sptrk*bpsec*tracks*heads  Dbpsec=2^type%:blk%?0=type%:blk%?1=sptrk: gswas:gs=bfsz/bpsec+.5    display(start,lines,code) + code>6:1,code);:start+=(code-7)*&10 &( code<6:28,1,29,78,7,30: code<0: 0* code=2:11: scroll down :( code=3:31,0,22,10: scroll up D 0:135 N/ type%*gs=8 start=0 lines>16:lines=16 Xfinish=start+lines*&10-1 b mem=start finish &10 l hex$="":ascii$="" v offset=0 15 , ((offset+1)&13)=0:k$=140 k$=" " $ h$=~(?(mem%+mem+offset))+k$  h$=2:h$="0"+h$  a$=(?(mem%+mem+offset))  a$>127:a$=(a$-128) " a$<" " a$>=127:a$="."  hex$+=h$:ascii$+=a$   mem$=~mem  ȕ mem$<3:mem$="0"+mem$:  ȕ mem$<6:mem$=" "+mem$:  mem$;3;hex$;2;ascii$; & mem H R \ bfr f dx=54: p. dx<54:sr$="Stored "+id$:B%=mem%:A%=bmem% z7 dx>54:sr$,6)="Recall":B%=bmem%:A%=mem%:changed= C%=A%+bfsz: copy & A%=mem%:display(start,lines,-1) 5:31,5)sr$;:0    ptr(x) ("POINTER "+x) ' x=1:ȗ x,y,b: y<848:ȗ 320,848    help :ȗ x,y,z: z=0:*FX15 s0,0)"To move around the disc click mouse ""select"" button on one of the arrows"'"of Track, Head, or Sector." '"Alternatively, click on the box with current values of Track, Head, Sector"'"or the next box, which is ""Absolute Sector Address"" and enter new value(s)." "Pressing only, leaves an existing value unchanged. If data has been"'"changed, reply to ""Save?"" message by a click on [Y] or [N]." E'"Change Drive similarly. (No entry needed on a 2-drive system)" $B'"Click on * box to enter commands. Finish with only." .}'"To edit data, click ""select"" on hex or text and enter new hex or text."'"To finish press or click ""adjust""." 8Y'"To scroll display use Page Up/Down keys, click ""select"" or ""adjust"" on Addr:" BW"column or";:1:" Addr:";:0:" or drag with ""menu"" button over the data area." LH'"To reset for a new disc, click on ";:1:"Universal ";:0:"box." VN'"s/r to store/recall sector data to/from aux. buffer. Use with caution." `I'"Clicking on Size box treats sectors as clusters of ";bfsz/1024;"K" j>"The cluster size (bfsz) can be altered in the program."; t:ȗ x,y,z:(0>-1) z ~   assem  X=0 2 2 P%=mcode:[OPT X H.copy; A%=to, B%=from, C%=end_to+1 (all word-aligned) LDR R3,[R1],#4 STR R3,[R0],#4 CMP R0,R2:BCC copy MOV PC,R14 I.zero; A%=to, B%=0, C%=end_to+1 (only C% word-aligned) STRB R1,[R0],#1 S R4,R0,#3:BNE zero .z2  STR R1,[R0],#4 CMP R0,R2:BCC z2 MOV PC,R14 (]: 2