4 ----------------------------------------------  CLONE : Disk Copier 4 ---------------------------------------------- (( param 12, sectab 39, data 256*10-1 2osword=&FFF1 < 7 F;begin : get source drive and dest drive P5howmany : how many tracks on source Z*insert : get user ready d n T%=0 maxtrack% x seek track 0 on source  seek0(sdrive%)  $ read sectors IDs from source  sectorids(T%)  $ if sectors found, clone them  param?10 = 0:clone  0 0,22);133;" cloning complete "   clone ! establish lowest sector num  lowest  * set source track register to logical "track(sdrive%, ?sectab) , 6" read the data for this track @read(?sectab) J T" if drives are the same, swap ^ sdrive%=ddrive%:swapo h r seek track 0 on dest |seek0(ddrive%)  ' copy source format to dest format format(T%)  ( set dest track register to logical track(ddrive%,?sectab)  # copt source data to dest data write(?sectab)  " if drives are the same, swap  sdrive%=ddrive%:swapi    begin , find out source and destination drives & head 0 : 0,5);38," ") D0 0,5);134;"enter source drive (0-3) >"; N " " sdrive% X sdrive%>-1 sdrive%<4 b l 0,7);38," ") v5 0,7);134;"enter destination drive (0-3) >";  " " ddrive%  ddrive%>-1 ddrive%<4    display ' display the track being processed  head & 0,5);134;" drive";130;sdrive% % 134;" physcial track ";130;T%  param?10<>0:  00,8);134;"phys"  00,9);134;"sect"  06,8);134;"log "  06,9);134;"trck"   12,8);134;"head"  18,8);134;"log "   18,9);134;"sect" * 24,8);134;"size" 4@%=3 > I%=0 9 H J%=I%+10 R 02,J%);130;I% \ 08,J%);sectab?(4*I%+0) f 14,J%);sectab?(4*I%+1) p 20,J%);sectab?(4*I%+2) z 26,J%);sectab?(4*I%+3)    format(track%) & format dest disk to match source 0param?0 = ddrive% : dest drive number +param!1 = sectab : sector table 3param?5 = &05 : number of parameters 2param?6 = &63 : format command code 4param?7 = track% : physical track number (param?8 = 21 : gap3 size 0:del$="delete data marks"  4,21);130;del$  res%=0: 4 4,22);133;"read: bad result = &";~param?10:   sectorids(track%) ' read sector IDs from source track 2param?0 = sdrive% : source drive number +param!1 = sectab : sector table 3param?5 = &03 : number of parameters 3param?6 = &5B : read sector IDs code 3param?7 = track% : logical track number param?8 = 0 0param?9 = 10 : number of sectors  A%=&7F & X%=param 0Y%=X% 256 : osword D display N param?10=0: X1 2,44);133;"ids: bad result = &";~param?10 b l vseek0(drive%)  seek to track 0 $param?0 = drive% : drive )param!1 = -1 : no address 3param?5 = 1 : number of parameters 0param?6 = &69 : seek command code ¶m?7 = 0 : track 0  A%=&7F  X%=param Y%=X% 256  osword  param?8=0: 2 2,44);133;"seek0: bad result = &";~param?8    swapi  swap back to source disk  head *7 0,5);134;"insert source disk in drive ";sdrive% 4/ 0,8);134;"press SPACE when ready to go" > H (100)=32 R head \ f p swapo z# swap back to destination disk  head < 0,5);134;"insert destination disk in drive ";ddrive% / 0,8);134;"press SPACE when ready to go"   (100)=32  head   track(drive%,to%)  alter track register 0param?0 = &FF : use current drive )param!1 = -1 : no address 3param?5 = 2 : number of parameters 3param?6 = &7A : write track reg code % pick the correct track register # for drive 0/2, register = &12 $# for drive 1/3, register = &1A .!param?7 = &12+8*(drive% 2) 8/param?8 = to% : new track number B A%=&7F L X%=param VY%=X% 256 ` osword j param?9=0: t4 2,44);133;"track: bad result = &";~param?9: ~  write(track%) / copy data from source track to dest track 0param?0 = ddrive% : dest drive number *param!1 = data : data buffer 3param?5 = &03 : number of parameters  pick correct write code " if not deleted data, use &4B  if deleted data, use &4F )param?6 = &4B : write code  del%<>0:param?6=&4F 3param?7 = track% : logical track number -param?8 = lowsec% : logical sector