home *** CD-ROM | disk | FTP | other *** search
/ 64'er 1986 February / 64er_Magazin_86-02_1986_Markt__Technik_de.d64 / garbage64quell (.txt) < prev    next >
Commodore BASIC  |  2022-10-26  |  8KB  |  459 lines

  1. 10 sys9*4096
  2. 20 .opt p,oo
  3. 30 *= $c700
  4. 100 ; **** garbage collection ****
  5. 101 ;
  6. 102 ;definition der hilfszeiger
  7. 103 lazei =$45;laufzeiger d.deskriptoren
  8. 104 romzei =$47;laufzeiger unter rom
  9. 105 strizei =$49;hilfszeiger f. string
  10. 106 mezei =$4b;letzter platz oberes rom
  11. 107 neuzei =$4d;stringbereichslaufzeiger
  12. 108 feldend =$4f;hilfzeiger arrayende
  13. 109 strispei =$51;hilfszeiger
  14. 110 subtrah =$53;stringlaengezwischensp.
  15. 111 ;
  16. 112 ;
  17. 113 ;vorbelegung der speicherplaetze
  18. 114 vromzei =$0000;start von romzei
  19. 116 vgrenzei =$df00;grenze+ fuer romzei
  20. 117 vjumpzei =$c000
  21. 118 ;
  22. 119 ; 1. vorbereitung ------------------
  23. 120 ;
  24. 121 anfang sei;interrupts verhindern
  25. 122 pha;prozessorregister retten
  26. 123 tya
  27. 124 pha
  28. 125 txa
  29. 126 pha
  30. 127 lda 1;speicherkonfiguration retten
  31. 128 sta zahl
  32. 129 lda #46;kontrollanzeige bildschirm
  33. 130 sta 2023
  34. 131 lda #9
  35. 132 sta 56295
  36. 133 ldy #20;benoetigte speicher retten
  37. 134 ret lda $44,y
  38. 135 sta save,y
  39. 136 dey
  40. 137 bne ret
  41. 138 lda #55;auf rom umschalten
  42. 139 sta 1
  43. 140 lda 45;variablenstart nach lazei
  44. 141 sta lazei
  45. 142 lda 46
  46. 143 sta lazei+1
  47. 144 ;
  48. 145 lda #<vromzei;$ffff+1 nach romzei
  49. 146 sta romzei
  50. 147 lda #>vromzei
  51. 148 sta romzei+1
  52. 149 ;
  53. 150 lda #0;mezei vorbelegen
  54. 151 sta mezei
  55. 152 sta mezei+1
  56. 153 sta zwei
  57. 154 ;
  58. 155 lda 55;durchl.zeiger f.stringbereich
  59. 156 sta neuzei
  60. 157 lda 56
  61. 158 sta neuzei+1
  62. 159 ;
  63. 160 ;
  64. 161 ;2. variablenbereich ---------------
  65. 162 ;                                   600
  66. 163 vovorn lda lazei;schon ende variable
  67. 164 cmp 47
  68. 165 bne wei1
  69. 166 lda lazei+1
  70. 167 cmp 48
  71. 168 beq felder
  72. 169 ;
  73. 170 wei1 ldy #0;stringvariable j/n
  74. 171 lda (lazei),y
  75. 172 asl
  76. 173 bcs la7;keine stringvariable
  77. 174 iny
  78. 175 lda (lazei),y
  79. 176 asl
  80. 177 bcc la7;keine stringvariable
  81. 178 ;
  82. 179 clc;lazei=lazei+2;stringvariable
  83. 180 lda #2
  84. 181 adc lazei
  85. 182 sta lazei
  86. 183 bcc wei2
  87. 184 inc lazei+1
  88. 185 ;
  89. 186 ;
  90. 187 wei2 ldy #0
  91. 188 lda (lazei),y;leerstring j/n
  92. 189 beq la5
  93. 190 ;
  94. 191 ldy #2;descriptor in str.bereich j/n
  95. 192 lda (lazei),y
  96. 193 cmp 52
  97. 194 bcc la5;hb 52 > als descriptor hb
  98. 195 bne wei3;hb 52 <> hb deskriptor=ok
  99. 196 dey
  100. 197 lda (lazei),y
  101. 198 cmp 51
  102. 199 bcc la5;lb 51 > lb des,hb 52 =hb des
  103. 200 ;
  104. 201 wei3 jsr abspei
  105. 202 ;
  106. 203 la5 clc;lazei um 5 erhoehen
  107. 204 lda #5
  108. 205 adc lazei
  109. 206 sta lazei
  110. 207 bcc l1
  111. 208 inc lazei+1
  112. 209 l1 jmp vovorn
  113. 210 ;
  114. 211 la7 clc;lazei um 7 erhoehen
  115. 212 lda #7
  116. 213 adc lazei
  117. 214 sta lazei
  118. 215 bcc l2
  119. 216 inc lazei+1
  120. 217 l2 jmp vovorn
  121. 218 ;
  122. 219 ;
  123. 220 ;
  124. 221 ;3. arraybereich -------------------
  125. 222 ;
  126. 223 felder lda lazei;arraybereichendej/n
  127. 224 cmp 49
  128. 225 bne wei11
  129. 226 lda lazei+1
  130. 227 cmp 50
  131. 228 bne wei11
  132. 229 jmp ramun
  133. 230 ;
  134. 231 wei11 ldy #0;stringfeld j/n
  135. 232 lda (lazei),y
  136. 233 asl
  137. 234 bcs lastrl;kein stringfeld
  138. 235 iny
  139. 236 lda (lazei),y
  140. 237 asl
  141. 238 bcc lastrl;kein stringfeld
  142. 239 ;
  143. 240 ;
  144. 241 ;
  145. 242 ;stringfeld
  146. 243 ldy #3;errechnen feldende
  147. 244 lda (lazei),y
  148. 245 pha
  149. 246 dey
  150. 247 clc
  151. 248 lda (lazei),y
  152. 249 adc lazei
  153. 250 sta feldend
  154. 251 pla
  155. 252 adc lazei+1
  156. 253 sta feldend+1
  157. 254 ;
  158. 255 ldy #4;anzahl der dimensionen nach y
  159. 256 lda (lazei),y
  160. 257 tay
  161. 258 ;
  162. 259 lda #5;lazei auf 1. descriptor
  163. 260 clc;lazei um 5 erhoehen
  164. 261 adc lazei
  165. 262 sta lazei
  166. 263 bcc wei14
  167. 264 inc lazei+1
  168. 265 ;
  169. 266 ;
  170. 267 wei14 lda #2;lazei + dimens.anzahl*2
  171. 268 clc
  172. 269 adc lazei
  173. 270 sta lazei
  174. 271 bcc wei15
  175. 272 inc lazei+1
  176. 273 wei15 dey
  177. 274 bne wei14
  178. 275 ;
  179. 276 vuvurn lda lazei;feldende j/n
  180. 277 cmp feldend
  181. 278 bne wei16
  182. 279 lda lazei+1
  183. 280 cmp feldend+1
  184. 281 beq felder
  185. 282 ;
  186. 283 wei16 lda (lazei),y;string leer j/n
  187. 284 beq la3
  188. 285 ;
  189. 286 ldy #2;descriptor im str.bereich j/n
  190. 287 lda (lazei),y
  191. 288 cmp 52
  192. 289 bcc la3
  193. 290 bne wei17
  194. 291 dey
  195. 292 lda (lazei),y
  196. 293 cmp 51
  197. 294 bcc la3
  198. 295 wei17 jsr abspei
  199. 296 ;
  200. 297 la3 clc;lazei um 3 erhoehen
  201. 298 lda #3
  202. 299 adc lazei
  203. 300 sta lazei
  204. 301 bcc wei18
  205. 302 inc lazei+1
  206. 303 wei18 jmp vuvurn
  207. 304 ;
  208. 305 lastrl ldy #3;lazei + arraylaenge
  209. 306 lda (lazei),y
  210. 307 pha
  211. 308 dey
  212. 309 lda (lazei),y
  213. 310 clc
  214. 311 adc lazei
  215. 312 sta lazei
  216. 313 pla
  217. 314 adc lazei+1
  218. 315 sta lazei+1
  219. 316 jmp felder
  220. 317 ;
  221. 318 ;
  222. 319 ;
  223. 320 ;
  224. 321 ;4. ram unter rom nach variable ----
  225. 322 ;
  226. 323 ramun lda romzei;waren strings da
  227. 324 cmp #<vromzei
  228. 325 bne rumun
  229. 326 lda romzei+1
  230. 327 cmp #>vromzei
  231. 328 bne rumun
  232. 329 jmp ende
  233. 330 ;
  234. 331 rumun lda #53;auf rom schalten
  235. 332 sta 1
  236. 333 lda neuzei;stringbeginnszeiger neu
  237. 334 sta 51
  238. 335 lda neuzei+1
  239. 336 sta 52
  240. 337 ;
  241. 338 lda zwei;war unteres ram in use j/n
  242. 339 bne dopp
  243. 340 ;
  244. 341 lda romzei;nur 1.bereich romzei-ffff
  245. 342 sta strispei;subroutinevorbelegung
  246. 343 lda romzei+1
  247. 344 sta strispei+1
  248. 345 lda #<vromzei-1
  249. 346 sta lazei
  250. 347 lda #>vromzei-1
  251. 348 sta lazei+1
  252. 349 ;
  253. 350 jsr speistri;umspeicherungsroutine
  254. 351 ;
  255. 352 jmp romneu
  256. 353 ;
  257. 354 ;
  258. 355 dopp lda romzei;1.und 2. benutzt
  259. 356 sta strispei;subroutinevorbelegung
  260. 357 lda romzei+1
  261. 358 sta strispei+1
  262. 359 lda #<vjumpzei-1
  263. 360 sta lazei
  264. 361 lda #>vjumpzei-1
  265. 362 sta lazei+1
  266. 363 ;
  267. 364 jsr speistri;umspeicherroutine
  268. 365 ;
  269. 366 lda mezei;subroutinevorbelegung
  270. 367 sta strispei
  271. 368 lda mezei+1
  272. 369 sta strispei+1
  273. 370 lda #<vromzei-1
  274. 371 sta lazei
  275. 372 lda #>vromzei-1
  276. 373 sta lazei+1
  277. 374 ;
  278. 375 jsr speistri;umspeicherroutine
  279. 376 jmp romneu
  280. 377 ;
  281. 378 ;
  282. 379 ;
  283. 380 ;
  284. 381 speistri ldy #0;kopier v strispei
  285. 382 ;- lazei nach neuzei aufwaerts
  286. 383 wida lda (strispei),y
  287. 384 sta (neuzei),y
  288. 385 lda lazei
  289. 386 cmp strispei
  290. 387 bne w21
  291. 388 lda lazei+1
  292. 389 cmp strispei+1
  293. 390 bne w21
  294. 391 beq w24
  295. 392 w21 inc neuzei
  296. 393 bne w22
  297. 394 inc neuzei+1
  298. 395 w22 inc strispei
  299. 396 bne wida
  300. 397 inc strispei+1
  301. 398 w23 jmp wida
  302. 399 ;
  303. 400 w24 inc neuzei
  304. 401 bne w25
  305. 402 inc neuzei+1
  306. 403 w25 rts
  307. 404 ;
  308. 405 ;
  309. 406 ;
  310. 407 ;5. rom neu ins ram kopieren -------
  311. 408 ;
  312. 409 romneu lda zahl;eingebunden j/n
  313. 410 cmp #55
  314. 411 beq ende;laeuft im rom
  315. 412 jsr rumneu
  316. 413 jmp ende
  317. 414 ;
  318. 415 lda #1;hier extraeinsprung von basic
  319. 416 sta zwei
  320. 417 jsr rumneu
  321. 418 lda #53
  322. 419 sta 1
  323. 420 rts
  324. 421 ;
  325. 422 rumneu lda #55;auf rom umschalten
  326. 423 sta 1
  327. 424 ;
  328. 425 lda #$00
  329. 426 sta lazei
  330. 427 lda #$e0
  331. 428 sta lazei+1
  332. 429 jsr copi
  333. 430 ;
  334. 431 lda zwei;unt. rom auch zu kopieren
  335. 432 beq end
  336. 433 lda #$00
  337. 434 sta lazei
  338. 435 lda #$a0
  339. 436 sta lazei+1
  340. 437 jsr copi
  341. 438 end jsr einbind
  342. 439 rts
  343. 440 ;
  344. 441 ;
  345. 442 copi ldx #32;8k rom in ram kopieren
  346. 443 ldy #0
  347. 444 agein lda (lazei),y
  348. 445 sta (lazei),y
  349. 446 iny
  350. 447 bne agein
  351. 448 inc lazei+1
  352. 449 dex
  353. 450 bne agein
  354. 451 rts
  355. 452 ;
  356. 453 ;6. ende ---------------------------
  357. 454 ;
  358. 455 ende ldy #20;speicher rueckretten
  359. 456 rot lda save,y
  360. 457 sta $44,y
  361. 458 dey
  362. 459 bne rot
  363. 460 lda #32;kontrollanzeige loeschen
  364. 461 sta 2023
  365. 462 lda zahl;alte speicherkonfiguration
  366. 463 sta 1
  367. 464 pla;prozessorinhalte wiederholen
  368. 465 tax
  369. 466 pla
  370. 467 tay
  371. 468 pla
  372. 469 cli;interrupts wieder erlaubt
  373. 470 rts
  374. 471 ;
  375. 472 ;
  376. 473 ;subroutinen -----------------------
  377. 474 ;
  378. 475 ;unterprogramm, das den string, auf
  379. 476 ;dessen deskpriptor lazei steht,un-
  380. 477 ;terhalb romzei abspeichert und die
  381. 478 ;positionsangabe des deskr. relativ
  382. 479 ;zum richt. stringber. aktualisiert
  383. 480 ;
  384. 481 abspei ldy #2;stringadr. in strizei
  385. 482 lda (lazei),y;laenge in y und stack
  386. 483 sta strizei+1
  387. 484 dey
  388. 485 lda (lazei),y
  389. 486 sta strizei
  390. 487 dey
  391. 488 lda (lazei),y
  392. 489 sta subtrah
  393. 490 tay
  394. 491 ;
  395. 492 ogain lda romzei;romzei-stringlaenge
  396. 493 sec
  397. 494 sbc subtrah
  398. 495 sta romzei
  399. 496 bcs etz
  400. 497 dec romzei+1
  401. 498 lda romzei+1
  402. 499 cmp #>vgrenzei
  403. 500 bne etz
  404. 501 ;
  405. 502 lda #1;o.ram voll,romzei+ynach mezei
  406. 503 sta zwei
  407. 504 tya
  408. 505 clc
  409. 506 adc romzei
  410. 507 sta mezei
  411. 508 bcc wtr
  412. 509 inc romzei+1
  413. 510 wtr lda romzei+1
  414. 511 sta mezei+1
  415. 512 lda #<vjumpzei;romzei auf  c000
  416. 513 sta romzei
  417. 514 lda #>vjumpzei
  418. 515 sta romzei+1
  419. 516 jmp ogain
  420. 517 ;
  421. 518 etz dey;string unters rom speichern
  422. 519 noml lda (strizei),y
  423. 520 sta (romzei),y
  424. 521 dey
  425. 522 cpy #255
  426. 523 bne noml
  427. 524 ;
  428. 525 ;
  429. 526 ldy #1;neuzei-str.laenge=deskriptor
  430. 527 lda neuzei
  431. 528 sec
  432. 529 sbc subtrah
  433. 530 sta neuzei
  434. 531 sta (lazei),y
  435. 532 bcs waidr
  436. 533 dec neuzei+1
  437. 534 waidr iny
  438. 535 lda neuzei+1
  439. 536 sta (lazei),y
  440. 537 rts
  441. 538 ;
  442. 539 zahl nop;merker fuer konfiguration
  443. 540 zwei nop;=1 wenn mehr o.ram used
  444. 541 save nop
  445. 542 *= *+25
  446. 543 ;
  447. 544 ;veraenderung des garbageeinsprungs
  448. 545 ;und eventuell des betriebssystems
  449. 546 gar =$b526
  450. 547 einbind lda #$20;jsr anfang u. rts
  451. 548 sta gar
  452. 549 lda #<anfang
  453. 550 sta gar+1
  454. 551 lda #>anfang
  455. 552 sta gar+2
  456. 553 lda #$60
  457. 554 sta gar+3
  458. 555 rts
  459.