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 BEEPs 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 PAPERexpression 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
DATAand moves between blocks with computedRESTOREline 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 togget through toVAL 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 5000with no matchingNEXT. 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 STOPNote: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.
