Merge pull request #249 from hterkelsen/dart2
[jackhill/mal.git] / basic / debug.in.bas
CommitLineData
6420f327 1REM CHECK_FREE_LIST() -> P2
a742287e
JM
2CHECK_FREE_LIST:
3 REM start and accumulator
bbab5c5d
JM
4 P1=ZK
5 P2=0
a742287e 6 CHECK_FREE_LIST_LOOP:
bbab5c5d 7 IF P1>=ZI THEN GOTO CHECK_FREE_LIST_DONE
01975886 8 IF (Z%(P1,0)AND 31)<>15 THEN P2=-1:GOTO CHECK_FREE_LIST_DONE
bbab5c5d
JM
9 P2=P2+(Z%(P1,0)AND-32)/32
10 P1=Z%(P1,1)
a742287e
JM
11 GOTO CHECK_FREE_LIST_LOOP
12 CHECK_FREE_LIST_DONE:
bbab5c5d 13 IF P2=-1 THEN PRINT "corrupt free list at "+STR$(P1)
a742287e
JM
14 RETURN
15
6420f327
JM
16REM COUNT_STRINGS() -> P2
17COUNT_STRINGS:
18 P1=0
19 P2=0
20 COUNT_STRINGS_LOOP:
21 IF P1>S-1 THEN RETURN
22 IF S%(P1)>0 THEN P2=P2+1
23 P1=P1+1
24 GOTO COUNT_STRINGS_LOOP
25
9e8f5211 26PR_MEMORY_SUMMARY:
6420f327
JM
27 #cbm P0=FRE(0)
28
9e8f5211 29 PRINT
6420f327 30 #cbm PRINT "Free (FRE) :"+STR$(P0)
0e508fa5 31 GOSUB CHECK_FREE_LIST: REM get count in P2
6420f327 32 PRINT "Values (Z%) :"+STR$(ZI-1-P2)+" /"+STR$(Z1)
c756af81
JM
33 REM PRINT " max:"+STR$(ZI-1);
34 REM PRINT ", freed:"+STR$(P2)+", after repl_env:"+STR$(ZT)
6420f327
JM
35 GOSUB COUNT_STRINGS
36 PRINT "Strings (S$) :"+STR$(P2)+" /"+STR$(Z2)
93593012
JM
37 #qbasic PRINT "Stack (X%) :"+STR$(X+1)+" /"+STR$(Z3)
38 #cbm PRINT "Stack :"+STR$(X+2-Z3)+" / 1920"
9e8f5211
JM
39 RETURN
40
6420f327
JM
41REM #cbm PR_MEMORY_MAP:
42REM #cbm PRINT
43REM #cbm P1=PEEK(43)+PEEK(44)*256
44REM #cbm P2=PEEK(45)+PEEK(46)*256
45REM #cbm P3=PEEK(47)+PEEK(48)*256
46REM #cbm P4=PEEK(49)+PEEK(50)*256
47REM #cbm P5=PEEK(51)+PEEK(52)*256
48REM #cbm P6=PEEK(53)+PEEK(54)*256
49REM #cbm P7=PEEK(55)+PEEK(56)*256
50REM #cbm PRINT "BASIC beg. :"STR$(P1)
51REM #cbm PRINT "Variable beg.:"STR$(P2)
52REM #cbm PRINT "Array beg. :"STR$(P3)
53REM #cbm PRINT "Array end :"STR$(P4)
54REM #cbm PRINT "String beg. :"STR$(P5)
55REM #cbm PRINT "String cur. :"STR$(P6)
56REM #cbm PRINT "BASIC end :"STR$(P7)
57REM #cbm PRINT
58REM #cbm PRINT "Program Code :"STR$(P2-P1)
59REM #cbm PRINT "Variables :"STR$(P3-P2)
60REM #cbm PRINT "Arrays :"STR$(P4-P3)
61REM #cbm PRINT "String Heap :"STR$(P7-P5)
62REM #cbm RETURN
63
bbab5c5d 64REM REM PR_MEMORY(P1, P2) -> nil
9e8f5211 65REM PR_MEMORY:
bbab5c5d 66REM IF P2<P1 THEN P2=ZI-1
9e8f5211 67REM PRINT "vvvvvv"
bbab5c5d 68REM PRINT "Z% Value Memory"+STR$(P1)+"->"+STR$(P2);
cc9dbd92 69REM PRINT " (ZI: "+STR$(ZI)+", ZK: "+STR$(ZK)+"):"
bbab5c5d
JM
70REM IF P2<P1 THEN PRINT " ---":GOTO PR_MEMORY_AFTER_VALUES
71REM I=P1
9e8f5211 72REM PR_MEMORY_VALUE_LOOP:
bbab5c5d 73REM IF I>P2 THEN GOTO PR_MEMORY_AFTER_VALUES
9e8f5211 74REM PRINT " "+STR$(I);
01975886 75REM IF (Z%(I,0)AND 31)=15 THEN GOTO PR_MEMORY_FREE
bbab5c5d 76REM PRINT ": ref cnt: "+STR$((Z%(I,0)AND-32)/32);
01975886
JM
77REM PRINT ", type: "+STR$(Z%(I,0)AND 31)+", value: "+STR$(Z%(I,1));
78REM IF (Z%(I,0)AND 31)=4 THEN PRINT " '"+S$(Z%(I,1))+"'";
79REM IF (Z%(I,0)AND 31)=5 THEN PRINT " "+S$(Z%(I,1))+"";
9e8f5211
JM
80REM PRINT
81REM I=I+1
01975886 82REM IF (Z%(I-1,0)AND 31)<>10 THEN GOTO PR_MEMORY_VALUE_LOOP
9e8f5211
JM
83REM PRINT " "+STR$(I)+": ";
84REM PRINT "params: "+STR$(Z%(I+1,0))+", env:"+STR$(Z%(I+1,1))
85REM I=I+1
86REM GOTO PR_MEMORY_VALUE_LOOP
87REM PR_MEMORY_FREE:
bbab5c5d 88REM PRINT ": FREE size: "+STR$((Z%(I,0)AND-32)/32)+", next: "+STR$(Z%(I,1));
cc9dbd92 89REM IF I=ZK THEN PRINT " (free list start)";
9e8f5211 90REM PRINT
bbab5c5d 91REM IF (Z%(I,0)AND-32)=64 THEN I=I+1:PRINT " "+STR$(I)+": ---"
9e8f5211
JM
92REM I=I+1
93REM GOTO PR_MEMORY_VALUE_LOOP
94REM PR_MEMORY_AFTER_VALUES:
bbab5c5d
JM
95REM PRINT "S$ String Memory (S: "+STR$(S)+"):"
96REM IF S<=0 THEN PRINT " ---":GOTO PR_MEMORY_SKIP_STRINGS
97REM FOR I=0 TO S-1
cc9dbd92 98REM PRINT " "+STR$(I)+": '"+S$(I)+"'"
9e8f5211
JM
99REM NEXT I
100REM PR_MEMORY_SKIP_STRINGS:
bbab5c5d 101REM PRINT "X% Stack Memory (X: "+STR$(X)+"):"
cc9dbd92
JM
102REM IF X<0 THEN PRINT " ---":GOTO PR_MEMORY_SKIP_STACK
103REM FOR I=0 TO X
bbab5c5d 104REM PRINT " "+STR$(I)+": "+STR$(X%(I))
9e8f5211
JM
105REM NEXT I
106REM PR_MEMORY_SKIP_STACK:
107REM PRINT "^^^^^^"
108REM RETURN
70f29a2b 109REM
bbab5c5d 110REM REM PR_OBJECT(P1) -> nil
70f29a2b 111REM PR_OBJECT:
bbab5c5d 112REM RD=0
70f29a2b 113REM
bbab5c5d 114REM RD=RD+1:X=X+1:X%(X)=P1
70f29a2b
JM
115REM
116REM PR_OBJ_LOOP:
bbab5c5d
JM
117REM IF RD=0 THEN RETURN
118REM I=X%(X):RD=RD-1:X=X-1
70f29a2b 119REM
01975886 120REM P2=Z%(I,0)AND 31
70f29a2b 121REM PRINT " "+STR$(I);
bbab5c5d
JM
122REM PRINT ": ref cnt: "+STR$((Z%(I,0)AND-32)/32);
123REM PRINT ", type: "+STR$(P2)+", value: "+STR$(Z%(I,1));
124REM IF P2=4 THEN PRINT " '"+S$(Z%(I,1))+"'";
125REM IF P2=5 THEN PRINT " "+S$(Z%(I,1))+"";
70f29a2b 126REM PRINT
bbab5c5d
JM
127REM IF P2<=5 OR P2=9 THEN GOTO PR_OBJ_LOOP
128REM IF Z%(I,1)<>0 THEN RD=RD+1:X=X+1:X%(X)=Z%(I,1)
129REM IF P2>=6 AND P2<=8 THEN RD=RD+1:X=X+1:X%(X)=I+1
70f29a2b 130REM GOTO PR_OBJ_LOOP