Basic: add QBasic support.
[jackhill/mal.git] / basic / debug.in.bas
1 REM CHECK_FREE_LIST
2 CHECK_FREE_LIST:
3 REM start and accumulator
4 P1=ZK
5 P2=0
6 CHECK_FREE_LIST_LOOP:
7 IF P1>=ZI THEN GOTO CHECK_FREE_LIST_DONE
8 IF (Z%(P1,0)AND 31)<>15 THEN P2=-1:GOTO CHECK_FREE_LIST_DONE
9 P2=P2+(Z%(P1,0)AND-32)/32
10 P1=Z%(P1,1)
11 GOTO CHECK_FREE_LIST_LOOP
12 CHECK_FREE_LIST_DONE:
13 IF P2=-1 THEN PRINT "corrupt free list at "+STR$(P1)
14 RETURN
15
16 PR_MEMORY_SUMMARY:
17 PRINT
18 #cbm PRINT "Free (FRE) :"+STR$(FRE(0))
19 PRINT "Values (Z%) :"+STR$(ZI-1)+" /"+STR$(Z1)
20 GOSUB CHECK_FREE_LIST: REM get count in P2
21 PRINT " used:"+STR$(ZI-1-P2)+", freed:"+STR$(P2);
22 PRINT ", after repl_env:"+STR$(ZT)
23 PRINT "Strings (S$) :"+STR$(S)+" /"+STR$(Z2)
24 PRINT "Stack (X%) :"+STR$(X+1)+" /"+STR$(Z3)
25 RETURN
26
27 REM REM PR_MEMORY(P1, P2) -> nil
28 REM PR_MEMORY:
29 REM IF P2<P1 THEN P2=ZI-1
30 REM PRINT "vvvvvv"
31 REM PRINT "Z% Value Memory"+STR$(P1)+"->"+STR$(P2);
32 REM PRINT " (ZI: "+STR$(ZI)+", ZK: "+STR$(ZK)+"):"
33 REM IF P2<P1 THEN PRINT " ---":GOTO PR_MEMORY_AFTER_VALUES
34 REM I=P1
35 REM PR_MEMORY_VALUE_LOOP:
36 REM IF I>P2 THEN GOTO PR_MEMORY_AFTER_VALUES
37 REM PRINT " "+STR$(I);
38 REM IF (Z%(I,0)AND 31)=15 THEN GOTO PR_MEMORY_FREE
39 REM PRINT ": ref cnt: "+STR$((Z%(I,0)AND-32)/32);
40 REM PRINT ", type: "+STR$(Z%(I,0)AND 31)+", value: "+STR$(Z%(I,1));
41 REM IF (Z%(I,0)AND 31)=4 THEN PRINT " '"+S$(Z%(I,1))+"'";
42 REM IF (Z%(I,0)AND 31)=5 THEN PRINT " "+S$(Z%(I,1))+"";
43 REM PRINT
44 REM I=I+1
45 REM IF (Z%(I-1,0)AND 31)<>10 THEN GOTO PR_MEMORY_VALUE_LOOP
46 REM PRINT " "+STR$(I)+": ";
47 REM PRINT "params: "+STR$(Z%(I+1,0))+", env:"+STR$(Z%(I+1,1))
48 REM I=I+1
49 REM GOTO PR_MEMORY_VALUE_LOOP
50 REM PR_MEMORY_FREE:
51 REM PRINT ": FREE size: "+STR$((Z%(I,0)AND-32)/32)+", next: "+STR$(Z%(I,1));
52 REM IF I=ZK THEN PRINT " (free list start)";
53 REM PRINT
54 REM IF (Z%(I,0)AND-32)=64 THEN I=I+1:PRINT " "+STR$(I)+": ---"
55 REM I=I+1
56 REM GOTO PR_MEMORY_VALUE_LOOP
57 REM PR_MEMORY_AFTER_VALUES:
58 REM PRINT "S$ String Memory (S: "+STR$(S)+"):"
59 REM IF S<=0 THEN PRINT " ---":GOTO PR_MEMORY_SKIP_STRINGS
60 REM FOR I=0 TO S-1
61 REM PRINT " "+STR$(I)+": '"+S$(I)+"'"
62 REM NEXT I
63 REM PR_MEMORY_SKIP_STRINGS:
64 REM PRINT "X% Stack Memory (X: "+STR$(X)+"):"
65 REM IF X<0 THEN PRINT " ---":GOTO PR_MEMORY_SKIP_STACK
66 REM FOR I=0 TO X
67 REM PRINT " "+STR$(I)+": "+STR$(X%(I))
68 REM NEXT I
69 REM PR_MEMORY_SKIP_STACK:
70 REM PRINT "^^^^^^"
71 REM RETURN
72 REM
73 REM REM PR_OBJECT(P1) -> nil
74 REM PR_OBJECT:
75 REM RD=0
76 REM
77 REM RD=RD+1:X=X+1:X%(X)=P1
78 REM
79 REM PR_OBJ_LOOP:
80 REM IF RD=0 THEN RETURN
81 REM I=X%(X):RD=RD-1:X=X-1
82 REM
83 REM P2=Z%(I,0)AND 31
84 REM PRINT " "+STR$(I);
85 REM PRINT ": ref cnt: "+STR$((Z%(I,0)AND-32)/32);
86 REM PRINT ", type: "+STR$(P2)+", value: "+STR$(Z%(I,1));
87 REM IF P2=4 THEN PRINT " '"+S$(Z%(I,1))+"'";
88 REM IF P2=5 THEN PRINT " "+S$(Z%(I,1))+"";
89 REM PRINT
90 REM IF P2<=5 OR P2=9 THEN GOTO PR_OBJ_LOOP
91 REM IF Z%(I,1)<>0 THEN RD=RD+1:X=X+1:X%(X)=Z%(I,1)
92 REM IF P2>=6 AND P2<=8 THEN RD=RD+1:X=X+1:X%(X)=I+1
93 REM GOTO PR_OBJ_LOOP