garbage collector seems to work now
This commit is contained in:
1 parent
50a28c2da9
commit
db1c658a13
1 file changed
+30
-13
@@ -39,24 +39,24 @@ varstr_garbage_collect:
|
|||||||
|
|
||||||
varstr_garbage_collect_loop:
|
varstr_garbage_collect_loop:
|
||||||
|
|
||||||
// Check if this was the last (lowest) string (if FRETOP+INDEX == TXTPTR), use OLDTXT as temporary storage
|
// Check if this was the last (lowest) string (if FRETOP == TXTPTR)
|
||||||
|
|
||||||
|
lda FRETOP+1
|
||||||
|
cmp TXTPTR+1
|
||||||
|
bne varstr_garbage_collect_check_bptr
|
||||||
|
lda FRETOP+0
|
||||||
|
cmp TXTPTR+0
|
||||||
|
bne varstr_garbage_collect_check_bptr
|
||||||
|
|
||||||
|
// End of strings - adapt FRETOP
|
||||||
|
|
||||||
clc
|
clc
|
||||||
lda INDEX+0
|
lda INDEX+0
|
||||||
adc FRETOP+0
|
adc FRETOP+0
|
||||||
sta OLDTXT+0
|
sta FRETOP+0
|
||||||
lda INDEX+1
|
lda INDEX+1
|
||||||
adc FRETOP+1
|
adc FRETOP+1
|
||||||
sta OLDTXT+1
|
sta FRETOP+1
|
||||||
|
|
||||||
lda TXTPTR+0
|
|
||||||
cmp OLDTXT+0
|
|
||||||
bne varstr_garbage_collect_check_bptr
|
|
||||||
lda TXTPTR+1
|
|
||||||
cmp OLDTXT+1
|
|
||||||
bne varstr_garbage_collect_check_bptr
|
|
||||||
|
|
||||||
// End of strings - nothing more to do
|
|
||||||
|
|
||||||
// FALLTROUGH
|
// FALLTROUGH
|
||||||
|
|
||||||
@@ -114,7 +114,7 @@ varstr_garbage_collect_check_bptr:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
ora OLDTXT+0
|
ora OLDTXT+0
|
||||||
beq varstr_garbage_collect_unused
|
beq_16 varstr_garbage_collect_unused
|
||||||
|
|
||||||
// The back-pointer is not NULL - string is used
|
// The back-pointer is not NULL - string is used
|
||||||
|
|
||||||
@@ -275,6 +275,23 @@ varstr_garbage_collect_check_bptr:
|
|||||||
|
|
||||||
jsr varstr_TXTPTR_down_A
|
jsr varstr_TXTPTR_down_A
|
||||||
|
|
||||||
|
// Check if variable descriptor in __FAC1 matches the previously moved string;
|
||||||
|
// if so - adapt it too
|
||||||
|
|
||||||
|
lda __FAC1+2
|
||||||
|
cmp TXTPTR+1
|
||||||
|
bne !+
|
||||||
|
lda __FAC1+1
|
||||||
|
cmp TXTPTR+0
|
||||||
|
bne !+
|
||||||
|
|
||||||
|
clc
|
||||||
|
adc INDEX+0
|
||||||
|
sta __FAC1+1
|
||||||
|
lda __FAC1+2
|
||||||
|
adc INDEX+1
|
||||||
|
sta __FAC1+2
|
||||||
|
!:
|
||||||
// Next iteration
|
// Next iteration
|
||||||
|
|
||||||
jmp varstr_garbage_collect_loop
|
jmp varstr_garbage_collect_loop
|
||||||
|
|||||||
Reference in new issue
Block a user