1next=0:max=5 2DIM lastx(max),lasty(max) 3FOR I%=0 TO max:lastx(I%)=0:lasty(I%)=0:NEXT 10moveabs=4 20linerel=1 30TRIrel=linerel+80 40moverel=0 50DIM ox 3,oy 3 60DIM Code 511 70PROCassemble 80PROC_init 90PROC_main 100END 110DEFPROC_cursor 120 MOVE OX,OY 130 VDU 128 140ENDPROC 150 160DEFPROC_init 170OX = 0:OY = 0:X = 0:Y = 0:!ox=OX:!oy=OY 180MODE1 190 VDU 5,18,3,1,23,128,0,24,60,126,24,24,24,0 200ENDPROC 210 220DEFPROC_track 221LOCAL I% 230 X=ADVAL(1): Y=ADVAL(2) 240 X = (1024 - (X DIV 64)) * 1280 DIV 1024: Y = Y DIV 64 250 X = X DIV 16 * 16: Y = Y DIV 20 * 20 260lastx(next)=X:lasty(next)=Y 261X=0:Y=0 262next=(next+1) MOD (max+1) 270FOR I%=0 TO max 280 X=X+lastx(I%) 290 Y=Y+lasty(I%) 300NEXT 310X=X DIV (max+1): Y=Y DIV (max+1) 320ENDPROC 330 340DEFPROC_main 341down=FALSE 350 REPEAT 360 A%=USR(cursor) 370 !ox = X:!oy = Y 380 REPEAT PROC_track 390 IF ((ADVAL(0) AND 1) <> 0) AND (NOT down) THEN A%=USR(cursor):down=TRUE 391IF((ADVAL(0) AND 1) = 0) THEN down=FALSE 392UNTIL X<>!ox OR Y<>!oy 400 A%=USR(cursor) 410 !ox = X:!oy = Y 420 UNTIL FALSE 430ENDPROC 440DEFPROCassemble 450FOR Pass=0 TO 2 STEP 2 460OSWRCH=&FFEE 470P%=Code 480[OPT Pass 490.cursor 500] 510PROCplot(moveabs):PROCvar(ox):PROCvar(oy) 520PROCplot(linerel):PROCconst(50):PROCconst(0) 530PROCplot(linerel):PROCconst(0):PROCconst(-50) 540PROCplot(linerel):PROCconst(-50):PROCconst(0) 550PROCplot(linerel):PROCconst(0):PROCconst(50) 560 [OPT Pass:Rts:] 570NEXT Pass 580ENDPROC 590 600DEFPROCvar(Addr) 610[OPT Pass 620 Lda Addr 630 Jsr OSWRCH 640 Lda Addr+1 650 Jsr OSWRCH 660] 670ENDPROC 680 690DEFPROCvdu(C%) 700[OPT Pass 710 Lda #C% 720 Jsr OSWRCH 730] 740ENDPROC 750 760DEFPROCplot(plotcode) 770 PROCvdu(25) 780 PROCvdu(plotcode) 790ENDPROC 800 810DEFPROCconst(X%) 820X% = (X% AND &FFFF) 830 PROCvdu(X% MOD 256) 840 PROCvdu(X% DIV 256) 850ENDPROC