1REM -Modified by-
2REM -JIM SILER- 
3REM -1121 Cranbrook DR.-
4REM -Hixson, TN. 37343-
5REM -ADAM by C. Woolums-
6REM -NIAD #13 Jan.86-
7REM - TUNE GENERATOR -
10REM - by Joey Latimer -
15REM - FAMILY COMPUTING-
17REM - Microtones -
20REM - Jan 1985 -
60POKE 17059, 14:POKE 17115, 4*16+7:POKE 17126, 12*16+14
70POKE 16953, 32
80POKE 16149, 255:POKE 16150, 255
90LOMEM :29000
100GOSUB 980: time=100
110COLOR =1: x1=1: y1=1: kol=1: xi=-1: yi=1
120POKE 159, 100:&  flash slowed down
130DIM chord(5, 4), note(5, 5, 2)
140TEXT
150? TAB(9); "GRAPHIC FANTASY"
160VTAB 5:? "Press "; :FLASH:? "<RETURN>"; :NORMAL:? " to stop."
170?
180? "Press "; :FLASH:? "<CLEAR> "; :NORMAL:? " to clear screen."
190? "Press "; :FLASH:? "<P-KEY> "; :NORMAL:? " to pause."
200?:? "Press "; :FLASH:? "<C-KEY> "; :NORMAL:? " to change color."
210VTAB 22:? "Press "; :FLASH:? "<SPACE BAR>"; :NORMAL:? " to start."; 
220 ran=ran+1
230 ran=RND(-ran)
240IF PEEK(64885)<>32 THEN 220
250GR
260 kol=INT(RND(1)*14)
270 x1=INT(RND(1)*18): y1=INT(RND(1)*18)
280FOR x=28000 TO 28005:READ a:POKE x, a:NEXT x
290FOR x=1 TO 5:READ chord(x, 1), chord(x, 2), chord(x, 3), chord(x, 4)
300FOR y=1 TO 5:READ note(x, y, 1), note(x, y, 2)
310NEXT y:NEXT x
320FOR q=144 TO 208 STEP 32:POKE 28006, q:CALL 28000:NEXT q
330 t=INT(RND(1)*20)+20
340FOR x=1 TO t
350 r=INT(RND(1)*5)+1
360IF x=1 THEN  r=1
370IF x=t THEN  r=4
380FOR z=1 TO 4
390POKE 28006, chord(r, z):CALL 28000
400NEXT z
410FOR y=1 TO 3: s=INT(RND(1)*5)+1
420 p=PEEK(64885)
430IF p=13 THEN FOR q=159 TO 223 STEP 32:POKE 28006, q:CALL 28000:NEXT q:POKE 16953, 95:POKE 159, 12:END
440IF p=80 OR p=112 THEN FOR q=159 TO 223 STEP 32:POKE 28006, q:CALL 28000:NEXT q:POKE 64885, 0:GOTO 1410
450IF p=27 THEN  x1=INT(RND(1)*18): y1=-x1:POKE 64885, 0
460IF p=67 OR p=99 THEN POKE 64885, 0: kol=kol+1:IF kol>15 THEN  kol=0
470IF p=144 OR PEEK(64885)=152 THEN  x1=y1:POKE 64885, 0
480IF p=150 OR p=158 THEN GR:POKE 64885, 0
490FOR z=1 TO 2
500POKE 28006, note(r, s, z):CALL 28000
510NEXT z
520COLOR =kol
530 k=INT(RND(1)*100)
540IF k=1 THEN  kol=kol+1
550IF kol>15 THEN  kol=0
560 x1=x1+xi: y1=y1+yi
570IF x1<1 THEN  x1=1: xi=-xi
580IF x1>19 THEN  x1=19: xi=-xi
590IF y1<0 THEN  y1=0: yi=-yi
600IF y1>19 THEN  y1=19: yi=-yi
610PLOT x1, y1
620PLOT x1+19, y1
630PLOT x1, y1+20
640PLOT x1+19, y1+20
650FOR de=1 TO time:NEXT de:NEXT y:NEXT x
660 time=INT(RND(200)+100)
670FOR q=0 TO 15 STEP .1:FOR n=144 TO 208 STEP 32
680 p=PEEK(64885):IF p=150 OR p=158 THEN GR:POKE 64885, 0
690COLOR =kol: k=INT(RND(1)*100)
700IF k=1 THEN  kol=kol+1
710IF kol>15 THEN  kol=0
720 x1=x1+xi: y1=y1+yi
730IF x1<1 THEN  x1=1: xi=-xi
740IF x1>19 THEN  x1=19: xi=-xi
750IF y1<0 THEN  y1=0: yi=-yi
760IF y1>19 THEN  y1=19: yi=-yi
770PLOT x1, y1
780PLOT x1+19, y1
790PLOT x1, y1+20
800PLOT x1+19, y1+20
810POKE 28006, n+q:CALL 28000
820IF p=13 THEN FOR q=159 TO 223 STEP 32:POKE 28006, q:CALL 28000:NEXT q:POKE 16953, 95:POKE 159, 12:END
830IF p=67 OR p=99 THEN POKE 64885, 0: kol=kol+1:IF kol>15 THEN  kol=0
840IF p=80 OR p=112 THEN FOR q=159 TO 223 STEP 32:POKE 28006, q:CALL 28000:NEXT q:POKE 64885, 0: flag=1:GOTO 1410
850NEXT n:NEXT q
860FOR q=128 TO 192 STEP 32:POKE 28006, q:CALL 28000
870POKE 28006, 0:CALL 28000:NEXT q:GOTO 320
880DATA 58,102,109,211,255,201
890DATA 141,26,165,21,205,26,206,23,197,21,206,17
900DATA 205,26,129,20,175,15,193,20,206,17,207,15
910DATA 195,14,198,13,142,17,163,14,206,17,207,15
920DATA 195,14,198,13,207,11,143,15,166,13,207,15
930DATA 195,14,198,13,207,11,202,10,133,21,174,17
940DATA 206,17,197,21,195,14,202,10,207,8
980POKE 25431, 7:POKE 25471, gw*16+7
990HGR
1000HCOLOR =9
1010FOR t=0 TO 2 STEP .01: u=t*3.14
1020HPLOT 30+15*COS(u), 80+30*SIN(u):NEXT t
1030FOR y=75 TO 108 STEP .1
1040HPLOT 45, y:NEXT y
1050FOR x=1.2 TO 3.14 STEP .01
1060HPLOT 28+15*x, 65+45*SIN(x):NEXT x
1070FOR t=0 TO 2 STEP .01: u=t*3.14
1080HPLOT 90+15*COS(u), 80+30*SIN(u):NEXT t
1090FOR y=30 TO 108
1100HPLOT 105, y:NEXT y
1110FOR x=1.2 TO 3.14 STEP .01
1120HPLOT 88+15*x, 65+45*SIN(x):NEXT x
1130FOR t=0 TO 2 STEP .01: u=t*3.14
1140HPLOT 150+15*COS(u), 80+30*SIN(u):NEXT t
1150FOR y=75 TO 108 STEP .1
1160HPLOT 165, y:NEXT y
1170FOR x=1.2 TO 3.14 STEP .01
1180HPLOT 148+15*x, 65+45*SIN(x):NEXT x
1190FOR t=1.3 TO 1.55 STEP .01: u=t*3.14
1200HPLOT 207+20*COS(u), 120+70*SIN(u):NEXT t
1210FOR t=1.2 TO 1.55 STEP .01: u=t*3.14
1220HPLOT 217+20*COS(u), 120+70*SIN(u):NEXT t
1230FOR t=1.2 TO 2 STEP .01: u=t*3.14
1240HPLOT 227+20*COS(u), 120+70*SIN(u):NEXT t
1250FOR i=1 TO 3000:NEXT
1260POKE 25431, 1:POKE 25471, 1*16+1
1270 i=1: flag=0
1280HOME
1290IF i=1 THEN  m$="PRESENTS"
1300IF i=2 THEN  m$="GRAPHIC FANTASY"
1310FOR x=1 TO LEN(m$)
1320FOR ch=31 TO ASC(MID$(m$, x, 1))
1330VTAB 21
1340IF i=2 THEN VTAB 22
1350HTAB x+(31-LEN(m$))/2
1360? CHR$(ch):NEXT ch, x
1370IF flag=1 THEN 1390
1380FOR i=1 TO 2000:NEXT: i=2: flag=1:GOTO 1290
1390FOR i=1 TO 3000:NEXT
1400CLEAR:RETURN
1410REM --subroutine for pause--
1420 p=PEEK(64885)
1430IF p=0 THEN 1420
1440IF flag=1 THEN  flag=0:GOTO 670
1450GOTO 320
