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 |
d7a6c2d6 JM |
8 | IF (Z%(P1)AND 31)<>15 THEN P2=-1:GOTO CHECK_FREE_LIST_DONE |
9 | P2=P2+(Z%(P1)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 | ||
9d59cdb3 | 16 | PR_MEMORY_SUMMARY_SMALL: |
6420f327 JM |
17 | #cbm P0=FRE(0) |
18 | ||
9d59cdb3 JM |
19 | GOSUB CHECK_FREE_LIST |
20 | #cbm PRINT "Free:"+STR$(FRE(0))+", "; | |
21 | PRINT "Values:"+STR$(ZI-1-P2)+", Emptys:"; | |
d7a6c2d6 JM |
22 | FOR I=0 TO 4 STEP 2:GOSUB PR_MEMORY_SUMMARY_SMALL_1:NEXT I |
23 | FOR I=6 TO 12 STEP 3:GOSUB PR_MEMORY_SUMMARY_SMALL_1:NEXT I | |
9e8f5211 | 24 | |
9e8f5211 | 25 | RETURN |
d7a6c2d6 JM |
26 | PR_MEMORY_SUMMARY_SMALL_1: |
27 | PRINT STR$(INT(Z%(I)/32))+","; | |
28 | RETURN | |
9e8f5211 | 29 | |
9d59cdb3 JM |
30 | REM REM COUNT_STRINGS() -> P2 |
31 | REM COUNT_STRINGS: | |
32 | REM P1=0 | |
33 | REM P2=0 | |
34 | REM COUNT_STRINGS_LOOP: | |
35 | REM IF P1>S-1 THEN RETURN | |
36 | REM IF S%(P1)>0 THEN P2=P2+1 | |
37 | REM P1=P1+1 | |
38 | REM GOTO COUNT_STRINGS_LOOP | |
39 | REM | |
40 | REM PR_MEMORY_SUMMARY: | |
41 | REM #cbm P0=FRE(0) | |
42 | REM | |
43 | REM PRINT | |
44 | REM #cbm PRINT "Free (FRE) :"+STR$(P0) | |
45 | REM GOSUB CHECK_FREE_LIST: REM get count in P2 | |
46 | REM PRINT "Values (Z%) :"+STR$(ZI-1-P2)+" /"+STR$(Z1) | |
47 | REM REM PRINT " max:"+STR$(ZI-1); | |
48 | REM REM PRINT ", freed:"+STR$(P2)+", after repl_env:"+STR$(ZT) | |
49 | REM GOSUB COUNT_STRINGS | |
50 | REM PRINT "Strings (S$) :"+STR$(P2)+" /"+STR$(Z2) | |
51 | REM #qbasic PRINT "Stack (X%) :"+STR$(X+1)+" /"+STR$(Z3) | |
52 | REM #cbm PRINT "Stack :"+STR$(X+2-Z3)+" / 1920" | |
53 | REM RETURN | |
4202ef7b JM |
54 | |
55 | #cbm PR_MEMORY_MAP: | |
56 | #cbm PRINT | |
57 | #cbm P1=PEEK(43)+PEEK(44)*256 | |
58 | #cbm P2=PEEK(45)+PEEK(46)*256 | |
59 | #cbm P3=PEEK(47)+PEEK(48)*256 | |
60 | #cbm P4=PEEK(49)+PEEK(50)*256 | |
61 | #cbm P5=PEEK(51)+PEEK(52)*256 | |
62 | #cbm P6=PEEK(53)+PEEK(54)*256 | |
63 | #cbm P7=PEEK(55)+PEEK(56)*256 | |
64 | #cbm PRINT "BASIC beg. :"STR$(P1) | |
65 | #cbm PRINT "Variable beg.:"STR$(P2) | |
66 | #cbm PRINT "Array beg. :"STR$(P3) | |
67 | #cbm PRINT "Array end :"STR$(P4) | |
68 | #cbm PRINT "String beg. :"STR$(P5) | |
69 | #cbm PRINT "String cur. :"STR$(P6) | |
70 | #cbm PRINT "BASIC end :"STR$(P7) | |
71 | #cbm PRINT | |
72 | #cbm PRINT "Program Code :"STR$(P2-P1) | |
73 | #cbm PRINT "Variables :"STR$(P3-P2) | |
74 | #cbm PRINT "Arrays :"STR$(P4-P3) | |
75 | #cbm PRINT "String Heap :"STR$(P7-P5) | |
76 | #cbm RETURN | |
77 | ||
d7a6c2d6 JM |
78 | REM REM PR_MEMORY_VALUE(I) -> J: |
79 | REM REM - I is memory value to print | |
80 | REM REM - I is returned as last byte of value printed | |
81 | REM REM - J is returned as type | |
82 | REM PR_MEMORY_VALUE: | |
83 | REM J=Z%(I)AND 31 | |
84 | REM P3=Z%(I+1) | |
85 | REM PRINT " "+STR$(I)+": type:"+STR$(J); | |
86 | REM IF J<>15 THEN PRINT ", refs:"+STR$((Z%(I)-J)/32); | |
87 | REM IF J=15 THEN PRINT ", size:"+STR$((Z%(I)AND-32)/32); | |
88 | REM PRINT ", ["+STR$(Z%(I));+" |"+STR$(P3); | |
89 | REM IF J<6 OR J=9 OR J=12 OR J=15 THEN PRINT " | --- | --- ]";:GOTO PR_MEM_SKIP | |
90 | REM PRINT " |"+STR$(Z%(I+2)); | |
91 | REM IF J=6 OR J=7 OR J=13 OR J=14 THEN PRINT " | --- ]";:GOTO PR_MEM_SKIP | |
92 | REM PRINT " |"+STR$(Z%(I+3))+" ]"; | |
93 | REM PR_MEM_SKIP: | |
94 | REM PRINT " >> "; | |
95 | 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 | |
96 | REM PRINT "Unknown type:"+STR$(J):END | |
97 | REM | |
98 | REM PR_ENTRY_NIL: | |
99 | REM PRINT "nil" | |
100 | REM I=I+1 | |
101 | REM RETURN | |
102 | REM PR_ENTRY_BOOL: | |
103 | REM IF P3=0 THEN PRINT "false" | |
104 | REM IF P3=1 THEN PRINT "true" | |
105 | REM I=I+1 | |
106 | REM RETURN | |
107 | REM PR_ENTRY_INT: | |
108 | REM PR_ENTRY_FLOAT: | |
109 | REM PRINT STR$(P3) | |
110 | REM I=I+1 | |
111 | REM RETURN | |
112 | REM PR_ENTRY_STR: | |
113 | REM PRINT "'"+S$(P3)+"'" | |
114 | REM I=I+1 | |
115 | REM RETURN | |
116 | REM PR_ENTRY_SYM: | |
117 | REM PRINT S$(P3) | |
118 | REM I=I+1 | |
119 | REM RETURN | |
120 | REM PR_ENTRY_LIST: | |
121 | REM I=I+2 | |
122 | REM IF I<16 THEN PRINT "()":RETURN | |
123 | REM PRINT "(..."+STR$(Z%(I))+" ...)" | |
124 | REM RETURN | |
125 | REM PR_ENTRY_VECTOR: | |
126 | REM I=I+2 | |
127 | REM IF I<16 THEN PRINT "[]":RETURN | |
128 | REM PRINT "[..."+STR$(Z%(I))+" ...]" | |
129 | REM RETURN | |
130 | REM PR_ENTRY_HASH_MAP: | |
131 | REM I=I+3 | |
132 | REM IF I<16 THEN PRINT "{}":RETURN | |
133 | REM IF J=8 THEN PRINT "{... key:"+STR$(Z%(I-1))+", val:"+STR$(Z%(I))+" ...}" | |
134 | REM RETURN | |
135 | REM PR_ENTRY_FN: | |
136 | REM PRINT "#<fn"+STR$(P3)+">" | |
137 | REM I=I+1 | |
138 | REM RETURN | |
139 | REM PR_ENTRY_MALFN: | |
140 | REM PR_ENTRY_MAC: | |
141 | REM IF I=11 THEN PRINT "MACRO "; | |
142 | REM PRINT "(fn* param:"+STR$(Z%(I))+", env:"+STR$(Z%(I+1))+")" | |
143 | REM I=I+3 | |
144 | REM RETURN | |
145 | REM PR_ENTRY_ATOM: | |
146 | REM PRINT "(atom val:"+STR$(P3)+")" | |
147 | REM I=I+1 | |
148 | REM RETURN | |
149 | REM PR_ENTRY_ENV: | |
150 | REM PRINT "#<env hm:"+STR$(P3)+", outer:"+STR$(Z%(I+2))+">" | |
151 | REM I=I+2 | |
152 | REM RETURN | |
153 | REM PR_ENTRY_META: | |
154 | REM PRINT "#<meta obj:"+STR$(P3)+", meta:"+STR$(Z%(I+2))+">" | |
155 | REM I=I+2 | |
156 | REM RETURN | |
157 | REM PR_ENTRY_FREE: | |
158 | REM PRINT "FREE next:"+STR$(P3); | |
159 | REM IF I=ZK THEN PRINT " (free list start)"; | |
160 | REM PRINT | |
161 | REM I=I-1+(Z%(I)AND-32)/32 | |
162 | REM RETURN | |
163 | REM | |
164 | REM REM PR_OBJECT(P1) -> nil | |
165 | REM PR_OBJECT: | |
166 | REM RD=0 | |
167 | REM | |
168 | REM IF P1=-1 THEN PRINT " "+STR$(-1)+": ---":RETURN | |
169 | REM RD=RD+1 | |
170 | REM Q=P1:GOSUB PUSH_Q | |
171 | REM | |
172 | REM PR_OBJ_LOOP: | |
173 | REM IF RD=0 THEN RETURN | |
174 | REM RD=RD-1 | |
175 | REM | |
176 | REM GOSUB PEEK_Q:I=Q | |
177 | REM REM IF I<15 THEN GOSUB POP_Q:GOTO PR_OBJ_LOOP | |
178 | REM GOSUB PR_MEMORY_VALUE | |
179 | REM REM J holds type now | |
180 | REM GOSUB POP_Q:I=Q | |
181 | REM | |
182 | REM IF J<6 OR J=9 THEN GOTO PR_OBJ_LOOP: REM no contained references | |
183 | REM REM reference in first position | |
184 | REM IF Z%(I+1)<>0 THEN RD=RD+1:Q=Z%(I+1):GOSUB PUSH_Q | |
185 | REM IF J=12 OR J=15 THEN PR_OBJ_LOOP: REM no more reference | |
186 | REM REM reference in second position | |
187 | REM IF Z%(I+2)<>0 THEN RD=RD+1:Q=Z%(I+2):GOSUB PUSH_Q | |
188 | REM IF J=6 OR J=7 OR J=13 OR J=14 THEN PR_OBJ_LOOP: REM no more references | |
189 | REM IF Z%(I+3)<>0 THEN RD=RD+1:Q=Z%(I+3):GOSUB PUSH_Q | |
190 | REM GOTO PR_OBJ_LOOP | |
191 | REM | |
bbab5c5d | 192 | REM REM PR_MEMORY(P1, P2) -> nil |
9e8f5211 | 193 | REM PR_MEMORY: |
bbab5c5d | 194 | REM IF P2<P1 THEN P2=ZI-1 |
d7a6c2d6 | 195 | REM PRINT "Values (Z%)"+STR$(P1)+" ->"+STR$(P2); |
cc9dbd92 | 196 | REM PRINT " (ZI: "+STR$(ZI)+", ZK: "+STR$(ZK)+"):" |
bbab5c5d JM |
197 | REM IF P2<P1 THEN PRINT " ---":GOTO PR_MEMORY_AFTER_VALUES |
198 | REM I=P1 | |
9e8f5211 | 199 | REM PR_MEMORY_VALUE_LOOP: |
bbab5c5d | 200 | REM IF I>P2 THEN GOTO PR_MEMORY_AFTER_VALUES |
d7a6c2d6 JM |
201 | REM GOSUB PR_MEMORY_VALUE |
202 | REM I=I+1 | |
203 | REM GOTO PR_MEMORY_VALUE_LOOP | |
9e8f5211 | 204 | REM PR_MEMORY_AFTER_VALUES: |
bbab5c5d JM |
205 | REM PRINT "S$ String Memory (S: "+STR$(S)+"):" |
206 | REM IF S<=0 THEN PRINT " ---":GOTO PR_MEMORY_SKIP_STRINGS | |
207 | REM FOR I=0 TO S-1 | |
cc9dbd92 | 208 | REM PRINT " "+STR$(I)+": '"+S$(I)+"'" |
9e8f5211 JM |
209 | REM NEXT I |
210 | REM PR_MEMORY_SKIP_STRINGS: | |
bbab5c5d | 211 | REM PRINT "X% Stack Memory (X: "+STR$(X)+"):" |
9d59cdb3 JM |
212 | REM #cbm IF X<Z3 THEN PRINT " ---":GOTO PR_MEMORY_SKIP_STACK |
213 | REM #cbm FOR I=Z3 TO X | |
214 | REM #cbm PRINT " "+STR$(I)+": "+STR$(PEEK(X)+PEEK(X+1)*256) | |
215 | REM #cbm NEXT I | |
216 | REM #qbasic IF X<0 THEN PRINT " ---":GOTO PR_MEMORY_SKIP_STACK | |
217 | REM #qbasic FOR I=0 TO X | |
218 | REM #qbasic #qbasic PRINT " "+STR$(I)+": "+STR$(X%(I)) | |
219 | REM #qbasic NEXT I | |
9e8f5211 | 220 | REM PR_MEMORY_SKIP_STACK: |
9e8f5211 | 221 | REM RETURN |
70f29a2b | 222 | REM |