10MODE 1 11plotcode=85 20REM Xbase, Ybase are the address of the cell which you get if 30REM you ask for cell 0,0 40PROCmain 50END 60 70DEFPROC_set_colour(Colour1,Colour2,Colour3,Colour4) 80 GCOL 0,64 90 100 pair0 = (Colour1 AND 2) OR ((Colour2 AND 2) DIV 2) 110 pair0 = pair0 * 4 + pair0 120 pair1 = ((Colour1 AND 1)*2) OR (Colour2 AND 1) 130 pair1 = pair1 * 4 + pair1 140 pair2 = (Colour3 AND 2) OR ((Colour4 AND 2) DIV 2) 150 pair2 = pair2 * 4 + pair2 160 pair3 = ((Colour3 AND 1)*2) OR (Colour4 AND 1) 170 pair3 = pair3 * 4 + pair3 180 190 VDU pair0*16 OR pair1 200 VDU pair2*16 OR pair3 210 VDU pair0*16 OR pair1 220 VDU pair2*16 OR pair3 230ENDPROC 240 250DEFPROC_box(Xl,Yb,Xr,Yt) 251IF Xl=Xr OR Yb=Yt THEN ENDPROC 260IF Xl < 0 OR Xr < 0 THEN Xl=Xl+80:Xr=Xr+80 261IF Yb < 0 OR Yt < 0 THEN Yb=Yb+64:Yt=Yt+64 263IF Yt>64 THEN Yt=Yt-64:Yb=Yb-64 280 Xl = Xl*(1280 DIV 80):Xr = Xr*(1280 DIV 80)-(1280 DIV 320) 290 Yb = Yb*(1024 DIV 64):Yt = Yt*(1024 DIV 64)-(1024 DIV 256) 300 MOVE Xl,Yb 310 MOVE Xl,Yt 320 PLOT plotcode,Xr,Yb 330 PLOT plotcode,Xr,Yt 340ENDPROC 350 360 370DEFPROCscroll 380 390Screen=&3000-(Xbase*8)+((Ybase DIV 2)*640) 400IF Screen<&3000 THEN Screen=Screen+&5000 410IF Screen>=&8000 THEN Screen=Screen-&5000 420 430*FX19 440VDU 23;12,Screen DIV 2048;0;0;0 450VDU 23;13,Screen MOD 2048 DIV 8;0;0;0 460ENDPROC 470 480 490DEFFNjoyleft 500AD=(ADVAL(1) DIV 64) 501Xstep=1:IF AD>512+256+128+64 THEN Xstep=10 502=AD > 512+256 510 520DEFFNjoyright 530AD=(ADVAL(1) DIV 64) 531Xstep=1:IF AD<64 THEN Xstep=10 532=AD < 256 540 550DEFFNjoydown 560AD=(ADVAL(2) DIV 64) 561Ystep=2:IF AD<16 THEN Ystep=16 562=AD < 256 570 580DEFFNjoyup 590AD=(ADVAL(2) DIV 64) 591Ystep=2:IF AD>512+256+128+64+32+16 THEN Ystep=16 592=AD > 512+256 600 610 620DEFPROCmain 630 PRINT TAB(0,0);"?"; 640 Xbase = 0: Ybase = 0 650 REPEAT 660 IF FNjoyleft THEN PROCmoveleft 670 IF FNjoyright THEN PROCmoveright 680 IF FNjoyup THEN PROCmoveup 690 IF FNjoydown THEN PROCmovedown 700 IF (ADVAL(0) MOD 2) = 1 THEN PROCNewBox(39,30,41,34) 710 UNTIL FALSE 720ENDPROC 730 740DEFPROCmoveleft 741PROCwipe(0,0,Xstep,64) 750 IF Xbase = 0 THEN PROCmoveup:Xbase = 80-Xstep ELSE Xbase = Xbase-Xstep 760 PROCscroll 770ENDPROC 780 790DEFPROCmoveright 791PROCwipe(80-Xstep,0,80,64) 800 IF Xbase = 80-Xstep THEN PROCmovedown:Xbase = 0 ELSE Xbase = Xbase+Xstep 810 PROCscroll 820ENDPROC 830 840DEFPROCmoveup 841PROCwipe(0,64-Ystep,80,64) 850 IF Ybase = 64-Ystep THEN Ybase = 0 ELSE Ybase = Ybase+Ystep 860 PROCscroll 870ENDPROC 880 890DEFPROCmovedown 891PROCwipe(0,0,80,Ystep) 900 IF Ybase = 0 THEN Ybase = 64-Ystep ELSE Ybase = Ybase-Ystep 910 PROCscroll 920ENDPROC 930 1010 1020DEFPROCA(XL,YB,XR,YT) 1040PROC_box(XL-Xbase,YB-Ybase,XR-Xbase,YT-Ybase) 1050ENDPROC 1060 1070DEFPROCB(XL,YB,XR,YT) 1090PROC_box(XL-Xbase,YB-Ybase,XR-Xbase,YT-Ybase) 1100ENDPROC 1110 1120DEFPROCC(XL,YB,XR,YT) 1140PROC_box(XL-Xbase,YB-Ybase+2,XR-Xbase,YT-Ybase+2) 1150ENDPROC 1160 1170DEFPROCD(XL,YB,XR,YT) 1190PROC_box(XL-Xbase,YB-Ybase+2,XR-Xbase,YT-Ybase+2) 1200ENDPROC 2000 2010DEFPROCNewBox(XL,YB,XR,YT) 2020 IF XR <= Xbase THEN PROCCD(XL,YB,XR,YT):ENDPROC 2030 IF XL >= Xbase THEN PROCAB(XL,YB,XR,YT):ENDPROC 2031 IF YB >= Ybase THEN PROCAD(XL,YB,XR,YT):ENDPROC 2032 IF YT <= Ybase THEN PROCBC(XL,YB,XR,YT):ENDPROC 2040 PROCCD(XL,YB,Xbase,YT) 2050 PROCAB(Xbase,YB,XR,YT) 2060ENDPROC 2070 2080DEFPROCCD(XL,YB,XR,YT) 2090 IF YT <= Ybase-2 THEN PROCC(XL,YB,XR,YT):ENDPROC 2100 IF YB >= Ybase-2 THEN PROCD(XL,YB,XR,YT):ENDPROC 2200 PROCC(XL,YB,XR,Ybase-2) 2210 PROCD(XL,Ybase-2,XR,YT) 2220ENDPROC 2230 2240DEFPROCAB(XL,YB,XR,YT) 2250 IF YT <= Ybase THEN PROCB(XL,YB,XR,YT):ENDPROC 2260 IF YB >= Ybase THEN PROCA(XL,YB,XR,YT):ENDPROC 2270 PROCB(XL,YB,XR,Ybase) 2280 PROCA(XL,Ybase,XR,YT) 2290ENDPROC 2300 2310DEFPROCAD(XL,YB,XR,YT) 2320 IF XR <= Xbase THEN PROCD(XL,YB,XR,YT):ENDPROC 2330 IF XL >= Xbase THEN PROCA(XL,YB,XR,YT):ENDPROC 2340 PROCD(XL,YB,Xbase,YT) 2350 PROCA(Xbase,YB,XR,YT) 2360ENDPROC 2370 2380DEFPROCBC(Xl,YB,XR,YT) 2390 IF XR <= Xbase THEN PROCC(XL,YB,XR,YT):ENDPROC 2400 IF XL >= Xbase THEN PROCB(XL,YB,XR,YT):ENDPROC 2410 PROCC(XL,YB,Xbase,YT) 2420 PROCB(Xbase,YB,XR,YT) 2430ENDPROC 5000 5010DEFPROCwipe(XL,YB,XR,YT) 5020 GCOL 2,0 5021 PROCNewBox(XL,YB,XR,YT) 5030 GCOL 0,3 5040ENDPROC