--- title: "Extended BASIC Screen Draw Demos" id: 71967 type: "computer_media" slug: "extended-basic-screen-draw-demos" url: "http://localhost/computer_media/extended-basic-screen-draw-demos/" markdown_url: "http://localhost/computer_media/extended-basic-screen-draw-demos.md" published_at: "2026-10-20T14:07:46+00:00" modified_at: "2026-10-20T14:12:53+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2026/10/8-BALL.png" excerpt: "Three short demos that draw the word TIMEX, an eight-ball and a cartoon face using DRAW, CIRCLE, UNCIRCLE and PAPER commands embedded in REM lines." category: - name: "Archived Media" slug: "archived-media" taxonomy: "category" url: "http://localhost/category/archived-media/" post_tag: - name: "Downloadable" slug: "downloadable" taxonomy: "post_tag" url: "http://localhost/tag/downloadable/" - name: "TS 1000" slug: "ts1000" taxonomy: "post_tag" url: "http://localhost/tag/ts1000/" model: - name: "Timex/Sinclair 1000" slug: "ts-1000" taxonomy: "model" url: "http://localhost/model/ts-1000/" indiv: - name: "Frits Beniest" slug: "frits-beniest" taxonomy: "indiv" url: "http://localhost/indiv/frits-beniest/" genre: - name: "Programming" slug: "programming" taxonomy: "genre" url: "http://localhost/type/programming/" media_type: "Program" programmers: - name: "Frits Beniest" slug: "frits-beniest" taxonomy: "indiv" url: "http://localhost/indiv/frits-beniest/" download_url: "https://archive.org/download/timex-sinclair-software-archive/Extended%20BASIC%20Screen%20Draw%20Demos%20%28198x%29%28Beniest%2C%20Frits%29%28TS1000%29%28US%29%28Program%29.zip" mediadate: "198x" images: - url: "http://localhost/wp-content/uploads/2026/10/8-BALL.png" - url: "http://localhost/wp-content/uploads/2026/10/FACE.png" - url: "http://localhost/wp-content/uploads/2026/10/T.png" related_products: - id: 12513 title: "Extended Basic" type: "product" url: "http://localhost/product/extended-basic/" related_content: - id: 56677 title: "Extended Basic Demo" type: "computer_media" url: "http://localhost/computer_media/extended-basic-2/" media_type_tags: "Programming" --- # Extended BASIC Screen Draw Demos Three short drawing demos for Frits Beniest’s Extended BASIC, each on the 64 × 44 PLOT grid. *T* spells out TIMEX in straight lines. *8 BALL* fills most of the screen with black, then uses UNCIRCLE to draw a large white circle with a figure 8 made from two smaller circles inside it. *FACE* draws a round face with circular eyes, a nose and mouth, and fills a rectangle across the middle with a gray stipple. Each picture is made from only a few commands, such as `DRAW;x1,y1,x2,y2,` and `CIRCLE;r,x,y,`, written in REM lines. Every program begins with a line 0 that carries the Extended BASIC machine code, headed “EX. BASIC AUT: FRITS BENIEST (C)” and “VERSIE 2.1” (Dutch for “version”). That code makes up most of each 4.7–4.9 KB file. The tape has no label. The Extended BASIC package and a separate Extended BASIC demo are also in the archive. ## Program Analysis ### Program Structure Each program has the same pattern. Line 0 starts with `IF USR . THEN RETURN` and holds the extension code in the rest of the line, and line 1 is `SLOW`. After that, the program alternates `GOSUB 0` with a REM holding the drawing commands. Commands are separated by colons, and each parameter is followed by a comma. Multiple shapes can share one command, so `CIRCLE;20,30,25,4,20,30,4,38,30,` draws the face outline and both eyes. - **T**: five REM lines of `DRAW` commands for the letters T, I, M, E and X along the top of the screen. - **8 BALL**: `PAPER;1,24,1,33,█,` fills the area with solid blocks, then `UNCIRCLE` draws the ball outline (radius 20) and the two circles of the 8 in white. - **FACE**: `CIRCLE` for the head and eyes, `DRAW` for the nose and mouth, and `PAPER;3,22,10,20,▒,` to fill a block with the stipple character. ### Notable Techniques - The extension lives in line 0, which can’t be entered or edited from the keyboard, so it is protected from accidental changes. - The drawing commands sit in ordinary REM lines that BASIC itself ignores, and `GOSUB 0` hands control to the extension through `USR` before returning. - PAPER takes a fill character as its last parameter, which allows both solid (`█`) and stippled (`▒`) fills. ## Source Code ``` 0 IF USR . THEN RETURN FROM EX. BASIC AUT: FRITS BENIEST (C) 070/988735 [V][E][R][S][I][E]█[2][.][1]##[-][-][~~]RND[E]#VAL #▀-~~=▒▘[,,]#▘ U£RND#U(RNDLEN SCROLL[S]COS INT $▞▞INKEY$ ( SAVE INT # #C▀7( POKE INT #6USR RNDTAN Y▖[S]ATN #INKEY$ [(]#FLN #INKEY$ $COS 2~~#LN NINKEY$ $COS 2##LN NINKEY$ TAN FLN #INKEY$ RETURN COS ##▄>=#INKEY$ ( IF TAN 6USR RNDLN ▝#COS RETURN:TAN TAN PLOT SQR Y3 PLOT SQR INT 3 AT STR$ LN ATN INKEY$ LN INKEY$ LN EXP INKEY$ ▞=VAL FASTSTR$ ▞▀,[Y]4~~LN LN INKEY$ <( PLOT AT AT AT TAN SGN LPRINT <<<<]K▀#[(]**INT # CLEARACS 5▚#C# CLEARACS 5LEN / RUN U5RNDACS ▗/▌U5RNDACS SIN M5RND# REM PI RETURN COS PRINT LN 4+ LET LN 1+ LOAD ▌OLN [B]:TAN FOR LN LOAD RNDLN [(]PILN [9]PILN [M]PILN EXP PILN ##4 LOAD TAN )**RND▞▖STR$ LN ▒PILN LN INKEY$ LN ▘INKEY$ LN ▞#>SGN TAN FOR ▞,LN QPI7▞6LN QPITAN 5<=RND#F£RND,,:5XCOS ,,/ CLSTAN FASTU>=RND#LN ?#( CLS LPRINT ,, FAST+4 POKE LPRINT TAN #LEN #TAN FOR LN LOAD RND)**RND▞▖STR$ LN ▒PISGN FOR 7#7##F#F :RNDLN STEP PI7LN STEP PI:K7LN STEP PI7LN STEP PI5**RND)XRND▞▝LN ##<▞▝LN ##2 5YRNDLN ##77LN ##7UZRND#LN ##5WRND#- ACS #42URNDRND#LN ## GOSUB ##RND- UPIRND#LN ## GOSUB ##RNDSTR$ U#RND/.UXRND#LN ## GOSUB ##RND- U#RND#LN ## GOSUB ##RNDSTR$ UPIRNDAT LN #PI GOSUB ##RND5WRNDACS #4:ACS #C▝ACS THENACS #C(ACS NEW/£ACS #C▝ACS NEWACS #C▝ACS THEN)#RND7#4▌U#RND/▀UPIRND#▖ E#RND)Z ;6#RNDLN FASTPILN ##TAB ##TAN 7▞▀) DIM ##,[T]""7<( SAVE TAN DAT77#7#7;TAN MMMM7777LN LN INKEY$ M FAST77 FOR [B]E=RND GOSUB # LPRINT TAN MMMECHR$ RNDLN PAUSE ,, FOR 6CHR$ RNDTAN MMMMLEN RNDECHR$ RNDLN INKEY$ #COS PRINT E(RND6CHR$ RNDLN £#>=## LET LN INKEY$ #COS PRINT LN .#/ LOAD TAN M FAST77 FOR E£RND[B] GOSUB # LPRINT TAN MMINT #INT ▘ FOR LN LOAD RND6-RNDLN ##/,,LN GOTO #LN ##>=## FASTLN SAVE #4▌LN AND #C▀ LPRINT / DIM SGN LN LOAD RND 6 THENRNDTAN 8MMMMLN 1+E0RND▘▌ GOSUB PI60RND GOSUB #CHR$ RND< GOSUB [K]TAN MMME THENRNDLN ▝#4▛7LN ##LN LN INKEY$ 6-RNDLN [U]# TO 6 THENRND RETURN,COS INT # FOR LN LOAD RNDLN LN INKEY$ LN ▘INKEY$ LN 6PILN ##EUSR RNDLN #INKEY$ 4 LOAD TAN E(RND6CHR$ RNDE▝RNDTAN VAL ACS S▖ACS T£Y;[(]#E£RND)5 /▘;( CLEAR#;AT LN [;]#YJ[(]#Y▘ACS CK▝Y▖ACS DK▘▛ PRINT ?K▝ INPUT [?]#LN [)]#C▌ LET J[4]/▝ LET [K] RETURN▒S▝ INPUT [?]#TAN [-]#TAN ACS ACS [:]TAN <7/▌ACS <[-]▞▛[B]ACS ( RAND TAN 7[-]▞▛[B]ACS ,ACS .( RAND TAN #RND GOSUB TAN E#RND GOSUB ##RNDUWRNDACS #4▀;/▛[*] GOSUB #K▝##6#RND FOR LN ##TAN VAL UWRNDACS #4▌5#RND/▀5#RNDACS #4▀O/▘PLN ##5WRND#ACS #4▌M#RND/▀M#RND GOSUB ##RNDLN GOSUB #AT (ACS TAN FAST FOR #7# FOR SGN ▘<>#VAL DIM EUSR RNDLN LN INKEY$ RETURN:4▞LN LN INKEY$ # RETURNINKEY$ EABS RND6-RND▘▘ TAN LN ?#S▌LN -INKEY$ /~~LN 6PILN E#LN *##TAN ...#FY9[-]7#TAN LN 2#LN [B]:TAN E0RND▘▌ ,,60RND GOSUB PI FOR ECHR$ RND7 GOSUB [K]TAN . LN ##E£RND76:RNDY M>=RND24-/:5LN EXP PITAN 7Q▘7Q57Q LN [I]PITAN GOSUB #£RND55 <;▘ RUN ▝ GOSUB [K]▞4 FOR Q 7( CLSLN Q#TAN TAN FOR LN LOAD RND)**RND▞▘STR$ LN ▒PISGN ,W#VAL LN ##AT ( RAND TAN U5RNDACS #TAN XXLN [)]#4,,Q TAN AT TAN LN [H]#S▖LN **,,TAN LPRINT TAN RETURN-C,, RETURN+4▘ SCROLLLN OR =TAN SCROLLLN OR = FASTLN ▐.LN [4], LPRINT TAN E THENRND7LN ##7F6 THENRNDTAN .E THENRND7LN PRINT #6 THENRNDTAN ..▘ 4▝INT #▀7/ PAUSE ..ECHR$ RND7#Q 7#Q 7#[L]CODE #~~TAN ECHR$ RND7#7#7LN [2],,TAN ..F=S▝INT #LEN 4LN G#7▒#LN USR #7 FASTLN CONT #VAL LN ,#AT LPRINT #[L]COS GOSUB #CHR$ RND<<< GOSUB [K]TAN .LN E#LN [G]#LN [-]#TAN RETURN$4▌LN C#/▀LN ##TAN SCROLLLN [U]# TO 6USR RND#LN [~~]+4▌# RETURNRNDS▝INT =##LN **,,TAN ,ACS #C▝Y[?]#<7"#[L]COS STR$ GOSUB #WRND GOSUB #;SGN S LPRINT STR$ VAL 6:RNDLN ##E:RNDAT SGN /ABS FOR LN LOAD RNDLN ##LN LN INKEY$ LN ▘INKEY$ LN 6PI RETURN$ PRINT ATN 0PILN C## LET PRINT #C▝LEN 4LEN 4LN G# LET PRINT CODE I# LET ATN V# FOR E(RNDF6WRNDE:RNDLN [B]#6:RNDLN >#EUSR RNDLN #INKEY$ F4[V]TAN [B]E:RND GOSUB #£RND< GOSUB #)5 Y/ GOSUB #S▀X/ RAND MURND;#[+]MTRNDTAN ...UURND RETURN/4▞E£RND7/,,[B]E:RND)5 GOSUB #6:RNDLN >#TAN INT * FASTLN 0PI RETURNT4 PLOT LN 0PI RETURNAC▝ LPRINT TAN LPRINT )**RNDSTR$ ▞▝LN ▒PI LPRINT :/LN STEP PI7:4LN STEP PIE£RND7U**RND RETURN C▛#)5 ;( CLEARU OR RND- #;6:RNDLN >#EUSR RNDTAN ... FOR FLN LOAD RND)**RND▞▘STR$ LN ▒PILN LN INKEY$ LN ▘INKEY$ LN 6PILN E#SGN ,# GOSUB #LN [<]#EUSR RNDLN #INKEY$ F4 AND TAN [W] FOR LN LOAD RND)**RND▞▝STR$ LN ▒PI LPRINT #7# CLEARACS V#C▒ GOSUB INKEY$ PEEK RETURN#/£ACS INKEY$ PRINT ATN F? LET GOSUB INKEY$ ATN 7?EUSR RNDLN #INKEY$ F4SQR TAN INT #ACS RNDC IF LN 6PIACS #"" RETURN)4 LIST FFY([Y]4 DIM 77STR$ LN ▘#SGN ACS #COS Y[?]TAN LN EXP =**INT #LN 2#LN STR$ . FASTLN [7]= LPRINT TAN .7#7#7TAN [Y]COS RETURN#**ACS COPY[Y]ACS [Z]TAN EUSR RNDLN #INKEY$ FTAN FAST5 OR RND##<▞▝# POKE PI90 FOR LN LOAD RNDLN [(]PI)**RNDSTR$ 5WRND FOR ▘▖ GOSUB [K]SGN LN [9]PILN [M]PI6#RNDSTR$ EUSR RND)<>RND▞▘LN ▒PI#.., OR SGN OR RETURNEC: RETURNWC~~ RETURNNCA RETURNSC6INT -VAL OR AT OR RETURNEC▝ACS COS CLEAR#55YRND▞▝25LN VAL #E#RNDLN ###># PRINT VAL LPRINT VAL SGN ▞▌LN ##; FAST OR AT OR ▞ LET RETURNS4▝ACS "" CLEAR#55WRND▞▝2;LN VAL #E#RND CLEARACS 5#C? OR STR$ OR AT )5 /▘;( CLEAR6#RNDLN R#LN ##COS )>=RNDLN LN INKEY$ LN ▘INKEY$ LN ▞#>### GOSUB #(RND GOSUB #;Z** GOSUB #£RND GOSUB #;TAN OR VAL STR$ OR FASTLN [8]#[B] CLEARACS 5#C▀;/▝ GOSUB #LN A#S▌)WRND FOR GOSUB [K]LN IF #4 LPRINT #[E]#U<>RND RETURN COS LN [8]##STR$ AT # CLEARACS 5# PRINT ATN ## LET CODE [?]#LN IF #4 CONT TAN LN ##COS #)WRND[Y]COS FOR GOSUB [4] FOR STEP / RUN LN ##COS #)VRND FOR ,, FOR [Y]COS FOR GOSUB [C] FOR STEP / RUN RUN OR STR$ OR AT ▞ VAL E#RND FAST)WRND GOSUB [K] LPRINT AT VAL OR VAL OR SGN AT TAN 4:X#70( POKE /$▝[(]W#7( NEXT )**RND5WRND▘▖ GOSUB [K]TAN F- ;Y# GOSUB [T]TAN E#RND)5 CLEARACS 5#4▀;/▝ GOSUB #6#RND OR + OR TAN ..)5 /▘;( CLEAR6#RNDTAN RNDTAN TAN )WRND FOR TAN FOR LN LOAD RND)**RND▞▀STR$ LN ▒PILN ## LPRINT 2▀STR$ - #VAL LN ##AT 7#▝▀#▝▀SGN 14 GOTO LN ##LN ##4STR$ TAN ▞ASN [*]VAL GOSUB #WRNDACS #CODE ABS #▞▌LN ##EYRNDACS #4▒ GOSUB #K,,ACS SIN /▌;K▝ACS ▗6YRND FOR ACS #CODE ABS #▞▌LN ##EWRNDACS #4▛;K~~ACS [?]/▞ GOSUB #K▝ACS INT 6WRND PRINT GOSUB #PIRNDLN [V]INKEY$ M#RND[*][M]4/ GOSUB #RNDRNDEYRNDLN [V]INKEY$ M#RND[*][M]4▛ GOSUB ##RNDLN OR # LET AT ([$]TAN 5 COPY COPY GOSUB # FOR TAN [*]5#RND#7# FOR GOSUB PICOS FOR #F#YZ[T]**YJ[S]**LN GOSUB #TAN .MOV##PRIVAL #CLS[O]INKEY$ OUTINT #DRA#PIFILL#REAASN #IN;[6]#RES##SCR[4]INKEY$ UND#PICIR#PIUNC#PILEF##RIG##MID##KEY[<]INKEY$ PAPT#UNPP#COP##.5WRND#7#7 FASTAT TAN Y▝/▞Y▘/▝Y▖M5RND# LOAD #EWRND[*] FASTLN <[U]>=#PIE**RND# FOR GOSUB ### LPRINT TAN STR$ LN LN INKEY$ LN ▘INKEY$ LN 6PI RETURN$CODE GPILN 0PILN C#LEN 4LN G#SGN #><#>]C▀Q + CLEARACS 5#C▝FF7$C▝/ SCROLLY#WTAN .STR$ )5 CLEARACS 5#C▀;/▝ GOSUB #SGN TAN STR$ FAST##)5 GOSUB ##[P]## LPRINT SGN TAN VAL FAST[*]##7( UNPLOT LPRINT AT TAN LPRINT SGN STR$ PI)5 CLEARACS 5#4,,/▘;( CLEAR/▖ GOSUB #( UNPLOT SGN AT #[L]COS STR$ LN A#SGN S▀LN [3]#LN [?]#COS +COS LN .................... 1 SLOW 10 GOSUB 0 21 REM CIRCLE;20,30,25,4,20,30,4,38,30, 25 GOSUB 0 30 REM DRAW;30,25,25,22,:DRAW;30,20,30,25,:DRAW;20,15,40,15,40,15,30,12,20,15, 40 GOSUB 0 50 REM PAPER;3,22,10,20,▒, ```