This program renders a signature or title graphic stored in the lower portion of the display (rows 168–175, the final 8 pixel rows of the screen) and scales it up onto the main display area. For each lit pixel found using POINT at the source coordinates, it plots and draws expanded versions at twice the horizontal scale and three times the vertical scale. The INK 2 with OVER 1 drawing technique creates a colour highlight effect on alternate pixel rows, effectively giving the enlarged letters a two-tone appearance. A short BEEP is sounded for each pixel processed, producing audio feedback during the drawing sequence.
Program Analysis
Program Structure
The program is a single short routine spanning lines 200–500, with a SAVE header at line 9998. The string variable A$ is set at line 200 to the author’s name, which is both printed at the top of the screen (line 210) and used as a running label at the bottom (line 252). The main logic is a double nested loop across lines 220–300.
Pixel Source and Scaling Logic
The source graphic is expected to reside in the bottom 8 pixel rows of the 192-line display (Y coordinates 168–175). The outer loop iterates X from 0 to 127, and the inner loop iterates Y from 0 to 7, sampling each pixel with POINT (X, Y+168). When a pixel is set, the program plots it at a scaled destination: horizontal scale factor 2 (2*X) and vertical scale factor 3 (3*Y+80), expanding the 128×8 source into a 256×24 destination region.
Two-Tone Drawing Technique
For each matched source pixel, three drawing operations are performed:
- Line 240:
PLOT 2*X, 3*Y+80— plots the base pixel in the current ink colour. - Line 245:
PLOT 0,0 : DRAW INK 2; OVER 1; 2*X, 3*Y+79— draws a line from the origin to the scaled coordinate using INK 2 (red) with OVER 1 (XOR mode), affecting the pixel one row below. - Line 250:
PLOT 0,0 : DRAW OVER 1; 2*X, 3*Y+79— repeats the OVER 1 draw without a colour attribute change, effectively toggling pixels again on the same row.
The use of PLOT 0,0 before each DRAW is necessary because DRAW is relative; plotting at the origin and drawing the full vector to the target coordinate is a workaround for achieving absolute positioning with DRAW. The two sequential OVER 1 operations at lines 245 and 250 on the same target pixel cancel each other out in terms of the pixel state, but the INK 2 attribute set in line 245 remains, colouring the character cell red.
Line 260 additionally plots one pixel above the base: PLOT 2*X, 3*Y+81, extending each source pixel to cover a 1×3 vertical block in the destination.
Audio Feedback
Line 255 issues BEEP .01,7 for every lit pixel detected, producing a rapid series of short high-pitched tones as the image is drawn. This creates an audible progress indicator tightly coupled to the pixel density of the source graphic.
Notable Techniques and Observations
- The
IF NOT POINT (...) THEN GO TO 299at line 235 skips all drawing and sound operations for unset pixels, jumping directly toNEXT Y, which is an efficient early-exit pattern. - Storing the author name in
A$and reprinting it at line 252 each iteration keeps it visible in the lower display, acting as a persistent label beneath the expanding graphic. - The SAVE at line 9998 uses
LINE 200to auto-start at the beginning of the routine. - The source graphic occupies a region (Y 168–175) that overlaps with the bottom two character rows of the display (rows 21–23 in
PRINT ATcoordinates). Writing to that area withPRINT AT 21,0at line 252 could disturb the source pixel data if the name string’s ink pixels happen to coincide, though in practice the name display and source graphic may be designed to coexist.
Variable Summary
| Variable | Role |
|---|---|
A$ | Author name string, displayed at top and bottom of screen |
X | Horizontal loop counter (0–127), source and destination X coordinate basis |
Y | Vertical loop counter (0–7), offset into the 8-row source strip |
Content
Source Code
200 LET A$="ALGIS E. GEDRIS"
210 PRINT AT 0,0; INK 7;"ALGIS E. GEDRIS"
220 FOR X=0 TO 127
230 FOR Y=0 TO 7
235 IF NOT POINT (X,Y+168) THEN GO TO 299
240 PLOT 2*X,3*Y+80
245 PLOT 0,0: DRAW INK 2; OVER 1;2*X,3*Y+79
250 PLOT 0,0: DRAW OVER 1;2*X,3*Y+79
252 PRINT AT 21,0;A$
255 BEEP .01,7
260 PLOT 2*X,3*Y+81
299 NEXT Y
300 NEXT X
500 STOP
9998 SAVE "TITL/SHOOT" LINE 200
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.
