--- title: "Timex Sinclair Logo" id: 71470 type: "computer_media" slug: "timex-sinclair-logo" url: "http://localhost/computer_media/timex-sinclair-logo/" markdown_url: "http://localhost/computer_media/timex-sinclair-logo.md" published_at: "2026-09-09T09:03:31+00:00" modified_at: "2026-09-09T09:03:32+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2026/09/timex-sinclair-logo.png" excerpt: "A data-driven logo renderer that fires 260 PLOT/DRAW commands from compact DATA statements, then optionally sends the result to a printer with a linefeed POKE." category: - name: "Archived Media" slug: "archived-media" taxonomy: "category" url: "http://localhost/category/archived-media/" post_tag: - name: "1988" slug: "year-1988" taxonomy: "post_tag" url: "http://localhost/tag/year-1988/" - 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/" genre: - name: "Demo" slug: "demo" taxonomy: "genre" url: "http://localhost/type/demo/" media_type: "Program" download_url: "https://archive.org/download/timex-sinclair-software-archive/Timex%20Sinclair%20Logo%20(1988)(-)(TS2068)(US)(Program).zip" tsrun_member: "Timex Sinclair Logo (1988)(-)(TS2068)(US)(Program).tap" mediadate: "1988" images: - url: "http://localhost/wp-content/uploads/2026/09/timex-sinclair-logo.png" media_type_tags: "Demo" --- # Timex Sinclair Logo This program draws the Timex Sinclair logo using 260 PLOT/DRAW operations driven entirely by DATA statements. Each iteration of the main FOR loop reads four values (stored in variables A, S, D, F) and executes a single PLOT followed by a DRAW, building up the logo scan-line by scan-line across the display. Three variables — Z, T, and U — are pre-assigned the constants 0, 2, and 4 respectively, allowing the DATA statements to use short symbolic names rather than numeric literals, reducing both DATA statement length and READ-time parsing overhead. The program includes a printer routine at line 2960 that issues a COPY command with an optional linefeed POKE (23324) for printers that require it. A PAUSE 0 / INKEY$ combination at lines 2920–2930 waits for the user to press “C” before triggering the hard copy routine. *** ### Program Structure The program is organized into four clear phases: 1. **Initialization** (line 20): Sets up three constant aliases — `Z=0`, `T=2`, `U=4` — and clears the screen. 2. **Drawing loop** (lines 30–50): A single `FOR G=1 TO 260` loop READs four values per iteration and executes one `PLOT` and one `DRAW`. 3. **DATA block** (lines 60–2890): 260 groups of four values, organized into 25 numbered scan-passes separated by `REM` labels. 4. **User interaction and print routine** (lines 2910–2970): Displays a prompt, waits for a keypress, and optionally triggers a `COPY` with an optional linefeed POKE. ### Variable Aliasing in DATA Rather than embedding the numeric literals 0, 2, and 4 repeatedly throughout hundreds of DATA items, the programmer assigns them to short variable names before the loop runs: | Variable | Value | Role in DATA | | --- | --- | --- | | `Z` | 0 | Zero offset / zero delta (no movement on that axis) | | `T` | 2 | Small delta used for thin vertical strokes | | `U` | 4 | Slightly larger delta for wider strokes | Because BASIC evaluates variable names in DATA as numeric expressions when READ into a numeric variable, using `Z`, `T`, and `U` in place of `0`, `2`, and `4` saves storage. The variable reference is one character plus a delimiter, while the digit and delimiter take the same space — the real saving comes from avoiding repeated two-digit integers like `0,` being replaced by the single-char token `Z,` in every DATA line. ### Drawing Technique Each of the 260 loop iterations calls `PLOT 30+A, 120+S` to set an absolute pixel position, then `DRAW D, F` to extend a line segment. Because `S` and `F` are always `Z` (zero) in the DATA, every DRAW is purely horizontal — the logo is built from horizontal line segments at varying vertical positions. The X offset of 30 and Y offset of 120 center the image on the display. The 25 numbered REM sections correspond to 25 horizontal scan rows of the logo, each containing between one and eighteen PLOT/DRAW operations. ### DATA Organization Each DATA group has the form `A, S, D, F` where: - `A` — horizontal start position (added to 30 in the PLOT) - `S` — vertical position offset (always `Z`=0, meaning the `S` variable read from DATA is always the literal variable name `S`, making it rely on `S` being whatever it was last set to — effectively 0 since `S` is never explicitly set, defaulting to 0) - `D` — horizontal DRAW delta (the width of the stroke) - `F` — vertical DRAW delta (always `Z`=0, all strokes are horizontal) Note that `S` appears in DATA statements but is never initialized in the program. In BASIC, uninitialized numeric variables default to 0, so `S` reads as 0 everywhere it appears in DATA, making it functionally identical to `Z`. This appears to be a stylistic or copy-paste artifact rather than intentional. ### Printer Routine Lines 2950–2970 form a subroutine that handles hard copy output. Line 2960 contains a notable construction: `POKE 23324,10` patches the system variable that controls the printer linefeed behavior, and then `COPY` dumps the screen to the printer. The inline comment instructs the user to remove the POKE if their printer does not need a linefeed. The `COPY` keyword in line 2960 has a `/` suffix (`COPY /`), which on some system variants inverts the output — printing the image with reversed pixel polarity, useful for printers that work better with that mode. ### Anomalies and Notes - The `\\{20}\\{0}` sequences appearing before many DATA lines are character-code artifacts from the file encoding (character 20 followed by character 0), likely a display-format attribute stored in the program file that precedes those line numbers — they do not affect program execution. - Line 1210 contains a duplicate DATA entry `133,S,T,Z` appearing twice in sequence (lines 1200 and 1210). This draws the same segment twice, which is harmless but redundant. - The loop count of exactly 260 iterations must match the total number of DATA groups precisely; any mismatch would cause an `OUT OF DATA` error. The programmer used the numbered REM comments (#2 through #25) to track scan-row boundaries during entry. - Line 2930 uses `PAUSE 0` immediately followed by `INKEY$` — a standard efficient wait-for-keypress idiom where the zero-duration pause actually waits for any key before returning. - The `SAVE "timexlogo" LINE 1` at line 2990 saves the program with auto-start at line 1 (but line 1 does not exist; the lowest line is 10), so auto-run will begin at line 10, the first real line. ## Source Code ``` 10 REM TIMEXsinclair LOGO The HACKER 7-88 20 LET Z=0:LET T=2:LET U=4:CLS 30 RESTORE 40 FOR G=1 TO 260:READ A,S,D,F 50 PLOT 30+a,120+s:DRAW d,f:NEXT g 60 DATA Z,30,195,Z 70 REM #2 80 DATA Z,29,195,Z 90 REM #3 100 DATA Z,28,94,Z 110 DATA 193,s,T,Z 120 REM #4 130 DATA Z,27,94,Z 140 DATA 193,S,T,Z 150 REM #5 160 DATA Z,26,6,Z 170 DATA 22,S,U,Z 180 DATA 30,S,U,Z 190 DATA 38,S,9,Z 200 DATA 51,S,U,Z 210 DATA 67,S,U,Z 220 DATA 76,S,9,Z 230 DATA 90,S,U,Z 240 DATA 193,S,T,Z 250 REM #6 260 DATA Z,25,6,Z 270 DATA 22,S,U,Z 280 DATA 30,S,U,Z 290 DATA 39,S,7,Z 300 DATA 51,S,U,Z 310 DATA 67,S,5,Z 320 DATA 77,S,7,Z 330 DATA 89,S,5,Z 340 DATA 113,S,T,Z 350 DATA 149,S,T,Z 360 DATA 169,S,T,Z 370 DATA 193,S,T,Z 380 REM #7 390 DATA Z,24,6,Z 400 DATA 22,S,U,Z 410 DATA 30,S,U,Z 420 DATA 40,S,5,Z 430 DATA 51,S,U,Z 440 DATA 67,S,6,Z 450 DATA 78,S,5,Z 460 DATA 88,S,6,Z 470 DATA 113,S,T,Z 480 DATA 149,S,T,Z 490 DATA 169,S,T,Z 500 DATA 193,S,T,Z 510 REM #8 520 DATA Z,23,12,Z 530 DATA 16,S,10,Z 540 DATA 30,S,U,Z 550 DATA 41,S,3,Z 560 DATA 51,S,U,Z 570 DATA 59,S,15,Z 580 DATA 79,S,3,Z 590 DATA 87,S,7,Z 600 DATA 149,S,T,Z 610 DATA 193,S,T,Z 620 REM #9 630 DATA Z,22,12,Z 640 DATA 16,S,10,Z 650 DATA 30,S,U,Z 660 DATA 42,S,1,Z 670 DATA 51,S,U,Z 680 DATA 59,S,16,Z 690 DATA 80,S,1,Z 700 DATA 86,S,8,Z 710 DATA 149,S,T,Z 720 DATA 193,S,T,Z 730 REM #10 740 DATA Z,21,12,Z 750 DATA 16,S,10,Z 760 DATA 30,S,U,Z 770 DATA 51,S,U,Z 780 DATA 59,S,17,Z 790 DATA 85,S,9,Z 800 DATA 97,S,14,Z 810 DATA 113,S,T,Z 820 DATA 117,S,14,Z 830 DATA 133,S,14,Z 840 DATA 149,S,T,Z 850 DATA 153,S,14,Z 860 DATA 169,S,T,Z 870 DATA 173,S,14,Z 880 DATA 193,S,T,Z 890 REM #11 900 DATA Z,20,12,Z 910 DATA 16,S,10,Z 920 DATA 30,S,U,Z 930 DATA 38,S,1,Z 940 DATA 46,S,1,Z 950 DATA 51,S,U,Z 960 DATA 59,S,18,Z 970 DATA 84,S,10,Z 980 DATA 97,S,14,Z 990 DATA 113,S,T,Z 1000 DATA 117,S,14,Z 1010 DATA 133,S,14,Z 1020 DATA 149,S,T,Z 1030 DATA 153,S,14,Z 1040 DATA 169,S,T,Z 1050 DATA 173,S,14,Z 1060 DATA 193,S,T,Z 1070 REM #12 1080 DATA Z,19,12,Z 1090 DATA 16,S,10,Z 1100 DATA 30,S,U,Z 1110 DATA 38,S,T,Z 1120 DATA 45,S,T,Z 1130 DATA 51,S,U,Z 1140 DATA 63,S,15,Z 1150 DATA 83,S,11,Z 1160 DATA 97,S,T,Z 1170 DATA 113,S,T,Z 1180 DATA 117,S,T,Z 1190 DATA 129,S,T,Z 1200 DATA 133,S,T,Z 1210 DATA 133,S,T,Z 1220 DATA 149,S,T,Z 1230 DATA 165,S,T,Z 1240 DATA 169,S,T,Z 1250 DATA 173,S,T,Z 1260 DATA 193,S,T,Z 1270 REM #13 1280 DATA Z,18,12,Z 1290 DATA 16,S,10,Z 1300 DATA 30,S,U,Z 1310 DATA 38,S,3,Z 1320 DATA 44,S,3,Z 1330 DATA 51,S,U,Z 1340 DATA 63,S,16,Z 1350 DATA 82,S,12,Z 1360 DATA 97,S,T,Z 1370 DATA 113,S,T,Z 1380 DATA 117,S,T,Z 1390 DATA 129,S,T,Z 1400 DATA 133,S,T,Z 1410 DATA 149,S,T,Z 1420 DATA 165,S,T,Z 1430 DATA 169,S,T,Z 1440 DATA 173,S,T,Z 1450 DATA 193,S,T,Z 1460 REM #14 1470 DATA Z,17,12,Z 1480 DATA 16,S,10,Z 1490 DATA 30,S,U,Z 1500 DATA 38,S,U,Z 1510 DATA 43,S,U,Z 1520 DATA 51,S,U,Z 1530 DATA 63,S,15,Z 1540 DATA 83,S,11,Z 1550 DATA 97,S,14,Z 1560 DATA 113,S,T,Z 1570 DATA 117,S,T,Z 1580 DATA 129,S,T,Z 1590 DATA 133,S,T,Z 1600 DATA 149,S,T,Z 1610 DATA 153,S,14,Z 1620 DATA 169,S,T,Z 1630 DATA 173,S,T,Z 1640 DATA 193,S,T,Z 1650 REM #15 1660 DATA Z,16,12,Z 1670 DATA 16,S,10,Z 1680 DATA 30,S,U,Z 1690 DATA 38,S,9,Z 1700 DATA 51,S,U,Z 1710 DATA 59,S,18,Z 1720 DATA 84,S,10,Z 1730 DATA 97,S,14,Z 1740 DATA 113,S,T,Z 1750 DATA 117,S,T,Z 1760 DATA 129,S,T,Z 1770 DATA 133,S,T,Z 1780 DATA 149,S,T,Z 1790 DATA 153,S,14,Z 1800 DATA 169,S,T,Z 1810 DATA 173,S,T,Z 1820 DATA 193,S,T,Z 1830 REM #16 1840 DATA Z,15,12,Z 1850 DATA 16,S,10,Z 1860 DATA 30,S,U,Z 1870 DATA 38,S,9,Z 1880 DATA 51,S,U,Z 1890 DATA 59,S,17,Z 1900 DATA 85,S,9,Z 1910 DATA 109,S,T,Z 1920 DATA 113,S,T,Z 1930 DATA 117,S,T,Z 1940 DATA 129,S,T,Z 1950 DATA 133,S,T,Z 1960 DATA 149,S,T,Z 1970 DATA 153,S,T,Z 1980 DATA 165,S,T,Z 1990 DATA 169,S,T,Z 2000 DATA 173,S,T,Z 2010 DATA 193,S,T,Z 2020 REM #17 2030 DATA Z,14,12,Z 2040 DATA 16,S,10,Z 2050 DATA 30,S,U,Z 2060 DATA 38,S,9,Z 2070 DATA \{20}\{0}51,S,U,Z 2080 DATA \{20}\{0}59,S,16,Z 2090 DATA \{20}\{0}80,S,1,Z 2100 DATA \{20}\{0}86,S,8,Z 2110 DATA \{20}\{0}109,S,T,Z 2120 DATA \{20}\{0}113,S,T,Z 2130 DATA \{20}\{0}117,S,T,Z 2140 DATA \{20}\{0}129,S,T,Z 2150 DATA \{20}\{0}133,S,T,Z 2160 DATA \{20}\{0}149,S,T,Z 2170 DATA \{20}\{0}153,S,T,Z 2180 DATA \{20}\{0}165,S,T,Z 2190 DATA \{20}\{0}169,S,T,Z 2200 DATA \{20}\{0}173,S,T,Z 2210 DATA \{20}\{0}193,S,T,Z 2220 REM #18 2230 DATA Z,13,12,Z 2240 DATA \{20}\{0}16,S,10,Z 2250 DATA \{20}\{0}30,S,U,Z 2260 DATA \{20}\{0}38,S,9,Z 2270 DATA \{20}\{0}51,S,U,Z 2280 DATA \{20}\{0}59,S,15,Z 2290 DATA \{20}\{0}79,S,3,Z 2300 DATA \{20}\{0}87,S,7,Z 2310 DATA \{20}\{0}97,S,14,Z 2320 DATA \{20}\{0}113,S,T,Z 2330 DATA \{20}\{0}117,S,T,Z 2340 DATA \{20}\{0}129,S,T,Z 2350 DATA \{20}\{0}133,S,14,Z 2360 DATA \{20}\{0}149,S,T,Z 2370 DATA \{20}\{0}153,S,14,Z 2380 DATA \{20}\{0}169,S,T,Z 2390 DATA \{20}\{0}173,S,T,Z 2400 DATA \{20}\{0}193,S,T,Z 2410 REM #19 2420 DATA Z,12,12,Z 2430 DATA \{20}\{0}16,S,10,Z 2440 DATA \{20}\{0}30,S,U,Z 2450 DATA \{20}\{0}38,S,9,Z 2460 DATA \{20}\{0}51,S,U,Z 2470 DATA \{20}\{0}67,S,6,Z 2480 DATA \{20}\{0}78,S,5,Z 2490 DATA \{20}\{0}88,S,6,Z 2500 DATA \{20}\{0}97,S,14,Z 2510 DATA \{20}\{0}113,S,T,Z 2520 DATA \{20}\{0}117,S,T,Z 2530 DATA \{20}\{0}129,S,T,Z 2540 DATA \{20}\{0}133,S,14,Z 2550 DATA \{20}\{0}149,S,T,Z 2560 DATA \{20}\{0}153,S,14,Z 2570 DATA \{20}\{0}169,S,T,Z 2580 DATA \{20}\{0}173,S,T,Z 2590 DATA \{20}\{0}193,S,T,Z 2600 REM #20 2610 DATA Z,11,12,Z 2620 DATA \{20}\{0}16,S,10,Z 2630 DATA \{20}\{0}30,S,U,Z 2640 DATA \{20}\{0}38,S,9,Z 2650 DATA \{20}\{0}51,S,U,Z 2660 DATA \{20}\{0}67,S,5,Z 2670 DATA \{20}\{0}77,S,7,Z 2680 DATA \{20}\{0}89,S,5,Z 2690 DATA \{20}\{0}193,S,T,Z 2700 REM #21 2710 DATA Z,10,12,Z 2720 DATA \{20}\{0}16,S,10,Z 2730 DATA \{20}\{0}30,S,U,Z 2740 DATA \{20}\{0}38,S,9,Z 2750 DATA \{20}\{0}51,S,U,Z 2760 DATA \{20}\{0}67,S,U,Z 2770 DATA \{20}\{0}76,S,9,Z 2780 DATA \{20}\{0}90,S,U,Z 2790 DATA \{20}\{0}193,S,T,Z 2800 REM #22 2810 DATA Z,9,94,Z 2820 DATA \{20}\{0}193,S,T,Z 2830 REM #23 2840 DATA Z,8,94,Z 2850 DATA \{20}\{0}193,S,T,Z 2860 REM #24 2870 DATA Z,7,195,Z 2880 REM #25 2890 DATA Z,6,195,Z 2900 REM end of drawing 2910 PRINT #0;" Press 'C' For a Hard Copy." 2920 PAUSE 0 2930 IF INKEY$="c" OR INKEY$="C" THEN GO SUB 2950 2940 STOP 2950 \{20}\{0}\{20}\{1} REM \{20}\{0}Print Routine-Eliminate the POKE if Linefeed Not Needed 2960 LET /p=o:POKE 23324,10:COPY / 2970 RETURN 2990 SAVE "timexlogo" LINE 1 ```