--- title: "Colossus" id: 71918 type: "computer_media" slug: "colossus" url: "http://localhost/computer_media/colossus/" markdown_url: "http://localhost/computer_media/colossus.md" published_at: "2026-10-20T14:28:35+00:00" modified_at: "2026-10-20T14:29:03+00:00" author: "David Anderson" featured_image: url: "http://localhost/wp-content/uploads/2026/10/Colossus-Menu.png" excerpt: "Builds large graphic banners in selectable fonts and sizes, with banner review, animation, tape storage of banners and fonts, and printer output." 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: "Lemke Software Development" slug: "lemke-software-development" taxonomy: "post_tag" url: "http://localhost/tag/lemke-software-development/" - 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: "Stan Lemke" slug: "stan-lemke" taxonomy: "indiv" url: "http://localhost/indiv/stan-lemke/" genre: - name: "Banner" slug: "banner" taxonomy: "genre" url: "http://localhost/type/banner/" media_type: "Cassette" programmers: - name: "Stan Lemke" slug: "stan-lemke" taxonomy: "indiv" url: "http://localhost/indiv/stan-lemke/" download_url: "https://archive.org/download/timex-sinclair-software-archive/Colossus%20%281986%29%28Lemke%2C%20Stan%29%28TS2068%29%28US%29%28Cassette%29.zip" tsrun_member: "Colossus (1986)(Lemke, Stan)(TS2068)(US)(Cassette)/ColossusA.tap" mediadate: "1986" producer_company: - id: 11046 title: "Lemke Software Development" type: "company" url: "http://localhost/company/lemke-software-development/" images: - url: "http://localhost/wp-content/uploads/2026/10/Colossus-Menu.png" - url: "http://localhost/wp-content/uploads/2026/10/Colossus-Splash.png" - url: "http://localhost/wp-content/uploads/2026/10/Colossus-Files.png" - url: "http://localhost/wp-content/uploads/2026/10/Colossus-Tape.jpg" article_media: - id: 15357 title: "Colossus" type: "article" url: "http://localhost/article/colossus/" related_products: - id: 36977 title: "Colossus" type: "product" url: "http://localhost/product/colossus/" media_type_tags: "Banner" --- # Colossus Composes long graphic banners column by column and prints them on the 2040 printer or full size on a larger printer. The main menu offers printer copy, erase, loading and saving of banner data, a choice of font and font size, a low-resolution graphics mode, return to the current or a specified column, an animation option and a banner review. Banners and fonts are kept on tape as separate CODE files, so new fonts can be loaded at any time. The program itself is mostly machine code, driven by a short BASIC menu shell. The cassette label reads “Colossus ‘Graphic-Banner’ (c) [S D Lemke](http://localhost/indiv/stan-lemke/) 1986” with a [Lemke Software Development](http://localhost/company/lemke-software-development/) logo and a Wichita, Kansas address. Sides A and B carry the same recording: a loader, two title screens (the LSD logo and the Colossus logo), three machine code segments, the BASIC control program, a Chancery font and two sample files, an LSD banner and an animation. The loader REM notes that it and the two title screens do not need to be copied when making a backup or customized copy. At startup the program offers to load the code for a Z-PRINT 80 printer interface and to save a working copy, labelled Colossus v2.0. ## Program Analysis ### Program Structure The loader (`Colossus`, autostart line 1) loads each title screen to address 33000 and copies it to the display with a 12-byte routine POKEd from a `DATA` statement into address 32000. It then loads `COLOSSUS-1` (7788 bytes at 28950), `COLOSSUS-2` (920 bytes at 37932), `COLOSSUS-3` (1701 bytes at 63600) and finally the BASIC program, which autostarts at line 9990. Line 9990 does `CLEAR 28949` to protect the code, asks the user to stop the tape, offers to load the Z-PRINT 80 “HI” code to 64000, and offers to save Colossus v2.0 as four files (lines 9997–9999, with a `VERIFY` of each). It then enters the machine code at line 8900 with `RANDOMIZE USR 31883`. The remaining BASIC lines are service routines that the machine code menu returns to: - `2000`: re-enter the machine code menu at 32079 - `5000`–`5200`: save the current banner as CODE from 38998, then `VERIFY` it - `6000`–`6300`: load a banner to 38998 and re-enter the code at 31865 - `7000`–`7300`: load a font to 36900 - `9000`: load the three code segments when a saved copy is run ### Data Layout The banner save length is computed as `(256*PEEK 36759+PEEK 36758)*24+770`: a column count held at 36758–36759, 24 bytes per column (one full 192-pixel screen height), plus a fixed 770 bytes. The sample files on the tape agree with this layout: `LSD BANNER` is 24578 bytes (992 columns) and `ANIMATION` is 13058 bytes (512 columns). The `CHANCERY` font is 768 bytes, which is 96 characters of 8 bytes each, loaded at 36900. ### Notable Techniques - The loader’s screen-copy routine is `LD DE,16384 / LD HL,33000 / LD BC,6912 / LDIR / RET`, stored as decimal bytes in a `DATA` line. - Every numeric literal in the BASIC shell is written as `VAL "n"` to save memory. - File-name input is checked for length (1–10 characters) with a `BEEP` on error. - The program saves itself in four segments, so a user can make a working backup from within the program. ## Source Code ``` 1000 REM *********************** C O L O S S U S "the Graphic Banner" * by S D Lemke 1986 Lemke Software Development 2144 White Oak Wichita, Ks. 67207 ******************************** 2000 CLS : RANDOMIZE USR VAL "32079" 5000 CLS : PRINT AT VAL "5",VAL "0";"Press ENTER to SAVE your BANNER.": PAUSE VAL "0": IF CODE INKEY$=VAL "13" THEN GO TO VAL "5150" 5100 GO TO VAL "2000" 5150 INPUT "File Name? "; LINE a$: IF LEN a$>VAL "10" OR LEN a$VAL "10" THEN BEEP VAL "1",VAL "1": GO TO VAL "6200" 6300 PRINT AT VAL "5",VAL "0";" IF a LOAD ERROR occurs then: TYPE RUN (ENTER)";'';" PLAY your tape.": LOAD a$CODE VAL "38998": CLS : RANDOMIZE USR VAL "31865" 7000 CLS : PRINT AT VAL "5",VAL "1";"Press ENTER to LOAD a FONT.": PAUSE VAL "0": IF CODE INKEY$=VAL "13" THEN GO TO VAL "7200" 7100 GO TO VAL "2000" 7200 INPUT "Font Name? "; LINE a$: IF LEN a$>VAL "10" THEN BEEP VAL "1",VAL "1": GO TO VAL "7200" 7300 PRINT AT VAL "5",VAL "1";"IF a LOAD ERROR occurs then: TYPE RUN (ENTER)";'';" PLAY your tape.": LOAD a$CODE VAL "36900": GO TO VAL "2000" 8900 RANDOMIZE USR VAL "31883": STOP 9000 LOAD "COLOSSUS-1"CODE : LOAD "COLOSSUS-2"CODE : LOAD "COLOSSUS-3"CODE 9990 CLEAR VAL "28949": INK VAL "9": CLS 9992 PRINT ''';" STOP the COLOSSUS TAPE.": BEEP .05,VAL "20" 9994 PRINT ''';"LOAD your Z-PRINT 80 ""HI"" CODE?";TAB 10;" (Y/N)": PAUSE VAL "0": IF INKEY$="Y" OR INKEY$="y" THEN LOAD ""CODE VAL "64000",VAL "1300" 9996 PRINT ''"SAVE COLOSSUS v2.0? (Y/N)": PAUSE VAL "0": IF INKEY$<>"Y" AND INKEY$<>"y" THEN GO TO VAL "8900" 9997 CLS : PRINT " Prepare to SAVE COLOSSUS v2.0 NOTE -- COLOSSUS has 4 segments!" 9998 SAVE "COLOSSUS" LINE VAL "9000": SAVE "COLOSSUS-1"CODE VAL "28950",VAL "7788": SAVE "COLOSSUS-2"CODE VAL "37932",VAL "920": SAVE "COLOSSUS-3"CODE VAL "63600",VAL "1701" 9999 PRINT ''" REWIND/PLAY tape to VERIFY SAVE": VERIFY "": VERIFY ""CODE : VERIFY ""CODE : VERIFY ""CODE : GO TO VAL "8900" ```