home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er
/
64ER_CD.iso
/
86xx
/
8602.d64
/
garbage64quell
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
1995-03-30
|
8KB
|
459 lines
10 SYS9*4096
20 .OPT P,OO
30 *= $C700
100 ; **** GARBAGE COLLECTION ****
101 ;
102 ;DEFINITION DER HILFSZEIGER
103 LAZEI =$45;LAUFZEIGER D.DESKRIPTOREN
104 ROMZEI =$47;LAUFZEIGER UNTER ROM
105 STRIZEI =$49;HILFSZEIGER F. STRING
106 MEZEI =$4B;LETZTER PLATZ OBERES ROM
107 NEUZEI =$4D;STRINGBEREICHSLAUFZEIGER
108 FELDEND =$4F;HILFZEIGER ARRAYENDE
109 STRISPEI =$51;HILFSZEIGER
110 SUBTRAH =$53;STRINGLAENGEZWISCHENSP.
111 ;
112 ;
113 ;VORBELEGUNG DER SPEICHERPLAETZE
114 VROMZEI =$0000;START VON ROMZEI
116 VGRENZEI =$DF00;GRENZE+ FUER ROMZEI
117 VJUMPZEI =$C000
118 ;
119 ; 1. VORBEREITUNG ------------------
120 ;
121 ANFANG SEI;INTERRUPTS VERHINDERN
122 PHA;PROZESSORREGISTER RETTEN
123 TYA
124 PHA
125 TXA
126 PHA
127 LDA 1;SPEICHERKONFIGURATION RETTEN
128 STA ZAHL
129 LDA #46;KONTROLLANZEIGE BILDSCHIRM
130 STA 2023
131 LDA #9
132 STA 56295
133 LDY #20;BENOETIGTE SPEICHER RETTEN
134 RET LDA $44,Y
135 STA SAVE,Y
136 DEY
137 BNE RET
138 LDA #55;AUF ROM UMSCHALTEN
139 STA 1
140 LDA 45;VARIABLENSTART NACH LAZEI
141 STA LAZEI
142 LDA 46
143 STA LAZEI+1
144 ;
145 LDA #<VROMZEI;$FFFF+1 NACH ROMZEI
146 STA ROMZEI
147 LDA #>VROMZEI
148 STA ROMZEI+1
149 ;
150 LDA #0;MEZEI VORBELEGEN
151 STA MEZEI
152 STA MEZEI+1
153 STA ZWEI
154 ;
155 LDA 55;DURCHL.ZEIGER F.STRINGBEREICH
156 STA NEUZEI
157 LDA 56
158 STA NEUZEI+1
159 ;
160 ;
161 ;2. VARIABLENBEREICH ---------------
162 ; 600
163 VOVORN LDA LAZEI;SCHON ENDE VARIABLE
164 CMP 47
165 BNE WEI1
166 LDA LAZEI+1
167 CMP 48
168 BEQ FELDER
169 ;
170 WEI1 LDY #0;STRINGVARIABLE J/N
171 LDA (LAZEI),Y
172 ASL
173 BCS LA7;KEINE STRINGVARIABLE
174 INY
175 LDA (LAZEI),Y
176 ASL
177 BCC LA7;KEINE STRINGVARIABLE
178 ;
179 CLC;LAZEI=LAZEI+2;STRINGVARIABLE
180 LDA #2
181 ADC LAZEI
182 STA LAZEI
183 BCC WEI2
184 INC LAZEI+1
185 ;
186 ;
187 WEI2 LDY #0
188 LDA (LAZEI),Y;LEERSTRING J/N
189 BEQ LA5
190 ;
191 LDY #2;DESCRIPTOR IN STR.BEREICH J/N
192 LDA (LAZEI),Y
193 CMP 52
194 BCC LA5;HB 52 > ALS DESCRIPTOR HB
195 BNE WEI3;HB 52 <> HB DESKRIPTOR=OK
196 DEY
197 LDA (LAZEI),Y
198 CMP 51
199 BCC LA5;LB 51 > LB DES,HB 52 =HB DES
200 ;
201 WEI3 JSR ABSPEI
202 ;
203 LA5 CLC;LAZEI UM 5 ERHOEHEN
204 LDA #5
205 ADC LAZEI
206 STA LAZEI
207 BCC L1
208 INC LAZEI+1
209 L1 JMP VOVORN
210 ;
211 LA7 CLC;LAZEI UM 7 ERHOEHEN
212 LDA #7
213 ADC LAZEI
214 STA LAZEI
215 BCC L2
216 INC LAZEI+1
217 L2 JMP VOVORN
218 ;
219 ;
220 ;
221 ;3. ARRAYBEREICH -------------------
222 ;
223 FELDER LDA LAZEI;ARRAYBEREICHENDEJ/N
224 CMP 49
225 BNE WEI11
226 LDA LAZEI+1
227 CMP 50
228 BNE WEI11
229 JMP RAMUN
230 ;
231 WEI11 LDY #0;STRINGFELD J/N
232 LDA (LAZEI),Y
233 ASL
234 BCS LASTRL;KEIN STRINGFELD
235 INY
236 LDA (LAZEI),Y
237 ASL
238 BCC LASTRL;KEIN STRINGFELD
239 ;
240 ;
241 ;
242 ;STRINGFELD
243 LDY #3;ERRECHNEN FELDENDE
244 LDA (LAZEI),Y
245 PHA
246 DEY
247 CLC
248 LDA (LAZEI),Y
249 ADC LAZEI
250 STA FELDEND
251 PLA
252 ADC LAZEI+1
253 STA FELDEND+1
254 ;
255 LDY #4;ANZAHL DER DIMENSIONEN NACH Y
256 LDA (LAZEI),Y
257 TAY
258 ;
259 LDA #5;LAZEI AUF 1. DESCRIPTOR
260 CLC;LAZEI UM 5 ERHOEHEN
261 ADC LAZEI
262 STA LAZEI
263 BCC WEI14
264 INC LAZEI+1
265 ;
266 ;
267 WEI14 LDA #2;LAZEI + DIMENS.ANZAHL*2
268 CLC
269 ADC LAZEI
270 STA LAZEI
271 BCC WEI15
272 INC LAZEI+1
273 WEI15 DEY
274 BNE WEI14
275 ;
276 VUVURN LDA LAZEI;FELDENDE J/N
277 CMP FELDEND
278 BNE WEI16
279 LDA LAZEI+1
280 CMP FELDEND+1
281 BEQ FELDER
282 ;
283 WEI16 LDA (LAZEI),Y;STRING LEER J/N
284 BEQ LA3
285 ;
286 LDY #2;DESCRIPTOR IM STR.BEREICH J/N
287 LDA (LAZEI),Y
288 CMP 52
289 BCC LA3
290 BNE WEI17
291 DEY
292 LDA (LAZEI),Y
293 CMP 51
294 BCC LA3
295 WEI17 JSR ABSPEI
296 ;
297 LA3 CLC;LAZEI UM 3 ERHOEHEN
298 LDA #3
299 ADC LAZEI
300 STA LAZEI
301 BCC WEI18
302 INC LAZEI+1
303 WEI18 JMP VUVURN
304 ;
305 LASTRL LDY #3;LAZEI + ARRAYLAENGE
306 LDA (LAZEI),Y
307 PHA
308 DEY
309 LDA (LAZEI),Y
310 CLC
311 ADC LAZEI
312 STA LAZEI
313 PLA
314 ADC LAZEI+1
315 STA LAZEI+1
316 JMP FELDER
317 ;
318 ;
319 ;
320 ;
321 ;4. RAM UNTER ROM NACH VARIABLE ----
322 ;
323 RAMUN LDA ROMZEI;WAREN STRINGS DA
324 CMP #<VROMZEI
325 BNE RUMUN
326 LDA ROMZEI+1
327 CMP #>VROMZEI
328 BNE RUMUN
329 JMP ENDE
330 ;
331 RUMUN LDA #53;AUF ROM SCHALTEN
332 STA 1
333 LDA NEUZEI;STRINGBEGINNSZEIGER NEU
334 STA 51
335 LDA NEUZEI+1
336 STA 52
337 ;
338 LDA ZWEI;WAR UNTERES RAM IN USE J/N
339 BNE DOPP
340 ;
341 LDA ROMZEI;NUR 1.BEREICH ROMZEI-FFFF
342 STA STRISPEI;SUBROUTINEVORBELEGUNG
343 LDA ROMZEI+1
344 STA STRISPEI+1
345 LDA #<VROMZEI-1
346 STA LAZEI
347 LDA #>VROMZEI-1
348 STA LAZEI+1
349 ;
350 JSR SPEISTRI;UMSPEICHERUNGSROUTINE
351 ;
352 JMP ROMNEU
353 ;
354 ;
355 DOPP LDA ROMZEI;1.UND 2. BENUTZT
356 STA STRISPEI;SUBROUTINEVORBELEGUNG
357 LDA ROMZEI+1
358 STA STRISPEI+1
359 LDA #<VJUMPZEI-1
360 STA LAZEI
361 LDA #>VJUMPZEI-1
362 STA LAZEI+1
363 ;
364 JSR SPEISTRI;UMSPEICHERROUTINE
365 ;
366 LDA MEZEI;SUBROUTINEVORBELEGUNG
367 STA STRISPEI
368 LDA MEZEI+1
369 STA STRISPEI+1
370 LDA #<VROMZEI-1
371 STA LAZEI
372 LDA #>VROMZEI-1
373 STA LAZEI+1
374 ;
375 JSR SPEISTRI;UMSPEICHERROUTINE
376 JMP ROMNEU
377 ;
378 ;
379 ;
380 ;
381 SPEISTRI LDY #0;KOPIER V STRISPEI
382 ;- LAZEI NACH NEUZEI AUFWAERTS
383 WIDA LDA (STRISPEI),Y
384 STA (NEUZEI),Y
385 LDA LAZEI
386 CMP STRISPEI
387 BNE W21
388 LDA LAZEI+1
389 CMP STRISPEI+1
390 BNE W21
391 BEQ W24
392 W21 INC NEUZEI
393 BNE W22
394 INC NEUZEI+1
395 W22 INC STRISPEI
396 BNE WIDA
397 INC STRISPEI+1
398 W23 JMP WIDA
399 ;
400 W24 INC NEUZEI
401 BNE W25
402 INC NEUZEI+1
403 W25 RTS
404 ;
405 ;
406 ;
407 ;5. ROM NEU INS RAM KOPIEREN -------
408 ;
409 ROMNEU LDA ZAHL;EINGEBUNDEN J/N
410 CMP #55
411 BEQ ENDE;LAEUFT IM ROM
412 JSR RUMNEU
413 JMP ENDE
414 ;
415 LDA #1;HIER EXTRAEINSPRUNG VON BASIC
416 STA ZWEI
417 JSR RUMNEU
418 LDA #53
419 STA 1
420 RTS
421 ;
422 RUMNEU LDA #55;AUF ROM UMSCHALTEN
423 STA 1
424 ;
425 LDA #$00
426 STA LAZEI
427 LDA #$E0
428 STA LAZEI+1
429 JSR COPI
430 ;
431 LDA ZWEI;UNT. ROM AUCH ZU KOPIEREN
432 BEQ END
433 LDA #$00
434 STA LAZEI
435 LDA #$A0
436 STA LAZEI+1
437 JSR COPI
438 END JSR EINBIND
439 RTS
440 ;
441 ;
442 COPI LDX #32;8K ROM IN RAM KOPIEREN
443 LDY #0
444 AGEIN LDA (LAZEI),Y
445 STA (LAZEI),Y
446 INY
447 BNE AGEIN
448 INC LAZEI+1
449 DEX
450 BNE AGEIN
451 RTS
452 ;
453 ;6. ENDE ---------------------------
454 ;
455 ENDE LDY #20;SPEICHER RUECKRETTEN
456 ROT LDA SAVE,Y
457 STA $44,Y
458 DEY
459 BNE ROT
460 LDA #32;KONTROLLANZEIGE LOESCHEN
461 STA 2023
462 LDA ZAHL;ALTE SPEICHERKONFIGURATION
463 STA 1
464 PLA;PROZESSORINHALTE WIEDERHOLEN
465 TAX
466 PLA
467 TAY
468 PLA
469 CLI;INTERRUPTS WIEDER ERLAUBT
470 RTS
471 ;
472 ;
473 ;SUBROUTINEN -----------------------
474 ;
475 ;UNTERPROGRAMM, DAS DEN STRING, AUF
476 ;DESSEN DESKPRIPTOR LAZEI STEHT,UN-
477 ;TERHALB ROMZEI ABSPEICHERT UND DIE
478 ;POSITIONSANGABE DES DESKR. RELATIV
479 ;ZUM RICHT. STRINGBER. AKTUALISIERT
480 ;
481 ABSPEI LDY #2;STRINGADR. IN STRIZEI
482 LDA (LAZEI),Y;LAENGE IN Y UND STACK
483 STA STRIZEI+1
484 DEY
485 LDA (LAZEI),Y
486 STA STRIZEI
487 DEY
488 LDA (LAZEI),Y
489 STA SUBTRAH
490 TAY
491 ;
492 OGAIN LDA ROMZEI;ROMZEI-STRINGLAENGE
493 SEC
494 SBC SUBTRAH
495 STA ROMZEI
496 BCS ETZ
497 DEC ROMZEI+1
498 LDA ROMZEI+1
499 CMP #>VGRENZEI
500 BNE ETZ
501 ;
502 LDA #1;O.RAM VOLL,ROMZEI+YNACH MEZEI
503 STA ZWEI
504 TYA
505 CLC
506 ADC ROMZEI
507 STA MEZEI
508 BCC WTR
509 INC ROMZEI+1
510 WTR LDA ROMZEI+1
511 STA MEZEI+1
512 LDA #<VJUMPZEI;ROMZEI AUF C000
513 STA ROMZEI
514 LDA #>VJUMPZEI
515 STA ROMZEI+1
516 JMP OGAIN
517 ;
518 ETZ DEY;STRING UNTERS ROM SPEICHERN
519 NOML LDA (STRIZEI),Y
520 STA (ROMZEI),Y
521 DEY
522 CPY #255
523 BNE NOML
524 ;
525 ;
526 LDY #1;NEUZEI-STR.LAENGE=DESKRIPTOR
527 LDA NEUZEI
528 SEC
529 SBC SUBTRAH
530 STA NEUZEI
531 STA (LAZEI),Y
532 BCS WAIDR
533 DEC NEUZEI+1
534 WAIDR INY
535 LDA NEUZEI+1
536 STA (LAZEI),Y
537 RTS
538 ;
539 ZAHL NOP;MERKER FUER KONFIGURATION
540 ZWEI NOP;=1 WENN MEHR O.RAM USED
541 SAVE NOP
542 *= *+25
543 ;
544 ;VERAENDERUNG DES GARBAGEEINSPRUNGS
545 ;UND EVENTUELL DES BETRIEBSSYSTEMS
546 GAR =$B526
547 EINBIND LDA #$20;JSR ANFANG U. RTS
548 STA GAR
549 LDA #<ANFANG
550 STA GAR+1
551 LDA #>ANFANG
552 STA GAR+2
553 LDA #$60
554 STA GAR+3
555 RTS