Alphabet Zoo

Date: 1984
Type: Program
Platform(s): TS 2068
Tags: Education

Alphabet Zoo is a loader program that displays a title screen while a separate machine code file is transferred from tape. The program uses PAPER, INK, BRIGHT, and FLASH attributes to create a styled splash screen with a copyright notice and estimated load time. After loading, it transfers control to machine code at address 32768 via PRINT USR 32768, which runs the code and presumably returns a value to print. A commented-out line (9993) hints at the save routine used to produce the companion code file “alpzoo.C1”, starting at address 32768 with a length of 20,801 bytes.

Program Structure

The program divides cleanly into three phases: screen setup and title display (lines 5–120), tape loading and execution (lines 130–140), and utility/maintenance lines stored as remarks at the end (lines 9992–9998).

Screen Setup

Lines 5–40 establish two distinct screen regions. Lines 5–7 set the top two rows (AT 0 and AT 1) to a neutral white-on-white appearance using BRIGHT 0, PAPER 7, and INK 7, effectively blanking them. Lines 10–40 then switch to blue paper with bright white ink (PAPER 1:INK 7:BRIGHT 1) and fill rows 2 through 21 with spaces, painting the main play area blue.

Title Screen Content

The title screen elements are positioned manually using PRINT AT:

  • Line 50: “ALPHABET ZOO” centered at row 5, column 10
  • Line 60: “COPYRIGHT 1984” at row 7, column 9
  • Line 70: “SPINNAKER SOFTWARE CORP.” at row 9, column 4
  • Line 80–90: Load time warning (“APPROXIMATE LOAD TIME: / 2 MINUTES”) at rows 12 and 14
  • Lines 100–110: A flashing “PLEASE WAIT” message at row 18, using FLASH 1 before the print and FLASH 0 after

Machine Code Loading and Execution

Line 130 loads the binary file "alpzoo.C1" directly into memory at address 32768 (the start of the upper RAM area, just above the 32K boundary). Line 140 uses PRINT USR 32768 to call the machine code as a function; USR in this context calls the routine and returns whatever value is left in the BC register pair, which is then printed. This is a common technique when the machine code is self-contained and either does not return or returns a status value.

Maintenance and Save Lines

Lines 9992–9998 are developer utilities stored at the end of the program where they will not interfere with normal execution:

  • Line 9992: A SAVE statement to re-save this BASIC loader, set to auto-run from line 1.
  • Line 9993: A REM wrapping a RANDOMIZE USR 100 call followed by a SAVE for the companion code block — 20,801 bytes starting at 32768. The RANDOMIZE USR 100 prefix suggests a setup or compression routine at address 100 was run before saving. This line is commented out to prevent accidental execution.
  • Line 9998: An empty REM, likely a placeholder or separator.

Notable Techniques

The use of INK 7:PAPER 7 with spaces to “erase” rows without clearing the whole screen is a deliberate technique to control which screen areas receive which attribute colors, avoiding a full CLS that would reset all attributes uniformly. The flashing wait prompt is toggled cleanly by bracketing only the relevant PRINT with FLASH 1 and FLASH 0, leaving the rest of the display unaffected.

Anomalies

After line 120 sets INK 1:PAPER 1 (blue on blue, effectively invisible text), the LOAD on line 130 and PRINT USR on line 140 execute under those attributes. The output of PRINT USR 32768 on line 140 would therefore be printed in invisible ink, suggesting the machine code routine either never returns to BASIC or that the printed value is intentionally hidden.

Image Gallery

Source Code

    5 BRIGHT 0:PAPER 7:INK 7
    6 PRINT AT 0,0;"                                "
    7 PRINT AT 1,0;"                                "
   10 PAPER 1:INK 7:BRIGHT 1
   20 FOR i=2 TO 21
   30 PRINT AT i,0;"                                "
   40 NEXT i
   50 PRINT AT 5,10;"ALPHABET ZOO"
   60 PRINT AT 7,9;"COPYRIGHT 1984"
   70 PRINT AT 9,4;"SPINNAKER SOFTWARE CORP."
   80 PRINT AT 12,5;"APPROXIMATE LOAD TIME:"
   90 PRINT AT 14,11;"2 MINUTES"
  100 FLASH 1
  110 PRINT AT 18,9;" PLEASE  WAIT "
  120 FLASH 0:INK 1:PAPER 1
  130 LOAD "alpzoo.C1"CODE 32768
  140 PRINT USR 32768
 9992 SAVE "ALPZOO.B1" LINE 1
 9993 REM RANDOMIZE USR 100:SAVE "zlpzoo.C1"CODE 32768,20801
 9998 REM

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