Four Programs

Developer(s): Earl Dunnington
Type: Program
Platform(s): TS 2068

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:

  1. TOS Tools #1–5 (lines 100–9981): Printer/disk utilities for the OS-64 cartridge environment
  2. Artificial Intelligence Demo (lines 1–9999): Animal-identification expert system with forward chaining
  3. 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 string C$ 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;1 and PRINT *#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 a FOR N=1 TO LEN U$ STEP 256 loop.
  • Keyboard polling without INPUT: Tool #3 polls PEEK 23560 (the last character pressed) after setting and waiting on POKE 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 2361 to 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, and G store line numbers (9050, 9010, 8990) to allow GO SUB E, GO SUB F, and GO 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) where A and B are set before each call.
  • RESTORE to specific line numbers (9510–9630) before each GO TO C (line 60) reloads the correct DATA record for each decision node without requiring a table lookup.
  • Line 9060 is a bare RETURN used as the target of GO SUB N1 or GO SUB I1 when 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 BEEP calls.
  • LET PERCENT=VAL “INT (SCORE/12*100)”: This is an anomaly — VAL on a string containing INT(...SCORE...) cannot evaluate the variable SCORE at runtime; VAL only parses numeric literals. This line will produce 0 or cause an error. The programmer likely intended LET PERCENT=INT (SCORE/12*100).
  • Line 1190 calls GO SUB 2010 without VAL, 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 / VariablePurpose
65523Interface type byte for printer
65525Line width + left margin tab
65510Line feed character (13 or 0)
65511Carriage return character (10 or 0)
RANDOMIZE USR 15623Apply printer settings in OS-64
PEEK 23560Last keypress character code
POKE 23611Keyboard debounce counter
USR 2361Screen scroll machine code routine

Content

Appears On

Related Products

Related Articles

Related Content

Image Gallery

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.

Scroll to Top