' PRINTER PORT OSCILLOSCOPE II 10/01/95 BY BOB DAVIS ' LOW RESOLUTION VERSION FOR 640 X 200 CGA CLS : LOCATE 10, 20: INPUT "USE PRINTER PORT NUMBER: ", LPT DOUT = &H378: COUT = &H37A: CIN = &H379 IF LPT = 1 THEN DOUT = &H3BC: COUT = &H3BE: CIN = &H3BD IF LPT = 3 THEN DOUT = &H278: COUT = &H27A: CIN = &H279 CLS : SCREEN 2 LINE (0, 0)-(639, 190), , B LINE (0, 0)-(532, 190), , B LINE (536, 4)-(635, 186), , B LINE (561, 62)-(610, 72), , B LINE (561, 94)-(610, 104), , B LINE (561, 126)-(610, 136), , B LOCATE 2, 71: PRINT "PRINTER" LOCATE 3, 71: PRINT "PORT" LOCATE 4, 71: PRINT "O'SCOPE" LOCATE 7, 69: PRINT "CH 1 V/DIV." LOCATE 9, 72: PRINT "1" LOCATE 11, 69: PRINT "CH 1 POSITN" LOCATE 13, 72: PRINT "0" LOCATE 15, 69: PRINT "HORIZ T/DIV" LOCATE 17, 72: PRINT " 5 mS" LOCATE 21, 70: PRINT "COPYRIGHT" LOCATE 22, 70: PRINT "BOB DAVIS" LOCATE 25, 15 PRINT "SELECT CONTROLS WITH NUMERIC ARROW KEYS OR Q=QUIT"; T = 13: S = 2: P = 0: C = 9 START: OUT COUT, 11 OUT DOUT, (T + 32 * S) 'CONTROL OUT OUT COUT, 15 'RESET - START FOR A = 1 TO 1000: NEXT A 'CAPTURE DELAY FOR H = 1 TO 530 'HORIZONTAL RANGE PSET (H, 2), 0: DRAW "C0" + "M=" + VARPTR$(H) + ",189" IF H > 2 THEN PSET (H - 1, V), 0 ELSE PSET (H, 95), 0 OUT COUT, 4: V = (INP(CIN) \ 16) 'GET LOW 1/2 BYTE OUT COUT, 5: V = V + (INP(CIN) AND &HF0) - P - 30 IF V > 188 THEN V = 188 ELSE IF V < 2 THEN V = 2 IF H > 2 THEN DRAW "C1" + "M=" + VARPTR$(H) + ",=" + VARPTR$(V) OUT COUT, 0: OUT COUT, 8 'NEXT ADDRESS NEXT H key$ = INKEY$: IF key$ = "q" OR key$ = "Q" THEN END LOCATE C, 69: PRINT " " IF key$ = "2" THEN C = C + 4: IF C = 21 THEN C = 9 IF key$ = "8" THEN C = C - 4: IF C = 5 THEN C = 17 LOCATE C, 69: PRINT "->" IF C = 9 THEN 'SENSITIVITY IF key$ = "6" THEN : S = S + 1: IF S > 7 THEN S = 0 IF key$ = "4" THEN : S = S - 1: IF S < 0 THEN S = 7 IF S = 0 THEN LOCATE 9, 72: PRINT "GND" IF S = 1 THEN LOCATE 9, 72: PRINT " 2" IF S = 2 THEN LOCATE 9, 72: PRINT " 1" IF S = 3 THEN LOCATE 9, 72: PRINT " .5" IF S = 4 THEN LOCATE 9, 72: PRINT " .2" IF S = 5 THEN LOCATE 9, 72: PRINT " .1" IF S = 6 THEN LOCATE 9, 72: PRINT ".05" IF S = 7 THEN LOCATE 9, 72: PRINT ".02" END IF IF C = 13 THEN 'POSITION IF key$ = "6" THEN : P = P + 2: IF P > 30 THEN P = -30 IF key$ = "4" THEN : P = P - 2: IF P < -30 THEN P = 30 LOCATE 13, 73: PRINT P END IF IF C = 17 THEN 'TIME BASE IF key$ = "6" THEN : T = T + 1: IF T > 23 THEN T = 11 IF key$ = "4" THEN : T = T - 1: IF T < 11 THEN T = 23 IF T = 11 THEN LOCATE 17, 72: PRINT "20 mS" IF T = 12 THEN LOCATE 17, 72: PRINT "10 mS" IF T = 13 THEN LOCATE 17, 72: PRINT " 5 mS" IF T = 14 THEN LOCATE 17, 72: PRINT " 2 mS" IF T = 15 THEN LOCATE 17, 72: PRINT " 1 mS" IF T = 16 THEN LOCATE 17, 72: PRINT ".5 mS" IF T = 17 THEN LOCATE 17, 72: PRINT ".2 mS" IF T = 18 THEN LOCATE 17, 72: PRINT ".1 mS" IF T = 19 THEN LOCATE 17, 72: PRINT "50 uS" IF T = 20 THEN LOCATE 17, 72: PRINT "20 uS" IF T = 21 THEN LOCATE 17, 72: PRINT "10 uS" IF T = 22 THEN LOCATE 17, 72: PRINT " 5 uS" IF T = 23 THEN LOCATE 17, 72: PRINT " 2 uS" END IF GOTO START ' PRINTER PORT OSCILLOSCOPE II 10/01/95 BY BOB DAVIS ' HIGH RESOLUTION VERSION FOR 640 X 400 VGA CLS : LOCATE 10, 20: INPUT "USE PRINTER PORT NUMBER: ", LPT DOUT = &H378: COUT = &H37A: CIN = &H379 IF LPT = 1 THEN DOUT = &H3BC: COUT = &H3BE: CIN = &H3BD IF LPT = 3 THEN DOUT = &H278: COUT = &H27A: CIN = &H279 CLS : SCREEN 9 LINE (550, 0)-(639, 329), 1, BF LINE (572, 94)-(617, 114), 0, BF LINE (572, 150)-(617, 170), 0, BF LINE (572, 206)-(617, 226), 0, BF LINE (572, 262)-(617, 282), 0, BF LINE (0, 0)-(639, 329), , B LINE (550, 0)-(639, 329), , B LINE (554, 4)-(635, 325), , B LINE (572, 94)-(617, 114), , B LINE (572, 150)-(617, 170), , B LINE (572, 206)-(617, 226), , B LINE (572, 262)-(617, 282), , B LOCATE 2, 72: PRINT "PRINTER" LOCATE 3, 72: PRINT "PORT" LOCATE 4, 72: PRINT "O'SCOPE" LOCATE 6, 71: PRINT "VOLTS/DIV" LOCATE 10, 71: PRINT "POSITION" LOCATE 14, 71: PRINT "TIME/DIV" LOCATE 18, 71: PRINT "TRIGGER" LOCATE 22, 71: PRINT "COPYRIGHT" LOCATE 23, 71: PRINT "BOB DAVIS" LOCATE 8, 73: PRINT "1.0" LOCATE 12, 73: PRINT "0" LOCATE 16, 73: PRINT "5MS" LOCATE 20, 73: PRINT "5" LOCATE 25, 15: PRINT "SELECT CONTROLS WITH NUMERIC ARROW KEYS OR Q=QUIT"; T = 13: S = 2: P = 0: C = 8: R = 5: V = 128 START: OUT COUT, 11 OUT DOUT, (T + 32 * S): OUT COUT, 15 'RESET - START FOR A = 1 TO 1000: NEXT A 'CAPTURE DELAY CIRCLE (625, 272), 5, 7 PAINT (625, 272), 0, 7 MTRIG = 0: TRIGD = 0: RA = R + 128 TLOOP: 'TRIGGER CONTROL ROUTINE OUT COUT, 4: V = (INP(CIN) \ 16) OUT COUT, 5: V = V + (INP(CIN) AND &HF0) OUT COUT, 0: OUT COUT, 8 'NEXT ADDRESS MTRIG = MTRIG + 1 IF MTRIG < 999 THEN IF TRIGD = 0 THEN IF (V > RA AND RA < 0) OR (V < RA AND RA > 0) THEN TRIGD = 1 GOTO TLOOP END IF IF (V < RA AND R < 0) OR (V > RA AND R > 0) THEN PAINT (625, 272), 4, 7 ELSE GOTO TLOOP END IF END IF FOR H = 1 TO 549 'HORIZONTAL RANGE OUT COUT, 4: V = (INP(CIN) \ 16) 'GET LOW 1/2 BYTE OUT COUT, 5: V = V + (INP(CIN) AND &HF0) - P + 50 IF V > 327 THEN V = 327 ELSE IF V < 2 THEN V = 2 IF H > 2 THEN LINE (H, 1)-(H, 328), 0 IF H > 2 THEN LINE (H, OLDV)-(H, V) PSET (H, 30), 2: PSET (H, 60), 2: PSET (H, 90), 2: PSET (H, 120), 2 PSET (H, 150), 2: PSET (H, 180), 2: PSET (H, 210), 2 PSET (H, 240), 2: PSET (H, 270), 2: PSET (H, 300), 2 IF H MOD 50 = 0 THEN LINE (H, 1)-(H, 328), 2 OLDV = V: OUT COUT, 0: OUT COUT, 8 'NEXT ADDRESS NEXT H key$ = INKEY$: IF key$ = "q" OR key$ = "Q" THEN END LOCATE C, 73: PRINT " " IF key$ = "2" THEN C = C + 4: IF C = 24 THEN C = 8 IF key$ = "8" THEN C = C - 4: IF C = 4 THEN C = 20 LOCATE C, 73: PRINT ">" IF C = 8 THEN 'SENSITIVITY IF key$ = "6" THEN : S = S + 1: IF S > 7 THEN S = 0 IF key$ = "4" THEN : S = S - 1: IF S < 0 THEN S = 7 IF S = 0 THEN LOCATE 8, 74: PRINT "GND " IF S = 1 THEN LOCATE 8, 74: PRINT "2.0 " IF S = 2 THEN LOCATE 8, 74: PRINT "1.0 " IF S = 3 THEN LOCATE 8, 74: PRINT " .5 " IF S = 4 THEN LOCATE 8, 74: PRINT " .2 " IF S = 5 THEN LOCATE 8, 74: PRINT " .1 " IF S = 6 THEN LOCATE 8, 74: PRINT " .05" IF S = 7 THEN LOCATE 8, 74: PRINT " .02" END IF IF C = 12 THEN 'POSITION IF key$ = "6" THEN : P = P + 2: IF P > 90 THEN P = -90 IF key$ = "4" THEN : P = P - 2: IF P < -90 THEN P = 90 LOCATE 12, 74: PRINT P END IF IF C = 16 THEN 'TIME BASE IF key$ = "6" THEN : T = T + 1: IF T > 23 THEN T = 11 IF key$ = "4" THEN : T = T - 1: IF T < 11 THEN T = 23 IF T = 11 THEN LOCATE 16, 74: PRINT "20MS" IF T = 12 THEN LOCATE 16, 74: PRINT "10MS" IF T = 13 THEN LOCATE 16, 74: PRINT " 5MS" IF T = 14 THEN LOCATE 16, 74: PRINT " 2MS" IF T = 15 THEN LOCATE 16, 74: PRINT " 1MS" IF T = 16 THEN LOCATE 16, 74: PRINT ".5MS" IF T = 17 THEN LOCATE 16, 74: PRINT ".2MS" IF T = 18 THEN LOCATE 16, 74: PRINT ".1MS" IF T = 19 THEN LOCATE 16, 74: PRINT "50US" IF T = 20 THEN LOCATE 16, 74: PRINT "20US" IF T = 21 THEN LOCATE 16, 74: PRINT "10US" IF T = 22 THEN LOCATE 16, 74: PRINT " 5US" IF T = 23 THEN LOCATE 16, 74: PRINT " 2US" END IF IF C = 20 THEN 'TRIGGER IF key$ = "6" THEN : R = R + 1: IF R > 30 THEN R = -30 IF key$ = "4" THEN : R = R - 1: IF R < -30 THEN R = 30 LOCATE 20, 74: PRINT R END IF GOTO START