Commit | Line | Data |
---|---|---|
6420f327 | 1 | REM CHECK_FREE_LIST() -> P2 |
a742287e JM |
2 | CHECK_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 |
16 | REM COUNT_STRINGS() -> P2 |
17 | COUNT_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 | 26 | PR_MEMORY_SUMMARY: |
6420f327 JM |
27 | #cbm P0=FRE(0) |
28 | ||
9e8f5211 | 29 | |
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 |
41 | REM #cbm PR_MEMORY_MAP: |
42 | REM #cbm PRINT | |
43 | REM #cbm P1=PEEK(43)+PEEK(44)*256 | |
44 | REM #cbm P2=PEEK(45)+PEEK(46)*256 | |
45 | REM #cbm P3=PEEK(47)+PEEK(48)*256 | |
46 | REM #cbm P4=PEEK(49)+PEEK(50)*256 | |
47 | REM #cbm P5=PEEK(51)+PEEK(52)*256 | |
48 | REM #cbm P6=PEEK(53)+PEEK(54)*256 | |
49 | REM #cbm P7=PEEK(55)+PEEK(56)*256 | |
50 | REM #cbm PRINT "BASIC beg. :"STR$(P1) | |
51 | REM #cbm PRINT "Variable beg.:"STR$(P2) | |
52 | REM #cbm PRINT "Array beg. :"STR$(P3) | |
53 | REM #cbm PRINT "Array end :"STR$(P4) | |
54 | REM #cbm PRINT "String beg. :"STR$(P5) | |
55 | REM #cbm PRINT "String cur. :"STR$(P6) | |
56 | REM #cbm PRINT "BASIC end :"STR$(P7) | |
57 | REM #cbm PRINT | |
58 | REM #cbm PRINT "Program Code :"STR$(P2-P1) | |
59 | REM #cbm PRINT "Variables :"STR$(P3-P2) | |
60 | REM #cbm PRINT "Arrays :"STR$(P4-P3) | |
61 | REM #cbm PRINT "String Heap :"STR$(P7-P5) | |
62 | REM #cbm RETURN | |
63 | ||
bbab5c5d | 64 | REM REM PR_MEMORY(P1, P2) -> nil |
9e8f5211 | 65 | REM PR_MEMORY: |
bbab5c5d | 66 | REM IF P2<P1 THEN P2=ZI-1 |
9e8f5211 | 67 | REM PRINT "vvvvvv" |
bbab5c5d | 68 | REM PRINT "Z% Value Memory"+STR$(P1)+"->"+STR$(P2); |
cc9dbd92 | 69 | REM PRINT " (ZI: "+STR$(ZI)+", ZK: "+STR$(ZK)+"):" |
bbab5c5d JM |
70 | REM IF P2<P1 THEN PRINT " ---":GOTO PR_MEMORY_AFTER_VALUES |
71 | REM I=P1 | |
9e8f5211 | 72 | REM PR_MEMORY_VALUE_LOOP: |
bbab5c5d | 73 | REM IF I>P2 THEN GOTO PR_MEMORY_AFTER_VALUES |
9e8f5211 | 74 | REM PRINT " "+STR$(I); |
01975886 | 75 | REM IF (Z%(I,0)AND 31)=15 THEN GOTO PR_MEMORY_FREE |
bbab5c5d | 76 | REM PRINT ": ref cnt: "+STR$((Z%(I,0)AND-32)/32); |
01975886 JM |
77 | REM PRINT ", type: "+STR$(Z%(I,0)AND 31)+", value: "+STR$(Z%(I,1)); |
78 | REM IF (Z%(I,0)AND 31)=4 THEN PRINT " '"+S$(Z%(I,1))+"'"; | |
79 | REM IF (Z%(I,0)AND 31)=5 THEN PRINT " "+S$(Z%(I,1))+""; | |
9e8f5211 JM |
80 | REM PRINT |
81 | REM I=I+1 | |
01975886 | 82 | REM IF (Z%(I-1,0)AND 31)<>10 THEN GOTO PR_MEMORY_VALUE_LOOP |
9e8f5211 JM |
83 | REM PRINT " "+STR$(I)+": "; |
84 | REM PRINT "params: "+STR$(Z%(I+1,0))+", env:"+STR$(Z%(I+1,1)) | |
85 | REM I=I+1 | |
86 | REM GOTO PR_MEMORY_VALUE_LOOP | |
87 | REM PR_MEMORY_FREE: | |
bbab5c5d | 88 | REM PRINT ": FREE size: "+STR$((Z%(I,0)AND-32)/32)+", next: "+STR$(Z%(I,1)); |
cc9dbd92 | 89 | REM IF I=ZK THEN PRINT " (free list start)"; |
9e8f5211 | 90 | REM PRINT |
bbab5c5d | 91 | REM IF (Z%(I,0)AND-32)=64 THEN I=I+1:PRINT " "+STR$(I)+": ---" |
9e8f5211 JM |
92 | REM I=I+1 |
93 | REM GOTO PR_MEMORY_VALUE_LOOP | |
94 | REM PR_MEMORY_AFTER_VALUES: | |
bbab5c5d JM |
95 | REM PRINT "S$ String Memory (S: "+STR$(S)+"):" |
96 | REM IF S<=0 THEN PRINT " ---":GOTO PR_MEMORY_SKIP_STRINGS | |
97 | REM FOR I=0 TO S-1 | |
cc9dbd92 | 98 | REM PRINT " "+STR$(I)+": '"+S$(I)+"'" |
9e8f5211 JM |
99 | REM NEXT I |
100 | REM PR_MEMORY_SKIP_STRINGS: | |
bbab5c5d | 101 | REM PRINT "X% Stack Memory (X: "+STR$(X)+"):" |
cc9dbd92 JM |
102 | REM IF X<0 THEN PRINT " ---":GOTO PR_MEMORY_SKIP_STACK |
103 | REM FOR I=0 TO X | |
bbab5c5d | 104 | REM PRINT " "+STR$(I)+": "+STR$(X%(I)) |
9e8f5211 JM |
105 | REM NEXT I |
106 | REM PR_MEMORY_SKIP_STACK: | |
107 | REM PRINT "^^^^^^" | |
108 | REM RETURN | |
70f29a2b | 109 | REM |
bbab5c5d | 110 | REM REM PR_OBJECT(P1) -> nil |
70f29a2b | 111 | REM PR_OBJECT: |
bbab5c5d | 112 | REM RD=0 |
70f29a2b | 113 | REM |
bbab5c5d | 114 | REM RD=RD+1:X=X+1:X%(X)=P1 |
70f29a2b JM |
115 | REM |
116 | REM PR_OBJ_LOOP: | |
bbab5c5d JM |
117 | REM IF RD=0 THEN RETURN |
118 | REM I=X%(X):RD=RD-1:X=X-1 | |
70f29a2b | 119 | REM |
01975886 | 120 | REM P2=Z%(I,0)AND 31 |
70f29a2b | 121 | REM PRINT " "+STR$(I); |
bbab5c5d JM |
122 | REM PRINT ": ref cnt: "+STR$((Z%(I,0)AND-32)/32); |
123 | REM PRINT ", type: "+STR$(P2)+", value: "+STR$(Z%(I,1)); | |
124 | REM IF P2=4 THEN PRINT " '"+S$(Z%(I,1))+"'"; | |
125 | REM IF P2=5 THEN PRINT " "+S$(Z%(I,1))+""; | |
70f29a2b | 126 | REM PRINT |
bbab5c5d JM |
127 | REM IF P2<=5 OR P2=9 THEN GOTO PR_OBJ_LOOP |
128 | REM IF Z%(I,1)<>0 THEN RD=RD+1:X=X+1:X%(X)=Z%(I,1) | |
129 | REM IF P2>=6 AND P2<=8 THEN RD=RD+1:X=X+1:X%(X)=I+1 | |
70f29a2b | 130 | REM GOTO PR_OBJ_LOOP |