A machine-code routine that places a small window in the upper left corner of the screen that displays what line and command of a BASIC program is currently running! Great for debugging programs.
Content
Source Code
9799 STOP
9800 REM Merge this program to aBASIC program.GOTO 9800 to tracethe BASIC program
9807 IF PEEK 65350=201 THEN GO TO 9902
9810 CLEAR 65217
9812 PRINT "Please wait..."''"Machine Code Loading"
9815 RESTORE 9825
9820 FOR q=65218 TO 65352: READ a: POKE q,a: NEXT q
9823 REM data A:
9825 DATA 42,80,255,237,91,82,255,167,237,82,0,56,1,201,42,84,255,35,35,35,0,0,62,13,35,190,32,252,35,34,84,255,70,35,78,237,67,80,255,24,215,0,0
9830 REM data B:
9835 DATA 42,84,255,35,35,35,35,126,254,250,40,63,254,235,40,59,254,243,40,55,254,237,40,51,254,254,40,47,254,236,40,43,254,226,40,39,35,126,254,13,40,10,254,58,40,216,254,34,40,15,24,240
9840 REM data S13:
9845 DATA 35,34,84,255,70,35,78,237,67,80,255,24,191
9850 REM data SEE:
9855 DATA 1,0,2,35,62,34,237,177,24,218
9860 REM data OUT:
9865 DATA 6,0,78,34,86,255,201,0,0,42,84,255,24,203,201,0,0
9870 CLS
9900 REM Flow Utility
9901 IF PEEK 65350<>201 THEN PRINT "Machine Code not Loaded..."''"GOTO 9800": STOP
9902 DIM s(50): LET s=0: LET ll=s
9905 PRINT "Basic Program Flow:";AT 0,0; OVER 1;"_________ _________"
9907 INPUT "Starting Line Number? ";l
9910 IF l>=9800 THEN GO TO 9907
9912 LET l2=INT (l/256): LET l1=l-l2*256
9913 POKE 65362,l1: POKE 65363,l2
9914 POKE 65364,86: POKE 65365,104: POKE 65360,PEEK 26711: POKE 65361,PEEK 26710
9915 RANDOMIZE USR 65218: LET a=PEEK 65364+256*PEEK 65365: LET l=PEEK (a+1)+256*PEEK a
9916 LET c=USR 65261
9917 LET l=PEEK 65360+256*PEEK 65361: IF l>=9800 THEN PRINT "END of BASIC": STOP
9918 LET a=PEEK 65366+256*PEEK 65367
9919 IF c=250 THEN GO TO 9950
9921 IF l=ll THEN PRINT ": ";
9922 IF l<>ll THEN PRINT : PRINT l;" ";: LET ll=l
9923 IF c=254 THEN PRINT "RETURN";: LET l=s(s): LET s=s-1: GO TO 9912
9925 IF c=235 OR c=243 THEN PRINT CHR$ c;: GO TO 9980
9927 IF c=226 THEN PRINT "STOP": STOP
9930 LET a=a+1: LET g=PEEK a
9933 IF g<>14 THEN GO TO 9930
9935 LET a=a+3: LET g=PEEK a+256*PEEK (a+1)
9937 IF c=237 THEN PRINT "GOSUB ";: LET l=l+1: LET s=s+1: LET s(s)=l
9940 IF c=236 THEN PRINT "GOTO ";
9945 PRINT g;: LET l=g: GO TO 9912
9950 LET a=a+1: IF PEEK a<>203 THEN GO TO 9950
9952 LET c=PEEK (a+1)
9954 IF l<>ll THEN PRINT : LET ll=l
9955 PRINT l;" IF...THEN ";CHR$ c;: IF c=236 OR c=237 THEN GO TO 9960
9957 LET a=a+1: GO TO 9980
9960 LET a=a+1: LET g=PEEK a
9962 IF g<>14 THEN GO TO 9960
9965 LET a=a+3: LET g=PEEK a+256*PEEK (a+1): PRINT g;: LET a=a+1: GO TO 9980
9980 LET l2=INT (a/256): LET l1=a-l2*256: POKE 65364,l1: POKE 65365,l2: LET c=USR 65345: GO TO 9917
9999 SAVE "tracer": LIST