1 REM CHECK_FREE_LIST() -> P2
3 REM start and accumulator
9 REM IF (Z%(P1)AND 31)<>15 THEN PRINT "corrupt free:"+STR$(P1):END
10 P2
=P2
+(Z
%(P1
)AND-32)/32
12 GOTO CHECK_FREE_LIST_LOOP
14 PR_MEMORY_SUMMARY_SMALL:
18 #cbm PRINT
"Free:"+STR
$(FRE(0))+", ";
19 PRINT "Values
:"+STR$(ZI-1-P2)+", Emptys:";
20 FOR P
=0 TO 4 STEP
2:GOSUB PR_MEMORY_SUMMARY_SMALL_1
:NEXT P
21 FOR P
=6 TO 12 STEP
3:GOSUB PR_MEMORY_SUMMARY_SMALL_1
:NEXT P
24 PR_MEMORY_SUMMARY_SMALL_1:
25 PRINT STR
$(INT(Z%(P)/32))+",";
28 REM REM COUNT_STRINGS() -> P2
32 REM COUNT_STRINGS_LOOP:
33 REM IF P1>S-1 THEN RETURN
34 REM IF S%(P1)>0 THEN P2=P2+1
36 REM GOTO COUNT_STRINGS_LOOP
38 REM PR_MEMORY_SUMMARY:
42 REM #cbm PRINT "Free (FRE) :"+STR$(P0)
43 REM GOSUB CHECK_FREE_LIST: REM get count in P2
44 REM PRINT "Values (Z%) :"+STR$(ZI-1-P2)+" /"+STR$(Z1)
45 REM REM PRINT " max:"+STR$(ZI-1);
46 REM REM PRINT ", freed:"+STR$(P2)+", after repl_env:"+STR$(ZT)
47 REM GOSUB COUNT_STRINGS
48 REM PRINT "Strings (S$) :"+STR$(P2)+" /"+STR$(Z2)
49 REM #qbasic PRINT "Stack (X%) :"+STR$(X+1)+" /"+STR$(Z3)
50 REM #cbm PRINT "Stack :"+STR$(X+2-Z3)+" / 1920"
53 REM #cbm PR_MEMORY_MAP:
55 REM #cbm P1=PEEK(43)+PEEK(44)*256
56 REM #cbm P2=PEEK(45)+PEEK(46)*256
57 REM #cbm P3=PEEK(47)+PEEK(48)*256
58 REM #cbm P4=PEEK(49)+PEEK(50)*256
59 REM #cbm P5=PEEK(51)+PEEK(52)*256
60 REM #cbm P6=PEEK(53)+PEEK(54)*256
61 REM #cbm P7=PEEK(55)+PEEK(56)*256
62 REM #cbm PRINT "BASIC beg. :"STR$(P1)
63 REM #cbm PRINT "Variable beg.:"STR$(P2)
64 REM #cbm PRINT "Array beg. :"STR$(P3)
65 REM #cbm PRINT "Array end :"STR$(P4)
66 REM #cbm PRINT "String beg. :"STR$(P5)
67 REM #cbm PRINT "String cur. :"STR$(P6)
68 REM #cbm PRINT "BASIC end :"STR$(P7)
70 REM #cbm PRINT "Program Code :"STR$(P2-P1)
71 REM #cbm PRINT "Variables :"STR$(P3-P2)
72 REM #cbm PRINT "Arrays :"STR$(P4-P3)
73 REM #cbm PRINT "String Heap :"STR$(P7-P5)
76 REM REM PR_MEMORY_VALUE(I) -> J:
77 REM REM - I is memory value to print
78 REM REM - I is returned as last byte of value printed
79 REM REM - J is returned as type
83 REM PRINT " "+STR$(I)+": type:"+STR$(J);
84 REM IF J<>15 THEN PRINT ", refs:"+STR$((Z%(I)-J)/32);
85 REM IF J=15 THEN PRINT ", size:"+STR$((Z%(I)AND-32)/32);
86 REM PRINT ", ["+STR$(Z%(I));+" |"+STR$(P3);
87 REM IF J<6 OR J=9 OR J=12 OR J=15 THEN PRINT " | --- | --- ]";:GOTO PR_MEM_SKIP
88 REM PRINT " |"+STR$(Z%(I+2));
89 REM IF J=6 OR J=7 OR J=13 OR J=14 THEN PRINT " | --- ]";:GOTO PR_MEM_SKIP
90 REM PRINT " |"+STR$(Z%(I+3))+" ]";
93 REM ON J+1 GOTO PR_ENTRY_NIL,PR_ENTRY_BOOL,PR_ENTRY_INT,PR_ENTRY_FLOAT,PR_ENTRY_STR,PR_ENTRY_SYM,PR_ENTRY_LIST,PR_ENTRY_VECTOR,PR_ENTRY_HASH_MAP,PR_ENTRY_FN,PR_ENTRY_MALFN,PR_ENTRY_MAC,PR_ENTRY_ATOM,PR_ENTRY_ENV,PR_ENTRY_META,PR_ENTRY_FREE
94 REM PRINT "Unknown type:"+STR$(J):END
101 REM IF P3=0 THEN PRINT "false"
102 REM IF P3=1 THEN PRINT "true"
111 REM PRINT "'"+S$(P3)+"'"
120 REM IF I<16 THEN PRINT "()":RETURN
121 REM PRINT "(..."+STR$(Z%(I))+" ...)"
125 REM IF I<16 THEN PRINT "[]":RETURN
126 REM PRINT "[..."+STR$(Z%(I))+" ...]"
128 REM PR_ENTRY_HASH_MAP:
130 REM IF I<16 THEN PRINT "{}":RETURN
131 REM IF J=8 THEN PRINT "{... key:"+STR$(Z%(I-1))+", val:"+STR$(Z%(I))+" ...}"
134 REM PRINT "#<fn"+STR$(P3)+">"
139 REM IF I=11 THEN PRINT "MACRO ";
140 REM PRINT "(fn* param:"+STR$(Z%(I))+", env:"+STR$(Z%(I+1))+")"
144 REM PRINT "(atom val:"+STR$(P3)+")"
148 REM PRINT "#<env hm:"+STR$(P3)+", outer:"+STR$(Z%(I+2))+">"
152 REM PRINT "#<meta obj:"+STR$(P3)+", meta:"+STR$(Z%(I+2))+">"
156 REM PRINT "FREE next:"+STR$(P3);
157 REM IF I=ZK THEN PRINT " (free list start)";
159 REM I=I-1+(Z%(I)AND-32)/32
162 REM REM PR_OBJECT(P1) -> nil
166 REM IF P1=-1 THEN PRINT " "+STR$(-1)+": ---":RETURN
168 REM Q=P1:GOSUB PUSH_Q
171 REM IF RD=0 THEN RETURN
175 REM REM IF I<15 THEN GOSUB POP_Q:GOTO PR_OBJ_LOOP
176 REM GOSUB PR_MEMORY_VALUE
177 REM REM J holds type now
180 REM IF J<6 OR J=9 THEN GOTO PR_OBJ_LOOP: REM no contained references
181 REM REM reference in first position
182 REM IF Z%(I+1)<>0 THEN RD=RD+1:Q=Z%(I+1):GOSUB PUSH_Q
183 REM IF J=12 OR J=15 THEN PR_OBJ_LOOP: REM no more reference
184 REM REM reference in second position
185 REM IF Z%(I+2)<>0 THEN RD=RD+1:Q=Z%(I+2):GOSUB PUSH_Q
186 REM IF J=6 OR J=7 OR J=13 OR J=14 THEN PR_OBJ_LOOP: REM no more references
187 REM IF Z%(I+3)<>0 THEN RD=RD+1:Q=Z%(I+3):GOSUB PUSH_Q
190 REM REM PR_MEMORY(P1, P2) -> nil
192 REM IF P2<P1 THEN P2=ZI-1
193 REM PRINT "Values (Z%)"+STR$(P1)+" ->"+STR$(P2);
194 REM PRINT " (ZI: "+STR$(ZI)+", ZK: "+STR$(ZK)+"):"
195 REM IF P2<P1 THEN PRINT " ---":GOTO PR_MEMORY_AFTER_VALUES
197 REM PR_MEMORY_VALUE_LOOP:
198 REM IF I>P2 THEN GOTO PR_MEMORY_AFTER_VALUES
199 REM GOSUB PR_MEMORY_VALUE
201 REM GOTO PR_MEMORY_VALUE_LOOP
202 REM PR_MEMORY_AFTER_VALUES:
203 REM PRINT "S$ String Memory (S: "+STR$(S)+"):"
204 REM IF S<=0 THEN PRINT " ---":GOTO PR_MEMORY_SKIP_STRINGS
206 REM PRINT " "+STR$(I)+": '"+S$(I)+"'"
208 REM PR_MEMORY_SKIP_STRINGS:
209 REM PRINT "X% Stack Memory (X: "+STR$(X)+"):"
210 REM #cbm IF X<Z3 THEN PRINT " ---":GOTO PR_MEMORY_SKIP_STACK
211 REM #cbm FOR I=Z3 TO X
212 REM #cbm PRINT " "+STR$(I)+": "+STR$(PEEK(X)+PEEK(X+1)*256)
214 REM #qbasic IF X<0 THEN PRINT " ---":GOTO PR_MEMORY_SKIP_STACK
215 REM #qbasic FOR I=0 TO X
216 REM #qbasic #qbasic PRINT " "+STR$(I)+": "+STR$(X%(I))
218 REM PR_MEMORY_SKIP_STACK: