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.
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 5000Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.