Draw II

Products: DRAW II
Developer(s): Jon Roketenetz
Date: 1984
Type: Cassette
Platform(s): TS 2068
Tags: Art

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 52999 and installation of two 12-byte LDIR routines

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 STICK function (|(1,1) for direction, |(2,1) for the fire button), including the diagonal values 5, 6, 9 and 10.
  • Menus are printed with PRINT #1 into 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 p reduced 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 SOUND to 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 64260 and uses either COPY or LPRINT CHR$ 1, which suggests support for an alternative printer driver.

Potential Issues

  • The diagonal-movement limits at lines 920–937 compare x with 160 and y with 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 j as 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 CIRCLE routine at line 2300 is never reached.
  • Several messages are misspelled (“REVEIW”, “EXSISTS”, “SIZE TO LARGE”).

Related Products

Image Gallery

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 200

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.