“BLAM” is a two-part typing education and arcade game package by Richard S. Haseltine (Riverside Software, 1984) consisting of a loader/instructor program and the main BLAM game. The loader program provides keyboard instruction, a finger placement guide, a “Firecracker” timing exercise, and a scored finger-practice game before optionally chaining to load the BLAM game from tape. The main BLAM game drops letter-labeled bombs from the top of the screen that the player must intercept by pressing the correct key with the correct finger; scores are tracked per player across 28 letter sets and 4 speed levels using four string arrays (E$, F$, G$, H$) that can be saved to and loaded from tape. User-defined graphics (UDGs 144–164) are extensively redefined at runtime to create bomb shapes, firecracker imagery, explosion animations, and hand/finger diagrams, with different UDG bitmaps loaded depending on which program section is active.
Program Analysis
Overall Structure
The listing comprises two separate BASIC programs. The first (lines 2–2455) is the loader/instructor, named internally “BLAM” but functioning as a prerequisite tutorial that can chain-load the second program from tape. The second program (lines 1–2760) is the BLAM game itself. Both share similar design conventions, variable names, and UDG sets, suggesting they were developed together and share a common code heritage.
Program 1 – Loader/Instructor
Execution begins at line 2 with GO TO 439, which sets up an ON ERR GO TO 797 trap before initialising variables. The program presents a four-option main menu (line 798–806):
- All Instructions (sets
MFLG=1, jumps to line 855) - Finger/Key Exercise (sets
MFLG=2) - Firecracker Game (sets
MFLG=3) - BLAM Game (chains via
LOAD "BLAM"at line 2435/2455)
A secondary in-game menu at line 2395 allows switching between these modes without a full restart, using the flag variables MFLG and M2FLG to track context.
Program 2 – BLAM Game
Execution begins at line 910 (or line 1 for a special “show keyboard” shortcut via SFLG=1). Initialisation at lines 910–936 sets up all variables, loads 24 named letter-sets into DIM A$(24,9), and allocates four score arrays E$, F$, G$, H$ (each DIM (27,4,3)), one per player slot. The game loop itself runs from line 220: a random column is chosen, a bomb character (\m) descends row by row (lines 270–455), and the player must press the matching key before it lands.
Flag System
Both programs use a shared flag convention to redirect flow through shared subroutines:
| Flag | Meaning |
|---|---|
FLG | General mode/state: 0=normal, 5=game-over restart, 7=Firecracker play, 8/9=mid-exercise states, 10=instruction demo, 14=auto-demo, 16=explosion only, 17=explosion+paper change, 20=explosion in exercise |
MFLG | Which top-level mode is active (1=instructions, 2=finger exercise, 3=Firecracker) |
M2FLG | Secondary mode flag used after returning from BLAM game menu |
PFLG | Player-specific state; value 4 forces a custom letter-set (B$) built from the player’s missed letters |
SFLG | Score-system flag: 1=skip intro and jump to keyboard display, 2=save-scores flow |
BFLG | Error-recovery flag set by ON ERR handler |
AFLG | Used during score-array reinitialization to abort early |
UDG Management
Both programs make heavy use of User-Defined Graphics, redefining them multiple times at runtime to serve different visual purposes. In Program 1, UDGs 144–153 are first defined as keyboard-frame and line-drawing glyphs (lines 495–585), then redefined at line 720 as box-drawing characters for the exercise screen. At line 2045, they are redefined again as a detailed firecracker sprite. Program 2 defines its own set of UDGs at lines 990–1202, including bomb-body segments, hand outlines, and explosion fragments. The explosion subroutine at lines 45–110 (Program 1) and 100–168 (Program 2) uses UDGs \a–\d (144–147) as directional arrow-like quarter-circle shapes radiating from the blast centre.
Score Persistence
Program 2 implements a multi-player score record system. Up to four players are stored in P$(4,9). Each player’s best scores are held in one of the four string arrays E$–H$, dimensioned (27,4,3) to cover 27 letter-sets × 4 speed levels, with each score stored as a 3-character string. The indirect dispatch at line 2425 (GO SUB IND*20+2015) routes score-read access to the correct array for the current player index. Scores can be saved to tape and reloaded with five sequential SAVE/LOAD calls (lines 2511–2519 and 1278–1283), with a VERIFY pass at lines 2530–2538.
Keyboard Layout Rendering
The subroutine at lines 855–965 (Program 1) renders an on-screen keyboard layout in four passes (one per row), controlled by FLG values 0–3. Each pass adjusts indent variables J and K to stagger the rows correctly. The hand diagram at lines 1135–1200 draws finger outlines using block graphics, with the palm drawn as a special case inside the loop at lines 1175–1180.
Letter-Set and Scoring Logic
In Program 1, the 36 keys are stored in DIM V$(36,1) loaded from DATA at line 455. Screen positions for each key are encoded in DIM M$(144,2) (line 465), giving row and column for each of the 36 keys across 4 passes. In Program 2, letter-sets are 6-letter strings from A$(D). The bomb targets one of 6 columns (S$ maps column index to screen column), and the player’s score per drop is determined by the row at which the bomb is intercepted (line 180: SC is set to the current row-number offset from the score chart printed at the right edge).
Adaptive Practice
After a game in Program 2, if the player missed 2 or 3 distinct letters (tracked in W$, built at lines 171–175), the subroutine at lines 2620–2700 constructs a custom letter-set string by repeating those missed letters, names a suggested practice set, and offers to load it directly. This is an early example of adaptive feedback in educational software.
Timing and Synchronization
Both programs use the system frame counter at addresses 23672–23674 (read via PEEK) for elapsed-time scoring. Program 1 reads this at line 310 to award up to 10 points per keypress based on reaction speed. Program 1 also resets the counter with POKE 23672,0 etc. at line 250 before each letter is presented. Program 2 uses a software delay loop at line 445 (FOR z=1 TO v: NEXT z) to control bomb-drop speed, with v set to 24, 16, 8, or 2 by the speed selector.
DRAW-Based Explosion Animation
The firework/explosion display in both programs uses DRAW INVERSE 1 to erase and redraw lines, creating a frame-based animation. In Program 1 (lines 142–157), DATA at lines 202–212 provides coordinate pairs for a multi-arm starburst pattern drawn in a loop. A separate RESTORE 212 + PLOT + DRAW sequence at lines 1680–1684 draws the firecracker fuse graphic.
Notable Idioms and Techniques
POKE 23560,0clears the last-key-pressed system variable;PEEK E=42(whereE=23560) detects SYMBOL SHIFT+* as a menu-return shortcut throughout both programs.VAL Z$(Z TO Z+2)andVAL M$(K)extract numeric values from packed string DATA, saving array dimensions.GO SUB B*10at line 1560 and line 170 dispatches to one of the letter-rendering subroutines (lines 480–909) based on the ASCII code of a character inB$, effectively implementing a computed GOSUB table.- The score-table indirect dispatch
GO SUB IND*20+2015at line 2425 similarly implements a four-way player-indexed jump. - The
ON ERR GO TO/ON ERR RESETpair is used in both programs for error trapping, withBFLGandERRvariables used to distinguish error contexts (tape verify failure vs. general errors). - UDG character
\n(char 157) is a single horizontal line pixel row, used as an animated “fuse” indicator in the Firecracker sequence.
Potential Anomalies
- In Program 2, line 1165 contains
IF y=10 THEN NEXT y, which skips the body of the outer loop fory=10. SinceNEXT yinside anIFadvances and tests the loop variable, this is a valid (if unusual) way to skip a single iteration without aGO TO. - Line 2030 in Program 2 reads
LET U=VAL U$: GO TO IND*20+2015; this computes a target line that does not exist forINDvalues other than 1–4 (yielding lines 2035, 2055, 2075, 2095), which are all present — the dispatch table is correctly bounded by the player-slot limit of 4. - Program 1, line 20, redefines the subroutine originally at that line number in Program 2; within each program the line numbers are self-consistent, but the overlap means the two programs cannot be merged directly.
Content
Source Code
2 GO TO 439
3 IF K$="A" OR K$="S" OR K$="D" OR K$="F" OR K$="G" OR K$="H" OR K$="J" OR K$="K" OR K$="L" THEN PRINT PAPER 2; INK 7; BRIGHT 1; FLASH 0;AT R,C;K$: GO TO 7
4 PRINT PAPER 6; INK 0; FLASH 0;AT R,C;K$: GO TO 7
6 REM PROGRAM START:784."RUN" ESTABLISHES ALL VALUES TO ""0""
7 BEEP .1,40
8 POKE 23560,0: GO SUB 720: IF MFLG<>0 THEN GO TO 798
9 IF M2FLG<>0 THEN GO TO 2385
15 FOR x=12 TO Q: FOR y=0 TO 31 STEP 2: PRINT AT x,y;" ": NEXT y: NEXT x: RETURN
20 FOR X=17 TO Q: FOR Y=0 TO 31 STEP 2: PRINT AT X,Y;" ": NEXT Y: NEXT X: RETURN
25 FOR X=8 TO Q: FOR Y=0 TO 31 STEP 2: PRINT AT X,Y;" ": NEXT Y: NEXT X: RETURN
30 FOR X=17 TO 21: FOR Y=0 TO 25 STEP 2: PRINT AT X,Y;" ": NEXT Y: NEXT X: RETURN
35 FOR W=5 TO 21: FOR R=0 TO 31 STEP 2: PRINT AT W,R;" ": NEXT R: NEXT W: RETURN
45 PRINT INK 7;AT X,F-1;"d";AT X,F+1;"b";AT X-1,F;"a";AT X+1,F;"c"
50 PRINT INK 7;AT X,F-2;"d";"::::::";"b"
55 PRINT INK 7;AT X+1,F-1;"::::::";AT X+2,F;"c"
60 PRINT INK 7;AT X-1,F-1;"::::::";AT X-2,F;"a"
65 PAUSE 10
70 PRINT INK 2;AT X,F;"::";AT X,F-1;"::";AT X-1,F;"::";AT X,F+1;"::";AT X+1,F;"::"
75 PRINT INK 2;AT X+1,F-1;"::";AT X-1,F-1;"::";AT X-1,F+1;"::";AT X+1,F+1;"::"
80 PRINT INK 2;AT X,F-2;"d";AT X-2,F;"a";AT X,F+2;"b";AT X+2,F;"c"
85 PAUSE 5: IF FLG=17 THEN PAPER 2: BORDER 2: CLS : GO TO 0095
90 PRINT AT X-2,F;" ";AT X-1,F-1;" ";AT X,F-2;" ";AT X+1,F-1;" ";AT X+2,F;" "
95 SOUND 6,6;7,7;8,16;9,16;12,56;13,8: PAUSE 90: SOUND 8,0;9,0;10,0
100 IF FLG=17 THEN RETURN
105 IF FLG=16 THEN RETURN
110 IF FLG=20 THEN RETURN
117 LET L=11: LET Z=1: RESTORE 202: PAPER 1: LET A=220: LET B=74
122 LET Z$="219066219058"
127 PRINT AT L,26;"e";"f";"g";AT L+1,26;"h";"i";"j"
132 PLOT A,B
137 INK 6
142 FOR S=1 TO 7: READ G,H: DRAW INVERSE 1;G,H: READ G,H: DRAW INVERSE 1;G,H: READ G,H: DRAW G,H: READ G,H: DRAW G,H
147 IF FLG=7 THEN LET FLG=8: RETURN
152 IF FLG=8 THEN RETURN
157 NEXT S
162 FOR Y=L TO L+1: PRINT AT Y,26;" ": NEXT Y: LET L=L+1
172 IF FLG=8 AND Z>12 THEN LET FLG=16: LET X=15: LET F=27: GO SUB 45: GO SUB 1660: LET FLG=5: GO TO 265
177 IF Z>12 THEN GO TO 0197
182 LET A=VAL Z$(Z TO Z+2): LET Z=Z+3: LET B=VAL Z$(Z TO Z+2): LET Z=Z+3
187 IF FLG=8 THEN LET FLG=9: RESTORE 202: RETURN
192 RESTORE 202: GO TO 0127
197 RETURN
202 DATA -10,5,10,-5,5,13,-5,-13,8,4,-8,-4,-7,13,7,-13,0,12,0,-12,-10,5,10,-5,5,13,-5,-13,8,4
207 DATA -8,-4,-7,13,7,-13,0,12,0,-12,-10,4,10,-4,-3,13,3,-13,11,6,-11,-6,-11,3,11,-3
212 DATA -1,1,0,2,2,2,0,3,-2,2,0,1,2,2,0,2
220 LET B1=1: LET L$="121212071616161212161919171614141617171614161212161407111412120709071112"
225 LET SC=0: LET K=1: LET K$="": LET R=0: LET C=0
227 IF FLG=0 THEN POKE 23672,0: POKE 23673,0: POKE 23674,0
229 IF FLG=7 THEN GO TO 232
230 FOR D=1 TO 36: LET K$=V$(D): LET R=VAL M$(K): LET K=K+1: LET C=VAL M$(K): LET K=K+1: LET R1=VAL M$(K): LET K=K+1: LET C1=VAL M$(K): LET K=K+1
231 GO TO 240
232 RANDOMIZE 0: FOR D=1 TO 36
233 LET RD=INT (RND*36)+1: IF RD>=11 AND RD<=17 THEN GO TO 233
234 LET O$=F$(RD): LET R=VAL O$(1): LET C=VAL O$(2 TO 3): LET K$=CHR$ (RD+47): LET C1=VAL O$(4 TO 5)
237 IF FLG<>0 THEN GO SUB 388
240 IF FLG=0 THEN GO SUB 0380
250 IF FLG<>0 THEN POKE 23672,0: POKE 23673,0: POKE 23674,0
252 IF FLG<>0 THEN PRINT FLASH 0; PAPER 7;AT 10,12;" ": PAUSE 2
255 PRINT FLASH 1; PAPER 6; INK 0;AT R,C;K$
257 IF FLG<>0 THEN PRINT PAPER 7; INK 0;AT 10,12;K$
265 LET I$=INKEY$
275 IF FLG=8 AND I$<>K$ THEN GO SUB 157
280 IF FLG=9 AND I$<>K$ THEN LET FLG=8: GO SUB 127
285 IF FLG=7 AND I$<>K$ THEN GO SUB 117
287 IF PEEK E=42 THEN GO TO 3
290 IF I$<>K$ THEN GO TO 0265
300 LET B3=VAL L$(B1 TO B1+1): LET B1=B1+2
310 BEEP .1,B3: IF FLG<>0 THEN LET Q=PEEK 23672+256*PEEK 23673+256*PEEK 23674: LET SC=SC+(10-INT (Q/30))
315 IF FLG=8 THEN FOR W=9 TO 14: PRINT AT W,25;" ": NEXT W: GO SUB 1680
320 IF FLG<>0 THEN PRINT PAPER 6; INK 0;AT 3,26;SC;" "
325 PRINT FLASH 0; PAPER 6; INK 0;AT R,C;K$
335 IF K$="A" OR K$="S" OR K$="D" OR K$="F" OR K$="J" OR K$="K" OR K$="L" THEN PRINT PAPER 2; INK 7;AT R,C;K$
337 IF FLG<>0 THEN GO SUB 390
340 IF FLG=0 THEN GO SUB 0385
345 IF FLG=5 THEN LET FLG=7: GO TO 0355
350 IF FLG=8 THEN LET FLG=7
355 NEXT D
360 IF FLG=5 OR FLG=7 OR FLG=8 OR FLG=9 THEN GO TO 2110
365 IF MFLG=1 OR MFLG=2 OR M2FLG=1 OR M2FLG=2 THEN GO TO 0405
367 IF MFLG=3 THEN GO TO 400
370 GO TO 0405
380 FOR Y=R1+2 TO 10: PRINT PAPER 2; INK 7;AT Y,C1;"o": NEXT Y: RETURN
385 FOR Y=R1+2 TO 10: PRINT PAPER 2; INK 7;AT Y,C1;" ": NEXT Y: RETURN
388 FOR Y=8 TO 10: PRINT PAPER 2; INK 7;AT Y,C1;"o": NEXT Y: RETURN
390 FOR Y=8 TO 10: PRINT PAPER 2;AT Y,C1;" ": NEXT Y: RETURN
400 IF MFLG=3 THEN GO SUB 0030: PRINT INK 7;AT 17,10;"WELL DONE!": PAUSE 200: PRINT AT 17,10;" ": GO TO 2110
405 LET Q=21: GO SUB 0020
407 LET Q=INT (PEEK 23672)+INT (256*PEEK 23673)+INT (256*PEEK 23674): LET TIME=INT (Q/60)
409 PRINT INK 7;AT 17,10;"Well done!": PAUSE 100: PRINT INK 7;AT 19,0;"TIME=";TIME;" Seconds.";: PAUSE 100: IF TIME<=50 THEN PRINT INK 7;" You are ready"'"to play FIRECRACKER.": PAUSE 100
410 PRINT INK 7;AT 21,0;"(To continue, press any letter.)": PAUSE 0: BEEP .1,40
411 IF PEEK E=42 THEN GO TO 8
412 LET Q=21: GO SUB 0020
413 IF MFLG=2 OR M2FLG=2 THEN LET H$="2": GO TO 2385
430 PRINT INK 7;AT 17,1;"Do you want to try it"'" again? (Y/N?)"
431 IF PEEK E=42 THEN GO TO 7
432 LET I$=INKEY$: IF I$<>"Y" AND I$<>"N" THEN GO TO 431
435 BEEP .1,40: LET Q=18: GO SUB 0020
437 IF I$="Y" THEN GO TO 1611
438 RETURN
439 ON ERR GO TO 797
440 PRINT AT 9,7;"STOP THE RECORDER.";AT 10,7;"DO NOT REWIND TAPE.": PAUSE 100: PRINT AT 14,8;"PLEASE STAND BY"
441 PAUSE 300: IF PEEK 23560=64 THEN GO TO 444
443 GO TO 447
444 BEEP .1,40: CLS : ON ERR RESET : PRINT AT 9,8;"PLEASE STAND BY"
447 LET G$="": LET L=0: LET FLG=0: LET MFLG=0: LET M2FLG=0: LET B$="": LET B3=0: LET X=0: LET S=0
448 LET I$="": LET C1=0: LET R1=0: LET D=0: LET R=0: LET A=0: LET B=0: LET Z=0: LET Z$="":
449 LET L2=0: LET B2=0: LET B1=0: LET L$="": LET C=0: LET SC=0: LET G=0: LET H=0: LET F=0: LET K=0: LET K$="": LET X=0:
450 LET MFLG=0: LET M2FLG=0: RESTORE 455: DIM V$(36,1): FOR X=1 TO 36: READ D$: LET V$(X)=D$: NEXT X
452 LET E=23560
455 DATA "F","R","T","4","5","V","B","G","J","H","Y","U","6","7","N","M","D","E","3","C","K","I","8","S","W","2","X","L","O","9","A","Q","1","Z","P","0"
465 DIM M$(144,2): FOR X=1 TO 144: READ G$: LET M$(X)=G$: NEXT X
470 DATA "6","9","6","9","4","8","6","9","4","10","6","9","2","7","6","9","2","9","6","9","8","10","6","9","8","12","6","9","6","11","6","9","6","15","6","15","6","13","6","15","4","12","6","15","4","14","6","15","2","11","6","15","2","13","6","15","8","14","6","15","8","16","6","15"
475 DATA "6","7","6","7","4","6","6","7","2","5","6","7","8","8","6","7","6","17","6","17","4","16","6","17","2","15","6","17","6","5","6","5","4","4","6","5","2","3","6","5","8","6","6","5","6","19","6","19","4","18","6","19","2","17","6","19"
477 DATA "6","3","6","3","4","2","6","3","2","1","6","3","8","4","6","3","4","20","6","21","2","19","6","21"
480 RESTORE 482: DIM F$(43,5): FOR X=1 TO 43: READ G$: LET F$(X)=G$: NEXT X
482 DATA "21921","20103","20305","20507","20709","20909","21115","21315","21517","21719"
484 DATA "0","0","0","0","0","0","0"
486 DATA "60303","81209","80807","60707","40607","60909","61109","61315","41617","61515","61717"
487 DATA "61919","81615","81415","41819","42021","40203","40809"
488 DATA "60505","41009","41415","81009","40405","80605","41215","80403"
495 FOR J=USR CHR$ 144 TO USR CHR$ 144+7: READ A: POKE J,A: NEXT J
500 DATA 0,24,60,60,126,126,255,255
505 FOR J=USR CHR$ 145 TO USR CHR$ 145+7: READ A: POKE J,A: NEXT J
510 DATA 192,240,252,254,254,252,240,192
515 FOR J=USR CHR$ 146 TO USR CHR$ 146+7: READ A: POKE J,A: NEXT J
520 DATA 255,255,126,126,60,60,24,0
525 FOR J=USR CHR$ 147 TO USR CHR$ 147+7: READ A: POKE J,A: NEXT J
530 DATA 3,15,63,127,127,63,15,3
550 FOR J=USR CHR$ 154 TO USR CHR$ 154+7: READ A: POKE J,A: NEXT J
555 DATA 0,0,0,0,16,56,84,146
560 FOR J=USR CHR$ 155 TO USR CHR$ 155+7: READ A: POKE J,A: NEXT J
565 DATA 128,64,32,240,32,64,128,0
570 FOR J=USR CHR$ 156 TO USR CHR$ 156+7: READ A: POKE J,A: NEXT J
575 DATA 146,84,56,16,0,0,0,0
580 FOR J=USR CHR$ 157 TO USR CHR$ 157+7: READ A: POKE J,A: NEXT J
585 DATA 0,0,0,255,0,0,0,0
590 FOR J=USR CHR$ 158 TO USR CHR$ 158+7: READ A: POKE J,A: NEXT J
595 DATA 16,16,16,16,16,16,16,16
655 LET MFLG=0: LET M2FLG=0: RESTORE 665
660 FOR J=USR CHR$ 162 TO USR CHR$ 162+7: READ A: POKE J,A: NEXT J
665 DATA 255,255,127,63,63,127,255,255
670 FOR J=USR CHR$ 161 TO USR CHR$ 161+7: READ A: POKE J,A: NEXT J
675 DATA 255,255,254,252,252,254,255,255
680 FOR J=USR CHR$ 163 TO USR CHR$ 163+7: READ A: POKE J,A: NEXT J
685 DATA 0,0,0,0,195,231,255,255
690 FOR J=USR CHR$ 164 TO USR CHR$ 164+7: READ A: POKE J,A: NEXT J
695 DATA 255,255,231,195,0,0,0,0
700 FOR J=USR CHR$ 159 TO USR CHR$ 159+7: READ A: POKE J,A: NEXT J
705 DATA 60,126,255,255,255,255,126,60
720 RESTORE 730
725 FOR J=USR CHR$ 148 TO USR CHR$ 148+7: READ A: POKE J,A: NEXT J
730 DATA 0,0,0,0,0,0,0,255
735 FOR J=USR CHR$ 149 TO USR CHR$ 149+7: READ A: POKE J,A: NEXT J
740 DATA 129,129,129,129,129,129,129,129
745 FOR J=USR CHR$ 150 TO USR CHR$ 150+7: READ A: POKE J,A: NEXT J
750 DATA 255,0,0,0,0,0,0,0
755 FOR J=USR CHR$ 151 TO USR CHR$ 151+7: READ A: POKE J,A: NEXT J
760 DATA 1,1,1,1,1,1,1,1
765 FOR J=USR CHR$ 152 TO USR CHR$ 152+7: READ A: POKE J,A: NEXT J
770 DATA 128,128,128,128,128,128,128,128
775 FOR J=USR CHR$ 153 TO USR CHR$ 153+7: READ A: POKE J,A: NEXT J
780 DATA 1,2,4,15,4,2,1,0
781 IF MFLG<>0 OR M2FLG<>0 THEN RETURN
784 POKE 23609,100: LET M2FLG=0: LET MFLG=0: LET H$="": LET FLG=0: RESTORE : BORDER 1: PAPER 1: INK 6: CLS
786 PRINT PAPER 2; INK 4;AT 6,0;"'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'."
787 PRINT AT 9,7;"WELCOME TO ""BLAM"""
788 PRINT PAPER 2; INK 4;AT 12,0;"'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'."
789 PAUSE 200: PRINT AT 17,2;"* Richard S. Haseltine 1984";AT 18,7;"Riverside Software";AT 19,10;"R1 Box B-20";AT 20,5;"Orrington, Maine 04474"
790 PAUSE 300: LET Q=20: GO SUB 20
791 PAUSE 30: PRINT INK 6;AT 16,7;"(Learning to type";AT 17,12;"is fun)": PAUSE 300
792 PRINT AT 9,7;" ": PAUSE 30: PRINT AT 9,6;"KEYBOARD INSTRUCTION": PAUSE 300
793 FOR X=7 TO 24: PRINT AT 16,X;" ";AT 17,X;" ": NEXT X
794 PAUSE 30: PRINT AT 14,12;"NOTICE";AT 15,12;"gggggg";AT 17,0;"Whenever you are asked for an input, if you press ""SYMBOL"" and""*"", you'll return to a MENU."''"(To continue, press any letter.)"
795 PAUSE 0: BEEP .1,40
796 LET M2FLG=0: LET MFLG=0: LET L2=0: LET SFLG=0: LET FLG=0: GO TO 798
797 LET BFLG=1
798 POKE 23560,0: CLS : PRINT INK 5;AT 6,14;"MENU";AT 7,14;"gggg"
800 PRINT INK 5;AT 8,5;"1) All Instructions"'" 2) Finger/key Exercise"'" 3) Firecracker Game"'" 4) BLAM Game"'': PRINT INK 7;"(Press 1,2,3,or 4, then press"'"ENTER)"
802 PRINT INK 7;AT 17,0;" (If you are a beginning typist, I suggest you select # 1.)"
803 INPUT I$
804 IF I$="=@_" THEN LET BFLG=0: GO TO 444
805 IF BFLG=1 AND (I$="1" OR I$="2" OR I$="3" OR I$="4") THEN CLS : LET BFLG=0: GO TO 439
806 LET I=VAL I$: IF I<1 OR I>4 THEN GO TO 803:
807 LET I=0: IF I$="1" THEN LET I$="": LET MFLG=1: GO TO 855
808 IF I$="2" THEN LET I$="": CLS : LET MFLG=2: GO SUB 720: GO SUB 855: GO SUB 1135: GO SUB 1245: LET FLG=0: GO SUB 1608
812 IF I$="3" THEN LET I$="": LET MFLG=3: GO SUB 720: GO SUB 855: GO SUB 1135: GO SUB 1245: GO SUB 1660: GO SUB 1960: GO SUB 1973: GO SUB 2045: LET FLG=7: GO TO 2015
814 IF I$="4" THEN LET I$="": CLS : PRINT AT 9,11;"PRESS ""L"""
816 IF INKEY$<>"L" THEN GO TO 816
820 GO TO 2450
855 CLS : LET FLG=0: LET L=1: LET J=1: LET K=19
860 FOR X=J TO K STEP 2: PRINT INK 7;AT L,X;CHR$ 148: NEXT X
865 LET L=L+1: LET J=J-1: LET K=K-1
870 PRINT INK 7;AT L,J;"h": LET J=J+2: FOR X=J TO K STEP 2: PRINT INK 7;AT L,X;"f": NEXT X: LET K=K+2: PRINT INK 7;AT L,K;"i"
875 IF FLG=3 THEN GO TO 0915
880 IF FLG=2 THEN GO TO 0910
885 IF FLG=1 THEN GO TO 0900
890 LET J=J-1: LET K=K-1: LET R$="1234567890": LET N=1
895 IF FLG=0 THEN GO TO 0920
900 LET R$="QWERTYUIOP": LET N=1: LET J=J-1: LET K=K-1
905 IF FLG=1 THEN GO TO 0920
910 LET R$="ASDFGHJKL": LET J=J-1: LET K=K-1: GO TO 0920
915 LET R$="ZXCVBNM ": LET J=J-1
920 FOR X=J TO K STEP 2: PRINT PAPER 6; INK 0;AT L,X;R$(N): LET N=N+1: NEXT X: LET N=1
925 LET L=L+1: FOR X=J TO K STEP 2: PRINT INK 5;AT L,X;"g": NEXT X
930 IF FLG=1 THEN GO TO 0950
935 IF FLG=2 THEN GO TO 0945
940 IF FLG=3 THEN GO TO 0952
945 LET FLG=FLG+1: LET J=J+1: LET K=K+1: GO TO 0860
950 LET FLG=FLG+1: LET J=J+1: LET K=K-1: GO TO 0860
952 IF MFLG=2 OR M2FLG=2 THEN RETURN
955 IF MFLG=3 OR M2FLG=3 THEN RETURN
960 IF SFLG<>1 THEN PRINT AT 10,6;"THE KEYBOARD"
965 IF SFLG=1 THEN RETURN
975 FOR X=6 TO 17: PRINT AT 11,X;"g": NEXT X
980 PAUSE 200
990 PRINT INK 7'" ""BLAM"" is a FUN game; but while"'" you are enJoying it, something"'" else will be happening..."
995 PRINT INK 7';"(To continue, press any letter.)": PAUSE 0: BEEP .1,40: LET Q=17
997 IF PEEK E=42 THEN GO TO 8
1000 GO SUB 0015
1005 PRINT INK 7;AT 12,0;" While you are enjoying the"'" play, your eyes, brain, and"'" fingers will be learning to"'" quickly find any letter you"'" want."
1010 PRINT INK 7;AT 18,0;"(To continue, press any letter)": PAUSE 0: BEEP .1,40
1012 IF PEEK E=42 THEN GO TO 8
1013 LET Q=18: GO SUB 0015
1015 PRINT INK 7;AT 12,0;" But there's a hitch!": PAUSE 160
1020 PRINT INK 7'" If you want to be a good"'" typist, you will follow a very"'" special rule in this game."
1025 PRINT INK 7'" (To continue, press any letter)": PAUSE 0: BEEP .1,40
1026 IF PEEK E=42 THEN GO TO 8
1028 LET Q=19: GO SUB 0015
1030 PRINT INK 7;AT 12,1;"THE RULE: After you type any"'" letter, RETURN YOUR FINGERS"'" TO THE ""HOME ROW"" KEYS!"
1035 PRINT INK 7'" And what are the ""HOME ROW"""'" keys? I'll show you. Press any"'" letter and look above at the"'" Keyboard..."
1040 PAUSE 0: BEEP .1,40
1042 IF PEEK E=42 THEN GO TO 8
1045 PRINT AT 6,24;"HOME ROW";AT 6,21;"jn";AT 7,24;"gggg ggg"
1060 LET R$="ASDFGHJKL": LET N=1
1065 FOR X=3 TO 19 STEP 2: PRINT PAPER 6; INK 0; FLASH 1;AT 6,X;R$(N): LET N=N+1: NEXT X: PAUSE 200
1070 LET Q=19: GO SUB 0015
1075 PRINT INK 7;AT 12,0;" This row is called the ""Home"" row because the fingers are returned ""home"" to the Home Row after any letter is typed."
1080 PRINT INK 7;AT 17,0;" If this is done, the fingers"'" are in the best position to"'" easily reach any key."
1085 PRINT INK 7;AT 21,0;" (To continue, press any letter)": PAUSE 0: BEEP .1,40
1086 IF PEEK E=42 THEN GO TO 8
1088 LET Q=21: GO SUB 0015
1095 LET N=1: FOR X=3 TO 19 STEP 2: PRINT PAPER 6; INK 0; FLASH 0;AT 6,X;R$(N): LET N=N+1: NEXT X
1100 PRINT INK 7;AT 12,1;"Look carefully at the ""F"" and"'" ""J"" keys on your computer."'" Unlike the other keys, the ""F"""'" and ""J"" keys have little bumps"'" on them."
1110 PRINT PAPER 6; INK 0; FLASH 1;AT 6,9;"F";AT 6,15;"J"
1115 PAUSE 300: PRINT INK 7;AT 18,0;"(To continue, press any letter)": PAUSE 0: BEEP .1,40
1116 IF PEEK E=42 THEN GO TO 8
1118 LET Q=18: GO SUB 0015
1120 PRINT INK 7;AT 12,1;"Those little bumps tell a"'" person who wants to be a good"'" typist to put the ""pointer"""'" fingers of each hand on those"'" keys. Press any letter and I'll show you."
1125 PAUSE 0: BEEP .1,40
1126 IF PEEK E=42 THEN GO TO 8
1128 LET Q=17: GO SUB 0015: FLASH 0
1135 FOR X=6 TO 17: PRINT AT 10,X;" ";AT 11,X;" ": NEXT X
1140 LET j=3: FOR y=1 TO 19: IF y=1 OR y=3 OR y=5 OR y=15 OR y=17 OR y=19 THEN LET l=10
1145 IF y=2 OR y=4 OR y=6 OR y=14 OR y=16 OR y=18 THEN LET l=11
1150 IF y=7 OR y=13 THEN LET l=6
1155 IF y=8 THEN GO TO 1175
1160 IF y=9 OR y=11 THEN LET l=12
1165 IF y=10 THEN NEXT y
1170 IF Y<8 OR Y>12 THEN GO TO 1185
1175 PRINT INK 2;AT 11,10;" :: :: ";AT 12,10;" :: :: ";AT 13,10;"::: :::";AT 14,10;":: ::";AT 14,10;":: ::"
1180 LET Y=12: LET J=15: GO TO 1190
1185 FOR x=l TO 15: PRINT INK 2;AT x,j;"::": NEXT x: LET j=j+1: IF j=12 THEN LET j=j+1
1190 NEXT y
1195 PRINT INK 2;AT 13,3;" :";AT 13,21;": ";AT 14,3;" ";AT 14,21;" "
1200 PRINT INK 2;AT 15,3;" :";AT 15,20;": "
1205 PRINT INK 7;AT 13,5;"LEFT";AT 13,16;"RIGHT": PRINT PAPER 2; INK 7; BRIGHT 1;AT 6,9;"F";AT 6,15;"J"
1207 IF MFLG=2 OR M2FLG=2 THEN RETURN
1210 IF SFLG=1 THEN RETURN
1215 IF MFLG=3 OR M2FLG=3 THEN RETURN
1220 PRINT INK 7;AT 18,0;"(To continue, press any letter)": PAUSE 0: BEEP .1,40
1222 IF PEEK E=42 THEN GO TO 8
1225 LET Q=18: GO SUB 0020
1230 PRINT INK 7;AT 17,0;" Now place all your fingers on"'" the Home Row keys, with the"'" ""pointer"" fingers on ""F"" and"'" ""J"". Press any letter and I'll"'" show you how to do it."
1235 PAUSE 0: BEEP .1,40
1236 IF PEEK E=42 THEN GO TO 8
1238 LET Q=21: GO SUB 0020
1245 LET R$="DSA": LET J=7: FOR X=1 TO 3
1250 FOR L=9 TO 6 STEP -1: PRINT INK 2;AT L,J;"::": PAUSE 5: NEXT L: PRINT PAPER 2; INK 7; BRIGHT 1;AT L+1,J;R$(X): PAUSE 70: LET J=J-2: NEXT X
1255 LET R$="KL ": LET J=17: FOR X=1 TO 3: FOR L=9 TO 6 STEP -1: PRINT INK 2;AT L,J;"::": PAUSE 5: NEXT L: IF X<>3 THEN PRINT PAPER 2; INK 7; BRIGHT 1;AT L+1,J;R$(X): LET J=J+2: PAUSE 70: NEXT X
1257 IF MFLG=2 OR M2FLG=2 THEN RETURN
1260 IF SFLG=1 THEN RETURN
1265 IF MFLG=3 OR M2FLG=3 THEN LET FLG=0: RETURN
1272 PRINT AT 3,27;"ON";AT 4,25;" ENTER ";AT 4,24;"e": PAUSE 10: PRINT AT 4,23;"e": PAUSE 10: PRINT AT 4,22;"e": PAUSE 10: PRINT AT 5,21;"h": PRINT PAPER 2; INK 7;AT 6,21;"*": PAUSE 200
1273 PRINT AT 3,27;" ";AT 4,22;" ";AT 5,21;" ": PRINT PAPER 2;AT 6,21;" "
1275 PRINT INK 7;AT 18,0;"(To continue, press any letter)": PAUSE 0: BEEP .1,40
1278 IF PEEK 23560=42 THEN GO TO 8
1280 PRINT INK 7;AT 17,0;" As you place your fingers on the keys, keep the fingers curved, with the fingertips resting lightly on the keys.";'" (To continue, press any letter)": PAUSE 0: BEEP .1,40
1281 IF PEEK E=42 THEN GO TO 8
1283 LET Q=21: GO SUB 0020
1285 PRINT INK 7;AT 17,0;"Press any letter and look at thekeyboard display to see which keys are typed by each finger."
1292 PAUSE 0: BEEP .1,40
1295 LET Q=21: GO SUB 0020: PRINT PAPER 2; INK 7;AT 11,9;"1"
1305 PRINT FLASH 1; PAPER 6; INK 0;AT 6,9;"F";AT 2,9;"5";AT 2,7;"4";AT 4,8;"R";AT 4,10;"T";AT 6,11;"G";AT 8,10;"V";AT 8,12;"B"
1310 IF PEEK E=42 THEN GO TO 7
1315 FOR X=1 TO 200: NEXT X
1320 PRINT FLASH 0; PAPER 6; INK 0;AT 6,9;"F";AT 2,9;"5";AT 2,7;"4";AT 4,8;"R";AT 4,10;"T";AT 6,11;"G";AT 8,10;"V";AT 8,12;"B"
1330 PRINT PAPER 2; INK 7;AT 6,9;"F": FOR X=9 TO 14: PRINT PAPER 2; INK 7;AT 11,X;" n": NEXT X: PRINT PAPER 2; INK 7;AT 11,15;"1": PRINT PAPER 1; INK 2;AT 11,9;"::";AT 11,10;" :: :: "
1340 PRINT FLASH 1; PAPER 6; INK 0;AT 2,11;"6";AT 2,13;"7";AT 4,12;"Y";AT 4,14;"U";AT 6,13;"H";AT 6,15;"J";AT 8,14;"N";AT 8,16;"M"
1342 IF PEEK E=42 THEN GO TO 7
1345 FOR X=1 TO 200: NEXT X
1355 PRINT FLASH 0; PAPER 6; INK 0;AT 2,11;"6";AT 2,13;"7";AT 4,12;"Y";AT 4,14;"U";AT 6,13;"H";AT 8,14;"N";AT 8,16;"M"
1360 PRINT PAPER 2; INK 7;AT 6,15;"J": FOR X=14 TO 7 STEP -1: PRINT PAPER 2; INK 7;AT 11,X;"n ": NEXT X: PRINT PAPER 2; INK 7;AT 11,7;"2": PRINT PAPER 1; INK 2;AT 11,10;" :: :: "
1370 PRINT FLASH 1; PAPER 6; INK 0;AT 2,5;"3";AT 4,6;"E";AT 6,7;"D";AT 8,8;"C"
1372 IF PEEK E=42 THEN GO TO 7
1375 FOR X=1 TO 200: NEXT X
1385 PRINT FLASH 0; PAPER 6; INK 0;AT 2,5;"3";AT 4,6;"E";AT 6,7;"D";AT 8,8;"C"
1390 FOR X=7 TO 16: PRINT PAPER 2; INK 7;AT 11,X;" n": NEXT X: PRINT PAPER 2; INK 7;AT 11,17;"2": PRINT PAPER 2; INK 7;AT 6,7;"D": PRINT PAPER 1; INK 2;AT 11,10;" :: :: "
1400 PRINT FLASH 1; PAPER 6; INK 0;AT 2,15;"8";AT 4,16;"I";AT 6,17;"K"
1402 IF PEEK E=42 THEN GO TO 7
1405 FOR X=1 TO 200: NEXT X
1415 PRINT FLASH 0; PAPER 6; INK 0;AT 2,15;"8";AT 4,16;"I"
1420 FOR X=16 TO 5 STEP -1: PRINT PAPER 2; INK 7;AT 11,X;"n ": NEXT X: PRINT PAPER 2; INK 7;AT 11,5;"3": PRINT PAPER 2; INK 7;AT 6,17;"K": PRINT PAPER 1; INK 2;AT 11,10;" :: :: "
1430 PRINT FLASH 1; PAPER 6; INK 0;AT 2,3;"2";AT 4,4;"W";AT 6,5;"S";AT 8,6;"X"
1432 IF PEEK E=42 THEN GO TO 7
1435 FOR X=1 TO 200: NEXT X
1445 PRINT FLASH 0; PAPER 6; INK 0;AT 2,3;"2";AT 4,4;"W";AT 6,5;"S";AT 8,6;"X"
1450 FOR X=5 TO 18: PRINT PAPER 2; INK 7;AT 11,X;" n": NEXT X: PRINT PAPER 2; INK 7;AT 11,19;"3": PRINT PAPER 2; INK 7;AT 6,5;"S": PRINT PAPER 1; INK 2;AT 11,10;" :: :: "
1460 PRINT FLASH 1; PAPER 6; INK 0;AT 2,17;"9";AT 4,18;"O";AT 6,19;"L"
1462 IF PEEK E=42 THEN GO TO 7
1465 FOR X=1 TO 200: NEXT X
1475 PRINT FLASH 0; PAPER 6; INK 0;AT 2,17;"9";AT 4,18;"O";AT 6,19;"L"
1480 FOR X=18 TO 3 STEP -1: PRINT PAPER 2; INK 7;AT 11,X;"n ": NEXT X: PRINT PAPER 2; INK 7;AT 11,3;"4": PRINT PAPER 2; INK 7;AT 6,19;"L": PRINT PAPER 1; INK 2;AT 11,10;" :: :: "
1490 PRINT FLASH 1; PAPER 6; INK 0;AT 2,1;"1";AT 4,2;"Q";AT 6,3;"A";AT 8,4;"Z"
1492 IF PEEK E=42 THEN GO TO 7
1495 FOR X=1 TO 200: NEXT X
1505 PRINT FLASH 0; PAPER 6; INK 0;AT 2,1;"1";AT 4,2;"Q";AT 6,3;"A";AT 8,4;"Z"
1510 FOR X=3 TO 20: PRINT PAPER 2; INK 7;AT 11,X;" n": NEXT X: PRINT PAPER 2; INK 7;AT 11,21;"4": PRINT PAPER 2; INK 7;AT 6,3;"A": PRINT PAPER 1; INK 2;AT 11,10;" :: :: "
1520 PRINT FLASH 1; PAPER 6; INK 0;AT 4,20;"P";AT 2,19;"0"
1522 IF PEEK E=42 THEN GO TO 7
1525 FOR X=1 TO 200: NEXT X
1535 PRINT FLASH 0; PAPER 6; INK 0;AT 4,20;"P";AT 2,19;"0"
1540 PRINT INK 2;AT 11,21;"::";AT 6,21;"::"
1545 LET Q=21: GO SUB 20
1550 PRINT AT 18,0;"Would you like to see that again(Y/N)?"
1551 IF PEEK E=42 THEN GO TO 7
1552 LET I$=INKEY$: IF I$<>"Y" AND I$<>"N" THEN GO TO 1551
1553 BEEP .1,40: IF I$="Y" THEN LET I$="": LET Q=19: GO SUB 20: PRINT PAPER 2; INK 7;AT 11,9;"1": GO TO 1305
1554 LET Q=19: GO SUB 20
1555 PRINT INK 7;AT 17,1;"Learning to press the right key"'" with the proper finger is an"'" IMPORTANT part of learning to"'" type fast!"'"(To continue, press any letter)"
1560 PAUSE 0: BEEP .1,40
1562 IF PEEK E=42 THEN GO TO 8
1564 LET Q=21: GO SUB 0020
1570 PRINT INK 7;AT 17,1;"Let's play a game with this!"''" After the game starts, a letter"'" will FLASH. Find it on your"'" computer keys.(Press any key)."
1575 PAUSE 0: BEEP .1,40
1576 IF PEEK E=42 THEN GO TO 8
1579 LET Q=21: GO SUB 0020
1580 PRINT INK 7;AT 17,0;"When you find the flashing let-"'"ter, press it with the proper"'"finger."''"(To continue, press any letter)"
1582 PAUSE 0: BEEP .1,40
1583 IF PEEK E=42 THEN GO TO 8
1584 LET Q=21: GO SUB 20
1586 PRINT INK 7;AT 17,0;"To help you know which finger to"'"use, a white line will be drawn"'"on the proper finger."
1590 PAUSE 200: FOR X=1 TO 10: PRINT PAPER 2; INK 7;AT 10,9;"o";AT 9,9;"o";AT 8,9;"o": PAUSE 20
1592 PRINT PAPER 2;AT 10,9;" ";AT 9,9;" ";AT 8,9;" ": PAUSE 20: NEXT X
1595 PRINT INK 7;AT 21,0;"(To continue, press any letter)"
1596 PAUSE 0: BEEP .1,40
1597 IF PEEK E=42 THEN GO TO 8
1598 LET FLG=0: LET Q=21: GO SUB 0020
1604 PRINT INK 7;AT 17,1;"After the last letter is shown, the total time in seconds that it took for completion will be shown."
1605 PAUSE 300: PRINT INK 7;AT 21,0;"(To continue, press any letter)": PAUSE 0: BEEP .1,40
1606 IF PEEK E=42 THEN GO TO 8
1607 LET Q=21: GO SUB 0020
1608 PRINT INK 7;AT 17,0;"If you'll replay this exercise until your time is 50 seconds orless, you'll have more fun and will be more skillful when you play ""BLAM"".(Press any letter)"
1609 PAUSE 0: BEEP .1,40
1610 IF PEEK E=42 THEN GO TO 8
1611 LET Q=21: GO SUB 0020
1612 PRINT INK 7;AT 17,1;"1) See the FLASHING letter."'" 2) See which finger to use."'" 3) Press key with that finger."'" 4) RETURN FINGERS TO HOME ROW."'"(To start game, press any key)"
1613 PAUSE 0: BEEP .1,40
1614 IF PEEK E=42 THEN GO TO 8
1615 GO SUB 220
1617 IF MFLG=2 THEN GO TO 2385
1618 PRINT INK 7;AT 17,1;"To make practicing more fun,"'" let's play the FIRECRACKER"'" game! Press the ""J"" and I'll"'" tell you how to play!"
1620 LET Z=15: LET R$="o": GO TO 1630
1625 FOR X=10 TO 8 STEP -1: PRINT PAPER 2; INK 7;AT X,Z;R$: NEXT X: RETURN
1630 GO SUB 1625
1632 IF PEEK E=42 THEN GO TO 7
1635 IF INKEY$<>"J" THEN GO TO 1632
1640 BEEP .1,40: LET Q=20: GO SUB 0020
1645 LET R$=" ": GO SUB 1625
1650 PRINT INK 7;AT 17,1;"We'll stand a firecracker"'" here, like this"
1655 FOR X=16 TO 24: PRINT AT 18,X;".": PAUSE 10: NEXT X
1660 FOR X=15 TO 19: PRINT INK 2;AT X,26;" :::: ": NEXT X: PRINT INK 2;AT 20,26;".::::."
1665 IF MFLG=3 THEN GO TO 1680
1667 IF M2FLG=3 THEN GO TO 1680
1670 PAUSE 100: PRINT AT 6,22;" ";AT 7,24;" "
1680 RESTORE 212: PLOT 220,56: FOR x=1 TO 8: READ G,M: DRAW G,M: NEXT X
1685 IF FLG=8 OR FLG=16 THEN LET FLG=7: RETURN
1690 IF FLG=16 THEN RETURN
1695 IF MFLG=3 THEN RETURN
1697 IF M2FLG=3 THEN RETURN
1700 PAUSE 200: PRINT INK 7;AT 20,0;"(To continue,"'"press any letter)": PAUSE 0: BEEP .1,40
1702 IF PEEK E=42 THEN GO TO 8
1704 GO SUB 0030
1705 GO TO 1830
1830 PRINT INK 7;AT 17,1;"When you press ""F"","'" we will light the fuse."'" See what happens!"
1835 LET R$="o": LET Z=9: GO SUB 1625: PRINT INK 7;AT 21,0;"(Press ""F"")"
1838 IF PEEK E=42 THEN GO TO 7
1840 IF INKEY$<>"F" THEN GO TO 1838
1845 BEEP .1,40: GO SUB 0030
1850 LET R$=" ": GO SUB 1625
1860 GO SUB 2045
1870 GO SUB 112
1880 LET FLG=16: LET X=16: LET F=27: GO SUB 45
1885 PAUSE 100: GO SUB 1660: LET FLG=0
1890 PRINT INK 7;AT 17,1;"When a flashing letter"'" appears, the firecracker"'" fuse will be lit!"
1895 LET R$="o": LET Z=9: GO SUB 1625: PRINT INK 7;AT 21,0;"(To continue, press ""F"")"
1898 IF PEEK E=42 THEN GO TO 7
1900 IF INKEY$<>"F" THEN GO TO 1898
1905 BEEP .1,40: GO SUB 0030: LET R$=" ": GO SUB 1625
1910 PRINT INK 7;AT 17,1;"Try to find and press"'" the letter before the"'" firecracker explodes!"
1915 LET R$="o": LET Z=15: GO SUB 1625: PRINT INK 7;AT 21,0;"(To continue, press ""J"")"
1918 IF PEEK E=42 THEN GO TO 7
1920 IF INKEY$<>"J" THEN GO TO 1918
1925 BEEP .1,40: GO SUB 0030: LET R$=" ": LET Z=15: GO SUB 1625
1930 PRINT INK 7;AT 17,1;"The faster you react in"'" pressing the proper key,"'" the higher you score!"
1935 LET R$="o": LET Z=9: GO SUB 1625: PRINT INK 7;AT 21,0;"(To continue, press ""F"")"
1938 IF PEEK E=42 THEN GO TO 7
1940 IF INKEY$<>"F" THEN GO TO 1938
1945 BEEP .1,40: GO SUB 0030: LET R$=" ": GO SUB 1625
1950 PRINT INK 7;AT 17,1;"If the firecracker"'" explodes, you will lose"'" points."
1952 LET R$="o": LET Z=15: GO SUB 1625: PRINT INK 7;AT 21,0;"(To continue, press ""J"")"
1954 IF PEEK E=42 THEN GO TO 7
1955 IF INKEY$<>"J" THEN GO TO 1954
1956 BEEP .1,40: GO SUB 0030: LET R$=" ": GO SUB 1625
1957 PRINT INK 7;AT 17,0;"Each flashing letter will"'"also be printed in this"'"window."
1958 PRINT INK 4;AT 10,11;"n";AT 10,13;"n";AT 11,12;"o": IF MFLG=3 OR M2FLG=3 THEN RETURN
1959 PRINT INK 7; FLASH 1;AT 10,12;"::": PAUSE 300
1960 PRINT PAPER 7; FLASH 0;AT 10,12;" ": IF MFLG=3 OR M2FLG=3 THEN RETURN
1961 LET R$="o": LET Z=17: GO SUB 1625
1962 PRINT INK 7;AT 21,0;"(To continue,press ""K"")"
1963 IF PEEK E=42 THEN GO TO 7
1964 IF INKEY$<>"K" THEN GO TO 1964
1965 BEEP .1,40: LET R$=" ": GO SUB 1625: GO SUB 0030
1966 PRINT INK 7;AT 17,0;"As you gain skill in"'"finding letters, try to"'"watch only the window."''"(To continue, press ""D"")"
1967 IF PEEK E=42 THEN GO TO 7
1968 LET R$="o": LET Z=7: GO SUB 1625
1969 IF INKEY$<>"D" THEN GO TO 1968
1970 BEEP .1,40: LET R$=" ": GO SUB 1625: GO SUB 0030
1972 PRINT INK 7;AT 17,1;"Your score will be shown"'" in the SCORE BOX": PAUSE 100
1973 FOR X=2 TO 4: PRINT AT X,25;"::::::::::": NEXT X: PRINT AT 6,25;"SCORE"
1974 IF MFLG=3 OR M2FLG=3 THEN LET Q=18: GO SUB 0030: RETURN
1975 LET R$="o": LET Z=15: GO SUB 1625: PRINT INK 7;AT 21,0;"(To continue, press ""J"")"
1978 IF PEEK E=42 THEN GO TO 7
1980 IF INKEY$<>"J" THEN GO TO 1978
1985 BEEP .1,40: GO SUB 0030: LET R$=" ": GO SUB 1625
1995 PRINT INK 7;AT 17,1;"Whatever happens, you"'" must press the proper"'" key before the next"'" letter will appear."
2000 LET R$="o": LET Z=9: GO SUB 1625: PRINT INK 7;AT 21,0;"(To continue, press ""F"")"
2003 IF PEEK E=42 THEN GO TO 7
2005 IF INKEY$<>"F" THEN GO TO 2003
2010 BEEP .1,40: GO SUB 0030: LET R$=" ": GO SUB 1625: LET L2=0: LET B2=0
2015 PRINT INK 7;AT 17,10;"READY?";AT 20,3;"(To start, press ""D"")"
2020 LET R$="o": LET Z=7: GO SUB 1625
2023 IF PEEK E=42 THEN GO TO 7
2025 IF INKEY$<>"D" THEN GO TO 2023
2030 BEEP .1,40: GO SUB 0030: LET R$=" ": GO SUB 1625
2035 LET FLG=7: LET SC=0: GO TO 220
2045 RESTORE 2050: FOR J=USR CHR$ 148 TO USR CHR$ 148+7: READ A: POKE J,A: NEXT J
2050 DATA 0,0,0,0,17,9,4,2
2055 FOR J=USR CHR$ 149 TO USR CHR$ 149+7: READ A: POKE J,A: NEXT J
2060 DATA 0,8,8,8,41,42,171,95
2065 FOR J=USR CHR$ 150 TO USR CHR$ 150+7: READ A: POKE J,A: NEXT J
2070 DATA 0,0,0,128,4,136,80,176
2075 FOR J=USR CHR$ 151 TO USR CHR$ 151+7: READ A: POKE J,A: NEXT J
2080 DATA 33,26,7,15,3,127,0,15
2085 FOR J=USR CHR$ 152 TO USR CHR$ 152+7: READ A: POKE J,A: NEXT J
2090 DATA 94,191,127,255,127,255,249,8
2095 FOR J=USR CHR$ 153 TO USR CHR$ 153+7: READ A: POKE J,A: NEXT J
2100 DATA 192,168,112,220,224,252,192,56
2105 RETURN
2120 IF SC<=50 AND L2=0 AND B2=0 THEN LET L2=SC: LET B2=SC: GO TO 2220
2125 IF SC>=50 AND SC<100 AND L2=0 AND B2=0 THEN LET L2=SC: LET B2=SC: GO TO 2220
2130 IF SC>=100 AND SC<250 AND L2=0 AND B2=0 THEN LET L2=SC: LET B2=SC: GO TO 2240
2135 IF SC>=250 AND L2=0 AND B2=0 THEN LET L2=SC: LET B2=SC: GO TO 2260
2140 IF SC<=50 AND SC<=L2 AND SC<=B2 THEN LET L2=SC: GO TO 2280
2145 IF SC<=50 AND SC>L2 AND SC<B2 THEN LET L2=SC: GO TO 2280
2155 IF SC>=50 AND SC<100 AND SC<=L2 THEN LET L2=SC: GO TO 2320
2160 IF SC>=50 AND SC<100 AND SC>=L2 AND SC<B2 THEN LET L2=SC: GO TO 2220
2162 IF SC>=50 AND SC<100 AND SC>B2 THEN LET L2=SC: LET B2=SC: GO TO 2300
2165 IF SC>=100 AND SC<250 AND SC<=L2 THEN LET L2=SC: GO TO 2280
2170 IF SC>=100 AND SC<250 AND SC>=L2 AND SC<B2 THEN LET L2=SC: GO TO 2280
2175 IF SC>=100 AND SC<250 AND SC>B2 THEN LET L2=SC: LET B2=SC: GO TO 2300
2180 IF SC>=250 AND SC<=L2 THEN LET L2=SC: GO TO 2340
2190 IF SC>=250 AND SC>B2 THEN LET L2=SC: LET B2=SC: GO TO 2360
2220 PRINT INK 7;AT 17,1;"Not bad. You are finding"'" it hard, but you're do-"'" ing it! Thus, you learn!"
2225 LET R$="o": LET Z=19: GO SUB 1625: PRINT INK 7;AT 21,0;"(To continue, press ""L"")"
2228 IF PEEK E=42 THEN GO TO 7
2230 IF INKEY$<>"L" THEN GO TO 2228
2235 BEEP .1,40: GO SUB 30: LET R$=" ": GO SUB 1625: GO TO 2385
2240 PRINT INK 7;AT 17,1;"Pretty good! Here's some"'" good news! It gets easier"'" the more you play!"
2245 LET R$="o": LET Z=15: GO SUB 1625: PRINT INK 7;AT 21,0;"(To continue, press ""H"")"
2248 IF PEEK E=42 THEN GO TO 7
2250 IF INKEY$<>"H" THEN GO TO 2248
2255 BEEP .1,40: GO SUB 30: LET R$=" ": GO SUB 1625: GO TO 2385
2260 PRINT INK 7;AT 17,1;"Very good! If you used"'" the proper fingers to"'" get this score, you're"'" ready to play ""Blam""!"
2265 LET R$="o": LET Z=9: GO SUB 1625: PRINT INK 7;AT 21,0;"(To continue, press ""G"")"
2268 IF PEEK E=42 THEN GO TO 7
2270 IF INKEY$<>"G" THEN GO TO 2268
2275 BEEP .1,40: GO SUB 30: LET R$=" ": GO SUB 1625: GO TO 2385
2280 PRINT INK 7;AT 17,1;"Good news! It gets"'" easier the more you try!"'" And you're trying!"
2285 LET R$="o": LET Z=3: GO SUB 1625: PRINT INK 7;AT 21,0;"(To continue, press ""A"")"
2288 IF PEEK E=42 THEN GO TO 7
2290 IF INKEY$<>"A" THEN GO TO 2288
2295 BEEP .1,40: GO SUB 30: LET R$=" ": GO SUB 1625: GO TO 2385
2300 PRINT INK 7;AT 17,1;"Nice going! Your best"'" score so far! Keep it"'" up! You're learning!"
2305 LET R$="o": LET Z=9: GO SUB 1625: PRINT INK 7;AT 21,0;"(To continue, press ""F"")"
2308 IF PEEK E=42 THEN GO TO 7
2310 IF INKEY$<>"F" THEN GO TO 2308
2315 BEEP .1,40: GO SUB 30: LET R$=" ": GO SUB 1625: GO TO 2385
2320 PRINT INK 7;AT 17,1;"Why not take a few mo-"'" ments and practice any"'" fingering that is caus-"'" you trouble?"
2325 LET R$="o": LET Z=15: GO SUB 1625: PRINT INK 7;AT 21,0;"(To continue, press ""J"")"
2328 IF PEEK E=42 THEN GO TO 7
2330 IF INKEY$<>"J" THEN GO TO 2328
2335 BEEP .1,40: GO SUB 30: LET R$=" ": GO SUB 1625: GO TO 2385
2340 PRINT INK 7;AT 17,1;"Very good! You are ready"'" to play ""Blam""!"
2345 LET R$="o": LET Z=7: GO SUB 1625: PRINT INK 7;AT 21,0;"(To continue, press ""D"")"
2348 IF PEEK E=42 THEN GO TO 7
2350 IF INKEY$<>"D" THEN GO TO 2348
2355 BEEP .1,40: GO SUB 30: LET R$=" ": GO SUB 1625: GO TO 2385
2360 PRINT INK 7;AT 17,1;"Excellent! You have"'" beaten your best score."'" You'll do well when"'" you play ""Blam""!"
2365 LET R$="o": LET Z=17: GO SUB 1625: PRINT INK 7;AT 21,0;"(To continue, press ""K"")"
2368 IF PEEK E=42 THEN GO TO 7
2370 IF INKEY$<>"K" THEN GO TO 2368
2375 BEEP .1,40: GO SUB 30: LET R$=" ": GO SUB 1625
2385 POKE 23560,0: IF MFLG=2 OR M2FLG=2 THEN LET Q=21: GO SUB 20: GO TO 2390
2386 IF M2FLG=1 THEN CLS : GO TO 2390
2387 IF MFLG=1 OR MFLG=3 OR M2FLG=3 THEN GO SUB 30: PRINT AT 3,26;"::::::";AT 10,11;" ";AT 11,12;" ": LET SC=0: LET H$="1"
2390 LET M2FLG=0: LET MFLG=0
2395 PRINT INK 5;AT 17,1;"MENU: 1) Firecracker"'" 2) Finger Practice"'" 3) All Instructions"'" 4) BLAM"': PRINT INK 7;"Enter Selection(1 to 4)"
2397 IF INKEY$="" THEN GO TO 2397
2398 LET I$=INKEY$: IF I$="@" THEN GO TO 444
2400 IF I$<"1" OR I$>"4" THEN GO TO 2400
2402 BEEP .1,40: IF I$="1" AND H$="3" THEN CLS : LET M2FLG=3: GO SUB 720: GO SUB 855: GO SUB 1135: GO SUB 1245: GO SUB 1660: GO SUB 1960: GO SUB 1973: GO SUB 2045: LET H$=I$: LET I$="": GO TO 2015
2403 IF I$="2" AND H$="3" THEN CLS : LET M2FLG=2: GO SUB 720: GO SUB 855: GO SUB 1135: GO SUB 1245: LET H$=I$: LET I$="": LET FLG=0: GO TO 1608
2405 LET M2FLG=3: IF I$="1" AND H$<>"1" THEN GO SUB 0030: FOR X=2 TO 4: PRINT AT X,25;"::::::::::": NEXT X: PRINT AT 6,25;"SCORE": LET H$=I$: GO SUB 1660: GO SUB 1960: GO SUB 2045: LET FLG=7: LET I$="": GO TO 2015
2410 LET M2FLG=3: IF I$="1" AND H$="1" THEN GO SUB 0030: GO SUB 1960: LET H$=I$: LET FLG=7: LET I$="": GO TO 2015
2415 IF I$="2" AND H$="1" THEN GO SUB 0030: LET FLG=0: LET M2FLG=2: FOR X=2 TO 21: PRINT AT X,25;" ": NEXT X: LET H$=I$: LET I$="": GO TO 1608
2420 IF I$="2" AND H$<>"1" THEN GO SUB 0030: LET FLG=0: LET M2FLG=2: LET H$=I$: LET I$="": GO TO 1608
2425 IF I$="3" THEN CLS : LET M2FLG=1: LET FLG=0: GO SUB 720: LET H$=I$: LET I$="": GO TO 855
2430 IF I$="4" THEN CLS : PRINT INK 7;AT 9,8;"Press any key": PAUSE 0: PRINT INK 7;AT 9,4;"Press ""PLAY"" on recorder": LET I$=""
2435 LOAD "BLAM"
2445 STOP
2450 CLS : PRINT INK 7;AT 11,4;"PRESS ""PLAY"" ON RECORDER"
2455 PAUSE 100: CLS : LOAD "BLAM"
1 LET SFLG=1: GO TO 911
2 LET W=VAL E$(S,T): RETURN
3 LET W=VAL F$(S,T): RETURN
4 LET W=VAL G$(S,T): RETURN
5 LET W=VAL H$(S,T): RETURN
20 FOR X=17 TO Q: FOR Y=0 TO 31: PRINT AT X,Y;" ": NEXT Y: NEXT X: RETURN
30 FOR X=8 TO Q: FOR Y=0 TO 30: PRINT AT X,Y;" ": NEXT Y: NEXT X: RETURN
35 FOR W=5 TO 21: FOR R=0 TO 31: PRINT AT W,R;" ": NEXT R: NEXT W: RETURN
42 RANDOMIZE 0: LET P=3
44 FOR X=1 TO 37
46 LET C=INT (RND*7)+1: IF C=1 THEN GO TO 0046
48 SOUND 6,30;7,7;8,16;9,16;10,16;12,16;13,0: PAUSE P: IF FLG=1 THEN PLOT 131,84: READ A,B: DRAW INK C;A,B
50 IF FLG=1 THEN GO TO 0054
52 PLOT 148,83: READ A,B: DRAW INK C;A,B
54 LET P=INT (RND*3)+1: NEXT X
56 RESTORE 66: PAUSE 20: FOR X=1 TO 37: IF FLG=1 THEN PLOT 131,84: READ A,B: DRAW INVERSE 1;A,B: NEXT X
58 IF FLG=1 THEN GO TO 0062
60 PLOT 148,83: READ A,B: DRAW INVERSE 1;A,B: NEXT X
62 IF FLG=1 THEN LET X=11: LET F=16: LET FLG=20: GO TO 0100
64 LET X=11: LET F=18: LET FLG=20: GO TO 0100
66 DATA -13,19,26,4,-22,-15,13,19,-34,15,9,-20,20,-3,-16,-25
68 DATA -7,31,0,-42,30,16,-17,0,29,25,-29,25,26,-17,7,31
70 DATA -29,-5,43,-13,0,27,17,-24,-21,-8,11,25,33,-28,-7,16
72 DATA 16,0,-13,-16,35,-15,-28,18,-31,-15,14,16,-23,4,24,16,8,-39
74 DATA -35,-29,19,8,-14,-31,-8,-39
80 GO TO 220
100 PRINT INK 7;AT X,F-1;"d";AT X,F+1;"b";AT X-1,F;"a";AT X+1,F;"c"
110 PRINT INK 7;AT X,F-2;"d";"::::::";"b"
120 PRINT INK 7;AT X+1,F-1;"::::::";AT X+2,F;"c"
130 PRINT INK 7;AT X-1,F-1;"::::::";AT X-2,F;"a"
135 PAUSE 5
140 PRINT INK 2;AT X,F;"::";AT X,F-1;"::";AT X-1,F;"::";AT X,F+1;"::";AT X+1,F;"::"
150 PRINT INK 2;AT X+1,F-1;"::";AT X-1,F-1;"::";AT X-1,F+1;"::";AT X+1,F+1;"::"
160 PRINT INK 2;AT X,F-2;"d";AT X-2,F;"a";AT X,F+2;"b";AT X+2,F;"c"
161 PAUSE 5: IF FLG=17 THEN PAPER 2: BORDER 2: CLS : GO TO 165
163 PRINT AT X-2,F;" ";AT X-1,F-1;" ";AT X,F-2;" ";AT X+1,F-1;" ";AT X+2,F;" "
165 SOUND 6,6;7,7;8,16;9,16;12,56;13,8: PAUSE 90: SOUND 8,0;9,0;10,0
166 IF FLG=17 THEN RETURN
167 IF FLG=16 THEN RETURN
168 IF FLG=20 THEN RETURN
170 IF X>=15 THEN LET B=CODE B$(H+3): LET N=F-2: PAPER 0: GO SUB B*10: PAPER 1
171 IF X>=16 THEN LET Z$=CHR$ B: LET LN=LEN W$: IF LN=0 THEN LET W$=W$+Z$: GO TO 176
172 IF X<16 THEN GO TO 176
173 FOR K=1 TO LN: IF Z$<>W$(K) THEN NEXT K: GO TO 175
174 GO TO 176
175 IF X>=16 THEN LET W$=W$+Z$
176 IF X=7 OR X=8 THEN PRINT PAPER 0;AT 6,F-1;"......"
177 IF FLG=9 OR FLG=10 OR FLG=11 OR FLG=12 OR FLG=13 OR FLG=14 THEN RETURN
178 IF X=16 THEN LET SC=-5
180 PRINT PAPER 5; INK 0;;AT 3,5;SC;" ";AT 3,14;SH;" ": LET TS=TS+SC: PRINT PAPER 5; INK 0;AT 3,24;TS;" "
190 LET SC=10: LET SH=SH-1
192 IF FLG=6 AND SH=-1 THEN LET FLG=0: GO TO 200
194 IF PFLG=4 AND SH=-1 THEN GO TO 200
195 IF SH=-1 THEN GO SUB 2025: LET LN=LEN W$: IF LN=2 OR LN=3 THEN LET T$=B$: GO SUB 2620
200 IF SH=-1 THEN PRINT INK 5;AT 10,8;"THE GAME IS OVER": PAUSE 300: PRINT INK 5;AT 14,2;"TO REPLAY, PRESS ANY LETTER": PAUSE 0: BEEP .1,40: LET FLG=5: RESTORE 1345: GO TO 1290
210 RETURN
220 RANDOMIZE : LET I$="": LET H=0: LET Q$="": LET L$=""
225 LET G=INT (RND*6)+1: LET Q$=STR$ G
230 PRINT PAPER 7;AT 3,20;" ": PAUSE 10: LET U1=24: PRINT PAPER 7; INK 0;AT 3,20;B$(G+3): LET I$=""
235 IF Q$="1" THEN LET S$="3": IF FLG=1 THEN GO TO 0360
240 IF Q$="2" THEN LET S$="8": IF FLG=1 THEN GO TO 0360
245 IF Q$="3" THEN LET S$="13": IF FLG=1 THEN GO TO 0360
250 IF Q$="4" THEN LET S$="18": IF FLG=1 THEN GO TO 0360
255 IF Q$="5" THEN LET S$="23": IF FLG=1 THEN GO TO 0360
260 IF Q$="6" THEN LET S$="28": IF FLG=1 THEN GO TO 0360
265 LET H=G: LET F=VAL S$
270 PRINT AT 7,F;"m": LET SC=SC-1
275 FOR X=8 TO 16: PRINT AT X-1,F;" ";AT X,F;"m"
280 IF FLG=10 THEN BEEP .1,U1: IF X=8 OR X=12 THEN LET U1=U1-1: GO TO 0445
285 IF FLG=10 AND X=15 THEN GO TO 0445
290 IF FLG=10 THEN LET U1=U1-2: GO TO 307
295 IF FLG=14 THEN GO TO 0305
300 LET I$=INKEY$
305 IF FLG=14 AND X=11 THEN LET I$="D": GO TO 0395
307 IF FLG=10 AND X<>16 THEN GO TO 445
308 IF FLG=10 THEN GO TO 100
309 IF PEEK M=42 THEN BEEP S1,S2: GO TO 1310
310 IF I$="" AND X<>16 THEN GO TO 0435
315 IF X>=16 THEN GO SUB 0100
325 IF FLG=10 THEN RETURN
335 IF X>=16 THEN GO TO 0225
340 IF I$=B$(G+3) THEN GO TO 0395
345 FOR Y=4 TO 9: IF I$=B$(Y) THEN LET G=Y-3: LET FLG=1: GO TO 0235
350 NEXT Y
355 BEEP .5,-35: BEEP .5,-40: GO TO 0435
360 SOUND 6,15;7,7;8,16;9,16;10,16;12,16;13,0
370 LET FLG=0
375 PRINT AT 16,E;" :"
380 FOR Y=15 TO 7 STEP -1: PRINT AT Y+1,E;" ";AT Y,E;" :": NEXT Y: PRINT AT Y+1,E;" "
385 LET G=H: GO TO 0435
395 SOUND 6,15;7,7;8,16;9,16;12,16;13,0
400 PRINT AT 16,F;" :": IF X=15 THEN PRINT AT 16,F;" ": GO SUB 0100: GO TO 0225
405 FOR Y=15 TO 7 STEP -1: PRINT AT Y+1,F;" ";AT Y,F;" :"
415 IF Y=X THEN GO SUB 0100: LET I$=""
420 IF Y=X AND FLG=14 THEN RETURN
425 IF I$="" THEN GO TO 0225
430 NEXT Y
435 LET I$="": LET SC=SC-1
445 FOR z=1 TO v: NEXT z
450 NEXT X
455 GO TO 0225
480 PRINT AT AB,N;":'''''':"
482 PRINT AT BC,N;": ef :"
484 PRINT AT CD,N;": hi :"
486 PRINT AT DE,N;": jk :"
488 PRINT AT EF,N;":......:"
489 RETURN
490 PRINT AT AB,N;":'''''':"
492 PRINT AT BC,N;": .: :"
494 PRINT AT CD,N;": : :"
496 PRINT AT DE,N;": .:. :"
498 PRINT AT EF,N;":......:"
499 RETURN
500 PRINT AT AB,N;":'''''':"
502 PRINT AT BC,N;": .''. :"
504 PRINT AT CD,N;": .' :"
506 PRINT AT DE,N;": :... :"
508 PRINT AT EF,N;":......:"
509 RETURN
510 PRINT AT AB,N;":'''''':"
512 PRINT AT BC,N;": .''. :"
514 PRINT AT CD,N;": '. :"
516 PRINT AT DE,N;": '..' :"
518 PRINT AT EF,N;":......:"
519 RETURN
520 PRINT AT AB,N;":'''''':"
522 PRINT AT BC,N;": : : :"
524 PRINT AT CD,N;": :.:. :"
526 PRINT AT DE,N;": : :"
528 PRINT AT EF,N;":......:"
529 RETURN
530 PRINT AT AB,N;":'''''':"
532 PRINT AT BC,N;": :''' :"
534 PRINT AT CD,N;": '''. :"
536 PRINT AT DE,N;": '..' :"
538 PRINT AT EF,N;":......:"
539 RETURN
540 PRINT AT AB,N;":'''''':"
542 PRINT AT BC,N;": .''. :"
544 PRINT AT CD,N;": :.. :"
546 PRINT AT DE,N;": '..' :"
548 PRINT AT EF,N;":......:"
549 RETURN
550 PRINT AT AB,N;":'''''':"
552 PRINT AT BC,N;": ''': :"
554 PRINT AT CD,N;": .' :"
556 PRINT AT DE,N;": : :"
558 PRINT AT EF,N;":......:"
559 RETURN
560 PRINT AT AB,N;":'''''':"
562 PRINT AT BC,N;": .''. :"
564 PRINT AT CD,N;": .''. :"
566 PRINT AT DE,N;": '..' :"
568 PRINT AT EF,N;":......:"
569 RETURN
570 PRINT AT AB,N;":'''''':"
572 PRINT AT BC,N;": .''. :"
574 PRINT AT CD,N;": ''': :"
576 PRINT AT DE,N;": '..' :"
578 PRINT AT EF,N;":......:"
579 RETURN
650 PRINT AT AB,N;":'''''':"
652 PRINT AT BC,N;": .''. :"
654 PRINT AT CD,N;": :..: :"
656 PRINT AT DE,N;": : : :"
658 PRINT AT EF,N;":......:"
659 RETURN
660 PRINT AT AB,N;":'''''':"
662 PRINT AT BC,N;": :''. :"
664 PRINT AT CD,N;": ..': "
666 PRINT AT DE,N;": :..' :"
668 PRINT AT EF,N;":......:"
669 RETURN
670 PRINT AT AB,N;":'''''':"
672 PRINT AT BC,N;": .''. :"
674 PRINT AT CD,N;": : :"
676 PRINT AT DE,N;": '..' :"
678 PRINT AT EF,N;":......:"
679 RETURN
680 PRINT AT AB,N;":'''''':"
682 PRINT AT BC,N;": :''. :"
684 PRINT AT CD,N;": : : :"
686 PRINT AT DE,N;": :..' :"
688 PRINT AT EF,N;":......:"
689 RETURN
690 PRINT AT AB,N;":'''''':"
692 PRINT AT BC,N;": :''' :"
694 PRINT AT CD,N;": :' :"
696 PRINT AT DE,N;": :... :"
698 PRINT AT EF,N;":......:"
699 RETURN
700 PRINT AT AB,N;":'''''':"
702 PRINT AT BC,N;": :''' :"
704 PRINT AT CD,N;": :' :"
706 PRINT AT DE,N;": : :"
708 PRINT AT EF,N;":......:"
709 RETURN
710 PRINT AT AB,N;":'''''':"
712 PRINT AT BC,N;": .''. :"
714 PRINT AT CD,N;": : .. :"
716 PRINT AT DE,N;": '..' :"
718 PRINT AT EF,N;":......:"
719 RETURN
720 PRINT AT AB,N;":'''''':"
722 PRINT AT BC,N;": : : :"
724 PRINT AT CD,N;": :..: :"
726 PRINT AT DE,N;": : : :"
728 PRINT AT EF,N;":......:"
729 RETURN
730 PRINT AT AB,N;":'''''"; PAPER 1;": "
732 PRINT AT BC,N;": ':' "; PAPER 1;": "
734 PRINT AT CD,N;": : "; PAPER 1;": "
736 PRINT AT DE,N;": .:. "; PAPER 1;": "
738 PRINT AT EF,N;":....."; PAPER 1;": "
739 RETURN
740 PRINT AT AB,N;":'''''':"
742 PRINT AT BC,N;": : :"
744 PRINT AT CD,N;": : :"
746 PRINT AT DE,N;": '..' :"
748 PRINT AT EF,N;":......:"
749 RETURN
750 PRINT AT AB,N;":'''''':"
752 PRINT AT BC,N;": : .' :"
754 PRINT AT CD,N;": :'. :"
756 PRINT AT DE,N;": : : :"
758 PRINT AT EF,N;":......:"
759 RETURN
760 PRINT AT AB,N;":'''''':"
762 PRINT AT BC,N;": : :"
764 PRINT AT CD,N;": : :"
766 PRINT AT DE,N;": :..: :"
768 PRINT AT EF,N;":......:"
769 RETURN
770 PRINT AT AB,N;":'''''''"; PAPER 1;": "
772 PRINT AT BC,N;": :. .: "; PAPER 1;": "
774 PRINT AT CD,N;": : : : "; PAPER 1;": "
776 PRINT AT DE,N;": : : "; PAPER 1;": "
778 PRINT AT EF,N;":......."; PAPER 1;": "
779 RETURN
780 PRINT AT AB,N;":'''''''"; PAPER 1;": "
782 PRINT AT BC,N;": :. : "; PAPER 1;": "
784 PRINT AT CD,N;": : : : "; PAPER 1;": "
786 PRINT AT DE,N;": : ': "; PAPER 1;": "
788 PRINT AT EF,N;":......."; PAPER 1;": "
789 RETURN
790 PRINT AT AB,N;":'''''':"
792 PRINT AT BC,N;": .''. :"
794 PRINT AT CD,N;": : : :"
796 PRINT AT DE,N;": '..' :"
798 PRINT AT EF,N;":......:"
799 RETURN
800 PRINT AT AB,N;":'''''':"
802 PRINT AT BC,N;": :''. :"
804 PRINT AT CD,N;": :..' :"
806 PRINT AT DE,N;": : :"
808 PRINT AT EF,N;":......:"
809 RETURN
810 PRINT AT AB,N;":'''''':"
812 PRINT AT BC,N;": .''. :"
814 PRINT AT CD,N;": : : :"
816 PRINT AT DE,N;": '.::.:"
818 PRINT AT EF,N;":......:"
819 RETURN
820 PRINT AT AB,N;":'''''':"
822 PRINT AT BC,N;": :''. :"
824 PRINT AT CD,N;": :..: :"
826 PRINT AT DE,N;": : '. :"
828 PRINT AT EF,N;":......:"
829 RETURN
830 PRINT AT AB,N;":'''''':"
832 PRINT AT BC,N;": .''. :"
834 PRINT AT CD,N;": '. :"
836 PRINT AT DE,N;": '..' :"
838 PRINT AT EF,N;":......:"
839 RETURN
840 PRINT AT AB,N;":'''''''"; PAPER 1;": "
842 PRINT AT BC,N;": '':'' "; PAPER 1;": "
844 PRINT AT CD,N;": : "; PAPER 1;": "
846 PRINT AT DE,N;": : "; PAPER 1;": "
848 PRINT AT EF,N;":......."; PAPER 1;": "
849 RETURN
850 PRINT AT AB,N;":'''''':"
852 PRINT AT BC,N;": : : :"
854 PRINT AT CD,N;": : : :"
856 PRINT AT DE,N;": '..' :"
858 PRINT AT EF,N;":......:"
859 RETURN
860 PRINT AT AB,N;":'''''''"; PAPER 1;": "
862 PRINT AT BC,N;": : : "; PAPER 1;": "
864 PRINT AT CD,N;": : : "; PAPER 1;": "
866 PRINT AT DE,N;": : "; PAPER 1;": "
868 PRINT AT EF,N;":......."; PAPER 1;": "
869 RETURN
870 PRINT AT AB,N;":'''''''"; PAPER 1;": "
872 PRINT AT BC,N;": : : "; PAPER 1;": "
874 PRINT AT CD,N;": : : : "; PAPER 1;": "
876 PRINT AT DE,N;": '.'.' "; PAPER 1;": "
878 PRINT AT EF,N;":......."; PAPER 1;": "
879 RETURN
880 PRINT AT AB,N;" .''''''"; PAPER 1;": "
882 PRINT AT BC,N;": '. .' "; PAPER 1;": "
884 PRINT AT CD,N;": : "; PAPER 1;": "
886 PRINT AT DE,N;": .' '. "; PAPER 1;": "
888 PRINT AT EF,N;":......."; PAPER 1;": "
889 RETURN
890 PRINT AT AB,N;":'''''''"; PAPER 1;": "
892 PRINT AT BC,N;": : : "; PAPER 1;": "
894 PRINT AT CD,N;": ':' "; PAPER 1;": "
896 PRINT AT DE,N;": : "; PAPER 1;": "
898 PRINT AT EF,N;":......."; PAPER 1;": "
899 RETURN
900 PRINT AT AB,N;":'''''':"
902 PRINT AT BC,N;": ''': :"
904 PRINT AT CD,N;": .' :"
906 PRINT AT DE,N;": :... :"
908 PRINT AT EF,N;":......:"
909 RETURN
910 LET AFLG=0: LET SFLG=0
911 ON ERR GO TO 2750
912 GO TO 916
914 ON ERR RESET
916 LET I$="": LET X=0: LET Y=0: LET H=0: LET G=0: LET E=0: LET F=0: LET U1=0: LET Z=0: LET V=0
917 LET S1=.1: LET S2=40: LET D$="": LET Q=0: LET D=0: LET C=0: LET FLG=0: LET A=0: LET B=0: LET N=0: LET SC=0: LET SH=0: LET TS=0
918 LET M=23560: IF SFLG=1 THEN GO TO 922
920 GO TO 938
922 CLS : PRINT AT 9,8;"PLEASE STAND BY"
923 RESTORE 1345: DIM A$(24,9): FOR X=1 TO 24: READ M$: LET A$(X)=M$: NEXT X
925 PRINT AT 9,8;"PLEASE STAND BY": LET IND=0: DIM P$(4,9)
928 DIM E$(27,4,3): DIM F$(27,4,3): DIM G$(27,4,3): DIM H$(27,4,3)
929 FOR X=1 TO 27: FOR Y=1 TO 4: LET E$(X,Y)="0": NEXT Y: NEXT X: IF AFLG=1 THEN RETURN
930 FOR X=1 TO 27: FOR Y=1 TO 4: LET F$(X,Y)="0": NEXT Y: NEXT X: IF AFLG=1 THEN RETURN
931 FOR X=1 TO 27: FOR Y=1 TO 4: LET G$(X,Y)="0": NEXT Y: NEXT X: IF AFLG=1 THEN RETURN
932 FOR X=1 TO 27: FOR Y=1 TO 4: LET H$(X,Y)="0": NEXT Y: NEXT X: IF AFLG=1 THEN RETURN
933 PRINT AT 9,8;" "
935 PRINT AT 10,0;"FORMER SCORE-RECORDS ARE ERASED": PAUSE 200: IF SFLG=2 THEN LET SFLG=0: GO TO 1285
936 PRINT AT 13,8;"PLEASE STAND BY": LET SFLG=0: GO TO 990
938 CLS : PRINT AT 9,9;"STOP RECORDER"''"(To continue, press any letter)": PAUSE 0: BEEP S1,S2: CLS : PRINT AT 9,8;"PLEASE STAND BY": GO TO 990
940 LET B$="36-": LET C$="1ST2ND3RD4TH5TH6TH"
943 CLS : FOR X=1 TO 18 STEP 3: PRINT INK 7;AT 10,0;"ENTER YOUR ";C$(X TO X+2);" LETTER?"
945 LET L$=INKEY$: IF PEEK M=42 THEN BEEP .1,40: GO TO 1310
947 IF L$="" THEN GO TO 945
950 BEEP S1,S2: LET B$=B$+L$: PRINT INK 7;AT 10,23;B$(4 TO ): NEXT X
952 PRINT INK 7;AT 13,0;"Any errors? (Y or N)?"
954 IF PEEK M=42 THEN BEEP S1,S2: GO TO 1310
956 LET L$=INKEY$: IF L$<>"N" AND L$<>"Y" THEN GO TO 954
958 BEEP S1,S2: IF L$="Y" THEN PRINT AT 10,23;" ": GO TO 940
959 RETURN
960 LET N=0: LET B$="37-": LET C$="0123456789QWERTYUIOPASDFGHJKLZXCVBNM": RANDOMIZE 0
965 LET L=INT (RND*36)+1: LET B$=B$+C$(L): LET Q$=C$(L): LET N=N+1
970 LET L=INT (RND*36)+1: FOR X=1 TO N: IF C$(L)=Q$(X) THEN GO TO 970
975 NEXT X: LET B$=B$+C$(L): LET Q$=Q$+C$(L): LET N=N+1: IF N=6 THEN RETURN
978 GO TO 970
990 RESTORE 1000
995 FOR J=USR CHR$ 148 TO USR CHR$ 148+7: READ O$: POKE J,VAL O$: NEXT J
1000 DATA "15","15","15","15","240","240","240","240"
1005 FOR J=USR CHR$ 149 TO USR CHR$ 149+7: READ O$: POKE J,VAL O$: NEXT J
1010 DATA "242","244","244","248","31","31","47","47"
1015 FOR J=USR CHR$ 150 TO USR CHR$ 150+7: READ O$: POKE J,VAL O$: NEXT J
1020 DATA "255","0","0","0","0","0","0","0"
1025 FOR J=USR CHR$ 151 TO USR CHR$ 151+7: READ O$: POKE J,VAL O$: NEXT J
1030 DATA "240","240","240","240","241","241","243","242"
1035 FOR J=USR CHR$ 152 TO USR CHR$ 152+7: READ O$: POKE J,VAL O$: NEXT J
1040 DATA "79","79","79","143","143","15","15","15"
1050 FOR J=USR CHR$ 162 TO USR CHR$ 162+7: READ O$: POKE J,VAL O$: NEXT J
1055 DATA "255","255","127","63","63","127","255","255"
1060 FOR J=USR CHR$ 161 TO USR CHR$ 161+7: READ O$: POKE J,VAL O$: NEXT J
1065 DATA "255","255","254","252","252","254","255","255"
1070 FOR J=USR CHR$ 163 TO USR CHR$ 163+7: READ O$: POKE J,VAL O$: NEXT J
1075 DATA "0","0","0","0","195","231","255","255"
1080 FOR J=USR CHR$ 164 TO USR CHR$ 164+7: READ O$: POKE J,VAL O$: NEXT J
1085 DATA "255","255","231","195","0","0","0","0"
1090 FOR J=USR CHR$ 159 TO USR CHR$ 159+7: READ O$: POKE J,VAL O$: NEXT J
1095 DATA "60","126","255","255","255","255","126","60"
1105 FOR J=USR CHR$ 144 TO USR CHR$ 144+7: READ O$: POKE J,VAL O$: NEXT J
1115 DATA "0","24","60","60","126","126","255","255"
1120 FOR J=USR CHR$ 145 TO USR CHR$ 145+7: READ O$: POKE J,VAL O$: NEXT J
1125 DATA "192","240","252","254","254","252","240","192"
1130 FOR J=USR CHR$ 146 TO USR CHR$ 146+7: READ O$: POKE J,VAL O$: NEXT J
1135 DATA "255","255","126","126","60","60","24","0"
1140 FOR J=USR CHR$ 147 TO USR CHR$ 147+7: READ O$: POKE J,VAL O$: NEXT J
1145 DATA "3","15","63","127","127","63","15","3"
1150 FOR J=USR CHR$ 153 TO USR CHR$ 153+7: READ O$: POKE J,VAL O$: NEXT J
1155 DATA "246","244","248","248","31","31","47","79"
1160 FOR J=USR CHR$ 154 TO USR CHR$ 154+7: READ O$: POKE J,VAL O$: NEXT J
1165 DATA "15","15","15","15","240","240","240","240"
1170 FOR J=USR CHR$ 155 TO USR CHR$ 155+7: READ O$: POKE J,VAL O$: NEXT J
1175 DATA "128","64","32","240","32","64","128","0"
1180 FOR J=USR CHR$ 156 TO USR CHR$ 156+7: READ O$: POKE J,VAL O$: NEXT J
1185 DATA "102","60","126","126","126","126","60","24"
1190 FOR J=USR CHR$ 157 TO USR CHR$ 157+7: READ O$: POKE J,VAL O$: NEXT J
1195 DATA "0","0","0","255","0","0","0","0"
1200 FOR J=USR CHR$ 158 TO USR CHR$ 158+7: READ O$: POKE J,VAL O$: NEXT J
1202 DATA "16","16","16","16","16","16","16","16"
1204 CLS : IF P$(4)=" " THEN GO TO 1215
1206 PRINT AT 1,1;"We have on file Score-Records for the following players of past games:"
1207 LET NM=1: FOR X=5 TO 6: PRINT AT X,6;P$(NM): LET NM=NM+1: PRINT AT X,18;P$(NM): LET NM=NM+1: NEXT X
1208 PRINT AT 8,0;"We can store Score-Records for only four players. Thus, there is no room for ";N$;"'s scores unless adjustments are made."
1209 PRINT AT 13,13;"CHOICES";AT 14,0;"* Erase the Score-Records of all players. Four new players may then be accomodated.(For this choice, press ""E"")."
1210 PRINT AT 18,0;"* Save from 1 to 3 of the above- named players' Score-Records, leaving room for ";N$;"."'" (For this choice, Press ""S"")"
1211 IF INKEY$<>"E" AND INKEY$<>"S" THEN GO TO 1211
1212 IF INKEY$="E" THEN BEEP S1,S2: LET SFLG=2: CLS : GO TO 925
1213 IF INKEY$="S" THEN BEEP S1,S2: GO TO 2460
1215 LET PFLG=0: LET D=0: LET W$="": POKE 23609,100: LET FLG=0: BORDER 1: PAPER 1: INK 6: CLS
1220 PRINT PAPER 2; INK 4;AT 6,0;"'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'."
1225 PRINT INK 6;AT 9,7;"WELCOME TO ""BLAM"""
1230 PRINT PAPER 2; INK 4;AT 12,0;"'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'."
1232 PAUSE 100: PRINT AT 17,2;"* Richard S. Haseltine 1984";AT 18,7;"Riverside Software";AT 19,10;"R1 Box B-20";AT 20,5;"Orrington, Maine 04474"
1233 PAUSE 200: LET Q=20: GO SUB 20
1235 PRINT INK 6;AT 16,7;"(Learning to type";AT 17,12;"is fun)": PAUSE 400
1237 FOR X=7 TO 23: PRINT AT 16,X;" ";AT 17,X;" ": NEXT X
1240 PRINT AT 14,12;"NOTICE";AT 15,12;"gggggg";AT 16,0;"If at any time you wish to"'"return to a MENU, press ""SYMBOL""and ""*"" together."''"(To continue, press any letter.)"
1242 PAUSE 0: BEEP S1,S2: FOR X=14 TO 21: PRINT AT X,0;" ": NEXT X
1245 REM MENU
1250 LET FLG=0: PRINT INK 7;AT 16,4;"Do you want instructions?"
1255 PRINT INK 7;AT 18,5;"* Press ""Y"" if ""Yes""";'TAB 5;"* Press ""N"" if ""No"""
1260 LET I$=INKEY$: IF I$<>"Y" AND I$<>"N" THEN GO TO 1260
1265 BEEP S1,S2: IF I$="Y" THEN FOR X=16 TO 19: PRINT AT X,4;" ": NEXT X: PRINT AT 9,6;" "
1270 IF I$="Y" THEN PRINT AT 9,9;"INSTRUCTIONS": PAUSE 200: LET FLG=10: LET D=1: LET I$="": GO TO 1475
1272 CLS : LET I$="": PRINT AT 9,0;"Do you wish to enter into the program previous scores you havesaved?(Y/N?)"
1273 LET I$=INKEY$: IF I$<>"Y" AND I$<>"N" THEN GO TO 1273
1274 IF I$="N" THEN BEEP S1,S2: GO TO 1285
1276 BEEP S1,S2: CLS : PRINT AT 9,0;"Prepare your score-tape for loading. When ready, press ""L"" and then press ""PLAY"" on re-"'"corder."
1278 PAUSE 0: CLS : LOAD "BLAM" DATA P$()
1280 LOAD "BLAM" DATA E$()
1281 LOAD "BLAM" DATA F$()
1282 LOAD "BLAM" DATA G$()
1283 LOAD "BLAM" DATA H$()
1285 CLS : IF FLG<>5 THEN PRINT INK 7;AT 10,1;"Please type your first name and then press ENTER.": INPUT N$: GO SUB 2005
1290 LET LN=0: LET W$="": IF FLG=5 THEN CLS : PRINT INK 7;AT 10,0;"Is your name ";N$;"? (Y or N)"
1297 IF FLG=5 THEN LET I$=INKEY$: IF I$<>"Y" AND I$<>"N" THEN GO TO 1297
1298 IF FLG=5 THEN BEEP S1,S2
1299 IF FLG=5 AND I$="Y" THEN LET I$="": GO TO 1303
1300 IF FLG=5 THEN LET Q=10: GO SUB 30: PRINT INK 7;AT 10,0;"Please type your first name and then Press ENTER,": INPUT N$: GO SUB 2005: LET FLG=0: LET I$=""
1303 IF PFLG=4 THEN LET B$=T$: LET PFLG=0
1305 IF FLG=5 AND (D$="26" OR D$="27") THEN GO SUB 2570
1315 LET PFLG=0: CLS : PRINT INK 5;AT 2,13;"MENU";AT 3,13;"''''''''"
1320 LET R=5: LET C=1
1325 FOR X=1 TO 24: PRINT INK 5;AT R,C;A$(X): LET R=R+1
1330 IF R=19 AND C=1 THEN LET C=17: LET R=5
1335 NEXT X
1340 PRINT INK 5;AT 15,17;"25-INSTRUCTIONS";AT 16,17;"26-(CHOOSE 6)";AT 17,17;"27-(RANDOM)";AT 18,17;"28-STOP";AT 19,7;"29-HIGHEST SCORES"
1345 DATA " 1-FLJSKD"," 2-HKJDGF"," 3-JALKSD"," 4-UIJRFT"
1350 DATA " 5-RODIEK"," 6-ELWPAO"," 7-KEOSLD"," 8-HUTGYJ"
1355 DATA " 9-FMJVNG","10-KDLCFM","11-NLDXMC","12-OKZLSA"
1360 DATA "13-IBELCY","14-PQWZDU","15-IVEQPX","16-TBELNO"
1365 DATA "17-YHGNCE","18-LQESTY","19-283746","20-829013"
1370 DATA "21-857643","22-402918","23-JP74D2","24-V3D5MP"
1380 IF FLG=9 THEN PAUSE 300: RETURN
1385 PRINT INK 7;AT 21,0;"(Press Set No.-then press ENTER)"
1390 INPUT D$: IF D$="=@_" THEN LET BFLG=0: GO TO 914
1391 IF BFLG=1 THEN LET BFLG=0: CLS : GO TO 910
1392 IF CODE D$<49 OR CODE D$>57 THEN GO TO 1398
1394 LET D=VAL D$
1395 IF D<1 OR D>29 THEN GO TO 1398
1396 GO TO 1402
1398 CLS : PRINT AT 9,0;"Please ENTER a number from ""1"" to ""29"" when Menu reappears."''"(To continue, press any letter)": PAUSE 0: BEEP S1,S2: GO TO 1310
1402 CLS : IF D$="25" THEN LET I$="Y": GO TO 1270
1405 IF D$="26" THEN GO SUB 940
1410 IF D$="27" THEN GO SUB 960
1415 IF D$="29" THEN GO TO 2385
1417 IF D$<>"28" THEN GO TO 1450
1420 IF D$="28" THEN CLS : PRINT INK 7;AT 9,0;"Do you wish to save the players'highest scores?(Y/N)"
1425 IF INKEY$<>"Y" AND INKEY$<>"N" THEN GO TO 1425
1430 IF INKEY$="Y" THEN BEEP S1,S2: LET SFLG=2: GO SUB 2460
1435 BEEP S1,S2: CLS : PRINT AT 9,14;"END";AT 10,14;"''''''"
1440 PAUSE 120: PRINT AT 13,1;"(Thank you for playing ""Blam"")": PAUSE 500: NEW
1450 LET SC=10: LET SH=20: LET TS=0
1475 BORDER 1: PAPER 1: INK 6: CLS
1480 FOR X=0 TO 5: FOR Y=0 TO 31 STEP 2: PRINT PAPER 0;AT X,Y;" ": NEXT Y: NEXT X
1485 PRINT PAPER 0;AT 1,4;"SCORE";AT 1,13;"DROPS";AT 1,23;"TOTAL"
1490 PAUSE 20
1495 PRINT PAPER 5; INK 0;AT 2,4;":'''''''':";AT 2,13;":'''''''':";AT 2,23;"''''''''''": PRINT PAPER 7; INK 0;AT 2,19;"''''''"
1500 PRINT PAPER 5; INK 0;AT 3,4;": :";AT 3,13;": 20 :";AT 3,23;" ": PRINT PAPER 7; INK 0;AT 3,19;" "
1505 PRINT PAPER 5; INK 0;AT 4,4;":........:";AT 4,13;":........:";AT 4,23;"..........": PRINT PAPER 7; INK 0;AT 4,19;"......": PAUSE 20
1510 PRINT AT 6,0;: FOR X=0 TO 31: PRINT PAPER 0;"..";: NEXT X
1515 PAUSE 20
1520 PRINT AT 7,30;"10": LET R=8: FOR X=9 TO 2 STEP -1: PRINT AT R,31;X: LET R=R+1: NEXT X
1525 PRINT PAPER 0; INK 7;AT 5,19;"KEY"
1530 PRINT PAPER 0; INK 7;AT 3,19;"s";AT 3,21;"r";AT 2,20;"t";AT 4,20;"u"
1540 LET N=1
1542 IF PFLG=4 THEN GO TO 1560
1545 IF D=26 OR D=27 THEN GO TO 1560
1550 LET B$=A$(D)
1560 LET AB=17: LET BC=18: LET CD=19: LET DE=20: LET EF=21: FOR X=4 TO 9: LET B=CODE B$(X): PAPER 0: GO SUB B*10: LET N=N+5: PAUSE 20: NEXT X: PAPER 1
1565 IF FLG=10 THEN GO TO 1665
1575 PAUSE 90: PRINT INK 7;AT 8,7;"BOMB-DROP SPEED";AT 9,7;"''''''''''''''''''''''''''''''"
1580 PRINT INK 7;AT 10,10;"1) VERY SLOW";AT 11,10;"2) SLOW";AT 12,10;"3) MEDIUM";AT 13,10;"4) FAST";AT 14,10
1585 PAUSE 90: PRINT INK 7;AT 15,2;"(SELECT DESIRED SPEED-RATE)": LET U$=INKEY$
1586 IF PEEK M=42 THEN BEEP S1,S2: GO TO 1310
1587 IF U$<"1" OR U$>"4" THEN GO TO 1585
1588 LET U=VAL U$: IF U<1 OR U>4 THEN GO TO 1585
1589 BEEP S1,S2
1590 IF U$="1" THEN LET V=24
1595 IF U$="2" THEN LET V=16
1600 IF U$="3" THEN LET V=8
1605 IF U$="4" THEN LET V=2
1610 LET Q=16: GO SUB 30
1625 PAUSE 90: PRINT INK 7;AT 9,8;"PLACE FINGERS "
1630 PRINT INK 7;AT 10,6;"ON HOME-ROW KEYS."
1635 PAUSE 180: PRINT INK 7;AT 12,3;"PRESS ANY KEY WHEN READY.": PAUSE 0: BEEP S1,S2
1637 IF PEEK M=42 THEN GO TO 1310
1640 LET Q=16: GO SUB 30
1655 PAUSE 90: GO TO 220
1665 PRINT INK 7;AT 8,0;"* Press any letter and"'" you'll see what happens"'" when the game starts.": PAUSE 0
1668 IF PEEK M=42 THEN BEEP S1,S2: CLS : GO TO 1250
1670 LET Q$="6": LET G=6: LET SC=10: LET V=2: GO SUB 230
1675 PAUSE 80: LET Q=11: GO SUB 0030
1680 PRINT INK 7;AT 8,1;"* When you see the bomb"'" start, try to press the"'" letter being bombed be-"'" fore the bomb hits it."'" (In this case,""D"")"
1685 PRINT INK 7;AT 14,0;"(To continue, press any letter)": PAUSE 0: BEEP S1,S2
1686 IF PEEK M=42 THEN CLS : GO TO 1250
1688 LET Q=14: GO SUB 0030
1690 PRINT INK 7;AT 8,1;"* To help you know which"'" letter to press, the"'" letter is printed above"'" in the ""KEY"" window."
1695 PAUSE 250: PRINT PAPER 7; INK 0; FLASH 1;AT 3,20;"D"
1700 PAUSE 200: PRINT INK 7;AT 15,0;"(To continue, press any letter)"
1702 PAUSE 0: BEEP S1,S2
1703 IF PEEK M=42 THEN CLS : GO TO 1250
1705 PRINT PAPER 7; INK 0; FLASH 0;AT 3,20;"D": LET Q=15: GO SUB 30
1710 PRINT INK 7;AT 8,1;"* As you gain skill in"'" the game, you will do"'" even better if you just"'" keep your eyes on the"'" ""KEY"" window, without"'" looking at the keyboard."
1715 PRINT INK 7;AT 15,0;"(To continue, press any letter)": PAUSE 0: BEEP S1,S2
1716 IF PEEK M=42 THEN CLS : GO TO 1250
1718 LET Q=15: GO SUB 30
1720 PRINT INK 7;AT 8,1;"* Before the game starts"'" you may choose the"'" speed of the bomb-drop"''" FOR EXAMPLE:": PAUSE 200
1722 LET V=24: LET Q$="6": LET G=6: LET FLG=10
1725 FOR P=1 TO 4: PRINT FLASH 1;AT 12,16;"SPEED ";P;" nnl": GO SUB 230: PRINT FLASH 0;AT 12,16;" ": LET V=V-8: PAUSE 50: NEXT P
1765 LET FLG=14: LET Q=12: GO SUB 30
1770 PRINT INK 7;AT 8,1;"* You will not know where"'" the bomb will fall until"'" it starts."
1775 PAUSE 300
1780 PRINT INK 7;AT 13,0;"(To continue, press any letter)": PAUSE 0: BEEP S1,S2
1782 IF PEEK 23560=61 THEN CLS : GO TO 1250
1785 LET Q=13: GO SUB 30
1790 PRINT INK 7;AT 8,1;"* To stop the bomb, you"'" must shoot the laser beam"'" by pressing the proper key.": PAUSE 300: PRINT INK 7;" * The proper key is the key"'" of the letter under the"'" bomb. (See Key-window)": PAUSE 300: PRINT INK 7;" * The quicker this is done,"'" the higher the score."'"(To continue, press any letter)"
1792 PAUSE 0: BEEP S1,S2
1793 IF PEEK M=42 THEN CLS : GO TO 1250
1795 LET Q=16: GO SUB 30: PRINT INK 7;AT 8,1;"* The score for each shot"'" is determined by how far"'" the bomb drops before"'" you hit it. This is"'" measured by the numbers"'" to the right:nnnnl"
1800 PAUSE 300: PRINT FLASH 1;AT 7,30;"10": LET Y= 9: FOR X=8 TO 15: PRINT FLASH 1;AT X,31;Y: LET Y=Y-1: NEXT X
1805 PAUSE 200: PRINT INK 7;AT 15,0;"(To continue, press any letter)"
1810 PAUSE 0: BEEP S1,S2
1812 IF PEEK M=42 THEN CLS : GO TO 1250
1815 PRINT FLASH 0;AT 7,30;"10": LET Y= 9: FOR X=8 TO 15: PRINT FLASH 0;AT X,31;Y: LET Y=Y-1: NEXT X
1820 LET Q=15: GO SUB 30: PRINT INK 7;AT 8,1;"* I will drop a bomb over"'" ""D"". I will then press"'" the ""D"" key and fire"'" a laser-beam at the"'" bomb."
1822 PAUSE 200: PRINT INK 7;AT 14,0;"(Press any letter)"
1823 PAUSE 0: BEEP S1,S2
1824 IF PEEK M=42 THEN CLS : GO TO 1250
1825 LET FLG=14: LET V=2: LET G=6: LET Q$="6": GO SUB 230
1830 LET FLG=0: LET Q=14: GO SUB 30
1835 PRINT INK 7;AT 8,1;"* When the bomb was hit,"'" it was opposite number"'" six."
1840 PAUSE 100: PRINT AT 11,27;"m";AT 11,29;"nl": PAUSE 500
1845 PRINT INK 7;AT 11,1;"* Thus, the score for the"'" hit equals ""6"".": PAUSE 500
1850 PRINT INK 7;AT 13,1;"* The score for each shot"'" is shown in the ""SCORE"""'" window above.": PAUSE 300
1855 PRINT PAPER 5; INK 0; FLASH 1;AT 3,5;"6": PAUSE 200
1860 PRINT INK 7;AT 16,0;"(To continue, press any letter)"
1862 PAUSE 0: BEEP S1,S2
1863 IF PEEK M=42 THEN CLS : GO TO 1250
1865 PRINT PAPER 5; INK 0; FLASH 0;AT 3,5;"6": LET Q=16: GO SUB 30
1870 PRINT INK 7;AT 8,1;"* The ""TOTAL SCORE"" is"'" shown in the window"'" at the upper right.": PAUSE 300
1875 PRINT PAPER 5; INK 0; FLASH 1;AT 3,24;"6": PAUSE 500: PRINT PAPER 5; INK 0; FLASH 0;AT 3,24;"6"
1880 PRINT INK 7;AT 12,1;"* The middle window shows"'" the number of bomb-drops"'" left in each game. There"'" are 20 drops per game.": PAUSE 300
1890 PRINT PAPER 5; INK 0; FLASH 1;AT 3,14;"19": PAUSE 300: PRINT PAPER 5; INK 0; FLASH 0;AT 3,14;"19"
1892 PRINT INK 7;AT 16,0;"(To continue, press any letter)": PAUSE 0: BEEP S1,S2
1893 IF PEEK M=42 THEN CLS : GO TO 1250
1894 LET Q=16: GO SUB 30
1895 PRINT INK 7;AT 8,1;"* You may select the let-"'" ter-set for each play"'" from a ""MENU"" which"'" appears before each game."''"(To continue, press any letter)": PAUSE 0: BEEP S1,S2
1897 IF PEEK M=42 THEN CLS : GO TO 1250
1898 LET FLG=9: GO SUB 1310
1900 FOR X=5 TO 19: PRINT AT X,17;" ": NEXT X: LET FLG=0
1905 PRINT INK 7;AT 5,12;"* The first 3 sets";AT 6,14;"are the Home Row";AT 7,14;"keys. I suggest";AT 8,14;"you start with";AT 9,14;"the first set and";AT 10,14;"practice until you";AT 11,14;"can score over 70";AT 12,14;"at Speed 4.": PAUSE 500
1910 PRINT INK 7;AT 14,12;"* Do this with each";AT 15,14;"set before trying";AT 16,14;"the next letter";AT 17,14;"set."
1915 PRINT INK 7;AT 21,0;"(To continue,press any letter)": PAUSE 0: BEEP S1,S2
1918 IF PEEK M=42 THEN CLS : GO TO 1250
1920 CLS : PRINT INK 7;AT 1,1;"THREE REMINDERS"'" ggggggggggggggg"
1925 PRINT INK 7;AT 4,3;"1) Return each finger to its proper key on the Home Row after pressing any letter."
1930 PRINT INK 7;AT 7,3;"2) Try to get 120 at Speed 1"'," 100 at Speed 2"'," 85 at Speed 3";'," 70 at speed 4"'" before moving to the next"'" set"
1935 PRINT INK 7;AT 13,3;"3) When pressing a key to"'" stop the bomb, hold the"'" key down until you hear"'" a shot"
1940 PRINT INK 7;AT 18,0;"(To continue, press any letter)": PAUSE 0: BEEP S1,S2
1942 IF PEEK M=42 THEN CLS : GO TO 1250
1945 CLS : PRINT INK 7;AT 3,10;"MY LAST WORD";AT 4,10;"gggggggggggg"
1950 PRINT INK 7;AT 5,1;"* If you just want to play"'" for fun, that's okay !"
1955 PRINT INK 7;AT 8,1;"* But if you want your fingers "'" to learn the keyboard--the"'" first step in learning to"'" type--then daily 15 minute"'" sessions will bring you along"'" faster than 2-hour sessions"'" once in a while."
1960 PRINT INK 7;AT 17,0;"(To continue, press any letter)": PAUSE 0: BEEP S1,S2
1965 IF PEEK M=42 THEN CLS : GO TO 1250
1970 LET FLG=16: LET X=9: LET F=8: GO SUB 100: LET X=4: LET F=25: GO SUB 100: LET X=4: LET F=12: GO SUB 100
1975 LET X=12: LET F=21: GO SUB 100: LET X=4: LET F=3: GO SUB 100
1980 LET X=8: LET F=16: GO SUB 100: LET X=14: LET F=12: GO SUB 100
1982 CLS : PRINT PAPER 2; INK 4;AT 6,3;".'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'": PRINT AT 9,6;"LET'S PLAY ""BLAM""!": PRINT PAPER 2; INK 4;AT 12,3;".'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'.'"
1985 PAUSE 100: LET X=9: LET F=15: LET FLG=17: GO SUB 100: LET FLG=0: PAPER 1: BORDER 1
1995 CLS : GO TO 1272
2005 LET LEN=LEN N$
2010 FOR X=1 TO 4: IF P$(X)=" " THEN LET P$(X)=N$: LET IND=X: RETURN
2015 LET C$=P$(X): IF C$(1 TO LEN)=N$ THEN LET IND=X: RETURN
2020 NEXT X: IF X=5 THEN CLS : GO TO 1206
2025 IF D=29 THEN CLS : GO TO 2385
2030 LET U=VAL U$: GO TO IND*20+2015
2035 LET FLG=1: LET J=VAL E$(D,U): GO SUB 2165
2037 IF J>=TS THEN RETURN
2039 IF J=0 THEN LET E$(D,U)=STR$ TS: IF FLG=1 THEN RETURN
2040 IF J=0 AND FLG=0 THEN GO TO 2042
2041 LET E$(D,U)=STR$ TS: IF FLG=1 THEN GO TO 2200
2042 LET FLG=5: GO TO 1290
2055 LET FLG=1: LET J=VAL F$(D,U): GO SUB 2165
2057 IF J>=TS THEN RETURN
2059 IF J=0 THEN LET F$(D,U)=STR$ TS: IF FLG=1 THEN RETURN
2060 IF J=0 AND FLG=0 THEN GO TO 2062
2061 LET F$(D,U)=STR$ TS: IF FLG=1 THEN GO TO 2200
2062 LET FLG=5: GO TO 1290
2075 LET FLG=1: LET J=VAL G$(D,U): GO SUB 2165
2077 IF J>=TS THEN RETURN
2079 IF J=0 THEN LET G$(D,U)=STR$ TS: IF FLG=1 THEN RETURN
2080 IF J=0 AND FLG=0 THEN GO TO 2082
2081 LET G$(D,U)=STR$ TS: IF FLG=1 THEN GO TO 2200
2082 LET FLG=5: GO TO 1290
2095 LET FLG=1: LET J=VAL H$(D,U): GO SUB 2165
2097 IF J>=TS THEN RETURN
2099 IF J=0 THEN LET H$(D,U)=STR$ TS: IF FLG=1 THEN RETURN
2100 IF J=0 AND FLG=0 THEN GO TO 2102
2101 LET H$(D,U)=STR$ TS: IF FLG=1 THEN GO TO 2200
2102 LET FLG=5: GO TO 1290
2165 IF U=4 AND TS>=70 THEN GO TO 2220
2170 IF U=3 AND TS>=85 THEN GO TO 2220
2175 IF U=2 AND TS>=100 THEN GO TO 2220
2185 IF U=1 AND TS>=120 THEN GO TO 2220
2190 IF FLG=1 THEN RETURN
2200 SOUND 7,62;8,15: FOR X=100 TO 50 STEP -2: SOUND 0,X: NEXT X: FOR X=50 TO 100: SOUND 0,X: NEXT X
2205 SOUND 0,0;7,63: CLS : PRINT INK 7;AT 10,0;"CONGRATULATIONS, ";N$;"!": PAUSE 100
2210 PRINT INK 7;AT 12,0;"You have beat your BEST with SET #";D;" at SPEED #";U$;" with a"'"SCORE of ";TS: PAUSE 300: PRINT INK 7;AT 16,0;"(To continue, press any letter)": PAUSE 0: BEEP S1,S2: LET FLG=5: CLS : GO TO 1290
2220 SOUND 7,62;8,15
2225 FOR Y=1 TO 4
2230 FOR X=250 TO 225 STEP -3
2235 SOUND 0,X: NEXT X
2240 NEXT Y
2245 FOR X=250 TO 150 STEP -2
2250 SOUND 0,X: NEXT X
2255 SOUND 0,0;7,63
2257 LET R$="0"
2258 LET I=3
2260 SOUND 6,15;7,7;8,16;9,16;10,16;12,35;13,4
2265 RESTORE 2270: READ R,C: PRINT INK I;AT R,C;"p": FOR X=1 TO 15: PRINT AT R,C;" ": READ R,C: PRINT INK I;AT R,C;"p": NEXT X: PRINT AT R,C;" "
2270 DATA 16,8,15,8,14,9,13,9,12,10,11,10,10,11,9,11,8,12,8,13,7,14,8,15,8,16,9,17,10,17,11,18
2287 IF R$="0" OR R$="2" THEN LET X=11: LET F=18: LET FLG=16: GO SUB 100: LET FLG=0: IF R$="2" THEN LET FLG=1: GO TO 2300
2288 IF R$="1" THEN GO TO 2295
2289 GO TO 2300
2295 RESTORE 66: GO SUB 42: LET I=3: LET FLG=1: RESTORE 2310
2300 SOUND 6,15;7,7;8,16;9,16;10,16;12,30;13,4
2305 READ R,C: PRINT INK I;AT R,C;"p": FOR X=1 TO 12: PRINT AT R,C;" ": READ R,C: PRINT INK I;AT R,C;"p": NEXT X: PRINT AT R,C;" "
2310 DATA 16,28,15,27,14,26,13,25,12,24,11,23,10,22,9,21,8,20,8,19,9,18,10,17,11,16
2322 IF R$="0" OR R$="1" THEN LET X=11: LET F=16: LET FLG=16: GO SUB 100: LET FLG=0: LET I=4: IF R$="1" THEN LET R$="2": LET I=6: RESTORE 2270: GO TO 2260
2323 IF R$="2" THEN GO TO 2330
2324 LET R$="1": RESTORE 2270: GO TO 2260
2330 RESTORE 66: GO SUB 42
2340 PRINT INK 7;AT 9,0;"GOOD FOR YOU, ";N$;"!"
2342 LET X$="THE NEXT": IF D$="26" OR D$="27" THEN LET X$="A NEW"
2345 LET K$="SET": IF U<>4 THEN LET K$="SPEED"
2350 PRINT INK 7;AT 11,0;"YOU HAVE SCORED ";TS;" WHICH"'"QUALIFIES YOU TO TRY ";X$;';K$;" !"
2360 BEEP .2,4: BEEP .2,4: BEEP .2,4: BEEP .4,4: BEEP .6,-5
2365 BEEP .2,-3: BEEP .2,-1: BEEP .2,0: BEEP .8,4: BEEP .2,4: BEEP .2,5: BEEP .2,4: BEEP .4,4: BEEP .4,2: BEEP .4,4: BEEP .4,2: BEEP .4,0: BEEP .1,-5: BEEP .1,-3: BEEP .1,-1: BEEP .4,0
2370 PRINT INK 7;AT 15,0;"(To continue, press any letter)": PAUSE 0: BEEP S1,S2: LET Q=15: GO SUB 30: LET FLG=0: RETURN
2385 CLS : PRINT PAPER 6; INK 0;AT 0,4;N$;"'S HIGHEST SCORES"
2390 PRINT AT 1,16;"SPEED"
2395 FOR X=4 TO 31: PRINT AT 2,X;"''": NEXT X
2397 PRINT AT 3,5;"(Negative Scores=0)"
2400 PRINT AT 4,0;"SET";AT 4,7;"1";AT 4,14;"2";AT 4,21;"3";AT 4,28;"4"
2405 PRINT AT 5,0;"''''''";AT 5,6;"''''''";AT 5,13;"''''''";AT 5,20;"''''''";AT 5,27;"''''''"
2410 IF FLG=1 THEN GO TO 2435
2415 LET L=6: LET C=0
2420 FOR S=1 TO 27: PRINT AT L,C;S: LET C=C+6
2425 FOR T=1 TO 4: GO SUB IND+1: PRINT AT L,C;W: LET C=C+7: NEXT T
2430 LET C=0: LET L=L+1: IF L=21 THEN LET L=6: PRINT AT 21,0;"(TO CONTINUE, PRESS ANY LETTER)": PAUSE 0: BEEP .1,40: CLS : LET FLG=1: GO TO 2385
2435 NEXT S
2445 PRINT INK 7;AT 21,0;"(To continue, press any letter)": PAUSE 0: BEEP S1,S2: LET FLG=5: GO TO 1290
2450 STOP
2460 LET CT=0: LET AFLG=0
2465 FOR Z=1 TO 4: IF P$(Z)=" " THEN GO TO 2495
2470 CLS : PRINT AT 9,0;"Are ";P$(Z);"'s scores to be saved?(Y/N?)"
2475 IF INKEY$<>"Y" AND INKEY$<>"N" THEN GO TO 2475
2480 IF INKEY$="Y" THEN BEEP S1,S2: LET CT=CT+1: GO TO 2495
2482 IF INKEY$="N" THEN BEEP S1,S2: LET AFLG=1: LET P$(Z)=" "
2483 PRINT AT 14,8;"PLEASE STAND BY"
2484 IF Z=1 THEN GO SUB 929
2486 IF Z=2 THEN GO SUB 930
2488 IF Z=3 THEN GO SUB 931
2490 IF Z=4 THEN GO SUB 932
2492 PRINT AT 14,8;" "
2493 LET AFLG=0
2495 NEXT Z: IF SFLG=2 THEN GO TO 2500
2497 CLS : PRINT AT 9,0;"We now have room for ";4-CT;" new"'"players, and shall return to thegame of BLAM"''"(To continue, press any letter)"
2498 PAUSE 0: BEEP S1,S2: GO TO 1285
2500 CLS : PRINT AT 9,0;"The saving of the designated Score-Records involves five arrays. All five arrays must be saved. Just follow instructions."
2502 PRINT AT 16,0;"(To continue, press any letter)": PAUSE 0: BEEP S1,S2
2506 CLS : PRINT INK 7;AT 9,0;"Prepare a fresh tape for record-ing. When ready, press ""R""."
2507 IF INKEY$<>"R" THEN GO TO 2507
2508 BEEP S1,S2: CLS
2509 CLS : PRINT AT 9,0;"At the start of the SAVE, you will be asked to start the re- corder, then to press any key. This will occur five times. After the first time, ignore therecorder instructions, and sim- ply press any key."''"(To continue, press any key)"
2510 PAUSE 0: BEEP S1,S2: CLS
2511 SAVE "BLAM" DATA P$()
2513 SAVE "BLAM" DATA E$()
2515 SAVE "BLAM" DATA F$()
2517 SAVE "BLAM" DATA G$()
2519 SAVE "BLAM" DATA H$()
2522 CLS : PRINT INK 7;AT 9,8;"STOP THE RECORDER"''"REWIND TO STARTING POINT FOR"'"VERIFICATION OF THE ""SAVE""."'"PRESS ""V"" WHEN READY, THEN"'"PRESS ""PLAY"" ON RECORDER.": PAUSE 0
2525 IF INKEY$<>"V" THEN GO TO 2525
2527 LET ERR=1
2530 BEEP S1,S2: CLS : VERIFY "BLAM" DATA P$(): PAUSE 200
2532 VERIFY "BLAM" DATA E$()
2534 VERIFY "BLAM" DATA F$()
2536 VERIFY "BLAM" DATA G$()
2538 VERIFY "BLAM" DATA H$()
2540 LET ERR=0: CLS : PRINT AT 8,9;"STOP RECORDER": PAUSE 200
2550 CLS : RETURN
2570 CLS : PRINT AT 9,0;"Would you like to play the same ";D$;"-Set again? (Y or N)"
2580 LET I$=INKEY$: IF I$="" THEN GO TO 2580
2590 BEEP S1,S2: IF I$<>"Y" AND I$<>"N" THEN GO TO 2580
2600 IF I$="Y" THEN CLS : LET FLG=5: GO TO 1450
2610 RETURN
2620 IF LN=3 THEN GO TO 2640
2630 LET V$="00-": LET V$=V$+W$: LET V$=V$+W$: LET V$=V$+W$: GO TO 2650
2640 LET V$="00-": LET V$=V$+W$: LET V$=V$+W$: GO TO 2660
2650 CLS : PRINT AT 9,0;"You are having a little trouble with ";W$(1);" and ";W$(2);". It would be help- ful to play this set:-";V$(4 TO );". Okay? (Y or N)?": GO TO 2670
2660 CLS : PRINT AT 9,0;"You are having a little trouble with ";W$(1);", ";W$(2);", and ";W$(3);". It would be"'"helpful to play this set:"'"-";V$(4 TO );". Okay? (Y or N)?"
2670 LET I$=INKEY$: IF I$="" THEN GO TO 2670
2680 BEEP S1,S2: IF I$<>"Y" AND I$<>"N" THEN GO TO 2710
2690 IF I$="Y" THEN LET B$=V$: LET PFLG=4: GO TO 1450
2700 CLS : RETURN
2710 PRINT AT 20,0;"PLEASE PRESS ""Y"" OR ""N""": GO TO 2670
2750 IF ERR=1 THEN CLS : PRINT AT 9,0;"THERE IS AN ERROR. CHECK THE RECORDER VOLUME. WHEN READY TO RE-SAVE, PRESS ANY KEY": PAUSE 0: BEEP S1,S2: GO TO 2500
2760 CLS : LET BFLG=1: GO TO 1315
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.

