20 REM  ¨Ã© ÃÏÐÙÒÉÇÈÔ ±¹¸² ÔÉÍ ËÉÌÂÙ ›30 DIM A$(1),O$(1),CLEAR2$(1),ZERO$(1),CLEAR1$(1),CLEAR4$(1),FILE$(15),NAME$(15),A(7,8)›40 GOTO 1180›50 SOUND 0,Y/2+100-X/4,10,4:FOR D=1 TO 8:NEXT D:SOUND 0,0,0,0:RETURN ›60 REM  ÍÅÎÕ ›70 GOSUB 110:POSITION 1,0›80 ? "Ådit Ãopy Ìoad Set Òub"›90 ? "Color ±,²,or ³ Óave Set Ôest"›100 ? "ÓÅÌÅÃÔmode * CHOOSE ONE *";:RETURN ›110 CLEAR2$=ZERO$(1,120):RETURN ›120 REM  ÓÃÒÅÅΠÍÅÍÏÒÙ ÏÒÉÅÎÔÁÔÉÏΠ›130 POKE 87,3:POKE 88,PEEK(DL+4):POKE 89,PEEK(DL+5):RETURN ›140 POKE 82,1:POKE 87,0:POKE 88,HOME+100-INT((HOME+100)/256)*256:POKE 89,INT((HOME+100)/256):RETURN ›150 POKE 82,4:POKE 87,0:POKE 88,HOME+220-INT((HOME+220)/256)*256:POKE 89,INT((HOME+220)/256):RETURN ›160 POKE 82,0:POKE 87,0:POKE 88,HOME+380-INT((HOME+380)/256)*256:POKE 89,INT((HOME+380)/256):RETURN ›170 POKE 82,0:POKE 87,0:POKE 88,HOME+460-INT((HOME+460)/256)*256:POKE 89,INT((HOME+460)/256):RETURN ›180 GOSUB 160:POKE 766,1:POSITION 11,1:? CHR$(CHR):POSITION 18,1:? CHR$(CHR+128):POSITION 25,1›190 FOR A=1 TO 5:? CHR$(CHR);:NEXT A:? :GOSUB 170:POSITION 11,1:? CHR$(CHR):POSITION 18,1:? CHR$(CHR+128)›200 POSITION 25,1:FOR A=0 TO 5:? CHR$(CHR);:NEXT A:POKE 766,0:RETURN ›210 REM  ÐÌÏÔ ÐÏÉÎÔÓ ›220 GOSUB 130:F=X/4:G=(Y-20)/4:LOCATE 8+F,G+1,A:SOUND 0,20+G-F,10,2:COLOR C*(A=0):PLOT 8+F,G+1:PLOT 9+F,G+1›230 IF C=1 THEN PLOT 28+F,G+1:COLOR 0:PLOT 27+F,G+1:A(G,F+1)=INT(2^(6-F)+0.1)›240 IF C=2 THEN PLOT 27+F,G+1:COLOR 0:PLOT 28+F,G+1:A(G,F)=INT(2^(7-F)+0.1)›250 IF C=3 THEN PLOT 27+F,G+1:PLOT 28+F,G+1:A(G,F)=INT(2^(7-F)+0.1):A(G,F+1)=INT(2^(6-F)+0.1)›260 IF A>0 THEN A(G,F)=0:A(G,F+1)=0›270 A(G,8)=0:FOR D=0 TO 7:A(G,8)=A(G,8)+A(G,D):NEXT D:POKE CHBASE+CHR*8+G,A(G,8)›280 SOUND 0,0,0,0:GOSUB 140:RETURN ›290 REM  ÅÄÉÔ ›300 GOSUB 110:GOSUB 340›310 POSITION 10,1:? "- Select character -";›320 GET #3,CHR:GOSUB 360:GOSUB 140:RETURN ›330 FOR A=0 TO 7:POKE CHBASE+CHR*8+A,0:NEXT A›340 CLEAR1$=ZERO$(1,100)›350 FOR A=0 TO 7:FOR B=0 TO 8:A(A,B)=0:NEXT B:NEXT A:RETURN ›360 REM  ÐÌÏÔ ÃÈÁÒÁÃÔÅÒ ›370 POSITION 6,0:? "Use joystick to move cursor.":POSITION 8,1:? "Press FIRE to plot point."›380 POSITION 14,2:? "(Í for MENU)";›390 GOSUB 180›400 GOSUB 130:IF CHR>127 THEN CHR=CHR-128›410 IF CHR>127 THEN CHR=CHR-128›420 IF CHR>31 AND CHR<96 THEN CHR=CHR-32:GOTO 440›430 IF CHR<32 THEN CHR=CHR+64›440 R=CHBASE+CHR*8:FOR A=0 TO 7:D=PEEK(R+A):B=A+1›450 F=0:IF D>127 THEN D=D-128:F=F+1:COLOR 2:PLOT 27,B:PLOT 8,B:PLOT 9,B:A(A,0)=128:A(A,8)=A(A,8)+A(A,0)›460 IF D>63 THEN D=D-64:F=F+1:COLOR 1:PLOT 28,B:PLOT 8,B:PLOT 9,B:A(A,1)=64:A(A,8)=A(A,8)+A(A,1)›470 IF F>1 THEN COLOR 3:PLOT 27,B:PLOT 28,B:PLOT 8,B:PLOT 9,B›480 F=0:IF D>31 THEN D=D-32:F=F+1:COLOR 2:PLOT 29,B:PLOT 10,B:PLOT 11,B:A(A,2)=32:A(A,8)=A(A,8)+A(A,2)›490 IF D>15 THEN D=D-16:F=F+1:COLOR 1:PLOT 30,B:PLOT 10,B:PLOT 11,B:A(A,3)=16:A(A,8)=A(A,8)+A(A,3)›500 IF F>1 THEN COLOR 3:PLOT 29,B:PLOT 30,B:PLOT 10,B:PLOT 11,B›510 F=0:IF D>7 THEN D=D-8:F=F+1:COLOR 2:PLOT 31,B:PLOT 12,B:PLOT 13,B:A(A,4)=8:A(A,8)=A(A,8)+A(A,4)›520 IF D>3 THEN D=D-4:F=F+1:COLOR 1:PLOT 32,B:PLOT 12,B:PLOT 13,B:A(A,5)=4:A(A,8)=A(A,8)+A(A,5)›530 IF F>1 THEN COLOR 3:PLOT 31,B:PLOT 32,B:PLOT 12,B:PLOT 13,B›540 F=0:IF D>1 THEN D=D-2:F=F+1:COLOR 2:PLOT 33,B:PLOT 14,B:PLOT 15,B:A(A,6)=2:A(A,8)=A(A,8)+A(A,6)›550 IF D>0 THEN F=F+1:COLOR 1:PLOT 34,B:PLOT 14,B:PLOT 15,B:A(A,7)=1:A(A,8)=A(A,8)+A(A,7)›560 IF F>1 THEN COLOR 3:PLOT 33,B:PLOT 34,B:PLOT 14,B:PLOT 15,B›570 NEXT A:GOSUB 140:RETURN ›580 REM  ÔÅÓÔ ÃÈÁÒÁÃÔÅÒÓ ›590 GOSUB 110:POSITION 5,0:? "Your typed characters":POSITION 7,1:? "will appear below. NORMAL"›600 POSITION 2,2:? "- Press  ÒÅÔÕÒΠ for menu -";›610 D=1:POKE 764,255:CLEAR4$=ZERO$:GOSUB 340:GOSUB 160:POKE 84,0:POKE 85,0:POKE 53259,1:A$=ZERO$(1,127)›620 POKE 53251,36:A$(86,89)=""›630 FOR D=0 TO 5:POKE DL+D+23,4:NEXT D:POKE DL+29,65:POKE DL+30,PEEK(560):POKE DL+31,PEEK(561)›640 A=PEEK(633):ON A<15 GOSUB 1500:IF PEEK(764)=255 THEN 640›650 IF PEEK(764)=39 OR PEEK(764)=103 THEN A=PEEK(84):B=PEEK(85):GOTO 710›660 GET #3,CHR:IF CHR=155 THEN GOSUB 340:CLEAR4$=ZERO$:A$=ZERO$(1,127):GOSUB 140:POKE 694,0:POKE 702,64:GOTO 750›670 ? CHR$(CHR);:IF PEEK(84)<0 THEN POKE 84,5›675 IF PEEK(85)>38 THEN POKE 85,0›680 IF PEEK(84)>5 THEN POKE 84,0›690 POKE 53251,PEEK(85)*4+36:A=PEEK(84)*4+86:A$=ZERO$(1,127):A$(A,A+3)=""›700 POKE 764,255:GOTO 640›710 POKE 694,128*(PEEK(694)=0):POKE 53279,0:GOSUB 140›720 IF PEEK(694)=128 THEN POSITION 29,1:? " ÉÎÖÅÒÓÅ "›730 IF PEEK(694)=0 THEN POSITION 29,1:? " NORMAL "›740 POKE 764,255:GOSUB 160:POKE 84,A:POKE 85,B:GOTO 640›750 GOSUB 760:GOSUB 140:POKE 53259,3:RETURN ›760 POKE DL+23,4:POKE DL+24,4:POKE DL+25,5:POKE DL+26,5:POKE DL+27,65:POKE DL+28,PEEK(560):POKE DL+29,PEEK(561)›770 RETURN ›780 REM  ÌÏÁÄ ÃÈÁÒÁÃÔÅÒ ÓÅÔ ›790 FILE$="load":GOSUB 800:TRAP 890:OPEN #1,4,0,FILE$:POKE 850,7:GOSUB 870:RETURN ›800 POKE 752,0:GOSUB 140:GOSUB 110:POSITION 2,0:? "Enter name to ";FILE$;". (1-8 characters)"›810 POSITION 16,1:INPUT NAME$:POKE 752,1:IF NAME$="" THEN POP :RETURN ›811 FOR A=1 TO LEN(NAME$):IF NAME$(A,A)=":" THEN NAME$=NAME$(A+1,LEN(NAME$)):POP :GOTO 811›812 IF NAME$(A,A)="." THEN NAME$=NAME$(1,A-1):POP :GOTO 811›813 IF ASC(NAME$(A,A))<65 OR ASC(NAME$(A,A))>90 THEN POP :POP :RETURN ›814 NEXT A›820 FILE$="D:":REM * Cassette users should replace "D:" with "C:". The remaining file name is irrelevant.›830 FILE$(LEN(FILE$)+1)=NAME$:FILE$(LEN(FILE$)+1)=".SET"›840 GOSUB 110:RETURN ›850 REM  ÓÁÖÅ ÃÈÁÒÁÃÔÅÒ ÓÅÔ ›860 FILE$="save":GOSUB 800:TRAP 890:OPEN #1,8,0,FILE$:POKE 850,11:GOSUB 870:RETURN ›870 POKE 852,0:POKE 853,CHBASE/256:POKE 856,0:POKE 857,4:POKE 756,CHBASE/256:A=USR(1555)›880 CLOSE #1:TRAP 32767:POKE 54286,192:POKE 756,224:RETURN ›890 GOSUB 110:POSITION 1,0:? CHR$(253);"An ERROR ";PEEK(195);" has occurred."›900 IF PEEK(195)=165 THEN ? "Improper file name - try again."›910 IF PEEK(195)=170 THEN ? "File not found - try again."›920 ? "Press any key to continue.";:GET #3,KEY:GOTO 880›930 A=STICK(1):IF A<>15 THEN GOSUB 1500:REM  ÊÏÙÓÔÉÃË ›940 A=STICK(0):B=STRIG(0)›950 IF A=7 THEN X=X+8:IF X>24 THEN X=0›960 IF A=11 THEN X=X-8:IF X<0 THEN X=24›970 IF A=14 THEN Y=Y-4:IF Y<20 THEN Y=48›980 IF A=13 THEN Y=Y+4:IF Y>48 THEN Y=20›990 POKE 53251,X+56:A$=O$(81-Y,81-Y+128)›1000 IF B=1 AND A<>15 THEN GOSUB 50›1010 IF PEEK(764)<>255 THEN GOSUB 1050›1020 IF PEEK(53279)=5 THEN FOR D=0 TO 3:POKE DL+D+19,4*(PEEK(DL+D+19)=2)+2*(PEEK(DL+D+19)=4):NEXT D›1030 IF B=0 THEN GOSUB 210›1040 GOTO 930›1050 REM  ËÅÙÂÏÁÒÄ ÃÈÅÃË ›1060 GOSUB 140:GET #3,KEY:IF KEY>127 THEN KEY=KEY-128:POKE 694,0›1070 A=KEY:A=A+64*(A<32)-32*(A>95)›1080 IF A=76 THEN GOSUB 780:GOSUB 60›1090 IF A=83 THEN GOSUB 850:GOSUB 60›1100 IF A=69 THEN GOSUB 290›1110 IF A=82 THEN GOSUB 330›1115 IF A=67 THEN GOSUB 1630›1120 IF A=84 THEN GOSUB 580:GOSUB 60›1130 IF A=77 OR A=32 THEN GOSUB 60›1140 IF KEY=49 THEN C=1›1150 IF KEY=50 THEN C=2›1160 IF KEY=51 THEN C=3›1170 POKE 764,255:RETURN ›1180 REM  ÉÎÉÔÉÁÌÉÚÁÔÉÏΠ›1190 RAMTOP=PEEK(106)-12:POKE 89,RAMTOP:POKE 88,0:? CHR$(125):C=1:CHR=65:OPEN #3,4,0,"K:"›1200 POKE 106,RAMTOP:CHBASE=(RAMTOP+8)*256:PMBASE=(RAMTOP+4)*256:GRAPHICS 0:POKE 710,176›1210 POKE 203,CHBASE/256:POSITION 9,3:? " ÉÎÉÔÉÁÌÉÚÉÎÇ ÐÒÏÇÒÁÍ";:GOSUB 350›1220 FOR A=0 TO 24:READ B:POKE 1536+A,B:NEXT A:POKE 512,0:POKE 513,6›1230 VT=PEEK(134)+256*PEEK(135):AT=PEEK(140)+256*PEEK(141)›1240 X=CHBASE-AT:Y=57344-AT:GOSUB 1320:POKE VT+2,X2:POKE VT+3,X1:POKE VT+4,1:POKE VT+5,4:POKE VT+6,1:POKE VT+7,4›1260 POKE VT+10,Y2:POKE VT+11,Y1:POKE VT+12,1:POKE VT+13,4:POKE VT+14,1:POKE VT+15,4:A$=O$›1270 X=PMBASE+896-AT:Y=PMBASE-AT:GOSUB 1320:POKE VT+2,X2:POKE VT+3,X1:POKE VT+10,Y2:POKE VT+11,Y1›1280 X=PEEK(88)+256*PEEK(89)+100-AT:Y=RAMTOP*256-AT:GOSUB 1320:POKE VT+18,X2:POKE VT+19,X1:POKE VT+26,Y2›1290 POKE VT+27,Y1:X=PEEK(88)+256*PEEK(89)-AT:GOSUB 1320:POKE VT+34,X2:POKE VT+35,X1›1300 X=PEEK(88)+256*PEEK(89)+380-AT:GOSUB 1320:POKE VT+42,X2:POKE V7+43,X1›1310 FOR A=4 TO 44 STEP 8:FOR B=0 TO 3:READ D:POKE VT+A+B,D:NEXT B:NEXT A:GOTO 1330›1320 X1=INT(X/256):X2=INT(X-(256*X1)):Y1=INT(Y/256):Y2=INT(Y-(256*Y1)):RETURN ›1330 REM  ÐÌÁÙÅÒ¯ÍÉÓÓÉÌÅ ÇÒÁÐÈÉÃÓ ›1340 POKE 54279,PMBASE/256:FOR D=0 TO 2:POKE 704+D,6:NEXT D:POKE 707,68›1350 FOR D=53248 TO 53255:READ X:POKE D,X:NEXT D:FOR D=53256 TO 53258:POKE D,1:NEXT D:POKE 53259,3:X=0›1360 FOR A=0 TO 256 STEP 128:FOR D=20 TO 52 STEP 4:POKE PMBASE+512+A+D,21:NEXT D:NEXT A›1370 FOR D=22 TO 50 STEP 4:POKE PMBASE+384+D,85:NEXT D:POKE 623,17›1380 Y=20:FOR D=0 TO 3:POKE PMBASE+D+Y+896,3:NEXT D:FOR D=0 TO 3:POKE PMBASE+D+80,3:NEXT D›1390 REM  ÅÓÔÁÂÌÉÓÈ ÄÉÓÐÌÁÙ ÓÃÒÅÅΠ›1400 GRAPHICS 0:POKE 752,1:POKE 711,68:DL=PEEK(560)+256*PEEK(561):HOME=PEEK(DL+4)+256*PEEK(DL+5):POKE DL+3,72›1410 FOR D=0 TO 8:POKE DL+D+6,8:NEXT D:POKE DL+18,144:GOSUB 760:POKE 54286,192›1420 GOSUB 150:POSITION 4,0:POKE 766,1:FOR F=0 TO 3:FOR D=0 TO 31:? CHR$(D+32*F);:NEXT D:? :NEXT F:POKE 766,0›1430 POKE 559,46:POKE 53277,3:GOSUB 390:GOSUB 140:GOSUB 60:GOTO 930›1440 DATA 72,138,72,152,72,165,203,141,10,212,141,9,212,104,168,104,170,104,64,104,162,16,76,86,228›1450 DATA 128,0,128,0,128,1,128,1,120,0,120,0,160,0,160,0,100,0,100,0,160,0,160,0›1460 DATA 149,161,173,56,83,91,99,107›1500 B=STRIG(1)*4:D=PEEK(53279)=3:IF A=7 THEN A=12›1510 A=A-10:IF A<0 THEN RETURN ›1520 A=A+B:ON A GOTO 1530,1540,1550,1560,1570,1580,1590,1610:RETURN ›1530 POKE 712,PEEK(712)-2+256*(PEEK(712)<2):RETURN ›1540 POKE 712,PEEK(712)+2-256*(PEEK(712)>252):RETURN ›1550 POKE 710,PEEK(710)-2+256*(PEEK(710)<2):RETURN ›1560 POKE 710,PEEK(710)+2-256*(PEEK(710)>252):RETURN ›1570 POKE 709,PEEK(709)-2+256*(PEEK(709)<2):RETURN ›1580 POKE 709,PEEK(709)+2-256*(PEEK(709)>252):RETURN ›1590 IF NOT D THEN POKE 708,PEEK(708)-2+256*(PEEK(708)<-2):RETURN ›1600 POKE 711,PEEK(711)-2+256*(PEEK(710)<2):RETURN ›1610 IF NOT D THEN POKE 708,PEEK(708)+2-256*(PEEK(708)>252):RETURN ›1620 POKE 711,PEEK(711)+2-256*(PEEK(711)>252):RETURN ›1630 GOSUB 110:GOSUB 340:POSITION 8,1:? "Select character to copy"›1640 KEY=CHR:GET #3,CHR:GOSUB 390›1650 FOR A=0 TO 7:POKE CHBASE+KEY*8+A,PEEK(CHBASE+CHR*8+A):NEXT A:GOSUB 140:GOTO 70›