Print ‘N’ Plotter Paintbox Demo

This file is part of Long Island Sinclair Timex (LIST) User Group Library Tape #3.5. Download the collection to get this file.
Developer(s): Joe Gillespie
Date: 198x
Type: Program
Platform(s): TS 2068
Tags: Graphics

A rolling demonstration for Print ‘N’ Plotter Products’ Paintbox, which the demo says makes 84 UDG characters. It builds a landscape from UDGs, scrolls a caption, switches between four banks of 21 UDGs to draw buildings, vehicles and a launch scene, animates a rocket lifting off, and then cycles through a series of stored pictures with captions such as “Plus hi-resolution drawing” and “Your own BASIC programs!” before starting again.

A REM reads “Written for PRINT ‘N’ PLOTTER PRODUCTS by Joe Gillespie © 1983.” The tape holds the BASIC program, a 2048-byte block “pb” loaded into the display file, and a large CODE block.

Program Analysis

Program Structure

Line 999 clears to 31379, loads the title block, then loads the main CODE and runs. Lines 2000–2310 switch UDG banks with RANDOMIZE USR calls at 65153, 64958, 64763 and 64568. Lines 7000–7100 draw the opening scene, 5000–5200 animate the rocket, and 100–600 show five stored screens by POKEing an address into 64549/64550 and calling USR 64548.

Notable Techniques

  • With four banks of 21 UDGs, a single PRINT statement can use up to 84 different graphic characters by switching banks between statements.
  • Captions are printed in the lower screen with PRINT #0.
  • Line 930 POKEs the values 65–71 into seven attribute rows, giving horizontal bands of bright ink colours on black.

Potential Issues

  • Line 998 saves CODE 31380,35555, which would run past address 65535 as written.

Appears On

LIST user group library cassette with games, home finance, education, darkroom formulas, an OSCAR 10 satellite tracker and programming utilities across two sides.

Source Code

    0 REM                                  Written for              PRINT 'N' PLOTTER PRODUCTS       by Joe Gillespie  * 1983    
   20 LET i=0: GO TO 7000
   30 LET h=64550: LET l=64549: LET i=i+1
   50 GO TO i*100
  100 REM screen1
  120 PRINT #0;"   PLUS HI-RESOLUTION DRAWING...": PAUSE 250
  200 REM screen2
  210 BORDER 0: POKE h,144: POKE l,28: GO SUB 1000
  220 PRINT #0;"THAT YOU NEVER DREAMED POSSIBLE.": PAUSE 350
  300 REM screen3
  310 BORDER 5: POKE h,171: POKE l,28: GO SUB 1000
  320 PRINT #0;"         JUST FOR FUN...": PAUSE 250
  400 REM scrden4
  414 BORDER 2: POKE h,198: POKE l,28: GO SUB 1000
  420 PRINT #0;"     OR TO USE FROM WITHIN ...": PAUSE 250
  500 REM screen5
  510 BORDER 7: POKE h,225: POKE l,28: GO SUB 1000
  520 PRINT #0;"     YOUR OWN BASIC PROGRAMS !": PAUSE 250
  600 RUN 
  900 INK 7: PAPER 0: BRIGHT 1: BORDER 0: CLS : INK 0: LOAD ""CODE : LET s$="                                ": INK 6: PRINT AT 5,8;"PRINT 'N' PLOTTER"
  910 PRINT AT 7,0; PAPER 1;s$;AT 16,0;s$
  920 PRINT AT 18,10;"DEMO  PROGRAM"
  930 FOR n=0 TO 6: FOR t=0 TO 31: POKE 22784+t+n*32,n+65: NEXT t: NEXT n
  950 INK 0: RETURN 
  998 SAVE "DEMO" LINE 999: SAVE "pb"CODE 18432,2048: SAVE "CODE"CODE 31380,35555: STOP 
  999 CLEAR 31379: GO SUB 900: LOAD ""CODE : RUN 
 1000 RANDOMIZE USR 64548: INPUT "": RETURN 
 1999 STOP 
 2000 REM bank1
 2010 RANDOMIZE USR 65153: RETURN 
 2100 REM bank2
 2110 RANDOMIZE USR 64958: RETURN 
 2200 REM bank3
 2210 RANDOMIZE USR 64763: RETURN 
 2300 REM bank4
 2310 RANDOMIZE USR 64568: RETURN 
 3000 PRINT "abcdefghijklmnopqrstu"
 5000 GO SUB 2000: INK 4: PAPER 1: BORDER 0: CLS 
 5002 LET t=10
 5005 PRINT #0;a$
 5010 FOR s=13 TO 9 STEP -1
 5015 PRINT AT 3,0; INK 4;"tttttttttttttttttttttttttttttttt"
 5020 PRINT AT 13,s+4;"j ";AT 14,s+4;"hi kkkk "
 5030 PRINT AT 15,s;"abbcdddebbbbfg "
 5035 BEEP .1,35: PAUSE 2: BEEP .1,35
 5036 PRINT AT 3,0; INK 4;"ssssssssssssssssssssssssssssssss"
 5037 PAUSE 50
 5040 NEXT s
 5050 PRINT AT 14,17;"l": PAUSE t: PRINT AT 14,17; INK 6;"m"
 5060 PRINT AT 13,17; INK 6;"o";AT 14,17; INK 6;"n"
 5070 PRINT AT 14,17;"l"
 5080 FOR n=12 TO 0 STEP -1
 5090 PRINT AT n,17; INK 6;"o";AT n+1,17; INK 7;"p"
 5092 BEEP .05,60-n
 5095 PRINT AT n,17;" ";AT n+1,17;" "
 5096 IF n=10 THEN PRINT AT 14,17;"k"
 5098 IF n=2 THEN PRINT AT 3,17; INK 4;"s"
 5100 NEXT n
 5110 INPUT "": PRINT #0;"   AVAILABLE ON YOUR SPECTRUM!"
 5120 PAUSE 250
 5200 GO TO 30
 6000 REM 
 6010 INK 7: GO SUB 2300: PRINT AT 5,7; PAPER 5;"bbbb";AT 6,7; PAPER 0;"aaaa";AT 7,3; PAPER 5;"eeee"; PAPER 0;"aaaa"; PAPER 5;"eeee";AT 8,3; PAPER 0;"aaaaaaaaaaaa"; PAPER 5;"       "; PAPER 0;"rsssssssst";AT 9,0; PAPER 5;"nl "; PAPER 0;"aaaaaaaaaaaa"; PAPER 5;"       "; PAPER 0;"rsssssssst"
 6020 PRINT AT 10,0; PAPER 4;"km "; PAPER 0;"ccccccuccccc"; PAPER 4;"       iii"; PAPER 0;"rsst"; PAPER 4;"iii"
 6030 GO SUB 2100: PRINT AT 13,15; PAPER 4;"i";AT 14,14; PAPER 1;"ne";AT 15,10;"fgh mm j  kd";AT 16,2;"atcbbbbbbbbbbnnnnqqmm  rs"
 6040 PRINT AT 17,3;"acbbbbbbbbbbbbbbbbbbbbbbd"
 6050 GO SUB 2000: PRINT INK 4;AT 19,3;"ssss";AT 18,23;"ssssss";AT 21,19;"sssssss"
 6090 RETURN 
 7000 REM UDG DEMO
 7010 PAPER 1: INK 7: BORDER 0: CLS 
 7015 LET b$="                                "
 7020 FOR n=0 TO 10: PRINT PAPER 5;b$: NEXT n
 7030 FOR n=0 TO 2: PRINT PAPER 4;b$: NEXT n
 7040 PRINT AT 11,0; PAPER 0;b$
 7050 GO SUB 6000
 7055 LET m$="    PRINT'N'PLOTTER PAINTBOX    "
 7060 LET t$=" g g  opq g  opq g g    opq g    g g  opq g  g g   g   opq g"
 7065 LET a$="    MAKES 84 UDG CHARACTERS..."
 7070 FOR n=1 TO 29: GO SUB 2300: PRINT AT 11,0; PAPER 0;t$(n TO (n+31))
 7080 GO SUB 2200: PRINT AT 2,n-1; INK 2; PAPER 5;" ab"
 7085 PRINT AT 2,0; PAPER 5; INK 0;m$( TO n)
 7090 NEXT n: PRINT AT 2,9; PAPER 5;"   "
 7095 PRINT AT 20,0;"": FOR n=0 TO 21: POKE 23692,255: PRINT : NEXT n
 7100 GO TO 5000

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