--- title: "Games (Side A)" id: 71943 type: "computer_media" slug: "games-side-a" url: "http://localhost/computer_media/games-side-a/" markdown_url: "http://localhost/computer_media/games-side-a.md" published_at: "2026-10-20T14:55:01+00:00" modified_at: "2026-10-20T14:55:02+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2026/10/Games-scaled.jpg" excerpt: "Three short programs: a ship-sinking target game, a line-drawing guessing puzzle that reveals an impossible triangle, and random concentric circles linked by lines with sound." 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 2068" slug: "ts2068" taxonomy: "post_tag" url: "http://localhost/tag/ts2068/" model: - name: "Timex/Sinclair 2068" slug: "ts-2068" taxonomy: "model" url: "http://localhost/model/ts-2068/" indiv: - name: "Frank H. Bouldin (W5GAA)" slug: "frank-bouldin" taxonomy: "indiv" url: "http://localhost/indiv/frank-bouldin/" genre: - name: "Collection" slug: "collection" taxonomy: "genre" url: "http://localhost/type/collection/" media_type: "Cassette" programmers: - name: "Frank H. Bouldin (W5GAA)" slug: "frank-bouldin" taxonomy: "indiv" url: "http://localhost/indiv/frank-bouldin/" download_url: "https://archive.org/download/timex-sinclair-software-archive/Games%20Side%20A%20%28198x%29%28-%29%28TS2068%29%28US%29%28Cassette%29.zip" tsrun_member: "Games Side A (198x)(-)(TS2068)(US)(Cassette)/sinkship.tap" mediadate: "198x" images: - url: "http://localhost/wp-content/uploads/2026/10/Games-scaled.jpg" media_type_tags: "Collection" --- # Games (Side A) A side of three short BASIC programs. In *sinkship*, a ship sails across the screen while you press the number of the column you want to fire into, over ten goes. *What-Iz-It* draws a line picture segment by segment, with a beep for each line, then spells out the answer, “THE IMPOSSIBLE TRIANGLE”, under the picture. *circplot* plots ten random sets of concentric rings, links them with lines, and uses the AY sound chip for noise bursts as each line is drawn. The handwritten label reads “GAMES SIDE A”. Only What-Iz-It carries a credit, in its REM lines: “By Frank Bouldin W5GAA Ft. Worth T/S UG (11/18/86)”, “For T/S 2068 Computer”. On the tape, What-Iz-It is preceded by a short 180-byte CODE block named “2” that none of the programs loads. ## Program Analysis ### sinkship Lines 10–40 define UDG `s` as a small ship from eight `DATA` bytes. Line 60 paints colored bands across the screen: red behind the column numbers, cyan for the ship’s lane and blue below it. Columns 1–9 are labeled at screen positions `3*i+1`. Each go moves the ship one column at a time along row 3, with a delay loop set by `wait`. A keypress prints an inverse `*` in the ship’s lane at the chosen column (`sp=3*VAL n$+1`). If that matches the ship’s column, the program flashes DIRECT HIT!, plays three beeps and adds to the hit count. A go ends on a hit or when the ship reaches column 31. ### What-Iz-It The picture is held entirely in `DATA`. Lines 100–130 give four starting points, and lines 200–270 give four groups of ten relative `DRAW` moves. Two pointers drive the loop: `P` steps through the start-point lines in tens and `D` through the move groups in twenties, using `RESTORE P` and `RESTORE D` to jump between them. Each segment gets a short `BEEP` at a random pitch. When `P` reaches 140, lines 80–90 read 23 character codes from lines 300–310 and print them one at a time in the lower screen with `PRINT #0`, each with a rising tone, before waiting on `PAUSE 0` and starting again. Line 9999 saves with `LINE 20` for auto-run. ### circplot Subroutine 2000 picks a random center on a 10-pixel grid and stores it in arrays `b()` and `c()`. Lines 30–80 plot rings of radius 2 to 14 around it as 20 points each (angle step `PI/10`), with the ink color falling as the radius grows. Subroutine 1000 plays two `BEEP`s per point, pitched from the angle. Each new center is joined to the previous one. Once all ten are placed, lines 100–150 draw a line from every center to every later one, triggering an AY noise burst with `SOUND` for each line. After a closing burst the program waits for a key, then clears the screen and runs again. ### Notable Techniques - sinkship builds its striped playfield with one `PRINT PAPER` expression per row, `PAPER 6-(i=2)*4-(i=3)-(i=4)*5`, using Boolean results to pick the color. - What-Iz-It keeps the drawing and the caption in `DATA` and moves between blocks with computed `RESTORE` line numbers, so the drawing loop is only a few lines long. - circplot sets the TS2068 AY registers directly through `SOUND`: noise only on all channels (register 7 = 7), envelope-controlled volume (registers 8–10 = 16), and envelope period and shape in registers 12 and 13. ### Potential Issues - sinkship gives ten goes (`FOR g=1 TO 10`), but the closing message says “You hit … out of 9”. - sinkship’s key check at line 130 rejects keys above `"g"` rather than `"9"`, so letters and other characters up to `g` get through to `VAL n$` and can stop the program with an error. - In sinkship you can fire more than once per pass, because a miss doesn’t end the go. - circplot line 170 opens `FOR n=1 TO 5000` with no matching `NEXT`. It is never used. Subroutine 2000 also draws each linking line twice (lines 2050 and 2080). ## Source Code ``` 5 LET wait=15 10 FOR c=0 TO 7 20 READ x: POKE USR "S"+c,x 30 NEXT c 40 DATA 32,0,16,0,24,60,255,126 50 LET h=0: CLS : BORDER 6: PAPER 6: INK 0 60 PRINT INK 2;"Go number:";TAB 25;"Hits: ": FOR i=1 TO 21: PRINT PAPER 6-(i=2)*4-(i=3)-(i=4)*5;TAB 31;" ": NEXT i 70 PAPER 8: INK 9 80 FOR i=1 TO 9: PRINT AT 2,3*i+1;i: NEXT i 100 FOR g=1 TO 10 110 LET p=1: PRINT AT 0,10;g;AT 3,0;" ";AT 6,0;" " 120 PRINT AT 3,p-1;" s" 130 LET n$=INKEY$: IF n$>"g" OR n$<"1" THEN GO TO 180 135 LET sp=3*VAL n$+1 140 PRINT AT 3,sp; INVERSE 1;"*": BEEP 0.2,-20 150 IF sp<>p THEN GO TO 180 160 PRINT AT 6,10; FLASH 1;"DIRECT HIT!": BEEP 0.2,10: BEEP 0.2,20: BEEP 0.2,15: LET h=h+1: PRINT AT 0,30;h: GO TO 200 180 IF INKEY$<>"" THEN GO TO 180 185 FOR i=1 TO wait: NEXT i 190 LET p=p+1: IF p<=31 THEN GO TO 120 200 INPUT "Press ENTER to continue:"; LINE z$ 210 NEXT g 220 PRINT AT 6,0;"That's it. You hit ";h;" out of 9" 230 STOP ```