10 'CLEAR MEMORY ABOVE 45000 FOR ASSEMBLY LANGUAGE ROUTINES 20 'TURN KEY DISPLAY OFF AND DISABLE THE FUNCTION KEYS 30 'SWITCH TO HIGH RESOLUTION GRAPHICS 40 ' 50 CLEAR,45000!:KEY OFF:FOR I=1 TO 16:KEY I,"":NEXT I 60 CLS:LOCATE 15,10:PRINT"LOADING........" 70 DEFINT A-Z:COLOR 2,0:LOCATE ,,0 'GREEN, NO CURSOR 75 DEF FNTIME!=VAL(LEFT$(TIME$,2))*3600+VAL(MID$(TIME$,4,2))*60+VAL(RIGHT$(TIME$,2)) 76 X=2:T0!=FNTIME! 'CHECK TIMING 77 IF T0!=FNTIME! THEN GOTO 77 :ELSE T0!=FNTIME! 78 FOR T=0 TO 10000:IF T0!+X==AVGNUM THEN WATE=TRUE 1260 GOSUB 4640:COMAND=1:CALL SEND!(COMAND):COMAND=0 1270 FOR I=0 TO 100/(BAUD+1):NEXT I 1280 CALL CKUART!(COMAND,EROR):IF COMAND=FRTCHG THEN COMAND=0:EROR=0:GOTO 1140 1290 IF COMAND<>0 OR EROR<>0 THEN COMAND=0:EROR=0:GOTO 1270 1300 IF X$<>"" THEN GOTO 1470 1310 ' 1320 '*****START OF MAIN LOOP*************************** 1330 ' 1340 COUNT=0:COMAND=0:EROR=0:FAST=FALSE:I!=FRE(""):IF WATE=TRUE THEN GOTO 1360 1350 IF Y1Y2>0 AND MODE<4 THEN CALL SEND!(REQMEM):WATE=TRUE 1360 CALL CKUART!(COMAND,EROR) 1370 IF COMAND=114 AND WATE=TRUE THEN GOTO 1400 1380 IF COMAND=115 AND WATE=TRUE THEN COMAND=0:PUT(0,161),S,PRESET 1390 IF COMAND<>0 OR EROR<>0 THEN COMAND=0:GOTO 1140 :ELSE X$="":GOTO 1470 1400 WATE=FALSE:PUT(0,161),T,PRESET 1410 CALL REQ!(Y1(0),Y2(0),Y1Y2,TRIG,EROR):PUT(0,161),BLANK8,PRESET 1420 IF EROR=FALSE THEN GOTO 1430 :ELSE GOTO 1470 1430 IF TRIG=1 THEN MODE=MODE AND 7 1440 PUT(0,161),BLANK8,PRESET:IF AVGY1=TRUE OR AVGY2=TRUE THEN GOTO 1650 1450 X$="":GOSUB 1750 1460 ' CHECK FOR COMMANDS AND CLEAR KEYBOARD BUFFER 1470 GOSUB 3220:IF X$="" THEN GOTO 1590 1480 IF LEN(X$)<>2 THEN GOTO 1510 1490 X=ASC(RIGHT$(X$,1))-31:IF X<0 THEN GOTO 1530 1500 ON X GOSUB 5070,5110,4350,4420,4830,4210,4240,4760,2180,2180,6850,6850 1510 X=ASC(X$)-27:IF X<0 THEN GOTO 1530 1520 ON X GOSUB 3260,3270,2360,2370 1530 IF X$="?" OR X$="/" THEN GOTO 810 1540 IF X$=HOME$ AND PNT=3 THEN OFFSETY1=0:GOSUB 1750:COMAND=Y1ZERO:GOTO 1580 1550 IF X$=HOME$ AND PNT=7 THEN OFFSETY2=0:GOSUB 1750:COMAND=Y2ZERO:GOTO 1580 1560 IF X$=HOME$ AND PNT=8 THEN HOFFSET=0:GOSUB 1750:X$="":GOTO 1160 1570 IF X$=HOME$ AND PNT=12 THEN COMAND=TRGZERO:GOTO 1580::ELSE X$="":GOTO 1470 1580 CALL SEND!(COMAND):EROR=FALSE:COMAND=0:X$="":GOTO 1160 1590 IF Y1Y2=0 THEN GOSUB 1750:Y1Y2=-1 1600 IF Y1Y2=-1 THEN GOSUB 1820 1610 IF EROR=TRUE THEN EROR=FALSE:GOTO 1140::ELSE GOTO 1340 1620 ' 1630 '*****END OF MAIN LOOP***************************** 1640 ' 1650 AVGCNT=AVGCNT+1:IF AVGCNT<=AVGNUM THEN GOTO 1670 1660 WATE=TRUE:GOTO 1470 1670 LOCATE 21,20:PRINT"average #";AVGCNT,"press F1 to restart averaging" 1680 IF AVGY1=TRUE THEN CALL AVG!(Y1(0),Y1SUM(0),AVGCNT) 1690 IF AVGY2=TRUE THEN CALL AVG!(Y2(0),Y2SUM(0),AVGCNT) 1700 IF AVGCNT=AVGNUM THEN WATE=TRUE 1710 GOTO 1450 1720 ' 1730 '*****PLOT SCREEN SUBROUTINE*********************** 1740 ' 1750 LOCATE 20,66:IF TRIG=1 THEN PRINT" triggered ":GOTO 1780 1760 IF MODE=12 THEN GOTO 1780 1770 IF MODE>1 THEN PRINT" manual trigger" :ELSE PRINT" no trigger " 1780 IF MEM1=TRUE THEN LOCATE 22,55:PRINT MEM1$;SPC(11-LEN(MEM1$));"=":LOCATE 22,67:PRINT SEN$(M1SEN);";";RATE$(M1RATE) 1790 IF MEM2=TRUE THEN LOCATE 23,55:PRINT MEM2$;SPC(11-LEN(MEM2$));"=":LOCATE 23,67:PRINT SEN$(M2SEN);";";RATE$(M2RATE) 1800 CALL GRAT!(GRATON) 1810 GOSUB 3220 1820 IF Y1COUP<>0 THEN CALL PLOT!(Y1(0),LYNE,INVERTY1,OFFSETY1,HOFFSET,X1,X2) 1830 IF Y2COUP<>0 THEN CALL PLOT!(Y2(0),LYNE,INVERTY2,OFFSETY2,HOFFSET,X3,X4) 1840 IF MEM1=TRUE THEN CALL PLOT!(M1(0),LYNE,INVERTM1,OFFSETM1,HOFFSETM1,TRUE,TRUE) 1850 IF MEM2=TRUE THEN CALL PLOT!(M2(0),LYNE,INVERTM2,OFFSETM2,HOFFSETM2,TRUE,TRUE) 1860 IF TRIG=0 AND RATE<14 THEN LOCATE 2,20:PRINT"ERROR.....No Trigger" 1870 IF FAST=TRUE THEN RETURN 1880 IF C1Y=3 AND C2Y=3 THEN RETURN :ELSE LOCATE 22,10 1890 IF C1=X1 THEN YC1!=(Y1(C1)-128)*Y1SCALE!:GOTO 1910 1900 IF C1=X3 THEN YC1!=(Y2(C1)-128)*Y2SCALE! :ELSE GOTO 1920 1910 YC!=YC1!:C=C1:GOSUB 2110:GOTO 1930 1920 PRINT SPC(25):LOCATE 24,10:PRINT SPC(25) 1930 LOCATE 23,10:IF C2=X2 THEN YC2!=(Y1(C2)-128)*Y1SCALE!:GOTO 1950 1940 IF C2=X4 THEN YC2!=(Y2(C2)-128)*Y2SCALE! :ELSE GOTO 1960 1950 YC!=YC2!:C=C2:GOSUB 2110:GOTO 1970 1960 PRINT SPC(25):LOCATE 24,10:PRINT SPC(25):RETURN 1970 IF X1=-1 AND X3=-1 THEN RETURN 1980 LOCATE 24,10:YC!=YC1!-YC2!:C=C1-C2:GOSUB 2110 2020 LOCATE 24,35:IF C=0 THEN PRINT" ";:RETURN 2030 PRINT"(";:LOCATE 24,36 2060 F!=1/(ABS(C)*FSCALE!*RSCALE!) 'CONVERT TO MHz 2070 IF F!>999.999 THEN PRINT USING"#.####";F!/1000;:PRINT" GHz )";:RETURN 2080 IF F!<.001 THEN PRINT USING"###.###";F!*1000000!;:PRINT" Hz )";:RETURN 2090 IF F!<1 THEN PRINT USING"###.###";F!*1000;:PRINT" KHz )";:RETURN 2100 PRINT USING"###.###";F!;:PRINT" MHz )";:RETURN 2110 IF ABS(YC!)<1000 THEN PRINT USING"+###.#";YC!;:PRINT" mV";:GOTO 2130 2120 PRINT USING"+##.##";YC!/1000;:PRINT" V "; 2130 PRINT SPC(3):PRINT USING"+####.##";C*RSCALE!; 2140 PRINT R$;:GOSUB 3220:RETURN 2150 ' 2160 '***** F9/F10 SELECT SUBROUTINES******************* 2170 ' 2180 EROR=FALSE:COUNT=0 2190 X$=INKEY$:IF X$<>"" THEN GOTO 2190 2200 ON POINTER(PNT,2) GOSUB 2220,2230,2240,2240,2250,2260,2260,2270,2270,2270 2210 GOTO 2280 2220 PUT (POINTER(PNT,0),POINTER(PNT,1)),BLANK1,XOR:RETURN 2230 PUT (POINTER(PNT,0),POINTER(PNT,1)),BLANK2,XOR:RETURN 2240 PUT (POINTER(PNT,0),POINTER(PNT,1)),BLANK3,XOR:RETURN 2250 PUT (POINTER(PNT,0),POINTER(PNT,1)),BLANK5,XOR:RETURN 2260 PUT (POINTER(PNT,0),POINTER(PNT,1)),BLANK6,XOR:RETURN 2270 PUT (POINTER(PNT,0),POINTER(PNT,1)),BLANK8,XOR:RETURN 2280 IF X=10 THEN PNT=PNT+1:IF PNT>13 THEN PNT=0 2290 IF X=9 THEN PNT=PNT-1:IF PNT<0 THEN PNT=13 2300 ON POINTER(PNT,2) GOSUB 2220,2230,2240,2240,2250,2260,2260,2270,2270,2270 2310 X$="":GOSUB 3220:IF X$="" THEN RETURN 1220 2320 IF ASC(RIGHT$(X$,1))-31=X THEN GOTO 2180 :ELSE RETURN 1220 2330 ' 2340 '*****UP/DOWN ARROW SUBROUTINES******************* 2350 ' 2360 ARROW=1:GOTO 2380 2370 ARROW=-1 2380 PUT(0,161),BLANK8,PRESET:X$="":IF MODE<5 THEN GOSUB 1800 2390 CMDCNT=0:COUNT=1:EROR=FALSE:T=T3:RETURN 2400 2400 ON POINTER(PNT,2) GOSUB 2220,2230,2240,2240,2250,2260,2260,2270,2270,2270 2410 ON PNT+1 GOTO 2420,2440,2460,2510,2570,2590,2610,2660,2940,2720,2770,2790,2810,2900 2420 COMAND=Y1COUPLG:Y1COUP=Y1COUP+1:Y1COUP=Y1COUP MOD 5:IF Y1COUP=3 THEN Y1COUP=4 2430 CMDCNT=CMDCNT+1:GOTO 3030 2440 INVERTY1=NOT INVERTY1:IF MODE<5 THEN GOSUB 1800 2450 CMDCNT=0:GOTO 3030 2460 IF ARROW=-1 THEN COMAND=Y1SENDN :ELSE COMAND=Y1SENUP 2470 Y1SEN=Y1SEN-ARROW:IF Y1SEN>9 THEN Y1SEN=9 2480 IF Y1SEN<0 THEN Y1SEN=0 2490 CMDCNT=CMDCNT+1:IF CMDCNT>9 THEN CMDCNT=9 2500 GOTO 3030 2510 COMAND=Y1POS:IF COUNT>15 THEN COUNT=15 2520 OFFSETY1=OFFSETY1+ARROW*COUNT 2530 IF OFFSETY1>=127 THEN OFFSETY1=127:GOTO 2550 2540 IF OFFSETY1=<-128 THEN OFFSETY1=-128 2550 Y=OFFSETY1:IF MODE<5 THEN GOSUB 1800 2560 GOTO 3030 2570 COMAND=Y2COUPLG:Y2COUP=Y2COUP+1:Y2COUP=Y2COUP MOD 5:IF Y2COUP=3 THEN Y2COUP=4 2580 CMDCNT=CMDCNT+1:GOTO 3030 2590 INVERTY2=NOT INVERTY2:IF MODE<5 THEN GOSUB 1800 2600 CMDCNT=0:GOTO 3030 2610 IF ARROW=-1 THEN COMAND=Y2SENDN :ELSE COMAND=Y2SENUP 2620 Y2SEN=Y2SEN-ARROW:IF Y2SEN>9 THEN Y2SEN=9 2630 IF Y2SEN<0 THEN Y2SEN=0 2640 CMDCNT=CMDCNT+1:IF CMDCNT>9 THEN CMDCNT=9 2650 GOTO 3030 2660 COMAND=Y2POS:IF COUNT>15 THEN COUNT=15 2670 OFFSETY2=OFFSETY2+ARROW*COUNT 2680 IF OFFSETY2>=127 THEN OFFSETY2=127:GOTO 2700 2690 IF OFFSETY2=<-128 THEN OFFSETY2=-128 2700 Y=OFFSETY2:IF MODE<5 THEN GOSUB 1800 2710 GOTO 3030 2720 IF ARROW=-1 THEN COMAND=TBASEDN :ELSE COMAND=TBASEUP 2730 RATE=RATE-ARROW:IF RATE>28 THEN RATE=28 2740 IF RATE<0 THEN RATE=0 2750 CMDCNT=CMDCNT+1:IF CMDCNT>28 THEN CMDCNT=28 2760 GOTO 3030 2770 COMAND=TRIGSCR:SOURCE=SOURCE+1:SOURCE=SOURCE MOD 2 2780 CMDCNT=CMDCNT+1:GOTO 3030 2790 COMAND=TRIGSLP:SLOPE=SLOPE+1:SLOPE=SLOPE MOD 2 2800 CMDCNT=CMDCNT+1:GOTO 3030 2810 COMAND=TRGLVL:IF COUNT>10 THEN COUNT=10 2820 IF SOURCE=1 THEN LOFF=OFFSETY1 :ELSE LOFF=OFFSETY2 2830 Y=182.4-(LEVEL+LOFF)*4/5:IF Y>0 AND Y<160 AND CMDCNT<>0 THEN PUT(1,Y),TMARK,XOR 2840 LEVEL=LEVEL+ARROW*COUNT 2850 IF LEVEL<1 THEN LEVEL=1 2860 IF LEVEL>255 THEN LEVEL=255 2870 CMDCNT=1:T=T6 2880 Y=182.4-(LEVEL+LOFF)*4/5:IF Y>0 AND Y<160 THEN PUT(1,Y),TMARK,XOR 2890 Y=LEVEL:GOTO 3030 2900 COMAND=TRIGMDE:IF MODE>4 THEN Y=8 :ELSE Y=0 2910 MODE=MODE+1:MODE=MODE MOD 5:IF MODE=0 THEN MODE=1 2920 IF MODE=3 THEN MODE=4 2930 MODE=MODE+Y:CMDCNT=CMDCNT+1:GOTO 3030 2940 IF COUNT>25 THEN COUNT=25 2950 HOFFSET=HOFFSET+ARROW*COUNT 2960 IF HOFFSET<-500 THEN HOFFSET=-500 2970 IF HOFFSET>500 THEN HOFFSET=500 2980 IF MODE<5 THEN GOSUB 1800 2990 IF HOFFSET<0 THEN PUT(600,72),ARROWL,PSET :ELSE PUT(600,72),ARROWR,PSET 3000 IF HOFFSET=0 THEN PUT(600,72),ARROWL,OR 3010 CMDCNT=0 3020 GOTO 3040 3030 ON PNT+1 GOSUB 3740,3740,3740,3740,3830,3830,3830,3830,3740,3910,3940,3940,3970,3940 3040 FOR I=O TO T 3050 GOSUB 3220:IF X$<>"" THEN GOTO 3060 3055 NEXT I:FAST=FALSE: GOTO 3110 3060 IF ASC(X$)-27<>X THEN GOTO 3110 3070 GOSUB 3220:X$="":KBD=0:FOR I=0 TO T18 3072 GOSUB 3230:IF KBD>1 THEN GOTO 3090 :ELSE NEXT I 3080 COUNT=1:FAST=FALSE:GOTO 2410 3090 COUNT=COUNT*3:IF COUNT>50 THEN COUNT=50 3100 FAST=TRUE:GOTO 2410 3110 ON POINTER(PNT,2) GOSUB 2220,2230,2240,2240,2250,2260,2260,2270,2270,2270 3120 IF PNT=3 OR PNT=7 OR PNT=12 THEN GOTO 3140 3130 FOR I=1 TO CMDCNT:CALL SEND!(COMAND):GOSUB 3220:FOR J=0 TO 15:NEXT J:NEXT I:GOTO 3150 3140 CALL SEND!(COMAND):FOR I=0 TO 50:NEXT I:CALL SEND!(Y):FOR I=0 TO 15:NEXT I 3150 COMAND=0:COUNT=0:CMDCNT=0 3160 IF PNT=1 OR PNT=3 OR PNT=5 OR PNT=7 OR PNT=8 THEN GOTO 3180 3170 WATE=FALSE:AVGCNT=0 3180 IF PNT=8 OR PNT=1 OR PNT=5 THEN GOTO 1220 3190 IF PNT<>3 AND PNT<>7 THEN GOTO 1140 :ELSE X=OFFSETY1:Y=OFFSETY2 3200 CALL REQFRT!(Y1SEN,Y2SEN,Y1COUP,Y2COUP,SLOPE,MODE,SOURCE,LEVEL,RATE,SAVMEM,SCOPE,OFFSETY1,OFFSETY2,EROR) 3210 IF X<>OFFSETY1 OR Y<>OFFSETY2 THEN GOTO 1140 :ELSE GOTO 1220 3220 Y$=INKEY$:IF Y$="" THEN RETURN :ELSE X$=Y$:GOTO 3220 3230 Y$=INKEY$:IF Y$="" THEN RETURN :ELSE X$=Y$:KBD=KBD+1:GOTO 3230 3235 ' 3240 '*****LEFT/RIGHT ARROW SUBROUTINES**************** 3250 ' 3260 ARROW=1:GOTO 3280 3270 ARROW=-1 3280 PUT(0,161),BLANK8,PRESET 3290 COUNT=1:EROR=FALSE:IF PNT=8 THEN GOSUB 2240:RETURN 3300 :ELSE RETURN 3300 3300 IF PNT<>8 THEN GOTO 3380 3310 IF COUNT>25 THEN COUNT=25 3320 HOFFSET=HOFFSET+ARROW*COUNT 3330 IF HOFFSET<-500 THEN HOFFSET=-500 3340 IF HOFFSET>500 THEN HOFFSET=500 3350 IF HOFFSET<0 THEN PUT(600,72),ARROWL,PSET :ELSE PUT(600,72),ARROWR,PSET 3360 IF HOFFSET=0 THEN PUT(600,72),ARROWL,OR 3370 GOTO 3520 3380 IF COUNT>25 THEN COUNT=25 3390 IF CURSOR<>2 AND C1Y=3 THEN LOCATE 24,10:PRINT"CURSOR #1 IS OFF";:GOTO 3630 3400 IF CURSOR<>1 AND C2Y=3 THEN LOCATE 24,10:PRINT"CURSOR #2 IS OFF";:GOTO 3630 3410 IF CURSOR<>2 THEN C1=C1+COUNT*ARROW :ELSE GOTO 3440 3420 IF C1<0 THEN C1=500 3430 IF C1>500 THEN C1=0 3440 IF CURSOR<>1 THEN C2=C2+COUNT*ARROW :ELSE GOTO 3470 3450 IF C2<0 THEN C2=500 3460 IF C2>500 THEN C2=0 3470 X1=-1:X2=-1:X3=-1:X4=-1 3480 IF C1Y=1 AND Y1COUP<>0 THEN X1=C1 3490 IF C2Y=1 AND Y1COUP<>0 THEN X2=C2 3500 IF C1Y=2 AND Y2COUP<>0 THEN X3=C1 3510 IF C2Y=2 AND Y2COUP<>0 THEN X4=C2 3520 X$="":IF MODE<5 THEN GOSUB 1800 3530 FOR I=0 TO T3 3535 GOSUB 3220:IF X$<>"" THEN GOTO 3550 3540 NEXT I:FAST=FALSE: GOTO 3610 3550 IF ASC(X$)-27<>X THEN GOTO 3610 3560 GOSUB 3220:X$="":KBD=0:FOR I=0 TO T18 3565 GOSUB 3230:IF KBD>1 THEN GOTO 3580 :ELSE NEXT I 3570 COUNT=1:FAST=FALSE:GOTO 3300 3580 COUNT=COUNT*3 3590 IF PNT=8 THEN FAST=TRUE 3600 GOTO 3300 3610 IF PNT=8 THEN GOSUB 2240 3620 COUNT=0:FAST=FALSE:GOTO 1220 3630 LOCATE 24,10:FOR I=0 TO 2500:NEXT I:PRINT SPC(17):X$="":GOSUB 3220:GOTO 3610 3640 ' 3650 '*****REQUEST FRONT PANEL SUBROUTINE************** 3660 ' 3670 PUT(0,161),BLANK8,PRESET:COUNT=0 3680 CALL REQFRT!(Y1SEN,Y2SEN,Y1COUP,Y2COUP,SLOPE,MODE,SOURCE,LEVEL,RATE,SAVMEM,SCOPE,OFFSETY1,OFFSETY2,EROR) 3690 IF EROR=FALSE THEN GOTO 3710 3700 IF EROR=TRUE THEN GOTO 3680 :ELSE RETURN 3710 CALL CKUART!(COMAND,EROR) 3720 IF EROR<>0 OR COMAND<>0 THEN COMAND=0:EROR=FALSE:GOTO 3680 3730 ON ERROR GOTO 4170 3735 GOSUB 3220 3740 LOCATE 1,70:PRINT COUPLNG$(Y1COUP) 3750 LOCATE 1,74:IF INVERTY1=TRUE THEN PRINT"invert" :ELSE PRINT"normal" 3760 LOCATE 2,70:PRINT SEN$(Y1SEN) 3770 LOCATE 3,73:X!=VAL(SEN$(Y1SEN))/25*OFFSETY1 3780 IF Y1SEN=5 OR Y1SEN=6 THEN X!=X!/1000 3790 IF Y1SEN<5 THEN PRINT USING"+###.#";X!;:PRINT"mV" 3800 IF Y1SEN>5 THEN PRINT USING"+##.##";X!;:PRINT" V" 3810 IF Y1SEN=5 THEN PRINT USING"+#.###";X!;:PRINT" V" 3820 IF COUNT>0 THEN RETURN 3830 LOCATE 5,70:PRINT COUPLNG$(Y2COUP) 3840 LOCATE 5,74:IF INVERTY2=TRUE THEN PRINT"invert" :ELSE PRINT"normal" 3850 LOCATE 6,70:PRINT SEN$(Y2SEN) 3860 LOCATE 7,73:X!=VAL(SEN$(Y2SEN))/25*OFFSETY2 3870 IF Y2SEN=5 OR Y2SEN=6 THEN X!=X!/1000 3880 IF Y2SEN<5 THEN PRINT USING"+###.#";X!;:PRINT"mV" 3890 IF Y2SEN>5 THEN PRINT USING"+##.##";X!;:PRINT" V" 3900 IF Y2SEN=5 THEN PRINT USING"+#.###";X!;:PRINT" V" 3910 LOCATE 10,70:PRINT RATE$(RATE):IF COUNT>0 THEN RETURN 3920 IF HOFFSET<0 THEN PUT(600,72),ARROWL,PSET :ELSE PUT(600,72),ARROWR,PSET 3930 IF HOFFSET=0 THEN PUT(600,72),ARROWL,OR 3940 LOCATE 12,78:IF SOURCE=1 THEN PRINT"Y1" :ELSE PRINT "Y2" 3950 LOCATE 14,79:IF SLOPE=1 THEN PRINT "+" :ELSE PRINT "-" 3960 LOCATE 19,75:PRINT MODE$(MODE MOD 8):IF COUNT>0 THEN RETURN 3970 LOCATE 17,70:GOSUB 3220 3980 IF SOURCE=1 THEN TLVL!=VAL(SEN$(Y1SEN))/25*(LEVEL-128) :ELSE GOTO 4030 3990 IF Y1SEN=5 OR Y1SEN=6 THEN TLVL!=TLVL!/1000 4000 IF Y1SEN<5 THEN PRINT USING"+###.#";TLVL!;:PRINT"mV" 4010 IF Y1SEN>5 THEN PRINT USING"+##.##";TLVL!;:PRINT" V" 4020 IF Y1SEN=5 THEN PRINT USING"+#.###";TLVL!;:PRINT" V" 4030 IF SOURCE=0 THEN TLVL!=VAL(SEN$(Y2SEN))/25*(LEVEL-128) :ELSE GOTO 4090 4040 IF Y2SEN=5 OR Y2SEN=6 THEN TLVL!=TLVL!/1000 4050 IF Y2SEN<5 THEN PRINT USING"+###.#";TLVL!;:PRINT"mV" 4060 IF Y2SEN>5 THEN PRINT USING"+##.##";TLVL!;:PRINT" V" 4070 IF Y2SEN=5 THEN PRINT USING"+#.###";TLVL!;:PRINT" V" 4080 IF COUNT>0 THEN RETURN 4090 IF Y1COUP=0 AND Y2COUP=0 THEN Y1Y2=0 4100 IF Y1COUP<>0 AND Y2COUP=0 THEN Y1Y2=1 4110 IF Y1COUP=0 AND Y2COUP<>0 THEN Y1Y2=2 4120 IF Y1COUP<>0 AND Y2COUP<>0 THEN Y1Y2=3 4130 Y1SCALE!=VAL(SEN$(Y1SEN))/25:IF Y1SEN>6 THEN Y1SCALE!=1000*Y1SCALE! 4140 Y2SCALE!=VAL(SEN$(Y2SEN))/25:IF Y2SEN>6 THEN Y2SCALE!=1000*Y2SCALE! 4150 RSCALE!=VAL(RATE$(RATE))/50:R$=RIGHT$(RATE$(RATE),3) 4152 FSCALE!=1:IF RATE<6 THEN FSCALE!=.001 4154 IF RATE>14 THEN FSCALE!=1000 4156 IF RATE>23 THEN FSCALE!=1000000! 4160 ON ERROR GOTO 0:RETURN 4170 RESUME 3680 4180 ' 4190 '*****LINE/DOT GRAT ON/OFF SUBROUTINES********** 4200 ' 4210 IF MENU=3 THEN GOTO 6550 4220 PUT(0,161),BLANK8,PRESET 4230 GRATON=NOT GRATON:GOTO 4300 4240 IF MENU<>3 THEN GOTO 4290 :ELSE RETURN 4250 4250 LOCATE 21,1:PRINT"EXIT ?" 4260 X$=INKEY$:IF X$="" THEN GOTO 4260 4270 IF X$="Y" OR X$="y" THEN GOTO 4280 :ELSE LOCATE 21,1:PRINT SPC(16):GOTO 1220 4280 SYSTEM 4290 LYNE=NOT LYNE 4300 GOSUB 4930:EROR=FALSE:IF MODE<5 THEN GOSUB 1750 4310 X$=INKEY$:IF LEN(X$)<>0 THEN GOTO 4310 :ELSE RETURN 1220 4320 ' 4330 '*****CURSOR CONTROL SUBROUTINE******************* 4340 ' 4350 IF PNT=8 THEN GOSUB 2240:PNT=9:GOSUB 2260 4360 PUT(0,161),BLANK8,PRESET 4370 CURSOR=CURSOR+1:CURSOR=CURSOR MOD 3:GOSUB 4920:EROR=FALSE 4380 X$=INKEY$:IF LEN(X$)<>0 THEN GOTO 4380 :ELSE RETURN 1220 4390 ' 4400 '*****CURSOR SETUP SUBROUTINE********************* 4410 ' 4420 IF PNT=8 THEN GOSUB 2240:PNT=9:GOSUB 2260 4430 PUT(0,161),BLANK8,PRESET 4440 LOCATE 22,1:PRINT SPC(54):LOCATE 23,1:PRINT SPC(54):LOCATE 24,1:PRINT SPC(54) 4450 LOCATE 22,1:PRINT"CHOOSE CHANNEL FOR CURSOR C1: 1) Y1 2) Y2 3) OFF " 4460 ON C1Y GOSUB 4700,4710,4720 4470 X$=INKEY$:IF X$="" THEN GOTO 4470 4480 X=ASC(X$):IF X=13 THEN GOTO 4510 4490 X=VAL(X$):IF X<1 OR X>3 THEN BEEP:GOTO 4450 4500 ON C1Y GOSUB 4700,4710,4720:C1Y=X:ON C1Y GOSUB 4700,4710,4720 4510 FOR I=0 TO 250:NEXT I 4520 LOCATE 22,1:PRINT"CHOOSE CHANNEL FOR CURSOR C2: 1) Y1 2) Y2 3) OFF " 4530 ON C2Y GOSUB 4700,4710,4720 4540 X$=INKEY$:IF X$="" THEN GOTO 4540 4550 X=ASC(X$):IF X=13 THEN GOTO 4580 4560 X=VAL(X$):IF X<1 OR X>3 THEN BEEP:GOTO 4520 4570 ON C2Y GOSUB 4700,4710,4720:C2Y=X:ON C2Y GOSUB 4700,4710,4720 4580 FOR I=0 TO 250:NEXT I:LOCATE 22,1:PRINT SPC(54) 4590 GOSUB 4725 4620 GOSUB 4640:EROR=FALSE:X=4:IF MODE<5 THEN GOSUB 1750 4630 X$=INKEY$:IF LEN(X$)<>0 THEN GOTO 4630 :ELSE RETURN 1220 4640 X1=-1:X2=-1:X3=-1:X4=-1 4650 IF C1Y=1 AND Y1COUP<>0 THEN X1=C1 4660 IF C2Y=1 AND Y1COUP<>0 THEN X2=C2 4670 IF C1Y=2 AND Y2COUP<>0 THEN X3=C1 4680 IF C2Y=2 AND Y2COUP<>0 THEN X4=C2 4690 RETURN 4700 PUT(271,189),BLANK2,XOR:RETURN 4710 PUT(335,189),BLANK2,XOR:RETURN 4720 PUT(399,189),BLANK3,XOR:RETURN 4725 IF C1Y<>3 THEN LOCATE 22,6:PRINT"C1:" 4726 IF C2Y<>3 THEN LOCATE 23,6:PRINT"C2:" 4727 IF C1Y<>3 AND C2Y<>3 THEN LOCATE 24,1:PRINT"[C1-C2]:"; 4728 RETURN 4730 ' 4740 '*****CHANGE MENU SUBROUTINE********************** 4750 ' 4760 PUT(0,161),BLANK8,PRESET 4770 MENU=MENU+1:IF MENU=4 THEN MENU=1 4780 LOCATE 25,1:GOSUB 4920 4790 X$=INKEY$:IF X$<>"" THEN GOTO 4790 :ELSE RETURN 1220 4800 ' 4810 '*****SCOPE ON/OFF SUBROUTINE 4820 ' 4830 IF MENU=3 THEN GOTO 5450 4840 PUT(0,161),BLANK8,PRESET 4850 SCOPE=NOT SCOPE:IF SCOPE=TRUE THEN COMAND=SCOPEON 4860 IF SCOPE=FALSE THEN COMAND=SCOPEOFF 4870 CALL SEND!(COMAND):COMAND=0:GOSUB 4930 4880 X$=INKEY$:IF LEN(X$)<>0 THEN GOTO 4880 :ELSE RETURN 1220 4890 ' 4900 '*****PRINT MENU SUBROUTINE*********************** 4910 ' 4920 LOCATE 25,1:PRINT SPC(67) 4930 LOCATE 25,1:IF MENU=1 THEN PRINT"F1:ZERO CAL F2:RESET/MANUAL F3:CURSOR C1/C2 F4:DEFINE CURSORS F8:NEXT MENU"; 4940 IF MENU=2 THEN PRINT"F5:SCOPE ON/OFF F6:GRAT ON/OFF F7:LINE/DOT F8:NEXT MENU"; 4950 IF MENU=3 THEN PRINT"F5:MEMORY F6:AVERAGE F7:EXIT TO SYSTEM"; 4960 IF MENU=3 THEN LOCATE 25,68:PRINT"F8:NEXT MENU";:RETURN 4970 IF MENU=1 AND CURSOR=1 THEN PUT(319,216),BLANK2,XOR:RETURN 4980 IF MENU=1 AND CURSOR=2 THEN PUT(343,216),BLANK2,XOR:RETURN 4990 IF MENU=1 THEN PUT(319,216),BLANK5,XOR:RETURN 5000 IF SCOPE=TRUE THEN PUT(71,216),BLANK2,XOR :ELSE PUT(95,216),BLANK3,XOR 5010 IF GRATON=TRUE THEN PUT(199,216),BLANK2,XOR :ELSE PUT(223,216),BLANK3,XOR 5020 IF LYNE=TRUE THEN PUT(287,216),BLANK4,XOR :ELSE PUT(327,216),BLANK3,XOR 5030 RETURN 5040 ' 5050 '*****RE-ZERO MANUAL TRIGGER/RESET SUBROUTINES************ 5060 ' 5070 AVGCNT=0:WATE=FALSE 5080 PUT(0,161),BLANK8,PRESET 5090 CALL SEND!(REZERO):GOSUB 5260 5100 X$=INKEY$:IF LEN(X$)<>0 THEN GOTO 5100 :ELSE RETURN 1140 5110 PUT(0,161),BLANK8,PRESET 5120 IF MODE<4 THEN CALL SEND!(MANTRG):RETURN 5130 ON POINTER(PNT,2) GOSUB 2220,2230,2240,2240,2250,2260,2260,2270,2270,2270 5140 GOSUB 3670 5150 ON POINTER(PNT,2) GOSUB 2220,2230,2240,2240,2250,2260,2260,2270,2270,2270 5160 IF MODE=12 THEN GOTO 5220 5170 IF AVGCNT>=AVGNUM THEN RETURN 5180 CALL SEND!(REZERO):FOR I=0 TO 50:NEXT I:MODE=12 5190 CALL SEND!(RSTREQ):WATE=TRUE:LOCATE 20,66:PRINT" armed " 5200 CALL GRAT!(GRATON) 5210 X$=INKEY$:IF LEN(X$)<>0 THEN GOTO 5210 :ELSE RETURN 1340 5220 CALL SEND!(RSTREQ):FOR I=0 TO 50:NEXT I:CALL SEND!(MANTRG):MODE=4:GOTO 5200 5230 ' 5240 '*****RIGHT SIDE SUBROUTINE*********************** 5250 ' 5260 ON POINTER(PNT,2) GOSUB 2220,2230,2240,2240,2250,2260,2260,2270,2270,2270 5270 LOCATE 1,65:PRINT"Y1:":LOCATE 1,73:PRINT"(":LOCATE 1,80:PRINT")" 5280 LOCATE 2,77:PRINT"/div":LOCATE 3,66:PRINT"Offset:" 5290 LOCATE 5,65:PRINT"Y2:":LOCATE 5,73:PRINT"(":LOCATE 5,80:PRINT")" 5300 LOCATE 6,77:PRINT"/div":LOCATE 7,66:PRINT"Offset:":LOCATE 9,65:PRINT"TIMEBASE:" 5310 PUT(600,72),ARROWL,OR:PUT(600,72),ARROWR,OR:LOCATE 10,77:PRINT"/div" 5320 LOCATE 12,65:PRINT"TRIG SOURCE:" 5330 LOCATE 14,65:PRINT"TRIG SLOPE: (":LOCATE 14,80:PRINT")" 5340 LOCATE 16,65:PRINT"TRIG LEVEL:":LOCATE 19,65:PRINT"TRIG MODE:" 5350 LOCATE 20,65:PRINT SPC(16) 5360 ON POINTER(PNT,2) GOSUB 2220,2230,2240,2240,2250,2260,2260,2270,2270,2270 5370 IF AVGY1<>TRUE AND AVGY2<>TRUE THEN RETURN 5380 LOCATE 21,20:PRINT"average #";AVGCNT,"press F1 to restart averaging" 5390 IF AVGY1=TRUE THEN LOCATE 2,64:PRINT "avg" :ELSE PRINT" " 5400 IF AVGY2=TRUE THEN LOCATE 6,64:PRINT "avg" :ELSE PRINT" " 5410 RETURN 5420 ' 5430 '*****MEMORY SUBROUTINE*************************** 5440 ' 5450 LOCATE 25,1:PRINT SPC(79):X1=-1:X2=-1:X3=-1:X4=-1 5460 PUT(0,161),BLANK8,PRESET 5480 RETURN 5490 5490 LOCATE 22,1:PRINT"SELECTION: 1) SAVE WAVEFORM ON DISK";:PRINT SPC(16) 5500 LOCATE 23,1:PRINT SPC(13);"2) RECALL WAVEFORM FROM DISK";:PRINT SPC(12) 5510 LOCATE 24,1:PRINT SPC(13);"3) MEMORY ON/OFF";:PRINT SPC(24) 5515 GOSUB 6490 5520 X$=INKEY$:IF X$="" THEN GOTO 5520 5530 IF ASC(RIGHT$(X$,1))=36 THEN GOSUB 6460 5540 X=VAL(X$):LOCATE 22,1:PRINT SPC(54):PRINT:PRINT SPC(54):PRINT:PRINT SPC(54) 5550 ON X GOTO 5820,5820,5570 5560 BEEP:GOTO 5490 5570 LOCATE 22,1:PRINT"MEM1: 1) ON ":LOCATE 23,8:PRINT"2) OFF ":GOSUB 5650 5580 X$=INKEY$:IF X$="" THEN GOTO 5580 5590 IF ASC(RIGHT$(X$,1))=36 THEN GOSUB 6460 5600 X=ASC(X$):IF X=13 THEN GOTO 5670 5610 X=VAL(X$):IF X<1 OR X>2 THEN BEEP:GOTO 5570 5620 GOSUB 5650:IF X=1 AND MEM1$="" THEN MEM1=FALSE:LOCATE 24,1:PRINT"ERROR....Data has not been loaded into MEM1";:FOR I=0 TO 2500:NEXT I:LOCATE 24,1:PRINT SPC(54) 5630 IF X=1 AND MEM1$<>"" THEN MEM1=TRUE :ELSE MEM1=FALSE 5640 GOSUB 5650:FOR I=0 TO 250:NEXT I:GOTO 5670 5650 IF MEM1=TRUE THEN PUT(79,189),BLANK2,XOR :ELSE PUT(79,198),BLANK3,XOR 5660 RETURN 5670 LOCATE 22,1:PRINT"MEM2: 1) ON ":LOCATE 23,8:PRINT"2) OFF ":GOSUB 5800 5680 X$=INKEY$:IF X$="" THEN GOTO 5680 5690 IF ASC(RIGHT$(X$,1))=36 THEN GOSUB 6460 5700 X=ASC(X$):IF X=13 THEN GOTO 5750 5710 X=VAL(X$):IF X<1 OR X>2 THEN BEEP:GOTO 5670 5720 GOSUB 5800:IF X=1 AND MEM2$="" THEN MEM2=FALSE:LOCATE 24,1:PRINT"ERROR....Data has not been loaded into MEM2";:FOR I=0 TO 2500:NEXT I:LOCATE 24,1:PRINT SPC(54) 5730 IF X=1 AND MEM2$<>"" THEN MEM2=TRUE :ELSE MEM2=FALSE 5740 GOSUB 5800:FOR I=0 TO 250:NEXT I 5750 GOSUB 4920 5760 LOCATE 22,1:PRINT SPC(54):PRINT:PRINT SPC(54) 5770 IF MEM1=FALSE THEN LOCATE 22,55:PRINT SPC(25) 5780 IF MEM2=FALSE THEN LOCATE 23,55:PRINT SPC(25) 5790 GOSUB 4590 5800 IF MEM2=TRUE THEN PUT(79,189),BLANK2,XOR :ELSE PUT(79,198),BLANK3,XOR 5810 RETURN 5820 LOCATE 22,1:PRINT"Do you wish to see the directory ? "; 5830 ON ERROR GOTO 6430 5840 X$=INKEY$:IF X$="" THEN GOTO 5840 5850 IF ASC(RIGHT$(X$,1))=36 THEN GOSUB 6460 5860 IF X$="N" OR X$="n" THEN GOTO 6000 5870 IF X$="Y" OR X$="y" THEN GOTO 5890 5880 BEEP:GOTO 5820 5890 LOCATE 25,1:PRINT SPC(54) 5900 LOCATE 22,1:PRINT"Drive name ? ":LINE INPUT X$ 5910 PRINT" ";:LOCATE 23,1:IF X$="" THEN FILES :ELSE FILES X$ 5920 PRINT:PRINT"Press any key to continue."; 5930 X$=INKEY$:IF X$="" THEN GOTO 5930 5940 GOSUB 6490 5950 FOR I=1 TO 24:LOCATE I,1:PRINT SPC(40);SPC(40):NEXT I 5970 GOSUB 5270:GOSUB 1750 5980 ON POINTER(PNT,2) GOSUB 2220,2230,2240,2240,2250,2260,2260,2270,2270,2270 5982 GOSUB 3740 5985 ON POINTER(PNT,2) GOSUB 2220,2230,2240,2240,2250,2260,2260,2270,2270,2270 5990 ON ERROR GOTO 6430 6000 ON X GOTO 6010,6210 6010 LOCATE 22,1:PRINT"Which channel do you want to save? 1) Y1 " 6020 LOCATE 23,40:PRINT"2) Y2 " 6030 X$=INKEY$:IF X$="" THEN GOTO 6030 6040 IF ASC(RIGHT$(X$,1))=36 THEN GOSUB 6460 6050 X=VAL(X$):IF X<1 OR X>2 THEN BEEP:GOTO 6010 6060 LOCATE 25,1:PRINT SPC(54) 6070 LOCATE 22,1:PRINT SPC(54):PRINT:PRINT SPC(54):LOCATE 22,1:PRINT"FILENAME? "; 6080 LINE INPUT X$:LOCATE 23,1:PRINT" ":OPEN "O",1,X$:GOSUB 6490:ON X GOTO 6090,6110 6090 PRINT#1,Y1SEN;RATE;INVERTY1;OFFSETY1;HOFFSET; 6100 FOR I=0 TO 511:PRINT#1,Y1(I);:NEXT I:GOTO 6130 6110 PRINT#1,Y2SEN;RATE;INVERTY2;OFFSETY2;HOFFSET; 6120 FOR I=0 TO 511:PRINT#1,Y2(I);:NEXT I 6130 CLOSE#1:ON ERROR GOTO 0 6140 LOCATE 22,1:PRINT"Would you like to save another waveform ?" 6150 X=1 6160 X$=INKEY$:IF X$="" THEN GOTO 6160 6170 IF ASC(RIGHT$(X$,1))=36 THEN GOSUB 6460 6180 IF X$="Y" OR X$="y" THEN GOTO 5820 6190 LOCATE 22,1:PRINT SPC(54):PRINT:PRINT SPC(54):PRINT:PRINT SPC(54) 6200 GOSUB 4920:GOSUB 4590 6210 LOCATE 22,1:PRINT"Which memory do you want to use? 1) MEM1 " 6220 LOCATE 23,36:PRINT"2) MEM2 " 6230 X$=INKEY$:IF X$="" THEN GOTO 6230 6240 IF ASC(RIGHT$(X$,1))=36 THEN GOSUB 6460 6250 X=VAL(X$):IF X<1 OR X>2 THEN BEEP:GOTO 6210 6260 LOCATE 25,1:PRINT SPC(54) 6270 LOCATE 22,1:PRINT SPC(54):PRINT:PRINT SPC(54):LOCATE 22,1:PRINT"FILENAME? "; 6280 LINE INPUT X$:LOCATE 23,1:PRINT" ":OPEN "I",1,X$:GOSUB 6490:ON X GOTO 6290,6320 6290 INPUT#1,M1SEN,M1RATE,INVERTM1,OFFSETM1,HOFFSETM1 6300 FOR I=0 TO 511:INPUT#1,M1(I):NEXT I 6310 MEM1=TRUE:MEM1$=LEFT$(X$,11):GOTO 6350 6320 INPUT#1,M2SEN,M2RATE,INVERTM2,OFFSETM2,HOFFSETM2 6330 FOR I=0 TO 511:INPUT#1,M2(I):NEXT I 6340 MEM2=TRUE:MEM2$=LEFT$(X$,11) 6350 CLOSE#1:ON ERROR GOTO 0:GOSUB 1750 6360 LOCATE 22,1:PRINT"Would you like to recall another waveform ?" 6370 X=2 6380 X$=INKEY$:IF X$="" THEN GOTO 6380 6390 IF ASC(RIGHT$(X$,1))=36 THEN GOSUB 6460 6400 IF X$="Y" OR X$="y" THEN GOTO 5820 6410 LOCATE 22,1:PRINT SPC(54):PRINT:PRINT SPC(54):PRINT:PRINT SPC(54) 6420 GOSUB 4920:GOSUB 4590 6430 LOCATE 22,1:PRINT SPC(54):PRINT:PRINT SPC(54):PRINT:PRINT SPC(54) 6440 LOCATE 22,1:PRINT"DISK ERROR......Error Code: ";ERR 6450 FOR I=0 TO 3000:NEXT I:CLOSE#1:RESUME 5490 6460 LOCATE 22,1:PRINT SPC(54):PRINT:PRINT SPC(54):PRINT:PRINT SPC(54) 6470 GOSUB 4920:RETURN 6480 6480 CLOSE#1:ON ERROR GOTO 0:GOSUB 4590 6490 LOCATE 25,15:PRINT"Press F5 again to exit this function"; 6500 PUT(110,216),BLANK8,XOR:PUT(176,216),BLANK8,XOR:PUT(242,216),BLANK8,XOR 6510 PUT(308,216),BLANK8,XOR:PUT(374,216),BLANK6,XOR:RETURN 6520 ' 6530 '************AVERAGING SUBROUTINE***************** 6540 ' 6550 PUT(0,161),BLANK8,PRESET 6560 LOCATE 21,10:PRINT SPC(65):GOSUB 1750:AVGCNT=0:WATE=FALSE 6570 LOCATE 22,1:PRINT SPC(54):PRINT:PRINT SPC(54):PRINT:PRINT SPC(54) 6580 LOCATE 22,1:PRINT"Select channel to be averaged:" 6590 PRINT" 1) Y1 3) Y1 and Y2" 6600 PRINT" 2) Y2 4) AVERAGING OFF"; 6610 GOSUB 6780 6620 X$=INKEY$:IF X$="" THEN GOTO 6620 6630 IF ASC(X$)=13 THEN GOTO 6690 6640 X=VAL(X$):IF X<1 OR X>4 THEN BEEP:GOTO 6580 6650 GOSUB 6780:IF X=1 THEN AVGY1=TRUE:AVGY2=FALSE:GOTO 6690 6660 IF X=2 THEN AVGY1=FALSE:AVGY2=TRUE:GOTO 6690 6670 IF X=3 THEN AVGY1=TRUE:AVGY2=TRUE:GOTO 6690 6680 IF X=4 THEN AVGY1=FALSE:AVGY2=FALSE:AVGCNT=-1 6690 GOSUB 6780:LOCATE 22,1:PRINT SPC(54):PRINT:PRINT SPC(54):PRINT 6700 LOCATE 24,1:PRINT SPC(54):IF AVGY1=FALSE AND AVGY2=FALSE THEN WATE=FALSE:GOTO 4590 6710 LOCATE 22,1:PRINT"Select number of averages <";:ON ERROR GOTO 6840 6720 PRINT USING"###";AVGNUM;:PRINT">";:PUT(215,189),BLANK3,XOR 6730 INPUT" ",X$:IF X$="" THEN GOTO 6770 6740 X=VAL(X$):IF X>0 AND X<251 THEN AVGNUM=X:GOTO 6770 6750 BEEP:LOCATE 24,1:PRINT"Number of averages must be between 1 and 250"; 6760 FOR I=0 TO 3000:NEXT I:LOCATE 24,1:PRINT SPC(54):GOTO 6690 6770 ON ERROR GOTO 0:LOCATE 22,1:PRINT SPC(54):WATE=FALSE:GOSUB 5260:GOTO 4590 6780 LOCATE 2,64:IF AVGY1=TRUE THEN PRINT"avg" :ELSE PRINT" " 6790 LOCATE 6,64:IF AVGY2=TRUE THEN PRINT"avg" :ELSE PRINT" " 6800 IF AVGY1=TRUE AND AVGY2=TRUE THEN PUT(215,198),BLANK6,XOR:PUT(265,198),BLANK3,XOR:RETURN 6810 IF AVGY1=FALSE AND AVGY2=FALSE THEN PUT(215,207),BLANK8,XOR:PUT(281,207),BLANK5,XOR:RETURN 6820 IF AVGY1=TRUE THEN PUT(103,198),BLANK2,XOR:RETURN 6830 PUT(103,207),BLANK2,XOR:RETURN 6840 RESUME 6750 6850 RETURN