Colossus

Products: Colossus
Developer(s): Stan Lemke
Date: 1986
Type: Cassette
Platform(s): TS 2068
Tags: Banner

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 1986” with a 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.

Related Products

Banner designer program similar to The Print Shop. Prints horizontally on TS2040 printer or on a full-size printer supported by...

Related Articles

Like it’s namesake, the Colossus of Rhodes, Lemke Software Development’s graphic banner designer utility “Colossus” stands head and shoulders above...

Image Gallery

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 "1" THEN BEEP VAL "1",VAL "1": GO TO VAL "5150"
 5200 SAVE a$CODE VAL "38998",(VAL "256"*PEEK VAL "36759"+PEEK VAL "36758")*VAL "24"+VAL "770": PRINT AT VAL "5",VAL "0";" Rewind your tape and PLAY to         VERIFY your SAVE.";'';"  If an ERROR occurs, then:          TYPE RUN (ENTER).": VERIFY ""CODE : GO TO VAL "2000"
 6000 CLS : PRINT AT VAL "5",VAL "0";"Press ENTER to LOAD a BANNER.": PAUSE VAL "0": IF CODE INKEY$=VAL "13" THEN GO TO VAL "6200"
 6100 GO TO VAL "2000"
 6200 INPUT "File Name? "; LINE a$: IF 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"

Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.