Quizmaster

Developer(s): Joan Kealy
Date: 1985
Type: Program
Platform(s): TS 2068
Tags: Education

Quizmaster is a multiple-choice quiz program that presents 25 questions per subject area drawn from DATA statements, covering topics such as literature, Z80 assembly mnemonics, and movies. Questions are selected in random order using a Y(25) array to track which items have already been presented, preventing repeats within a session. User answers are padded to a fixed 31-character string for exact string comparison against stored answers, making spelling and spacing critical. The program uses RESTORE with a calculated line number (Q*1000) to branch into the appropriate DATA block for each subject. A subroutine at line 8000 explains the ground rules, and line 9996 provides a reusable “press any key” pause using PAUSE 0.


Program Analysis

Program Structure

The program is organized into clearly separated functional blocks:

  • Lines 1–6: Startup fanfare (BEEP sequence, flashing title screen, ground rules)
  • Lines 8–13: Variable initialization, menu display, and subject selection
  • Lines 15–90: Core quiz loop — data loading, random question selection, answer checking, scoring
  • Lines 1000–1130: DATA block for Literature (25 question/answer pairs)
  • Lines 2000–3025: DATA block for Z80 Mnemonics (25 pairs, split across the 3000 boundary)
  • Lines 4000–4001, 5000–5001: Placeholder stubs for Music and History (not yet implemented)
  • Lines 6000–6130: DATA block for Movies (more than 25 pairs present)
  • Lines 7000–7010: Advisory message subroutine for unimplemented topics
  • Lines 8000–8006, 8020–8030: Ground rules subroutine and replay prompt
  • Line 9996: Reusable “press any key” routine
  • Line 9998: SAVE with auto-run

Subject Selection and RESTORE Technique

Line 15 multiplies the user’s menu choice Q by 1000 (LET Q=Q*1000) and then issues RESTORE Q to jump directly to the DATA block for that subject. This is an elegant technique that maps menu options 1–6 to line numbers 1000, 2000, 3000, 4000, 5000, and 6000 respectively, avoiding a chain of conditionals. Line 13 gates quiz execution: only topics 1 (Literature), 2 (Mnemonics), and 6 (Movies) have data; any other choice routes through the advisory subroutine at 7000 and back to the menu.

Random Non-Repeating Question Selection

The array Y(25) (dimensioned at line 8) serves as a “used question” registry. When a question index X is picked at random (line 35), the inner loop at lines 40–55 scans Y to check for a collision. If X=Y(Z) for any Z, the program loops back to pick a new random index. On a correct answer (line 72), LET Y(X)=X marks that question as used. This is a standard rejection-sampling approach; because Y is initialized to zero by DIM and valid indices start at 1, no separate “reset” is needed.

Answer Matching

Lines 68–70 implement fixed-width answer normalization. A 32-space pad string D$ is appended to the user’s input C$, and the result is truncated to exactly 31 characters: LET C$=C$(1 TO 31). The stored answers in B$(I) are also dimensioned to 31 characters (line 8: DIM B$(25,31)), so the comparison at line 72 is always between two equal-length strings. This means trailing spaces in the stored answer are significant — any stored answer shorter than 31 characters is padded with spaces by DIM, and the user’s input is likewise padded, making the match work correctly provided spelling is exact.

Scoring

The variable SC counts incorrect answers only (incremented at line 74). The final score displayed at line 80 is 100-(SC*4), giving a percentage assuming 25 questions at 4 points each. Variables C and W are initialized at line 2 but never subsequently used in the program — likely vestiges of an earlier correct/wrong counter design.

Bugs and Anomalies

  • Mnemonics DATA split: The Mnemonics DATA block begins at line 2000 but continues past 3000. Line 3001 contains a STOP statement inserted between DATA lines 3000 and 3005. Because BASIC reads DATA sequentially and the READ loop at line 20 only reads 25 pairs, the STOP at 3001 is never executed during normal data reading — but it would halt the program if execution ever fell through to it.
  • Music and History stubs: Lines 4000 and 5000 contain only REM comments and STOP statements. Menu options 4 and 5 are therefore blocked by the guard at line 13, which only allows 1, 2, and 6 through.
  • Movies DATA overflow: The Movies DATA block (lines 6000–6130) contains 27 question/answer pairs, two more than the 25 read by the loop at line 20. The extra pairs (lines 6125 and 6130) are silently ignored.
  • Variable name collision: The loop variable at line 30 is J, but the array holding questions is also named A$, while the user’s input variable is C$. The outer loop counter I (line 20) and inner random picker variable X (line 35) are distinct. However, the array A$() is dimensioned with a second dimension of 100 at line 8, while questions in the DATA statements are padded to fit within that width.
  • Input validation: Line 12 rejects Q<0 OR Q>6 but allows Q=0 to pass that check — however, Q=0 would cause RESTORE 0 and a subsequent failed READ. In practice Q=0 would also fail the check at line 13 and route to the advisory subroutine, avoiding the crash.
  • Replay logic: At line 8020, pressing Enter without typing anything sets R$="" and jumps to line 20, restarting the same topic without re-displaying the menu — likely intentional for rapid repeat testing.

Key BASIC Idioms

LineIdiomPurpose
15RESTORE Q with computed line numberSelects DATA block by topic
68–70Pad-and-truncate to fixed widthNormalizes answer strings for comparison
9996PAUSE 0 followed by RETURNReusable keypress-wait subroutine
6POKE 23658,8Enables CAPS LOCK (bit 3 of FLAGS2 system variable)
8DIM A$(25,100) / DIM B$(25,31)Pre-allocated string arrays for questions and answers

Notable Techniques

The startup sequence at line 1 plays a rising scale of six BEEPs (pitches 1, 11, 21, 31, 41, 51) using a FOR/STEP 10 loop on a single line, demonstrating compact multi-statement line usage. The title screen at lines 3–5 prints “QUIZMASTER!” three times using different PAPER and INK combinations with FLASH 1, creating a visually layered effect without any graphics commands. The POKE 23658,8 at line 6 sets the caps-lock flag so user input arrives in uppercase, which is essential for the exact-match answer checking.

Content

Related Products

Related Articles

Related Content

Image Gallery

Quizmaster

Source Code

    1 FOR A=1 TO 60 STEP 10: BEEP .05,A: NEXT A: BORDER 5: PAPER 7: CLS 
    2 LET C=0: LET W=0: LET SC=0:: REM "QUIZMASTER" FROM TEACHING AND COMPUTERS,10/85 BY J. KERSCHNER, TRANSLATED TO TS2068 AND GREATLY EXPANDED FROM A DOZEN LINES OR SO
    3 PRINT AT 7,9; PAPER 5; INK 0; FLASH 1;"QUIZMASTER!"
    4 PRINT AT 10,9; PAPER 1; INK 5; FLASH 1;"QUIZMASTER!"
    5 PRINT AT 13,9; PAPER 0; INK 7; FLASH 1;"QUIZMASTER!": PAUSE 180: CLS 
    6 POKE 23658,8: GO SUB 8000: CLS 
    8 DIM A$(25,100): DIM B$(25,31): DIM Y(25)
    9 REM MENU
   10 PRINT AT 1,12;"MENU";''''"1. LITERATURE","4. MUSIC";'''"2. MNEMONICS","5. HISTORY";'''"3. FOODS","6. MOVIES"
   12 PRINT ''''" 25 QUESTIONS PER SUBJECT AREA ": INPUT '"CHOOSE BY NUMBER ";Q: IF Q<0 OR Q>6 THEN GO TO 12
   13 IF Q<>1 AND Q<>2 AND Q<>6 THEN GO SUB 7000: GO TO 10
   15 CLS : LET Q=Q*1000: RESTORE Q
   20 FOR I=1 TO 25: READ A$(I),B$(I): NEXT I
   30 FOR J=1 TO 25
   35 LET X=INT (RND*25)+1
   40 FOR Z=1 TO 25
   50 IF X=Y(Z) THEN GO TO 35
   55 NEXT Z
   60 PRINT : PRINT A$(X)
   68 LET D$="                                "
   70 INPUT C$: LET C$=C$+D$: LET C$=C$(1 TO 31)
   72 IF C$=B$(X) THEN PRINT ; PAPER 5;"YOU'RE RIGHT!": LET Y(X)=X: PAUSE 180: GO TO 76
   74 PRINT INK 9; PAPER 3;"SORRY! ";B$(X): LET SC=SC+1: PAUSE 180
   76 NEXT J
   78 CLS 
   80 PRINT PAPER 6;"OUT OF 25 QUESTIONS, YOU MISSED ";SC;''"YOUR GRADE IS ";100-(SC*4)
   85 GO SUB 8020
   90 GO TO 7
 1000 DATA "IN WHAT BOOK WAS LONG JOHN      SILVER A CHARACTER?","TREASURE ISLAND"
 1005 DATA "WHICH DRAMATIST WROTE""MACBETH""?","WILLIAM SHAKESPEARE"
 1010 DATA "WHICH IS THE COMMONEST METER IN ENGLISH POETRY?","IAMBIC PENTAMETER"
 1015 DATA "WHO WAS JULIET'S LOVER?","ROMEO"
 1020 DATA "FALSTAFF WAS FORSAKEN IN WHICH  PLAY?","HENRY V"
 1025 DATA "WHO WAS THE AUTHOR OF ""DUNE""?","FRANK HERBERT"
 1030 DATA "CAMELOT WAS THE HOME OF WHAT    KING?","ARTHUR"
 1035 DATA "PROUST WAS AFFLICTED WITH WHAT  DISEASE?","ASTHMA"
 1040 DATA "WITH WHOM WAS LORD BYRON SAID TOHAVE HAD AN INCESTUOUS RELATION-SHIP?","HIS HALF-SISTER, AUGUSTA"
 1045 DATA "WHO WROTE ""MADAME BOVARY""?","GUSTAVE FLAUBERT"
 1050 DATA "THE TITLE OF STYRON'S STORY OF  SLAVE REBELLION?","THE CONFESSIONS OF NAT TURNER"
 1055 DATA "REAL NAME OF ISAAC DINESEN?","KAREN BLIXEN"
 1060 DATA "AUTHOR OF ""WEST WITH THE NIGHT?","BERYL MARKHAM"
 1065 DATA "POOR YORICK WAS A SKULL IN WHAT PLAY?","HAMLET"
 1070 DATA "BANQUO WAS ""THE MAN WHO CAME TO DINNER"" IN?","MACBETH"
 1075 DATA "THREAD WAS A THREAT IN?","THE DRAGONRIDERS OF PERN"
 1080 DATA "AUTHOR OF ""ANCIENT EVENINGS""?","NORMAN MAILER"
 1085 DATA "AUTHOR OF NARRATIVE POEM,      ""ULYSSES""?","ALFRED TENNYSON"
 1090 DATA "AUTHOR OF NOVEL,""ULYSSES""?","JAMES JOYCE"
 1100 DATA "MAIN CHARACTER IN ""THE ILIAD""?","ULYSSES"
 1110 DATA "CITY VANQUISHED BY WOODEN HORSE?","TROY"
 1115 DATA "AUTHOR OF ""2001: SPACE ODYSSEY""?","ARTHUR CLARKE"
 1120 DATA "CREATURE-CHARACTERS IN ""WATER-  SHIP DOWN""?","RABBITS"
 1125 DATA "SITE OF GREATEST EVIL IN THE    HOBBIT STORIES?","MORDOR"
 1130 DATA "NON DE PLUME OF SAMUEL CLEMENS?","MARK TWAIN"
 2000 DATA "NO OPERATION","NOP"
 2005 DATA "LOAD C REG WITH CONTENTS OF     ADDR. IN HL","LD C,(HL)"
 2010 DATA "HEX & DEC FOR RETURN TO BASIC","C9 & 201"
 2015 DATA "LOAD A INTO ADDRESS IN BC","LD (BC),A"
 2020 DATA "LOGICAL EXCLUSIVE OR","XOR"
 2025 DATA "LOAD, INCREMENT, & REPEAT","LDIR"
 2030 DATA "PUSH STACK ADDR. ONTO DE REG.","PUSH DE"
 2035 DATA "EXCHANGE 2 BYTES TOP STACK WITH HL REG.","EX (SP),HL"
 2040 DATA "NAME 2 16-BIT INDEX REGS.","IX AND IY"
 2045 DATA "DECREMENT & JUMP IF NOT ZERO","DJNZ"
 2050 DATA "JUMP TO MEMORY ADDR. HELD IN HL","JP (HL)"
 2055 DATA "ADD WITH CARRY TO ACCUMULATOR","ADC A"
 2060 DATA "RETURN FROM NON-MASKABLE INTER- RUPT","RETN"
 2065 DATA "COMPARE","CP"
 2070 DATA "ROTATE RIGHT CIRCULAR","RRC"
 2075 DATA "RETURN FROM INTERRUPT","RETI"
 2080 DATA "OUTPUT, DECREMENT,REPEAT","OTDR"
 2085 DATA "COMPLEMENT CARRY FLAG","CCF"
 2090 DATA "OUTPUT,INCREMENT,REPEAT","OTIR"
 2095 DATA "ROTATE ACCUMULATOR LEFT THROUGH CARRY","RLA"
 3000 DATA "ROTATE ACCUMULATOR RIGHT THROUGHCARRY","RRA"
 3001 STOP 
 3005 DATA "SHIFT LEFT ARITHMETIC","SLA"
 3010 DATA "SHIFT RIGHT LOGICAL","SRL"
 3015 DATA "COMPARE, DECREMENT, REPEAT","CPDR"
 3020 DATA "COMPLEMENT ACCUMULATOR","CPL"
 3025 DATA "DISABLE INTERRUPTS","DI"
 3030 DATA "NEGATE (TWOS COMPLEMENT) ACCUMU-LATOR","NEG"
 4000 REM QUESTIONS ON MUSIC
 4001 STOP 
 5000 REM QUESTIONS ON HISTORY
 5001 STOP 
 6000 DATA "HENRY FONDA WAS A JOAD IN?","THE GRAPES OF WRATH"
 6005 DATA "THE HIGHEST MOVIEDOM AWARDS?","THE ACADEMY AWARDS"
 6010 DATA "WHO HAS ARTISTIC CONTROL OF ANY MOVIE?","THE DIRECTOR"
 6015 DATA "WON MOST ACADEMY AWARDS?","KATHARINE HEPBURN"
 6020 DATA "KNUTE ROCKNE WAS PLAYED BY?", "PAT O'BRIEN"
 6025 DATA "ACTOR WHO WAS THE GIPPER","RONALD REAGAN"
 6030 DATA "DISNEY'S LONG-HAIRED ANIMATION?","FANTASIA"
 6035 DATA "MOST POPULAR MOVIE MOPPET EVER","SHIRLEY TEMPLE"
 6040 DATA "MALE STAR WHO DIED OF AIDS IN   1986","ROCK HUDSON"
 6045 DATA "TWICE MARRIED TO RICHARD BURTON?","ELIZABETH TAYLOR"
 6050 DATA "DUBBED POOR MAN'S ELIZABETH     TAYLOR?","JOAN COLLINS"
 6055 DATA "BEST KNOWN WEREWOLF?","LON CHANEY, JR."
 6060 DATA "BEST KNOWN TARZAN?","JOHNNY WEISMULLER"
 6065 DATA "PREMIER WATER BALLERINA?","ESTHER WILLIAMS"
 6070 DATA "PREMIER JAMES BOND?","SEAN CONNERY"
 6075 DATA "MOST RECENT JAMES BOND?","TIMOTHY DALTON"
 6080 DATA "OLDEST JAMES BOND?","ROGER MOORE"
 6085 DATA "MOVIE STAR SHOPPING LANE?","RODEO DRIVE"
 6090 DATA "STUDIO FAMOUS FOR MUSICALS?","MGM"
 6095 DATA "MGM STANDS FOR?","METRO-GOLDWYN-MAYER"
 6100 DATA "MOST SHOWN MOVIE ON TV?","THE WIZARD OF OZ"
 6105 DATA "SILENT STAR ACCUSED OF MURDER?","FATTY ARBUCKLE"
 6110 DATA "STAR-DIRECTOR OF ""CITIZEN KANE""?","ORSON WELLES"
 6115 DATA "SWEDISH DIRECTOR MOST FAMOUS?","INGMAR BERGMAN"
 6120 DATA "DANCER WITH LONGEST CAREER?","FRED ASTAIRE"
 6125 DATA "FIRST LEAD IN ""A STAR IS BORN""?","JANET GAYNOR"
 6130 DATA "RHETT BUTLER IN ""GONE WITH THE WIND""?","CLARK GABLE"
 7000 CLS : PRINT "ENTER 25 DATA STATEMENTS FOR THETOPIC OR CHANGE TOPIC TO ONE YOUARE OR WANT TO BE AN EXPERT ON."
 7001 FLASH 1: PRINT '"TO SEE HOW EFFECTIVE QUIZ FORMATIS, TAKE EITHER QUIZ #1         (LITERATURE) OR QUIZ #6 (MOVIES) TWICE AND COMPARE YOUR SCORES! EVEN #2 (MNEMONICS) SHOWS LEAP!"
 7002 FLASH 0: PRINT ''"(1) THIS IS A TEACHING TOOL TO  BUILD A KNOWLEDGE BASE IN SUB-  SETS OF AN ACADEMIC COURSE";'"OR"
 7004 PRINT "(2) THIS IS A SELF-REVIEW FOR   ANY SUBJECT AREA WHETHER YOU AREA  FORMAL STUDENT OR A HOBBYIST--IMPORTANT STUFF LIKE HAM RADIO LICENSE OR COMMERCIAL DRIVER'S  LICENSE."
 7006 GO SUB 9996
 7007 CLS : PRINT '"YOU HAVE A POWERFUL TEMPLATE    HERE FOR A SAT TEST COURSE FREE FOR THE ENTRY.OR GRE OR NTE OR  MILLER'S ANALOGIES. JUST BUY    THE PRACTICE TEXT AT ANY COLLEGEBOOKSTORE.  YOU WILL NEED TO    ALTER LINE 13 AS YOU COMPLETE   TOPIC TESTS."
 7008 PRINT '"CREATE AN APPROPRIATE MENU AT   LINE 10."
 7009 GO SUB 9996
 7010 CLS : RETURN 
 8000 PRINT "GROUND RULES:";''"NOTE THAT FIRST AND LAST NAMES  ARE EXPECTED FOR ANSWERS, NO    INITIALS";''"OF COURSE, COMPUTERS ARE NOT    TOLERANT OF INCORRECT SPELLING."
 8001 PRINT "AND ARBITRARY ABOUT   ANSWERS;  BUT SO PATIENT!"
 8005 GO SUB 9996
 8006 CLS : RETURN 
 8020 INPUT "ANOTHER TOPIC? Y/N ";R$ : IF R$="" THEN GO TO 20
 8025 IF R$="Y" THEN RETURN 
 8030 IF R$="N" THEN STOP 
 9000 REM PUBLIC DOMAIN PER JOAN KEALY--LEGIT.  ORIGINAL APPLE   BASIC NO MORE THAN KERNEL, OFFERED TO TEACHERS FOR CLASSRM USE. THIS SORT OF A PROGRAM PERMITS  STUDENTS TO WRITE TEST AS CLASS- ROOM ASSIGNMENT ALSO.
 9996 PRINT AT 21,7;"PRESS ANY KEY": PAUSE 0: RETURN 
 9997 STOP 
 9998 CLEAR : SAVE "QUIZMSTR" LINE 1

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

Scroll to Top