This file contains four independent BASIC programs:
- a TOS (TimEx Operating System) disk utility suite, an animated title-screen generator, and a National Landmarks educational quiz. The TOS Tools program (lines 9800–9981) provides five utilities for managing a Centronics printer and OS-64 cartridge, including printer initialization via direct POKEs to addresses 65510–65525, disk catalog printing by reading screen content with SCREEN$, and stream-file-based text editing with character-by-character keyboard scanning via PEEK 23560.
- The Artificial Intelligence Demo (lines 1–9999 of the second program) implements a forward-chaining expert system that identifies four animals (cheetah, tiger, giraffe, zebra) using a 21-element string array as a knowledge base and DATA statements encoding branching logic for yes/no/unknown/why responses. Based on an article (“Putting Knowledge to Work”, Time, March 28 1986)
- The National Landmarks quiz (third program) uses SOUND for audio feedback on wrong answers, VAL with string literals as a memory-saving technique for numeric constants, and a running SCORE variable decremented on incorrect answers.
- An interactive Christmas card with graphics and sound.
Program Analysis
File Structure
The listing contains three entirely separate BASIC programs concatenated together. They share no variables or execution flow between them:
- TOS Tools #1–5 (lines 100–9981): Printer/disk utilities for the OS-64 cartridge environment
- Artificial Intelligence Demo (lines 1–9999): Animal-identification expert system with forward chaining
- National Landmarks Quiz (lines 1–9999): Multiple-choice geography quiz with scoring and sound
Each program ends with a RANDOMIZE USR 100 / SAVE / LOAD "" sequence at line 9999, chaining to the next program on disk after saving.
TOS Tools: Program Structure
The five tools occupy distinct line ranges and are intended to be called individually rather than run sequentially. Tool #1 (lines 9800–9819) handles printer initialization; Tool #2 (9822–9864) prints disk catalogs; Tool #3 (9868–9908) is a stream-file text editor; Tool #4 (9918–9952) views or LPRINTs a disk file; Tool #5 (9956–9962) is a format-change GOSUB helper.
Two utility subroutines manage the OS-64 cartridge state: GO SUB 9820 puts the cartridge to sleep via OUT 255,0: OUT 244,0 and sets BORDER 0: PAPER 0: INK 5, while GO SUB 9821 wakes it with OUT 255,62: OUT 244,3: INK 7.
TOS Tools: Notable Techniques
- Hardware POKEs for printer configuration: Address 65523 stores the interface type byte, computed with Boolean arithmetic:
(167 AND ZZ=1)+(135 AND ZZ=2)+(122 AND ZZ=3)+(185 AND ZZ=4). Addresses 65510 and 65511 store the line-feed and carriage-return bytes respectively. - Screen scraping for catalog printing: Tool #2 uses
SCREEN$(N,M)in a double loop to capture the disk catalog display into a stringC$and then LPRINT it, since no direct CAT-to-printer command exists. - Stream file I/O: Tools #3 and #4 use TOS-specific
OPEN #*5;N$;O/OPEN #*1;N$;I;1andPRINT *#5;/INPUT *#1;syntax for disk stream files. File names are constructed as"DTA"+STR$ ZZ+".DAT". - Chunked writes: At line 9903–9904, because the TOS drive buffer accepts at most 256 characters at a time, the program steps through
U$in 256-character slices using aFOR N=1 TO LEN U$ STEP 256loop. - Keyboard polling without INPUT: Tool #3 polls
PEEK 23560(the last character pressed) after setting and waiting onPOKE 23611,220(the keyboard scan counter), building a string character by character with full cursor-movement and delete support. - Screen scroll via USR: Line 9940 calls
LET t=USR 2361to invoke a machine code scroll routine when the text cursor reaches row 20. - RANDOMIZE USR 15623: Used after POKEing the line-width address 65525, this calls an OS-64 routine that applies the new printer width setting.
Artificial Intelligence Demo: Expert System Design
The program implements a rule-based forward-chaining expert system to identify one of four animals. The knowledge base is stored in A$(1) through A$(21), a 21-element string array with 45 characters per element, holding facts and conclusions such as “HAS DARK SPOTS”, “IS A CARNIVORE”, and “IS A CHEETAH”.
Navigation is driven by DATA statements (lines 9500–9630). Each record contains seven values read into variables N1, N2, Y, I1, I2, W, S, encoding the line to GOSUB on “No”, the line to GO TO after “No”, the line to go to on “Yes”, the GOSUB on “I don’t know”, the line after “I don’t know”, the line on “Why”, and the default branch. The dispatch block at lines 60–120 reads the first character of B$ and routes accordingly.
A flag array Q(14) records which attributes have been confirmed. Lines 7000–7140 print a full inference trace showing which facts led to the conclusion, using substring slices of the A$ array to reconstruct sentences.
Artificial Intelligence Demo: Notable Techniques
- Variables
E,F, andGstore line numbers (9050, 9010, 8990) to allowGO SUB E,GO SUB F, andGO SUB G, avoiding repetition and slightly reducing program size. - The question subroutine at line 9050 is a general-purpose routine: it prints “IS THIS AN ANIMAL THAT: [attribute]?” using
A$(A, TO B)whereAandBare set before each call. RESTOREto specific line numbers (9510–9630) before eachGO TO C(line 60) reloads the correct DATA record for each decision node without requiring a table lookup.- Line 9060 is a bare
RETURNused as the target ofGO SUB N1orGO SUB I1when no special action is needed — a no-op subroutine.
Animated Title Screen: Structure
This short program (lines 5–500 plus DATA) draws a decorative scene using block graphics escape sequences, then animates it. Lines 40–80 print text strings containing characters offset from their displayed values — the CODE SCREEN$(X,Y)+9 trick at line 220 shifts ink-2 characters (codes 56–81) to ink-4 equivalents, producing a color-sweep animation across the title text without redrawing the characters themselves.
A scrolling ground line is produced by rotating Z$ (a 32-character string of block graphic characters) one position per frame: LET Z$=Z$(2 TO 32)+CHR$ R, where R is a random value from 135–138 (block graphic characters). A starfield string S$ of 160 characters is similarly rotated. Music is played from DATA at lines 1000–1030 using BEEP T/V,F inside an ON ERR GO TO 500 loop that resets and loops when the data runs out.
National Landmarks Quiz: Program Structure
The quiz covers six U.S. landmarks (Golden Gate Bridge, Pearl Harbor, Yellowstone, Mount Rushmore, Statue of Liberty, Sears Tower) using a non-linear question flow. Correct answers route forward; wrong answers print explanations and loop back to the same question. A SCORE variable starts at 12 and is decremented by 1 for each wrong answer via LET SCORE=SCORE-VAL "1". The final score is displayed as a percentage at line 1300.
National Landmarks Quiz: Notable Techniques
- VAL with string literals: Throughout the quiz, numeric constants appear as
VAL "2000",VAL "1",PAUSE SIN PI(PAUSE 0), etc. This is a standard memory-saving idiom where storing the number as a string token is more compact than a floating-point number in some contexts. - SOUND for wrong-answer feedback: Subroutine 2010 uses a sequence of SOUND commands to generate a descending “failure” tone, including a sweep loop
FOR P=0 TO 100: SOUND 0,P: PAUSE 2: NEXT P. - BEEP for correct-answer feedback: Subroutine 2030 plays a brief ascending fanfare using five
BEEPcalls. - LET PERCENT=VAL “INT (SCORE/12*100)”: This is an anomaly —
VALon a string containingINT(...SCORE...)cannot evaluate the variableSCOREat runtime;VALonly parses numeric literals. This line will produce 0 or cause an error. The programmer likely intendedLET PERCENT=INT (SCORE/12*100). - Line 1190 calls
GO SUB 2010withoutVAL, inconsistent with all other subroutine calls in the program — a minor coding inconsistency rather than a functional bug since the line number is valid.
Variable and Address Summary (TOS Tools)
| Address / Variable | Purpose |
|---|---|
65523 | Interface type byte for printer |
65525 | Line width + left margin tab |
65510 | Line feed character (13 or 0) |
65511 | Carriage return character (10 or 0) |
RANDOMIZE USR 15623 | Apply printer settings in OS-64 |
PEEK 23560 | Last keypress character code |
POKE 23611 | Keyboard debounce counter |
USR 2361 | Screen scroll machine code routine |
Content
Source Code
100 REM TOS TOOLS #1-5
102 REM REQUIRES OS-64 CART, CENTRONICS INTERFACE & PRINTER
104 CLEAR 63423: LET A=0: LET B=0: LET C=0: LET U$=""
9800 REM TOOL #1-PRINTER INITIALIZATION ROUTINE
9801 GO SUB 9820: PRINT #0;"TURN OFF PRINTER"'"SET PRINTER SWITCHES"'"IF NECESSARY"'"THEN <ENTER>": PAUSE 0: CLS
9804 PRINT #0;"INPUT TYPE OF INTERFACE"'"<1> AERCO OR OLIGER"'"<2> TASMAN B"'"<3> TASMAN C"'"<4> A & J": PAUSE 0: LET ZZ=VAL INKEY$: IF ZZ<1 OR ZZ>4 THEN CLS : GO TO 9801
9806 POKE 65523,(167 AND ZZ=1)+(135 AND ZZ=2)+(122 AND ZZ=3)+(185 AND ZZ=4)
9807 CLS : INPUT "LINE WIDTH?"'"THEN <ENTER> ";LW
9808 INPUT "LEFT MARGIN TAB?"'"THEN <ENTER> ";TB: IF LW+TB>80 OR LW+TB<1 THEN PRINT #0;"LINE WIDTH + LEFT MARGIN TAB MUST BE LESS THAN 81 WITH PICA"'"<ENTER> TO CONTINUE": PAUSE 0: GO TO 9807
9809 POKE 65525,LW+TB: GO SUB 9821: RANDOMIZE USR 15623: REM The OS-64 does not have a single poke for setting left margin. Must know the printer code if any
9810 GO SUB 9820: INPUT "<1> COMPUTER LINE FEED?"'"<2> NO LINE FEED"'"THEN <ENTER> ";LF: IF LF<1 OR LF>2 THEN GO TO 9810
9811 POKE 65510,(13 AND LF=1)+(0 AND LF=2)
9812 INPUT "<1> COMPUTER CARRIAGE RETURN?"'"<2> NO CARRIAGE RETURN"'"THEN <ENTER> ";CR: IF CR<1 OR CR>2 THEN GO TO 9812
9813 POKE 65511,(10 AND CR=1)+(0 AND CR=2)
9814 PRINT #0;"TURN ON THE PRINTER, THEN <ENTER>": PAUSE 0: GO SUB 9821: LPRINT : CLS
9815 FOR N=1 TO 5: IF TB=0 THEN GO TO 9818
9816 DIM M$(TB): LPRINT M$;
9818 FOR M=1 TO LW: LPRINT "X";: NEXT M: NEXT N: LPRINT : REM Test print lines for printer whose left margin code is not known
9819 STOP
9820 CLS : OUT 255,0: OUT 244,0: BORDER 0: PAPER 0: INK 5: CLS : RETURN : REM Put OS-64 to sleep
9821 CLS : OUT 255,62: OUT 244,3: INK 7: CLS : RETURN : REM wake up OS-64
9822 REM TOOL #2-CAT PRINT-Print a Disk Catalog
9823 PRINT #0;"ARE THE DRIVES ON AND IS"'"THERE A DISK IN ""A""DRIVE?"'"TURN OFF PRINTER"'"<ENTER> WHEN READY": PAUSE 0: CLS : REM TOS Initialization
9824 POKE 65525,80: RANDOMIZE USR 15623: PRINT #0;"TURN ON PRINTER THEN <ENTER>": PAUSE 0: CLS : REM Set LPRINT width to 80
9826 PRINT #0;"INSERT DISK TO BE CATALOGED"'"IN DRIVE ""A"" THEN <ENTER>": PAUSE 0 : CLS : GO SUB 9856: GO TO *":": CAT *: GO SUB 9860: GO TO *"A"d
9830 GO SUB 9856: CLS : CAT *: GO SUB 9860: INPUT "IS THE DISK TREE STRUCTURED"'"<1> YES"'"<2> NO"'"THEN <ENTER> ";T: IF T<1 OR T>2 THEN GO TO 9830: REM Does the catalog show subdirectories?
9832 IF T=1 THEN GO TO 9840
9834 INPUT "<1> CATALOG ANOTHER DISK?"'"<2> QUIT?"'"THEN <ENTER>";S: IF S<1 OR S>2 THEN GO TO 9834
9836 IF S=1 THEN GO TO 9826
9838 GO TO 9864
9840 INPUT "<1> LPRINT ANOTHER CATALOG?"'"<2> QUIT"'"THEN <ENTER>";S: IF S<1 OR S>2 THEN GO TO 9840
9842 IF S=2 THEN GO TO 9864
9844 GO SUB 9856: INPUT "INPUT SUBDIRECTORY PATHNAME"'"THEN <ENTER> ";P$: CAT *P$: GO SUB 9860: GO TO 9840
9856 INPUT "LPRINT"'"<1> LEFT SIDE"'"<2> RIGHT SIDE"'"THEN <ENTER>";S: CLS : IF S<1 OR S>2 THEN GO TO 9856
9858 RETURN
9860 DIM M$(5): IF S=2 THEN DIM M$(43): REM Sets margin
9862 DIM C$(32): FOR N=0 TO 21: FOR M=0 TO 31: LET C$(M+1)=SCREEN$ (N,M): NEXT M: LPRINT M$;C$: IF C$(1 TO 5)="Max 1" THEN RETURN : REM Picks up catalog from screen and prints it
9863 NEXT N: RETURN
9864 STOP
9868 REM TOOL #3-SENDING STRING DATA TO DISK
9869 REM Create the U$ Data first " Use CAPS SHIFT+SYMBOL SHIFT to QUIT " " Use ENTER for starting new line "
9870 POKE 23730,191: POKE 23731,247: LET A=0: LET B=0: LET C=0: CLS : INPUT "TURN DRIVES ON, INSERT DATA DISK"'"ENTER A FILE NBR <1 TO 99999>";ZZ: GO SUB 9970: LET U$="": CLS : PRINT AT 21,60;LEN U$;AT A,B;"_";: REM TOS allows 8 character name + period and 3 character file type extension
9872 POKE 23611,220
9874 IF PEEK 23611<221 THEN GO TO 9874
9876 LET C=PEEK 23560: POKE 23611,220
9878 IF C=12 THEN GO TO 9890: REM delete char
9880 IF C=13 THEN GO SUB 9940: GO SUB 9902: GO TO 9872: REM ENTER key
9882 IF C=14 THEN GO SUB 9902: GO TO 9906: REM CS+SS keys
9884 IF C<32 OR C>122 THEN GO TO 9872
9885 PRINT AT A,B;CHR$ C;: LET B=B+1: IF B=64 THEN GO SUB 9940
9886 PRINT AT A,B;"_";: LET U$=U$+CHR$ C: PRINT AT 21,60;LEN U$
9888 GO TO 9872
9890 IF LEN U$=0 THEN GO TO 9872: REM error trap
9891 LET U$=U$( TO LEN U$-1): PRINT AT 21,60;" ";AT 21,60;LEN U$;AT A,B;" ": LET B=B-1: IF B=-1 THEN LET B=63: LET A=A-1: IF A=-1 THEN LET A=0
9892 PRINT AT A,B;"_": GO TO 9872
9902 LET U$=U$+CHR$ 13: REM End of record marker
9903 FOR N=1 TO LEN U$ STEP 256: IF LEN U$<N+256 THEN PRINT *#5;U$(N TO LEN U$): GO TO 9905: REM TOS Drive buffer accepts only up to 256 characters at one time
9904 PRINT *#5;U$(N TO N+255): NEXT N
9905 LET U$="": PRINT AT 21,60;" ": RETURN
9906 CLS : INPUT "<1> CREATE MORE TEXT"'"<2> QUIT";XX: IF XX=1 THEN GO SUB 9940: GO TO 9872
9908 CLOSE #*5: STOP
9918 REM TOOL #4. LPRINT OR VIEW A DISK FILE
9920 CLS : CAT *: INPUT "ENTER THE FILE NBR <1 TO 99999> ";ZZ: INPUT "<1> VIEW FILE <2> LPRINT FILE ";XX: LET U$="": IF XX=1 THEN GO TO 9928
9924 CLS : PRINT #0;"TURN PRINTER ON, THEN <ENTER>": PAUSE 0: GO SUB 9960: REM printer initialization
9928 CLS : LET U$="": GO SUB 9980: REM Open disk file for input to screen or printer
9929 IF XX=2 THEN GO TO 9933: REM send data to printer instead of screen
9930 POKE 23729,255: INPUT *#1;U$: IF PEEK 23728<>0 THEN GO TO 9946: REM Peek and Poke are error trap as ON ERROR does not recognize TOS system errors
9931 PRINT U$;: GO TO 9930
9933 IF LM>0 THEN LPRINT M$;
9934 FOR N=1 TO LW: POKE 23729,255: INPUT *#1;U$: IF PEEK 23728<>0 THEN LPRINT : GO TO 9946
9935 LPRINT U$;: IF U$=CHR$ 13 THEN GO TO 9933
9936 NEXT N: GO TO 9933
9940 LET A=A+1: LET B=0: IF A>20 THEN PRINT AT 21,60;" ": LET t=USR 2361: LET A=20: PRINT AT A,B;"_": RETURN
9942 PRINT AT A,B;"_";: RETURN
9946 CLOSE #*1: PRINT #0;"REACHED END OF FILE, PRESS <ENTER>": PAUSE 0
9950 STOP
9952 GO TO 9920
9956 REM TOOL #5. GOSUB ROUTINE FOR QUICK FORMAT CHANGES
9960 CLS : INPUT "INPUT TAB ";LM: INPUT "LINE WIDTH ";LW: POKE 65525,LM+LW: RANDOMIZE USR 15623: IF LM>0 THEN DIM M$(LM)
9962 LPRINT : RETURN
9970 REM Assign file name (N$) and open TOS file as a Stream File
9971 LET N$="DTA"+STR$ ZZ+".DAT": DIM *N$: OPEN #*5;N$;O: RETURN
9980 REM Assign file name N$ and open that TOS file for (I)nput of (1) character at a time, to screen or printer using channel one (*1)
9981 LET N$="DTA"+STR$ ZZ+".DAT": OPEN #*1;N$;I;1: RETURN
1 REM ARTIFICIAL INTELLIGENCEPROGRAMMED BY EARL DUNNINGTON 4356 KING THEODORE DRIVE BOYNTON BCH, FL 33436
2 REM FOR EDUCATIONAL USE ONLY
3 REM THIS PROGRAM IS BASED ON THE ARTICLE; "PUTTING KNOWLEDGE TO WORK" PUBLISHED IN TIME MAGAZINE MARCH28, 1988
10 BORDER 4: PAPER 6: CLS : PRINT AT 1,4;"FOR EDUCATIONAL USE ONLY";AT 7,2;"ARTIFICIAL INTELLIGENCE DEMO";AT 9,1;"PROGRAMMED BY EARL DUNNINGTON": REM TITLE SCREEN
20 PRINT AT 16,0;"This program is based on thearticle: ""Putting Knowledge To Work"" that appeared in Time Magazine, March 28, 1988": GO SUB 9010: REM CREDIT NOTICE
30 DIM A$(21,45): LET A$(1)="ANIMAL": LET A$(2)="WILD": LET A$(3)="DOMESTIC": LET A$(4)="GIVES MILK": LET A$(5)="HAS HAIR": LET A$(6)="HAS POINTED TEETH, CLAWS, AND FORWARD EYES": LET A$(7)="EATS MEAT": LET A$(8)="IS A QUADRUPED": LET A$(9)="IS A TAWNY COLOR": LET A$(10)="HAS DARK SPOTS": LET A$(11)="HAS BLACK STRIPES": REM DATA BASE
40 LET A$(12)="CHEWS CUD": LET A$(13)="HAS HOOVES": LET A$(14)="HAS A LONG NECK": LET A$(15)="IS A MAMMAL": LET A$(16)="IS A CARNIVORE": LET A$(17)="IS AN UNGULATE": LET A$(18)="IS A CHEETAH": LET A$(19)="IS A TIGER": LET A$(20)="IS A GIRAFFE": LET A$(21)="IS A ZEBRA"
50 POKE 23658,8: CLS : DIM Q(14): LET C=60: LET D=1: LET E=9050: LET F=9010: LET G=8990: PRINT "IS THE OBJECT YOU WISH TO IDEN- TIFY A ";A$(2, TO 5);A$(1, TO 6);"?": GO SUB 9000: RESTORE : REM SET CAPS LOCK, INITIALIZE VARIABLES, PRINT QUESTION NO.1
60 READ N1: READ N2: READ Y: READ I1: READ I2: READ W: READ S: REM SET VARIABLES FOR DECISIONS
70 IF B$="" THEN GO TO 120: REM MAKE DECISIONS
80 IF B$(1)="N" THEN GO SUB N1: GO TO N2
90 IF B$(1)="Y" THEN LET Q(D)=1: GO TO Y
100 IF B$(1)="I" THEN GO SUB I1: GO TO I2
110 IF B$(1)="W" THEN GO TO W
120 GO SUB 9030: GO TO S
130 CLS : LET A=4: LET B=10: LET D=2: GO SUB E: RESTORE 9510: GO TO C: REM PRINT QUESTION NO.2
140 CLS : LET A=5: LET B=8: LET D=3: GO SUB E: RESTORE 9520: GO TO C: REM QUESTION NO.3
150 CLS : LET A=6: LET B=44: LET D=4: GO SUB E: RESTORE 9530: GO TO C: REM QUESTION NO4
160 CLS : LET A=7: LET B=9: LET D=5: GO SUB E: RESTORE 9540: GO TO C: REM QUESTION NO.5
170 CLS : LET A=8: LET B=14: LET D=6: GO SUB E: RESTORE 9550: GO TO C: REM QUESTION NO.6
180 CLS : LET A=9: LET B=16: LET D=7: GO SUB E: RESTORE 9560: GO TO C: REM QUESTION NO.7
190 CLS : LET A=10: LET B=14: LET D=8: GO SUB E: RESTORE 9570: GO TO C: REM QUESTION NO.8
200 CLS : PRINT "THE ";A$(1, TO 7);A$(18): GO TO 8080: REM END OF ROUTE 1
210 CLS : LET A=11: LET B=17: LET D=9: GO SUB E: RESTORE 9580: GO TO C: REM QUESTION NO.9
220 CLS : PRINT "THE ";A$(1, TO 7);A$(19): GO TO 8080: REM END OF ROUTE 2
230 CLS : LET A=12: LET B=9: LET D=10: GO SUB E: RESTORE 9590: GO TO C: REM QUESTION NO.10
240 CLS : LET A=13: LET B=10: LET D=11: GO SUB E: RESTORE 9600: GO TO C: REM QUESTION NO.11
250 CLS : LET A=10: LET B=14: LET D=12: GO SUB E: RESTORE 9610: GO TO C: REM QUESTION NO.12
260 CLS : LET A=14: LET B=15: LET D=13: GO SUB E: RESTORE 9620: GO TO C: REM QUESTION NO.13
270 CLS : PRINT "THE ";A$(1, TO 7);A$(20): GO TO 8080: REM END OF ROUTE 3
280 CLS : LET A=11: LET B=17: LET D=14: GO SUB E: RESTORE 9630: GO TO C: REM QUESTION NO.14
290 CLS : PRINT "THE ";A$(1, TO 7);A$(21): GO TO 8080: REM END OF ROUTE 4
7000 CLS : IF Q(1)=1 THEN PRINT "THE OBJECT IS A ";A$(2, TO 5);A$(1, TO 6)
7010 IF Q(2)=1 THEN PRINT A$(4, TO 11);"SO IT ";A$(15, TO 11)
7020 IF Q(3)=1 THEN PRINT A$(5, TO 9);"SO IT ";A$(15, TO 11)
7030 IF Q(4)=1 THEN PRINT A$(6, TO 30);A$(6,33 TO 45);"SO IT ";A$(16, TO 14)
7040 IF Q(5)=1 THEN PRINT A$(7, TO 10);"SO IT ";A$(16, TO 14)
7050 IF Q(6)=1 THEN PRINT "IT ";A$(8, TO 15);"(FOUR LEGS)"
7060 IF Q(7)=1 THEN PRINT A$(9, TO 16)
7070 IF Q(8)=1 THEN PRINT A$(10, TO 14): PRINT : PRINT "THEREFORE IT ";A$(18, TO 12)
7080 IF Q(9)=1 THEN PRINT A$(11, TO 17): PRINT : PRINT "THEREFORE IT ";A$(19, TO 11)
7090 IF Q(10)=1 THEN PRINT A$(12, TO 10);"SO IT ";A$(17, TO 14)
7100 IF Q(11)=1 THEN PRINT A$(13, TO 11);"SO IT ";A$(17, TO 14)
7110 IF Q(12)=1 THEN PRINT A$(10, TO 14)
7120 IF Q(13)=1 THEN PRINT A$(14, TO 15): PRINT : PRINT "THEREFORE IT ";A$(20, TO 12)
7130 IF Q(14)=1 THEN PRINT A$(11, TO 17): PRINT : PRINT "THEREFORE IT ";A$(21, TO 10)
7140 GO TO 8080: REM END OF MAIN PROGRAM
8000 CLS : PRINT "TO IDENTIFY AN OBJECT I MUST KNOW IF IT IS A ";A$(2, TO 5);"OR ";A$(3, TO 8);A$(1, TO 6);", VEGETABLE,OR MINERAL": GO SUB F: GO TO S: REM BRANCHES FROM AND TO MAIN PROGRAM
8010 GO SUB G: PRINT A$(15,6 TO 11): GO SUB F: GO TO S
8020 GO SUB G: PRINT A$(16,6 TO 15);"OR";A$(17,6 TO 14): GO SUB F: GO TO S
8030 GO SUB G: PRINT AT 0,27;"HAS FLIPPERS, TWO, OR FOUR LEGS": GO SUB F: GO TO S
8040 GO SUB G: PRINT A$(19,6 TO 11);"OR";A$(18,3 TO 12): GO SUB F: GO TO S
8050 GO SUB G: PRINT A$(17,7 TO 14): GO SUB F: GO TO S
8060 GO SUB G: PRINT A$(20,6 TO 12): GO SUB F: GO TO S
8070 GO SUB G: PRINT A$(21,6 TO 10): GO SUB F: GO TO S
8080 GO SUB 9070: IF B$="" THEN GO TO 8130
8090 IF B$(1)="W" THEN GO TO 7000
8100 IF B$(1)="R" THEN GO TO 50
8110 IF B$(1)="B" THEN STOP
8120 IF B$(1)="Q" THEN NEW
8130 PRINT #0;"INPUT ERROR PRESS ANY KEY TO CONTINUE": PAUSE 0: GO TO 8080
8990 CLS : PRINT "TO DETERMINE IF THE ";A$(1, TO 6);" IS A ";: RETURN : REM SUBROUTINE G FOR BRANCHES
9000 INPUT "TYPE YES,NO,I DON'T KNOW, OR WHYTHEN PRESS ENTER";B$: RETURN : REM SUBROUTINES
9010 PRINT #0;"PRESS ANY KEY TO CONTINUE": PAUSE 0: RETURN : REM SUBROUTINE F
9020 CLS : PRINT "I AM NOT PROGRAMMED AS YET FOR YOUR ANSWER TO THIS QUESTION": GO SUB F: RETURN
9030 CLS : PRINT "INPUT ERROR": GO SUB F: RETURN
9040 CLS : PRINT "INSUFFICIENT DATA": GO SUB F: RETURN
9050 CLS : PRINT "IS THIS AN ";A$(1, TO 7);"THAT:",A$(A, TO B);"?": GO TO 9000: REM SUBROUTINE E
9060 RETURN : REM USED IN DATA STATEMENTS
9070 INPUT "TYPE WHY, RERUN ,BASIC, OR QUIT THEN PRESS ENTER";B$: RETURN
9500 DATA 9020,50,130,9040,50,8000,50: REM DATA STATEMENTS FOR DECISIONS
9510 DATA 9060,140,150,9060,140,8010,130
9520 DATA 9020,130,150,9040,130,8010,140
9530 DATA 9060,160,170,9060,160,8020,150
9540 DATA 9060,230,170,9040,150,8020,160
9550 DATA 9020,170,180,9040,170,8030,170
9560 DATA 9020,180,190,9040,180,8040,180
9570 DATA 9060,210,200,9060,210,8040,190
9580 DATA 9020,190,220,9040,190,8040,210
9590 DATA 9060,240,250,9060,240,8050,230
9600 DATA 9020,230,250,9040,230,8050,240
9610 DATA 9060,280,260,9060,280,8060,250
9620 DATA 9020,260,270,9040,250,8060,260
9630 DATA 9020,250,290,9040,250,8070,280
9999 RANDOMIZE USR 100: SAVE "AIDEMO.B1" LINE 10: LOAD ""
5 CLS : BORDER 4
10 DIM S$(160)
20 LET S$=" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *"
30 LET Z$="::::..::..::::..::::::::..::::::..::::::::::..::::..::::::::::::"
40 PAPER 7: PRINT INK 2;AT 5,8;"D<IIP :?I@JKD8J"
50 PAPER 7: PRINT INK 2;AT 7,14;"8E;"
60 PAPER 7: PRINT INK 2;AT 9,9;"?8GGP E<N P<8I"
70 PAPER 7: PRINT INK 2;AT 11,9;"=IFD ;F;@< 8E;"
80 PAPER 7: PRINT INK 2;AT 14,3;" :'''.";AT 15,3;" : '.";AT 16,3;" : '.";AT 17,3;" ':. '."
90 PAPER 7: PRINT INK 2;AT 20,3;"':................................................:'"
100 PAPER 7: PRINT INK 2;AT 13,3;" :";AT 12,3;"':"
110 PAPER 7: PRINT INK 2;AT 11,2;"':.:";AT 10,1;"':. :"
120 PAPER 7: PRINT INK 2;AT 9,1;": :";AT 8,1;".:'':."
130 PAPER 7: PRINT INK 2;AT 12,27;"*";AT 7,2;"*"
140 PAPER 7: PRINT INK 5;AT 21,0;Z$
150 PAPER 7: PRINT INK 2;AT 19,28;"..:'";AT 18,4;"'''''''''''''''''''''''''''''''''''''''''''''''''''':."
160 PAPER 7: PRINT INK 2;AT 17,22;".' :";AT 16,23;".' .:"
170 PAPER 7: PRINT INK 2;AT 15,24;".' :";AT 14,25;".' :";AT 13,26;".''''''."
180 PAPER 7: PRINT INK 2;AT 18,11;":'";AT 19,10;".'";AT 20,9;".:"
190 PAUSE 60
200 FOR X=5 TO 11
210 FOR Y=7 TO 24
220 IF CODE SCREEN$ (X,Y)>=56 AND CODE SCREEN$ (X,Y)<=81 THEN PRINT INK 4;AT X,Y;CHR$ (CODE SCREEN$ (X,Y)+9)
230 PAUSE 10
240 NEXT Y
245 NEXT X
250 PRINT INK 4;AT 13,13;"E"
260 PAUSE 120
270 PRINT INK 4;AT 13,14;"A"
280 PAUSE 120
290 PRINT INK 4;AT 13,15;"R"
300 PAUSE 120
310 PRINT INK 4;AT 13,16;"L"
320 FOR N=1 TO 50: LET R=135+INT (RND*4)
330 PAPER 1: PRINT INK 7;AT 0,0;S$(1 TO 160)
340 PAPER 7: PRINT INK 2;AT 6,8;"''''''''''''''''''''''''''''''''";AT 14,13;" "
350 PAPER 7: PRINT INK 4;AT 12,27;"*";AT 7,2;"*"
360 LET Z$=Z$(2 TO 32)+CHR$ R
370 PAPER 7: PRINT INK 2;AT 6,8;" ";AT 10,9;"''''''''''''''''''''''''''''"
380 PAPER 7: PRINT INK 5;AT 21,0;Z$
390 PAPER 7: PRINT INK 4;AT 12,27;"*";AT 7,2;"*"
400 LET S$=S$(120 TO 160)+S$(1 TO 128)
410 PAPER 7: PRINT INK 2;AT 10,9;" ";AT 14,13;"''''''''"
420 NEXT N
440 RESTORE 1000: READ T
450 READ F,V: ON ERR GO TO 500
460 IF F<>99 THEN GO TO 480
470 PAUSE T/V*60: GO TO 450
480 BEEP T/V,F: GO TO 450
500 ON ERR RESET : RESTORE 1000: GO TO 320
1000 DATA 1.8
1010 DATA 7,8/3,9,8,7,4,4,4/3,7,8/3,9,8,7,4,4,4/3,14,2,14,4,11,4/3,12,2,12,4,7,4/3,9,2,9,4,12,8/3,11,8,9,4,7,8/3
1020 DATA 9,8,7,4,4,4/3,9,2,9,4,12,8/3,11,8,9,4,7,8/3,9,8,7,4,4,4/3,14,2,14,4,17,4,14,4,11,4,12,4/3,16,1,12,4
1030 DATA 7,4,4,4,7,4,5,4,2,4,0,1
1 REM National Landmarks programed by Earl Dunnington
2 REM FOR EDUCATIONAL USE ONLY
3 REM This test is based on the article How Well Do You KnowYour National Landmarks by Ken Levine that appeared in the July1988 Readers Digest
10 BORDER 4: PAPER 6: CLS : PRINT AT SGN PI,VAL "4";"FOR EDUCATIONAL USE ONLY";AT VAL "7",VAL "6";"NATIONAL LANDMARKS";AT VAL "9",SGN PI;"programmed by Earl Dunnington"
15 PRINT AT VAL "17",SIN PI;"This test is based on the arti-cle ""How Well Do You Know YourNational Landmarks""by Ken Levinethat appeared in the July 1988Readers Digest."
20 PAUSE VAL "240": CLS
30 LET SCORE=VAL "12"
1010 CLS : PRINT "LET'S START WITH THE GOLDEN GATEBRIDGE. IF YOU ALLOW FOR SHORTACCESS ROADS, WHICH TWO CALIFOR-NIA CITIES DOES THIS BRIDGE CON-NECT?"''"A-San Francisco & Oakland"''"B-San Francisco & Sausalito": GO SUB VAL "2000"
1011 IF A$="A" OR A$="a" THEN GO TO VAL "1100"
1012 IF A$="B" OR A$="b" THEN GO TO VAL "1060"
1013 CLS : GO TO VAL "1010"
1020 CLS : PRINT "THE JAPANESE ATTACK ON PEARLHARBOR ON DECEMBER 7, 1941,TRIGGERED AMERICA'S ENTRY INTOWORLD WAR II. OFF WHICH OF THEHAWAIIAN ISLANDS ARE PEARL HAR-BOR AND THE MEMORIAL TO THE USSARIZONA?"''"A-Ouhu"''"B-Honolulu": GO SUB VAL "2000"
1021 IF A$="A" OR A$="a" THEN GO TO VAL "1070"
1022 IF A$="B" OR A$="b" THEN GO TO VAL "1120"
1023 CLS : GO TO VAL "1020"
1030 GO SUB VAL "2010": PRINT "NO, NO. EVEN THOUGH OLD FAITHFULIS UNDOUBTEDLY THE BEST KNOWNOF ALL AMERICAN GEYSERS, STEAM-BOAT GEYSER CAN BLOW ITS STACKALMOST 400 FEET INTO THE AIR,ABOUT TWICE THE MAXIMUM HEIGHTOF OLD FAITHFUL": GO SUB VAL "2020": GO TO VAL "1080"
1040 GO SUB VAL "2010": PRINT "NOPE. THOMAS JEFFERSON, OURTHIRD PRESIDENT, IS THERE, THESECOND FROM THE LEFT.": GO SUB VAL "2020": GO TO VAL "1130"
1050 PRINT "ON THE WESTERN SLOPES OF CALI-FORNIA'S SIERRA NEVADA, GIANTSEQUOIAS GROW TO MORE THAN 30FEET IN DIAMETER AND TO OVER 300FEET IN HEIGHT. BUT ANOTHER TREE, PROTECTED IN A NATIONAL PARKGROWS EVEN TALLER. WHAT TREE ISTHIS?"''"A-Bristlecone pine"''"B-Redwood": GO SUB VAL "2000"
1051 IF A$="A" OR A$="a" THEN GO TO VAL "1140"
1052 IF A$="B" OR A$="b" THEN GO TO VAL "1200"
1053 CLS : GO TO VAL "1050"
1060 GO SUB VAL "2030": PRINT "GOOD. DID YOU ALSO KNOW THAT THEGOLDEN GATE HAS A NEIGHBOR COM-MONLY CALLED THE BAY BRIDGE?IT'S SIX MONTHS OLDER (COMPLETEDIN 1936) AND LINKS SAN FRANCISCOWITH OAKLAND. NOW A TRIP TO YEL-LOWSTONE NATIONAL PARK.": GO SUB VAL "2020": GO TO VAL "1080"
1070 GO SUB VAL "2030": PRINT "THAT'S CORRECT. A WHITE CONCRETEMEMORIAL AT PEARL HARBOR MARKSTHE FINAL RESTING PLACE OF THEUSS ARIZONA AND HER CREW. NOW A RETURN TRIP TO SUNNY CALIFORN-IA.": GO SUB VAL "2020": GO TO VAL "1050"
1080 CLS : PRINT "LOCATED MOSTLY IN WYOMING, THEYELLOWSTONE NATIONAL PARK COVERSMORE THAN TWO MILLION ACRES OFWILDERNESS AND HAS SOME 250 AC-TIVE GEYSERS. WHICH ONE HAS HADTHE WORLD'S HIGHEST ERUPTION?"''"A-Old Faithful"''"B-Steamboat Geyser": GO SUB VAL "2000"
1081 IF A$="A" OR A$="a" THEN GO TO VAL "1030"
1082 IF A$="B" OR A$="b" THEN GO TO VAL "1110"
1083 CLS : GO TO VAL "1080"
1090 GO SUB VAL "2010": PRINT "NO. THEODORE ROOSEVELT, OUR 26THPRESIDENT, IS THERE, SPECS ANDALL. TAKE ANOTHER TRY.": GO SUB VAL "2020": GO TO VAL "1130"
1100 GO SUB VAL "2010": PRINT "WHOOPS. TOUGH WAY TO START. OAK-LAND IS TO THE EAST, NOT THENORTH. TRY AGAIN.": GO SUB VAL "2020": GO TO VAL "1010"
1110 GO SUB VAL "2030": PRINT "YEP. STEAMBOAT GEYSER, THOUGHNOT PREDICTABLE AS OLD FAITHFULIS, CAN SPOUT OFF AT NEARLY 400FEET COMPARED WITH FAITHFUL'S180.": GO SUB VAL "2020": GO TO VAL "1130"
1120 GO SUB VAL "2010": PRINT "NEVER BEEN TO HAWAII, HAVE YOU?HONOLULU ISN'T AN ISLAND AT ALL;IT'S HAWAII'S CAPITAL CITY ONTHE ISLAND OF OAHU. TRY AGAIN": GO SUB VAL "2020": GO TO VAL "1020"
1130 CLS : PRINT "WORK ON THE CARVINGS AT MOUNTRUSHMORE, LOCATED IN THE BLACKHILLS OF SOUTH DAKOTA, WAS HALT-ED IN 1941. THE FOUR BUSTS-EACHABOUT 60 FEET HIGH-INCLUDE ALLBUT WHICH OF THE FOLLOWING?"''"A-Thomas Jefferson"''"B-Theodore Roosevelt"''"C-Benjamin Franklin": GO SUB VAL "2005"
1131 IF A$="A" OR A$="a" THEN GO TO VAL "1040"
1132 IF A$="B" OR A$="b" THEN GO TO VAL "1090"
1133 IF A$="C" OR A$="c" THEN GO TO VAL "1160"
1134 CLS : GO TO VAL "1130"
1140 GO SUB VAL "2010": PRINT "NO, SORRY. BRISTLECONE PINES AREAMONG THE WORLD'S OLDEST TREESBUT THEY'RE NOT THE TALLEST. TRYAGAIN.": GO SUB VAL "2020": GO TO VAL "1050"
1150 CLS : PRINT "IN AUGUST 1963, MARTIN LUTHERKING JR'S MARCH FOR RACIALEQUALITY CULMINATED AT WHICHWASHINGTON, D.C.,LANDMARK?"''"A-Washington Monument"''"B-Lincoln Memorial"''"C-Arlington National Cemetery": GO SUB VAL "2005"
1151 IF A$="A" OR A$="a" THEN GO TO VAL "1190"
1152 IF A$="B" OR A$="b" THEN GO TO VAL "1210"
1153 IF A$="C" OR A$="c" THEN GO TO VAL "1240"
1154 CLS : GO TO VAL "1150"
1160 GO SUB VAL "2030": PRINT "THERE YOU GO. ALL FOUR MEN WHOSELIKENESSES ARE ON MOUNT RUSHMORE-GEORGE WASHINGTON, THOMAS JEF-FERSON, ABRAHAM LINCOLN AND THE-ODORE ROOSEVELT-WERE PRESIDENTS,CHOSEN FOR THEIR CONTRIBUTIONSTO FREEDOM AND DEMOCRACY. A TRIPTO HAWAII IS NEXT.": GO SUB VAL "2020": GO TO VAL "1020"
1170 GO SUB VAL "2030": PRINT "GOOD SHOW. MANY PEOPLE THINK THESTATUE OF LIBERTY IS ON ELLISISLAND.": GO SUB VAL "2020": GO TO VAL "1270"
1180 CLS : PRINT "THE STATUE OF LIBERTY, A GIFTFROM FRANCE, WAS DEDICATED IN1886. IT IS LOCATED ON WHICH OFTHE FOLLOWING ISLANDS?"''"A-Liberty Island"''"B-Ellis Island"''"C-Coney Island": GO SUB VAL "2005"
1181 IF A$="A" OR A$="a" THEN GO TO VAL "1170"
1182 IF A$="B" OR A$="b" THEN GO TO VAL "1220"
1183 IF A$="C" OR A$="c" THEN GO TO VAL "1260"
1184 CLS : GO TO VAL "1180"
1190 GO SUB 2010: PRINT "NO. TRY AGAIN": GO SUB VAL "2020": GO TO VAL "1150"
1200 GO SUB VAL "2030": PRINT "THATS THE ONE. REDWOOD NATIONALPARK BOASTS GIANT REDWOODS OVER350 FEET TALL. BRISTLECONE PINESARE OVER 4000 YEARS OLD - AMONGTHE WORLD'S OLDEST - BUT NOT ITSTALLEST, TREES. NOW TO WASHING-TON, D.C.": GO SUB VAL "2020": GO TO VAL "1150"
1210 GO SUB VAL "2030": PRINT "THAT'S IT. FITTINGLY, THIS MONU-MENT TO ONE OF OUR GREAT HUMAN-RIGHTS ACTIVISTS HAS BEEN THESITE OF MANY DEMONSTRATIONS FORRACIAL EQUALITY. NOW TAKE AQUICK RIDE UP TO NEW YORK.": GO SUB VAL "2020": GO TO VAL "1180"
1220 GO SUB VAL "2010": PRINT "TOUGH BREAK. ELLIS ISLAND WASTHE POINT OF ENTRY FOR MILLIONSOF AMERICA'S IMMIGRANTS, BUT ITIS NOT THE HOME OF THE STATUE OFLIBERTY. TRY AGAIN.": GO SUB VAL "2020": GO TO VAL "1180"
1230 GO SUB VAL "2010": PRINT "OH, TOO BAD. AT 1350 FEET, THEWORLD TRADE CENTER IS IN SECONDPLACE. HAVE ANOTHER GO AT THEQUESTION.": GO SUB VAL "2020": GO TO VAL "1270"
1240 GO SUB VAL "2010": PRINT "NOPE. TRY AGAIN": GO SUB VAL "2020": GO TO VAL "1150"
1250 GO SUB VAL "2010": PRINT "ONCE,BUT NO LONGER. AT 1250 FEET, THE SITE OF KING KONG'S LASTSTAND IS NOW THIRD ON THE LIST.TRY AGAIN.": GO SUB VAL "2020": GO TO VAL "1270"
1260 GO SUB VAL "2010": PRINT "VERRRRY FUNNY! A QUICK STROLL INTHE AMUSEMENT PARK, THEN GO BACKAND TRY AGAIN.": GO SUB VAL "2020": GO TO VAL "1180"
1270 CLS : PRINT "TO THE TOP. WHICH OF AMERICA'SSKYSCRAPERS IS THE WORLD'S TALL-EST, INHABITED, MAN-MADE STRUCT-URE?(WE'RE NOT COUNTING ANTENNASOR OTHER ROOF OBJECTS.)"''"A-World Trade Center"''"B-Empire State Building"''"C-Sears Tower, Chicago": GO SUB VAL "2005"
1271 IF A$="A" OR A$="a" THEN GO TO VAL "1230"
1272 IF A$="B" OR A$="b" THEN GO TO VAL "1250"
1273 IF A$="C" OR A$="c" THEN GO TO VAL "1290"
1274 CLS : GO TO VAL "1270"
1280 CLS : PRINT "THE DEVILS TOWER NEAR SUNDANCE,WYOMING. BY THE WAY THIS GROUPOF ROCK COLUMNS ABUTS THE LAND-ING SITE OF THE ALIENS IN ""CLOSEENCOUNTERS OF THE THIRD KIND"".THAT'S ALL, FOLKS."''"A-PLAY AGAIN"''"B-RETURN TO BASIC"''"C-QUIT": GO SUB VAL "2005"
1281 IF A$="A" OR A$="a" THEN GO TO VAL "20"
1282 IF A$="B" OR A$="b" THEN STOP
1283 IF A$="C" OR A$="c" THEN NEW
1284 CLS : GO TO VAL "1280"
1290 GO SUB VAL "2030": PRINT "BINGO! THE SEARS TOWER STANDS1454 FEET HIGH, THE WORLD TRADECENTER 1350,AND THE EMPIRE STATEBUILDING ONLY 1250."''" TO CONTINUE PRESS ANY KEY": PAUSE SIN PI
1300 CLS : LET PERCENT=VAL "INT (SCORE/12*100)": PRINT "CONGRATULATIONS. YOU'RE DONE"''"YOUR SCORE WAS: ";PERCENT;"%"''"HOW DID YOU DO? PRETTY WELL, WEHOPE.BEFORE YOU GO, CAN YOU NAMETHE COUNTRY'S FIRST OFFICIALLYDESIGNATED NATIONAL MONUMENT?";'';"PRESS ANY KEY FOR THE ANSWER.": PAUSE SIN PI: GO TO VAL "1280"
2000 INPUT "PRESS<A>OR<B>THEN<ENTER>";A$: RETURN
2005 INPUT "PRESS<A>,<B>,OR<C>THEN<ENTER>";A$: RETURN
2010 BORDER 2: CLS : SOUND 8,16: SOUND 12,200;13,0: SOUND 7,62: FOR P=0 TO 100: SOUND 0,P: PAUSE 2: NEXT P: SOUND 8,16;9,16;10,16: SOUND 6,25: SOUND 13,0: SOUND 12,70: SOUND 7,7: PAUSE 100: LET SCORE=SCORE-VAL "1": RETURN
2020 PRINT #1;"PRESS <ENTER> TO CONTINUE": PAUSE NOT PI: BORDER 4: CLS : RETURN
2030 CLS : BEEP .25,24: BEEP .25,26: BEEP .25,28: BEEP .5,31: BEEP .25,28: BEEP 1,31: RETURN
9999 RANDOMIZE USR 100: SAVE "NL.B3" LINE 10: LOAD ""
Note: Type-in program listings on this website use ZMAKEBAS notation for graphics characters.



