v >0v>01p6v >0>*:11p10g-!v 2> >?1v^:+2<7>?1^v_v#!-g00<# 0p >2>03g*^>+^ >> v^< 03 ^ < <^" "p1< | p0>g10g01g11g 10p00p11p0^v$< 0+ > #| 0# _ v>0v 11 v1g00" >|"<>12p65+`^v:< 0 0* >0g4+p 00gv:v+g20g10<>|<2 p5 v6g10p +66<+>11g12 gv0:p 5| g01!< 1v0+1g20p+<0p0 >^#6 g^_12g^>3v>g12g^ g21 >+p11^ ^p20:%g<^01+g20<^< row 0=current pos row 1=new pos row 2=offset row 3=block size (width only (26), height can be calculated) 1. swap old & new coords (dark red) 2. push space (dark red) 3. enter write routine (dark red) 4. pick new location (light blue) 5. enter write routine (light blue) 6. overwrite own entry point (bright green) 7. write > at self (bright green) 8. write | at dest (bright green) 9. load targ y & negate (bright green) 10. load current y (bright green) 11. exit via | (bright green) # write routine: 1. zero x,y offset (black) 2. dup stack (orange) 3. if zero then load a cell from source (orange) 4. else dup again (dark blue) 5. store cell at targ (dark blue) 6. load x pos, inc, round, dup, store (dark green) 7. if !0, go to 2 (yellow) 8. load y pos, inc, round, dup, store (dark green) 9. if !0, go to 2 (yellow) 10. compare top (dark green) 11. if zero, return to #6 (dark green) 12. else return to #4 (dark green) Startup code needs to write current pos, write block size, then enter at #4