1 REM Ins{nd av Bengt Holgersson <559> 1986-02-02 13.28.27
10 REM +------------------------------+
20 REM ! H|guppl|snings grafikrutiner !
30 REM ! f|r er som har en ABC80 och !
40 REM ! en printer med HR-grafik !
50 REM ! Testat p} EPSON MX80II & III !
60 REM ! Uppl|sning 256x256 punkter !
70 REM ! Origo i nedre v{nstra h|rnet !
80 REM ! (som ABC800) !
85 REM ! VER 850202 (Ritar p} sk{rmen)!
90 REM +------------------------------+
100 REM A$()=GRAFIKMINNE
110 REM N%=FLAGGA F\R NEGATIV RITNING
120 REM I%=LOOPVARIABEL
130 REM A%=ADRESS TILL GRAFIKMINNE
140 REM X%,Y%=KOORDINATER F\R GRAFIK
150 REM Z%=SLASKVARIABEL (FNx%,CALL)
160 REM
170 REM >> INITIERING <<
180 REM ________________
190 DIM A$(31%)=256% : REM M}ste vara f|rsta variabel
200 N%=0% : REM N%<>0% => Rita vitt p} svart bakgrund
210 FOR I%=0% TO 31%
220 A$(I%)=STRING$(256%,N%<>0%)
230 NEXT I%
240 GOSUB 720 : REM L{s in maskinspr}ksprogram
250 IF N% POKE 63781%,47%,166%
260 A%=PEEK(65065%)+SWAP%(PEEK(65066%))
270 A%=PEEK(A%+4%)+SWAP%(PEEK(A%+5%))
280 A%=PEEK(A%+2%)+SWAP%(PEEK(A%+3%))
290 POKE 63750%,A%,SWAP%(A%) : REM Adress till A$(0%)
300 DEFFNP%=CALL(63744%,X%+SWAP%(Y%)) : REM FGPOINT
310 DEFFNL%=CALL(63747%,X%+SWAP%(Y%)) : REM FGLINE
320 REM
330 REM DEMO Rita spiraler
340 REM Detta {r bara en demo. Det st}r var och en fritt att anv{nda
341 REM dessa rutiner till n}got annat skojigt!!
342 REM Se bara till att X% och Y% h}ller sig inom omr}det 0-255.
343 REM
350 ONERRORGOTO 350 : ; INP(4%)CHR$(12%)'SPIROGRAF' : ;
360 ; 'Hypo- eller Epicycloid:'; : GET V$ : V$=CHR$(ASC(V$) AND 95%) : IF (V$<>'H' AND V$<>'E') GOTO 350 ELSE ; V$
370 ; 'Fasta cirkeln diameter:'; : INPUT D1
380 ; 'Roterande cirkelns diameter:'; : INPUT D2
390 IF V$='H' IF D2255 ; 'F]R EJ PLATS !!!' : GOTO 360
420 Q=D1/D2 : V%=1%
430 F=ABS(Q*V%-INT(Q*V%+.5)) : IF F>.01 V%=V%+1% : GOTO 430
440 ; 'Antal varv:'V%
450 ; 'Antal punkter per varv:'; : INPUT P%
460 ; 'ok (J)'; : GET T$ : ; : IF (ASC(T$) AND 95%)=78% GOTO 350
470 ; CHR$(12%) : FOR R%=0% TO 22% : ; CUR(R%,0%)CHR$(151%); : NEXT R%
480 U=1/P% : G=(D1+D2)/D2 : H=(D1-D2)/D2 : V=0 : GOSUB 560 : Z%=FNP%
490 FOR V1%=0% TO V%-1%
500 FOR V2=0 TO 1+U/2 STEP U
510 V=2%*PI*(V1%+V2) : GOSUB 560 : Z%=FNL%
520 NEXT V2 : NEXT V1%
530 ; CUR(23%,0%)'Skall det skrivas ut p} printer (N)'; : GET T$ : IF (ASC(T$) AND 95%)<>74% GOTO 200
540 GOSUB 620
550 END
560 IF V$='E' GOTO 580
570 X=(D1-D2)*COS(V)+D2*COS(H*V) : Y=(D1-D2)*SIN(V)-D2*SIN(H*V) : GOTO 590
580 X=(D1+D2)*COS(V)-D2*COS(G*V) : Y=(D1+D2)*SIN(V)-D2*SIN(G*V)
590 X%=X/2+128%+.5 : Y%=Y/2+128%+.5
600 RETURN
601 REM SLUT DEMO
610 REM
620 REM >> SUBRUTIN Skriv ut grafikminnet <<
630 REM ____________________________________
640 OPEN 'PR:' ASFILE 1%
650 ; #1,CHR$(15%); : IF V$='H' ; #1%,'Hypo'; ELSE ; #1%,'Epi';
660 ; #1,'cycloid D1 ='D1' D2 ='D2' P ='P%
670 ; #1%,CHR$(18%,27%,65%,8%);
680 FOR I%=31% TO 0% STEP -1% : ; #1%,CHR$(27%,75%,0%,1%)A$(I%) : NEXT I%
690 ; #1%,CHR$(27%,65%,12%);
700 RETURN
710 REM
720 REM >> SUBRUTIN L{gg in maskinspr}ksprogrammet <<
730 REM ___________________________________________________________
740 POKE 63744%,195%,8%,249%,195%,42%,249%,0%,0%,237%,83%,49%,250%,213%,205%,57%,250%
750 POKE 63760%,122%,203%,58%,203%,58%,203%,58%,42%,6%,249%,25%,230%,7%,60%,71%,175%
760 POKE 63776%,55%,203%,23%,16%,252%,0%,182%,119%,209%,201%,205%,12%,249%,42%,49%,250%
770 POKE 63792%,235%,34%,49%,250%,62%,1%,50%,53%,250%,50%,54%,250%,124%,146%,50%,52%
780 POKE 63808%,250%,48%,10%,237%,68%,50%,52%,250%,62%,255%,50%,54%,250%,125%,147%,50%
790 POKE 63824%,51%,250%,48%,10%,237%,68%,50%,51%,250%,62%,255%,50%,53%,250%,58%,51%
800 POKE 63840%,250%,254%,0%,32%,6%,58%,52%,250%,254%,0%,200%,58%,51%,250%,71%,58%
810 POKE 63856%,52%,250%,144%,48%,94%,58%,51%,250%,203%,63%,71%,58%,52%,250%,144%,50%
820 POKE 63872%,55%,250%,62%,0%,222%,0%,50%,56%,250%,58%,51%,250%,71%,197%,205%,12%
830 POKE 63888%,249%,58%,56%,250%,230%,128%,32%,31%,58%,52%,250%,71%,58%,51%,250%,144%
840 POKE 63904%,71%,58%,55%,250%,144%,50%,55%,250%,58%,56%,250%,222%,0%,50%,56%,250%
850 POKE 63920%,58%,54%,250%,130%,87%,24%,19%,58%,52%,250%,71%,58%,55%,250%,128%,50%
860 POKE 63936%,55%,250%,58%,56%,250%,206%,0%,50%,56%,250%,58%,53%,250%,131%,95%,193%
870 POKE 63952%,16%,187%,201%,58%,52%,250%,203%,63%,71%,58%,51%,250%,144%,50%,55%,250%
880 POKE 63968%,62%,0%,222%,0%,50%,56%,250%,58%,52%,250%,71%,197%,205%,12%,249%,58%
890 POKE 63984%,56%,250%,230%,128%,32%,31%,58%,51%,250%,71%,58%,52%,250%,144%,71%,58%
900 POKE 64000%,55%,250%,144%,50%,55%,250%,58%,56%,250%,222%,0%,50%,56%,250%,58%,53%
910 POKE 64016%,250%,131%,95%,24%,19%,58%,51%,250%,71%,58%,55%,250%,128%,50%,55%,250%
920 POKE 64032%,58%,56%,250%,206%,0%,50%,56%,250%,58%,54%,250%,130%,87%,193%,16%,187%
930 POKE 64048%,201%,0%,0%,0%,0%,0%,0%,0%,0%,213%,58%,78%,2%,254%,80%,40%
940 POKE 64064%,2%,203%,59%,203%,59%,62%,2%,131%,95%,203%,58%,203%,58%,62%,63%,146%
950 POKE 64080%,79%,58%,247%,34%,254%,6%,123%,40%,5%,205%,245%,34%,24%,3%,205%,247%
960 POKE 64096%,34%,182%,246%,32%,119%,209%,201%
970 RETURN