DECLARE SUB getportid () DECLARE SUB setdelay () DECLARE FUNCTION gettrigbyte! () DECLARE FUNCTION areyousure! () DECLARE FUNCTION Odd! (n!) DECLARE SUB drawsweep () DECLARE SUB doit (keys$) DECLARE SUB setbitheight () DECLARE SUB modz () DECLARE SUB lod () DECLARE SUB status (words$) DECLARE SUB save () DECLARE SUB trig (bite!) DECLARE SUB fil () DECLARE SUB calcdelay () DECLARE SUB drawscreen () DECLARE SUB CAPTURE () DECLARE SUB drawlines () DECLARE SUB BIN () DIM SHARED file$ DIM SHARED bit(0 TO 7) DIM SHARED sweep DIM SHARED bitheight(0 TO 7) DIM SHARED oldbit(0 TO 7) DIM SHARED info DIM SHARED sig(0 TO 255) DIM SHARED delay DIM SHARED speed DIM SHARED sweepdelay DIM SHARED tim DIM SHARED swp AS STRING DIM SHARED PORT CONST xoffset = 110 CONST yoffset = 60 CALL getportid SCREEN 12 swp = "ASAP" sweepdelay = 0 CALL calcdelay CALL drawscreen CALL setbitheight DO mike: keys$ = INKEY$ LOOP UNTIL keys$ <> "" CALL doit(keys$) GOTO mike errorhandleR: status ("A file access error occured while attempting to open file.") LOCATE 12, 19 PRINT SPACE$(41) LOCATE 12, 19 COLOR 4 LINE INPUT "Filename: ", file$ RESUME FUNCTION areyousure ' ³Ú ¿ À Ù Ä Ã ´ COLOR 8 LOCATE 10, 23 PRINT "ÚÄÄÄÄÄÄÄÄÄÄÄ[WARNING]ÄÄÄÄÄÄÄÄÄÄÄÄ¿" LOCATE 11, 23 PRINT "³ Are you sure you want to quit? ³" LOCATE 12, 23 PRINT "³ ³" LOCATE 13, 23 PRINT "ÃÄÄÄÄÄÄÄÄ[Yes]ÄÄÄÄÄÄ[No]ÄÄÄÄÄÄÄÄÄ´" LOCATE 14, 23 PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" COLOR 4 LOCATE 10, 36 PRINT "WARNING" COLOR 15 LOCATE 11, 25 PRINT "Are you sure you want to quit?" COLOR 4 LOCATE 13, 33 PRINT "Y" LOCATE 13, 44 PRINT "N" LOCATE 13, 34 COLOR 15 PRINT "es" LOCATE 13, 45 PRINT "o" DO redo: keys$ = INKEY$ LOOP UNTIL keys$ <> "" SELECT CASE LCASE$(keys$) CASE "y", CHR$(13) END CASE "n", CHR$(27) areyousure = 0 CASE ELSE SOUND 2600, 1: SOUND 1600, 1 GOTO redo END SELECT END FUNCTION SUB BIN infoz = info 'isolates FOR i = 0 TO 7 'zeros old bits bit(i) = 0 NEXT '*** use this until i rember the FASTER way IF infoz >= 128 THEN bit(7) = 20: infoz = infoz - 128 IF infoz >= 64 THEN bit(6) = 20: infoz = infoz - 64 IF infoz >= 32 THEN bit(5) = 20: infoz = infoz - 32 IF infoz >= 16 THEN bit(4) = 20: infoz = infoz - 16 IF infoz >= 8 THEN bit(3) = 20: infoz = infoz - 8 IF infoz >= 4 THEN bit(2) = 20: infoz = infoz - 4 IF infoz >= 2 THEN bit(1) = 20: infoz = infoz - 2 IF infoz >= 1 THEN bit(0) = 20: infoz = infoz - 1 '*** END SUB SUB calcdelay ' ³Ú ¿ À Ù Ä Ã ´ COLOR 8 LOCATE 10, 21 PRINT "Ú[Calibration]ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿" LOCATE 11, 21 PRINT "³Please wait while SCOPE determines ³" LOCATE 12, 21 PRINT "³the maximum sweep time for this ³" LOCATE 13, 21 PRINT "³computer. ³" LOCATE 14, 21 PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" COLOR 4 LOCATE 10, 23 PRINT "Calibration" LOCATE 11, 22 PRINT "Please wait while SCOPE determines" LOCATE 12, 22 PRINT "the maximum sweep time for this" LOCATE 13, 22 PRINT "computer." d = TIMER FOR i = 0 TO 25500 NEXT delay = (TIMER - d) / 25500 c = TIMER DO a = INP(0) x = x + 1 LOOP UNTIL TIMER >= c + 5 speed = x / 5 tim = 1 / speed drawscreen END SUB SUB CAPTURE FOR i = 0 TO 255 'USE A TUNED FOR NEXT LOOP (CALIBRATE FUNCTION) sig(i) = INP(PORT)' this is what will be used '*******sweep delay FOR discard = 0 TO sweepdelay NEXT '*******sweep delay ' sig(i) = i + c NEXT END SUB SUB doit (keys$) SELECT CASE LCASE$(keys$) CASE "f" CALL fil CALL drawsweep CASE CHR$(13) CALL CAPTURE drawscreen CALL drawsweep CASE "m" CALL modz CASE ELSE status ("That is not a valid keystroke") SOUND 2600, 1: SOUND 1600, 1 END SELECT END SUB SUB drawlines IF sweep = 0 THEN LINE (110, 30)-(629, 300), 1, B ' THIS MIGHT BE USED IF sweep = 510 THEN GOTO mmm LINE (xoffset + sweep + 6, yoffset - 28)-(xoffset + sweep + 6, yoffset + 239), 4 mmm: LINE (xoffset + sweep + 4, yoffset - 28)-(xoffset + sweep + 5, yoffset + 239), 0, BF FOR i = 0 TO 7 IF sweep = 0 THEN GOTO lll IF bit(i) <> oldbit(i) THEN LINE (sweep + xoffset, bitheight(i) + yoffset)-(sweep + xoffset, bitheight(i) - 20 + yoffset), 2 lll: LINE (sweep + xoffset, bitheight(i) - bit(i) + yoffset)-(sweep + 2 + xoffset, bitheight(i) - bit(i) + yoffset), 2 oldbit(i) = bit(i) NEXT sweep = sweep + 2 END SUB SUB drawscreen LINE (0, 0)-(640, 312), 0, BF LINE (0, 17)-(640, 20), 8, BF LOCATE 1, 2 COLOR 7 PRINT "ile" COLOR 4 LOCATE 1, 1 PRINT "F" COLOR 7 LOCATE 1, 11 PRINT "ode" LOCATE 1, 10 COLOR 4 PRINT "M" COLOR 4 LOCATE 1, 45 COLOR 4 PRINT "Est. sweep rate: " + STR$(speed) + " Hz ñ5%" LOCATE 1, 20 COLOR 2 PRINT "Sweep Delay: " + swp LINE (109, 29)-(630, 301), 1, B ' THIS MIGHT BE USED LINE (108, 30)-(629, 300), 1, B ' THIS MIGHT BE USED LINE (0, 310)-(640, 313), 8, BF LINE (0, 340)-(640, 343), 8, BF COLOR 2 LOCATE 3, 13 PRINT "1" COLOR 10 LOCATE 4, 13 PRINT "0" COLOR 2 LOCATE 5, 13 PRINT "1" COLOR 10 LOCATE 6, 13 PRINT "0" COLOR 2 LOCATE 7, 13 PRINT "1" COLOR 10 LOCATE 8, 13 PRINT "0" COLOR 2 LOCATE 9, 13 PRINT "1" COLOR 10 LOCATE 10, 13 PRINT "0" COLOR 2 LOCATE 11, 13 PRINT "1" COLOR 10 LOCATE 12, 13 PRINT "0" COLOR 2 LOCATE 13, 13 PRINT "1" COLOR 10 LOCATE 14, 13 PRINT "0" COLOR 2 LOCATE 15, 13 PRINT "1" COLOR 10 LOCATE 16, 13 PRINT "0" COLOR 2 LOCATE 17, 13 PRINT "1" COLOR 10 LOCATE 18, 13 PRINT "0" 'a = 3 'COLOR 1 'FOR i = 1 TO 8 'LOCATE a + i 'a = a + 1 'PRINT "Channel" + STR$(i) 'NEXT a = 2 FOR i = 1 TO 8 LOCATE a + i, 1 a = a + 1 COLOR 15 PRINT "Channel" COLOR 2 PRINT " " + LTRIM$(STR$(i)) + " " NEXT COLOR 15 LOCATE 23, 1 PRINT "Press the red letter to select item or press [Enter] to resweep" END SUB SUB drawsweep FOR i = 0 TO 255 info = sig(i) CALL BIN CALL drawlines NEXT sweep = 0 END SUB SUB fil ' ³ ¿Ú ÙÀ Ä Ã ´ COLOR 8 LOCATE 2, 1 PRINT "Ú[ ]ÄÄÄÄ¿" PRINT "³ ave ³" PRINT "³ oad ³" PRINT "³ ancel ³" PRINT "ÃÄÄÄÄÄÄÄÄÄÄ´" PRINT "³ XIT ³" PRINT "ÀÄÄÄÄÄÄÄÄÄÄÙ" COLOR 4 LOCATE 2, 3 PRINT "File" LOCATE 3, 5 PRINT "S" LOCATE 4, 5 PRINT "L" LOCATE 5, 4 PRINT "C" LOCATE 7, 5 PRINT "E" DO reloop: key$ = INKEY$ LOOP UNTIL key$ <> "" SELECT CASE LCASE$(key$) CASE "c" drawscreen EXIT SUB CASE CHR$(27) drawscreen EXIT SUB CASE "e", "x" a = areyousure IF a = 0 THEN drawscreen END IF CASE "s" CALL save drawscreen CASE "l" CALL lod drawscreen drawlines CASE "m" drawscreen CALL modz CASE ELSE SOUND 2600, 1: SOUND 1600, 1 GOTO reloop END SELECT END SUB SUB getportid DEF SEG = 0 a = PEEK(&H408) b = PEEK(&H409) DEF SEG PORT = (256 * b) + a END SUB FUNCTION gettrigbyte ' ³' ³Ú ¿ À Ù Ä Ã ´ COLOR 8 LOCATE 10, 23 PRINT "Ú[Trigger Byte]ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿" LOCATE 11, 23 PRINT "³Enter what will trigger capture ³" LOCATE 12, 23 PRINT "³ ³" LOCATE 13, 23 PRINT "ÃÄÄÄÄÄÄÄÄÄÄÄÄÄ[OK]ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´" LOCATE 14, 23 PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" LOCATE 11, 24 COLOR 4 PRINT "Enter what will trigger capture" LOCATE 13, 38 PRINT "O" LOCATE 10, 25 PRINT "Trigger Byte" mike2: LOCATE 12, 24 LINE INPUT "8 bit number in hex: ", num$ IF num$ = "" THEN gettrigbyte = 256: EXIT FUNCTION IF VAL("&H" + num$) > 255 THEN LOCATE 12, 24 PRINT SPACE$(20) GOTO mike2 END IF drawscreen gettrigbyte = VAL("&H" + num$) END FUNCTION SUB init OUT PORT + 3, 100 ' recomended init. to put on control port END SUB SUB lod COLOR 8 LOCATE 9, 18 PRINT "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ[LOAD DATA FILE]ÄÄÄÄÄÄÄÄÄÄÄÄ¿" LOCATE 10, 18 PRINT "³ ³" LOCATE 11, 18 PRINT "³ ³" LOCATE 12, 18 PRINT "³ ³" LOCATE 13, 18 PRINT "³ ³" LOCATE 14, 18 PRINT "ÃÄÄÄÄÄÄÄÄÄÄÄ[OK]ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´" LOCATE 15, 18 PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" COLOR 15 LOCATE 13, 25 PRINT "Enter a blank line to cancel" COLOR 4 LOCATE 9, 33 PRINT "LOAD DATA FILE" '3143 LOCATE 14, 31 PRINT "O" LOCATE 12, 19 LINE INPUT "Filename: ", file$ IF file$ = "" THEN status ("File load aborted"): EXIT SUB OPEN file$ FOR BINARY AS #1 FOR i = 0 TO 255 GET #1, , sig(i) NEXT CLOSE #1 status ("File: " + file$ + " loaded. No errors found") 'ELSE 'CLOSE #1 'SOUND 2600, 1: SOUND 1600, 1 'SOUND 2600, 1: SOUND 1600, 1 'status ("File is NOT a valid scope file. Aborting Load") 'END IF END SUB SUB modz ' ³Ú ¿ À Ù Ä Ã ´ LOCATE 2, 9 COLOR 8 PRINT "Ú[MODE]ÄÄÄÄÄÄÄÄÄ¿" LOCATE 3, 9 PRINT "³Set sweep delay³" LOCATE 4, 9 PRINT "³Set trig. byte ³" LOCATE 5, 9 PRINT "³Recalibrate ³" LOCATE 6, 9 PRINT "³Cancel ³" LOCATE 7, 9 PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" COLOR 4 LOCATE 2, 11 PRINT "MODE" LOCATE 3, 10 PRINT "S" LOCATE 4, 14 PRINT "t" LOCATE 5, 10 PRINT "R" LOCATE 6, 10 PRINT "C" DO rodoit: key$ = INKEY$ LOOP UNTIL key$ <> "" SELECT CASE LCASE$(key$) CASE "c", CHR$(27) drawscreen EXIT SUB CASE "r" CALL calcdelay drawscreen status ("Capture speed estimated at:" + STR$(speed) + "Hz ñ5%") CASE "t" Q = gettrigbyte IF Q > 255 THEN drawscreen EXIT SUB END IF CALL trig(Q) CASE "f" drawscreen fil CASE "s" setdelay CASE ELSE SOUND 2600, 1: SOUND 1600, 1 GOTO rodoit END SELECT END SUB SUB save COLOR 8 LOCATE 9, 18 PRINT "ÚÄÄÄÄÄÄÄÄÄÄÄÄÄ[SAVE DATA FILE]ÄÄÄÄÄÄÄÄÄÄÄÄ¿" LOCATE 10, 18 PRINT "³ ³" LOCATE 11, 18 PRINT "³ ³" LOCATE 12, 18 PRINT "³ ³" LOCATE 13, 18 PRINT "³ ³" LOCATE 14, 18 PRINT "ÃÄÄÄÄÄÄÄÄÄÄÄ[OK]ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´" LOCATE 15, 18 PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" COLOR 15 LOCATE 13, 25 PRINT "Enter a blank line to cancel" COLOR 4 LOCATE 9, 33 PRINT "SAVE DATA FILE" '3143 LOCATE 14, 31 PRINT "O" LOCATE 12, 19 LINE INPUT "Filename: ", file$ IF file$ = "" THEN status ("File save aborted."): EXIT SUB ON ERROR GOTO errorhandleR OPEN file$ FOR BINARY AS #1 FOR i = 0 TO 255 PUT #1, , sig(i) NEXT CLOSE #1 CALL status("File saved as: " + file$) EXIT SUB END SUB SUB setbitheight Q = 31 FOR i = 0 TO 7 bitheight(i) = Q * i NEXT END SUB SUB setdelay 'YOU KNOW '' ³Ú ¿ À Ù Ä Ã ´ COLOR 8 LOCATE 9, 28 PRINT "Ú[Sweep Delay]ÄÄÄÄÄÄÄÄÄ¿" LOCATE 10, 28 PRINT "³1: As fast as possible³" LOCATE 11, 28 PRINT "³2: 5 ms per sweep ³" LOCATE 12, 28 PRINT "³3: 2 ms per sweep ³" LOCATE 13, 28 PRINT "³4: 1 ms per sweep ³" LOCATE 14, 28 PRINT "³5: .5 ms per sweep ³" LOCATE 15, 28 PRINT "ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ" LOCATE 9, 30 COLOR 4 PRINT "Sweep Delay" LOCATE 10, 29 PRINT 1 LOCATE 11, 29 PRINT 2 LOCATE 12, 29 PRINT 3 LOCATE 13, 29 PRINT 4 LOCATE 14, 29 PRINT 5 DO key$ = INKEY$ LOOP UNTIL key$ <> "" SELECT CASE LCASE$(key$) CASE "1" sweepdelay = 0 swp = "ASAP" CASE "2" a = .005 - tim sweepdelay = a / delay swp = "5 ms" CASE "3" a = .002 - tim sweepdelay = a / delay swp = "2 ms" CASE "4" a = .001 - tim sweepdelay = a / delay swp = "1 ms" CASE "5" a = .0005 - tim sweepdelay = a / delay swp = ".5 ms" END SELECT drawscreen END SUB SUB status (words$) COLOR 15 LOCATE 21, 1 PRINT words$ + SPACE$(80) LINE (0, 340)-(640, 343), 8, BF END SUB SUB trig (bite) COLOR 15 LOCATE 10, 30 PRINT "Currently Waiting for Trig Byte" LOCATE 11, 35 PRINT "Press any key to abort" LOCATE 12, 46 PRINT HEX$(bite) + "h" DO a = INP(PORT) IF INKEY$ <> "" THEN status ("Byte trig. aborted"): EXIT SUB LOOP UNTIL a = bite FOR i = 1 TO 255 sig(i) = INP(PORT) NEXT sig(0) = bite CALL drawsweep END SUB