Draws pictures on the screen with a joystick, using icon menus shown in the bottom two lines. A pointing-hand cursor selects the tools: print the picture, save or load it on tape, throw it away, change the ink color, switch to graphics mode, stamp a graphic, or change the drawing style. In drawing mode the joystick moves a one-pixel or five-pixel pen, which the fire button erases. Graphics mode adds squares, triangles, circles and rectangles of adjustable size, each optionally filled, along with a scan-line fill for an area the user marks out. Pictures are saved as SCREEN$ files, and one picture can be stored in memory and recalled later.
The label reads “DRAW II (c) 1984 Peech II productions”, and the title sequence plays an animated colored line and an AY chord before showing “PEECH II Productions presents DRAW II”. The tape holds a short loader, a title SCREEN$, Jdraw (which defines the icon UDGs) and the main program ZX. A second recording contains four sample pictures: bike, music1, cab1 and t/s.
Program Analysis
Program Structure
The loader sets ON ERR GO TO 5 (which does NEW), loads the title screen in invisible ink, and loads Jdraw. That program defines all 21 UDGs with POKE USR CHR$ n,BIN ..., with REM labels for each icon (wastebasket, finger, hand, sleeve, printer, pencil, recorder, house and heart). It then loads ZX, the 25 KB main program, which is organized as follows:
- Lines 1–99: setup, picture name, paper and ink selection, border box, and the pen loop that reads
STICK - Lines 100–162: main icon menu
- Lines 163–194: text entry at a block cursor
- Lines 500–710: title animation and command summary
- Lines 720–806: graphic stamps (heart, tree, house, musical note and others)
- Lines 810–910: printer and tape routines
- Lines 4000–6850: shape tools with size adjustment and optional fill
- Lines 7000–7200: cursor locator
- Lines 8000–8205: area fill
- Lines 9200–9520: new picture, and store or recall a picture in memory
- Lines 9600–9670:
CLEAR 52999and installation of two 12-byteLDIRroutines
Memory Store and Recall
Two routines are POKEd from DATA: at sv=32000, LD DE,33000 / LD HL,16384 / LD BC,6912 / LDIR / RET, and at rc=32050 the same with source and destination swapped. Before each call the program POKEs a new address into the operand bytes (32001–32002 and 32054–32055), computed as pic*7000+26000. With pic=4 this is 54000, above the CLEAR point, so the screen is copied into reserved memory and back.
Notable Techniques
- The joystick is read with the TS2068
STICKfunction (|(1,1)for direction,|(2,1)for the fire button), including the diagonal values 5, 6, 9 and 10. - Menus are printed with
PRINT #1into the lower screen, and the cursor is a three-character UDG hand and sleeve. - Filled shapes are drawn as a series of shrinking outlines, for example circles of radius
preduced by 0.5 each pass. - The area fill scans each row between the marked limits with
POINT, switching plotting on and off when it crosses existing lines. - The title uses
SOUNDto set the AY registers for a three-voice chord. - Entering 10.1329 at the paper-color prompt clears error trapping and stops the program.
- Before printing, the program tests
PEEK 64260and uses eitherCOPYorLPRINT CHR$ 1, which suggests support for an alternative printer driver.
Potential Issues
- The diagonal-movement limits at lines 920–937 compare
xwith 160 andywith 248, which appears to swap the axes. The general limits at lines 93–96 still keep the pen on screen. - The rectangle tool uses the square size
jas its height, and checks that height against the screen edge. - Lines 6130 and 805 jump to the missing lines 6110 and 740; they work because execution continues at the next line.
- The
CIRCLEroutine at line 2300 is never reached. - Several messages are misspelled (“REVEIW”, “EXSISTS”, “SIZE TO LARGE”).
Source Code
1 ON ERR GO TO 3: POKE 23659,2: BORDER 1: PAPER 1: CLS : BEEP .05,30: LET m=9
2 GO SUB 500: LET poop=0: GO TO 9600
3 LET wedo=0: IF poop=0 THEN GO TO 9600
4 ON ERR GO TO 4: CLS : INK 1: PAPER 6: CLS : PRINT "The name you enter will be used to identify your picture": INPUT LINE t$: CLS : LET r=LEN t$: IF r<1 OR r>10 THEN GO TO 4
5 LET x=25: LET y=27: LET h=19: LET b=2: LET v=27: LET c=0
6 LET r=0: LET i=0: LET p=25
7 LET j=40: LET q=40: LET o=40
8 POKE 23609,3: PAPER 7: INK 0: CLS
9 FOR l=0 TO 7: PRINT INK 0;l;"="; INK l;"::::::::::::::::::::": BEEP .05,l: PRINT : NEXT l
10 INPUT "Paper ? ";a
11 IF a=10.1329 THEN ON ERR RESET : STOP
12 IF a<0 OR a>7 THEN GO TO 10
15 IF t$=CHR$ 32 THEN LET t$="::"
30 BEEP .05,10: BEEP .01,10: INPUT "Ink ? ";f
35 IF f<0 OR f>7 THEN GO TO 30
40 INK 0
42 PAPER a: CLS
45 INK 9: PLOT 0,10: DRAW 255,0: DRAW 0,155: DRAW -255,0: DRAW 0,-155: ON ERR GO TO 200
47 INK f
50 PRINT AT 0,0;t$
55 PLOT x,y
56 IF |(2,1) THEN PLOT OVER 1;x,y
57 GO TO 60
58 PLOT x,y: PLOT x+1,y: PLOT x-1,y: PLOT x,y+1: PLOT x,y-1
59 IF |(2,1) THEN PLOT OVER 1;x,y: IF |(2,1) THEN PLOT OVER 1;x+1,y: IF |(2,1) THEN PLOT OVER 1;x-1,y: IF |(2,1) THEN PLOT OVER 1;x,y+1: IF |(2,1) THEN PLOT OVER 1;x,y-1
60 IF |(1,1)=1 THEN LET y=y+1
61 IF |(1,1)=6 THEN GO TO 924
62 IF |(1,1)=5 THEN GO TO 930
63 IF |(1,1)=9 THEN GO TO 935
70 IF |(1,1)=2 THEN LET y=y-1
80 IF |(1,1)=8 THEN LET x=x+1
90 IF |(1,1)=4 THEN LET x=x-1
91 IF |(1,1)=10 THEN GO TO 920
92 IF INKEY$=CHR$ 13 THEN GO TO 100
93 IF x<6 THEN LET x=6
94 IF x>248 THEN LET x=248
95 IF y<15 THEN LET y=15
96 IF y>160 THEN LET y=160
97 IF INKEY$="c" THEN GO TO 7000
98 IF r=1 THEN GO TO 58
99 GO TO 55
100 LET c=0: LET v=27
101 PRINT #1;AT 0,1; INK 1;CHR$ 144
102 PRINT AT 0,0; INK f;t$
105 IF v=1 AND |(2,1) THEN GO TO 9200
107 IF v=17 AND i=1 AND |(2,1) THEN GO TO 720
110 PRINT #1;AT 0,5;CHR$ 153;AT 1,5;CHR$ 154
111 IF v=5 AND |(2,1) THEN GO TO 855
112 IF v=21 AND |(2,1) THEN GO TO 195
113 IF v=9 AND |(2,1) THEN GO TO 810
114 IF i=0 AND v=17 AND |(2,1) THEN GO TO 4000
115 IF v=13 AND |(2,1) THEN LET f=f+1
120 PRINT #1;AT 0,9; INK 4;CHR$ 148;CHR$ 149
125 IF i=1 THEN PRINT #1;AT 0,17; INK 0;CHR$ 158
130 PRINT #1;AT 0,13; INK f;"C"
132 IF i=0 THEN PRINT #1;AT 0,16; INK 4;"{G}"
133 IF i=0 AND v=16 AND |(2,1) THEN GO TO 4000
135 PRINT AT 21,21; INK 2;" .": PRINT #1;AT 0,21; INK 6;" :": PRINT #1;AT 1,21; INK 0;CHR$ 152
136 PRINT #1;AT 1,8; INK 2;"PLEASE SELECT"
137 IF v<0 THEN LET v=0
138 IF v>27 THEN LET v=27
145 PRINT #1;AT c,v; INK 0;CHR$ 145;CHR$ 146; INK 6; PAPER 0;CHR$ 147
146 IF |(1,1)=4 THEN LET v=v-1
147 IF |(1,1)=8 THEN LET v=v+1
148 PAUSE 2: PRINT #1;AT c,v-1;" "
149 PRINT #1;AT 1,8; INK 2;"please select"
150 IF v=0 AND |(2,1) THEN GO TO 9200
151 IF v=16 AND i=1 AND |(2,1) THEN GO TO 720
152 IF v=4 AND |(2,1) THEN GO TO 855
153 IF v=20 AND |(2,1) THEN GO TO 195
154 IF v=8 AND |(2,1) THEN GO TO 810
156 IF v=12 AND |(2,1) THEN LET f=f+1
157 IF f=8 THEN LET f=0
158 INK f
161 IF INKEY$=CHR$ 32 THEN GO TO 200
162 GO TO 101
163 LET i=1
164 PRINT AT h,b; INK f;"::"
165 IF |(2,1) THEN PRINT AT h,b;" "
166 IF |(1,1)=1 THEN LET h=h-1
167 IF |(1,1)=2 THEN LET h=h+1
168 IF |(1,1)=8 THEN LET b=b+1
169 IF |(1,1)=4 THEN LET b=b-1
170 IF h<2 THEN LET h=2
171 IF h>19 THEN LET h=19
172 IF b<1 THEN LET b=1
173 IF b>30 THEN LET b=30
174 IF b=30 THEN GO TO 193
175 PRINT AT h,b; INK f;INKEY$
179 IF INKEY$<>"" AND b<>30 THEN LET b=b+1
193 IF INKEY$=CHR$ 13 THEN GO TO 100
194 PAUSE 8: GO TO 164
195 LET v=27: LET c=0: PRINT #1;AT 0,0;" ": PRINT AT 21,21;" ": PRINT #1;AT 1,0;" "
196 PRINT #1;AT 0,1; INK f;"+"
197 PRINT #1;AT 0,7; INK f;"."
198 PRINT #1;AT 0,14; INK f;"::"
199 GO TO 1000
200 PRINT #1;AT 0,0;" ": PRINT AT 21,0;" "
201 PRINT #1;AT 1,0;" "
202 PRINT AT 0,15;" ": BEEP .05,30
230 IF i=0 THEN GO TO 50
240 IF i=1 THEN GO TO 163
250 STOP
260 SAVE "<+>" LINE 0
270 STOP
500 BRIGHT 1: PAPER 1: CLS : FOR u=1 TO 13
502 INK 7: PRINT AT 10,9; FLASH 1;"STOP THE TAPE"
504 BEEP .1,.05
505 PAUSE 10: NEXT u
515 BRIGHT 0: CLS
525 PAPER 7: CLS : BORDER 6: CLS
572 LET p=0
573 LET k=8: LET l=128
575 FOR u=1 TO 110
577 BEEP .009,m: LET m=m+1: IF m=10 THEN LET m=1
578 PLOT k,l
579 PLOT k+1,l: PLOT k+2,l
580 LET l=l-1
585 INK p: LET p=p+1: IF p=7 THEN LET p=0
586 IF INKEY$<>"" THEN GO TO 640
588 NEXT u
589 LET m=1
600 FOR u=1 TO 216
605 IF INKEY$<>"" THEN GO TO 640
610 LET k=k+1
611 PLOT k,l+1
612 PLOT k,l: PLOT k,l+2
615 BEEP .002,m: LET m=m+1: IF m=70 THEN LET m=1
616 INK p: LET p=p+1: IF p=7 THEN LET p=0
617 NEXT u
618 LET e=30
620 PRINT AT 10,2; INK 3;"PEECH II Productions"
624 BEEP .05,20
625 PRINT AT 12,5; INK 2;"presents>>>>>"
626 SOUND 0,211;1,0;2,167;3,0;4,141;5,0;7,56;8,15;9,15;10,15: PAUSE 100: SOUND 8,0;9,0;10,0;7,63
627 BEEP .09,5
628 PRINT AT 14,2; INK 1;" DRAW II"
629 INK 2: PLOT 0,155: DRAW 255,0: DRAW 0,20: DRAW -255,0: DRAW 0,-20: PRINT AT 1,1; INK 4;"* 1984 by Peech II Productions"
630 PAUSE 60: PRINT AT 9,23; INK 4;CHR$ 162: PRINT AT 10,23; INK 2;CHR$ 163: BEEP .005,30: BEEP .03,50
639 BRIGHT 0: PAUSE 240
640 PAPER 7: BORDER 7: CLS : PRINT INK 1;"A REVEIW OF COMMANDS"
645 PRINT : PRINT INK 4;CHR$ 148;CHR$ 149; INK 2;"=print out your picture"
650 PRINT : PRINT INK 0;CHR$ 153; INK 2;"=save your picture on tape": INK 0: PRINT CHR$ 154
655 PRINT : PRINT INK 1;CHR$ 144; INK 2;"=throw away your drawing"
660 PRINT : PRINT INK 3;"C"; INK 2;"=change the ink color"
661 PRINT : PRINT INK 4;"{G}"; INK 2; FLASH 0;"=go to graphics mode"
663 PRINT : PRINT INK 0;CHR$ 158; INK 2;"=stamp a graphic"
664 PRINT : PRINT INK 2;" .": PRINT INK 6;" :"; INK 2;"=change drawing style": PRINT INK 0;CHR$ 152
665 PRINT : PRINT CHR$ 145;CHR$ 146; INK 6; PAPER 0;CHR$ 147; INK 2; PAPER 7;"=the hand you point with"
666 PRINT #1;AT 0,3; INK 5; FLASH 1; PAPER 1;"PRESS ANY KEY TO CONTINUE": PAUSE 0: CLS
667 PRINT : PRINT : PRINT : PRINT INK 4;"USE 'ENTER' TO GET TO MAIN MENU WHILE IN DRAWING MODE "
669 PRINT : PRINT INK 4;" USE 'SPACE BAR' TO GET TO DRAWING MODE WHILE IN MAIN MENU "
675 PRINT : PRINT " "; FLASH 1; INK 5; PAPER 1;" PRESS ANY KEY TO CONTINUE "
700 PAUSE 0
710 BEEP .09,30: RETURN
720 IF h=19 THEN GO TO 200
725 IF b=30 THEN GO TO 200
735 LET c=0: LET v=27
737 PRINT #1;AT 0,0;" ": PRINT #1;AT 1,0;" "
742 PRINT #1;AT 0,1; INK 2;CHR$ 157
745 PRINT #1;AT 0,13;" "
750 PRINT #1;AT 0,5; INK 2;CHR$ 160: PRINT #1;AT 1,5; INK 4;CHR$ 161
751 IF v=1 AND |(2,1) THEN PRINT AT h,b+1; INK 2;CHR$ 157
752 IF v=5 AND |(2,1) THEN PRINT AT h,b+1; INK 2;CHR$ 160;AT h+1,b+1; INK 4;CHR$ 161
753 IF v=10 AND |(2,1) THEN PRINT AT h,b+1; INK 0;CHR$ 145;CHR$ 146; INK 6; PAPER 0;CHR$ 147
756 IF v=20 AND |(2,1) THEN PRINT AT h,b+1; INK 2;CHR$ 164
757 IF v=24 AND |(2,1) THEN PRINT AT h,b+1; INK 4;CHR$ 162;AT h+1,b+1; INK 2;CHR$ 163
758 IF v=17 AND |(2,1) THEN PRINT AT h,b+1; INK 0;CHR$ 155;AT h+1,b+1;CHR$ 156
759 IF v=14 AND |(2,1) THEN PRINT AT h,b+1; INK 0;CHR$ 159
760 PRINT #1;AT 0,9; INK 0;CHR$ 145;CHR$ 146; INK 6; PAPER 0;CHR$ 147
764 PRINT #1;AT 0,14; INK 0;CHR$ 159;" "
766 PRINT #1;AT 0,21; INK 2;CHR$ 164: PRINT AT 21,21;" ": PRINT #1;AT 1,21;" "
768 PRINT #1;AT 0,17; INK 0;CHR$ 155: PRINT #1;AT 1,17; INK 0;CHR$ 156
770 PRINT #1;AT 0,24; INK 4;CHR$ 162: PRINT #1;AT 1,24; INK 2;CHR$ 163
780 PRINT #1;AT c,v; INK 0;CHR$ 145;CHR$ 146; INK 6; PAPER 0;CHR$ 147
781 PRINT AT 21,7; INK 2;"PLEASE SELECT"
782 PAUSE 5: PRINT #1;AT c,v;" "
785 IF |(1,1)=8 THEN LET v=v+1
790 IF |(1,1)=4 THEN LET v=v-1
791 IF v>27 THEN LET v=27
792 IF v<0 THEN LET v=0
795 IF v=0 AND |(2,1) THEN PRINT AT h,b+1; INK 2;CHR$ 157
796 IF v=4 AND |(2,1) THEN PRINT AT h,b+1; INK 2;CHR$ 160;AT h+1,b+1; INK 4;CHR$ 161
797 IF v=9 AND |(2,1) THEN PRINT AT h,b+1; INK 0;CHR$ 145;CHR$ 146; INK 6; PAPER 0;CHR$ 147
798 IF v=13 AND |(2,1) THEN PRINT AT h,b+1; INK 0;CHR$ 159
799 IF v=16 AND |(2,1) THEN PRINT AT h,b+1; INK 0;CHR$ 155;AT h+1,b+1;CHR$ 156
800 IF v=19 AND |(2,1) THEN PRINT AT h,b+1; INK 2;CHR$ 164
801 IF v=23 AND |(2,1) THEN PRINT AT h,b+1; INK 4;CHR$ 162;AT h+1,b+1; INK 2;CHR$ 163
803 IF INKEY$=CHR$ 32 THEN GO TO 806
804 PRINT AT 21,7; INK 2;"please select"
805 GO TO 740
806 LET b=b-1: GO TO 200
810 PRINT AT 21,21;" ": PRINT #1;AT 0,0;" ": PRINT #1;AT 1,0;" "
812 INPUT INK 2;"How may copies ? ";s
815 FOR u=1 TO s
816 IF PEEK 64260<1 THEN GO TO 824
819 LPRINT CHR$ 1
820 NEXT u
821 GO TO 840
824 COPY
825 NEXT u
840 PRINT #1;AT 0,0; INK 3; PAPER 6; FLASH 1;" PRINTING COMPLETED ": PAUSE 75
846 GO TO 200
850 STOP
855 PRINT #1;AT 0,0;" ": PRINT #1;AT 1,0;" "
856 PRINT AT 21,21;" "
857 ON ERR GO TO 9900
860 PRINT #1;AT 1,0; INK 2;"Hit 'L' to load picture"
865 PRINT #1;AT 0,0; INK 4;"Hit 'S' to save picture"
875 IF INKEY$="s" OR INKEY$="S" THEN GO TO 900
880 IF INKEY$="l" OR INKEY$="L" THEN GO TO 885
881 IF INKEY$=CHR$ 32 THEN GO TO 9999
882 GO TO 860
885 INPUT INK 1;"filename = "; LINE d$: PRINT #1;AT 1,0;" ": PRINT #1;AT 0,0; INK 5;"START TAPE ": LOAD d$SCREEN$
886 PRINT AT 0,0;" ": PRINT AT 0,0;t$: PLOT 0,10: DRAW 255,0: DRAW 0,155: DRAW -255,0: DRAW 0,-155: PRINT #1;AT 0,0; INK 6; PAPER 2; FLASH 1;" LOADING COMPLETED ": PAUSE 75: GO TO 9999
900 PRINT #1;AT 0,0;" "
905 SAVE t$SCREEN$
906 PRINT #1;AT 0,0; INK 6; PAPER 1; FLASH 1;" FILE SAVED TO TAPE ": PAUSE 75
910 GO TO 9999
920 IF x=160 THEN GO TO 92
921 LET x=x+1: LET y=y-1
923 GO TO 92
924 IF x=15 THEN GO TO 92
925 LET x=x-1: LET y=y-1
926 GO TO 92
930 IF y=7 THEN GO TO 92
931 LET x=x-1: LET y=y+1
932 GO TO 92
935 IF y=248 THEN GO TO 92
936 LET x=x+1: LET y=y+1
937 GO TO 92
1000 PRINT #1;AT c,v; INK 0;CHR$ 145;CHR$ 146; INK 6; PAPER 0;CHR$ 147
1001 PRINT #1;AT 1,7; INK 2;"PLEASE SELECT"
1003 PAUSE 8
1004 PRINT #1;AT 1,7; INK 2;"please select"
1005 PRINT #1;AT c,v;" "
1010 IF |(1,1)=4 THEN LET v=v-1
1020 IF |(1,1)=8 THEN LET v=v+1
1030 IF v<0 THEN LET v=0
1040 IF v>27 THEN LET v=27
1050 IF v=0 AND |(2,1) THEN GO TO 1500
1051 IF v=1 AND |(2,1) THEN GO TO 1500
1052 IF v=7 AND |(2,1) THEN GO TO 2000
1053 IF v=14 AND |(2,1) THEN GO TO 2100
1060 IF v=6 AND |(2,1) THEN GO TO 2000
1070 IF v=13 AND |(2,1) THEN GO TO 2100
1072 IF INKEY$=CHR$ 32 THEN GO TO 200
1080 GO TO 196
1500 LET r=1: LET i=0
1501 GO TO 200
2000 LET r=0: LET i=0
2001 GO TO 200
2100 LET i=1
2200 GO TO 200
2300 CIRCLE x,y,p
2305 IF r=0 THEN GO TO 200
2310 CIRCLE x,y,p-1: CIRCLE x,y,p-2: CIRCLE x,y,p-3
2320 GO TO 200
4000 PRINT #1;AT 0,0;" "
4010 PRINT #1;AT 1,0;" "
4015 PRINT AT 21,21;" "
4030 LET c=0: LET v=27
4040 IF |(1,1)=4 THEN LET v=v-1
4050 IF |(1,1)=8 THEN LET v=v+1
4055 IF INKEY$=CHR$ 32 THEN GO TO 200
4056 IF v=2 AND |(2,1) THEN GO TO 5000
4057 IF v=1 AND |(2,1) THEN GO TO 5000
4060 IF v>27 THEN LET v=27
4070 IF v<0 THEN LET v=0
4080 PRINT #1;AT 0,2; INK 1;"::"
4085 PRINT #1;AT 0,22; INK 1;"X"
4090 PRINT #1;AT 0,7; INK 2;CHR$ 150
4105 PRINT #1;AT 0,12; INK 3;CHR$ 151
4110 PRINT #1;AT 0,17; INK 5;".."
4190 PRINT #1;AT 1,7; INK 2;"please select"
4200 PRINT #1;AT c,v; INK 0;CHR$ 145;CHR$ 146; INK 6; PAPER 0;CHR$ 147
4201 PAUSE 3
4203 PRINT #1;AT 1,7; INK 2;"PLEASE SELECT"
4205 PRINT #1;AT c,v;" "
4220 IF v=7 AND |(2,1) THEN GO TO 5500
4230 IF v=6 AND |(2,1) THEN GO TO 5500
4240 IF v=12 AND |(2,1) THEN GO TO 6000
4250 IF v=11 AND |(2,1) THEN GO TO 6000
4255 IF v=22 AND |(2,1) THEN GO TO 8000
4257 IF v=21 AND |(2,1) THEN GO TO 8000
4260 IF v=17 AND |(2,1) THEN GO TO 6500
4270 IF v=16 AND |(2,1) THEN GO TO 6500
4500 GO TO 4040
5000 PRINT #1;AT 0,0;" "
5005 PRINT #1;AT 1,0;" "
5010 PRINT #1;AT 0,0; INK 1;"PUSH JOYSTICK UP TO INCREASE"
5015 PRINT #1;AT 1,0; INK 3;"PUSH DOWN TO DECREASE SIZE"
5020 IF |(1,1)=1 THEN LET j=j+1
5021 IF j<1 THEN LET j=80
5022 IF INKEY$=CHR$ 32 THEN GO TO 200
5023 IF j>80 THEN LET j=0
5025 PRINT #1;AT 1,28;" "
5026 PRINT #1;AT 1,28;j
5030 IF |(1,1)=2 THEN LET j=j-1
5040 PAUSE 20
5050 IF |(2,1) THEN GO TO 5100
5055 IF INKEY$=CHR$ 32 THEN GO TO 200
5060 BEEP .005,2
5070 GO TO 5020
5100 IF x<248-j AND y<170-j THEN GO TO 5120
5115 GO TO 9700
5120 PRINT #1;AT 0,0;" ": PRINT #1;AT 1,0;" "
5125 PRINT #1;AT 0,0; INK 2;"PRESS 'F' TO FILL IN THE SQUARE"
5130 PRINT #1;AT 1,0; INK 3;"PRESS 'C' TO CONTINUE"
5140 IF INKEY$="f" OR INKEY$="F" THEN GO TO 5150
5142 IF INKEY$=CHR$ 32 THEN GO TO 200
5145 IF INKEY$="c" OR INKEY$="C" THEN GO TO 5200
5146 GO TO 5140
5150 GO SUB 9000: LET u=j: FOR e=1 TO j
5151 IF INKEY$=CHR$ 32 THEN LET j=u: GO TO 200
5152 DRAW j,0: DRAW 0,j: DRAW -j,0: DRAW 0,-j
5153 PRINT AT 0,15; FLASH 1; INK 2; PAPER 7;"COLORING"
5154 LET j=j-1
5155 NEXT e
5160 LET j=u
5165 PRINT AT 0,15;" "
5170 LET j=INT j: GO TO 200
5205 GO SUB 9000: DRAW j,0: DRAW 0,j: DRAW -j,0: DRAW 0,-j
5210 LET j=INT j: GO TO 200
5500 PRINT #1;AT 0,0;" ": PRINT #1;AT 1,0;" "
5510 PRINT #1;AT 0,0; INK 4;"PUSH JOYSTICK UP TO INCREASE"
5520 PRINT #1;AT 1,0; INK 3;"PUSH DOWN TO DECREASE SIZE"
5530 PRINT #1;AT 1,27;" "
5540 PRINT #1;AT 1,27;q
5550 IF |(1,1)=1 THEN LET q=q+1
5560 IF |(1,1)=2 THEN LET q=q-1
5570 IF q<1 THEN LET q=80
5580 IF q>80 THEN LET q=1
5585 PAUSE 20
5590 IF |(2,1) THEN GO TO 5600
5592 IF INKEY$=CHR$ 32 THEN GO TO 200
5593 BEEP .005,2
5595 GO TO 5530
5600 PRINT #1;AT 0,0;" ": PRINT #1;AT 1,0;" "
5605 IF x<248-q AND y<145-q THEN GO TO 5610
5607 GO TO 9700
5610 PRINT #1;AT 0,0; INK 1;"PRESS 'F' TO FILL IN TRIANGLE"
5620 PRINT #1;AT 1,0; INK 2;"PRESS 'C' TO CONTINUE"
5630 IF INKEY$="c" OR INKEY$="C" THEN GO TO 5650
5635 IF INKEY$="f" OR INKEY$="F" THEN GO TO 5800
5640 IF INKEY$=CHR$ 32 THEN GO TO 200
5645 GO TO 5630
5650 GO SUB 9000: DRAW q,q
5655 DRAW q,-q
5657 DRAW -q*2,0
5670 LET q=INT q: GO TO 200
5800 GO SUB 9000: LET u=q: FOR e=1 TO q*2
5802 PRINT AT 0,15; INK 2; PAPER 7; FLASH 1;"COLORING"
5805 DRAW q,q
5810 DRAW q,-q
5815 IF INKEY$=CHR$ 32 THEN LET q=u: GO TO 200
5820 DRAW -q*2,0
5830 LET q=q-.5
5840 NEXT e
5845 PRINT AT 0,15;" "
5850 LET q=u: LET q=INT q: GO TO 200
6000 PRINT #1;AT 0,0;" ": PRINT #1;AT 1,0;" "
6005 PRINT #1;AT 0,0; INK 1;"PUSH JOYSTICK UP TO INCREASE"
6010 PRINT #1;AT 1,0; INK 4;"PUSH DOWN TO DECREASE SIZE"
6020 PRINT #1;AT 1,27;" "
6040 PRINT #1;AT 1,27;p
6045 BEEP .005,2: PAUSE 20
6050 IF p>50 THEN LET p=1
6060 IF p<1 THEN LET p=50
6070 IF |(2,1) THEN GO TO 6100
6075 IF |(1,1)=1 THEN LET p=p+1
6080 IF |(1,1)=2 THEN LET p=p-1
6085 IF INKEY$=CHR$ 32 THEN GO TO 200
6090 GO TO 6020
6100 PRINT #1;AT 0,0;" ": PRINT #1;AT 1,0;" "
6102 IF x<248-p AND x>0+p AND y<145-p AND y>16+p THEN GO TO 6105
6103 GO TO 9700
6105 PRINT #1;AT 0,0; INK 3;"PRESS 'F' TO FILL IN CIRCLE"
6107 PRINT #1;AT 1,0; INK 5;"PRESS 'C' TO CONTINUE"
6115 IF INKEY$="c" OR INKEY$="C" THEN GO TO 6200
6116 IF INKEY$="f" OR INKEY$="F" THEN GO TO 6300
6120 IF INKEY$=CHR$ 32 THEN GO TO 200
6130 GO TO 6110
6200 GO SUB 9000: CIRCLE x,y,p
6205 LET p=INT p: GO TO 200
6300 GO SUB 9000: LET u=p: FOR e=1 TO p*2
6302 PRINT AT 0,15; INK 2; FLASH 1; PAPER 7;"COLORING"
6305 CIRCLE x,y,p
6309 LET p=p-.5
6311 IF INKEY$=CHR$ 32 THEN LET p=u: GO TO 200
6315 NEXT e
6320 LET p=u
6380 PRINT AT 0,15;" "
6400 LET p=INT p: GO TO 200
6500 PRINT #1;AT 0,0;" ": PRINT #1;AT 1,0;" "
6505 PRINT #1;AT 0,0; INK 2;"PRESS JOYSTICK UP TO INCREASE"
6510 PRINT #1;AT 1,0; INK 5;"PRESS DOWN TO DECREASE SIZE"
6520 PRINT #1;AT 1,28;" "
6530 PRINT #1;AT 1,28; INK 1;o
6535 BEEP .005,2: PAUSE 20
6540 IF |(1,1)=1 THEN LET o=o+1
6550 IF |(1,1)=2 THEN LET o=o-1
6560 IF |(2,1) THEN GO TO 6600
6570 IF INKEY$=CHR$ 32 THEN GO TO 200
6575 IF o>80 THEN LET o=1
6576 IF o<1 THEN LET o=80
6580 GO TO 6520
6600 PRINT #1;AT 0,0;" ": PRINT #1;AT 1,0;" "
6602 IF x<248-o AND y<145-j THEN GO TO 6605
6603 GO TO 9700
6605 PRINT #1;AT 0,0; INK 4;"PRESS 'F' TO FILL IN SHAPE"
6610 PRINT #1;AT 1,0; INK 1;"PRESS 'C' TO CONTINUE"
6615 IF INKEY$=CHR$ 32 THEN GO TO 200
6620 IF INKEY$="f" OR INKEY$="F" THEN GO TO 6800
6630 IF INKEY$="c" OR INKEY$="C" THEN GO TO 6700
6640 GO TO 6615
6700 GO SUB 9000: DRAW o,0: DRAW 0,j: DRAW -o,0: DRAW 0,-j
6775 LET o=INT o: GO TO 200
6800 GO SUB 9000: PRINT AT 0,15; INK 2; PAPER 7; FLASH 1;"COLORING": LET w=o: LET t=j
6805 FOR e=1 TO o*2
6808 DRAW o,0: DRAW 0,j: DRAW -o,0: DRAW 0,-j
6810 LET o=o-.5
6815 IF INKEY$=CHR$ 32 THEN LET o=w: LET j=t: GO TO 200
6820 NEXT e
6830 LET j=t
6840 LET o=w
6845 PRINT AT 0,15;" "
6850 LET o=INT o: GO TO 200
7000 PRINT AT 0,15; INK 7; FLASH 1; PAPER 2;"CURSOR"
7002 LET u=f
7003 IF f+1=a THEN LET f=f+1
7005 IF f=7 THEN LET f=0
7010 INK f+1
7020 PLOT x,y-1
7025 PLOT x-1,y
7030 PLOT x,y
7035 PLOT x+1,y
7040 PLOT x,y+1
7050 PLOT OVER 1;x,y-1
7055 PLOT OVER 1;x-1,y
7060 PLOT OVER 1;x,y
7065 PLOT OVER 1;x+1,y
7070 PLOT OVER 1;x,y+1
7080 IF INKEY$="c" OR INKEY$="C" THEN GO TO 7020
7090 PRINT AT 0,15;" "
7100 LET f=u: INK f
7200 GO TO 200
8000 LET h1=87: LET hi=15
8002 LET w1=127: LET wi=7
8005 PRINT #1;AT 0,0;" ": PRINT #1;AT 1,0;" "
8007 PRINT #1;AT 0,0; INK 2;"HEIGHT": PAUSE 10
8009 PLOT 2,h1: PLOT 3,h1: PAUSE 2
8010 PLOT OVER 1;2,h1: PLOT OVER 1;3,h1
8011 IF |(1,1)=1 THEN LET h1=h1+1
8012 IF |(1,1)=2 THEN LET h1=h1-1
8013 IF INKEY$=CHR$ 32 THEN GO TO 200
8014 IF h1>160 THEN LET h1=160
8015 IF h1<15 THEN LET h1=15
8018 IF |(2,1) THEN GO TO 8020
8019 GO TO 8009
8020 PRINT #1;AT 0,0; INK 4;"IN HEIGHT": PAUSE 10
8022 PLOT 2,hi: PLOT 3,hi: PAUSE 2
8023 PLOT OVER 1;2,hi: PLOT OVER 1;3,hi
8024 IF |(1,1)=1 THEN LET hi=hi+1
8025 IF |(1,1)=2 THEN LET hi=hi-1
8026 IF INKEY$=CHR$ 32 THEN GO TO 200
8027 IF hi>h1 THEN LET hi=h1
8028 IF hi<15 THEN LET hi=15
8031 IF |(2,1) THEN GO TO 8035
8032 GO TO 8022
8035 PRINT #1;AT 0,0; INK 1;"WIDTH ": PAUSE 10
8036 PLOT w1,14: PLOT w1,13: PAUSE 2: PLOT OVER 1;w1,14: PLOT OVER 1;w1,13
8037 IF |(1,1)=8 THEN LET w1=w1+1
8038 IF |(1,1)=4 THEN LET w1=w1-1
8039 IF w1>248 THEN LET w1=248
8040 IF INKEY$=CHR$ 32 THEN GO TO 200
8041 IF |(2,1) THEN GO TO 8045
8042 GO TO 8036
8045 PRINT #1;AT 0,0; INK 3;"IN WIDTH": PAUSE 10
8046 PLOT wi,14: PLOT wi,13: PAUSE 2: PLOT OVER 1;wi,14: PLOT OVER 1;wi,13
8047 IF |(1,1)=8 THEN LET wi=wi+1
8048 IF |(1,1)=4 THEN LET wi=wi-1
8049 IF wi>w1 THEN LET wi=w1
8050 IF wi<7 THEN LET wi=7
8051 PLOT OVER 1;wi,14: PLOT OVER 1;wi,13
8052 IF |(2,1) THEN GO TO 8100
8055 IF INKEY$=CHR$ 32 THEN GO TO 200
8056 GO TO 8046
8100 PRINT #1;AT 0,0;" ": LET y1=y: LET x1=x
8102 PLOT OVER 1;wi,14: PLOT OVER 1;wi,13
8105 PRINT AT 0,15; INK 2; PAPER 7; FLASH 1;"COLORING": LET y=h1: LET x=wi
8120 IF POINT (x,y)=1 AND POINT (x+1,y)=1 THEN GO TO 8180
8125 IF POINT (x,y)=1 THEN GO TO 8160
8130 IF x=w1 THEN GO TO 8180
8140 LET x=x+1
8145 IF INKEY$=CHR$ 32 THEN GO TO 8200
8150 GO TO 8120
8160 PLOT x,y
8161 IF POINT (x+1,y)=1 THEN GO TO 8195
8163 IF x=w1 THEN GO TO 8180
8165 LET x=x+1
8167 IF INKEY$=CHR$ 32 THEN GO TO 8200
8170 GO TO 8160
8180 LET x=wi
8185 LET y=y-1
8187 IF y=hi THEN GO TO 8200
8190 GO TO 8120
8195 LET x=x+3: GO TO 8120
8200 LET y=y1
8201 LET x=x1
8205 GO TO 200
9000 PRINT #1;AT 0,0;" ": PRINT #1;AT 1,0;" ": RETURN
9200 LET c=0: LET v=27: PRINT AT 21,21;" ": PRINT #1;AT 0,0;" ": PRINT #1;AT 1,0;" "
9205 PRINT #1;AT c,v; INK 0;CHR$ 145;CHR$ 146; INK 6; PAPER 0;CHR$ 147
9206 PAUSE 5: PRINT #1;AT c,v;" "
9207 PRINT #1;AT 0,5; INK 1;CHR$ 144
9209 PRINT #1;AT 0,13;"::"
9211 PRINT #1;AT 0,21; INK 2;"%%"
9212 PRINT #1;AT 1,8; INK 3;"PLEASE SELECT"
9213 PAUSE 10: PRINT #1;AT 1,8; INK 4;"please select"
9214 IF |(1,1)=4 THEN LET v=v-1
9215 IF |(1,1)=8 THEN LET v=v+1
9216 IF v>27 THEN LET v=27
9217 IF v<1 THEN LET v=1
9220 IF |(2,1) AND v=5 THEN GO TO 4
9221 IF |(2,1) AND v=4 THEN GO TO 4
9223 IF |(2,1) AND v=14 THEN GO TO 9300
9224 IF |(2,1) AND v=13 THEN GO TO 9300
9226 IF |(2,1) AND v=21 THEN GO TO 9500
9227 IF |(2,1) AND v=22 THEN GO TO 9500
9230 IF INKEY$=CHR$ 32 THEN GO TO 200
9250 GO TO 9205
9300 IF wedo=0 THEN PRINT #1;AT 0,0; INK 3;" CREATE NEW FILE ? 'Y' OR 'N'": PRINT #1;AT 1,0;" "
9301 IF wedo=1 THEN PRINT #1;AT 0,0; INK 2;"REPLACE OLD FILE ? 'Y' OR 'N'": PRINT #1;AT 1,0;" "
9302 IF INKEY$=CHR$ 32 THEN GO TO 200
9303 IF INKEY$="N" OR INKEY$="n" THEN GO TO 200
9304 IF INKEY$="Y" OR INKEY$="y" THEN GO TO 9306
9305 GO TO 9302
9306 LET pic=4: LET wedo=1: PRINT #1;AT 0,0;" "
9307 LET al=pic*7000+26000: LET al2=INT (al/256): LET al1=al-al2*256
9309 POKE 32001,al1: POKE 32002,al2
9310 LET n=USR sv
9315 PRINT #1;AT 0,0; INK 1; PAPER 5; FLASH 1;" FILE SAVED IN MEMORY "
9316 PAUSE 75
9320 GO TO 200
9500 LET pic=4
9501 IF wedo=0 THEN PRINT #1;AT 0,0; INK 4; PAPER 6; FLASH 1;" NO FILE EXSISTS ": PRINT #1;AT 1,0;" ": PAUSE 75: GO TO 200
9502 PRINT #1;AT 0,0; INK 1;"RECALL FILE ? 'Y' OR 'N' ": PRINT #1;AT 1,0;" "
9503 IF INKEY$="y" OR INKEY$="Y" THEN GO TO 9507
9504 IF INKEY$="n" OR INKEY$="N" THEN GO TO 200
9505 IF INKEY$=CHR$ 32 THEN GO TO 200
9506 GO TO 9503
9507 LET al=pic*7000+26000: LET al2=INT (al/256): LET al1=al-al2*256
9509 POKE 32054,al1: POKE 32055,al2:
9510 LET n=USR rc
9515 PRINT AT 0,0;" "
9516 PRINT AT 0,0; INK f;t$
9517 PRINT #1;AT 0,0; INK 5; PAPER 3; FLASH 1;" FILE RECALLED ": PAUSE 75
9520 GO TO 200
9600 CLEAR 52999: LET sv=32000: LET rc=32050
9610 PRINT AT 10,15; INK 2;" .": PRINT AT 11,15; INK 6;" :": PRINT AT 12,15; INK 0;CHR$ 152
9615 PRINT AT 13,9; INK 4;"PLEASE WAIT..."
9620 RESTORE : FOR j=0 TO 11: READ al: POKE sv+j,al: NEXT j
9630 FOR j=0 TO 11: READ al: POKE rc+j,al: NEXT j
9640 LET poop=1: GO TO 3
9650 DATA 17,232,128,33,0,64,1,0,27,237,176,201
9670 DATA 17,0,64,33,232,128,1,0,27,237,176,201
9700 PRINT #1;AT 0,0;" ": PRINT #1;AT 1,0;" "
9705 PRINT #1;AT 0,0; INK 6; PAPER 3; FLASH 1;" SHAPE SIZE TO LARGE ": PAUSE 75: GO TO 200
9900 PAPER 7: BORDER 7: INK 1: CLS : PRINT AT 10,0; FLASH 1;" TAPE LOADING ERROR "
9910 FOR g=1 TO 10: BEEP .05,g: NEXT g
9911 PRINT AT 1,0; INK 1;"DRAW II "; INK 2;CHR$ 163;AT 0,9; INK 4;CHR$ 162
9915 PRINT AT 15,0; INK 3; PAPER 5; FLASH 1;" PRESS ANY KEY TO CONTINUE "
9917 PAUSE 0: ON ERR GO TO 200
9920 INK 0: BORDER 7: GO TO 4
9999 ON ERR GO TO 200: GO TO 200Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.
