100 REM CRYSTAL GARDEN 110 REM BY IAN ADAM 120 : 130 REM VANCOUVER B.C. CANADA 140 REM (C) MARCH 1989 150 : 160 : 170 PRINT "[147]"; 180 : 190 REM CODE IS FIRST: 200 : 210 R$="00" 220 : 230 REM PROGRAMMER NOTES: 240 : 250 REM VARIABLES: 260 : 270 CPLOT = 5900 280 PLOT = 5903 290 SCOLR = 5909 300 CURSR = 5912 310 DUMP = 5924 320 BOX = 5933 330 FT = 5939 340 C = 5952 350 CG = 5957 360 SA = 5960 370 FM = 22*256+240:REM FILENAME BASE 380 : 390 GOTO 940 400 : 410 : 420 : JUMP TABLE: 430 : 440 SYS CPLOT : COLOURS & PLOT 450 SYS PLOT : DRAW SCREEN 460 : GETS RULE FROM FIRST VARIABLE 470 : POKE C-1, 128 OR 0 , TO 480 : WRAP PATTERN AROUND, OR NOT 490 : 500 SYS PLOT+3 : EXTEND THE SAME 510 SYS SCOLR : SET SCREEN COLOURS 520 : POKE C, BACKGROUND COLOUR 530 : POKE C+1, COLOUR BYTES 540 : POKE C+2, COLOUR NIBBLES 550 : 560 SYS CURSR, ROW [,COLUMN] 570 : SET CURSOR ROW & OPTIONAL COLUMN 580 : 590 SYS CURSR+3 : SET SPLIT SCREEN 600 : POKE CG, 0 ALL GRAPHICS 610 : POKE CG, 40 ALL TEXT 620 : POKE CG, 218 +/- SPLIT 630 : 640 SYS CURSR+6 : CANCEL SPLIT ETC. 650 SYS DUMP-3 : CHECK FOR PRINTER 660 : PEEK(172)= 0 MEANS PRINTER OK 670 : 680 SYS DUMP : PRINT TEXT 690 SYS DUMP+3 : PRINT HI-RES SCREEN 700 SYS DUMP+6 : CATCH NMI, ERROR 710 : POKE C+6 & 7 WITH LINE NUMBER 720 : 730 SYS BOX : POP MESSAGE BOX 740 : POKE C+4, BOX COLOUR 750 : 760 SYS BOX+3 : RECALL SCREEN 770 SYS FTOP,N : FILL TOP LINE WITH N 780 : 790 : 800 : MORE MEMORY: 810 : 820 FROM 5888 10 BYTES OF STRUCTURE 830 POKE C+3, TEXT BACKGROUND COLOUR 840 POKE SA, 2NDARY ADDRESS, TEXT 850 POKE SA+1, '' '' , GRAPHICS 860 POKE SA+2, 10 FOR LF, 0 IF NOT 870 : 880 : TO PRINT THESE, EXECUTE: 890 : 900 OPEN 4,4,7:CMD 4:LIST 200-930 910 PRINT#4:CLOSE 4:END 920 : 930 : 940 BB=255:UL=8192:UR=8504:NB=8:AS=48 950 K=198:S1=54276:TR=26:BR=53280 960 : 970 REM SET SEED: 980 : 990 SYS FT,0:SYS PL 1000 POKE 8416,232 1010 R$="1031031332" 1020 : 1030 REM SET COLOURS: 1040 : 1050 POKE C,4:POKE C+1,216:POKE C+2,. 1060 : 1070 REM PLOT SCREEN: 1080 : 1090 POKE 53265,27:POKE 53269,. 1100 SYS 5915:REM ENABLE SPLITSCREEN 1110 POKE C-1,.:REM WRAP 1120 R$="1031031332" 1130 SYS CP:REM COLOURS, & PLOT 1140 : 1150 REM CHECK PRINTER: 1160 : 1170 SYS 5921 1180 PR=PEEK(172)=0 1190 : 1200 REM MORE SETUP: 1210 : 1220 SYS 5930:REM ALTER VECTORS 1230 J=RND(-TI) 1240 : 1250 POKE S1+20,128 1260 POKE S1-3,70:POKE S1+11,K:POKE S1+16,BB:POKE S1+14,129 1270 POKE S1+1,7:POKE S1+2,217:POKE S1+20,. 1280 : 1290 REM MORE IMAGES: 1300 : 1310 FOR I=1 TO 2000:NEXT 1320 R$="3302032210" 1330 SYS FT,. 1340 FOR I=8296 TO 8400 STEP 8:POKE I,20:NEXT 1350 POKE C,5:POKE C+1,33:POKE C+2,. 1360 SYS CP 1370 : 1380 FOR I=1 TO 2000:NEXT 1390 R$="0023010110" 1400 SYS FT,0 1410 POKE 8336,2:POKE 8416,48 1420 POKE C,0:POKE C+1,34:POKE C+2,14 1430 SYS CP 1440 FOR I=1 TO 999:NEXT 1450 FOR I=1 TO 6 1460 : A=(I AND 1)*16+2 1470 : POKE C+1,A:SYS SC 1480 : FOR J=1 TO 500-25*A+500*(I=2):NEXT 1490 NEXT 1500 FOR I=50 TO 242 STEP 16 1510 : POKE C+1,I 1520 : SYS SC 1530 : FOR J=1 TO 99:NEXT 1540 NEXT 1550 : 1560 : 1570 REM ON HIDDEN SCREEN: 1580 : 1590 POKE CG,252 1600 PRINT"[154][204][207][193][196][211][212][193][210] PRESENTS..."TAB(32)"(C) 1989" 1610 PRINT" [195]RYSTAL [199]ARDEN FOR THE 64" 1620 PRINT" [183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183][183]" 1630 PRINT" [215]HAT YOU HAVE JUST SEEN IS A" 1640 PRINT" DEMONSTRATION OF A NEW GRAPHICS" 1650 PRINT" STRUCTURE, A COMPLEX ARTFORM THAT IS" 1660 PRINT" GROWN ENTIRELY WITHIN YOUR COMPUTER." 1670 PRINT" [205]UCH LIKE FRACTALS, THESE CRYSTALS ARE" 1680 PRINT" GENERATED BY A SIMPLE SET OF RULES.":PRINT 1690 PRINT" [194]Y VARYING THE STRUCTURE, YOU CAN" 1700 PRINT" CREATE A NEAR-INFINITE VARIETY OF" 1710 PRINT" CRYSTALLINE IMAGES EFFORTLESSLY. [217]OU" 1720 PRINT" CAN CHOOSE THE SEED ON WHICH THE" 1730 PRINT" CRYSTALS GROW, AND DEFINE THEIR" 1740 PRINT" RULES OF GROWTH. [212]HE COMPUTER" 1750 PRINT" TAKES IT FROM THERE, AND CREATES" 1760 PRINT" YOUR IMAGES.":PRINT 1770 PRINT" [214]IDEO WALLPAPER? [217]ES, IT'S THAT," 1780 PRINT" BUT [195][210][217][211][212][193][204] [199][193][210][196][197][206] IS MUCH, MUCH" 1790 PRINT" MORE... [208]RESS [210][197][212][213][210][206] TO FIND OUT."; 1800 : 1810 REM REVEAL IT 1820 : 1830 FOR I=250 TO 26 STEP-8 1840 : POKE CG,I:J=1^1 1850 NEXT 1860 : 1870 REM MAIN PROGRAM 1880 : 1890 R$="0120123123" 1900 WAIT K,15:POKE K,. 1910 : 1920 GOSUB 5740, TITLE & BEEP 1930 : 1940 GOSUB 6140, RESPONSE 1950 ON REPLY GOSUB 2030, 7160, 6230, 5490 1960 : 1970 GOTO 1920 1980 : 1990 REM ======== 2000 : 2010 : ENTER LOOP 2020 : 2030 GOSUB 6010 2040 POKE C,C0:POKE C+1,C1:POKE C+2,C2 2050 R$=O$:S=. 2060 POKE C-1,W 2070 I=LS:GOSUB 3240,SEED 2080 PRINT"[147]":SYS CP 2090 : 2100 REM * VIEWING LOOP * 2110 : 2120 A=PEEK(C+2):REM SELECT COLOUR 2130 IF A=. THEN A=12 2140 POKE 646,A:SYS CU,20 2150 : 2160 FOR I=. TO 999:REM AWAIT INPUT 2170 : IF PEEK(K) THEN 2380 2180 NEXT 2190 : 2200 PRINT"[195][210][217][211][212][193][204]: N[146] NEW M[146] MANUAL X[146] EXTEND" 2210 IF PEEK(C-1)>127 THEN PRINT " W[146] NO";:GOTO 2230 2220 PRINT" W[146] DO"; 2230 PRINT" WRAP R[146] RANDOM A[146] AUTOPILOT" 2240 PRINT"[211][197][197][196]: V[146] VARY E[146] ENTER MANUALLY" 2250 PRINT"[195][207][204][207][210][211]: [198]KEYS[146] C[146] RANDOM  Q=QUIT " 2260 PRINT"[207][213][212][208][213][212]: S[146] SAVE L[146] LOAD P[146] PRINT[145]" 2270 : 2280 TR=210:GOSUB 5950:A=.:REM SHOW 2290 : 2300 GOSUB 5900 2310 FOR I=. TO 1600 2320 : IF PEEK(K) THEN 2370 2330 NEXT 2340 : 2350 SYS SC:GOSUB 6010:GOTO 2120:REM TRY AGAIN 2360 : 2370 POKE CG,.:SYS SC 2380 GET B$ 2390 FOR H=1 TO 18 2400 : IF MID$("NXWRAVPMESLQC[133][134][135][136][140]",H,1)<>B$ THEN NEXT:H=. 2410 : 2420 IF H>12 THEN GOSUB 4130:GOTO 2120 2430 ON H GOSUB 2780,2860,2910,2970,3030,3180,5320,2570,3700,4430,5080 2440 IF H=12 THEN S=.:RETURN 2450 IF H THEN 2120 2460 IF VAL(B$) THEN H=(27+VAL(B$)-(VAL(B$)=8))/2:B$="":GOTO 2420 2470 IF A THEN 2200 2480 GOTO 2120 2490 ================ 2500 : 2510 * CODE ENTRY * 2520 : 2530 : R$ IS 1ST VARIABLE 2540 : 2550 : MANUAL ENTRY: 2560 : 2570 PRINT"[147]":SYS CU,18 2580 PRINT"[212]HE CRYSTAL IS GROWN USING A STRUCTURE" 2590 PRINT"OF TEN DIGITS, EACH 0 TO 3." 2600 PRINT"[197]NTER A CODE, THEN PRESS [210][197][212][213][210][206]:" 2610 L=.:SYS CU,23:PRINT R$"[145]" 2620 TR=194:GOSUB 5950 2630 POKE 204,.:GET B$ 2640 IF (B$>"/" AND B$<"4") OR B$=" " OR B$="" THEN POKE 204,1:PRINT B$;:L=L+1 2650 IF B$=CHR$(20) OR B$="[157]" THEN IF L THEN POKE 204,1:PRINT B$;:L=L-1 2660 IF B$<>CHR$(13) AND L<14 THEN 2630 2670 POKE 204,1 2680 : 2690 R$="" 2700 FOR I=1944 TO 1953 2710 : R$=R$+CHR$(PEEK(I) AND 51) 2720 NEXT 2730 SYS CP 2740 RETURN 2750 : 2760 : RANDOM CODE 2770 : 2780 R$="" 2790 FOR I=1 TO 10 2800 : R$=R$+CHR$(RND(I)*4+AS) 2810 NEXT 2820 SYS PL:RETURN 2830 : 2840 : EXTEND CRYSTAL 2850 : 2860 SYS PL+3 2870 RETURN 2880 : 2890 : WRAP 2900 : 2910 POKE C-1,BB-PEEK(C-1) 2920 SYS PL 2930 RETURN 2940 : 2950 : 1 RANDOM 2960 : 2970 GOSUB 4280,COLORS 2980 GOSUB 3220,SEED 2990 GOTO 2780,CODE 3000 : 3010 : AUTOPILOT 3020 : 3030 FOR I=1 TO 50 3040 : GOSUB 4280 3050 : GOSUB 3220 3060 : O$=R$:IF PEEK(K) THEN RETURN 3070 : GOSUB 2780 3080 : IF PEEK(K) THEN RETURN 3090 NEXT 3100 GOSUB 5900:GOTO 3030 3110 : 3120 :=============== 3130 : 3140 * SEED ENTRY * 3150 : 3160 : RND ENTRY, 7 WAYS 3170 : 3180 GOSUB 3220 3190 SYS PL 3200 RETURN 3210 : 3220 I=INT(RND(I)*7):IF I=LS THEN 3220 3230 LS=I:POKE CG,. 3240 ON I GOTO 3320,3360,3420,3500,3530,3610 3250 : 3260 REM RND CENTRE 3270 SYS FT,. 3280 POKE 8344,RND(I)*BB+1 3290 RETURN 3300 : 3310 : 1 RND BYTE ACROSS 3320 SYS FT,RND(I)*BB+1 3330 RETURN 3340 : 3350 : RND BYTES ACROSS 3360 FOR I=UL TO UR STEP NB 3370 : POKE I,RND(I)*BB 3380 NEXT 3390 RETURN 3400 : 3410 : SEVERAL RND BYTES 3420 SYS FT,. 3430 FOR I=UL TO 8400 STEP NB 3440 : I=I+NB*INT(RND(I)*12) 3450 : POKE I,RND(I)*BB 3460 NEXT 3470 RETURN 3480 : 3490 : FILL PORTION 3500 SYS FT,. 3510 : 3520 REM CHANGE PORTION 3530 A=UL+NB*INT(RND(I)*15) 3540 B=RND(I)*BB+1 3550 FOR I=A TO A+NB*INT(RND(I)*22+4) STEP NB 3560 : POKE I,B 3570 NEXT 3580 RETURN 3590 : 3600 : SELECT & RANDOM 3610 SYS FT,. 3620 FOR I=8232 TO 8312 STEP NB 3630 : POKE I,RND(I)*BB 3640 NEXT 3650 POKE 8440,RND(I)*BB+1 3660 RETURN 3670 : 3680 * MANUAL ENTRY * 3690 : 3700 PRINT"[147]":SYS CU,18 3710 PRINT" [217]OU MAY ENTER SEED-VALUE BYTES" 3720 PRINT" INTO AS MANY CONSECUTIVE TOP-ROW" 3730 PRINT" POSITIONS AS YOU WISH.":PRINT 3740 PRINT" [211]TART POSITION (1 TO 40):"; 3750 TR=194:GOSUB 5950 3760 A$="20":SYS FT,. 3770 GOSUB 6940 3780 IF A>40 THEN 3760 3790 : 3800 PRINT"[147]":SYS CU,18 3810 PRINT"[197]NTER CONSECUTIVE SEED VALUES, 0 TO"BB 3820 PRINT:PRINT"[208]RESS [198]1 TO QUIT:" 3830 FOR I=A TO 40 3840 : SYS CU,22:PRINT"[208]OSITION" I "[157]:" 3850 : GOSUB 6930 3860 : IF A>BB OR B$>"[132]" THEN 3890 3870 : POKE 8184+I*NB,A 3880 NEXT 3890 SYS CP:RETURN 3900 : 3910 * SET UP MENU * 3920 : 3930 PRINT"[147]":POKE BR,.:POKE C+3,. 3940 IF S THEN SYS SC:POKE CG,.:RETURN 3950 O$=R$:R$="0230011133":REM PATTERN 3960 W=PEEK(C-1):POKE C-1,BB 3970 C0=PEEK(C):C1=PEEK(C+1):C2=PEEK(C+2) 3980 POKE C,.:POKE C+1,226:POKE C+2,13 3990 : 4000 A=UL+80:A1=144:A2=129:REM 1ST LINE 4010 SYS FT,A1+1 4020 POKE UL,1:POKE UR,A1 4030 POKE A-NB,A1:POKE A,A2:POKE A+NB,A2-1:POKE A+16,. 4040 B=64:FOR I=A+24 TO 8412 STEP NB:POKE I,B:NEXT 4050 POKE I,.:POKE I+NB,A1:POKE I+16,A2 4060 : 4070 S=BB:SYS CP 4080 RETURN 4090 :========== 4100 : 4110 * COLOURS * 4120 : 4130 ON H-12 GOTO 4280,4150,4170,4210,4230,4380 4140 : 4150 POKE C, PEEK(C)+1 AND 15 4160 SYS SC:RETURN 4170 A=PEEK(C+1) AND 15 4180 A=A+1 AND 15 4190 POKE C+1, (PEEK(C+1)AND 240)+A 4200 SYS SC:RETURN 4210 POKE C+1, PEEK(C+1)+16 AND BB 4220 SYS SC:RETURN 4230 POKE C+2, PEEK(C+2)+1 AND 15 4240 SYS SC:RETURN 4250 : 4260 : RND COLOURS 4270 : 4280 POKE C+1,BB*RND(I):A=PEEK(C+1) AND 15 4290 POKE C+2,RND(I)*16:B=PEEK(C+2) 4300 IF A=B THEN 4290 4310 I=INT(RND(I)*16) 4320 IF I=A OR I=B THEN 4380 4330 POKE C,I 4340 SYS SC:RETURN 4350 : 4360 : STD COLOURS 4370 : 4380 POKE C,.:POKE C+1,226:POKE C+2,13 4390 SYS SC:RETURN 4400 : 4410 :* SAVE * 4420 : 4430 PRINT"[147]":GOSUB7560 4440 IF FL=. THEN RETURN 4450 SYS CU,17,3 4460 PRINT"[211]AVE [195]RYSTAL TO DISK AS [211][197][197][196] --" 4470 D$="W":GOSUB 4630 4480 IF A>19 OR B$="[133]" THEN 5260 4490 : 4500 FOR I=UL TO UR STEP NB 4510 : PRINT#2,STR$(PEEK(I)) 4520 NEXT 4530 PRINT#2,PEEK(C+1) 4540 PRINT#2,PEEK(C+2) 4550 PRINT#2,PEEK(C) 4560 PRINT#2,R$+CHR$(PEEK(C-1)) 4570 GOSUB 4820:IF A>19 THEN 5270 4580 : 4590 GOTO 5250 4600 : 4610 : GET NAME, OPEN FILE 4620 : 4630 N$="CG." 4640 TR=186:GOSUB 5950 4650 PRINT"[208]LEASE ENTER THE NAME." 4660 PRINT"[208]RESS [198]1 ESCAPE" 4670 PRINT" [198]7 DIRECTORY:" 4680 SYS CU,23:PRINT N$"[175] " 4690 WAIT K,15:GET B$ 4700 IF B$=CHR$(20) OR B$="[157]" THEN IF LEN(N$)>3 THEN N$=LEFT$(N$,LEN(N$)-1) 4710 IF B$=CHR$(13) THEN SYS CU,23:PRINT N$" ":GOTO 4790 4720 IF B$="[133]" THEN RETURN 4730 IF B$="[136]" THEN GOSUB 4910:GOTO 4640 4740 IF B$<"-" OR B$>"Z" THEN 4680 4750 IF B$>"9" THEN IF B$<"A" THEN 4680 4760 IF LEN(N$)>15 THEN N$=LEFT$(N$,15) 4770 N$=N$+B$:GOTO 4680 4780 : 4790 GOSUB 6010:POKE 788,237 4800 OPEN 1,8,15 4810 OPEN 2,8,8,N$+",P,"+D$ 4820 INPUT#1,A,B$ 4830 IF A<20 THEN RETURN 4840 TR=210:GOSUB 5950 4850 POKE 788,234:PRINT:PRINT"[208]ROBLEM:" B$ 4860 PRINT"[208]RESS SPACE BAR" 4870 WAIT K,BB:POKE K,. 4880 GOSUB 6010 4890 POKE 788,234:CLOSE 2:CLOSE 1:RETURN 4900 : 4910 POKE 788,239:OPEN 1,8,15:OPEN 2,8,0,"$0:CG.*":REM DIRECTORY 4920 PRINT:INPUT#1,A,B$:IF A>19 THEN 4850 4930 POKE CG,10:B$=CHR$(34):C$=" " 4940 FOR I=1 TO 8:GET#2,A$,A$,A$,A$,A$:NEXT 4950 IF A$<>B$ THEN PRINT"[206]O CRYSTALS ON DISK!":GOTO 4890 4960 : 4970 FOR I=1 TO 18:GET#2,A$ 4980 IF A$<>B$ THEN PRINTA$;:NEXT:REM NAME 4990 : 5000 FOR I=1 TO 30 5010 : GET#2,A$:IF A$=C$ THEN NEXT 5020 FOR I=1 TO 4:GET#2,A$,A$,A$:NEXT:REM SKIP 5030 PRINT:GET#2,A$:IF A$=B$ THEN 4970 5040 GOTO 4890 5050 : 5060 :* LOAD * 5070 : 5080 PRINT"[147]":SYS CU,17,3 5090 PRINT"[204]OAD [195]RYSTAL FROM [196]ISK" 5100 D$="R":GOSUB 4630 5110 IF A>19 OR B$="[133]" THEN 5260 5120 : 5130 FOR I=8192 TO 8504 STEP 8 5140 : INPUT#2,A$ 5150 : POKE I,VAL(A$) AND BB 5160 NEXT 5170 INPUT#2,A$:POKE C+1,VAL(A$) AND BB 5180 INPUT#2,A$:POKE C+2,VAL(A$) AND BB 5190 INPUT#2,A$:POKE C,VAL(A$) AND BB 5200 INPUT#2,R$ 5210 IF LEN(R$)<11 THEN POKE C-1,.:GOTO5250 5220 POKE C-1,VAL(RIGHT$(R$,1)) 5230 R$=LEFT$(R$,10) 5240 : 5250 POKE 788,234 5260 CLOSE 2:CLOSE 1 5270 SYS CP 5280 RETURN 5290 : 5300 : PRINT CRYSTAL 5310 : 5320 POKE 788,237 5330 SYS DU-3 5340 PR=PEEK(172)=. 5350 IF PR=. THEN GOSUB 5430:GOSUB 6230:SYS SC:GOTO 6010 5360 : 5370 SYS DU+3 5380 OPEN 4,4,PEEK(SA) 5390 PRINT#4,CHR$(27)CHR$(50); 5400 : 5410 IF PEEK(SA+2) THEN PRINT#4,CHR$(13)CHR$(14)"[195][207][196][197]: " R$:PRINT#4 5420 CLOSE 4 5430 POKE 788,234 5440 RETURN 5450 : 5460 : 5470 * QUIT CRYSTAL * 5480 : 5490 SYS BOX 5500 SYS CU,19,.:FORI=217TO242:POKEI,PEEK(I)OR128:NEXT 5510 PRINT TAB(24)"[150][209]UIT [208]ROGRAM" 5520 PRINT TAB(24)"- [193]RE YOU SURE?" 5530 PRINT TAB(25)"[198]1 [195]ONTINUE" 5550 PRINT TAB(25)"[198]7 [210]ETURN":PRINT TAB(28) "TO [204][207][193][196][211][212][193][210]"; 5580 : 5590 GOSUB 6140 5600 IF RE-7 THEN RETURN 5610 PRINT"[147][199]OODBYE FROM ..." 5620 PRINT"[153][195][160][210] [217] [211] [212] [193] [204] [199] [193] [210] [196] [197] [206]" 5630 : 5640 SYS 5918 5650 : 5660 OPEN15,8,15,"R0:HELLO CONNECT=HELLO CONNECT" 5670 INPUT#15,A:CLOSE15 5680 IFA<>63THENEND 5690 PRINT"[147][144]LOAD"CHR$(34)"HELLO CONNECT"CHR$(34)",8" 5700 PRINT"RUN":POKE2048,0:POKE44,8:POKE631,13:POKE632,13:POKE198,2:END 5710 : 5720 :* MAIN MENU * 5730 : 5740 POKE 788,234:GOSUB 3930, SETUP 5750 POKE CG,154 5760 : 5770 SYS CU,13,6:PRINTTAB(10)"[153][204][207][193][196][211][212][193][210] PRESENTS" 5780 PRINT"[150] [195][160][210][160][217][160][211][160][212][160][193][160][204][160] [160][160][160][199][160][193][160][210][160][196][160][197][160][206]" 5790 PRINT"[153][205]AIN [205]ENU: 1 [154][199]ROW SOME [195]RYSTALS " 5800 PRINTTAB(11)"2 [154][200]ELP - [208]ROGRAM [195]OMMANDS " 5810 PRINTTAB(11)"3 [154][208]RINTER [195]ONTROLS " 5820 PRINTTAB(11)"4 [154][204]EAVE [195]RYSTAL [199]ARDEN " 5830 PRINT"[153] [208]RESS A [206]UMBER OR [198]UNCTION [203]EY " 5840 : 5850 PRINT"[154] [194]Y [201]AN [193]DAM [214]ANCOUVER [194][195][153]" 5860 POKE S1,21:POKE S1+20,143 5870 FOR I=20 TO K STEP 20:POKE S1-3,I:NEXT 5880 POKE S1,20 5890 : 5900 I=RND(-PEEK(S1+23)) 5910 RETURN 5920 : 5930 REM REVEAL MENU 5940 : 5950 A=PEEK(CG):IF A=. THEN A=250 5960 B=-8 5970 GOTO 6050 5980 : 5990 REM CONCEAL MENU 6000 : 6010 A=PEEK(CG):IF A<50 THEN A=50 6020 B=8 6030 TR=BB 6040 : 6050 IF PEEK(C+1)=32 THEN B=B/4 6060 FOR I=A TO TR STEP B 6070 : POKE CG,I AND BB:J=B^2 6080 NEXT 6090 IF TR=BB THEN POKE CG,. 6100 TR=26:RETURN 6110 : 6120 : FUNCTION KEY INPUT 6130 : 6140 PRINT"":WAIT K,15 6150 GET A$:RE=VAL(A$) 6160 IF A$>"[132]" THEN IF A$<"[140]" THEN RE=2*ASC(A$)-265:IF RE>7 THEN RE=RE-7 6170 IF A$=CHR$(13) THEN RE=1 6180 IF RE THEN IF RE<8 THEN RETURN 6190 GOTO 6140 6200 : 6210 :* PRINTER CONTROLS * 6220 : 6230 PRINT"[158][147]" 6240 A$="  ":PRINTA$ 6250 PRINT"  [195]RYSTAL [199]ARDEN FOR THE 64 " 6260 PRINTA$ 6270 PRINT TAB(48)"[208]RINTER [195]ONTROLS:" 6280 TR=24:GOSUB 5950 6290 POKE 788,239:SYS DU-3:POKE 788,234:REM TEST 6300 PR=PEEK(172)=0 6310 IF PR=0 THEN 7040 6320 : 6330 REM OK 6340 : 6350 PRINT TAB(43)"[212]HE SECONDARY ADDRESS FOR TEXT IS" 6360 PRINT" SET TO" PEEK(SA) "FOR UPPER/LOWER CASE," 6370 PRINT" TEXT MODE, AUTO LINE FEED." 6380 PRINT TAB(43)"[212]HE SECONDARY ADDRESS FOR GRAPHICS" 6390 PRINT" IS SET TO" PEEK(SA+1) "FOR GRAPHICS MODE," 6400 PRINT" [206][207] LINE FEED." 6410 PRINT TAB(43)"[208]LEASE CHECK THE MANUAL FOR YOUR" 6420 PRINT" PRINTER OR INTERFACE FOR DETAILS." 6430 PRINT TAB(45)"[198]1 [195]HANGE SECONDARY ADDRESSES" 6440 PRINT TAB(5)"[198]3 [208]RINT HELP SCREEN" 6460 PRINT TAB(5)"[198]7 [205]AIN MENU"; 6470 GOSUB 6140:IF (RE AND 1)=. THEN 6470 6480 IF RE=1 THEN GOSUB 6620 6490 IF RE=3 THEN GOSUB 6540 6510 IF RE=7 THEN RETURN 6520 GOTO 6230 6530 : 6540 POKE 788,239 6550 OPEN 4,4,PEEK(SA):CMD 4 6560 GOSUB 7320:PRINT#4:CLOSE 4 6570 POKE 788,234 6580 RETURN 6590 : 6600 SET SEC'Y ADDRS 6610 : 6620 PRINT"[147]" TAB(243)"[212]HE TEXT SECONDARY ADDRESS MUST" 6630 PRINT" BE SET FOR UPPER AND LOWER CASE," 6640 PRINT" TEXT MODE, AUTOMATIC LINE FEED." 6650 PRINT TAB(163)"[201]F NECESSARY, CHECK YOUR MANUAL." 6660 PRINT TAB(163)"[197]NTER SECONDARY ADDRESS, OR PRESS" 6670 PRINT" [210][197][212][213][210][206] FOR" PEEK(SA) 6680 GOSUB 6930 6690 IF A THEN POKE SA,A AND BB 6700 : 6710 PRINT"[147]" TAB(243)"[212]HE CRYSTALS CAN ONLY BE PRINTED" 6720 PRINT" ON AN [197]PSON-COMPATIBLE PRINTER." 6730 PRINT TAB(123)"[212]HE SECONDARY ADDRESS MUST BE SET" 6740 PRINT" FOR TRANSPARENT GRAPHICS MODE," 6750 PRINT" [206][207] LINE FEED. [193] VALUE OF 5 WORKS" 6760 PRINT" FOR MOST INTERFACES; HOWEVER," 6770 PRINT" THE [212]YMAC NEEDS A 6." 6780 PRINT TAB(123)"[197]NTER SECONDARY ADDRESS, OR PRESS" 6790 PRINT" [210][197][212][213][210][206] FOR" PEEK(SA+1) 6800 GOSUB 6930 6810 IF A THEN POKE SA+1,A AND BB 6820 PRINT"[147][195]RYSTALS ARE NORMALLY PRINTED" 6830 PRINT"WITH A SPACE BETWEEN THEM." 6840 PRINT"[208]RESS:":PRINT "[198]1 OK- RETURN" 6850 PRINT"[198]7 SET PRINTOUTS WITH NO SPACE BETWEEN" 6860 PRINT" IMAGES. [212]HIS ALLOWS YOU TO EXTEND" 6870 PRINT" A CRYSTAL AND PRINT IT AS ONE IMAGE." 6880 GOSUB 6140:POKE SA+2,10*ABS(RE<7) 6890 RE=1:RETURN 6900 : 6910 : INPUT NUMBER 6920 : 6930 A$="" 6940 SYS CU,23:PRINT A$"[175] " 6950 WAIT K,15:GET B$ 6960 IF B$=CHR$(20) OR B$=CHR$(157) THEN IF LEN(A$) THEN A$=LEFT$(A$,LEN(A$)-1) 6970 IF B$=CHR$(13) OR B$>"[132]" THEN A=VAL(A$):RETURN 6980 IF B$<"0" OR B$>"9" THEN 6940 6990 IF LEN(A$)>2 THEN A$=LEFT$(A$,2) 7000 A$=A$+B$:GOTO 6940 7010 : 7020 : NO PRINTER 7030 : 7040 PRINT TAB(45)"[212]HERE IS NO PRINTER ACTIVE." 7050 PRINT TAB(45)"[201]F YOU HAVE A PRINTER, PLEASE" 7060 PRINT TAB(5)"CHECK THAT IT IS PROPERLY" 7070 PRINT TAB(5)"CONNECTED, HAS PAPER AVAILABLE," 7080 PRINT TAB(5)"AND IS TURNED ON." 7090 PRINT TAB(165)"[198]1 ACTIVATE PRINTER" 7100 PRINT TAB(5)"[198]3 BACK TO MENU" 7110 GOSUB 6140:IF RE=1 THEN 6230 7120 RETURN 7130 : 7140 :* HELP SCREEN * 7150 : 7160 PRINT"[147][150]"; 7170 TR=24:GOSUB 5950 7180 POKE C+3,9:POKE BR,9 7190 : 7200 IF PR THEN 7220 7210 D$="[150] [208]RESS [198]1 TO RETURN [157][148] ":GOTO 7240 7220 D$="[150] [198]1 [210]ETURN [198]5 [208]RINT PAGE [157][148] " 7230 : 7240 GOSUB 7320 7250 SYS CU,24:PRINTD$; 7260 WAIT K,15:GET A$ 7270 IF A$="5" OR A$="[135]" THEN IF PR THEN 6540 7280 RETURN 7290 : 7300 : HELP TEXT 7310 : 7320 PRINT" [195][210][217][211][212][193][204] [199][193][210][196][197][206] -- [200]ELP [211]CREEN ":PRINT 7330 POKE 646,1:SYS CU,1 7340 PRINT"[212]HESE ARE THE COMMANDS WHILE VIEWING:":PRINT 7350 PRINT"[195]RYSTAL: [206] [206]EW [195]RYSTAL, AUTOMATIC" 7360 PRINT TAB(9)"[205] [206]EW [195]RYSTAL, MANUAL" 7370 PRINT TAB(9)"[216] [197]XTEND SAME CRYSTAL" 7380 PRINT TAB(9)"[215] [212]URN PATTERN-WRAP ON OR OFF" 7390 PRINT TAB(9)"[210] [210]ANDOM CRYSTAL AND COLORS" 7400 PRINT TAB(9)"[193] [193]UTOPILOT (ANY KEY = QUIT)" 7410 PRINT"[211]EED: [214] [214]ARY PATTERN (AUTO SEED)" 7420 PRINT TAB(9)"[197] [197]NTER [206]EW [211]EED, MANUALLY":PRINT 7430 PRINT"[195]OLORS: [198]1 [194]ACKGROUND [195]OLOR" 7440 PRINT TAB(8)"[198]3 [195]HANGE [195]OLOR 1" 7450 PRINT TAB(8)"[198]5 [195]HANGE [195]OLOR 2" 7460 PRINT TAB(8)"[198]7 [195]HANGE [195]OLOR 3" 7470 PRINT TAB(8)"[198]8 [211]TANDARD [195]OLORS" 7480 PRINT TAB(9)"[195] [210]ANDOM [195]OLORS":PRINT 7490 PRINT"[197]XTRAS: [208] [208]RINT CRYSTAL ([197]PSON-TYPE)" 7500 PRINT TAB(9)"[211] [211]AVE CRYSTAL TO DISK" 7510 PRINT TAB(9)"[204] [204]OAD CRYSTAL FROM DISK" 7520 PRINT TAB(9)"[209] [209]UIT - BACK TO MAIN MENU" 7530 RETURN 7540 : 7550 : 7560 PRINT"[147]":GOSUB5950 7570 PRINT" [211]AVE PICTURE IN WHICH FORMAT?" 7580 PRINT" [158][203][155]OALA" 7590 PRINT" [158][193][155]DVANCED [207][195][208]" 7600 PRINT" [158][211][155]EED (MATHEMATICAL DATA)" 7610 PRINT" [159][197][154]XIT[156]" 7620 WAITK,15 : GETA$ 7630 IFA$<>"S"THENGOTO7650 7640 FL=1:GOTO7670 7650 IFA$<>"E"THENGOTO7690 7660 FL=0 7670 PRINT"[147]":GOSUB6010:RETURN 7680 : 7690 IFA$<>"K"THENGOTO7760 7700 ML=10 7710 EN$="[203]OALA":UN$="'[193][146]PIC ' PREFIX" 7720 GOSUB 7860:IFMS=.THENGOTO7660 7730 POKE788,239:SYS5632:POKE788,234 7740 GOTO7660: REM GET BACK JO-JO 7750 : 7760 IFA$<>"A"THENGOTO7620 7770 ML=12:PX$="" 7780 EN$="[193]DVANCED [207][195][208]" 7790 UN$="'MPIC' SUFFIX" 7800 GOSUB 7860:IFMS=.THENGOTO7660 7810 POKE788,239:SYS5635:POKE788,234 7820 GOTO7660: REM TO WERE YOU BELONG 7830 : 7840 :------------------------------- 7850 : 7860 PRINT"[147][155] [208]LEASE ENTER ";EN$;"[155] FILENAME --" 7870 PRINT" [[205]AXIMUM OF";ML;" [155]CHARACTERS]" 7880 PRINT" [159][ ";UN$ 7890 PRINT" IS [206][207][212] REQUIRED.]" 7900 MS=. : BS$="" : L$="[164][164][164][164][164][164][164][164][164][164][164][164]" 7910 PRINT"[145]";BS$;RIGHT$(L$,ML-MS):WAITK,15:GETA$ 7920 IFA$="[133]"THENMS=.:GOTO7950 7930 IFA$<>CHR$(13)THENGOTO7960 7940 IFMS>.THENGOTO8040 7950 PRINT"[147]" : RETURN 7960 IFA$<>"[157]"ANDA$<>CHR$(20)THEN7990 7970 IFMS>0THENMS=MS-1:BS$=LEFT$(BS$,MS) 7980 GOTO 7910 7990 IFA$<"0"THEN7910 8000 IF(A$>"9"ANDA$<"A")ORA$>"Z"THEN7910 8010 IFMS=MLTHEN7910 8020 BS$=BS$+A$:MS=MS+1:GOTO7910 8030 : 8040 IFML<>10THENGOTO8060 8050 FS$=LEFT$(CHR$(129)+"PIC "+BS$+" ",15):MS=15:GOTO8070 8060 BS$=BS$+" ":FS$=LEFT$(BS$,12)+"MPIC":MS=16 8070 FORX=1TOMS:POKE((FM-1)+X),ASC(MID$(FS$,X,1)):NEXT:PRINT"[147]" 8080 POKE5712,MS : MS=1 : RETURN 10000 OPEN15,8,15,"S0:CG.BAS":CLOSE15:SAVE"CG.BAS",8:END