1 DEF SEG=0: IF PEEK(&H1F2)<> 80 OR PEEK(&H1F3)<> 7 THEN NEW
10 GOTO 10000
20 IF NOT PCJR THEN DEF SEG=0: POKE &H417,PEEK(&H417) OR &H20: DEF SEG
30 KB%=-1: RRND=RND: KB$=INKEY$: GOSUB 80: IF KB$="" THEN RETURN ELSE KB%=ASC(KB$)
40 KB$=INKEY$: IF KB$<>"" THEN GOSUB 80: GOTO 40 ELSE RETURN
50 KB.SPACE=FRE(" "): GOSUB 40
60 KB.I%=INT(KB.SEC*18.2)
70 RRND=RND: DEF SEG=0: KB.II%=PEEK(&H46C): WHILE KB.II%=PEEK(&H46C): WEND: GOSUB 20: IF KB%<>-1 THEN RETURN ELSE KB.I%=KB.I%-1: IF KB.I%>0 THEN 70 ELSE RETURN
80 IF KB$="" THEN RETURN ELSE IF ASC(KB$)<>19 OR PCJR THEN RETURN
90 KB$="": SND.MODE=(SND.MODE+1) MOD 2: DEF SEG=0: POKE &H40F,((PEEK(&H40F) AND &HFC) OR ((SND.MODE+1) AND 3)): DEF SEG: RETURN
110 CC.Y%=C.Y%-8*(C.N%-1): GET (C.X%,CC.Y%)-STEP(23,C.N%*8-1),CAKE.V%: PUT (C.X%,CC.Y%),CAKE.V%,XOR: PUT (C.X%+C.DX%,CC.Y%+C.DY%),CAKE.V%,XOR: RETURN
120 DSP.L%=LEN(DSP.CS$): IF DSP.L%<=0 THEN RETURN ELSE FOR DSP.CI%=1 TO DSP.L%: DSP.C$=MID$(DSP.CS$,DSP.CI%,1): GOSUB 130: DSP.X%=DSP.X%+16: NEXT DSP.CI%: RETURN
130 LINE (DSP.X%,DSP.Y%)-STEP(15,15),0,BF: DSP.I%=INSTR(DSP.FCS$,DSP.C$): IF DSP.I%<=0 THEN LOCATE (DSP.Y%+7)\8+1,(DSP.X%+7)\8+1: PRINT DSP.C$;: RETURN
150 DSP.VI#(4)=DSP.V#(DSP.T%+4): DSP.VI#(5)=DSP.V#(DSP.T%+5): DSP.VI#(6)=DSP.V#(DSP.T%+6): DSP.VI#(7)=DSP.V#(DSP.T%+7): DSP.VI#(8)=DSP.V#(DSP.T%+8): PUT (DSP.X%,DSP.Y%),DSP.VI#: RETURN
8000 IF SND.MODE=0 THEN RETURN
8010 FOR I=1 TO 2: FOR J=0 TO 6: SOUND 2000-J*100,0.2: SOUND 32767,0.4: NEXT J: SOUND 1200,0.2: SOUND 32767,0.4: FOR J=0 TO 6: SOUND 1200+J*100,0.2: SOUND 32767,0.4: NEXT J: SOUND 2000,0.2: SOUND 32767,0.4: NEXT I: KB.SEC=1: GOSUB 60: RETURN
8020 IF SND.MODE=0 THEN RETURN ELSE SOUND 200,12: RETURN
8030 IF SND.MODE=0 THEN RETURN ELSE FOR SND.I%=1 TO 3: SOUND 600+RND*600,0.5: SOUND 32767,0.5: NEXT SND.I%: SOUND 1200+RND*600,0.5: RETURN
8040 IF SND.MODE=0 THEN RETURN ELSE SOUND 300,1: RETURN
8050 IF SND.MODE=0 THEN RETURN ELSE FOR SND.I%=1 TO 4: SOUND 600+SND.I%*100,0.5: SOUND 32767,0.5: NEXT SND.I%: RETURN
8060 IF SND.MODE=0 THEN RETURN ELSE SOUND 3000,0.5: SOUND 32767,3: RETURN
8070 IF SND.MODE=0 THEN RETURN ELSE SOUND 400+RND*600,0.5: SOUND 32767,0.05: RETURN
8080 IF SND.MODE=0 THEN RETURN ELSE SOUND 3000-40*(DSP.Y%-65),0.2: SOUND 32767,0.2: RETURN
10000 DEF SEG=&HF000: PCJR=PEEK(&HFFFE)=&HFD: SND.MODE=1: DEF SEG=0: I=PEEK(&H40F) AND 3: IF I>0 THEN SND.MODE=I-1: IF SND.MODE=2 THEN SOUND ON ELSE IF PCJR THEN SOUND OFF
10010 ON ERROR GOTO 62000: GOSUB 10540: NEG=0: GOSUB 62120: SP$="": DIM PLUS(30): DIM DVD(100): DIM P.V(16): SCREEN 1,0: KEY OFF: CLS: GOSUB 11360
10020 GOSUB 10290
10030 GOSUB 20: IF KB%=-1 THEN 10030 ELSE IF KB%>96 THEN KB%=KB%-32
10040 KB$=CHR$(KB%): IF KB$<>"A" AND KB$<>"S" AND KB$<>"M" AND KB$<>"D" THEN 10030
10270 FOR I = 2 TO 10: PUT(X%,Y%),DVD: X%=X%+32: NEXT I: FOR J=2 TO 6: Y%=Y%+32: X%=0: FOR I=1 TO 10: PUT (X%,Y%),DVD: X%=X%+32: NEXT I: NEXT J: KB.SEC=2: GOSUB 60: RETURN
10720 C.RX%=PP.DIG+M.ER-1: C.Y%=PP.Y%: GOSUB 11170: C.R$=MID$(PP.C$,PP.DIG+M.ER-1,1): IF C.C$<>C.R$ THEN GOSUB 10930 ELSE GOSUB 8000
10730 C.RX%=M.AND: C.Y%=1:C.C$=MID$(LOP$,M.AND,1): C.CL%=1: GOSUB 11310: PP.DIG=PP.DIG+1: M.AND=M.AND+1: IF M.AND<=LEN(LOP$) AND PP.DIG+M.ER-1<=LEN(PP.C$) THEN 10710
10740 IF PP.DIG+M.ER-1<=LEN(PP.C$) THEN 10720
10750 C.RX%=M.ER: C.Y%=2: C.C$=MID$(ROP$,M.ER,1): C.CL%=1: GOSUB 11310: M.ER=M.ER+1: PP.C$=" "+A.ROP$: PP.Y%=5: PP.DIG=1: IF M.ER<=LEN(ROP$) THEN 10700
10760 IF M.ER=2 THEN 10810
10770 PP.DIG=1: PP.C$=A.ROP$: IF OP%=3 THEN PP.C$=" "+A.ROP$
10790 GOSUB 11170: C.R$=MID$(ANS$,PP.DIG,1): IF C.C$<>C.R$ THEN C.C$=MID$(ANS$,PP.DIG,1): GOSUB 10930 ELSE GOSUB 8000
10800 C.Y%=4: C.C$=MID$(A.LOP$,PP.DIG,1): C.CL%=1: GOSUB 11310: C.Y%=5: C.C$=MID$(PP.C$,PP.DIG,1): GOSUB 11310: PP.DIG=PP.DIG+1: IF PP.DIG<=LEN(ANS$) THEN 10780
10810 IF NOT DIG.ERR THEN GOSUB 11210: RETURN ELSE LOCATE 12,3: PRINT "Repeat": PRINT: PRINT TAB(3) "this": PRINT: PRINT TAB(3) "problem": PRINT: PRINT TAB(3) "( Y / N ) ?"
10820 GOSUB 40
10830 GOSUB 20: IF KB%=-1 THEN 10830 ELSE KB$=CHR$(KB%): IF KB$="Y" OR KB$="y" THEN 10670 ELSE IF KB$="N" OR KB$="n" THEN WRONG=WRONG+1: RETURN ELSE IF KB%=27 THEN 10130 ELSE 10830
11020 LOP$=STR$(LOP%): ROP$=STR$(ROP%): IF OP%=1 OR OP%=2 THEN: A.LOP$=LOP$: A.ROP$=ROP$
11030 IF OP%=3 THEN A.LOP$=STR$((LOP%*(ROP% MOD 10))): A.ROP$=STR$((LOP%*(ROP%\10)))
11040 IF OP%=4 THEN DIV.P$=ROP$+" "+LOP$: PS1$=STR$((ANS%\10)*ROP%): PS2$=STR$((ANS% MOD 10)*ROP%): A.LOP$=STR$((LOP%\10)-(ROP%*(ANS%\10))): A.ROP$="0": IF ANS%<10 THEN PS1$=STR$(ANS%*ROP%)
11180 C.C$=MID$("? ",FLASH%+1,1): GOSUB 11310: KB.SEC=0.2: GOSUB 60: FLASH%=(FLASH%+1) MOD 2: IF KB%<>-1 THEN 11190 ELSE FLASH.CNT%=FLASH.CNT%-1: IF FLASH.CNT%>0 THEN 11180 ELSE 11390